From 28fa6046ba589b5eb746c373374d5d3a70497f09 Mon Sep 17 00:00:00 2001 From: Daniel Valdivia <18384552+dvaldivia@users.noreply.github.com> Date: Fri, 5 Jul 2024 12:43:54 -0600 Subject: [PATCH 01/11] Remove Reclaim Storage (#2203) Signed-off-by: Daniel Valdivia <18384552+dvaldivia@users.noreply.github.com> --- docs/tenant-storage-deletion.md | 21 +- docs/tenant_crd.adoc | 341 ++++++++---------- .../templates/minio.min.io_tenants.yaml | 2 - .../templates/operator-clusterrole.yaml | 1 - pkg/apis/minio.min.io/v2/types.go | 5 - .../minio.min.io/v2/zz_generated.deepcopy.go | 5 - .../minio.min.io/v2/pool.go | 9 - pkg/controller/main-controller.go | 20 - .../statefulsets/minio-statefulset.go | 8 - resources/base/cluster-role.yaml | 1 - resources/base/crds/minio.min.io_tenants.yaml | 2 - 11 files changed, 170 insertions(+), 245 deletions(-) diff --git a/docs/tenant-storage-deletion.md b/docs/tenant-storage-deletion.md index 007e3a70d3f..c411b374fd2 100644 --- a/docs/tenant-storage-deletion.md +++ b/docs/tenant-storage-deletion.md @@ -1,10 +1,17 @@ -# When one-time storage is required +# Tenant Storage Deletion -There are times when we need to do tests, and once the tests are done, we need to clean up the storage immediately. We can do the following configuration +Deleting a tenant's storage in Kubernetes is a sensitive and controversial issue. On one hand, some users may want to +delete storage in CI/CD scenarios. On the other hand, if configured in production environments and forgotten, it risks +potential data loss. -```$xslt - - name: pool-0 - reclaimStorage: true -``` +Kubernetes does not automatically delete Persistent Volume Claims (PVCs) when a StatefulSet is deleted, due to the risk +involved. This decision is left to the user. The MinIO Operator adheres to this practice as well. -When a tenant is deleted, the associated pvc is also deleted immediately. \ No newline at end of file +To delete a tenant's storage, you should manually delete the PVCs associated with the tenant. This can be done via +kubectl at the same time you are deleting the tenant. For example, to delete a tenant named tenant in the namespace +ns-1, run the following commands: + +```bash +kubectl -n ns-1 delete tenant tenant +kubectl -n ns-1 delete pvc -l v1.min.io/tenant=tenant +``` \ No newline at end of file diff --git a/docs/tenant_crd.adoc b/docs/tenant_crd.adoc index 41e2721e2b4..55e4012ed70 100644 --- a/docs/tenant_crd.adoc +++ b/docs/tenant_crd.adoc @@ -12,10 +12,11 @@ [id="{anchor_prefix}-minio-min-io-v2"] === minio.min.io/v2 -Package v2 - This page provides a quick automatically generated reference for the MinIO Operator `minio.min.io/v2` CRD. For more complete documentation on the MinIO Operator CRD, see https://min.io/docs/minio/kubernetes/upstream/index.html[MinIO Kubernetes Documentation]. + - -The `minio.min.io/v2` API was released with the v4.0.0 MinIO Operator. The MinIO Operator automatically converts existing tenants using the `/v1` API to `/v2`. + +Package v2 - This page provides a quick automatically generated reference for the MinIO Operator `minio.min.io/v2` CRD. +For more complete documentation on the MinIO Operator CRD, see https://min.io/docs/minio/kubernetes/upstream/index.html[MinIO Kubernetes Documentation]. + +The `minio.min.io/v2` API was released with the v4.0.0 MinIO Operator. +The MinIO Operator automatically converts existing tenants using the `/v1` API to `/v2`. + .Resource Types - xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-tenant[$$Tenant$$] @@ -34,49 +35,49 @@ Bucket describes the default created buckets - xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-tenantspec[$$TenantSpec$$] **** -[cols="25a,75a", options="header"] +[cols="25a,75a",options="header"] |=== | Field | Description -|*`name`* __string__ +|*`name`* __string__ | -|*`region`* __string__ +|*`region`* __string__ | -|*`objectLock`* __boolean__ +|*`objectLock`* __boolean__ | |=== - [id="{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-certificateconfig"] ==== CertificateConfig -CertificateConfig (`certConfig`) defines controlling attributes associated to any TLS certificate automatically generated by the Operator as part of tenant creation. These fields have no effect if `spec.autoCert: false`. +CertificateConfig (`certConfig`) defines controlling attributes associated to any TLS certificate automatically generated by the Operator as part of tenant creation. +These fields have no effect if `spec.autoCert: false`. .Appears In: **** - xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-tenantspec[$$TenantSpec$$] **** -[cols="25a,75a", options="header"] +[cols="25a,75a",options="header"] |=== | Field | Description -|*`commonName`* __string__ +|*`commonName`* __string__ |*Optional* + The `CommonName` or `CN` attribute to associate to automatically generated TLS certificates. + -|*`organizationName`* __string array__ +|*`organizationName`* __string array__ |*Optional* + Specify one or more `OrganizationName` or `O` attributes to associate to automatically generated TLS certificates. + -|*`dnsNames`* __string array__ +|*`dnsNames`* __string array__ |*Optional* + @@ -84,7 +85,6 @@ Specify one or more x.509 Subject Alternative Names (SAN) to associate to automa |=== - [id="{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-certificatestatus"] ==== CertificateStatus @@ -95,58 +95,58 @@ CertificateStatus keeps track of all the certificates managed by the operator - xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-tenantstatus[$$TenantStatus$$] **** -[cols="25a,75a", options="header"] +[cols="25a,75a",options="header"] |=== | Field | Description -|*`autoCertEnabled`* __boolean__ +|*`autoCertEnabled`* __boolean__ |AutoCertEnabled registers whether we know if the tenant has autocert enabled -|*`customCertificates`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-customcertificates[$$CustomCertificates$$]__ +|*`customCertificates`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-customcertificates[$$CustomCertificates$$]__ |Provides the output of the `client`, `minio`, and`minioCAs` custom TLS certificates manually added to the Operator. |=== - [id="{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-customcertificateconfig"] ==== CustomCertificateConfig -CustomCertificateConfig (`customCertificateConfig`) provides attributes associated of the TLS certificates manually added to the Operator as part of tenant creation. These fields contain no data if there are no custom TLS certificates. +CustomCertificateConfig (`customCertificateConfig`) provides attributes associated of the TLS certificates manually added to the Operator as part of tenant creation. +These fields contain no data if there are no custom TLS certificates. .Appears In: **** - xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-customcertificates[$$CustomCertificates$$] **** -[cols="25a,75a", options="header"] +[cols="25a,75a",options="header"] |=== | Field | Description -|*`certName`* __string__ +|*`certName`* __string__ |*Optional* + Output one or more `CertName` attributes associated with the manually provided TLS certificates. + -|*`domains`* __string array__ +|*`domains`* __string array__ |*Optional* + Output one or more `Domains` attributes associated with the manually provided TLS certificates. + -|*`expiry`* __string__ +|*`expiry`* __string__ |*Optional* + Output one or more `Expiry` attributes associated with the manually provided TLS certificates. + -|*`expiresIn`* __string__ +|*`expiresIn`* __string__ |*Optional* + Output one or more `ExpiresIn` attributes associated with the manually provided TLS certificates. + -|*`serialNo`* __string__ +|*`serialNo`* __string__ |*Optional* + @@ -154,34 +154,34 @@ Output one or more `SerialNo` attributes associated with the manually provided T |=== - [id="{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-customcertificates"] ==== CustomCertificates -CustomCertificates (`customCertificates`) provides groupings of the TLS certificates manually added to the Operator as part of tenant creation. These fields contain no data if there are no custom TLS certificates. +CustomCertificates (`customCertificates`) provides groupings of the TLS certificates manually added to the Operator as part of tenant creation. +These fields contain no data if there are no custom TLS certificates. .Appears In: **** - xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-certificatestatus[$$CertificateStatus$$] **** -[cols="25a,75a", options="header"] +[cols="25a,75a",options="header"] |=== | Field | Description -|*`client`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-customcertificateconfig[$$CustomCertificateConfig$$] array__ +|*`client`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-customcertificateconfig[$$CustomCertificateConfig$$] array__ |*Optional* + Client -|*`minio`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-customcertificateconfig[$$CustomCertificateConfig$$] array__ +|*`minio`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-customcertificateconfig[$$CustomCertificateConfig$$] array__ |*Optional* + Minio -|*`minioCAs`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-customcertificateconfig[$$CustomCertificateConfig$$] array__ +|*`minioCAs`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-customcertificateconfig[$$CustomCertificateConfig$$] array__ |*Optional* + @@ -189,7 +189,6 @@ Certificate Authorities |=== - [id="{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-exposeservices"] ==== ExposeServices @@ -200,17 +199,17 @@ ExposeServices (`exposeServices`) defines the exposure of the MinIO object stora - xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-tenantspec[$$TenantSpec$$] **** -[cols="25a,75a", options="header"] +[cols="25a,75a",options="header"] |=== | Field | Description -|*`minio`* __boolean__ +|*`minio`* __boolean__ |*Optional* + Directs the Operator to expose the MinIO service. Defaults to `false`. + -|*`console`* __boolean__ +|*`console`* __boolean__ |*Optional* + @@ -218,7 +217,6 @@ Directs the Operator to expose the MinIO Console service. Defaults to `false`. + |=== - [id="{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-features"] ==== Features @@ -229,23 +227,23 @@ Features (`features`) - Object describing which MinIO features to enable/disable - xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-tenantspec[$$TenantSpec$$] **** -[cols="25a,75a", options="header"] +[cols="25a,75a",options="header"] |=== | Field | Description -|*`bucketDNS`* __boolean__ +|*`bucketDNS`* __boolean__ |*Optional* + Specify `true` to allow clients to access buckets using the DNS path `.minio.default.svc.cluster.local`. Defaults to `false`. -|*`domains`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-tenantdomains[$$TenantDomains$$]__ +|*`domains`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-tenantdomains[$$TenantDomains$$]__ |*Optional* + Specify a list of domains used to access MinIO and Console. -|*`enableSFTP`* __boolean__ +|*`enableSFTP`* __boolean__ |*Optional* + @@ -253,7 +251,6 @@ Starts minio server with SFTP support |=== - [id="{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-healthstatus"] ==== HealthStatus (string) @@ -264,35 +261,34 @@ HealthStatus represents whether the tenant is healthy, with decreased service or - xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-tenantstatus[$$TenantStatus$$] **** - - [id="{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-kesconfig"] ==== KESConfig -KESConfig (`kes`) defines the configuration of the https://github.com/minio/kes[MinIO Key Encryption Service] (KES) StatefulSet deployed as part of the MinIO Tenant. KES supports Server-Side Encryption of objects using an external Key Management Service (KMS). + +KESConfig (`kes`) defines the configuration of the https://github.com/minio/kes[MinIO Key Encryption Service] (KES) StatefulSet deployed as part of the MinIO Tenant. +KES supports Server-Side Encryption of objects using an external Key Management Service (KMS). + .Appears In: **** - xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-tenantspec[$$TenantSpec$$] **** -[cols="25a,75a", options="header"] +[cols="25a,75a",options="header"] |=== | Field | Description -|*`replicas`* __integer__ +|*`replicas`* __integer__ |*Optional* + Specify the number of replica KES pods to deploy in the tenant. Defaults to `2`. -|*`image`* __string__ +|*`image`* __string__ |*Optional* + The Docker image to use for deploying MinIO KES. Defaults to {kes-image}. + -|*`imagePullPolicy`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#pullpolicy-v1-core[$$PullPolicy$$]__ +|*`imagePullPolicy`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#pullpolicy-v1-core[$$PullPolicy$$]__ |*Optional* + @@ -310,13 +306,13 @@ The pull policy for the MinIO Docker image. Specify one of the following: + Refer to the Kubernetes documentation for details https://kubernetes.io/docs/concepts/containers/images#updating-images -|*`serviceAccountName`* __string__ +|*`serviceAccountName`* __string__ |*Optional* + The https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/[Kubernetes Service Account] to use for running MinIO KES pods created as part of the Tenant. + -|*`kesSecret`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#localobjectreference-v1-core[$$LocalObjectReference$$]__ +|*`kesSecret`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#localobjectreference-v1-core[$$LocalObjectReference$$]__ |*Required* + @@ -325,7 +321,7 @@ Specify a https://kubernetes.io/docs/concepts/configuration/secret/[Kubernetes o See the https://github.com/minio/operator/blob/master/examples/kes-secret.yaml[MinIO Operator `console-secret.yaml`] for an example. -|*`externalCertSecret`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-localcertificatereference[$$LocalCertificateReference$$]__ +|*`externalCertSecret`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-localcertificatereference[$$LocalCertificateReference$$]__ |*Optional* + @@ -346,7 +342,7 @@ Specify an object containing the following fields: + See the https://min.io/docs/minio/kubernetes/upstream/operations/install-deploy-manage/deploy-minio-tenant.html#procedure-command-line[MinIO Operator CRD] reference for examples and more complete documentation on configuring TLS for MinIO Tenants. -|*`clientCertSecret`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-localcertificatereference[$$LocalCertificateReference$$]__ +|*`clientCertSecret`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-localcertificatereference[$$LocalCertificateReference$$]__ |*Optional* + @@ -361,37 +357,37 @@ Specify an object containing the following fields: + * - `type` - Specify `kubernetes.io/tls` + -|*`gcpCredentialSecretName`* __string__ +|*`gcpCredentialSecretName`* __string__ |*Optional* + Specify the GCP default credentials to be used for KES to authenticate to GCP key store -|*`gcpWorkloadIdentityPool`* __string__ +|*`gcpWorkloadIdentityPool`* __string__ |*Optional* + Specify the name of the workload identity pool (This is required for generating service account token) -|*`annotations`* __object (keys:string, values:string)__ +|*`annotations`* __object (keys:string, values:string)__ |*Optional* + If provided, use these annotations for KES Object Meta annotations -|*`labels`* __object (keys:string, values:string)__ +|*`labels`* __object (keys:string, values:string)__ |*Optional* + If provided, use these labels for KES Object Meta labels -|*`resources`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core[$$ResourceRequirements$$]__ +|*`resources`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core[$$ResourceRequirements$$]__ |*Optional* + Object specification for specifying CPU and memory https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/[resource allocations] or limits in the MinIO tenant. + -|*`nodeSelector`* __object (keys:string, values:string)__ +|*`nodeSelector`* __object (keys:string, values:string)__ |*Optional* + @@ -400,31 +396,31 @@ The filter for the Operator to apply when selecting which nodes on which to depl See the Kubernetes documentation on https://kubernetes.io/docs/concepts/configuration/assign-pod-node/[Assigning Pods to Nodes] for more information. -|*`tolerations`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#toleration-v1-core[$$Toleration$$] array__ +|*`tolerations`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#toleration-v1-core[$$Toleration$$] array__ |*Optional* + Specify one or more https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/[Kubernetes tolerations] to apply to MinIO KES pods. -|*`affinity`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#affinity-v1-core[$$Affinity$$]__ +|*`affinity`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#affinity-v1-core[$$Affinity$$]__ |*Optional* + Specify node affinity, pod affinity, and pod anti-affinity for the KES pods. + -|*`topologySpreadConstraints`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#topologyspreadconstraint-v1-core[$$TopologySpreadConstraint$$] array__ +|*`topologySpreadConstraints`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#topologyspreadconstraint-v1-core[$$TopologySpreadConstraint$$] array__ |*Optional* + Specify one or more https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/[Kubernetes Topology Spread Constraints] to apply to pods deployed in the MinIO pool. -|*`keyName`* __string__ +|*`keyName`* __string__ |*Optional* + If provided, use this as the name of the key that KES creates on the KMS backend -|*`securityContext`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core[$$PodSecurityContext$$]__ +|*`securityContext`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core[$$PodSecurityContext$$]__ |Specify the https://kubernetes.io/docs/tasks/configure-pod-container/security-context/[Security Context] of MinIO KES pods. The Operator supports only the following pod security fields: + @@ -445,10 +441,10 @@ If provided, use this as the name of the key that KES creates on the KMS backend * `seLinuxOptions` + -|*`containerSecurityContext`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core[$$SecurityContext$$]__ +|*`containerSecurityContext`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core[$$SecurityContext$$]__ |Specify the https://kubernetes.io/docs/tasks/configure-pod-container/security-context/[Security Context] of MinIO KES pods. -|*`env`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#envvar-v1-core[$$EnvVar$$] array__ +|*`env`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#envvar-v1-core[$$EnvVar$$] array__ |*Optional* + @@ -456,7 +452,6 @@ If provided, the MinIO Operator adds the specified environment variables when de |=== - [id="{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-localcertificatereference"] ==== LocalCertificateReference @@ -468,17 +463,17 @@ LocalCertificateReference (`externalCertSecret`, `externalCaCertSecret`,`clientC - xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-tenantspec[$$TenantSpec$$] **** -[cols="25a,75a", options="header"] +[cols="25a,75a",options="header"] |=== | Field | Description -|*`name`* __string__ +|*`name`* __string__ |*Required* + The name of the Kubernetes secret containing the TLS certificate or Certificate Authority file. + -|*`type`* __string__ +|*`type`* __string__ |*Required* + @@ -486,7 +481,6 @@ The type of Kubernetes secret. Specify `kubernetes.io/tls` + |=== - [id="{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-logging"] ==== Logging @@ -497,27 +491,27 @@ Logging describes Logging for MinIO tenants. - xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-tenantspec[$$TenantSpec$$] **** -[cols="25a,75a", options="header"] +[cols="25a,75a",options="header"] |=== | Field | Description -|*`json`* __boolean__ +|*`json`* __boolean__ | -|*`anonymous`* __boolean__ +|*`anonymous`* __boolean__ | -|*`quiet`* __boolean__ +|*`quiet`* __boolean__ | |=== - [id="{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-pool"] ==== Pool -Pool (`pools`) defines a MinIO server pool on a Tenant. Each pool consists of a set of MinIO server pods which "pool" their storage resources for supporting object storage and retrieval requests. Each server pool is independent of all others and supports horizontal scaling of available storage resources in the MinIO Tenant. + - +Pool (`pools`) defines a MinIO server pool on a Tenant. +Each pool consists of a set of MinIO server pods which "pool" their storage resources for supporting object storage and retrieval requests. +Each server pool is independent of all others and supports horizontal scaling of available storage resources in the MinIO Tenant. + See the https://min.io/docs/minio/kubernetes/upstream/operations/install-deploy-manage/deploy-minio-tenant.html#procedure-command-line[MinIO Operator CRD] reference for the `pools` object for examples and more complete documentation. + @@ -526,15 +520,15 @@ See the https://min.io/docs/minio/kubernetes/upstream/operations/install-deploy- - xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-tenantspec[$$TenantSpec$$] **** -[cols="25a,75a", options="header"] +[cols="25a,75a",options="header"] |=== | Field | Description -|*`name`* __string__ +|*`name`* __string__ |*Required* Specify the name of the pool. The Operator automatically generates the pool name if this field is omitted. -|*`servers`* __integer__ +|*`servers`* __integer__ |*Required* @@ -543,7 +537,7 @@ The number of MinIO server pods to deploy in the pool. The minimum value is `2`. The MinIO Operator requires a minimum of `4` volumes per pool. Specifically, the result of `pools.servers X pools.volumesPerServer` must be greater than `4`. + -|*`volumesPerServer`* __integer__ +|*`volumesPerServer`* __integer__ |*Required* + @@ -552,19 +546,19 @@ The number of Persistent Volume Claims to generate for each MinIO server pod in The MinIO Operator requires a minimum of `4` volumes per pool. Specifically, the result of `pools.servers X pools.volumesPerServer` must be greater than `4`. + -|*`volumeClaimTemplate`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#persistentvolumeclaim-v1-core[$$PersistentVolumeClaim$$]__ +|*`volumeClaimTemplate`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#persistentvolumeclaim-v1-core[$$PersistentVolumeClaim$$]__ |*Required* + Specify the configuration options for the MinIO Operator to use when generating Persistent Volume Claims for the MinIO tenant. + -|*`resources`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core[$$ResourceRequirements$$]__ +|*`resources`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core[$$ResourceRequirements$$]__ |*Optional* + Object specification for specifying CPU and memory https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/[resource allocations] or limits in the MinIO tenant. + -|*`nodeSelector`* __object (keys:string, values:string)__ +|*`nodeSelector`* __object (keys:string, values:string)__ |*Optional* + @@ -573,25 +567,25 @@ The filter for the Operator to apply when selecting which nodes on which to depl See the Kubernetes documentation on https://kubernetes.io/docs/concepts/configuration/assign-pod-node/[Assigning Pods to Nodes] for more information. -|*`affinity`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#affinity-v1-core[$$Affinity$$]__ +|*`affinity`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#affinity-v1-core[$$Affinity$$]__ |*Optional* + Specify node affinity, pod affinity, and pod anti-affinity for pods in the MinIO pool. + -|*`tolerations`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#toleration-v1-core[$$Toleration$$] array__ +|*`tolerations`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#toleration-v1-core[$$Toleration$$] array__ |*Optional* + Specify one or more https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/[Kubernetes tolerations] to apply to pods deployed in the MinIO pool. -|*`topologySpreadConstraints`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#topologyspreadconstraint-v1-core[$$TopologySpreadConstraint$$] array__ +|*`topologySpreadConstraints`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#topologyspreadconstraint-v1-core[$$TopologySpreadConstraint$$] array__ |*Optional* + Specify one or more https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/[Kubernetes Topology Spread Constraints] to apply to pods deployed in the MinIO pool. -|*`securityContext`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core[$$PodSecurityContext$$]__ +|*`securityContext`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core[$$PodSecurityContext$$]__ |*Optional* + @@ -612,7 +606,7 @@ Specify the https://kubernetes.io/docs/tasks/configure-pod-container/security-co * `runAsUser` + -|*`containerSecurityContext`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core[$$SecurityContext$$]__ +|*`containerSecurityContext`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core[$$SecurityContext$$]__ |Specify the https://kubernetes.io/docs/tasks/configure-pod-container/security-context/[Security Context] of containers in the pool. The Operator supports only the following container security fields: + @@ -624,7 +618,7 @@ Specify the https://kubernetes.io/docs/tasks/configure-pod-container/security-co * `runAsUser` + -|*`annotations`* __object (keys:string, values:string)__ +|*`annotations`* __object (keys:string, values:string)__ |*Optional* + @@ -634,27 +628,20 @@ Specify custom labels and annotations to append to the Pool. If provided, use these annotations for the Pool Objects Meta annotations (Statefulset and Pod template) -|*`labels`* __object (keys:string, values:string)__ +|*`labels`* __object (keys:string, values:string)__ |*Optional* + If provided, use these labels for the Pool Objects Meta annotations (Statefulset and Pod template) -|*`runtimeClassName`* __string__ +|*`runtimeClassName`* __string__ |*Optional* + If provided, each pod on the Statefulset will run with the specified RuntimeClassName, for more info https://kubernetes.io/docs/concepts/containers/runtime-class/ -|*`reclaimStorage`* __boolean__ -|*Optional* + - - -If true. Will delete the storage when tenant has been deleted. - |=== - [id="{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-poolstate"] ==== PoolState (string) @@ -665,8 +652,6 @@ PoolState represents the state of a pool - xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-poolstatus[$$PoolStatus$$] **** - - [id="{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-poolstatus"] ==== PoolStatus @@ -677,24 +662,23 @@ PoolStatus keeps track of all the pools and their current state - xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-tenantstatus[$$TenantStatus$$] **** -[cols="25a,75a", options="header"] +[cols="25a,75a",options="header"] |=== | Field | Description -|*`ssName`* __string__ +|*`ssName`* __string__ | -|*`state`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-poolstate[$$PoolState$$]__ +|*`state`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-poolstate[$$PoolState$$]__ | -|*`legacySecurityContext`* __boolean__ +|*`legacySecurityContext`* __boolean__ |LegacySecurityContext stands for Legacy SecurityContext. It represents that these pool was created before v4.2.3 when we introduced the default securityContext as non-root, thus we should keep running this Pool without a Security Context |=== - [id="{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-servicemetadata"] ==== ServiceMetadata @@ -705,29 +689,29 @@ ServiceMetadata (`serviceMetadata`) defines custom labels and annotations for th - xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-tenantspec[$$TenantSpec$$] **** -[cols="25a,75a", options="header"] +[cols="25a,75a",options="header"] |=== | Field | Description -|*`minioServiceLabels`* __object (keys:string, values:string)__ +|*`minioServiceLabels`* __object (keys:string, values:string)__ |*Optional* + If provided, append these labels to the MinIO service -|*`minioServiceAnnotations`* __object (keys:string, values:string)__ +|*`minioServiceAnnotations`* __object (keys:string, values:string)__ |*Optional* + If provided, append these annotations to the MinIO service -|*`consoleServiceLabels`* __object (keys:string, values:string)__ +|*`consoleServiceLabels`* __object (keys:string, values:string)__ |*Optional* + If provided, append these labels to the Console service -|*`consoleServiceAnnotations`* __object (keys:string, values:string)__ +|*`consoleServiceAnnotations`* __object (keys:string, values:string)__ |*Optional* + @@ -735,7 +719,6 @@ If provided, append these annotations to the Console service |=== - [id="{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-sidecars"] ==== SideCars @@ -746,17 +729,17 @@ SideCars (`sidecars`) defines a list of containers that the Operator attaches to - xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-tenantspec[$$TenantSpec$$] **** -[cols="25a,75a", options="header"] +[cols="25a,75a",options="header"] |=== | Field | Description -|*`containers`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#container-v1-core[$$Container$$] array__ +|*`containers`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#container-v1-core[$$Container$$] array__ |*Optional* + List of containers to run inside the Pod -|*`volumeClaimTemplates`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#persistentvolumeclaim-v1-core[$$PersistentVolumeClaim$$] array__ +|*`volumeClaimTemplates`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#persistentvolumeclaim-v1-core[$$PersistentVolumeClaim$$] array__ |*Optional* + @@ -767,14 +750,14 @@ this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name. -|*`volumes`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#volume-v1-core[$$Volume$$] array__ +|*`volumes`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#volume-v1-core[$$Volume$$] array__ |*Optional* + List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes -|*`resources`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core[$$ResourceRequirements$$]__ +|*`resources`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core[$$ResourceRequirements$$]__ |*Optional* + @@ -782,7 +765,6 @@ sidecar's Resource, initcontainer will use that if set. |=== - [id="{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-tenant"] ==== Tenant @@ -793,24 +775,24 @@ Tenant is a https://kubernetes.io/docs/concepts/overview/working-with-objects/ku - xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-tenantlist[$$TenantList$$] **** -[cols="25a,75a", options="header"] +[cols="25a,75a",options="header"] |=== | Field | Description -|*`apiVersion`* __string__ +|*`apiVersion`* __string__ |`minio.min.io/v2` -|*`kind`* __string__ +|*`kind`* __string__ |`Tenant` -|*`metadata`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#objectmeta-v1-meta[$$ObjectMeta$$]__ +|*`metadata`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#objectmeta-v1-meta[$$ObjectMeta$$]__ |Refer to Kubernetes API documentation for fields of `metadata`. -|*`scheduler`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-tenantscheduler[$$TenantScheduler$$]__ +|*`scheduler`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-tenantscheduler[$$TenantScheduler$$]__ | -|*`spec`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-tenantspec[$$TenantSpec$$]__ +|*`spec`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-tenantspec[$$TenantSpec$$]__ |*Required* + @@ -818,7 +800,6 @@ The root field for the MinIO Tenant object. |=== - [id="{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-tenantdomains"] ==== TenantDomains @@ -831,23 +812,20 @@ The listed domains should include schema and port if any is used, i.e. https://m - xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-features[$$Features$$] **** -[cols="25a,75a", options="header"] +[cols="25a,75a",options="header"] |=== | Field | Description -|*`minio`* __string array__ +|*`minio`* __string array__ |List of Domains used by MinIO. This will enable DNS style access to the object store where the bucket name is inferred from a subdomain in the domain. -|*`console`* __string__ +|*`console`* __string__ |Domain used to expose the MinIO Console, this will configure the redirect on MinIO when visiting from the browser If Console is exposed via a subpath, the domain should include it, i.e. https://console.domain.com:8123/subpath/ |=== - - - [id="{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-tenantscheduler"] ==== TenantScheduler @@ -858,11 +836,11 @@ TenantScheduler (`scheduler`) - Object describing Kubernetes Scheduler to use fo - xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-tenant[$$Tenant$$] **** -[cols="25a,75a", options="header"] +[cols="25a,75a",options="header"] |=== | Field | Description -|*`name`* __string__ +|*`name`* __string__ |*Optional* + @@ -870,16 +848,13 @@ Specify the name of the https://kubernetes.io/docs/concepts/scheduling-eviction/ |=== - [id="{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-tenantspec"] ==== TenantSpec TenantSpec (`spec`) defines the configuration of a MinIO Tenant object. + - The following parameters are specific to the `minio.min.io/v2` MinIO CRD API `spec` definition added as part of the MinIO Operator v4.0.0. + - For more complete documentation on this object, see the https://min.io/docs/minio/kubernetes/upstream/operations/installation.html[MinIO Kubernetes Documentation]. + .Appears In: @@ -887,11 +862,11 @@ For more complete documentation on this object, see the https://min.io/docs/mini - xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-tenant[$$Tenant$$] **** -[cols="25a,75a", options="header"] +[cols="25a,75a",options="header"] |=== | Field | Description -|*`pools`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-pool[$$Pool$$] array__ +|*`pools`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-pool[$$Pool$$] array__ |*Required* + @@ -903,25 +878,25 @@ The MinIO Tenant `spec` *must have* at least *one* element in the `pools` array. See the https://min.io/docs/minio/kubernetes/upstream/operations/install-deploy-manage/deploy-minio-tenant.html[MinIO Operator CRD] reference for the `pools` object for examples and more complete documentation. -|*`image`* __string__ +|*`image`* __string__ |*Optional* + The Docker image to use when deploying `minio` server pods. Defaults to {minio-image}. + -|*`imagePullSecret`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#localobjectreference-v1-core[$$LocalObjectReference$$]__ +|*`imagePullSecret`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#localobjectreference-v1-core[$$LocalObjectReference$$]__ |*Optional* + Specify the secret key to use for pulling images from a private Docker repository. + -|*`podManagementPolicy`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podmanagementpolicytype-v1-apps[$$PodManagementPolicyType$$]__ +|*`podManagementPolicy`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podmanagementpolicytype-v1-apps[$$PodManagementPolicyType$$]__ |*Optional* + Pod Management Policy for pod created by StatefulSet -|*`credsSecret`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#localobjectreference-v1-core[$$LocalObjectReference$$]__ +|*`credsSecret`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#localobjectreference-v1-core[$$LocalObjectReference$$]__ |*optional* + @@ -933,13 +908,13 @@ Specify a https://kubernetes.io/docs/concepts/configuration/secret/[Kubernetes o * `data.secretkey` - The secret key for the root credentials + -|*`env`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#envvar-v1-core[$$EnvVar$$] array__ +|*`env`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#envvar-v1-core[$$EnvVar$$] array__ |*Optional* + If provided, the MinIO Operator adds the specified environment variables when deploying the Tenant resource. -|*`externalCertSecret`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-localcertificatereference[$$LocalCertificateReference$$] array__ +|*`externalCertSecret`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-localcertificatereference[$$LocalCertificateReference$$] array__ |*Optional* + @@ -960,7 +935,7 @@ Each element in the `externalCertSecret` array is an object containing the follo See the https://min.io/docs/minio/kubernetes/upstream/operations/install-deploy-manage/deploy-minio-tenant.html#create-tenant-security-section[MinIO Operator CRD] reference for examples and more complete documentation on configuring TLS for MinIO Tenants. -|*`externalCaCertSecret`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-localcertificatereference[$$LocalCertificateReference$$] array__ +|*`externalCaCertSecret`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-localcertificatereference[$$LocalCertificateReference$$] array__ |*Optional* + @@ -981,7 +956,7 @@ Each element in the `externalCertSecret` array is an object containing the follo See the https://min.io/docs/minio/kubernetes/upstream/operations/install-deploy-manage/deploy-minio-tenant.html#create-tenant-security-section[MinIO Operator CRD] reference for examples and more complete documentation on configuring TLS for MinIO Tenants. -|*`externalClientCertSecret`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-localcertificatereference[$$LocalCertificateReference$$]__ +|*`externalClientCertSecret`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-localcertificatereference[$$LocalCertificateReference$$]__ |*Optional* + @@ -1005,7 +980,7 @@ If deploying KES with the MinIO Operator, include the hash of the certificate as See the https://min.io/docs/minio/kubernetes/upstream/operations/install-deploy-manage/deploy-minio-tenant.html#create-tenant-security-section[MinIO Operator CRD] reference for examples and more complete documentation on configuring TLS for MinIO Tenants. -|*`externalClientCertSecrets`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-localcertificatereference[$$LocalCertificateReference$$] array__ +|*`externalClientCertSecrets`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-localcertificatereference[$$LocalCertificateReference$$] array__ |*Optional* + @@ -1051,19 +1026,19 @@ Specify a https://kubernetes.io/docs/concepts/configuration/secret/[Kubernetes T * `type` - Specify `kubernetes.io/tls` + -|*`mountPath`* __string__ +|*`mountPath`* __string__ |*Optional* + Mount path for MinIO volume (PV). Defaults to `/export` -|*`subPath`* __string__ +|*`subPath`* __string__ |*Optional* + Subpath inside mount path. This is the directory where MinIO stores data. Default to `""`` (empty) -|*`requestAutoCert`* __boolean__ +|*`requestAutoCert`* __boolean__ |*Optional* + @@ -1081,34 +1056,34 @@ If `requestAutoCert` is set to `false` *and* `externalCertSecret` is omitted, th See the https://min.io/docs/minio/kubernetes/upstream/operations/install-deploy-manage/deploy-minio-tenant.html#create-tenant-security-section[MinIO Operator CRD] reference for examples and more complete documentation on configuring TLS for MinIO Tenants. -|*`liveness`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#probe-v1-core[$$Probe$$]__ +|*`liveness`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#probe-v1-core[$$Probe$$]__ |Liveness Probe for container liveness. Container will be restarted if the probe fails. -|*`readiness`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#probe-v1-core[$$Probe$$]__ +|*`readiness`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#probe-v1-core[$$Probe$$]__ |Readiness Probe for container readiness. Container will be removed from service endpoints if the probe fails. -|*`startup`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#probe-v1-core[$$Probe$$]__ +|*`startup`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#probe-v1-core[$$Probe$$]__ |Startup Probe allows to configure a max grace period for a pod to start before getting traffic routed to it. -|*`lifecycle`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#lifecycle-v1-core[$$Lifecycle$$]__ +|*`lifecycle`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#lifecycle-v1-core[$$Lifecycle$$]__ |Lifecycle hooks for container. -|*`features`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-features[$$Features$$]__ +|*`features`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-features[$$Features$$]__ |S3 related features can be disabled or enabled such as `bucketDNS` etc. -|*`certConfig`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-certificateconfig[$$CertificateConfig$$]__ +|*`certConfig`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-certificateconfig[$$CertificateConfig$$]__ |*Optional* + Enables setting the `CommonName`, `Organization`, and `dnsName` attributes for all TLS certificates automatically generated by the Operator. Configuring this object has no effect if `requestAutoCert` is `false`. + -|*`kes`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-kesconfig[$$KESConfig$$]__ +|*`kes`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-kesconfig[$$KESConfig$$]__ |*Optional* + Directs the MinIO Operator to deploy the https://github.com/minio/kes[MinIO Key Encryption Service] (KES) using the specified configuration. The MinIO KES supports performing server-side encryption of objects on the MiNIO Tenant. + -|*`prometheusOperator`* __boolean__ +|*`prometheusOperator`* __boolean__ |*Optional* + @@ -1117,13 +1092,13 @@ Directs the MinIO Operator to use prometheus operator. + Tenant scrape configuration will be added to prometheus managed by the prometheus-operator. -|*`serviceAccountName`* __string__ +|*`serviceAccountName`* __string__ |*Optional* + The https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/[Kubernetes Service Account] to use for running MinIO pods created as part of the Tenant. + -|*`priorityClassName`* __string__ +|*`priorityClassName`* __string__ |*Optional* + @@ -1133,7 +1108,7 @@ This is applied to MinIO pods only. + Refer Kubernetes https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#priorityclass[Priority Class documentation] for more complete documentation. -|*`imagePullPolicy`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#pullpolicy-v1-core[$$PullPolicy$$]__ +|*`imagePullPolicy`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#pullpolicy-v1-core[$$PullPolicy$$]__ |*Optional* + @@ -1151,25 +1126,25 @@ The pull policy for the MinIO Docker image. Specify one of the following: + Refer Kubernetes documentation for details https://kubernetes.io/docs/concepts/containers/images#updating-images -|*`sideCars`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-sidecars[$$SideCars$$]__ +|*`sideCars`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-sidecars[$$SideCars$$]__ |*Optional* + A list of containers to run as sidecars along every MinIO Pod deployed in the tenant. -|*`exposeServices`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-exposeservices[$$ExposeServices$$]__ +|*`exposeServices`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-exposeservices[$$ExposeServices$$]__ |*Optional* + Directs the Operator to expose the MinIO and/or Console services. + -|*`serviceMetadata`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-servicemetadata[$$ServiceMetadata$$]__ +|*`serviceMetadata`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-servicemetadata[$$ServiceMetadata$$]__ |*Optional* + Specify custom labels and annotations to append to the MinIO service and/or Console service. -|*`users`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#localobjectreference-v1-core[$$LocalObjectReference$$] array__ +|*`users`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#localobjectreference-v1-core[$$LocalObjectReference$$] array__ |*Optional* + @@ -1190,38 +1165,38 @@ Each referenced Kubernetes secret must include the following fields: + The Operator creates each user with the `consoleAdmin` policy by default. You can change the assigned policy after the Tenant starts. + -|*`buckets`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-bucket[$$Bucket$$] array__ +|*`buckets`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-bucket[$$Bucket$$] array__ |*Optional* + Create buckets when creating a new tenant. Skip if bucket with given name already exists -|*`logging`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-logging[$$Logging$$]__ +|*`logging`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-logging[$$Logging$$]__ |*Optional* + Enable JSON, Anonymous logging for MinIO tenants. -|*`configuration`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#localobjectreference-v1-core[$$LocalObjectReference$$]__ +|*`configuration`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#localobjectreference-v1-core[$$LocalObjectReference$$]__ |*Optional* + Specify a secret that contains additional environment variable configurations to be used for the MinIO pools. The secret is expected to have a key named config.env containing all exported environment variables for MinIO+ -|*`initContainers`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#container-v1-core[$$Container$$] array__ +|*`initContainers`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#container-v1-core[$$Container$$] array__ |*Optional* + Add custom initContainers to StatefulSet -|*`additionalVolumes`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#volume-v1-core[$$Volume$$] array__ +|*`additionalVolumes`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#volume-v1-core[$$Volume$$] array__ |*Optional* + If provided, statefulset will add these volumes. You should set the rules for the corresponding volumes and volume mounts. We will not test this rule, k8s will show the result. -|*`additionalVolumeMounts`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#volumemount-v1-core[$$VolumeMount$$] array__ +|*`additionalVolumeMounts`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#volumemount-v1-core[$$VolumeMount$$] array__ |*Optional* + @@ -1229,9 +1204,6 @@ If provided, statefulset will add these volumes. You should set the rules for th |=== - - - [id="{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-tenantusage"] ==== TenantUsage @@ -1242,28 +1214,27 @@ TenantUsage are metrics regarding the usage and capacity of the tenant - xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-tenantstatus[$$TenantStatus$$] **** -[cols="25a,75a", options="header"] +[cols="25a,75a",options="header"] |=== | Field | Description -|*`capacity`* __integer__ +|*`capacity`* __integer__ |Capacity the usage capacity of this tenant in bytes. -|*`rawCapacity`* __integer__ +|*`rawCapacity`* __integer__ |Capacity the raw capacity of this tenant in bytes. -|*`usage`* __integer__ +|*`usage`* __integer__ |Usage is how much data is managed by MinIO in bytes. -|*`rawUsage`* __integer__ +|*`rawUsage`* __integer__ |Usage is the raw usage on disks in bytes. -|*`tiers`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-tierusage[$$TierUsage$$] array__ +|*`tiers`* __xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-tierusage[$$TierUsage$$] array__ |Tiers includes the usage of individual tiers in the tenant |=== - [id="{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-tierusage"] ==== TierUsage @@ -1274,17 +1245,17 @@ TierUsage represents the usage from a tier setup by the tenant - xref:{anchor_prefix}-github-com-minio-operator-pkg-apis-minio-min-io-v2-tenantusage[$$TenantUsage$$] **** -[cols="25a,75a", options="header"] +[cols="25a,75a",options="header"] |=== | Field | Description -|*`Name`* __string__ +|*`Name`* __string__ |Name of the tier -|*`Type`* __string__ +|*`Type`* __string__ |type of the tier -|*`totalSize`* __integer__ +|*`totalSize`* __integer__ |TotalSize usage of the tier |=== diff --git a/helm/operator/templates/minio.min.io_tenants.yaml b/helm/operator/templates/minio.min.io_tenants.yaml index e2769b7243c..ddfbc03cbaa 100644 --- a/helm/operator/templates/minio.min.io_tenants.yaml +++ b/helm/operator/templates/minio.min.io_tenants.yaml @@ -3261,8 +3261,6 @@ spec: additionalProperties: type: string type: object - reclaimStorage: - type: boolean resources: properties: claims: diff --git a/helm/operator/templates/operator-clusterrole.yaml b/helm/operator/templates/operator-clusterrole.yaml index bf054c58b34..47cbc265d5b 100644 --- a/helm/operator/templates/operator-clusterrole.yaml +++ b/helm/operator/templates/operator-clusterrole.yaml @@ -19,7 +19,6 @@ rules: - get - update - list - - delete - apiGroups: - "" resources: diff --git a/pkg/apis/minio.min.io/v2/types.go b/pkg/apis/minio.min.io/v2/types.go index 3f6559e2971..67c3c1b1d43 100644 --- a/pkg/apis/minio.min.io/v2/types.go +++ b/pkg/apis/minio.min.io/v2/types.go @@ -712,11 +712,6 @@ type Pool struct { // If provided, each pod on the Statefulset will run with the specified RuntimeClassName, for more info https://kubernetes.io/docs/concepts/containers/runtime-class/ // +optional RuntimeClassName *string `json:"runtimeClassName,omitempty"` - // *Optional* + - // - // If true. Will delete the storage when tenant has been deleted. - // +optional - ReclaimStorage *bool `json:"reclaimStorage,omitempty"` } // EqualImage returns true if config image and current input image are same diff --git a/pkg/apis/minio.min.io/v2/zz_generated.deepcopy.go b/pkg/apis/minio.min.io/v2/zz_generated.deepcopy.go index 2d9a4d45f0d..9a85880a640 100644 --- a/pkg/apis/minio.min.io/v2/zz_generated.deepcopy.go +++ b/pkg/apis/minio.min.io/v2/zz_generated.deepcopy.go @@ -412,11 +412,6 @@ func (in *Pool) DeepCopyInto(out *Pool) { *out = new(string) **out = **in } - if in.ReclaimStorage != nil { - in, out := &in.ReclaimStorage, &out.ReclaimStorage - *out = new(bool) - **out = **in - } return } diff --git a/pkg/client/applyconfiguration/minio.min.io/v2/pool.go b/pkg/client/applyconfiguration/minio.min.io/v2/pool.go index abf61af17f9..d466b44569b 100644 --- a/pkg/client/applyconfiguration/minio.min.io/v2/pool.go +++ b/pkg/client/applyconfiguration/minio.min.io/v2/pool.go @@ -39,7 +39,6 @@ type PoolApplyConfiguration struct { Annotations map[string]string `json:"annotations,omitempty"` Labels map[string]string `json:"labels,omitempty"` RuntimeClassName *string `json:"runtimeClassName,omitempty"` - ReclaimStorage *bool `json:"reclaimStorage,omitempty"` } // PoolApplyConfiguration constructs an declarative configuration of the Pool type for use with @@ -181,11 +180,3 @@ func (b *PoolApplyConfiguration) WithRuntimeClassName(value string) *PoolApplyCo b.RuntimeClassName = &value return b } - -// WithReclaimStorage sets the ReclaimStorage field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the ReclaimStorage field is set to the value of the last call. -func (b *PoolApplyConfiguration) WithReclaimStorage(value bool) *PoolApplyConfiguration { - b.ReclaimStorage = &value - return b -} diff --git a/pkg/controller/main-controller.go b/pkg/controller/main-controller.go index 1d5d00e5699..9e0cd713aae 100644 --- a/pkg/controller/main-controller.go +++ b/pkg/controller/main-controller.go @@ -835,26 +835,6 @@ func (c *Controller) syncHandler(key string) (Result, error) { // Just output the error. Will not retry. runtime.HandleError(fmt.Errorf("DeletePrometheusAddlConfig '%s/%s' error:%s", namespace, tenantName, err.Error())) } - // try to delete pvc if set ReclaimStorageLabel:true - pvcList := corev1.PersistentVolumeClaimList{} - listOpt := client.ListOptions{ - Namespace: namespace, - } - client.MatchingLabels{ - miniov2.TenantLabel: tenantName, - }.ApplyToList(&listOpt) - err := c.k8sClient.List(ctx, &pvcList, &listOpt) - if err != nil { - runtime.HandleError(fmt.Errorf("PersistentVolumeClaimList '%s/%s' error:%s", namespace, tenantName, err.Error())) - } - for _, pvc := range pvcList.Items { - if pvc.Labels[statefulsets.ReclaimStorageLabel] == "true" { - err := c.k8sClient.Delete(ctx, &pvc) - if err != nil { - runtime.HandleError(fmt.Errorf("Delete PersistentVolumeClaim '%s/%s/%s' error:%s", namespace, tenantName, pvc.Name, err.Error())) - } - } - } return WrapResult(Result{}, nil) } // will retry after 5sec diff --git a/pkg/resources/statefulsets/minio-statefulset.go b/pkg/resources/statefulsets/minio-statefulset.go index 78fd0f4c7e6..263d6794613 100644 --- a/pkg/resources/statefulsets/minio-statefulset.go +++ b/pkg/resources/statefulsets/minio-statefulset.go @@ -35,8 +35,6 @@ import ( const ( bucketDNSEnv = "MINIO_DNS_WEBHOOK_ENDPOINT" - // ReclaimStorageLabel - pvc with this label and the value is `true` means when tenant is being deleted the pvc will be deleted. - ReclaimStorageLabel = "reclaimStorage" ) // Returns the MinIO environment variables set in configuration. @@ -839,12 +837,6 @@ func NewPool(args *NewPoolArgs) *appsv1.StatefulSet { if pool.VolumeClaimTemplate != nil { pvClaim := *pool.VolumeClaimTemplate - if pool.ReclaimStorage != nil && *pool.ReclaimStorage { - if len(pvClaim.Labels) == 0 { - pvClaim.Labels = make(map[string]string) - } - pvClaim.Labels[ReclaimStorageLabel] = "true" - } name := pvClaim.Name for i := 0; i < int(pool.VolumesPerServer); i++ { pvClaim.Name = name + strconv.Itoa(i) diff --git a/resources/base/cluster-role.yaml b/resources/base/cluster-role.yaml index 316607ab051..84bc6a069ac 100644 --- a/resources/base/cluster-role.yaml +++ b/resources/base/cluster-role.yaml @@ -18,7 +18,6 @@ rules: - get - update - list - - delete - apiGroups: - "" resources: diff --git a/resources/base/crds/minio.min.io_tenants.yaml b/resources/base/crds/minio.min.io_tenants.yaml index e2769b7243c..ddfbc03cbaa 100644 --- a/resources/base/crds/minio.min.io_tenants.yaml +++ b/resources/base/crds/minio.min.io_tenants.yaml @@ -3261,8 +3261,6 @@ spec: additionalProperties: type: string type: object - reclaimStorage: - type: boolean resources: properties: claims: From d3ab14eacf5d2633aa585483559dd0337cfca880 Mon Sep 17 00:00:00 2001 From: Daniel Valdivia Date: Fri, 5 Jul 2024 19:46:38 -0700 Subject: [PATCH 02/11] Remove Operator UI --- .github/workflows/ui.yaml | 458 - Makefile | 80 +- api/admin_client_mock.go | 396 - api/admin_info.go | 99 - api/admin_policies.go | 32 - api/admin_policies_test.go | 67 - api/certificate-handlers.go | 210 - api/client-admin.go | 643 - api/client.go | 115 - api/config.go | 230 - api/config_test.go | 101 - api/configuration-handlers.go | 186 - api/configure_operator.go | 416 - api/consts.go | 65 - api/cookies.go | 88 - api/doc.go | 35 - api/domain-handlers.go | 96 - api/domain-handlers_test.go | 43 - api/embedded_spec.go | 10161 --------- api/encryption-handlers.go | 1206 -- api/encryption-handlers_test.go | 741 - api/errors.go | 267 - api/errors_test.go | 138 - api/event-handlers.go | 75 - api/idp-handlers.go | 101 - api/idp-handlers_test.go | 128 - api/k8s_client.go | 114 - api/k8s_client_mock.go | 102 - api/kubernetes.go | 91 - api/license.go | 41 - api/login.go | 250 - api/logout.go | 81 - api/logs.go | 83 - api/logs_test.go | 110 - api/marketplace.go | 193 - api/marketplace_test.go | 194 - api/minio.go | 48 - api/minio_operator_mock.go | 43 - api/namespaces.go | 79 - api/namespaces_test.go | 63 - api/nodes.go | 370 - api/nodes_test.go | 366 - api/operations/auth/login_detail.go | 73 - .../auth/login_detail_parameters.go | 63 - api/operations/auth/login_detail_responses.go | 135 - .../auth/login_detail_urlbuilder.go | 104 - api/operations/auth/login_oauth2_auth.go | 73 - .../auth/login_oauth2_auth_parameters.go | 101 - .../auth/login_oauth2_auth_responses.go | 115 - .../auth/login_oauth2_auth_urlbuilder.go | 104 - api/operations/auth/login_operator.go | 73 - .../auth/login_operator_parameters.go | 101 - .../auth/login_operator_responses.go | 115 - .../auth/login_operator_urlbuilder.go | 104 - api/operations/auth/logout.go | 88 - api/operations/auth/logout_parameters.go | 63 - api/operations/auth/logout_responses.go | 115 - api/operations/auth/logout_urlbuilder.go | 104 - api/operations/auth/session_check.go | 88 - .../auth/session_check_parameters.go | 63 - .../auth/session_check_responses.go | 135 - .../auth/session_check_urlbuilder.go | 104 - api/operations/operator_api.go | 1046 - .../operator_api/create_namespace.go | 88 - .../create_namespace_parameters.go | 101 - .../create_namespace_responses.go | 115 - .../create_namespace_urlbuilder.go | 104 - api/operations/operator_api/create_tenant.go | 88 - .../operator_api/create_tenant_parameters.go | 101 - .../operator_api/create_tenant_responses.go | 135 - .../operator_api/create_tenant_urlbuilder.go | 104 - api/operations/operator_api/delete_p_v_c.go | 88 - .../operator_api/delete_p_v_c_parameters.go | 136 - .../operator_api/delete_p_v_c_responses.go | 115 - .../operator_api/delete_p_v_c_urlbuilder.go | 132 - api/operations/operator_api/delete_pod.go | 88 - .../operator_api/delete_pod_parameters.go | 136 - .../operator_api/delete_pod_responses.go | 115 - .../operator_api/delete_pod_urlbuilder.go | 132 - api/operations/operator_api/delete_tenant.go | 88 - .../operator_api/delete_tenant_parameters.go | 142 - .../operator_api/delete_tenant_responses.go | 115 - .../operator_api/delete_tenant_urlbuilder.go | 124 - api/operations/operator_api/describe_pod.go | 88 - .../operator_api/describe_pod_parameters.go | 136 - .../operator_api/describe_pod_responses.go | 135 - .../operator_api/describe_pod_urlbuilder.go | 132 - .../operator_api/get_allocatable_resources.go | 88 - .../get_allocatable_resources_parameters.go | 120 - .../get_allocatable_resources_responses.go | 135 - .../get_allocatable_resources_urlbuilder.go | 119 - .../operator_api/get_m_p_integration.go | 128 - .../get_m_p_integration_parameters.go | 63 - .../get_m_p_integration_responses.go | 135 - .../get_m_p_integration_urlbuilder.go | 104 - .../operator_api/get_max_allocatable_mem.go | 88 - .../get_max_allocatable_mem_parameters.go | 120 - .../get_max_allocatable_mem_responses.go | 135 - .../get_max_allocatable_mem_urlbuilder.go | 119 - .../operator_api/get_p_v_c_describe.go | 88 - .../get_p_v_c_describe_parameters.go | 136 - .../get_p_v_c_describe_responses.go | 135 - .../get_p_v_c_describe_urlbuilder.go | 132 - .../operator_api/get_p_v_c_events.go | 88 - .../get_p_v_c_events_parameters.go | 136 - .../get_p_v_c_events_responses.go | 138 - .../get_p_v_c_events_urlbuilder.go | 132 - api/operations/operator_api/get_parity.go | 88 - .../operator_api/get_parity_parameters.go | 154 - .../operator_api/get_parity_responses.go | 138 - .../operator_api/get_parity_urlbuilder.go | 126 - api/operations/operator_api/get_pod_events.go | 88 - .../operator_api/get_pod_events_parameters.go | 136 - .../operator_api/get_pod_events_responses.go | 138 - .../operator_api/get_pod_events_urlbuilder.go | 132 - api/operations/operator_api/get_pod_logs.go | 88 - .../operator_api/get_pod_logs_parameters.go | 136 - .../operator_api/get_pod_logs_responses.go | 133 - .../operator_api/get_pod_logs_urlbuilder.go | 132 - .../operator_api/get_resource_quota.go | 88 - .../get_resource_quota_parameters.go | 112 - .../get_resource_quota_responses.go | 135 - .../get_resource_quota_urlbuilder.go | 124 - .../operator_api/get_tenant_events.go | 88 - .../get_tenant_events_parameters.go | 112 - .../get_tenant_events_responses.go | 138 - .../get_tenant_events_urlbuilder.go | 124 - .../operator_api/get_tenant_log_report.go | 88 - .../get_tenant_log_report_parameters.go | 112 - .../get_tenant_log_report_responses.go | 135 - .../get_tenant_log_report_urlbuilder.go | 124 - .../operator_api/get_tenant_pods.go | 88 - .../get_tenant_pods_parameters.go | 112 - .../operator_api/get_tenant_pods_responses.go | 138 - .../get_tenant_pods_urlbuilder.go | 124 - .../operator_api/get_tenant_usage.go | 88 - .../get_tenant_usage_parameters.go | 112 - .../get_tenant_usage_responses.go | 135 - .../get_tenant_usage_urlbuilder.go | 124 - .../operator_api/get_tenant_y_a_m_l.go | 88 - .../get_tenant_y_a_m_l_parameters.go | 112 - .../get_tenant_y_a_m_l_responses.go | 135 - .../get_tenant_y_a_m_l_urlbuilder.go | 124 - .../operator_api/list_all_tenants.go | 88 - .../list_all_tenants_parameters.go | 159 - .../list_all_tenants_responses.go | 135 - .../list_all_tenants_urlbuilder.go | 140 - .../operator_api/list_node_labels.go | 88 - .../list_node_labels_parameters.go | 63 - .../list_node_labels_responses.go | 138 - .../list_node_labels_urlbuilder.go | 104 - api/operations/operator_api/list_p_v_cs.go | 88 - .../operator_api/list_p_v_cs_for_tenant.go | 88 - .../list_p_v_cs_for_tenant_parameters.go | 112 - .../list_p_v_cs_for_tenant_responses.go | 135 - .../list_p_v_cs_for_tenant_urlbuilder.go | 124 - .../operator_api/list_p_v_cs_parameters.go | 63 - .../operator_api/list_p_v_cs_responses.go | 135 - .../operator_api/list_p_v_cs_urlbuilder.go | 104 - ...list_tenant_certificate_signing_request.go | 88 - ..._certificate_signing_request_parameters.go | 112 - ...t_certificate_signing_request_responses.go | 135 - ..._certificate_signing_request_urlbuilder.go | 124 - api/operations/operator_api/list_tenants.go | 88 - .../operator_api/list_tenants_parameters.go | 183 - .../operator_api/list_tenants_responses.go | 135 - .../operator_api/list_tenants_urlbuilder.go | 150 - .../operator_api/operator_subnet_api_key.go | 88 - .../operator_subnet_api_key_info.go | 88 - ...operator_subnet_api_key_info_parameters.go | 63 - .../operator_subnet_api_key_info_responses.go | 135 - ...operator_subnet_api_key_info_urlbuilder.go | 104 - .../operator_subnet_api_key_parameters.go | 99 - .../operator_subnet_api_key_responses.go | 135 - .../operator_subnet_api_key_urlbuilder.go | 117 - .../operator_api/operator_subnet_login.go | 88 - .../operator_subnet_login_m_f_a.go | 88 - .../operator_subnet_login_m_f_a_parameters.go | 101 - .../operator_subnet_login_m_f_a_responses.go | 135 - .../operator_subnet_login_m_f_a_urlbuilder.go | 104 - .../operator_subnet_login_parameters.go | 101 - .../operator_subnet_login_responses.go | 135 - .../operator_subnet_login_urlbuilder.go | 104 - .../operator_subnet_register_api_key.go | 88 - ...ator_subnet_register_api_key_parameters.go | 101 - ...rator_subnet_register_api_key_responses.go | 135 - ...ator_subnet_register_api_key_urlbuilder.go | 104 - .../operator_api/post_m_p_integration.go | 88 - .../post_m_p_integration_parameters.go | 101 - .../post_m_p_integration_responses.go | 115 - .../post_m_p_integration_urlbuilder.go | 104 - .../operator_api/put_tenant_y_a_m_l.go | 88 - .../put_tenant_y_a_m_l_parameters.go | 150 - .../put_tenant_y_a_m_l_responses.go | 115 - .../put_tenant_y_a_m_l_urlbuilder.go | 124 - .../operator_api/set_tenant_administrators.go | 88 - .../set_tenant_administrators_parameters.go | 150 - .../set_tenant_administrators_responses.go | 115 - .../set_tenant_administrators_urlbuilder.go | 124 - .../operator_api/subscription_activate.go | 88 - .../subscription_activate_parameters.go | 112 - .../subscription_activate_responses.go | 115 - .../subscription_activate_urlbuilder.go | 124 - .../operator_api/subscription_info.go | 88 - .../subscription_info_parameters.go | 63 - .../subscription_info_responses.go | 135 - .../subscription_info_urlbuilder.go | 104 - .../operator_api/subscription_refresh.go | 88 - .../subscription_refresh_parameters.go | 63 - .../subscription_refresh_responses.go | 135 - .../subscription_refresh_urlbuilder.go | 104 - .../operator_api/subscription_validate.go | 88 - .../subscription_validate_parameters.go | 101 - .../subscription_validate_responses.go | 135 - .../subscription_validate_urlbuilder.go | 104 - .../operator_api/tenant_add_pool.go | 88 - .../tenant_add_pool_parameters.go | 150 - .../operator_api/tenant_add_pool_responses.go | 115 - .../tenant_add_pool_urlbuilder.go | 124 - .../operator_api/tenant_configuration.go | 88 - .../tenant_configuration_parameters.go | 112 - .../tenant_configuration_responses.go | 135 - .../tenant_configuration_urlbuilder.go | 124 - .../operator_api/tenant_delete_encryption.go | 88 - .../tenant_delete_encryption_parameters.go | 112 - .../tenant_delete_encryption_responses.go | 115 - .../tenant_delete_encryption_urlbuilder.go | 124 - api/operations/operator_api/tenant_details.go | 88 - .../operator_api/tenant_details_parameters.go | 112 - .../operator_api/tenant_details_responses.go | 135 - .../operator_api/tenant_details_urlbuilder.go | 124 - .../operator_api/tenant_encryption_info.go | 88 - .../tenant_encryption_info_parameters.go | 112 - .../tenant_encryption_info_responses.go | 135 - .../tenant_encryption_info_urlbuilder.go | 124 - .../operator_api/tenant_identity_provider.go | 88 - .../tenant_identity_provider_parameters.go | 112 - .../tenant_identity_provider_responses.go | 135 - .../tenant_identity_provider_urlbuilder.go | 124 - .../operator_api/tenant_security.go | 88 - .../tenant_security_parameters.go | 112 - .../operator_api/tenant_security_responses.go | 135 - .../tenant_security_urlbuilder.go | 124 - .../operator_api/tenant_update_certificate.go | 88 - .../tenant_update_certificate_parameters.go | 150 - .../tenant_update_certificate_responses.go | 115 - .../tenant_update_certificate_urlbuilder.go | 124 - .../operator_api/tenant_update_encryption.go | 88 - .../tenant_update_encryption_parameters.go | 150 - .../tenant_update_encryption_responses.go | 115 - .../tenant_update_encryption_urlbuilder.go | 124 - .../operator_api/tenant_update_pools.go | 88 - .../tenant_update_pools_parameters.go | 150 - .../tenant_update_pools_responses.go | 135 - .../tenant_update_pools_urlbuilder.go | 124 - api/operations/operator_api/update_tenant.go | 88 - .../update_tenant_configuration.go | 88 - .../update_tenant_configuration_parameters.go | 150 - .../update_tenant_configuration_responses.go | 115 - .../update_tenant_configuration_urlbuilder.go | 124 - .../operator_api/update_tenant_domains.go | 88 - .../update_tenant_domains_parameters.go | 150 - .../update_tenant_domains_responses.go | 115 - .../update_tenant_domains_urlbuilder.go | 124 - .../update_tenant_identity_provider.go | 88 - ...ate_tenant_identity_provider_parameters.go | 150 - ...date_tenant_identity_provider_responses.go | 115 - ...ate_tenant_identity_provider_urlbuilder.go | 124 - .../operator_api/update_tenant_parameters.go | 150 - .../operator_api/update_tenant_responses.go | 115 - .../operator_api/update_tenant_security.go | 88 - .../update_tenant_security_parameters.go | 150 - .../update_tenant_security_responses.go | 115 - .../update_tenant_security_urlbuilder.go | 124 - .../operator_api/update_tenant_urlbuilder.go | 124 - .../user_api/check_min_i_o_version.go | 73 - .../check_min_i_o_version_parameters.go | 63 - .../check_min_i_o_version_responses.go | 135 - .../check_min_i_o_version_urlbuilder.go | 104 - api/operator.go | 82 - api/operator_client.go | 70 - api/operator_subnet.go | 255 - api/operator_subnet_test.go | 315 - api/operator_test.go | 101 - api/parity.go | 62 - api/parity_test.go | 131 - api/pod-handlers.go | 598 - api/pod-handlers_test.go | 554 - api/pool-handlers.go | 140 - api/pool-handlers_test.go | 258 - api/proxy.go | 342 - api/resource_quota.go | 108 - api/resource_quota_test.go | 132 - api/server.go | 524 - api/session.go | 67 - api/subnet-utils.go | 333 - api/tenant-add-handlers.go | 493 - api/tenant-get-handlers.go | 172 - api/tenant-handlers.go | 1380 -- api/tenant-handlers_test.go | 1739 -- api/tenant_update.go | 75 - api/tenants_2_test.go | 1033 - api/tenants_helper.go | 231 - api/tenants_helper_test.go | 494 - api/tls.go | 67 - api/users-handlers.go | 95 - api/utils.go | 76 - api/utils_test.go | 254 - api/version.go | 58 - api/volumes.go | 341 - api/volumes_test.go | 81 - api/yaml-handlers.go | 145 - cmd/operator/app_commands.go | 1 - cmd/operator/main.go | 2 +- cmd/operator/ui.go | 247 - .../templates/console-clusterrole.yaml | 284 - .../templates/console-clusterrolebinding.yaml | 15 - .../operator/templates/console-configmap.yaml | 11 - .../templates/console-deployment.yaml | 68 - helm/operator/templates/console-ingress.yaml | 40 - helm/operator/templates/console-secret.yaml | 11 - helm/operator/templates/console-service.yaml | 15 - .../templates/console-serviceaccount.yaml | 8 - helm/operator/values.yaml | 176 - models/allocatable_resources_response.go | 183 - models/annotation.go | 70 - models/aws_configuration.go | 331 - models/azure_configuration.go | 327 - models/backend_properties.go | 73 - models/certificate_info.go | 76 - models/check_operator_version_response.go | 70 - models/condition.go | 70 - models/config_map.go | 70 - models/container.go | 329 - models/create_tenant_request.go | 536 - models/create_tenant_response.go | 141 - models/csr_element.go | 159 - models/csr_elements.go | 138 - models/delete_tenant_request.go | 67 - models/describe_p_v_c_wrapper.go | 227 - models/describe_pod_wrapper.go | 552 - models/domains_configuration.go | 70 - models/encryption_configuration.go | 761 - models/encryption_configuration_response.go | 853 - models/environment_variable.go | 70 - models/error.go | 108 - models/event_list_element.go | 82 - models/event_list_wrapper.go | 95 - models/gcp_configuration.go | 286 - models/gemalto_configuration.go | 311 - models/gemalto_configuration_response.go | 311 - models/idp_configuration.go | 527 - models/image_registry.go | 122 - models/key_pair_configuration.go | 105 - models/label.go | 70 - models/license.go | 82 - models/list_p_v_cs_response.go | 138 - models/list_tenants_response.go | 141 - models/login_details.go | 199 - models/login_oauth2_auth_request.go | 105 - models/login_operator_request.go | 88 - models/login_request.go | 172 - models/login_response.go | 70 - models/max_allocatable_mem_response.go | 67 - models/metadata_fields.go | 73 - models/mount.go | 76 - models/mp_integration.go | 70 - models/namespace.go | 88 - models/node_labels.go | 44 - models/node_max_allocatable_resources.go | 70 - models/node_selector.go | 70 - models/node_selector_term.go | 353 - models/operator_session_response.go | 128 - models/operator_subnet_api_key.go | 67 - models/operator_subnet_login_m_f_a_request.go | 122 - models/operator_subnet_login_request.go | 70 - models/operator_subnet_login_response.go | 70 - ...erator_subnet_register_api_key_response.go | 67 - models/parity_response.go | 44 - models/pod_affinity_term.go | 333 - models/policy_entity.go | 95 - models/pool.go | 428 - models/pool_affinity.go | 1161 - models/pool_resources.go | 70 - models/pool_toleration_seconds.go | 88 - models/pool_tolerations.go | 202 - models/pool_update_request.go | 141 - models/principal.go | 85 - models/projected_volume.go | 138 - models/projected_volume_source.go | 231 - models/pvc.go | 70 - models/pvcs_list_response.go | 88 - models/redirect_rule.go | 70 - models/resource_quota.go | 141 - models/resource_quota_element.go | 73 - models/secret.go | 70 - models/security_context.go | 128 - models/server_drives.go | 94 - models/server_properties.go | 159 - models/service_account_token.go | 67 - models/set_administrators_request.go | 70 - models/state.go | 85 - models/subscription_validate_request.go | 73 - models/tenant.go | 480 - models/tenant_configuration_response.go | 141 - models/tenant_list.go | 231 - models/tenant_log_report.go | 70 - models/tenant_pod.go | 103 - models/tenant_response_item.go | 73 - models/tenant_security_response.go | 411 - models/tenant_status.go | 187 - models/tenant_tier_element.go | 73 - models/tenant_usage.go | 70 - models/tenant_y_a_m_l.go | 67 - models/tls_configuration.go | 203 - models/toleration.go | 79 - models/update_domains_request.go | 126 - models/update_tenant_configuration_request.go | 144 - models/update_tenant_request.go | 153 - models/update_tenant_security_request.go | 355 - models/vault_configuration.go | 318 - models/vault_configuration_response.go | 318 - models/volume.go | 180 - operator-integration/tenant_test.go | 1136 - pkg/apis/minio.min.io/v2/utils.go | 62 - pkg/auth/idp/oauth2/config.go | 48 - pkg/auth/idp/oauth2/const.go | 16 +- pkg/auth/idp/oauth2/provider.go | 71 - pkg/auth/idp/oauth2/provider_test.go | 71 - pkg/auth/ldap.go | 35 - pkg/auth/token.go | 326 - pkg/auth/token/config.go | 11 - pkg/auth/token/const.go | 2 - pkg/auth/token_test.go | 82 - pkg/certs/certs.go | 310 - pkg/certs/const.go | 5 - pkg/controller/job-controller.go | 4 +- pkg/controller/operator.go | 6 - pkg/http/headers.go | 23 - pkg/http/http.go | 74 - pkg/kes/kes.go | 19 - pkg/logger/audit.go | 228 - pkg/logger/color/color.go | 60 - pkg/logger/config.go | 213 - pkg/logger/config/bool-flag.go | 80 - pkg/logger/config/bool-flag_test.go | 126 - pkg/logger/config/certs.go | 30 - pkg/logger/config/config.go | 32 - pkg/logger/console.go | 220 - pkg/logger/const.go | 57 - pkg/logger/logger.go | 474 - pkg/logger/logonce.go | 92 - pkg/logger/message/audit/entry.go | 127 - pkg/logger/message/log/entry.go | 64 - pkg/logger/reqinfo.go | 117 - pkg/logger/target/http/http.go | 225 - pkg/logger/target/types/types.go | 27 - pkg/logger/targets.go | 151 - pkg/logger/utils.go | 60 - pkg/resources/configmaps/prometheus.go | 85 +- pkg/resources/statefulsets/kes-statefulset.go | 76 +- .../statefulsets/minio-statefulset.go | 10 +- pkg/runtime/sync_test.go | 2 +- pkg/subnet/const.go | 5 - pkg/subnet/subnet.go | 97 - pkg/subnet/utils.go | 165 - pkg/utils/miniojob/minioJob.go | 4 +- pkg/utils/miniojob/types.go | 6 +- pkg/utils/parity.go | 219 - pkg/utils/parity_test.go | 293 - pkg/utils/utils.go | 38 +- pkg/utils/utils_test.go | 92 - pkg/utils/version.go | 52 - resources/assets.go | 27 - resources/base/console-ui.yaml | 337 - swagger.yml | 3426 --- web-app/.dockerignore | 1 - web-app/.gitignore | 30 - web-app/.prettierignore | 2 - web-app/.prettierrc.json | 1 - web-app/.yarnrc.yml | 3 - web-app/Makefile | 20 - web-app/README.md | 44 - web-app/assets.go | 27 - web-app/build/Loader.svg | 42 - web-app/build/agpl-logo.svg | 25 - web-app/build/agpl.svg | 1 - web-app/build/amazon.png | Bin 9185 -> 0 bytes web-app/build/amqp-logo.svg | 1 - web-app/build/amqp.png | Bin 30271 -> 0 bytes web-app/build/android-icon-144x144.png | Bin 19639 -> 0 bytes web-app/build/android-icon-192x192.png | Bin 19306 -> 0 bytes web-app/build/android-icon-36x36.png | Bin 16139 -> 0 bytes web-app/build/android-icon-48x48.png | Bin 16403 -> 0 bytes web-app/build/android-icon-72x72.png | Bin 17295 -> 0 bytes web-app/build/android-icon-96x96.png | Bin 18154 -> 0 bytes web-app/build/apple-icon-180x180.png | Bin 21356 -> 0 bytes web-app/build/asset-manifest.json | 103 - web-app/build/aws-logo.svg | 38 - web-app/build/azure-logo.svg | 1 - web-app/build/azure.png | Bin 8888 -> 0 bytes web-app/build/elasticsearch-logo.svg | 1 - web-app/build/elasticsearch.png | Bin 8003 -> 0 bytes web-app/build/favicon-16x16.png | Bin 14906 -> 0 bytes web-app/build/favicon-32x32.png | Bin 16066 -> 0 bytes web-app/build/favicon-96x96.png | Bin 17029 -> 0 bytes web-app/build/favicon.ico | Bin 1525 -> 0 bytes web-app/build/gcs-logo.svg | 1 - web-app/build/gcs.png | Bin 7804 -> 0 bytes web-app/build/images/BG_Illustration.svg | 1 - .../build/images/BG_IllustrationDarker.svg | 67 - web-app/build/images/background-wave-orig.svg | 1385 -- .../build/images/background-wave-orig2.svg | 1 - web-app/build/images/background.svg | 9 - web-app/build/images/ob_bucket_clear.svg | 6 - web-app/build/images/ob_bucket_filled.svg | 6 - web-app/build/images/ob_file_clear.svg | 10 - web-app/build/images/ob_file_filled.svg | 10 - web-app/build/images/ob_folder_clear.svg | 10 - web-app/build/images/ob_folder_filled.svg | 10 - .../images/object-browser-folder-icn.svg | 11 - web-app/build/images/object-browser-icn.svg | 6 - web-app/build/images/search-icn.svg | 3 - web-app/build/images/trash-icn.svg | 6 - web-app/build/index.html | 1 - web-app/build/kafka-logo.svg | 1 - web-app/build/kafka.png | Bin 10782 -> 0 bytes web-app/build/lambda-rect.svg | 1 - web-app/build/logo192.png | Bin 9284 -> 0 bytes web-app/build/logo512.png | Bin 15302 -> 0 bytes web-app/build/manifest.json | 50 - web-app/build/minio-logo.svg | 1 - web-app/build/minioTier.png | Bin 7679 -> 0 bytes web-app/build/mqtt-logo.svg | 1 - web-app/build/mqtt.png | Bin 24598 -> 0 bytes web-app/build/mysql-logo.svg | 1 - web-app/build/mysql.png | Bin 19940 -> 0 bytes web-app/build/nats-logo.svg | 1 - web-app/build/nats.png | Bin 25129 -> 0 bytes web-app/build/nsq-logo.svg | 1 - web-app/build/postgres-logo.svg | 1 - web-app/build/postgres.png | Bin 46793 -> 0 bytes web-app/build/redis-logo.svg | 1 - web-app/build/redis.png | Bin 48048 -> 0 bytes web-app/build/robots.txt | 2 - web-app/build/safari-pinned-tab.svg | 148 - web-app/build/static/css/main.110caa22.css | 2 - .../build/static/css/main.110caa22.css.map | 1 - web-app/build/static/js/104.478cfff7.chunk.js | 2 - .../build/static/js/104.478cfff7.chunk.js.map | 1 - web-app/build/static/js/112.1ea6a792.chunk.js | 2 - .../build/static/js/112.1ea6a792.chunk.js.map | 1 - web-app/build/static/js/122.c782a33a.chunk.js | 2 - .../build/static/js/122.c782a33a.chunk.js.map | 1 - web-app/build/static/js/204.3a5ec564.chunk.js | 2 - .../build/static/js/204.3a5ec564.chunk.js.map | 1 - web-app/build/static/js/241.f827f4d6.chunk.js | 2 - .../build/static/js/241.f827f4d6.chunk.js.map | 1 - web-app/build/static/js/301.d424161c.chunk.js | 2 - .../build/static/js/301.d424161c.chunk.js.map | 1 - web-app/build/static/js/361.970b063b.chunk.js | 2 - .../build/static/js/361.970b063b.chunk.js.map | 1 - web-app/build/static/js/381.6e506d98.chunk.js | 2 - .../build/static/js/381.6e506d98.chunk.js.map | 1 - web-app/build/static/js/414.f9770abf.chunk.js | 2 - .../build/static/js/414.f9770abf.chunk.js.map | 1 - web-app/build/static/js/415.6349f8fe.chunk.js | 2 - .../build/static/js/415.6349f8fe.chunk.js.map | 1 - web-app/build/static/js/450.be9d2e55.chunk.js | 2 - .../build/static/js/450.be9d2e55.chunk.js.map | 1 - web-app/build/static/js/461.dbb22491.chunk.js | 2 - .../build/static/js/461.dbb22491.chunk.js.map | 1 - web-app/build/static/js/481.f19f292a.chunk.js | 2 - .../build/static/js/481.f19f292a.chunk.js.map | 1 - web-app/build/static/js/517.6b633ce9.chunk.js | 2 - .../build/static/js/517.6b633ce9.chunk.js.map | 1 - web-app/build/static/js/577.4e2f491e.chunk.js | 2 - .../build/static/js/577.4e2f491e.chunk.js.map | 1 - web-app/build/static/js/619.87b2158f.chunk.js | 2 - .../build/static/js/619.87b2158f.chunk.js.map | 1 - web-app/build/static/js/629.e9da79a6.chunk.js | 2 - .../build/static/js/629.e9da79a6.chunk.js.map | 1 - web-app/build/static/js/64.2066437f.chunk.js | 2 - .../build/static/js/64.2066437f.chunk.js.map | 1 - web-app/build/static/js/641.c69d9e22.chunk.js | 2 - .../build/static/js/641.c69d9e22.chunk.js.map | 1 - web-app/build/static/js/654.59b7c512.chunk.js | 2 - .../build/static/js/654.59b7c512.chunk.js.map | 1 - web-app/build/static/js/666.3139236b.chunk.js | 2 - .../build/static/js/666.3139236b.chunk.js.map | 1 - web-app/build/static/js/682.2ebc8fc9.chunk.js | 2 - .../build/static/js/682.2ebc8fc9.chunk.js.map | 1 - web-app/build/static/js/713.229d739a.chunk.js | 2 - .../build/static/js/713.229d739a.chunk.js.map | 1 - web-app/build/static/js/723.799b7760.chunk.js | 2 - .../build/static/js/723.799b7760.chunk.js.map | 1 - web-app/build/static/js/728.2edde3f9.chunk.js | 2 - .../build/static/js/728.2edde3f9.chunk.js.map | 1 - web-app/build/static/js/729.386ba038.chunk.js | 2 - .../build/static/js/729.386ba038.chunk.js.map | 1 - web-app/build/static/js/732.33ddca24.chunk.js | 2 - .../build/static/js/732.33ddca24.chunk.js.map | 1 - web-app/build/static/js/799.359bf5c9.chunk.js | 2 - .../build/static/js/799.359bf5c9.chunk.js.map | 1 - web-app/build/static/js/829.67cb6474.chunk.js | 3 - .../js/829.67cb6474.chunk.js.LICENSE.txt | 147 - .../build/static/js/829.67cb6474.chunk.js.map | 1 - web-app/build/static/js/872.9de95914.chunk.js | 2 - .../build/static/js/872.9de95914.chunk.js.map | 1 - web-app/build/static/js/890.17acf929.chunk.js | 2 - .../build/static/js/890.17acf929.chunk.js.map | 1 - web-app/build/static/js/941.a504f48a.chunk.js | 2 - .../build/static/js/941.a504f48a.chunk.js.map | 1 - web-app/build/static/js/943.4c3f42c0.chunk.js | 2 - .../build/static/js/943.4c3f42c0.chunk.js.map | 1 - web-app/build/static/js/977.74859670.chunk.js | 2 - .../build/static/js/977.74859670.chunk.js.map | 1 - web-app/build/static/js/979.21101997.chunk.js | 2 - .../build/static/js/979.21101997.chunk.js.map | 1 - web-app/build/static/js/main.bbc673b5.js | 3 - .../static/js/main.bbc673b5.js.LICENSE.txt | 127 - web-app/build/static/js/main.bbc673b5.js.map | 1 - .../Inter-Black.15ca31c0a2a68f76d2d1.woff2 | Bin 102868 -> 0 bytes .../Inter-Black.c6938660eec019fefd68.woff | Bin 138764 -> 0 bytes ...nter-BlackItalic.ca1e738e4f349f27514d.woff | Bin 146824 -> 0 bytes ...ter-BlackItalic.cb2a7335650c690077fe.woff2 | Bin 108752 -> 0 bytes .../Inter-Bold.93c1301bd9f486c573b3.woff | Bin 143208 -> 0 bytes .../Inter-Bold.ec64ea577b0349e055ad.woff2 | Bin 106140 -> 0 bytes ...nter-BoldItalic.2d26c56a606662486796.woff2 | Bin 111808 -> 0 bytes ...Inter-BoldItalic.b376885042f6c961a541.woff | Bin 151052 -> 0 bytes .../Inter-Italic.890025e726861dba417f.woff | Bin 144372 -> 0 bytes .../Inter-Italic.cb10ffd7684cd9836a05.woff2 | Bin 106876 -> 0 bytes .../Inter-Light.2d5198822ab091ce4305.woff2 | Bin 104332 -> 0 bytes .../Inter-Light.994e34451cc19ede31d3.woff | Bin 140632 -> 0 bytes ...nter-LightItalic.ef9f65d91d2b0ba9b2e4.woff | Bin 150092 -> 0 bytes ...ter-LightItalic.f86952265d7b0f02c921.woff2 | Bin 111332 -> 0 bytes .../Inter-Regular.8c206db99195777c6769.woff | Bin 133844 -> 0 bytes .../Inter-Regular.c8ba52b05a9ef10f4758.woff2 | Bin 98868 -> 0 bytes .../Inter-Thin.29b9c616a95a912abf73.woff | Bin 135920 -> 0 bytes .../Inter-Thin.fff2a096db014f6239d4.woff2 | Bin 99632 -> 0 bytes ...inAnimationPoster.9aa924bfe619e71d5d29.png | Bin 325914 -> 0 bytes .../media/videoBG.17363418b3c2246a0e27.mp4 | Bin 3835591 -> 0 bytes web-app/build/styles/root-styles.css | 20 - web-app/build/verified.svg | 58 - web-app/build/webhooks-logo.svg | 1 - web-app/check-deadcode.sh | 8 - web-app/check-prettier.sh | 9 - web-app/check-warnings.sh | 19 - web-app/config-overrides.js | 10 - web-app/package.json | 86 - web-app/public/Loader.svg | 42 - web-app/public/agpl-logo.svg | 25 - web-app/public/agpl.svg | 1 - web-app/public/amazon.png | Bin 9185 -> 0 bytes web-app/public/amqp-logo.svg | 1 - web-app/public/amqp.png | Bin 30271 -> 0 bytes web-app/public/android-icon-144x144.png | Bin 19639 -> 0 bytes web-app/public/android-icon-192x192.png | Bin 19306 -> 0 bytes web-app/public/android-icon-36x36.png | Bin 16139 -> 0 bytes web-app/public/android-icon-48x48.png | Bin 16403 -> 0 bytes web-app/public/android-icon-72x72.png | Bin 17295 -> 0 bytes web-app/public/android-icon-96x96.png | Bin 18154 -> 0 bytes web-app/public/apple-icon-180x180.png | Bin 21356 -> 0 bytes web-app/public/aws-logo.svg | 38 - web-app/public/azure-logo.svg | 1 - web-app/public/azure.png | Bin 8888 -> 0 bytes web-app/public/elasticsearch-logo.svg | 1 - web-app/public/elasticsearch.png | Bin 8003 -> 0 bytes web-app/public/favicon-16x16.png | Bin 14906 -> 0 bytes web-app/public/favicon-32x32.png | Bin 16066 -> 0 bytes web-app/public/favicon-96x96.png | Bin 17029 -> 0 bytes web-app/public/favicon.ico | Bin 1525 -> 0 bytes web-app/public/gcs-logo.svg | 1 - web-app/public/gcs.png | Bin 7804 -> 0 bytes web-app/public/images/BG_Illustration.svg | 1 - .../public/images/BG_IllustrationDarker.svg | 67 - .../public/images/background-wave-orig.svg | 1385 -- .../public/images/background-wave-orig2.svg | 1 - web-app/public/images/background.svg | 9 - web-app/public/images/ob_bucket_clear.svg | 6 - web-app/public/images/ob_bucket_filled.svg | 6 - web-app/public/images/ob_file_clear.svg | 10 - web-app/public/images/ob_file_filled.svg | 10 - web-app/public/images/ob_folder_clear.svg | 10 - web-app/public/images/ob_folder_filled.svg | 10 - .../images/object-browser-folder-icn.svg | 11 - web-app/public/images/object-browser-icn.svg | 6 - web-app/public/images/search-icn.svg | 3 - web-app/public/images/trash-icn.svg | 6 - web-app/public/index.html | 86 - web-app/public/kafka-logo.svg | 1 - web-app/public/kafka.png | Bin 10782 -> 0 bytes web-app/public/lambda-rect.svg | 1 - web-app/public/logo192.png | Bin 9284 -> 0 bytes web-app/public/logo512.png | Bin 15302 -> 0 bytes web-app/public/manifest.json | 50 - web-app/public/minio-logo.svg | 1 - web-app/public/minioTier.png | Bin 7679 -> 0 bytes web-app/public/mqtt-logo.svg | 1 - web-app/public/mqtt.png | Bin 24598 -> 0 bytes web-app/public/mysql-logo.svg | 1 - web-app/public/mysql.png | Bin 19940 -> 0 bytes web-app/public/nats-logo.svg | 1 - web-app/public/nats.png | Bin 25129 -> 0 bytes web-app/public/nsq-logo.svg | 1 - web-app/public/postgres-logo.svg | 1 - web-app/public/postgres.png | Bin 46793 -> 0 bytes web-app/public/redis-logo.svg | 1 - web-app/public/redis.png | Bin 48048 -> 0 bytes web-app/public/robots.txt | 2 - web-app/public/safari-pinned-tab.svg | 148 - web-app/public/styles/root-styles.css | 20 - web-app/public/verified.svg | 58 - web-app/public/webhooks-logo.svg | 1 - web-app/src/MainRouter.tsx | 67 - web-app/src/ProtectedRoutes.tsx | 117 - web-app/src/StyleHandler.tsx | 40 - web-app/src/api/index.ts | 39 - web-app/src/api/operatorApi.ts | 2520 --- web-app/src/common/LoadingComponent.tsx | 43 - .../__tests__/accessControl.test.ts | 196 - .../common/SecureComponent/accessControl.ts | 166 - web-app/src/common/SecureComponent/index.ts | 17 - .../src/common/SecureComponent/permissions.ts | 523 - web-app/src/common/__tests__/utils.test.ts | 87 - web-app/src/common/api/index.ts | 95 - web-app/src/common/types.ts | 184 - web-app/src/common/utils.ts | 547 - web-app/src/config.ts | 40 - web-app/src/history.ts | 3 - web-app/src/index.css | 23 - web-app/src/index.tsx | 42 - web-app/src/logo.svg | 7 - web-app/src/react-app-env.d.ts | 1 - web-app/src/screens/Console/CommandBar.tsx | 295 - .../Common/Components/withSuspense.tsx | 34 - .../Console/Common/ComponentsScreen.tsx | 73 - .../CredentialsPrompt/CredentialItem.tsx | 60 - .../CredentialsPrompt/CredentialsPrompt.tsx | 271 - .../Console/Common/CredentialsPrompt/types.ts | 29 - .../Console/Common/DarkModeActivator.tsx | 48 - .../InputUnitMenu/InputUnitMenu.tsx | 86 - .../FormComponents/common/styleLibrary.ts | 60 - .../src/screens/Console/Common/H3Section.tsx | 25 - .../screens/Console/Common/Hooks/useApi.tsx | 32 - .../screens/Console/Common/IconsScreen.tsx | 1304 -- .../Console/Common/MainError/MainError.tsx | 75 - .../Common/ModalWrapper/ConfirmDialog.tsx | 103 - .../Common/ModalWrapper/ModalWrapper.tsx | 111 - .../PageHeaderWrapper/PageHeaderWrapper.tsx | 46 - .../src/screens/Console/Common/SearchBox.tsx | 56 - .../Common/TLSCertificate/TLSCertificate.tsx | 228 - .../TolerationSelector/TolerationSelector.tsx | 216 - .../Common/TooltipWrapper/TooltipWrapper.tsx | 42 - .../Console/Common/UsageBar/UsageBar.tsx | 66 - .../UsageBarWrapper/SummaryUsageBar.tsx | 220 - .../VirtualizedList/VirtualizedList.tsx | 84 - web-app/src/screens/Console/Console.tsx | 256 - web-app/src/screens/Console/ConsoleKBar.tsx | 43 - .../src/screens/Console/License/FAQModal.tsx | 41 - .../src/screens/Console/License/License.tsx | 166 - .../Console/License/LicenseConsentModal.tsx | 126 - .../screens/Console/License/LicenseFAQ.tsx | 71 - .../screens/Console/License/LicenseLink.tsx | 32 - .../screens/Console/License/LicensePlans.tsx | 749 - .../screens/Console/License/licenseSlice.ts | 42 - web-app/src/screens/Console/License/types.tsx | 47 - web-app/src/screens/Console/License/utils.tsx | 455 - .../Console/Marketplace/Marketplace.tsx | 82 - .../Console/Marketplace/SetEmailModal.tsx | 113 - .../Console/Marketplace/euTimezones.ts | 78 - .../src/screens/Console/Marketplace/types.tsx | 27 - web-app/src/screens/Console/Menu/AppMenu.tsx | 55 - web-app/src/screens/Console/Menu/types.ts | 40 - web-app/src/screens/Console/Storage/types.ts | 27 - .../Console/Support/ApiKeyRegister.tsx | 184 - .../Console/Support/GetApiKeyModal.tsx | 173 - .../Console/Support/RegisterHelpBox.tsx | 136 - .../Console/Support/RegisterOperator.tsx | 86 - .../Support/RegistrationStatusBanner.tsx | 66 - .../screens/Console/Support/registerSlice.ts | 132 - web-app/src/screens/Console/Support/utils.tsx | 72 - .../Console/Tenants/AddTenant/AddTenant.tsx | 197 - .../Tenants/AddTenant/CreateTenantButton.tsx | 60 - .../AddTenant/NewTenantCredentials.tsx | 52 - .../Tenants/AddTenant/Steps/Affinity.tsx | 498 - .../Tenants/AddTenant/Steps/Configure.tsx | 668 - .../Tenants/AddTenant/Steps/Encryption.tsx | 700 - .../AddTenant/Steps/Encryption/AWSKMSAdd.tsx | 198 - .../Steps/Encryption/AzureKMSAdd.tsx | 169 - .../AddTenant/Steps/Encryption/GCPKMSAdd.tsx | 124 - .../Steps/Encryption/GemaltoKMSAdd.tsx | 175 - .../Steps/Encryption/VaultKMSAdd.tsx | 257 - .../AddTenant/Steps/IdentityProvider.tsx | 79 - .../IdentityProvider/IDPActiveDirectory.tsx | 415 - .../Steps/IdentityProvider/IDPBuiltIn.tsx | 206 - .../Steps/IdentityProvider/IDPOpenID.tsx | 189 - .../Tenants/AddTenant/Steps/Images.tsx | 239 - .../Tenants/AddTenant/Steps/Security.tsx | 385 - .../Tenants/AddTenant/Steps/SizePreview.tsx | 224 - .../Steps/TenantResources/NameTenantMain.tsx | 180 - .../TenantResources/NamespaceSelector.tsx | 84 - .../Steps/TenantResources/TenantResources.tsx | 55 - .../Steps/TenantResources/TenantSize.tsx | 434 - .../Steps/TenantResources/TenantSizeMK.tsx | 331 - .../TenantResources/TenantSizeResources.tsx | 352 - .../AddTenant/Steps/TenantResources/utils.tsx | 167 - .../Steps/helpers/AddNamespaceModal.tsx | 75 - .../Console/Tenants/AddTenant/common.ts | 24 - .../Tenants/AddTenant/createTenantAPI.ts | 56 - .../Tenants/AddTenant/createTenantSlice.ts | 967 - .../Console/Tenants/AddTenant/sliceUtils.ts | 36 - .../AddTenant/thunks/createTenantThunk.ts | 542 - .../AddTenant/thunks/namespaceThunks.ts | 102 - .../Console/Tenants/HelpBox/TLSHelpBox.tsx | 143 - .../Tenants/ListTenants/DeleteTenant.tsx | 123 - .../Tenants/ListTenants/InformationItem.tsx | 77 - .../Tenants/ListTenants/ListTenants.tsx | 339 - .../Tenants/ListTenants/TenantCapacity.tsx | 195 - .../Tenants/ListTenants/TenantListItem.tsx | 374 - .../Console/Tenants/ListTenants/types.ts | 113 - .../Console/Tenants/ListTenants/utils.ts | 78 - .../Tenants/TenantDetails/DeletePVC.tsx | 97 - .../Tenants/TenantDetails/DeletePod.tsx | 93 - .../Tenants/TenantDetails/EditDomains.tsx | 282 - .../Tenants/TenantDetails/KMSPolicyInfo.tsx | 122 - .../Tenants/TenantDetails/PodsSummary.tsx | 266 - .../TenantDetails/Pools/AddPool/AddPool.tsx | 138 - .../Pools/AddPool/AddPoolCreateButton.tsx | 51 - .../Pools/AddPool/PoolConfiguration.tsx | 295 - .../Pools/AddPool/PoolPodPlacement.tsx | 510 - .../Pools/AddPool/PoolResources.tsx | 265 - .../Pools/AddPool/addPoolSlice.ts | 196 - .../Pools/AddPool/addPoolThunks.ts | 118 - .../Pools/Details/PoolDetails.tsx | 278 - .../Pools/Details/PoolsListing.tsx | 128 - .../TenantDetails/Pools/EditPool/EditPool.tsx | 161 - .../Pools/EditPool/EditPoolButton.tsx | 58 - .../Pools/EditPool/EditPoolConfiguration.tsx | 293 - .../Pools/EditPool/EditPoolPlacement.tsx | 509 - .../Pools/EditPool/EditPoolResources.tsx | 246 - .../Pools/EditPool/editPoolSlice.ts | 287 - .../Pools/EditPool/thunks/editPoolAsync.ts | 150 - .../TenantDetails/Pools/EditPool/types.ts | 54 - .../Tenants/TenantDetails/PoolsSummary.tsx | 71 - .../TenantDetails/SubnetLicenseTenant.tsx | 200 - .../Tenants/TenantDetails/TenantCSR.tsx | 124 - .../TenantDetails/TenantConfiguration.tsx | 314 - .../Tenants/TenantDetails/TenantDetails.tsx | 412 - .../TenantDetails/TenantEncryption.tsx | 1801 -- .../Tenants/TenantDetails/TenantEvents.tsx | 83 - .../TenantDetails/TenantIdentityProvider.tsx | 720 - .../Tenants/TenantDetails/TenantLicense.tsx | 112 - .../Tenants/TenantDetails/TenantMetrics.tsx | 58 - .../Tenants/TenantDetails/TenantSecurity.tsx | 800 - .../Tenants/TenantDetails/TenantSummary.tsx | 371 - .../Tenants/TenantDetails/TenantTrace.tsx | 58 - .../Tenants/TenantDetails/TenantYAML.tsx | 173 - .../TenantDetails/UpdateTenantModal.tsx | 222 - .../Tenants/TenantDetails/VolumesSummary.tsx | 163 - .../TenantDetails/events/EventsList.tsx | 105 - .../Console/Tenants/TenantDetails/hop/Hop.tsx | 130 - .../TenantDetails/pods/PodDescribe.tsx | 513 - .../Tenants/TenantDetails/pods/PodDetails.tsx | 95 - .../Tenants/TenantDetails/pods/PodEvents.tsx | 92 - .../Tenants/TenantDetails/pods/PodLogs.tsx | 226 - .../TenantDetails/pvcs/PVCDescribe.tsx | 201 - .../TenantDetails/pvcs/TenantVolumes.tsx | 105 - .../Tenants/TenantDetails/pvcs/pvcTypes.ts | 58 - .../Console/Tenants/TenantDetails/utils.ts | 94 - .../Tenants/securityContextSelector.tsx | 159 - .../Tenants/tenantSecurityContextSlice.ts | 65 - .../screens/Console/Tenants/tenantsSlice.ts | 117 - .../Tenants/thunks/tenantDetailsAsync.ts | 41 - web-app/src/screens/Console/Tenants/types.ts | 333 - web-app/src/screens/Console/Tenants/utils.ts | 37 - web-app/src/screens/Console/consoleSlice.ts | 57 - web-app/src/screens/Console/kbar-actions.tsx | 64 - web-app/src/screens/Console/types.ts | 44 - web-app/src/screens/Console/valid-routes.tsx | 66 - .../src/screens/LoginPage/LoginCallback.tsx | 150 - web-app/src/screens/LoginPage/LoginPage.tsx | 350 - .../src/screens/LoginPage/StrategyForm.tsx | 191 - web-app/src/screens/LoginPage/loginSlice.ts | 141 - web-app/src/screens/LoginPage/loginThunks.ts | 146 - web-app/src/screens/LoginPage/types.ts | 35 - web-app/src/screens/LogoutPage/LogoutPage.tsx | 56 - web-app/src/serviceWorker.ts | 143 - web-app/src/store.ts | 59 - web-app/src/systemSlice.ts | 208 - web-app/src/types.ts | 115 - web-app/src/utils/matchMedia.js | 13 - web-app/src/utils/sortFunctions.ts | 27 - web-app/src/utils/stylesUtils.ts | 44 - web-app/src/utils/validationFunctions.ts | 71 - web-app/tests/constants/timestamp.txt | 1 - web-app/tests/operator/login/login.ts | 24 - .../operator/tenant/test-1/tenant-test-1.ts | 115 - web-app/tests/operator/utils.ts | 125 - .../tests/policies/bucketAssignPolicy.json | 16 - web-app/tests/policies/bucketCannotTag.json | 16 - web-app/tests/policies/bucketRead.json | 18 - web-app/tests/policies/bucketReadWrite.json | 10 - web-app/tests/policies/bucketSpecific.json | 43 - web-app/tests/policies/bucketWrite.json | 17 - .../policies/bucketWritePrefixOnlyPolicy.json | 25 - web-app/tests/policies/conditionsPolicy.json | 28 - web-app/tests/policies/conditionsPolicy2.json | 28 - web-app/tests/policies/dashboard.json | 10 - .../policies/deleteObjectWithPrefix.json | 58 - web-app/tests/policies/diagnostics.json | 10 - .../policies/fix-prefix-policy-ui-crash.json | 19 - web-app/tests/policies/groups.json | 18 - web-app/tests/policies/heal.json | 16 - web-app/tests/policies/iamPolicies.json | 16 - web-app/tests/policies/inspect-allowed.json | 16 - .../tests/policies/inspect-not-allowed.json | 16 - web-app/tests/policies/logs.json | 10 - .../tests/policies/notificationEndpoints.json | 10 - web-app/tests/policies/settings.json | 10 - web-app/tests/policies/tiers.json | 10 - web-app/tests/policies/trace.json | 10 - web-app/tests/policies/users.json | 25 - web-app/tests/policies/watch.json | 11 - web-app/tests/scripts/cleanup-env.sh | 80 - web-app/tests/scripts/common.sh | 116 - web-app/tests/scripts/initialize-env.sh | 84 - web-app/tests/scripts/operator.sh | 54 - web-app/tests/scripts/permissions.sh | 103 - web-app/tests/uploads/test.txt | 1 - web-app/tests/utils/constants.ts | 42 - web-app/tests/utils/elements-menu.ts | 99 - web-app/tests/utils/elements.ts | 204 - web-app/tests/utils/functions.ts | 188 - web-app/tests/utils/roles.ts | 274 - web-app/tsconfig.dev.json | 6 - web-app/tsconfig.json | 23 - web-app/yarn.lock | 17573 ---------------- 938 files changed, 94 insertions(+), 145060 deletions(-) delete mode 100644 .github/workflows/ui.yaml delete mode 100644 api/admin_client_mock.go delete mode 100644 api/admin_info.go delete mode 100644 api/admin_policies.go delete mode 100644 api/admin_policies_test.go delete mode 100644 api/certificate-handlers.go delete mode 100644 api/client-admin.go delete mode 100644 api/client.go delete mode 100644 api/config.go delete mode 100644 api/config_test.go delete mode 100644 api/configuration-handlers.go delete mode 100644 api/configure_operator.go delete mode 100644 api/consts.go delete mode 100644 api/cookies.go delete mode 100644 api/doc.go delete mode 100644 api/domain-handlers.go delete mode 100644 api/domain-handlers_test.go delete mode 100644 api/embedded_spec.go delete mode 100644 api/encryption-handlers.go delete mode 100644 api/encryption-handlers_test.go delete mode 100644 api/errors.go delete mode 100644 api/errors_test.go delete mode 100644 api/event-handlers.go delete mode 100644 api/idp-handlers.go delete mode 100644 api/idp-handlers_test.go delete mode 100644 api/k8s_client.go delete mode 100644 api/k8s_client_mock.go delete mode 100644 api/kubernetes.go delete mode 100644 api/license.go delete mode 100644 api/login.go delete mode 100644 api/logout.go delete mode 100644 api/logs.go delete mode 100644 api/logs_test.go delete mode 100644 api/marketplace.go delete mode 100644 api/marketplace_test.go delete mode 100644 api/minio.go delete mode 100644 api/minio_operator_mock.go delete mode 100644 api/namespaces.go delete mode 100644 api/namespaces_test.go delete mode 100644 api/nodes.go delete mode 100644 api/nodes_test.go delete mode 100644 api/operations/auth/login_detail.go delete mode 100644 api/operations/auth/login_detail_parameters.go delete mode 100644 api/operations/auth/login_detail_responses.go delete mode 100644 api/operations/auth/login_detail_urlbuilder.go delete mode 100644 api/operations/auth/login_oauth2_auth.go delete mode 100644 api/operations/auth/login_oauth2_auth_parameters.go delete mode 100644 api/operations/auth/login_oauth2_auth_responses.go delete mode 100644 api/operations/auth/login_oauth2_auth_urlbuilder.go delete mode 100644 api/operations/auth/login_operator.go delete mode 100644 api/operations/auth/login_operator_parameters.go delete mode 100644 api/operations/auth/login_operator_responses.go delete mode 100644 api/operations/auth/login_operator_urlbuilder.go delete mode 100644 api/operations/auth/logout.go delete mode 100644 api/operations/auth/logout_parameters.go delete mode 100644 api/operations/auth/logout_responses.go delete mode 100644 api/operations/auth/logout_urlbuilder.go delete mode 100644 api/operations/auth/session_check.go delete mode 100644 api/operations/auth/session_check_parameters.go delete mode 100644 api/operations/auth/session_check_responses.go delete mode 100644 api/operations/auth/session_check_urlbuilder.go delete mode 100644 api/operations/operator_api.go delete mode 100644 api/operations/operator_api/create_namespace.go delete mode 100644 api/operations/operator_api/create_namespace_parameters.go delete mode 100644 api/operations/operator_api/create_namespace_responses.go delete mode 100644 api/operations/operator_api/create_namespace_urlbuilder.go delete mode 100644 api/operations/operator_api/create_tenant.go delete mode 100644 api/operations/operator_api/create_tenant_parameters.go delete mode 100644 api/operations/operator_api/create_tenant_responses.go delete mode 100644 api/operations/operator_api/create_tenant_urlbuilder.go delete mode 100644 api/operations/operator_api/delete_p_v_c.go delete mode 100644 api/operations/operator_api/delete_p_v_c_parameters.go delete mode 100644 api/operations/operator_api/delete_p_v_c_responses.go delete mode 100644 api/operations/operator_api/delete_p_v_c_urlbuilder.go delete mode 100644 api/operations/operator_api/delete_pod.go delete mode 100644 api/operations/operator_api/delete_pod_parameters.go delete mode 100644 api/operations/operator_api/delete_pod_responses.go delete mode 100644 api/operations/operator_api/delete_pod_urlbuilder.go delete mode 100644 api/operations/operator_api/delete_tenant.go delete mode 100644 api/operations/operator_api/delete_tenant_parameters.go delete mode 100644 api/operations/operator_api/delete_tenant_responses.go delete mode 100644 api/operations/operator_api/delete_tenant_urlbuilder.go delete mode 100644 api/operations/operator_api/describe_pod.go delete mode 100644 api/operations/operator_api/describe_pod_parameters.go delete mode 100644 api/operations/operator_api/describe_pod_responses.go delete mode 100644 api/operations/operator_api/describe_pod_urlbuilder.go delete mode 100644 api/operations/operator_api/get_allocatable_resources.go delete mode 100644 api/operations/operator_api/get_allocatable_resources_parameters.go delete mode 100644 api/operations/operator_api/get_allocatable_resources_responses.go delete mode 100644 api/operations/operator_api/get_allocatable_resources_urlbuilder.go delete mode 100644 api/operations/operator_api/get_m_p_integration.go delete mode 100644 api/operations/operator_api/get_m_p_integration_parameters.go delete mode 100644 api/operations/operator_api/get_m_p_integration_responses.go delete mode 100644 api/operations/operator_api/get_m_p_integration_urlbuilder.go delete mode 100644 api/operations/operator_api/get_max_allocatable_mem.go delete mode 100644 api/operations/operator_api/get_max_allocatable_mem_parameters.go delete mode 100644 api/operations/operator_api/get_max_allocatable_mem_responses.go delete mode 100644 api/operations/operator_api/get_max_allocatable_mem_urlbuilder.go delete mode 100644 api/operations/operator_api/get_p_v_c_describe.go delete mode 100644 api/operations/operator_api/get_p_v_c_describe_parameters.go delete mode 100644 api/operations/operator_api/get_p_v_c_describe_responses.go delete mode 100644 api/operations/operator_api/get_p_v_c_describe_urlbuilder.go delete mode 100644 api/operations/operator_api/get_p_v_c_events.go delete mode 100644 api/operations/operator_api/get_p_v_c_events_parameters.go delete mode 100644 api/operations/operator_api/get_p_v_c_events_responses.go delete mode 100644 api/operations/operator_api/get_p_v_c_events_urlbuilder.go delete mode 100644 api/operations/operator_api/get_parity.go delete mode 100644 api/operations/operator_api/get_parity_parameters.go delete mode 100644 api/operations/operator_api/get_parity_responses.go delete mode 100644 api/operations/operator_api/get_parity_urlbuilder.go delete mode 100644 api/operations/operator_api/get_pod_events.go delete mode 100644 api/operations/operator_api/get_pod_events_parameters.go delete mode 100644 api/operations/operator_api/get_pod_events_responses.go delete mode 100644 api/operations/operator_api/get_pod_events_urlbuilder.go delete mode 100644 api/operations/operator_api/get_pod_logs.go delete mode 100644 api/operations/operator_api/get_pod_logs_parameters.go delete mode 100644 api/operations/operator_api/get_pod_logs_responses.go delete mode 100644 api/operations/operator_api/get_pod_logs_urlbuilder.go delete mode 100644 api/operations/operator_api/get_resource_quota.go delete mode 100644 api/operations/operator_api/get_resource_quota_parameters.go delete mode 100644 api/operations/operator_api/get_resource_quota_responses.go delete mode 100644 api/operations/operator_api/get_resource_quota_urlbuilder.go delete mode 100644 api/operations/operator_api/get_tenant_events.go delete mode 100644 api/operations/operator_api/get_tenant_events_parameters.go delete mode 100644 api/operations/operator_api/get_tenant_events_responses.go delete mode 100644 api/operations/operator_api/get_tenant_events_urlbuilder.go delete mode 100644 api/operations/operator_api/get_tenant_log_report.go delete mode 100644 api/operations/operator_api/get_tenant_log_report_parameters.go delete mode 100644 api/operations/operator_api/get_tenant_log_report_responses.go delete mode 100644 api/operations/operator_api/get_tenant_log_report_urlbuilder.go delete mode 100644 api/operations/operator_api/get_tenant_pods.go delete mode 100644 api/operations/operator_api/get_tenant_pods_parameters.go delete mode 100644 api/operations/operator_api/get_tenant_pods_responses.go delete mode 100644 api/operations/operator_api/get_tenant_pods_urlbuilder.go delete mode 100644 api/operations/operator_api/get_tenant_usage.go delete mode 100644 api/operations/operator_api/get_tenant_usage_parameters.go delete mode 100644 api/operations/operator_api/get_tenant_usage_responses.go delete mode 100644 api/operations/operator_api/get_tenant_usage_urlbuilder.go delete mode 100644 api/operations/operator_api/get_tenant_y_a_m_l.go delete mode 100644 api/operations/operator_api/get_tenant_y_a_m_l_parameters.go delete mode 100644 api/operations/operator_api/get_tenant_y_a_m_l_responses.go delete mode 100644 api/operations/operator_api/get_tenant_y_a_m_l_urlbuilder.go delete mode 100644 api/operations/operator_api/list_all_tenants.go delete mode 100644 api/operations/operator_api/list_all_tenants_parameters.go delete mode 100644 api/operations/operator_api/list_all_tenants_responses.go delete mode 100644 api/operations/operator_api/list_all_tenants_urlbuilder.go delete mode 100644 api/operations/operator_api/list_node_labels.go delete mode 100644 api/operations/operator_api/list_node_labels_parameters.go delete mode 100644 api/operations/operator_api/list_node_labels_responses.go delete mode 100644 api/operations/operator_api/list_node_labels_urlbuilder.go delete mode 100644 api/operations/operator_api/list_p_v_cs.go delete mode 100644 api/operations/operator_api/list_p_v_cs_for_tenant.go delete mode 100644 api/operations/operator_api/list_p_v_cs_for_tenant_parameters.go delete mode 100644 api/operations/operator_api/list_p_v_cs_for_tenant_responses.go delete mode 100644 api/operations/operator_api/list_p_v_cs_for_tenant_urlbuilder.go delete mode 100644 api/operations/operator_api/list_p_v_cs_parameters.go delete mode 100644 api/operations/operator_api/list_p_v_cs_responses.go delete mode 100644 api/operations/operator_api/list_p_v_cs_urlbuilder.go delete mode 100644 api/operations/operator_api/list_tenant_certificate_signing_request.go delete mode 100644 api/operations/operator_api/list_tenant_certificate_signing_request_parameters.go delete mode 100644 api/operations/operator_api/list_tenant_certificate_signing_request_responses.go delete mode 100644 api/operations/operator_api/list_tenant_certificate_signing_request_urlbuilder.go delete mode 100644 api/operations/operator_api/list_tenants.go delete mode 100644 api/operations/operator_api/list_tenants_parameters.go delete mode 100644 api/operations/operator_api/list_tenants_responses.go delete mode 100644 api/operations/operator_api/list_tenants_urlbuilder.go delete mode 100644 api/operations/operator_api/operator_subnet_api_key.go delete mode 100644 api/operations/operator_api/operator_subnet_api_key_info.go delete mode 100644 api/operations/operator_api/operator_subnet_api_key_info_parameters.go delete mode 100644 api/operations/operator_api/operator_subnet_api_key_info_responses.go delete mode 100644 api/operations/operator_api/operator_subnet_api_key_info_urlbuilder.go delete mode 100644 api/operations/operator_api/operator_subnet_api_key_parameters.go delete mode 100644 api/operations/operator_api/operator_subnet_api_key_responses.go delete mode 100644 api/operations/operator_api/operator_subnet_api_key_urlbuilder.go delete mode 100644 api/operations/operator_api/operator_subnet_login.go delete mode 100644 api/operations/operator_api/operator_subnet_login_m_f_a.go delete mode 100644 api/operations/operator_api/operator_subnet_login_m_f_a_parameters.go delete mode 100644 api/operations/operator_api/operator_subnet_login_m_f_a_responses.go delete mode 100644 api/operations/operator_api/operator_subnet_login_m_f_a_urlbuilder.go delete mode 100644 api/operations/operator_api/operator_subnet_login_parameters.go delete mode 100644 api/operations/operator_api/operator_subnet_login_responses.go delete mode 100644 api/operations/operator_api/operator_subnet_login_urlbuilder.go delete mode 100644 api/operations/operator_api/operator_subnet_register_api_key.go delete mode 100644 api/operations/operator_api/operator_subnet_register_api_key_parameters.go delete mode 100644 api/operations/operator_api/operator_subnet_register_api_key_responses.go delete mode 100644 api/operations/operator_api/operator_subnet_register_api_key_urlbuilder.go delete mode 100644 api/operations/operator_api/post_m_p_integration.go delete mode 100644 api/operations/operator_api/post_m_p_integration_parameters.go delete mode 100644 api/operations/operator_api/post_m_p_integration_responses.go delete mode 100644 api/operations/operator_api/post_m_p_integration_urlbuilder.go delete mode 100644 api/operations/operator_api/put_tenant_y_a_m_l.go delete mode 100644 api/operations/operator_api/put_tenant_y_a_m_l_parameters.go delete mode 100644 api/operations/operator_api/put_tenant_y_a_m_l_responses.go delete mode 100644 api/operations/operator_api/put_tenant_y_a_m_l_urlbuilder.go delete mode 100644 api/operations/operator_api/set_tenant_administrators.go delete mode 100644 api/operations/operator_api/set_tenant_administrators_parameters.go delete mode 100644 api/operations/operator_api/set_tenant_administrators_responses.go delete mode 100644 api/operations/operator_api/set_tenant_administrators_urlbuilder.go delete mode 100644 api/operations/operator_api/subscription_activate.go delete mode 100644 api/operations/operator_api/subscription_activate_parameters.go delete mode 100644 api/operations/operator_api/subscription_activate_responses.go delete mode 100644 api/operations/operator_api/subscription_activate_urlbuilder.go delete mode 100644 api/operations/operator_api/subscription_info.go delete mode 100644 api/operations/operator_api/subscription_info_parameters.go delete mode 100644 api/operations/operator_api/subscription_info_responses.go delete mode 100644 api/operations/operator_api/subscription_info_urlbuilder.go delete mode 100644 api/operations/operator_api/subscription_refresh.go delete mode 100644 api/operations/operator_api/subscription_refresh_parameters.go delete mode 100644 api/operations/operator_api/subscription_refresh_responses.go delete mode 100644 api/operations/operator_api/subscription_refresh_urlbuilder.go delete mode 100644 api/operations/operator_api/subscription_validate.go delete mode 100644 api/operations/operator_api/subscription_validate_parameters.go delete mode 100644 api/operations/operator_api/subscription_validate_responses.go delete mode 100644 api/operations/operator_api/subscription_validate_urlbuilder.go delete mode 100644 api/operations/operator_api/tenant_add_pool.go delete mode 100644 api/operations/operator_api/tenant_add_pool_parameters.go delete mode 100644 api/operations/operator_api/tenant_add_pool_responses.go delete mode 100644 api/operations/operator_api/tenant_add_pool_urlbuilder.go delete mode 100644 api/operations/operator_api/tenant_configuration.go delete mode 100644 api/operations/operator_api/tenant_configuration_parameters.go delete mode 100644 api/operations/operator_api/tenant_configuration_responses.go delete mode 100644 api/operations/operator_api/tenant_configuration_urlbuilder.go delete mode 100644 api/operations/operator_api/tenant_delete_encryption.go delete mode 100644 api/operations/operator_api/tenant_delete_encryption_parameters.go delete mode 100644 api/operations/operator_api/tenant_delete_encryption_responses.go delete mode 100644 api/operations/operator_api/tenant_delete_encryption_urlbuilder.go delete mode 100644 api/operations/operator_api/tenant_details.go delete mode 100644 api/operations/operator_api/tenant_details_parameters.go delete mode 100644 api/operations/operator_api/tenant_details_responses.go delete mode 100644 api/operations/operator_api/tenant_details_urlbuilder.go delete mode 100644 api/operations/operator_api/tenant_encryption_info.go delete mode 100644 api/operations/operator_api/tenant_encryption_info_parameters.go delete mode 100644 api/operations/operator_api/tenant_encryption_info_responses.go delete mode 100644 api/operations/operator_api/tenant_encryption_info_urlbuilder.go delete mode 100644 api/operations/operator_api/tenant_identity_provider.go delete mode 100644 api/operations/operator_api/tenant_identity_provider_parameters.go delete mode 100644 api/operations/operator_api/tenant_identity_provider_responses.go delete mode 100644 api/operations/operator_api/tenant_identity_provider_urlbuilder.go delete mode 100644 api/operations/operator_api/tenant_security.go delete mode 100644 api/operations/operator_api/tenant_security_parameters.go delete mode 100644 api/operations/operator_api/tenant_security_responses.go delete mode 100644 api/operations/operator_api/tenant_security_urlbuilder.go delete mode 100644 api/operations/operator_api/tenant_update_certificate.go delete mode 100644 api/operations/operator_api/tenant_update_certificate_parameters.go delete mode 100644 api/operations/operator_api/tenant_update_certificate_responses.go delete mode 100644 api/operations/operator_api/tenant_update_certificate_urlbuilder.go delete mode 100644 api/operations/operator_api/tenant_update_encryption.go delete mode 100644 api/operations/operator_api/tenant_update_encryption_parameters.go delete mode 100644 api/operations/operator_api/tenant_update_encryption_responses.go delete mode 100644 api/operations/operator_api/tenant_update_encryption_urlbuilder.go delete mode 100644 api/operations/operator_api/tenant_update_pools.go delete mode 100644 api/operations/operator_api/tenant_update_pools_parameters.go delete mode 100644 api/operations/operator_api/tenant_update_pools_responses.go delete mode 100644 api/operations/operator_api/tenant_update_pools_urlbuilder.go delete mode 100644 api/operations/operator_api/update_tenant.go delete mode 100644 api/operations/operator_api/update_tenant_configuration.go delete mode 100644 api/operations/operator_api/update_tenant_configuration_parameters.go delete mode 100644 api/operations/operator_api/update_tenant_configuration_responses.go delete mode 100644 api/operations/operator_api/update_tenant_configuration_urlbuilder.go delete mode 100644 api/operations/operator_api/update_tenant_domains.go delete mode 100644 api/operations/operator_api/update_tenant_domains_parameters.go delete mode 100644 api/operations/operator_api/update_tenant_domains_responses.go delete mode 100644 api/operations/operator_api/update_tenant_domains_urlbuilder.go delete mode 100644 api/operations/operator_api/update_tenant_identity_provider.go delete mode 100644 api/operations/operator_api/update_tenant_identity_provider_parameters.go delete mode 100644 api/operations/operator_api/update_tenant_identity_provider_responses.go delete mode 100644 api/operations/operator_api/update_tenant_identity_provider_urlbuilder.go delete mode 100644 api/operations/operator_api/update_tenant_parameters.go delete mode 100644 api/operations/operator_api/update_tenant_responses.go delete mode 100644 api/operations/operator_api/update_tenant_security.go delete mode 100644 api/operations/operator_api/update_tenant_security_parameters.go delete mode 100644 api/operations/operator_api/update_tenant_security_responses.go delete mode 100644 api/operations/operator_api/update_tenant_security_urlbuilder.go delete mode 100644 api/operations/operator_api/update_tenant_urlbuilder.go delete mode 100644 api/operations/user_api/check_min_i_o_version.go delete mode 100644 api/operations/user_api/check_min_i_o_version_parameters.go delete mode 100644 api/operations/user_api/check_min_i_o_version_responses.go delete mode 100644 api/operations/user_api/check_min_i_o_version_urlbuilder.go delete mode 100644 api/operator.go delete mode 100644 api/operator_client.go delete mode 100644 api/operator_subnet.go delete mode 100644 api/operator_subnet_test.go delete mode 100644 api/operator_test.go delete mode 100644 api/parity.go delete mode 100644 api/parity_test.go delete mode 100644 api/pod-handlers.go delete mode 100644 api/pod-handlers_test.go delete mode 100644 api/pool-handlers.go delete mode 100644 api/pool-handlers_test.go delete mode 100644 api/proxy.go delete mode 100644 api/resource_quota.go delete mode 100644 api/resource_quota_test.go delete mode 100644 api/server.go delete mode 100644 api/session.go delete mode 100644 api/subnet-utils.go delete mode 100644 api/tenant-add-handlers.go delete mode 100644 api/tenant-get-handlers.go delete mode 100644 api/tenant-handlers.go delete mode 100644 api/tenant-handlers_test.go delete mode 100644 api/tenant_update.go delete mode 100644 api/tenants_2_test.go delete mode 100644 api/tenants_helper.go delete mode 100644 api/tenants_helper_test.go delete mode 100644 api/tls.go delete mode 100644 api/users-handlers.go delete mode 100644 api/utils.go delete mode 100644 api/utils_test.go delete mode 100644 api/version.go delete mode 100644 api/volumes.go delete mode 100644 api/volumes_test.go delete mode 100644 api/yaml-handlers.go delete mode 100644 cmd/operator/ui.go delete mode 100644 helm/operator/templates/console-clusterrole.yaml delete mode 100644 helm/operator/templates/console-clusterrolebinding.yaml delete mode 100644 helm/operator/templates/console-configmap.yaml delete mode 100644 helm/operator/templates/console-deployment.yaml delete mode 100644 helm/operator/templates/console-ingress.yaml delete mode 100644 helm/operator/templates/console-secret.yaml delete mode 100644 helm/operator/templates/console-service.yaml delete mode 100644 helm/operator/templates/console-serviceaccount.yaml delete mode 100644 models/allocatable_resources_response.go delete mode 100644 models/annotation.go delete mode 100644 models/aws_configuration.go delete mode 100644 models/azure_configuration.go delete mode 100644 models/backend_properties.go delete mode 100644 models/certificate_info.go delete mode 100644 models/check_operator_version_response.go delete mode 100644 models/condition.go delete mode 100644 models/config_map.go delete mode 100644 models/container.go delete mode 100644 models/create_tenant_request.go delete mode 100644 models/create_tenant_response.go delete mode 100644 models/csr_element.go delete mode 100644 models/csr_elements.go delete mode 100644 models/delete_tenant_request.go delete mode 100644 models/describe_p_v_c_wrapper.go delete mode 100644 models/describe_pod_wrapper.go delete mode 100644 models/domains_configuration.go delete mode 100644 models/encryption_configuration.go delete mode 100644 models/encryption_configuration_response.go delete mode 100644 models/environment_variable.go delete mode 100644 models/error.go delete mode 100644 models/event_list_element.go delete mode 100644 models/event_list_wrapper.go delete mode 100644 models/gcp_configuration.go delete mode 100644 models/gemalto_configuration.go delete mode 100644 models/gemalto_configuration_response.go delete mode 100644 models/idp_configuration.go delete mode 100644 models/image_registry.go delete mode 100644 models/key_pair_configuration.go delete mode 100644 models/label.go delete mode 100644 models/license.go delete mode 100644 models/list_p_v_cs_response.go delete mode 100644 models/list_tenants_response.go delete mode 100644 models/login_details.go delete mode 100644 models/login_oauth2_auth_request.go delete mode 100644 models/login_operator_request.go delete mode 100644 models/login_request.go delete mode 100644 models/login_response.go delete mode 100644 models/max_allocatable_mem_response.go delete mode 100644 models/metadata_fields.go delete mode 100644 models/mount.go delete mode 100644 models/mp_integration.go delete mode 100644 models/namespace.go delete mode 100644 models/node_labels.go delete mode 100644 models/node_max_allocatable_resources.go delete mode 100644 models/node_selector.go delete mode 100644 models/node_selector_term.go delete mode 100644 models/operator_session_response.go delete mode 100644 models/operator_subnet_api_key.go delete mode 100644 models/operator_subnet_login_m_f_a_request.go delete mode 100644 models/operator_subnet_login_request.go delete mode 100644 models/operator_subnet_login_response.go delete mode 100644 models/operator_subnet_register_api_key_response.go delete mode 100644 models/parity_response.go delete mode 100644 models/pod_affinity_term.go delete mode 100644 models/policy_entity.go delete mode 100644 models/pool.go delete mode 100644 models/pool_affinity.go delete mode 100644 models/pool_resources.go delete mode 100644 models/pool_toleration_seconds.go delete mode 100644 models/pool_tolerations.go delete mode 100644 models/pool_update_request.go delete mode 100644 models/principal.go delete mode 100644 models/projected_volume.go delete mode 100644 models/projected_volume_source.go delete mode 100644 models/pvc.go delete mode 100644 models/pvcs_list_response.go delete mode 100644 models/redirect_rule.go delete mode 100644 models/resource_quota.go delete mode 100644 models/resource_quota_element.go delete mode 100644 models/secret.go delete mode 100644 models/security_context.go delete mode 100644 models/server_drives.go delete mode 100644 models/server_properties.go delete mode 100644 models/service_account_token.go delete mode 100644 models/set_administrators_request.go delete mode 100644 models/state.go delete mode 100644 models/subscription_validate_request.go delete mode 100644 models/tenant.go delete mode 100644 models/tenant_configuration_response.go delete mode 100644 models/tenant_list.go delete mode 100644 models/tenant_log_report.go delete mode 100644 models/tenant_pod.go delete mode 100644 models/tenant_response_item.go delete mode 100644 models/tenant_security_response.go delete mode 100644 models/tenant_status.go delete mode 100644 models/tenant_tier_element.go delete mode 100644 models/tenant_usage.go delete mode 100644 models/tenant_y_a_m_l.go delete mode 100644 models/tls_configuration.go delete mode 100644 models/toleration.go delete mode 100644 models/update_domains_request.go delete mode 100644 models/update_tenant_configuration_request.go delete mode 100644 models/update_tenant_request.go delete mode 100644 models/update_tenant_security_request.go delete mode 100644 models/vault_configuration.go delete mode 100644 models/vault_configuration_response.go delete mode 100644 models/volume.go delete mode 100644 operator-integration/tenant_test.go delete mode 100644 pkg/auth/idp/oauth2/provider_test.go delete mode 100644 pkg/auth/ldap.go delete mode 100644 pkg/auth/token.go delete mode 100644 pkg/auth/token_test.go delete mode 100644 pkg/http/headers.go delete mode 100644 pkg/http/http.go delete mode 100644 pkg/logger/audit.go delete mode 100644 pkg/logger/color/color.go delete mode 100644 pkg/logger/config.go delete mode 100644 pkg/logger/config/bool-flag.go delete mode 100644 pkg/logger/config/bool-flag_test.go delete mode 100644 pkg/logger/config/certs.go delete mode 100644 pkg/logger/config/config.go delete mode 100644 pkg/logger/console.go delete mode 100644 pkg/logger/const.go delete mode 100644 pkg/logger/logger.go delete mode 100644 pkg/logger/logonce.go delete mode 100644 pkg/logger/message/audit/entry.go delete mode 100644 pkg/logger/message/log/entry.go delete mode 100644 pkg/logger/reqinfo.go delete mode 100644 pkg/logger/target/http/http.go delete mode 100644 pkg/logger/target/types/types.go delete mode 100644 pkg/logger/targets.go delete mode 100644 pkg/logger/utils.go delete mode 100644 pkg/subnet/utils.go delete mode 100644 pkg/utils/parity.go delete mode 100644 pkg/utils/parity_test.go delete mode 100644 pkg/utils/utils_test.go delete mode 100644 pkg/utils/version.go delete mode 100644 resources/assets.go delete mode 100644 resources/base/console-ui.yaml delete mode 100644 swagger.yml delete mode 100644 web-app/.dockerignore delete mode 100644 web-app/.gitignore delete mode 100644 web-app/.prettierignore delete mode 100644 web-app/.prettierrc.json delete mode 100644 web-app/.yarnrc.yml delete mode 100644 web-app/Makefile delete mode 100644 web-app/README.md delete mode 100644 web-app/assets.go delete mode 100644 web-app/build/Loader.svg delete mode 100644 web-app/build/agpl-logo.svg delete mode 100644 web-app/build/agpl.svg delete mode 100644 web-app/build/amazon.png delete mode 100644 web-app/build/amqp-logo.svg delete mode 100644 web-app/build/amqp.png delete mode 100644 web-app/build/android-icon-144x144.png delete mode 100644 web-app/build/android-icon-192x192.png delete mode 100644 web-app/build/android-icon-36x36.png delete mode 100644 web-app/build/android-icon-48x48.png delete mode 100644 web-app/build/android-icon-72x72.png delete mode 100644 web-app/build/android-icon-96x96.png delete mode 100644 web-app/build/apple-icon-180x180.png delete mode 100644 web-app/build/asset-manifest.json delete mode 100644 web-app/build/aws-logo.svg delete mode 100644 web-app/build/azure-logo.svg delete mode 100644 web-app/build/azure.png delete mode 100644 web-app/build/elasticsearch-logo.svg delete mode 100644 web-app/build/elasticsearch.png delete mode 100644 web-app/build/favicon-16x16.png delete mode 100644 web-app/build/favicon-32x32.png delete mode 100644 web-app/build/favicon-96x96.png delete mode 100644 web-app/build/favicon.ico delete mode 100644 web-app/build/gcs-logo.svg delete mode 100644 web-app/build/gcs.png delete mode 100644 web-app/build/images/BG_Illustration.svg delete mode 100644 web-app/build/images/BG_IllustrationDarker.svg delete mode 100644 web-app/build/images/background-wave-orig.svg delete mode 100644 web-app/build/images/background-wave-orig2.svg delete mode 100644 web-app/build/images/background.svg delete mode 100644 web-app/build/images/ob_bucket_clear.svg delete mode 100644 web-app/build/images/ob_bucket_filled.svg delete mode 100644 web-app/build/images/ob_file_clear.svg delete mode 100644 web-app/build/images/ob_file_filled.svg delete mode 100644 web-app/build/images/ob_folder_clear.svg delete mode 100644 web-app/build/images/ob_folder_filled.svg delete mode 100644 web-app/build/images/object-browser-folder-icn.svg delete mode 100644 web-app/build/images/object-browser-icn.svg delete mode 100644 web-app/build/images/search-icn.svg delete mode 100644 web-app/build/images/trash-icn.svg delete mode 100644 web-app/build/index.html delete mode 100644 web-app/build/kafka-logo.svg delete mode 100644 web-app/build/kafka.png delete mode 100644 web-app/build/lambda-rect.svg delete mode 100644 web-app/build/logo192.png delete mode 100644 web-app/build/logo512.png delete mode 100644 web-app/build/manifest.json delete mode 100644 web-app/build/minio-logo.svg delete mode 100644 web-app/build/minioTier.png delete mode 100644 web-app/build/mqtt-logo.svg delete mode 100644 web-app/build/mqtt.png delete mode 100644 web-app/build/mysql-logo.svg delete mode 100644 web-app/build/mysql.png delete mode 100644 web-app/build/nats-logo.svg delete mode 100644 web-app/build/nats.png delete mode 100644 web-app/build/nsq-logo.svg delete mode 100644 web-app/build/postgres-logo.svg delete mode 100644 web-app/build/postgres.png delete mode 100644 web-app/build/redis-logo.svg delete mode 100644 web-app/build/redis.png delete mode 100644 web-app/build/robots.txt delete mode 100644 web-app/build/safari-pinned-tab.svg delete mode 100644 web-app/build/static/css/main.110caa22.css delete mode 100644 web-app/build/static/css/main.110caa22.css.map delete mode 100644 web-app/build/static/js/104.478cfff7.chunk.js delete mode 100644 web-app/build/static/js/104.478cfff7.chunk.js.map delete mode 100644 web-app/build/static/js/112.1ea6a792.chunk.js delete mode 100644 web-app/build/static/js/112.1ea6a792.chunk.js.map delete mode 100644 web-app/build/static/js/122.c782a33a.chunk.js delete mode 100644 web-app/build/static/js/122.c782a33a.chunk.js.map delete mode 100644 web-app/build/static/js/204.3a5ec564.chunk.js delete mode 100644 web-app/build/static/js/204.3a5ec564.chunk.js.map delete mode 100644 web-app/build/static/js/241.f827f4d6.chunk.js delete mode 100644 web-app/build/static/js/241.f827f4d6.chunk.js.map delete mode 100644 web-app/build/static/js/301.d424161c.chunk.js delete mode 100644 web-app/build/static/js/301.d424161c.chunk.js.map delete mode 100644 web-app/build/static/js/361.970b063b.chunk.js delete mode 100644 web-app/build/static/js/361.970b063b.chunk.js.map delete mode 100644 web-app/build/static/js/381.6e506d98.chunk.js delete mode 100644 web-app/build/static/js/381.6e506d98.chunk.js.map delete mode 100644 web-app/build/static/js/414.f9770abf.chunk.js delete mode 100644 web-app/build/static/js/414.f9770abf.chunk.js.map delete mode 100644 web-app/build/static/js/415.6349f8fe.chunk.js delete mode 100644 web-app/build/static/js/415.6349f8fe.chunk.js.map delete mode 100644 web-app/build/static/js/450.be9d2e55.chunk.js delete mode 100644 web-app/build/static/js/450.be9d2e55.chunk.js.map delete mode 100644 web-app/build/static/js/461.dbb22491.chunk.js delete mode 100644 web-app/build/static/js/461.dbb22491.chunk.js.map delete mode 100644 web-app/build/static/js/481.f19f292a.chunk.js delete mode 100644 web-app/build/static/js/481.f19f292a.chunk.js.map delete mode 100644 web-app/build/static/js/517.6b633ce9.chunk.js delete mode 100644 web-app/build/static/js/517.6b633ce9.chunk.js.map delete mode 100644 web-app/build/static/js/577.4e2f491e.chunk.js delete mode 100644 web-app/build/static/js/577.4e2f491e.chunk.js.map delete mode 100644 web-app/build/static/js/619.87b2158f.chunk.js delete mode 100644 web-app/build/static/js/619.87b2158f.chunk.js.map delete mode 100644 web-app/build/static/js/629.e9da79a6.chunk.js delete mode 100644 web-app/build/static/js/629.e9da79a6.chunk.js.map delete mode 100644 web-app/build/static/js/64.2066437f.chunk.js delete mode 100644 web-app/build/static/js/64.2066437f.chunk.js.map delete mode 100644 web-app/build/static/js/641.c69d9e22.chunk.js delete mode 100644 web-app/build/static/js/641.c69d9e22.chunk.js.map delete mode 100644 web-app/build/static/js/654.59b7c512.chunk.js delete mode 100644 web-app/build/static/js/654.59b7c512.chunk.js.map delete mode 100644 web-app/build/static/js/666.3139236b.chunk.js delete mode 100644 web-app/build/static/js/666.3139236b.chunk.js.map delete mode 100644 web-app/build/static/js/682.2ebc8fc9.chunk.js delete mode 100644 web-app/build/static/js/682.2ebc8fc9.chunk.js.map delete mode 100644 web-app/build/static/js/713.229d739a.chunk.js delete mode 100644 web-app/build/static/js/713.229d739a.chunk.js.map delete mode 100644 web-app/build/static/js/723.799b7760.chunk.js delete mode 100644 web-app/build/static/js/723.799b7760.chunk.js.map delete mode 100644 web-app/build/static/js/728.2edde3f9.chunk.js delete mode 100644 web-app/build/static/js/728.2edde3f9.chunk.js.map delete mode 100644 web-app/build/static/js/729.386ba038.chunk.js delete mode 100644 web-app/build/static/js/729.386ba038.chunk.js.map delete mode 100644 web-app/build/static/js/732.33ddca24.chunk.js delete mode 100644 web-app/build/static/js/732.33ddca24.chunk.js.map delete mode 100644 web-app/build/static/js/799.359bf5c9.chunk.js delete mode 100644 web-app/build/static/js/799.359bf5c9.chunk.js.map delete mode 100644 web-app/build/static/js/829.67cb6474.chunk.js delete mode 100644 web-app/build/static/js/829.67cb6474.chunk.js.LICENSE.txt delete mode 100644 web-app/build/static/js/829.67cb6474.chunk.js.map delete mode 100644 web-app/build/static/js/872.9de95914.chunk.js delete mode 100644 web-app/build/static/js/872.9de95914.chunk.js.map delete mode 100644 web-app/build/static/js/890.17acf929.chunk.js delete mode 100644 web-app/build/static/js/890.17acf929.chunk.js.map delete mode 100644 web-app/build/static/js/941.a504f48a.chunk.js delete mode 100644 web-app/build/static/js/941.a504f48a.chunk.js.map delete mode 100644 web-app/build/static/js/943.4c3f42c0.chunk.js delete mode 100644 web-app/build/static/js/943.4c3f42c0.chunk.js.map delete mode 100644 web-app/build/static/js/977.74859670.chunk.js delete mode 100644 web-app/build/static/js/977.74859670.chunk.js.map delete mode 100644 web-app/build/static/js/979.21101997.chunk.js delete mode 100644 web-app/build/static/js/979.21101997.chunk.js.map delete mode 100644 web-app/build/static/js/main.bbc673b5.js delete mode 100644 web-app/build/static/js/main.bbc673b5.js.LICENSE.txt delete mode 100644 web-app/build/static/js/main.bbc673b5.js.map delete mode 100644 web-app/build/static/media/Inter-Black.15ca31c0a2a68f76d2d1.woff2 delete mode 100644 web-app/build/static/media/Inter-Black.c6938660eec019fefd68.woff delete mode 100644 web-app/build/static/media/Inter-BlackItalic.ca1e738e4f349f27514d.woff delete mode 100644 web-app/build/static/media/Inter-BlackItalic.cb2a7335650c690077fe.woff2 delete mode 100644 web-app/build/static/media/Inter-Bold.93c1301bd9f486c573b3.woff delete mode 100644 web-app/build/static/media/Inter-Bold.ec64ea577b0349e055ad.woff2 delete mode 100644 web-app/build/static/media/Inter-BoldItalic.2d26c56a606662486796.woff2 delete mode 100644 web-app/build/static/media/Inter-BoldItalic.b376885042f6c961a541.woff delete mode 100644 web-app/build/static/media/Inter-Italic.890025e726861dba417f.woff delete mode 100644 web-app/build/static/media/Inter-Italic.cb10ffd7684cd9836a05.woff2 delete mode 100644 web-app/build/static/media/Inter-Light.2d5198822ab091ce4305.woff2 delete mode 100644 web-app/build/static/media/Inter-Light.994e34451cc19ede31d3.woff delete mode 100644 web-app/build/static/media/Inter-LightItalic.ef9f65d91d2b0ba9b2e4.woff delete mode 100644 web-app/build/static/media/Inter-LightItalic.f86952265d7b0f02c921.woff2 delete mode 100644 web-app/build/static/media/Inter-Regular.8c206db99195777c6769.woff delete mode 100644 web-app/build/static/media/Inter-Regular.c8ba52b05a9ef10f4758.woff2 delete mode 100644 web-app/build/static/media/Inter-Thin.29b9c616a95a912abf73.woff delete mode 100644 web-app/build/static/media/Inter-Thin.fff2a096db014f6239d4.woff2 delete mode 100644 web-app/build/static/media/loginAnimationPoster.9aa924bfe619e71d5d29.png delete mode 100644 web-app/build/static/media/videoBG.17363418b3c2246a0e27.mp4 delete mode 100644 web-app/build/styles/root-styles.css delete mode 100644 web-app/build/verified.svg delete mode 100644 web-app/build/webhooks-logo.svg delete mode 100755 web-app/check-deadcode.sh delete mode 100755 web-app/check-prettier.sh delete mode 100755 web-app/check-warnings.sh delete mode 100644 web-app/config-overrides.js delete mode 100644 web-app/package.json delete mode 100644 web-app/public/Loader.svg delete mode 100644 web-app/public/agpl-logo.svg delete mode 100644 web-app/public/agpl.svg delete mode 100644 web-app/public/amazon.png delete mode 100644 web-app/public/amqp-logo.svg delete mode 100644 web-app/public/amqp.png delete mode 100644 web-app/public/android-icon-144x144.png delete mode 100644 web-app/public/android-icon-192x192.png delete mode 100644 web-app/public/android-icon-36x36.png delete mode 100644 web-app/public/android-icon-48x48.png delete mode 100644 web-app/public/android-icon-72x72.png delete mode 100644 web-app/public/android-icon-96x96.png delete mode 100644 web-app/public/apple-icon-180x180.png delete mode 100644 web-app/public/aws-logo.svg delete mode 100644 web-app/public/azure-logo.svg delete mode 100644 web-app/public/azure.png delete mode 100644 web-app/public/elasticsearch-logo.svg delete mode 100644 web-app/public/elasticsearch.png delete mode 100644 web-app/public/favicon-16x16.png delete mode 100644 web-app/public/favicon-32x32.png delete mode 100644 web-app/public/favicon-96x96.png delete mode 100644 web-app/public/favicon.ico delete mode 100644 web-app/public/gcs-logo.svg delete mode 100644 web-app/public/gcs.png delete mode 100644 web-app/public/images/BG_Illustration.svg delete mode 100644 web-app/public/images/BG_IllustrationDarker.svg delete mode 100644 web-app/public/images/background-wave-orig.svg delete mode 100644 web-app/public/images/background-wave-orig2.svg delete mode 100644 web-app/public/images/background.svg delete mode 100644 web-app/public/images/ob_bucket_clear.svg delete mode 100644 web-app/public/images/ob_bucket_filled.svg delete mode 100644 web-app/public/images/ob_file_clear.svg delete mode 100644 web-app/public/images/ob_file_filled.svg delete mode 100644 web-app/public/images/ob_folder_clear.svg delete mode 100644 web-app/public/images/ob_folder_filled.svg delete mode 100644 web-app/public/images/object-browser-folder-icn.svg delete mode 100644 web-app/public/images/object-browser-icn.svg delete mode 100644 web-app/public/images/search-icn.svg delete mode 100644 web-app/public/images/trash-icn.svg delete mode 100644 web-app/public/index.html delete mode 100644 web-app/public/kafka-logo.svg delete mode 100644 web-app/public/kafka.png delete mode 100644 web-app/public/lambda-rect.svg delete mode 100644 web-app/public/logo192.png delete mode 100644 web-app/public/logo512.png delete mode 100644 web-app/public/manifest.json delete mode 100644 web-app/public/minio-logo.svg delete mode 100644 web-app/public/minioTier.png delete mode 100644 web-app/public/mqtt-logo.svg delete mode 100644 web-app/public/mqtt.png delete mode 100644 web-app/public/mysql-logo.svg delete mode 100644 web-app/public/mysql.png delete mode 100644 web-app/public/nats-logo.svg delete mode 100644 web-app/public/nats.png delete mode 100644 web-app/public/nsq-logo.svg delete mode 100644 web-app/public/postgres-logo.svg delete mode 100644 web-app/public/postgres.png delete mode 100644 web-app/public/redis-logo.svg delete mode 100644 web-app/public/redis.png delete mode 100644 web-app/public/robots.txt delete mode 100644 web-app/public/safari-pinned-tab.svg delete mode 100644 web-app/public/styles/root-styles.css delete mode 100644 web-app/public/verified.svg delete mode 100644 web-app/public/webhooks-logo.svg delete mode 100644 web-app/src/MainRouter.tsx delete mode 100644 web-app/src/ProtectedRoutes.tsx delete mode 100644 web-app/src/StyleHandler.tsx delete mode 100644 web-app/src/api/index.ts delete mode 100644 web-app/src/api/operatorApi.ts delete mode 100644 web-app/src/common/LoadingComponent.tsx delete mode 100644 web-app/src/common/SecureComponent/__tests__/accessControl.test.ts delete mode 100644 web-app/src/common/SecureComponent/accessControl.ts delete mode 100644 web-app/src/common/SecureComponent/index.ts delete mode 100644 web-app/src/common/SecureComponent/permissions.ts delete mode 100644 web-app/src/common/__tests__/utils.test.ts delete mode 100644 web-app/src/common/api/index.ts delete mode 100644 web-app/src/common/types.ts delete mode 100644 web-app/src/common/utils.ts delete mode 100644 web-app/src/config.ts delete mode 100644 web-app/src/history.ts delete mode 100644 web-app/src/index.css delete mode 100644 web-app/src/index.tsx delete mode 100644 web-app/src/logo.svg delete mode 100644 web-app/src/react-app-env.d.ts delete mode 100644 web-app/src/screens/Console/CommandBar.tsx delete mode 100644 web-app/src/screens/Console/Common/Components/withSuspense.tsx delete mode 100644 web-app/src/screens/Console/Common/ComponentsScreen.tsx delete mode 100644 web-app/src/screens/Console/Common/CredentialsPrompt/CredentialItem.tsx delete mode 100644 web-app/src/screens/Console/Common/CredentialsPrompt/CredentialsPrompt.tsx delete mode 100644 web-app/src/screens/Console/Common/CredentialsPrompt/types.ts delete mode 100644 web-app/src/screens/Console/Common/DarkModeActivator.tsx delete mode 100644 web-app/src/screens/Console/Common/FormComponents/InputUnitMenu/InputUnitMenu.tsx delete mode 100644 web-app/src/screens/Console/Common/FormComponents/common/styleLibrary.ts delete mode 100644 web-app/src/screens/Console/Common/H3Section.tsx delete mode 100644 web-app/src/screens/Console/Common/Hooks/useApi.tsx delete mode 100644 web-app/src/screens/Console/Common/IconsScreen.tsx delete mode 100644 web-app/src/screens/Console/Common/MainError/MainError.tsx delete mode 100644 web-app/src/screens/Console/Common/ModalWrapper/ConfirmDialog.tsx delete mode 100644 web-app/src/screens/Console/Common/ModalWrapper/ModalWrapper.tsx delete mode 100644 web-app/src/screens/Console/Common/PageHeaderWrapper/PageHeaderWrapper.tsx delete mode 100644 web-app/src/screens/Console/Common/SearchBox.tsx delete mode 100644 web-app/src/screens/Console/Common/TLSCertificate/TLSCertificate.tsx delete mode 100644 web-app/src/screens/Console/Common/TolerationSelector/TolerationSelector.tsx delete mode 100644 web-app/src/screens/Console/Common/TooltipWrapper/TooltipWrapper.tsx delete mode 100644 web-app/src/screens/Console/Common/UsageBar/UsageBar.tsx delete mode 100644 web-app/src/screens/Console/Common/UsageBarWrapper/SummaryUsageBar.tsx delete mode 100644 web-app/src/screens/Console/Common/VirtualizedList/VirtualizedList.tsx delete mode 100644 web-app/src/screens/Console/Console.tsx delete mode 100644 web-app/src/screens/Console/ConsoleKBar.tsx delete mode 100644 web-app/src/screens/Console/License/FAQModal.tsx delete mode 100644 web-app/src/screens/Console/License/License.tsx delete mode 100644 web-app/src/screens/Console/License/LicenseConsentModal.tsx delete mode 100644 web-app/src/screens/Console/License/LicenseFAQ.tsx delete mode 100644 web-app/src/screens/Console/License/LicenseLink.tsx delete mode 100644 web-app/src/screens/Console/License/LicensePlans.tsx delete mode 100644 web-app/src/screens/Console/License/licenseSlice.ts delete mode 100644 web-app/src/screens/Console/License/types.tsx delete mode 100644 web-app/src/screens/Console/License/utils.tsx delete mode 100644 web-app/src/screens/Console/Marketplace/Marketplace.tsx delete mode 100644 web-app/src/screens/Console/Marketplace/SetEmailModal.tsx delete mode 100644 web-app/src/screens/Console/Marketplace/euTimezones.ts delete mode 100644 web-app/src/screens/Console/Marketplace/types.tsx delete mode 100644 web-app/src/screens/Console/Menu/AppMenu.tsx delete mode 100644 web-app/src/screens/Console/Menu/types.ts delete mode 100644 web-app/src/screens/Console/Storage/types.ts delete mode 100644 web-app/src/screens/Console/Support/ApiKeyRegister.tsx delete mode 100644 web-app/src/screens/Console/Support/GetApiKeyModal.tsx delete mode 100644 web-app/src/screens/Console/Support/RegisterHelpBox.tsx delete mode 100644 web-app/src/screens/Console/Support/RegisterOperator.tsx delete mode 100644 web-app/src/screens/Console/Support/RegistrationStatusBanner.tsx delete mode 100644 web-app/src/screens/Console/Support/registerSlice.ts delete mode 100644 web-app/src/screens/Console/Support/utils.tsx delete mode 100644 web-app/src/screens/Console/Tenants/AddTenant/AddTenant.tsx delete mode 100644 web-app/src/screens/Console/Tenants/AddTenant/CreateTenantButton.tsx delete mode 100644 web-app/src/screens/Console/Tenants/AddTenant/NewTenantCredentials.tsx delete mode 100644 web-app/src/screens/Console/Tenants/AddTenant/Steps/Affinity.tsx delete mode 100644 web-app/src/screens/Console/Tenants/AddTenant/Steps/Configure.tsx delete mode 100644 web-app/src/screens/Console/Tenants/AddTenant/Steps/Encryption.tsx delete mode 100644 web-app/src/screens/Console/Tenants/AddTenant/Steps/Encryption/AWSKMSAdd.tsx delete mode 100644 web-app/src/screens/Console/Tenants/AddTenant/Steps/Encryption/AzureKMSAdd.tsx delete mode 100644 web-app/src/screens/Console/Tenants/AddTenant/Steps/Encryption/GCPKMSAdd.tsx delete mode 100644 web-app/src/screens/Console/Tenants/AddTenant/Steps/Encryption/GemaltoKMSAdd.tsx delete mode 100644 web-app/src/screens/Console/Tenants/AddTenant/Steps/Encryption/VaultKMSAdd.tsx delete mode 100644 web-app/src/screens/Console/Tenants/AddTenant/Steps/IdentityProvider.tsx delete mode 100644 web-app/src/screens/Console/Tenants/AddTenant/Steps/IdentityProvider/IDPActiveDirectory.tsx delete mode 100644 web-app/src/screens/Console/Tenants/AddTenant/Steps/IdentityProvider/IDPBuiltIn.tsx delete mode 100644 web-app/src/screens/Console/Tenants/AddTenant/Steps/IdentityProvider/IDPOpenID.tsx delete mode 100644 web-app/src/screens/Console/Tenants/AddTenant/Steps/Images.tsx delete mode 100644 web-app/src/screens/Console/Tenants/AddTenant/Steps/Security.tsx delete mode 100644 web-app/src/screens/Console/Tenants/AddTenant/Steps/SizePreview.tsx delete mode 100644 web-app/src/screens/Console/Tenants/AddTenant/Steps/TenantResources/NameTenantMain.tsx delete mode 100644 web-app/src/screens/Console/Tenants/AddTenant/Steps/TenantResources/NamespaceSelector.tsx delete mode 100644 web-app/src/screens/Console/Tenants/AddTenant/Steps/TenantResources/TenantResources.tsx delete mode 100644 web-app/src/screens/Console/Tenants/AddTenant/Steps/TenantResources/TenantSize.tsx delete mode 100644 web-app/src/screens/Console/Tenants/AddTenant/Steps/TenantResources/TenantSizeMK.tsx delete mode 100644 web-app/src/screens/Console/Tenants/AddTenant/Steps/TenantResources/TenantSizeResources.tsx delete mode 100644 web-app/src/screens/Console/Tenants/AddTenant/Steps/TenantResources/utils.tsx delete mode 100644 web-app/src/screens/Console/Tenants/AddTenant/Steps/helpers/AddNamespaceModal.tsx delete mode 100644 web-app/src/screens/Console/Tenants/AddTenant/common.ts delete mode 100644 web-app/src/screens/Console/Tenants/AddTenant/createTenantAPI.ts delete mode 100644 web-app/src/screens/Console/Tenants/AddTenant/createTenantSlice.ts delete mode 100644 web-app/src/screens/Console/Tenants/AddTenant/sliceUtils.ts delete mode 100644 web-app/src/screens/Console/Tenants/AddTenant/thunks/createTenantThunk.ts delete mode 100644 web-app/src/screens/Console/Tenants/AddTenant/thunks/namespaceThunks.ts delete mode 100644 web-app/src/screens/Console/Tenants/HelpBox/TLSHelpBox.tsx delete mode 100644 web-app/src/screens/Console/Tenants/ListTenants/DeleteTenant.tsx delete mode 100644 web-app/src/screens/Console/Tenants/ListTenants/InformationItem.tsx delete mode 100644 web-app/src/screens/Console/Tenants/ListTenants/ListTenants.tsx delete mode 100644 web-app/src/screens/Console/Tenants/ListTenants/TenantCapacity.tsx delete mode 100644 web-app/src/screens/Console/Tenants/ListTenants/TenantListItem.tsx delete mode 100644 web-app/src/screens/Console/Tenants/ListTenants/types.ts delete mode 100644 web-app/src/screens/Console/Tenants/ListTenants/utils.ts delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/DeletePVC.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/DeletePod.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/EditDomains.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/KMSPolicyInfo.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/PodsSummary.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/Pools/AddPool/AddPool.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/Pools/AddPool/AddPoolCreateButton.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/Pools/AddPool/PoolConfiguration.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/Pools/AddPool/PoolPodPlacement.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/Pools/AddPool/PoolResources.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/Pools/AddPool/addPoolSlice.ts delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/Pools/AddPool/addPoolThunks.ts delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/Pools/Details/PoolDetails.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/Pools/Details/PoolsListing.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/Pools/EditPool/EditPool.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/Pools/EditPool/EditPoolButton.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/Pools/EditPool/EditPoolConfiguration.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/Pools/EditPool/EditPoolPlacement.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/Pools/EditPool/EditPoolResources.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/Pools/EditPool/editPoolSlice.ts delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/Pools/EditPool/thunks/editPoolAsync.ts delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/Pools/EditPool/types.ts delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/PoolsSummary.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/SubnetLicenseTenant.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/TenantCSR.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/TenantConfiguration.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/TenantDetails.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/TenantEncryption.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/TenantEvents.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/TenantIdentityProvider.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/TenantLicense.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/TenantMetrics.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/TenantSecurity.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/TenantSummary.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/TenantTrace.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/TenantYAML.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/UpdateTenantModal.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/VolumesSummary.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/events/EventsList.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/hop/Hop.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/pods/PodDescribe.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/pods/PodDetails.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/pods/PodEvents.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/pods/PodLogs.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/pvcs/PVCDescribe.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/pvcs/TenantVolumes.tsx delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/pvcs/pvcTypes.ts delete mode 100644 web-app/src/screens/Console/Tenants/TenantDetails/utils.ts delete mode 100644 web-app/src/screens/Console/Tenants/securityContextSelector.tsx delete mode 100644 web-app/src/screens/Console/Tenants/tenantSecurityContextSlice.ts delete mode 100644 web-app/src/screens/Console/Tenants/tenantsSlice.ts delete mode 100644 web-app/src/screens/Console/Tenants/thunks/tenantDetailsAsync.ts delete mode 100644 web-app/src/screens/Console/Tenants/types.ts delete mode 100644 web-app/src/screens/Console/Tenants/utils.ts delete mode 100644 web-app/src/screens/Console/consoleSlice.ts delete mode 100644 web-app/src/screens/Console/kbar-actions.tsx delete mode 100644 web-app/src/screens/Console/types.ts delete mode 100644 web-app/src/screens/Console/valid-routes.tsx delete mode 100644 web-app/src/screens/LoginPage/LoginCallback.tsx delete mode 100644 web-app/src/screens/LoginPage/LoginPage.tsx delete mode 100644 web-app/src/screens/LoginPage/StrategyForm.tsx delete mode 100644 web-app/src/screens/LoginPage/loginSlice.ts delete mode 100644 web-app/src/screens/LoginPage/loginThunks.ts delete mode 100644 web-app/src/screens/LoginPage/types.ts delete mode 100644 web-app/src/screens/LogoutPage/LogoutPage.tsx delete mode 100644 web-app/src/serviceWorker.ts delete mode 100644 web-app/src/store.ts delete mode 100644 web-app/src/systemSlice.ts delete mode 100644 web-app/src/types.ts delete mode 100644 web-app/src/utils/matchMedia.js delete mode 100644 web-app/src/utils/sortFunctions.ts delete mode 100644 web-app/src/utils/stylesUtils.ts delete mode 100644 web-app/src/utils/validationFunctions.ts delete mode 100644 web-app/tests/constants/timestamp.txt delete mode 100644 web-app/tests/operator/login/login.ts delete mode 100644 web-app/tests/operator/tenant/test-1/tenant-test-1.ts delete mode 100644 web-app/tests/operator/utils.ts delete mode 100644 web-app/tests/policies/bucketAssignPolicy.json delete mode 100644 web-app/tests/policies/bucketCannotTag.json delete mode 100644 web-app/tests/policies/bucketRead.json delete mode 100644 web-app/tests/policies/bucketReadWrite.json delete mode 100644 web-app/tests/policies/bucketSpecific.json delete mode 100644 web-app/tests/policies/bucketWrite.json delete mode 100644 web-app/tests/policies/bucketWritePrefixOnlyPolicy.json delete mode 100644 web-app/tests/policies/conditionsPolicy.json delete mode 100644 web-app/tests/policies/conditionsPolicy2.json delete mode 100644 web-app/tests/policies/dashboard.json delete mode 100644 web-app/tests/policies/deleteObjectWithPrefix.json delete mode 100644 web-app/tests/policies/diagnostics.json delete mode 100644 web-app/tests/policies/fix-prefix-policy-ui-crash.json delete mode 100644 web-app/tests/policies/groups.json delete mode 100644 web-app/tests/policies/heal.json delete mode 100644 web-app/tests/policies/iamPolicies.json delete mode 100644 web-app/tests/policies/inspect-allowed.json delete mode 100644 web-app/tests/policies/inspect-not-allowed.json delete mode 100644 web-app/tests/policies/logs.json delete mode 100644 web-app/tests/policies/notificationEndpoints.json delete mode 100644 web-app/tests/policies/settings.json delete mode 100644 web-app/tests/policies/tiers.json delete mode 100644 web-app/tests/policies/trace.json delete mode 100644 web-app/tests/policies/users.json delete mode 100644 web-app/tests/policies/watch.json delete mode 100644 web-app/tests/scripts/cleanup-env.sh delete mode 100755 web-app/tests/scripts/common.sh delete mode 100755 web-app/tests/scripts/initialize-env.sh delete mode 100755 web-app/tests/scripts/operator.sh delete mode 100755 web-app/tests/scripts/permissions.sh delete mode 100644 web-app/tests/uploads/test.txt delete mode 100644 web-app/tests/utils/constants.ts delete mode 100644 web-app/tests/utils/elements-menu.ts delete mode 100644 web-app/tests/utils/elements.ts delete mode 100644 web-app/tests/utils/functions.ts delete mode 100644 web-app/tests/utils/roles.ts delete mode 100644 web-app/tsconfig.dev.json delete mode 100644 web-app/tsconfig.json delete mode 100644 web-app/yarn.lock diff --git a/.github/workflows/ui.yaml b/.github/workflows/ui.yaml deleted file mode 100644 index fb4e0f0f536..00000000000 --- a/.github/workflows/ui.yaml +++ /dev/null @@ -1,458 +0,0 @@ -name: UI - -on: - pull_request: - branches: - - master - push: - branches: - - master - -# This ensures that previous jobs for the PR are canceled when the PR is -# updated. -concurrency: - group: ${{ github.workflow }}-${{ github.head_ref }} - cancel-in-progress: true - -jobs: - - semgrep-static-code-analysis: - timeout-minutes: 30 - name: "semgrep checks" - runs-on: ubuntu-latest - strategy: - matrix: - os: [ ubuntu-latest ] - steps: - - name: Check out source code - uses: actions/checkout@v3 - - name: Scanning code on ${{ matrix.os }} - continue-on-error: false - run: | - # Install semgrep rather than using a container due to: - # https://github.com/actions/checkout/issues/334 - sudo apt install -y python3-pip || apt install -y python3-pip - pip3 install semgrep - semgrep --config semgrep.yaml $(pwd)/web-app --error - - - ui-assets: - timeout-minutes: 30 - name: "React No Warnings & Prettified" - runs-on: ubuntu-latest - strategy: - matrix: - go-version: [ 1.22.x ] - os: [ ubuntu-latest ] - steps: - - name: Check out code - uses: actions/checkout@v3 - - name: Read .nvmrc - id: node_version - run: echo "$(cat .nvmrc)" && echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_ENV - - name: Enable Corepack - run: corepack enable - - uses: actions/setup-node@v3 - with: - node-version: ${{ env.NVMRC }} - cache: 'yarn' - cache-dependency-path: web-app/yarn.lock - - uses: actions/cache@v3 - id: assets-cache - name: Assets Cache - with: - path: | - ./web-app/build/ - key: ${{ runner.os }}-assets-${{ github.run_id }} - - name: Install Dependencies - working-directory: ./web-app - continue-on-error: false - run: | - yarn install --immutable - - name: Check for Warnings in build output - working-directory: ./web-app - continue-on-error: false - run: | - ./check-warnings.sh - - name: Check if Files are Prettified - working-directory: ./web-app - continue-on-error: false - run: | - ./check-prettier.sh - - name: Check for dead code - working-directory: ./web-app - continue-on-error: false - run: | - ./check-deadcode.sh - reuse-golang-dependencies: - timeout-minutes: 30 - name: reuse golang dependencies - runs-on: ubuntu-latest - strategy: - matrix: - go-version: [ 1.22.x ] - os: [ ubuntu-latest ] - steps: - - name: Check out code - uses: actions/checkout@v3 - - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} - uses: actions/setup-go@v3 - with: - go-version: ${{ matrix.go-version }} - cache: true - id: go - - name: Build on ${{ matrix.os }} - env: - GO111MODULE: on - GOOS: linux - run: | - go mod download - - compile-binary: - timeout-minutes: 30 - name: Compiles on Go ${{ matrix.go-version }} and ${{ matrix.os }} - needs: - - ui-assets - - reuse-golang-dependencies - - semgrep-static-code-analysis - runs-on: ${{ matrix.os }} - strategy: - matrix: - go-version: [ 1.22.x ] - os: [ ubuntu-latest ] - steps: - - name: Check out code - uses: actions/checkout@v3 - - - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} - uses: actions/setup-go@v3 - with: - go-version: ${{ matrix.go-version }} - cache: true - id: go - - uses: actions/cache@v3 - name: Operator Binary Cache - with: - path: | - ./minio-operator - key: ${{ runner.os }}-binary-${{ github.run_id }} - - uses: actions/cache@v3 - id: assets-cache - name: Assets Cache - with: - path: | - ./web-app/build/ - key: ${{ runner.os }}-assets-${{ github.run_id }} - - name: Build on ${{ matrix.os }} - env: - GO111MODULE: on - GOOS: linux - run: | - make binary - - - - react-code-known-vulnerabilities: - timeout-minutes: 30 - name: "React No Known Vulnerable Deps" - needs: - - ui-assets - runs-on: ubuntu-latest - strategy: - matrix: - go-version: [ 1.22.x ] - os: [ ubuntu-latest ] - steps: - - name: Check out code - uses: actions/checkout@v3 - - name: Read .nvmrc - id: node_version - run: echo "$(cat .nvmrc)" && echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_ENV - - name: Enable Corepack - run: corepack enable - - uses: actions/setup-node@v3 - with: - node-version: ${{ env.NVMRC }} - cache: 'yarn' - cache-dependency-path: web-app/yarn.lock - - name: Checks for known security issues with the installed packages - working-directory: ./web-app - continue-on-error: false - run: | - yarn npm audit --environment production \ - --ignore '1097346' - - all-operator-tests-1: - timeout-minutes: 30 - name: Operator UI Tests Part 1 - needs: - - compile-binary - runs-on: ${{ matrix.os }} - strategy: - matrix: - go-version: [ 1.22.x ] - os: [ ubuntu-latest ] - steps: - - name: Check out code - uses: actions/checkout@v3 - - name: Read .nvmrc - id: node_version - run: echo "$(cat .nvmrc)" && echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_ENV - - name: Enable Corepack - run: corepack enable - - uses: actions/setup-node@v3 - with: - node-version: ${{ env.NVMRC }} - - name: Install MinIO JS - working-directory: ./ - continue-on-error: false - run: | - yarn add minio - - uses: actions/cache@v3 - name: Operator Binary Cache - with: - path: | - ./minio-operator - key: ${{ runner.os }}-binary-${{ github.run_id }} - - # Runs a set of commands using the runners shell - - name: Start Kind for Operator UI - run: | - "${GITHUB_WORKSPACE}/web-app/tests/scripts/operator.sh" - - - name: Run TestCafe Tests - uses: DevExpress/testcafe-action@latest - with: - args: '"chrome:headless" web-app/tests/operator/login --skip-js-errors -c 3' - all-operator-tests-2: - timeout-minutes: 30 - name: Operator UI Tests Part 2 - needs: - - compile-binary - runs-on: ${{ matrix.os }} - strategy: - matrix: - go-version: [ 1.22.x ] - os: [ ubuntu-latest ] - steps: - - name: Check out code - uses: actions/checkout@v3 - - name: Read .nvmrc - id: node_version - run: echo "$(cat .nvmrc)" && echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_ENV - - name: Enable Corepack - run: corepack enable - - uses: actions/setup-node@v3 - with: - node-version: ${{ env.NVMRC }} - - name: Install MinIO JS - working-directory: ./ - continue-on-error: false - run: | - yarn add minio - - uses: actions/cache@v3 - name: Operator Binary Cache - with: - path: | - ./minio-operator - key: ${{ runner.os }}-binary-${{ github.run_id }} - - # Runs a set of commands using the runners shell - - name: Start Kind for Operator UI - run: | - "${GITHUB_WORKSPACE}/web-app/tests/scripts/operator.sh" - - - name: Run TestCafe Tests - uses: DevExpress/testcafe-action@latest - with: - args: '"chrome:headless" web-app/tests/operator/tenant/test-1 --skip-js-errors -c 3' - - test-operatorapi-on-go: - timeout-minutes: 30 - name: Test Operatorapi on Go ${{ matrix.go-version }} and ${{ matrix.os }} - needs: - - ui-assets - - reuse-golang-dependencies - - semgrep-static-code-analysis - runs-on: ${{ matrix.os }} - strategy: - matrix: - go-version: [ 1.22.x ] - os: [ ubuntu-latest ] - steps: - - name: Check out code - uses: actions/checkout@v3 - - - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} - uses: actions/setup-go@v3 - with: - go-version: ${{ matrix.go-version }} - cache: true - id: go - - - - name: Build on ${{ matrix.os }} - env: - GO111MODULE: on - GOOS: linux - run: | - make test-unit-test-operator - - - uses: actions/cache@v3 - id: coverage-cache-unittest-operatorapi - name: Coverage Cache unit test operatorAPI - with: - path: | - ./api/coverage/ - key: ${{ runner.os }}-coverage-unittest-operatorapi-2-${{ github.run_id }} - react-tests: - timeout-minutes: 30 - name: React Tests - needs: - - ui-assets - - reuse-golang-dependencies - - semgrep-static-code-analysis - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: Enable Corepack - run: corepack enable - - name: Install modules - working-directory: ./web-app - run: yarn install --immutable - - name: Run tests - working-directory: ./web-app - run: yarn test - c-operator-api-tests: - timeout-minutes: 30 - - name: Operator API Tests - needs: - - ui-assets - - reuse-golang-dependencies - - semgrep-static-code-analysis - runs-on: ubuntu-latest - - strategy: - matrix: - go-version: [ 1.22.x ] - - steps: - - - uses: actions/checkout@v3 - - - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} - uses: actions/setup-go@v3 - with: - go-version: ${{ matrix.go-version }} - cache: true - id: go - - - name: Operator API Tests - run: | - curl -sLO "https://dl.k8s.io/release/v1.23.1/bin/linux/amd64/kubectl" -o kubectl - chmod +x kubectl - mv kubectl /usr/local/bin - "${GITHUB_WORKSPACE}/tests/start-tests-tenant.sh" - echo "start ---> make test-operator-integration"; - make test-operator-integration; - - - uses: actions/cache@v3 - id: coverage-cache-operator - name: Coverage Cache Operator - with: - path: | - ./operator-integration/coverage/ - key: ${{ runner.os }}-coverage-2-operator-${{ github.run_id }} - coverage: - timeout-minutes: 30 - name: "Coverage Limit Check" - needs: - - test-operatorapi-on-go - - c-operator-api-tests - runs-on: ${{ matrix.os }} - strategy: - matrix: - go-version: [ 1.22.x ] - os: [ ubuntu-latest ] - steps: - - name: Check out code - uses: actions/checkout@v3 - - name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }} - uses: actions/setup-go@v3 - with: - go-version: ${{ matrix.go-version }} - cache: true - id: go - - name: Check out gocovmerge as a nested repository - uses: actions/checkout@v3 - with: - repository: wadey/gocovmerge - path: gocovmerge - - - uses: actions/cache@v3 - id: coverage-cache-operator - name: Coverage Cache Operator - with: - path: | - ./operator-integration/coverage/ - key: ${{ runner.os }}-coverage-2-operator-${{ github.run_id }} - - - uses: actions/cache@v3 - id: coverage-cache-unittest-operatorapi - name: Coverage Cache unit test operatorAPI - with: - path: | - ./api/coverage/ - key: ${{ runner.os }}-coverage-unittest-operatorapi-2-${{ github.run_id }} - - - name: Get coverage - run: | - echo "change directory to gocovmerge" - cd gocovmerge - echo "download golang x tools" - go mod download golang.org/x/tools - echo "go mod tidy compat mode" - go mod tidy - echo "go build gocoverage.go" - go build gocovmerge.go - echo "put together the outs for final coverage resolution" - ./gocovmerge ../operator-integration/coverage/operator-api.out ../api/coverage/coverage-unit-test-operatorapi.out > all.out - echo "Download mc for Ubuntu" - wget -q https://dl.min.io/client/mc/release/linux-amd64/mc - echo "Change the permissions to execute mc command" - chmod +x mc - echo "Only run our test if play is up and running since we require it for replication tests here." - PLAY_IS_ON=`wget --spider --server-response https://play.min.io:9443/login 2>&1 | grep '200\ OK' | wc -l` - if [ $PLAY_IS_ON == 1 ] - then - echo "Play is up and running, we will proceed with the play part for coverage" - echo "Create the folder to put the all.out file" - ./mc mb --ignore-existing play/builds/ - echo "Copy the all.out file to play bucket" - echo ${{ github.repository }} - echo ${{ github.event.number }} - echo ${{ github.run_id }} - # mc cp can fail due to lack of space: mc: Failed to copy `all.out`. - # Storage backend has reached its minimum free disk threshold. Please delete a few objects to proceed. - ./mc cp all.out play/builds/${{ github.repository }}/${{ github.event.number }}/${{ github.run_id }}/ || true - ./mc cp all.out play/builds/${{ github.repository }}/${{ github.event.number }}/latest/ || true - go tool cover -html=all.out -o coverage.html - ./mc cp coverage.html play/builds/${{ github.repository }}/${{ github.event.number }}/${{ github.run_id }}/ || true - ./mc cp coverage.html play/builds/${{ github.repository }}/${{ github.event.number }}/latest/ || true - else - echo "Play is down, please report it on hack channel, no coverage is going to be uploaded!!!" - fi - echo "grep to obtain the result" - go tool cover -func=all.out | grep total > tmp2 - result=`cat tmp2 | awk 'END {print $3}'` - result=${result%\%} - threshold=61.2 - echo "Result:" - echo "$result%" - if (( $(echo "$result >= $threshold" |bc -l) )); then - echo "It is equal or greater than threshold ($threshold%), passed!" - else - echo "It is smaller than threshold ($threshold%) value, failed!" - exit 1 - fi diff --git a/Makefile b/Makefile index e7d1d44f558..1414296d1eb 100644 --- a/Makefile +++ b/Makefile @@ -91,88 +91,10 @@ helm-reindex: update-versions: @./release.sh -release: update-versions generate-code regen-crd regen-crd-docs assets +release: update-versions generate-code regen-crd regen-crd-docs @git add . apply-gofmt: @echo "Applying gofmt to all generated an existing files" @GO111MODULE=on gofmt -w . -clean-swagger: - @echo "cleaning" - @rm -rf models - @rm -rf api/operations - -install-go-swagger: - @echo "installing latest go-swagger" - @go install github.com/go-swagger/go-swagger/cmd/swagger@latest - -swagger-operator: - @echo "Generating swagger server code from yaml" - @swagger generate server -A operator --main-package=operator --server-package=api --exclude-main -P models.Principal -f ./swagger.yml -r NOTICE - @echo "Generating typescript api" - @npx swagger-typescript-api -p ./swagger.yml -o ./web-app/src/api -n operatorApi.ts - @(cd web-app && npm install -g prettier && prettier -w .) - -swagger-gen: install-go-swagger clean-swagger swagger-operator apply-gofmt - @echo "Done Generating swagger server code from yaml" - -assets: - @(if [ -f "${NVM_DIR}/nvm.sh" ]; then \. "${NVM_DIR}/nvm.sh" && nvm install && nvm use && npm install -g yarn ; fi &&\ - cd web-app; yarn install; make build-static; yarn prettier --write . --loglevel warn; cd ..) - -test-unit-test-operator: - @echo "execute unit test and get coverage for api" - @(cd api && mkdir coverage && GO111MODULE=on go test -test.v -coverprofile=coverage/coverage-unit-test-operatorapi.out) - -test-operator-integration: - @(echo "Start cd operator-integration && go test:") - @(pwd) - @(cd operator-integration && go test -coverpkg=../api -c -tags testrunmain . && mkdir -p coverage && ./operator-integration.test -test.v -test.run "^Test*" -test.coverprofile=coverage/operator-api.out) - -test-operator: - @(env bash $(PWD)/web-app/tests/scripts/operator.sh) - -models-gen-mac: - @swagger generate client -f ./swagger.yml -m ./models - @ls ./models | xargs -I {} gsed -i "2 a\ -// This file is part of MinIO Operator\n\ -// Copyright (c) 2023 MinIO, Inc.\n\ -//\n\ -// This program is free software: you can redistribute it and/or modify\n\ -// it under the terms of the GNU Affero General Public License as published by\n\ -// the Free Software Foundation, either version 3 of the License, or\n\ -// (at your option) any later version.\n\ -//\n\ -// This program is distributed in the hope that it will be useful,\n\ -// but WITHOUT ANY WARRANTY; without even the implied warranty of\n\ -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\ -// GNU Affero General Public License for more details.\n\ -//\n\ -// You should have received a copy of the GNU Affero General Public License\n\ -// along with this program. If not, see .\n\ -//\n\ -" ./models/{} - @rm -rf client - -models-gen: - @swagger generate client -f ./swagger.yml -m ./models - @ls ./models | xargs -I {} sed -i "2 a\ -// This file is part of MinIO Operator\n\ -// Copyright (c) 2023 MinIO, Inc.\n\ -//\n\ -// This program is free software: you can redistribute it and/or modify\n\ -// it under the terms of the GNU Affero General Public License as published by\n\ -// the Free Software Foundation, either version 3 of the License, or\n\ -// (at your option) any later version.\n\ -//\n\ -// This program is distributed in the hope that it will be useful,\n\ -// but WITHOUT ANY WARRANTY; without even the implied warranty of\n\ -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\ -// GNU Affero General Public License for more details.\n\ -//\n\ -// You should have received a copy of the GNU Affero General Public License\n\ -// along with this program. If not, see .\n\ -//\n\ -" ./models/{} - @rm -rf client diff --git a/api/admin_client_mock.go b/api/admin_client_mock.go deleted file mode 100644 index 39979d489c8..00000000000 --- a/api/admin_client_mock.go +++ /dev/null @@ -1,396 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "io" - "time" - - "github.com/minio/madmin-go/v3" - iampolicy "github.com/minio/pkg/iam/policy" -) - -// AdminClientMock mock client -type AdminClientMock struct{} - -var ( - // MinioServerInfoMock is the mc admin info server client mock - MinioServerInfoMock func(ctx context.Context) (madmin.InfoMessage, error) - minioChangePasswordMock func(ctx context.Context, accessKey, secretKey string) error - - minioHelpConfigKVMock func(subSys, key string, envOnly bool) (madmin.Help, error) - minioGetConfigKVMock func(key string) ([]byte, error) - minioSetConfigKVMock func(kv string) (restart bool, err error) - minioDelConfigKVMock func(name string) (err error) - minioHelpConfigKVGlobalMock func(envOnly bool) (madmin.Help, error) - - minioGetLogsMock func(ctx context.Context, node string, lineCnt int, logKind string) <-chan madmin.LogInfo - - minioListGroupsMock func() ([]string, error) - minioUpdateGroupMembersMock func(madmin.GroupAddRemove) error - minioGetGroupDescriptionMock func(group string) (*madmin.GroupDesc, error) - minioSetGroupStatusMock func(group string, status madmin.GroupStatus) error - - minioHealMock func(ctx context.Context, bucket, prefix string, healOpts madmin.HealOpts, clientToken string, - forceStart, forceStop bool) (healStart madmin.HealStartSuccess, healTaskStatus madmin.HealTaskStatus, err error) - - minioServerHealthInfoMock func(ctx context.Context, healthDataTypes []madmin.HealthDataType, deadline time.Duration) (interface{}, string, error) - - minioListPoliciesMock func() (map[string]*iampolicy.Policy, error) - minioGetPolicyMock func(name string) (*iampolicy.Policy, error) - minioRemovePolicyMock func(name string) error - minioAddPolicyMock func(name string, policy *iampolicy.Policy) error - minioSetPolicyMock func(policyName, entityName string, isGroup bool) error - - minioStartProfiling func(profiler madmin.ProfilerType) ([]madmin.StartProfilingResult, error) - minioStopProfiling func() (io.ReadCloser, error) - - minioServiceRestartMock func(ctx context.Context) error - - getSiteReplicationInfo func(ctx context.Context) (*madmin.SiteReplicationInfo, error) - addSiteReplicationInfo func(ctx context.Context, sites []madmin.PeerSite) (*madmin.ReplicateAddStatus, error) - editSiteReplicationInfo func(ctx context.Context, site madmin.PeerInfo) (*madmin.ReplicateEditStatus, error) - deleteSiteReplicationInfoMock func(ctx context.Context, removeReq madmin.SRRemoveReq) (*madmin.ReplicateRemoveStatus, error) - getSiteReplicationStatus func(ctx context.Context, params madmin.SRStatusOptions) (*madmin.SRStatusInfo, error) - - minioListTiersMock func(ctx context.Context) ([]*madmin.TierConfig, error) - minioTierStatsMock func(ctx context.Context) ([]madmin.TierInfo, error) - minioAddTiersMock func(ctx context.Context, tier *madmin.TierConfig) error - minioEditTiersMock func(ctx context.Context, tierName string, creds madmin.TierCreds) error - - minioServiceTraceMock func(ctx context.Context, threshold int64, s3, internal, storage, os, errTrace bool) <-chan madmin.ServiceTraceInfo - - minioListUsersMock func() (map[string]madmin.UserInfo, error) - minioAddUserMock func(accessKey, secreyKey string) error - minioRemoveUserMock func(accessKey string) error - minioGetUserInfoMock func(accessKey string) (madmin.UserInfo, error) - minioSetUserStatusMock func(accessKey string, status madmin.AccountStatus) error - - minioAccountInfoMock func(ctx context.Context) (madmin.AccountInfo, error) - minioAddServiceAccountMock func(ctx context.Context, policy *iampolicy.Policy, user string, accessKey string, secretKey string) (madmin.Credentials, error) - minioListServiceAccountsMock func(ctx context.Context, user string) (madmin.ListServiceAccountsResp, error) - minioDeleteServiceAccountMock func(ctx context.Context, serviceAccount string) error - minioInfoServiceAccountMock func(ctx context.Context, serviceAccount string) (madmin.InfoServiceAccountResp, error) - minioUpdateServiceAccountMock func(ctx context.Context, serviceAccount string, opts madmin.UpdateServiceAccountReq) error -) - -func (ac AdminClientMock) serverInfo(ctx context.Context) (madmin.InfoMessage, error) { - return MinioServerInfoMock(ctx) -} - -func (ac AdminClientMock) listRemoteBuckets(ctx context.Context, bucket, arnType string) (targets []madmin.BucketTarget, err error) { - return nil, nil -} - -func (ac AdminClientMock) getRemoteBucket(ctx context.Context, bucket, arnType string) (targets *madmin.BucketTarget, err error) { - return nil, nil -} - -func (ac AdminClientMock) removeRemoteBucket(ctx context.Context, bucket, arn string) error { - return nil -} - -func (ac AdminClientMock) addRemoteBucket(ctx context.Context, bucket string, target *madmin.BucketTarget) (string, error) { - return "", nil -} - -func (ac AdminClientMock) changePassword(ctx context.Context, accessKey, secretKey string) error { - return minioChangePasswordMock(ctx, accessKey, secretKey) -} - -func (ac AdminClientMock) speedtest(ctx context.Context, opts madmin.SpeedtestOpts) (chan madmin.SpeedTestResult, error) { - return nil, nil -} - -func (ac AdminClientMock) verifyTierStatus(ctx context.Context, tierName string) error { - return nil -} - -// mock function helpConfigKV() -func (ac AdminClientMock) helpConfigKV(ctx context.Context, subSys, key string, envOnly bool) (madmin.Help, error) { - return minioHelpConfigKVMock(subSys, key, envOnly) -} - -// mock function getConfigKV() -func (ac AdminClientMock) getConfigKV(ctx context.Context, name string) ([]byte, error) { - return minioGetConfigKVMock(name) -} - -// mock function setConfigKV() -func (ac AdminClientMock) setConfigKV(ctx context.Context, kv string) (restart bool, err error) { - return minioSetConfigKVMock(kv) -} - -// mock function helpConfigKV() -func (ac AdminClientMock) helpConfigKVGlobal(ctx context.Context, envOnly bool) (madmin.Help, error) { - return minioHelpConfigKVGlobalMock(envOnly) -} - -func (ac AdminClientMock) delConfigKV(ctx context.Context, name string) (err error) { - return minioDelConfigKVMock(name) -} - -func (ac AdminClientMock) getLogs(ctx context.Context, node string, lineCnt int, logKind string) <-chan madmin.LogInfo { - return minioGetLogsMock(ctx, node, lineCnt, logKind) -} - -func (ac AdminClientMock) listGroups(ctx context.Context) ([]string, error) { - return minioListGroupsMock() -} - -func (ac AdminClientMock) updateGroupMembers(ctx context.Context, req madmin.GroupAddRemove) error { - return minioUpdateGroupMembersMock(req) -} - -func (ac AdminClientMock) getGroupDescription(ctx context.Context, group string) (*madmin.GroupDesc, error) { - return minioGetGroupDescriptionMock(group) -} - -func (ac AdminClientMock) setGroupStatus(ctx context.Context, group string, status madmin.GroupStatus) error { - return minioSetGroupStatusMock(group, status) -} - -func (ac AdminClientMock) heal(ctx context.Context, bucket, prefix string, healOpts madmin.HealOpts, clientToken string, - forceStart, forceStop bool, -) (healStart madmin.HealStartSuccess, healTaskStatus madmin.HealTaskStatus, err error) { - return minioHealMock(ctx, bucket, prefix, healOpts, clientToken, forceStart, forceStop) -} - -func (ac AdminClientMock) serverHealthInfo(ctx context.Context, healthDataTypes []madmin.HealthDataType, deadline time.Duration) (interface{}, string, error) { - return minioServerHealthInfoMock(ctx, healthDataTypes, deadline) -} - -func (ac AdminClientMock) addOrUpdateIDPConfig(ctx context.Context, idpType, cfgName, cfgData string, update bool) (restart bool, err error) { - return true, nil -} - -func (ac AdminClientMock) listIDPConfig(ctx context.Context, idpType string) ([]madmin.IDPListItem, error) { - return []madmin.IDPListItem{{Name: "mock"}}, nil -} - -func (ac AdminClientMock) deleteIDPConfig(ctx context.Context, idpType, cfgName string) (restart bool, err error) { - return true, nil -} - -func (ac AdminClientMock) getIDPConfig(ctx context.Context, cfgType, cfgName string) (c madmin.IDPConfig, err error) { - return madmin.IDPConfig{Info: []madmin.IDPCfgInfo{{Key: "mock", Value: "mock"}}}, nil -} - -func (ac AdminClientMock) kmsStatus(ctx context.Context) (madmin.KMSStatus, error) { - return madmin.KMSStatus{Name: "name", DefaultKeyID: "key", Endpoints: map[string]madmin.ItemState{"localhost": madmin.ItemState("online")}}, nil -} - -func (ac AdminClientMock) kmsAPIs(ctx context.Context) ([]madmin.KMSAPI, error) { - return []madmin.KMSAPI{{Method: "GET", Path: "/mock"}}, nil -} - -func (ac AdminClientMock) kmsMetrics(ctx context.Context) (*madmin.KMSMetrics, error) { - return &madmin.KMSMetrics{}, nil -} - -func (ac AdminClientMock) kmsVersion(ctx context.Context) (*madmin.KMSVersion, error) { - return &madmin.KMSVersion{Version: "test-version"}, nil -} - -func (ac AdminClientMock) createKey(ctx context.Context, key string) error { - return nil -} - -func (ac AdminClientMock) importKey(ctx context.Context, key string, content []byte) error { - return nil -} - -func (ac AdminClientMock) listKeys(ctx context.Context, pattern string) ([]madmin.KMSKeyInfo, error) { - return []madmin.KMSKeyInfo{{ - Name: "name", - CreatedBy: "by", - }}, nil -} - -func (ac AdminClientMock) keyStatus(ctx context.Context, key string) (*madmin.KMSKeyStatus, error) { - return &madmin.KMSKeyStatus{KeyID: "key"}, nil -} - -func (ac AdminClientMock) deleteKey(ctx context.Context, key string) error { - return nil -} - -func (ac AdminClientMock) setKMSPolicy(ctx context.Context, policy string, content []byte) error { - return nil -} - -func (ac AdminClientMock) assignPolicy(ctx context.Context, policy string, content []byte) error { - return nil -} - -func (ac AdminClientMock) describePolicy(ctx context.Context, policy string) (*madmin.KMSDescribePolicy, error) { - return &madmin.KMSDescribePolicy{Name: "name"}, nil -} - -func (ac AdminClientMock) getKMSPolicy(ctx context.Context, policy string) (*madmin.KMSPolicy, error) { - return &madmin.KMSPolicy{Allow: []string{""}, Deny: []string{""}}, nil -} - -func (ac AdminClientMock) listKMSPolicies(ctx context.Context, pattern string) ([]madmin.KMSPolicyInfo, error) { - return []madmin.KMSPolicyInfo{{ - Name: "name", - CreatedBy: "by", - }}, nil -} - -func (ac AdminClientMock) deletePolicy(ctx context.Context, policy string) error { - return nil -} - -func (ac AdminClientMock) describeIdentity(ctx context.Context, identity string) (*madmin.KMSDescribeIdentity, error) { - return &madmin.KMSDescribeIdentity{}, nil -} - -func (ac AdminClientMock) describeSelfIdentity(ctx context.Context) (*madmin.KMSDescribeSelfIdentity, error) { - return &madmin.KMSDescribeSelfIdentity{ - Policy: &madmin.KMSPolicy{Allow: []string{}, Deny: []string{}}, - }, nil -} - -func (ac AdminClientMock) deleteIdentity(ctx context.Context, identity string) error { - return nil -} - -func (ac AdminClientMock) listIdentities(ctx context.Context, pattern string) ([]madmin.KMSIdentityInfo, error) { - return []madmin.KMSIdentityInfo{{Identity: "identity"}}, nil -} - -func (ac AdminClientMock) listPolicies(ctx context.Context) (map[string]*iampolicy.Policy, error) { - return minioListPoliciesMock() -} - -func (ac AdminClientMock) getPolicy(ctx context.Context, name string) (*iampolicy.Policy, error) { - return minioGetPolicyMock(name) -} - -func (ac AdminClientMock) removePolicy(ctx context.Context, name string) error { - return minioRemovePolicyMock(name) -} - -func (ac AdminClientMock) addPolicy(ctx context.Context, name string, policy *iampolicy.Policy) error { - return minioAddPolicyMock(name, policy) -} - -func (ac AdminClientMock) setPolicy(ctx context.Context, policyName, entityName string, isGroup bool) error { - return minioSetPolicyMock(policyName, entityName, isGroup) -} - -// mock function for startProfiling() -func (ac AdminClientMock) startProfiling(ctx context.Context, profiler madmin.ProfilerType) ([]madmin.StartProfilingResult, error) { - return minioStartProfiling(profiler) -} - -// mock function for stopProfiling() -func (ac AdminClientMock) stopProfiling(ctx context.Context) (io.ReadCloser, error) { - return minioStopProfiling() -} - -// mock function of serviceRestart() -func (ac AdminClientMock) serviceRestart(ctx context.Context) error { - return minioServiceRestartMock(ctx) -} - -func (ac AdminClientMock) getSiteReplicationInfo(ctx context.Context) (*madmin.SiteReplicationInfo, error) { - return getSiteReplicationInfo(ctx) -} - -func (ac AdminClientMock) addSiteReplicationInfo(ctx context.Context, sites []madmin.PeerSite) (*madmin.ReplicateAddStatus, error) { - return addSiteReplicationInfo(ctx, sites) -} - -func (ac AdminClientMock) editSiteReplicationInfo(ctx context.Context, site madmin.PeerInfo) (*madmin.ReplicateEditStatus, error) { - return editSiteReplicationInfo(ctx, site) -} - -func (ac AdminClientMock) deleteSiteReplicationInfo(ctx context.Context, removeReq madmin.SRRemoveReq) (*madmin.ReplicateRemoveStatus, error) { - return deleteSiteReplicationInfoMock(ctx, removeReq) -} - -func (ac AdminClientMock) getSiteReplicationStatus(ctx context.Context, params madmin.SRStatusOptions) (*madmin.SRStatusInfo, error) { - return getSiteReplicationStatus(ctx, params) -} - -func (ac AdminClientMock) listTiers(ctx context.Context) ([]*madmin.TierConfig, error) { - return minioListTiersMock(ctx) -} - -func (ac AdminClientMock) tierStats(ctx context.Context) ([]madmin.TierInfo, error) { - return minioTierStatsMock(ctx) -} - -func (ac AdminClientMock) addTier(ctx context.Context, tier *madmin.TierConfig) error { - return minioAddTiersMock(ctx, tier) -} - -func (ac AdminClientMock) editTierCreds(ctx context.Context, tierName string, creds madmin.TierCreds) error { - return minioEditTiersMock(ctx, tierName, creds) -} - -func (ac AdminClientMock) serviceTrace(ctx context.Context, threshold int64, s3, internal, storage, os, errTrace bool) <-chan madmin.ServiceTraceInfo { - return minioServiceTraceMock(ctx, threshold, s3, internal, storage, os, errTrace) -} - -func (ac AdminClientMock) listUsers(ctx context.Context) (map[string]madmin.UserInfo, error) { - return minioListUsersMock() -} - -func (ac AdminClientMock) addUser(ctx context.Context, accessKey, secretKey string) error { - return minioAddUserMock(accessKey, secretKey) -} - -func (ac AdminClientMock) removeUser(ctx context.Context, accessKey string) error { - return minioRemoveUserMock(accessKey) -} - -func (ac AdminClientMock) getUserInfo(ctx context.Context, accessKey string) (madmin.UserInfo, error) { - return minioGetUserInfoMock(accessKey) -} - -func (ac AdminClientMock) setUserStatus(ctx context.Context, accessKey string, status madmin.AccountStatus) error { - return minioSetUserStatusMock(accessKey, status) -} - -// AccountInfo mock -func (ac AdminClientMock) AccountInfo(ctx context.Context) (madmin.AccountInfo, error) { - return minioAccountInfoMock(ctx) -} - -func (ac AdminClientMock) addServiceAccount(ctx context.Context, policy *iampolicy.Policy, user string, accessKey string, secretKey string) (madmin.Credentials, error) { - return minioAddServiceAccountMock(ctx, policy, user, accessKey, secretKey) -} - -func (ac AdminClientMock) listServiceAccounts(ctx context.Context, user string) (madmin.ListServiceAccountsResp, error) { - return minioListServiceAccountsMock(ctx, user) -} - -func (ac AdminClientMock) deleteServiceAccount(ctx context.Context, serviceAccount string) error { - return minioDeleteServiceAccountMock(ctx, serviceAccount) -} - -func (ac AdminClientMock) infoServiceAccount(ctx context.Context, serviceAccount string) (madmin.InfoServiceAccountResp, error) { - return minioInfoServiceAccountMock(ctx, serviceAccount) -} - -func (ac AdminClientMock) updateServiceAccount(ctx context.Context, serviceAccount string, opts madmin.UpdateServiceAccountReq) error { - return minioUpdateServiceAccountMock(ctx, serviceAccount, opts) -} diff --git a/api/admin_info.go b/api/admin_info.go deleted file mode 100644 index 5c58ac75f54..00000000000 --- a/api/admin_info.go +++ /dev/null @@ -1,99 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - - "github.com/minio/operator/models" -) - -// UsageInfo usage info -type UsageInfo struct { - Buckets int64 - Objects int64 - Usage int64 - DisksUsage int64 - Servers []*models.ServerProperties - EndpointNotReady bool - Backend *models.BackendProperties -} - -// GetAdminInfo invokes admin info and returns a parsed `UsageInfo` structure -func GetAdminInfo(ctx context.Context, client MinioAdmin) (*UsageInfo, error) { - serverInfo, err := client.serverInfo(ctx) - if err != nil { - return nil, err - } - // we are trimming uint64 to int64 this will report an incorrect measurement for numbers greater than - // 9,223,372,036,854,775,807 - - backendType := string(serverInfo.Backend.Type) - rrSCParity := serverInfo.Backend.RRSCParity - standardSCParity := serverInfo.Backend.StandardSCParity - - var usedSpace int64 - // serverArray contains the serverProperties which describe the servers in the network - var serverArray []*models.ServerProperties - for _, serv := range serverInfo.Servers { - drives := []*models.ServerDrives{} - - for _, drive := range serv.Disks { - usedSpace += int64(drive.UsedSpace) - drives = append(drives, &models.ServerDrives{ - State: drive.State, - UUID: drive.UUID, - Endpoint: drive.Endpoint, - RootDisk: drive.RootDisk, - DrivePath: drive.DrivePath, - Healing: drive.Healing, - Model: drive.Model, - TotalSpace: int64(drive.TotalSpace), - UsedSpace: int64(drive.UsedSpace), - AvailableSpace: int64(drive.AvailableSpace), - }) - } - - newServer := &models.ServerProperties{ - State: serv.State, - Endpoint: serv.Endpoint, - Uptime: serv.Uptime, - Version: serv.Version, - CommitID: serv.CommitID, - PoolNumber: int64(serv.PoolNumber), - Network: serv.Network, - Drives: drives, - } - - serverArray = append(serverArray, newServer) - } - - backendData := &models.BackendProperties{ - BackendType: backendType, - RrSCParity: int64(rrSCParity), - StandardSCParity: int64(standardSCParity), - } - - return &UsageInfo{ - Buckets: int64(serverInfo.Buckets.Count), - Objects: int64(serverInfo.Objects.Count), - Usage: int64(serverInfo.Usage.Size), - DisksUsage: usedSpace, - Servers: serverArray, - Backend: backendData, - }, nil -} diff --git a/api/admin_policies.go b/api/admin_policies.go deleted file mode 100644 index 3bef80a99ac..00000000000 --- a/api/admin_policies.go +++ /dev/null @@ -1,32 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - - "github.com/minio/operator/models" -) - -// SetPolicy calls MinIO server to assign policy to a group or user. -func SetPolicy(ctx context.Context, client MinioAdmin, name, entityName string, entityType models.PolicyEntity) error { - isGroup := false - if entityType == models.PolicyEntityGroup { - isGroup = true - } - return client.setPolicy(ctx, name, entityName, isGroup) -} diff --git a/api/admin_policies_test.go b/api/admin_policies_test.go deleted file mode 100644 index a2b20a41a2c..00000000000 --- a/api/admin_policies_test.go +++ /dev/null @@ -1,67 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "errors" - "testing" - - "github.com/minio/operator/models" - "github.com/stretchr/testify/assert" -) - -func TestSetPolicy(t *testing.T) { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - funcAssert := assert.New(t) - adminClient := AdminClientMock{} - policyName := "readOnly" - entityName := "alevsk" - entityObject := models.PolicyEntityUser - minioSetPolicyMock = func(policyName, entityName string, isGroup bool) error { - return nil - } - // Test-1 : SetPolicy() set policy to user - function := "SetPolicy()" - err := SetPolicy(ctx, adminClient, policyName, entityName, entityObject) - if err != nil { - t.Errorf("Failed on %s:, error occurred: %s", function, err.Error()) - } - // Test-2 : SetPolicy() set policy to group - entityObject = models.PolicyEntityGroup - err = SetPolicy(ctx, adminClient, policyName, entityName, entityObject) - if err != nil { - t.Errorf("Failed on %s:, error occurred: %s", function, err.Error()) - } - // Test-3 : SetPolicy() set policy to user and get error - entityObject = models.PolicyEntityUser - minioSetPolicyMock = func(policyName, entityName string, isGroup bool) error { - return errors.New("error") - } - if err := SetPolicy(ctx, adminClient, policyName, entityName, entityObject); funcAssert.Error(err) { - funcAssert.Equal("error", err.Error()) - } - // Test-4 : SetPolicy() set policy to group and get error - entityObject = models.PolicyEntityGroup - minioSetPolicyMock = func(policyName, entityName string, isGroup bool) error { - return errors.New("error") - } - if err := SetPolicy(ctx, adminClient, policyName, entityName, entityObject); funcAssert.Error(err) { - funcAssert.Equal("error", err.Error()) - } -} diff --git a/api/certificate-handlers.go b/api/certificate-handlers.go deleted file mode 100644 index cc56b417e53..00000000000 --- a/api/certificate-handlers.go +++ /dev/null @@ -1,210 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "encoding/base64" - "errors" - "fmt" - "strings" - - "github.com/go-openapi/runtime/middleware" - "github.com/minio/operator/api/operations" - "github.com/minio/operator/api/operations/operator_api" - "github.com/minio/operator/models" - miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - "github.com/minio/operator/pkg/auth/utils" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -func registerCertificateHandlers(api *operations.OperatorAPI) { - // Tenant Security details - api.OperatorAPITenantSecurityHandler = operator_api.TenantSecurityHandlerFunc(func(params operator_api.TenantSecurityParams, session *models.Principal) middleware.Responder { - resp, err := getTenantSecurityResponse(session, params) - if err != nil { - return operator_api.NewTenantSecurityDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewTenantSecurityOK().WithPayload(resp) - }) - - // Update Tenant Security configuration - api.OperatorAPIUpdateTenantSecurityHandler = operator_api.UpdateTenantSecurityHandlerFunc(func(params operator_api.UpdateTenantSecurityParams, session *models.Principal) middleware.Responder { - err := getUpdateTenantSecurityResponse(session, params) - if err != nil { - return operator_api.NewUpdateTenantSecurityDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewUpdateTenantSecurityNoContent() - }) - - // Update Tenant Certificates - api.OperatorAPITenantUpdateCertificateHandler = operator_api.TenantUpdateCertificateHandlerFunc(func(params operator_api.TenantUpdateCertificateParams, session *models.Principal) middleware.Responder { - err := getTenantUpdateCertificatesResponse(session, params) - if err != nil { - return operator_api.NewTenantUpdateCertificateDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewTenantUpdateCertificateCreated() - }) -} - -func getTenantSecurityResponse(session *models.Principal, params operator_api.TenantSecurityParams) (*models.TenantSecurityResponse, *models.Error) { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - opClientClientSet, err := GetOperatorClient(session.STSSessionToken) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - opClient := &operatorClient{ - client: opClientClientSet, - } - // get Kubernetes Client - clientSet, err := K8sClient(session.STSSessionToken) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - k8sClient := k8sClient{ - client: clientSet, - } - minTenant, err := getTenant(ctx, opClient, params.Namespace, params.Tenant) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - info, err := getTenantSecurity(ctx, &k8sClient, minTenant) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - return info, nil -} - -func getUpdateTenantSecurityResponse(session *models.Principal, params operator_api.UpdateTenantSecurityParams) *models.Error { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - opClientClientSet, err := GetOperatorClient(session.STSSessionToken) - if err != nil { - return ErrorWithContext(ctx, err) - } - // get Kubernetes Client - clientSet, err := K8sClient(session.STSSessionToken) - if err != nil { - return ErrorWithContext(ctx, err) - } - k8sClient := k8sClient{ - client: clientSet, - } - opClient := &operatorClient{ - client: opClientClientSet, - } - if err := updateTenantSecurity(ctx, opClient, &k8sClient, params.Namespace, params); err != nil { - return ErrorWithContext(ctx, err, errors.New("unable to update tenant")) - } - return nil -} - -// updateTenantSecurity -func updateTenantSecurity(ctx context.Context, operatorClient OperatorClientI, client K8sClientI, namespace string, params operator_api.UpdateTenantSecurityParams) error { - minInst, err := operatorClient.TenantGet(ctx, namespace, params.Tenant, metav1.GetOptions{}) - if err != nil { - return err - } - // Update AutoCert - minInst.Spec.RequestAutoCert = ¶ms.Body.AutoCert - var newExternalCertSecret []*miniov2.LocalCertificateReference - var newExternalClientCertSecrets []*miniov2.LocalCertificateReference - var newExternalCaCertSecret []*miniov2.LocalCertificateReference - secretsToBeRemoved := map[string]bool{} - - if params.Body.CustomCertificates != nil { - // Copy certificate secrets to be deleted into map - for _, secret := range params.Body.CustomCertificates.SecretsToBeDeleted { - secretsToBeRemoved[secret] = true - } - - // Remove certificates from Tenant.Spec.ExternalCertSecret - for _, certificate := range minInst.Spec.ExternalCertSecret { - if _, ok := secretsToBeRemoved[certificate.Name]; !ok { - newExternalCertSecret = append(newExternalCertSecret, certificate) - } - } - // Remove certificates from Tenant.Spec.ExternalClientCertSecrets - for _, certificate := range minInst.Spec.ExternalClientCertSecrets { - if _, ok := secretsToBeRemoved[certificate.Name]; !ok { - newExternalClientCertSecrets = append(newExternalClientCertSecrets, certificate) - } - } - // Remove certificates from Tenant.Spec.ExternalCaCertSecret - for _, certificate := range minInst.Spec.ExternalCaCertSecret { - if _, ok := secretsToBeRemoved[certificate.Name]; !ok { - newExternalCaCertSecret = append(newExternalCaCertSecret, certificate) - } - } - - } - secretName := fmt.Sprintf("%s-%s", minInst.Name, strings.ToLower(utils.RandomCharString(5))) - // Create new Server Certificate Secrets for MinIO - externalServerCertSecretName := fmt.Sprintf("%s-external-server-certificate", secretName) - externalServerCertSecrets, err := createOrReplaceExternalCertSecrets(ctx, client, minInst.Namespace, params.Body.CustomCertificates.MinioServerCertificates, externalServerCertSecretName, minInst.Name) - if err != nil { - return err - } - newExternalCertSecret = append(newExternalCertSecret, externalServerCertSecrets...) - // Create new Client Certificate Secrets for MinIO - externalClientCertSecretName := fmt.Sprintf("%s-external-client-certificate", secretName) - externalClientCertSecrets, err := createOrReplaceExternalCertSecrets(ctx, client, minInst.Namespace, params.Body.CustomCertificates.MinioClientCertificates, externalClientCertSecretName, minInst.Name) - if err != nil { - return err - } - newExternalClientCertSecrets = append(newExternalClientCertSecrets, externalClientCertSecrets...) - // Create new CAs Certificate Secrets for MinIO - var caCertificates []tenantSecret - for i, caCertificate := range params.Body.CustomCertificates.MinioCAsCertificates { - certificateContent, err := base64.StdEncoding.DecodeString(caCertificate) - if err != nil { - return err - } - caCertificates = append(caCertificates, tenantSecret{ - Name: fmt.Sprintf("%s-ca-certificate-%d", secretName, i), - Content: map[string][]byte{ - "public.crt": certificateContent, - }, - }) - } - if len(caCertificates) > 0 { - certificateSecrets, err := createOrReplaceSecrets(ctx, client, minInst.Namespace, caCertificates, minInst.Name) - if err != nil { - return err - } - newExternalCaCertSecret = append(newExternalCaCertSecret, certificateSecrets...) - } - - // set Security Context - var newTenantSecurityContext *corev1.PodSecurityContext - newTenantSecurityContext, err = convertModelSCToK8sSC(params.Body.SecurityContext) - if err != nil { - return err - } - for index := range minInst.Spec.Pools { - minInst.Spec.Pools[index].SecurityContext = newTenantSecurityContext - } - - // Update External Certificates - minInst.Spec.ExternalCertSecret = newExternalCertSecret - minInst.Spec.ExternalClientCertSecrets = newExternalClientCertSecrets - minInst.Spec.ExternalCaCertSecret = newExternalCaCertSecret - _, err = operatorClient.TenantUpdate(ctx, minInst, metav1.UpdateOptions{}) - return err -} diff --git a/api/client-admin.go b/api/client-admin.go deleted file mode 100644 index 350f5a91017..00000000000 --- a/api/client-admin.go +++ /dev/null @@ -1,643 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "bytes" - "context" - "encoding/json" - "io" - "net" - "net/http" - "net/url" - "time" - - "github.com/minio/madmin-go/v3" - mcCmd "github.com/minio/mc/cmd" - "github.com/minio/mc/pkg/probe" - "github.com/minio/operator/pkg" - iampolicy "github.com/minio/pkg/iam/policy" -) - -// NewAdminClientWithInsecure gives a new madmin client interface either secure or insecure based on parameter -func NewAdminClientWithInsecure(url, accessKey, secretKey, sessionToken string, insecure bool) (*madmin.AdminClient, *probe.Error) { - admClient, err := s3AdminNew(&mcCmd.Config{ - HostURL: url, - AccessKey: accessKey, - SecretKey: secretKey, - SessionToken: sessionToken, - AppName: globalAppName, - AppVersion: pkg.Version, - Insecure: insecure, - }) - if err != nil { - return nil, err.Trace(url) - } - stsClient := PrepareConsoleHTTPClient(insecure) - admClient.SetCustomTransport(stsClient.Transport) - // set user-agent to differentiate Console UI requests for auditing. - admClient.SetAppInfo("MinIO Operator Console", pkg.Version) - return admClient, nil -} - -// s3AdminNew returns an initialized minioAdmin structure. If debug is enabled, -// it also enables an internal trace transport. -var s3AdminNew = mcCmd.NewAdminFactory() - -// MinioAdmin interface with all functions to be implemented -// by mock when testing, it should include all MinioAdmin respective api calls -// that are used within this project. -type MinioAdmin interface { - listUsers(ctx context.Context) (map[string]madmin.UserInfo, error) - addUser(ctx context.Context, acessKey, SecretKey string) error - removeUser(ctx context.Context, accessKey string) error - getUserInfo(ctx context.Context, accessKey string) (madmin.UserInfo, error) - setUserStatus(ctx context.Context, accessKey string, status madmin.AccountStatus) error - listGroups(ctx context.Context) ([]string, error) - updateGroupMembers(ctx context.Context, greq madmin.GroupAddRemove) error - getGroupDescription(ctx context.Context, group string) (*madmin.GroupDesc, error) - setGroupStatus(ctx context.Context, group string, status madmin.GroupStatus) error - listPolicies(ctx context.Context) (map[string]*iampolicy.Policy, error) - getPolicy(ctx context.Context, name string) (*iampolicy.Policy, error) - removePolicy(ctx context.Context, name string) error - addPolicy(ctx context.Context, name string, policy *iampolicy.Policy) error - setPolicy(ctx context.Context, policyName, entityName string, isGroup bool) error - getConfigKV(ctx context.Context, key string) ([]byte, error) - helpConfigKV(ctx context.Context, subSys, key string, envOnly bool) (madmin.Help, error) - helpConfigKVGlobal(ctx context.Context, envOnly bool) (madmin.Help, error) - setConfigKV(ctx context.Context, kv string) (restart bool, err error) - delConfigKV(ctx context.Context, kv string) (err error) - serviceRestart(ctx context.Context) error - serverInfo(ctx context.Context) (madmin.InfoMessage, error) - startProfiling(ctx context.Context, profiler madmin.ProfilerType) ([]madmin.StartProfilingResult, error) - stopProfiling(ctx context.Context) (io.ReadCloser, error) - serviceTrace(ctx context.Context, threshold int64, s3, internal, storage, os, errTrace bool) <-chan madmin.ServiceTraceInfo - getLogs(ctx context.Context, node string, lineCnt int, logKind string) <-chan madmin.LogInfo - AccountInfo(ctx context.Context) (madmin.AccountInfo, error) - heal(ctx context.Context, bucket, prefix string, healOpts madmin.HealOpts, clientToken string, - forceStart, forceStop bool) (healStart madmin.HealStartSuccess, healTaskStatus madmin.HealTaskStatus, err error) - // Service Accounts - addServiceAccount(ctx context.Context, policy *iampolicy.Policy, user string, accessKey string, secretKey string) (madmin.Credentials, error) - listServiceAccounts(ctx context.Context, user string) (madmin.ListServiceAccountsResp, error) - deleteServiceAccount(ctx context.Context, serviceAccount string) error - infoServiceAccount(ctx context.Context, serviceAccount string) (madmin.InfoServiceAccountResp, error) - updateServiceAccount(ctx context.Context, serviceAccount string, opts madmin.UpdateServiceAccountReq) error - // Remote Buckets - listRemoteBuckets(ctx context.Context, bucket, arnType string) (targets []madmin.BucketTarget, err error) - getRemoteBucket(ctx context.Context, bucket, arnType string) (targets *madmin.BucketTarget, err error) - removeRemoteBucket(ctx context.Context, bucket, arn string) error - addRemoteBucket(ctx context.Context, bucket string, target *madmin.BucketTarget) (string, error) - // Account password management - changePassword(ctx context.Context, accessKey, secretKey string) error - serverHealthInfo(ctx context.Context, healthDataTypes []madmin.HealthDataType, deadline time.Duration) (interface{}, string, error) - // List Tiers - listTiers(ctx context.Context) ([]*madmin.TierConfig, error) - // Tier Info - tierStats(ctx context.Context) ([]madmin.TierInfo, error) - // Add Tier - addTier(ctx context.Context, tier *madmin.TierConfig) error - // Edit Tier Credentials - editTierCreds(ctx context.Context, tierName string, creds madmin.TierCreds) error - // verify Tier status - verifyTierStatus(ctx context.Context, tierName string) error - // Speedtest - speedtest(ctx context.Context, opts madmin.SpeedtestOpts) (chan madmin.SpeedTestResult, error) - // Site Relication - getSiteReplicationInfo(ctx context.Context) (*madmin.SiteReplicationInfo, error) - addSiteReplicationInfo(ctx context.Context, sites []madmin.PeerSite) (*madmin.ReplicateAddStatus, error) - editSiteReplicationInfo(ctx context.Context, site madmin.PeerInfo) (*madmin.ReplicateEditStatus, error) - deleteSiteReplicationInfo(ctx context.Context, removeReq madmin.SRRemoveReq) (*madmin.ReplicateRemoveStatus, error) - - // Replication status - getSiteReplicationStatus(ctx context.Context, params madmin.SRStatusOptions) (*madmin.SRStatusInfo, error) - - // KMS - kmsStatus(ctx context.Context) (madmin.KMSStatus, error) - kmsMetrics(ctx context.Context) (*madmin.KMSMetrics, error) - kmsAPIs(ctx context.Context) ([]madmin.KMSAPI, error) - kmsVersion(ctx context.Context) (*madmin.KMSVersion, error) - createKey(ctx context.Context, key string) error - importKey(ctx context.Context, key string, content []byte) error - listKeys(ctx context.Context, pattern string) ([]madmin.KMSKeyInfo, error) - keyStatus(ctx context.Context, key string) (*madmin.KMSKeyStatus, error) - deleteKey(ctx context.Context, key string) error - setKMSPolicy(ctx context.Context, policy string, content []byte) error - assignPolicy(ctx context.Context, policy string, content []byte) error - describePolicy(ctx context.Context, policy string) (*madmin.KMSDescribePolicy, error) - getKMSPolicy(ctx context.Context, policy string) (*madmin.KMSPolicy, error) - listKMSPolicies(ctx context.Context, pattern string) ([]madmin.KMSPolicyInfo, error) - deletePolicy(ctx context.Context, policy string) error - describeIdentity(ctx context.Context, identity string) (*madmin.KMSDescribeIdentity, error) - describeSelfIdentity(ctx context.Context) (*madmin.KMSDescribeSelfIdentity, error) - deleteIdentity(ctx context.Context, identity string) error - listIdentities(ctx context.Context, pattern string) ([]madmin.KMSIdentityInfo, error) - - // IDP - addOrUpdateIDPConfig(ctx context.Context, idpType, cfgName, cfgData string, update bool) (restart bool, err error) - listIDPConfig(ctx context.Context, idpType string) ([]madmin.IDPListItem, error) - deleteIDPConfig(ctx context.Context, idpType, cfgName string) (restart bool, err error) - getIDPConfig(ctx context.Context, cfgType, cfgName string) (c madmin.IDPConfig, err error) -} - -// AdminClient Interface implementation -// -// Define the structure of a minIO Client and define the functions that are actually used -// from minIO api. -type AdminClient struct { - Client *madmin.AdminClient -} - -func (ac AdminClient) changePassword(ctx context.Context, accessKey, secretKey string) error { - return ac.Client.SetUser(ctx, accessKey, secretKey, madmin.AccountEnabled) -} - -// implements madmin.ListUsers() -func (ac AdminClient) listUsers(ctx context.Context) (map[string]madmin.UserInfo, error) { - return ac.Client.ListUsers(ctx) -} - -// implements madmin.AddUser() -func (ac AdminClient) addUser(ctx context.Context, accessKey, secretKey string) error { - return ac.Client.AddUser(ctx, accessKey, secretKey) -} - -// implements madmin.RemoveUser() -func (ac AdminClient) removeUser(ctx context.Context, accessKey string) error { - return ac.Client.RemoveUser(ctx, accessKey) -} - -// implements madmin.GetUserInfo() -func (ac AdminClient) getUserInfo(ctx context.Context, accessKey string) (madmin.UserInfo, error) { - return ac.Client.GetUserInfo(ctx, accessKey) -} - -// implements madmin.SetUserStatus() -func (ac AdminClient) setUserStatus(ctx context.Context, accessKey string, status madmin.AccountStatus) error { - return ac.Client.SetUserStatus(ctx, accessKey, status) -} - -// implements madmin.ListGroups() -func (ac AdminClient) listGroups(ctx context.Context) ([]string, error) { - return ac.Client.ListGroups(ctx) -} - -// implements madmin.UpdateGroupMembers() -func (ac AdminClient) updateGroupMembers(ctx context.Context, greq madmin.GroupAddRemove) error { - return ac.Client.UpdateGroupMembers(ctx, greq) -} - -// implements madmin.GetGroupDescription(group) -func (ac AdminClient) getGroupDescription(ctx context.Context, group string) (*madmin.GroupDesc, error) { - return ac.Client.GetGroupDescription(ctx, group) -} - -// implements madmin.SetGroupStatus(group, status) -func (ac AdminClient) setGroupStatus(ctx context.Context, group string, status madmin.GroupStatus) error { - return ac.Client.SetGroupStatus(ctx, group, status) -} - -// implements madmin.ListCannedPolicies() -func (ac AdminClient) listPolicies(ctx context.Context) (map[string]*iampolicy.Policy, error) { - policyMap, err := ac.Client.ListCannedPolicies(ctx) - if err != nil { - return nil, err - } - policies := make(map[string]*iampolicy.Policy, len(policyMap)) - for k, v := range policyMap { - p, err := iampolicy.ParseConfig(bytes.NewReader(v)) - if err != nil { - return nil, err - } - policies[k] = p - } - return policies, nil -} - -// implements madmin.ListCannedPolicies() -func (ac AdminClient) getPolicy(ctx context.Context, name string) (*iampolicy.Policy, error) { - praw, err := ac.Client.InfoCannedPolicy(ctx, name) - if err != nil { - return nil, err - } - return iampolicy.ParseConfig(bytes.NewReader(praw)) -} - -// implements madmin.RemoveCannedPolicy() -func (ac AdminClient) removePolicy(ctx context.Context, name string) error { - return ac.Client.RemoveCannedPolicy(ctx, name) -} - -// implements madmin.AddCannedPolicy() -func (ac AdminClient) addPolicy(ctx context.Context, name string, policy *iampolicy.Policy) error { - buf, err := json.Marshal(policy) - if err != nil { - return err - } - return ac.Client.AddCannedPolicy(ctx, name, buf) -} - -// implements madmin.SetPolicy() -func (ac AdminClient) setPolicy(ctx context.Context, policyName, entityName string, isGroup bool) error { - return ac.Client.SetPolicy(ctx, policyName, entityName, isGroup) -} - -// implements madmin.GetConfigKV() -func (ac AdminClient) getConfigKV(ctx context.Context, key string) ([]byte, error) { - return ac.Client.GetConfigKV(ctx, key) -} - -// implements madmin.HelpConfigKV() -func (ac AdminClient) helpConfigKV(ctx context.Context, subSys, key string, envOnly bool) (madmin.Help, error) { - return ac.Client.HelpConfigKV(ctx, subSys, key, envOnly) -} - -// implements madmin.helpConfigKVGlobal() -func (ac AdminClient) helpConfigKVGlobal(ctx context.Context, envOnly bool) (madmin.Help, error) { - return ac.Client.HelpConfigKV(ctx, "", "", envOnly) -} - -// implements madmin.SetConfigKV() -func (ac AdminClient) setConfigKV(ctx context.Context, kv string) (restart bool, err error) { - return ac.Client.SetConfigKV(ctx, kv) -} - -// implements madmin.DelConfigKV() -func (ac AdminClient) delConfigKV(ctx context.Context, kv string) (err error) { - _, err = ac.Client.DelConfigKV(ctx, kv) - return err -} - -// implements madmin.ServiceRestart() -func (ac AdminClient) serviceRestart(ctx context.Context) (err error) { - return ac.Client.ServiceRestart(ctx) -} - -// implements madmin.ServerInfo() -func (ac AdminClient) serverInfo(ctx context.Context) (madmin.InfoMessage, error) { - return ac.Client.ServerInfo(ctx) -} - -// implements madmin.StartProfiling() -func (ac AdminClient) startProfiling(ctx context.Context, profiler madmin.ProfilerType) ([]madmin.StartProfilingResult, error) { - return ac.Client.StartProfiling(ctx, profiler) -} - -// implements madmin.DownloadProfilingData() -func (ac AdminClient) stopProfiling(ctx context.Context) (io.ReadCloser, error) { - return ac.Client.DownloadProfilingData(ctx) -} - -// implements madmin.ServiceTrace() -func (ac AdminClient) serviceTrace(ctx context.Context, threshold int64, s3, internal, storage, os, errTrace bool) <-chan madmin.ServiceTraceInfo { - thresholdT := time.Duration(threshold) - - tracingOptions := madmin.ServiceTraceOpts{ - S3: true, - OnlyErrors: errTrace, - Internal: internal, - Storage: storage, - OS: os, - Threshold: thresholdT, - } - - return ac.Client.ServiceTrace(ctx, tracingOptions) -} - -// implements madmin.GetLogs() -func (ac AdminClient) getLogs(ctx context.Context, node string, lineCnt int, logKind string) <-chan madmin.LogInfo { - return ac.Client.GetLogs(ctx, node, lineCnt, logKind) -} - -// implements madmin.AddServiceAccount() -func (ac AdminClient) addServiceAccount(ctx context.Context, policy *iampolicy.Policy, user string, accessKey string, secretKey string) (madmin.Credentials, error) { - buf, err := json.Marshal(policy) - if err != nil { - return madmin.Credentials{}, err - } - return ac.Client.AddServiceAccount(ctx, madmin.AddServiceAccountReq{ - Policy: buf, - TargetUser: user, - AccessKey: accessKey, - SecretKey: secretKey, - }) -} - -// implements madmin.ListServiceAccounts() -func (ac AdminClient) listServiceAccounts(ctx context.Context, user string) (madmin.ListServiceAccountsResp, error) { - // TODO: Fix this - return ac.Client.ListServiceAccounts(ctx, user) -} - -// implements madmin.DeleteServiceAccount() -func (ac AdminClient) deleteServiceAccount(ctx context.Context, serviceAccount string) error { - return ac.Client.DeleteServiceAccount(ctx, serviceAccount) -} - -// implements madmin.InfoServiceAccount() -func (ac AdminClient) infoServiceAccount(ctx context.Context, serviceAccount string) (madmin.InfoServiceAccountResp, error) { - return ac.Client.InfoServiceAccount(ctx, serviceAccount) -} - -// implements madmin.UpdateServiceAccount() -func (ac AdminClient) updateServiceAccount(ctx context.Context, serviceAccount string, opts madmin.UpdateServiceAccountReq) error { - return ac.Client.UpdateServiceAccount(ctx, serviceAccount, opts) -} - -// AccountInfo implements madmin.AccountInfo() -func (ac AdminClient) AccountInfo(ctx context.Context) (madmin.AccountInfo, error) { - return ac.Client.AccountInfo(ctx, madmin.AccountOpts{}) -} - -func (ac AdminClient) heal(ctx context.Context, bucket, prefix string, healOpts madmin.HealOpts, clientToken string, - forceStart, forceStop bool, -) (healStart madmin.HealStartSuccess, healTaskStatus madmin.HealTaskStatus, err error) { - return ac.Client.Heal(ctx, bucket, prefix, healOpts, clientToken, forceStart, forceStop) -} - -// listRemoteBuckets - return a list of remote buckets -func (ac AdminClient) listRemoteBuckets(ctx context.Context, bucket, arnType string) (targets []madmin.BucketTarget, err error) { - return ac.Client.ListRemoteTargets(ctx, bucket, arnType) -} - -// getRemoteBucket - gets remote bucked based on a given bucket name -func (ac AdminClient) getRemoteBucket(ctx context.Context, bucket, arnType string) (*madmin.BucketTarget, error) { - targets, err := ac.Client.ListRemoteTargets(ctx, bucket, arnType) - if err != nil { - return nil, err - } - if len(targets) > 0 { - return &targets[0], nil - } - return nil, err -} - -// removeRemoteBucket removes a remote target associated with particular ARN for this bucket -func (ac AdminClient) removeRemoteBucket(ctx context.Context, bucket, arn string) error { - return ac.Client.RemoveRemoteTarget(ctx, bucket, arn) -} - -// addRemoteBucket sets up a remote target for this bucket -func (ac AdminClient) addRemoteBucket(ctx context.Context, bucket string, target *madmin.BucketTarget) (string, error) { - return ac.Client.SetRemoteTarget(ctx, bucket, target) -} - -// serverHealthInfo implements mc.ServerHealthInfo - Connect to a minio server and call Health Info Management API -func (ac AdminClient) serverHealthInfo(ctx context.Context, healthDataTypes []madmin.HealthDataType, deadline time.Duration) (interface{}, string, error) { - resp, version, err := ac.Client.ServerHealthInfo(ctx, healthDataTypes, deadline, "") - if err != nil { - return nil, version, err - } - - var healthInfo interface{} - - decoder := json.NewDecoder(resp.Body) - switch version { - case madmin.HealthInfoVersion0: - info := madmin.HealthInfoV0{} - for { - if err = decoder.Decode(&info); err != nil { - break - } - } - - // Old minio versions don't return the MinIO info in - // response of the healthinfo api. So fetch it separately - minioInfo, err := ac.Client.ServerInfo(ctx) - if err != nil { - info.Minio.Error = err.Error() - } else { - info.Minio.Info = minioInfo - } - - healthInfo = mcCmd.MapHealthInfoToV1(info, nil) - version = madmin.HealthInfoVersion1 - case madmin.HealthInfoVersion: - info := madmin.HealthInfo{} - for { - if err = decoder.Decode(&info); err != nil { - break - } - } - healthInfo = info - } - - return healthInfo, version, nil -} - -// implements madmin.listTiers() -func (ac AdminClient) listTiers(ctx context.Context) ([]*madmin.TierConfig, error) { - return ac.Client.ListTiers(ctx) -} - -// implements madmin.tierStats() -func (ac AdminClient) tierStats(ctx context.Context) ([]madmin.TierInfo, error) { - return ac.Client.TierStats(ctx) -} - -// implements madmin.AddTier() -func (ac AdminClient) addTier(ctx context.Context, cfg *madmin.TierConfig) error { - return ac.Client.AddTier(ctx, cfg) -} - -// implements madmin.EditTier() -func (ac AdminClient) editTierCreds(ctx context.Context, tierName string, creds madmin.TierCreds) error { - return ac.Client.EditTier(ctx, tierName, creds) -} - -// implements madmin.VerifyTier() -func (ac AdminClient) verifyTierStatus(ctx context.Context, tierName string) error { - return ac.Client.VerifyTier(ctx, tierName) -} - -// isLocalAddress returns true if the url contains an IPv4/IPv6 hostname -// that points to the local machine - FQDN are not supported -func isLocalIPAddress(ipAddr string) bool { - if ipAddr == "" { - return false - } - ip := net.ParseIP(ipAddr) - return ip != nil && ip.IsLoopback() -} - -// GetConsoleHTTPClient caches different http clients depending on the target endpoint while taking -// in consideration CA certs stored in ${HOME}/.console/certs/CAs and ${HOME}/.minio/certs/CAs -// If the target endpoint points to a loopback device, skip the TLS verification. -func GetConsoleHTTPClient(address string) *http.Client { - u, err := url.Parse(address) - if err == nil { - address = u.Hostname() - } - - client := PrepareConsoleHTTPClient(isLocalIPAddress(address)) - - return client -} - -func (ac AdminClient) speedtest(ctx context.Context, opts madmin.SpeedtestOpts) (chan madmin.SpeedTestResult, error) { - return ac.Client.Speedtest(ctx, opts) -} - -// Site Replication -func (ac AdminClient) getSiteReplicationInfo(ctx context.Context) (*madmin.SiteReplicationInfo, error) { - res, err := ac.Client.SiteReplicationInfo(ctx) - if err != nil { - return nil, err - } - return &madmin.SiteReplicationInfo{ - Enabled: res.Enabled, - Name: res.Name, - Sites: res.Sites, - ServiceAccountAccessKey: res.ServiceAccountAccessKey, - }, nil -} - -func (ac AdminClient) addSiteReplicationInfo(ctx context.Context, sites []madmin.PeerSite) (*madmin.ReplicateAddStatus, error) { - res, err := ac.Client.SiteReplicationAdd(ctx, sites, madmin.SRAddOptions{}) - if err != nil { - return nil, err - } - - return &madmin.ReplicateAddStatus{ - Success: res.Success, - Status: res.Status, - ErrDetail: res.ErrDetail, - InitialSyncErrorMessage: res.InitialSyncErrorMessage, - }, nil -} - -func (ac AdminClient) editSiteReplicationInfo(ctx context.Context, site madmin.PeerInfo) (*madmin.ReplicateEditStatus, error) { - res, err := ac.Client.SiteReplicationEdit(ctx, site, madmin.SREditOptions{}) - if err != nil { - return nil, err - } - return &madmin.ReplicateEditStatus{ - Success: res.Success, - Status: res.Status, - ErrDetail: res.ErrDetail, - }, nil -} - -func (ac AdminClient) deleteSiteReplicationInfo(ctx context.Context, removeReq madmin.SRRemoveReq) (*madmin.ReplicateRemoveStatus, error) { - res, err := ac.Client.SiteReplicationRemove(ctx, removeReq) - if err != nil { - return nil, err - } - return &madmin.ReplicateRemoveStatus{ - Status: res.Status, - ErrDetail: res.ErrDetail, - }, nil -} - -func (ac AdminClient) getSiteReplicationStatus(ctx context.Context, params madmin.SRStatusOptions) (*madmin.SRStatusInfo, error) { - res, err := ac.Client.SRStatusInfo(ctx, params) - if err != nil { - return nil, err - } - return &res, nil -} - -func (ac AdminClient) kmsStatus(ctx context.Context) (madmin.KMSStatus, error) { - return ac.Client.KMSStatus(ctx) -} - -func (ac AdminClient) kmsMetrics(ctx context.Context) (*madmin.KMSMetrics, error) { - return ac.Client.KMSMetrics(ctx) -} - -func (ac AdminClient) kmsAPIs(ctx context.Context) ([]madmin.KMSAPI, error) { - return ac.Client.KMSAPIs(ctx) -} - -func (ac AdminClient) kmsVersion(ctx context.Context) (*madmin.KMSVersion, error) { - return ac.Client.KMSVersion(ctx) -} - -func (ac AdminClient) createKey(ctx context.Context, key string) error { - return ac.Client.CreateKey(ctx, key) -} - -func (ac AdminClient) importKey(ctx context.Context, key string, content []byte) error { - return ac.Client.ImportKey(ctx, key, content) -} - -func (ac AdminClient) listKeys(ctx context.Context, pattern string) ([]madmin.KMSKeyInfo, error) { - return ac.Client.ListKeys(ctx, pattern) -} - -func (ac AdminClient) keyStatus(ctx context.Context, key string) (*madmin.KMSKeyStatus, error) { - return ac.Client.GetKeyStatus(ctx, key) -} - -func (ac AdminClient) deleteKey(ctx context.Context, key string) error { - return ac.Client.DeleteKey(ctx, key) -} - -func (ac AdminClient) setKMSPolicy(ctx context.Context, policy string, content []byte) error { - return ac.Client.SetKMSPolicy(ctx, policy, content) -} - -func (ac AdminClient) assignPolicy(ctx context.Context, policy string, content []byte) error { - return ac.Client.AssignPolicy(ctx, policy, content) -} - -func (ac AdminClient) describePolicy(ctx context.Context, policy string) (*madmin.KMSDescribePolicy, error) { - return ac.Client.DescribePolicy(ctx, policy) -} - -func (ac AdminClient) getKMSPolicy(ctx context.Context, policy string) (*madmin.KMSPolicy, error) { - return ac.Client.GetPolicy(ctx, policy) -} - -func (ac AdminClient) listKMSPolicies(ctx context.Context, pattern string) ([]madmin.KMSPolicyInfo, error) { - return ac.Client.ListPolicies(ctx, pattern) -} - -func (ac AdminClient) deletePolicy(ctx context.Context, policy string) error { - return ac.Client.DeletePolicy(ctx, policy) -} - -func (ac AdminClient) describeIdentity(ctx context.Context, identity string) (*madmin.KMSDescribeIdentity, error) { - return ac.Client.DescribeIdentity(ctx, identity) -} - -func (ac AdminClient) describeSelfIdentity(ctx context.Context) (*madmin.KMSDescribeSelfIdentity, error) { - return ac.Client.DescribeSelfIdentity(ctx) -} - -func (ac AdminClient) deleteIdentity(ctx context.Context, identity string) error { - return ac.Client.DeleteIdentity(ctx, identity) -} - -func (ac AdminClient) listIdentities(ctx context.Context, pattern string) ([]madmin.KMSIdentityInfo, error) { - return ac.Client.ListIdentities(ctx, pattern) -} - -func (ac AdminClient) addOrUpdateIDPConfig(ctx context.Context, idpType, cfgName, cfgData string, update bool) (restart bool, err error) { - return ac.Client.AddOrUpdateIDPConfig(ctx, idpType, cfgName, cfgData, update) -} - -func (ac AdminClient) listIDPConfig(ctx context.Context, idpType string) ([]madmin.IDPListItem, error) { - return ac.Client.ListIDPConfig(ctx, idpType) -} - -func (ac AdminClient) deleteIDPConfig(ctx context.Context, idpType, cfgName string) (restart bool, err error) { - return ac.Client.DeleteIDPConfig(ctx, idpType, cfgName) -} - -func (ac AdminClient) getIDPConfig(ctx context.Context, idpType, cfgName string) (c madmin.IDPConfig, err error) { - return ac.Client.GetIDPConfig(ctx, idpType, cfgName) -} diff --git a/api/client.go b/api/client.go deleted file mode 100644 index 01dff4293df..00000000000 --- a/api/client.go +++ /dev/null @@ -1,115 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "io" - "time" - - mc "github.com/minio/mc/cmd" - "github.com/minio/mc/pkg/probe" - "github.com/minio/minio-go/v7" - "github.com/minio/minio-go/v7/pkg/credentials" - "github.com/minio/minio-go/v7/pkg/lifecycle" - "github.com/minio/minio-go/v7/pkg/notification" - "github.com/minio/minio-go/v7/pkg/sse" - "github.com/minio/minio-go/v7/pkg/tags" -) - -func init() { - // All minio-go API operations shall be performed only once, - // another way to look at this is we are turning off retries. - minio.MaxRetry = 1 -} - -// MinioClient interface with all functions to be implemented -// by mock when testing, it should include all MinioClient respective api calls -// that are used within this project. -type MinioClient interface { - listBucketsWithContext(ctx context.Context) ([]minio.BucketInfo, error) - makeBucketWithContext(ctx context.Context, bucketName, location string, objectLocking bool) error - setBucketPolicyWithContext(ctx context.Context, bucketName, policy string) error - removeBucket(ctx context.Context, bucketName string) error - getBucketNotification(ctx context.Context, bucketName string) (config notification.Configuration, err error) - getBucketPolicy(ctx context.Context, bucketName string) (string, error) - listObjects(ctx context.Context, bucket string, opts minio.ListObjectsOptions) <-chan minio.ObjectInfo - getObjectRetention(ctx context.Context, bucketName, objectName, versionID string) (mode *minio.RetentionMode, retainUntilDate *time.Time, err error) - getObjectLegalHold(ctx context.Context, bucketName, objectName string, opts minio.GetObjectLegalHoldOptions) (status *minio.LegalHoldStatus, err error) - putObject(ctx context.Context, bucketName, objectName string, reader io.Reader, objectSize int64, opts minio.PutObjectOptions) (info minio.UploadInfo, err error) - putObjectLegalHold(ctx context.Context, bucketName, objectName string, opts minio.PutObjectLegalHoldOptions) error - putObjectRetention(ctx context.Context, bucketName, objectName string, opts minio.PutObjectRetentionOptions) error - statObject(ctx context.Context, bucketName, prefix string, opts minio.GetObjectOptions) (objectInfo minio.ObjectInfo, err error) - setBucketEncryption(ctx context.Context, bucketName string, config *sse.Configuration) error - removeBucketEncryption(ctx context.Context, bucketName string) error - getBucketEncryption(ctx context.Context, bucketName string) (*sse.Configuration, error) - putObjectTagging(ctx context.Context, bucketName, objectName string, otags *tags.Tags, opts minio.PutObjectTaggingOptions) error - getObjectTagging(ctx context.Context, bucketName, objectName string, opts minio.GetObjectTaggingOptions) (*tags.Tags, error) - setObjectLockConfig(ctx context.Context, bucketName string, mode *minio.RetentionMode, validity *uint, unit *minio.ValidityUnit) error - getBucketObjectLockConfig(ctx context.Context, bucketName string) (mode *minio.RetentionMode, validity *uint, unit *minio.ValidityUnit, err error) - getObjectLockConfig(ctx context.Context, bucketName string) (lock string, mode *minio.RetentionMode, validity *uint, unit *minio.ValidityUnit, err error) - getLifecycleRules(ctx context.Context, bucketName string) (lifecycle *lifecycle.Configuration, err error) - setBucketLifecycle(ctx context.Context, bucketName string, config *lifecycle.Configuration) error - copyObject(ctx context.Context, dst minio.CopyDestOptions, src minio.CopySrcOptions) (minio.UploadInfo, error) - GetBucketTagging(ctx context.Context, bucketName string) (*tags.Tags, error) - SetBucketTagging(ctx context.Context, bucketName string, tags *tags.Tags) error - RemoveBucketTagging(ctx context.Context, bucketName string) error -} - -// MCClient interface with all functions to be implemented -// by mock when testing, it should include all mc/S3Client respective api calls -// that are used within this project. -type MCClient interface { - addNotificationConfig(ctx context.Context, arn string, events []string, prefix, suffix string, ignoreExisting bool) *probe.Error - removeNotificationConfig(ctx context.Context, arn string, event string, prefix string, suffix string) *probe.Error - watch(ctx context.Context, options mc.WatchOptions) (*mc.WatchObject, *probe.Error) - remove(ctx context.Context, isIncomplete, isRemoveBucket, isBypass, forceDelete bool, contentCh <-chan *mc.ClientContent) <-chan mc.RemoveResult - list(ctx context.Context, opts mc.ListOptions) <-chan *mc.ClientContent - get(ctx context.Context, opts mc.GetOptions) (io.ReadCloser, *probe.Error) - shareDownload(ctx context.Context, versionID string, expires time.Duration) (string, *probe.Error) - setVersioning(ctx context.Context, status string) *probe.Error -} - -// ConsoleCredentialsI interface with all functions to be implemented -// by mock when testing, it should include all needed consoleCredentials.Login api calls -// that are used within this project. -type ConsoleCredentialsI interface { - Get() (credentials.Value, error) - Expire() - GetAccountAccessKey() string -} - -// ConsoleCredentials Interface implementation -type ConsoleCredentials struct { - ConsoleCredentials *credentials.Credentials - AccountAccessKey string -} - -// GetAccountAccessKey implementation -func (c ConsoleCredentials) GetAccountAccessKey() string { - return c.AccountAccessKey -} - -// Get implements *Login.Get() -func (c ConsoleCredentials) Get() (credentials.Value, error) { - return c.ConsoleCredentials.Get() -} - -// Expire implements *Login.Expire() -func (c ConsoleCredentials) Expire() { - c.ConsoleCredentials.Expire() -} diff --git a/api/config.go b/api/config.go deleted file mode 100644 index 4b0a1778c1f..00000000000 --- a/api/config.go +++ /dev/null @@ -1,230 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "crypto/x509" - "net" - "strconv" - "strings" - "time" - - xoauth2 "golang.org/x/oauth2" - - "k8s.io/klog/v2" - - "github.com/minio/operator/pkg/auth/idp/oauth2" - - xcerts "github.com/minio/pkg/certs" - - "github.com/minio/pkg/env" -) - -var ( - // Port console default port - Port = "9090" - - // Hostname console hostname - // avoid listening on 0.0.0.0 by default - // instead listen on all IPv4 and IPv6 - // - Hostname should be empty. - Hostname = "" - - // TLSPort console tls port - TLSPort = "9443" - - // TLSRedirect console tls redirect rule - TLSRedirect = "on" - - // SessionDuration cookie validity duration - SessionDuration = 45 * time.Minute - - // LicenseKey in memory license key used by console ui - LicenseKey = "" - // GlobalRootCAs is CA root certificates, a nil value means system certs pool will be used - GlobalRootCAs *x509.CertPool - // GlobalPublicCerts has certificates Console will use to serve clients - GlobalPublicCerts []*x509.Certificate - // GlobalTLSCertsManager custom TLS Manager for SNI support - GlobalTLSCertsManager *xcerts.Manager -) - -// getK8sSAToken assumes the plugin is running inside a k8s pod and gets the token directly from IdP as id_token -// if id_token is valid token for k8s, then user will have access as described in k8s documentation: -// https://kubernetes.io/docs/reference/access-authn-authz/authentication/#openid-connect-tokens -func getK8sSAToken(oauth2Token *xoauth2.Token) string { - var idToken interface{} - if oauth2Token != nil { - // The extraction of id_token alone - idToken = oauth2Token.Extra("id_token") - } - if idToken == nil { - klog.Warning("we no longer provide console-sa access token but rather your should consider configuring k8s idp to get the token in a production environment") - return env.Get(OperatorSAToken, "") - } - return idToken.(string) -} - -// Get Marketplace deployment platform -func getMarketplace() string { - return env.Get(Marketplace, "") -} - -// MinIOConfig represents application configuration passed in from the MinIO -// server to the console. -type MinIOConfig struct { - OpenIDProviders oauth2.OpenIDPCfg -} - -// GetHostname gets console hostname set on env variable, -// default one or defined on run command -func GetHostname() string { - return strings.ToLower(env.Get(OperatorUIHostname, Hostname)) -} - -// GetPort gets console por set on env variable -// or default one -func GetPort() int { - port, err := strconv.Atoi(env.Get(OperatorUIPort, Port)) - if err != nil { - port = 9090 - } - return port -} - -// GetTLSPort gets console tls port set on env variable -// or default one -func GetTLSPort() int { - port, err := strconv.Atoi(env.Get(OperatorUITLSPort, TLSPort)) - if err != nil { - port = 9443 - } - return port -} - -// GetTLSRedirect if is set to true, then only allow HTTPS requests. Default is true. -func GetTLSRedirect() string { - return strings.ToLower(env.Get(SecureTLSRedirect, TLSRedirect)) -} - -// GetSecureAllowedHosts secure middleware env variable configurations -func GetSecureAllowedHosts() []string { - allowedHosts := env.Get(SecureAllowedHosts, "") - if allowedHosts != "" { - return strings.Split(allowedHosts, ",") - } - return []string{} -} - -// GetSecureAllowedHostsAreRegex determines, if the provided AllowedHosts slice contains valid regular expressions. Default is false. -func GetSecureAllowedHostsAreRegex() bool { - return strings.ToLower(env.Get(SecureAllowedHostsAreRegex, "off")) == "on" -} - -// GetSecureFrameDeny If FrameDeny is set to true, adds the X-Frame-Options header with the value of `DENY`. Default is true. -func GetSecureFrameDeny() bool { - return strings.ToLower(env.Get(SecureFrameDeny, "on")) == "on" -} - -// GetSecureContentTypeNonSniff If ContentTypeNosniff is true, adds the X-Content-Type-Options header with the value `nosniff`. Default is true. -func GetSecureContentTypeNonSniff() bool { - return strings.ToLower(env.Get(SecureContentTypeNoSniff, "on")) == "on" -} - -// GetSecureBrowserXSSFilter If BrowserXssFilter is true, adds the X-XSS-Protection header with the value `1; mode=block`. Default is true. -func GetSecureBrowserXSSFilter() bool { - return strings.ToLower(env.Get(SecureBrowserXSSFilter, "on")) == "on" -} - -// GetSecureContentSecurityPolicy allows the Content-Security-Policy header value to be set with a custom value. Default is "". -// Passing a template string will replace `$NONCE` with a dynamic nonce value of 16 bytes for each request which can be -// later retrieved using the Nonce function. -func GetSecureContentSecurityPolicy() string { - return env.Get(SecureContentSecurityPolicy, "") -} - -// GetSecureContentSecurityPolicyReportOnly allows the Content-Security-Policy-Report-Only header value to be set with a custom value. Default is "". -func GetSecureContentSecurityPolicyReportOnly() string { - return env.Get(SecureContentSecurityPolicyReportOnly, "") -} - -// GetSecureHostsProxyHeaders is a set of header keys that may hold a proxied hostname value for the request. -func GetSecureHostsProxyHeaders() []string { - allowedHosts := env.Get(SecureHostsProxyHeaders, "") - if allowedHosts != "" { - return strings.Split(allowedHosts, ",") - } - return []string{} -} - -// GetSecureTLSHost is the host name that is used to redirect HTTP requests to HTTPS. Default is "", which indicates to use the same host. -func GetSecureTLSHost() string { - tlsHost := env.Get(SecureTLSHost, "") - if tlsHost == "" && Hostname != "" { - return net.JoinHostPort(Hostname, TLSPort) - } - return "" -} - -// GetSecureSTSSeconds is the max-age of the Strict-Transport-Security header. Default is 0, which would NOT include the header. -func GetSecureSTSSeconds() int64 { - seconds, err := strconv.Atoi(env.Get(SecureSTSSeconds, "0")) - if err != nil { - seconds = 0 - } - return int64(seconds) -} - -// GetSecureSTSIncludeSubdomains If STSIncludeSubdomains is set to true, the `includeSubdomains` will be appended to the Strict-Transport-Security header. Default is false. -func GetSecureSTSIncludeSubdomains() bool { - return strings.ToLower(env.Get(SecureSTSIncludeSubdomains, "off")) == "on" -} - -// GetSecureSTSPreload If STSPreload is set to true, the `preload` flag will be appended to the Strict-Transport-Security header. Default is false. -func GetSecureSTSPreload() bool { - return strings.ToLower(env.Get(SecureSTSPreload, "off")) == "on" -} - -// GetSecureTLSTemporaryRedirect If TLSTemporaryRedirect is true, the a 302 will be used while redirecting. Default is false (301). -func GetSecureTLSTemporaryRedirect() bool { - return strings.ToLower(env.Get(SecureTLSTemporaryRedirect, "off")) == "on" -} - -// GetSecureForceSTSHeader STS header is only included when the connection is HTTPS. -func GetSecureForceSTSHeader() bool { - return strings.ToLower(env.Get(SecureForceSTSHeader, "off")) == "on" -} - -// GetSecurePublicKey PublicKey implements HPKP to prevent MITM attacks with forged certificates. Default is "". -func GetSecurePublicKey() string { - return env.Get(SecurePublicKey, "") -} - -// GetSecureReferrerPolicy ReferrerPolicy allows the Referrer-Policy header with the value to be set with a custom value. Default is "". -func GetSecureReferrerPolicy() string { - return env.Get(SecureReferrerPolicy, "") -} - -// GetSecureFeaturePolicy FeaturePolicy allows the Feature-Policy header with the value to be set with a custom value. Default is "". -func GetSecureFeaturePolicy() string { - return env.Get(SecureFeaturePolicy, "") -} - -// GetSecureExpectCTHeader header -func GetSecureExpectCTHeader() string { - return env.Get(SecureExpectCTHeader, "") -} diff --git a/api/config_test.go b/api/config_test.go deleted file mode 100644 index c8648c05815..00000000000 --- a/api/config_test.go +++ /dev/null @@ -1,101 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2022 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "os" - "testing" - - xoauth2 "golang.org/x/oauth2" -) - -func Test_getK8sSAToken(t *testing.T) { - tests := []struct { - name string - want string - envs map[string]string - }{ - { - name: "Missing file, empty", - want: "", - envs: nil, - }, - { - name: "Missing file, return env", - want: "x", - envs: map[string]string{ - OperatorSAToken: "x", - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - if tt.envs != nil { - for k, v := range tt.envs { - os.Setenv(k, v) - } - } - var oauth2Token *xoauth2.Token - if got := getK8sSAToken(oauth2Token); got != tt.want { - t.Errorf("getK8sSAToken() = %v, want %v", got, tt.want) - } - if tt.envs != nil { - for k := range tt.envs { - os.Unsetenv(k) - } - } - }) - } -} - -func Test_getMarketplace(t *testing.T) { - tests := []struct { - name string - want string - envs map[string]string - }{ - { - name: "Nothing set", - want: "", - envs: nil, - }, - { - name: "Value set", - want: "x", - envs: map[string]string{ - Marketplace: "x", - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - if tt.envs != nil { - for k, v := range tt.envs { - os.Setenv(k, v) - } - } - if got := getMarketplace(); got != tt.want { - t.Errorf("getMarketplace() = %v, want %v", got, tt.want) - } - if tt.envs != nil { - for k := range tt.envs { - os.Unsetenv(k) - } - } - }) - } -} diff --git a/api/configuration-handlers.go b/api/configuration-handlers.go deleted file mode 100644 index 09ec42c516b..00000000000 --- a/api/configuration-handlers.go +++ /dev/null @@ -1,186 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "errors" - "fmt" - "sort" - - "github.com/go-openapi/runtime/middleware" - "github.com/minio/operator/api/operations" - "github.com/minio/operator/api/operations/operator_api" - "github.com/minio/operator/models" - miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -func registerConfigurationHandlers(api *operations.OperatorAPI) { - // Tenant Configuration details - // Tenant Security details - api.OperatorAPITenantConfigurationHandler = operator_api.TenantConfigurationHandlerFunc(func(params operator_api.TenantConfigurationParams, session *models.Principal) middleware.Responder { - resp, err := getTenantConfigurationResponse(session, params) - if err != nil { - return operator_api.NewTenantConfigurationDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewTenantConfigurationOK().WithPayload(resp) - }) - // Update Tenant Configuration - api.OperatorAPIUpdateTenantConfigurationHandler = operator_api.UpdateTenantConfigurationHandlerFunc(func(params operator_api.UpdateTenantConfigurationParams, session *models.Principal) middleware.Responder { - err := getUpdateTenantConfigurationResponse(session, params) - if err != nil { - return operator_api.NewUpdateTenantConfigurationDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewUpdateTenantConfigurationNoContent() - }) -} - -func getTenantConfigurationResponse(session *models.Principal, params operator_api.TenantConfigurationParams) (*models.TenantConfigurationResponse, *models.Error) { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - opClientClientSet, err := GetOperatorClient(session.STSSessionToken) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - opClient := &operatorClient{ - client: opClientClientSet, - } - // get Kubernetes Client - clientSet, err := K8sClient(session.STSSessionToken) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - k8sClient := &k8sClient{ - client: clientSet, - } - minTenant, err := getTenant(ctx, opClient, params.Namespace, params.Tenant) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - return parseTenantConfiguration(ctx, k8sClient, minTenant) -} - -func parseTenantConfiguration(ctx context.Context, k8sClient K8sClientI, minTenant *miniov2.Tenant) (*models.TenantConfigurationResponse, *models.Error) { - tenantConfiguration, err := GetTenantConfiguration(ctx, k8sClient, minTenant) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - delete(tenantConfiguration, "accesskey") - delete(tenantConfiguration, "secretkey") - var envVars []*models.EnvironmentVariable - for key, value := range tenantConfiguration { - envVars = append(envVars, &models.EnvironmentVariable{ - Key: key, - Value: value, - }) - } - sort.Slice(envVars, func(i, j int) bool { - return envVars[i].Key < envVars[j].Key - }) - configurationInfo := &models.TenantConfigurationResponse{EnvironmentVariables: envVars} - if minTenant.Spec.Features != nil && minTenant.Spec.Features.EnableSFTP != nil { - configurationInfo.SftpExposed = *minTenant.Spec.Features.EnableSFTP - } - return configurationInfo, nil -} - -func getUpdateTenantConfigurationResponse(session *models.Principal, params operator_api.UpdateTenantConfigurationParams) *models.Error { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - opClientClientSet, err := GetOperatorClient(session.STSSessionToken) - if err != nil { - return ErrorWithContext(ctx, err) - } - // get Kubernetes Client - clientSet, err := K8sClient(session.STSSessionToken) - if err != nil { - return ErrorWithContext(ctx, err) - } - k8sClient := k8sClient{ - client: clientSet, - } - opClient := &operatorClient{ - client: opClientClientSet, - } - if err := updateTenantConfigurationFile(ctx, opClient, &k8sClient, params.Namespace, params); err != nil { - return ErrorWithContext(ctx, err, errors.New("unable to update tenant configuration")) - } - return nil -} - -func updateTenantConfigurationFile(ctx context.Context, operatorClient OperatorClientI, client K8sClientI, namespace string, params operator_api.UpdateTenantConfigurationParams) error { - tenant, err := operatorClient.TenantGet(ctx, namespace, params.Tenant, metav1.GetOptions{}) - if err != nil { - return err - } - tenantConfiguration, err := GetTenantConfiguration(ctx, client, tenant) - if err != nil { - return err - } - - delete(tenantConfiguration, "accesskey") - delete(tenantConfiguration, "secretkey") - - requestBody := params.Body - if requestBody == nil { - return errors.New("missing request body") - } - // Patch tenant configuration file with the new values provided by the user - for _, envVar := range requestBody.EnvironmentVariables { - if envVar.Key == "" { - continue - } - tenantConfiguration[envVar.Key] = envVar.Value - } - // Remove existing values from configuration file - for _, keyToBeDeleted := range requestBody.KeysToBeDeleted { - delete(tenantConfiguration, keyToBeDeleted) - } - - if !tenant.HasConfigurationSecret() { - return errors.New("tenant configuration file not found") - } - tenantConfigurationSecret, err := client.getSecret(ctx, tenant.Namespace, tenant.Spec.Configuration.Name, metav1.GetOptions{}) - if err != nil { - return err - } - tenantConfigurationSecret.Data["config.env"] = []byte(GenerateTenantConfigurationFile(tenantConfiguration)) - _, err = client.updateSecret(ctx, namespace, tenantConfigurationSecret, metav1.UpdateOptions{}) - if err != nil { - return err - } - - // Update SFTP flag - if tenant.Spec.Features != nil { - tenant.Spec.Features.EnableSFTP = &requestBody.SftpExposed - _, err = operatorClient.TenantUpdate(ctx, tenant, metav1.UpdateOptions{}) - if err != nil { - return err - } - } - - // Restart all MinIO pods at the same time for they to take the new configuration - err = client.deletePodCollection(ctx, namespace, metav1.DeleteOptions{}, metav1.ListOptions{ - LabelSelector: fmt.Sprintf("%s=%s", miniov2.TenantLabel, tenant.Name), - }) - if err != nil { - return err - } - - return nil -} diff --git a/api/configure_operator.go b/api/configure_operator.go deleted file mode 100644 index 3170c03d499..00000000000 --- a/api/configure_operator.go +++ /dev/null @@ -1,416 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package api - -import ( - "bytes" - "context" - "crypto/tls" - "fmt" - "io" - "io/fs" - "net/http" - "path" - "path/filepath" - "regexp" - "strings" - "sync" - "time" - - "github.com/klauspost/compress/gzhttp" - - "github.com/minio/operator/pkg/logger" - "github.com/minio/operator/pkg/utils" - webApp "github.com/minio/operator/web-app" - "github.com/minio/pkg/env" - "github.com/minio/pkg/mimedb" - - "github.com/unrolled/secure" - - "github.com/minio/operator/pkg/auth" - - "github.com/go-openapi/swag" - - "github.com/go-openapi/errors" - - "github.com/minio/operator/api/operations" - "github.com/minio/operator/models" -) - -//go:generate swagger generate server --target ../ --name Operator --spec ../swagger.yml --server-package api --principal models.Principal --exclude-main - -var additionalServerFlags = struct { - CertsDir string `long:"certs-dir" description:"path to certs directory" env:"CONSOLE_CERTS_DIR"` -}{} - -func configureFlags(api *operations.OperatorAPI) { - api.CommandLineOptionsGroups = []swag.CommandLineOptionsGroup{ - { - ShortDescription: "additional server flags", - Options: &additionalServerFlags, - }, - } -} - -func configureAPI(api *operations.OperatorAPI) http.Handler { - // Applies when the "x-token" header is set - api.KeyAuth = func(token string, scopes []string) (*models.Principal, error) { - // we are validating the session token by decrypting the claims inside, if the operation succeed that means the jwt - // was generated and signed by us in the first place - claims, err := auth.ParseClaimsFromToken(token) - if err != nil { - api.Logger("Unable to validate the session token %s: %v", token, err) - return nil, errors.New(401, "incorrect api key auth") - } - return &models.Principal{ - STSAccessKeyID: claims.STSAccessKeyID, - STSSecretAccessKey: claims.STSSecretAccessKey, - STSSessionToken: claims.STSSessionToken, - AccountAccessKey: claims.AccountAccessKey, - }, nil - } - // Register logout handlers - registerLogoutHandlers(api) - // Register login handlers - registerLoginHandlers(api) - registerSessionHandlers(api) - registerVersionHandlers(api) - - // HTTP Handlers for API - registerTenantHandlers(api) - registerPoolHandlers(api) - registerPodHandlers(api) - registerConfigurationHandlers(api) - registerCertificateHandlers(api) - registerResourceQuotaHandlers(api) - registerNodesHandlers(api) - registerParityHandlers(api) - registerVolumesHandlers(api) - registerNamespaceHandlers(api) - registerMarketplaceHandlers(api) - registerOperatorSubnetHandlers(api) - registerYAMLHandlers(api) - registerEventHandlers(api) - registerEncryptionHandlers(api) - registerIDPHandlers(api) - registerUsersHandlers(api) - registerDomainHandlers(api) - - api.PreServerShutdown = func() {} - - api.ServerShutdown = func() {} - - return setupGlobalMiddleware(api.Serve(setupMiddlewares)) -} - -// The TLS configuration before HTTPS server starts. -func configureTLS(tlsConfig *tls.Config) { - tlsConfig.RootCAs = GlobalRootCAs - tlsConfig.GetCertificate = GlobalTLSCertsManager.GetCertificate -} - -// As soon as server is initialized but not run yet, this function will be called. -// If you need to modify a config, store server instance to stop it individually later, this is the place. -// This function can be called multiple times, depending on the number of serving schemes. -// scheme value will be set accordingly: "http", "https" or "unix". -func configureServer(s *http.Server, scheme, addr string) { -} - -// The middleware configuration is for the handler executors. These do not apply to the swagger.json document. -// The middleware executes after routing but before authentication, binding and validation. -func setupMiddlewares(handler http.Handler) http.Handler { - return handler -} - -// proxyMiddleware adds the proxy capability -func proxyMiddleware(next http.Handler) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - if strings.HasPrefix(r.URL.Path, "/api/proxy") || strings.HasPrefix(r.URL.Path, "/api/hop") { - serveProxy(w, r) - } else { - next.ServeHTTP(w, r) - } - }) -} - -// The middleware configuration happens before anything, this middleware also applies to serving the swagger.json document. -// So this is a good place to plug in a panic handling middleware, logging and metrics. -func setupGlobalMiddleware(handler http.Handler) http.Handler { - gnext := gzhttp.GzipHandler(handler) - // if audit-log is enabled console will log all incoming request - next := AuditLogMiddleware(gnext) - // proxy requests - next = proxyMiddleware(next) - // serve static files - next = FileServerMiddleware(next) - // add information to request context - next = ContextMiddleware(next) - // handle cookie or authorization header for session - next = AuthenticationMiddleware(next) - // Secure middleware, this middleware wrap all the previous handlers and add - // HTTP security headers - secureOptions := secure.Options{ - AllowedHosts: GetSecureAllowedHosts(), - AllowedHostsAreRegex: GetSecureAllowedHostsAreRegex(), - HostsProxyHeaders: GetSecureHostsProxyHeaders(), - SSLRedirect: GetTLSRedirect() == "on" && len(GlobalPublicCerts) > 0, - SSLHost: GetSecureTLSHost(), - STSSeconds: GetSecureSTSSeconds(), - STSIncludeSubdomains: GetSecureSTSIncludeSubdomains(), - STSPreload: GetSecureSTSPreload(), - SSLTemporaryRedirect: GetSecureTLSTemporaryRedirect(), - SSLHostFunc: nil, - ForceSTSHeader: GetSecureForceSTSHeader(), - FrameDeny: GetSecureFrameDeny(), - ContentTypeNosniff: GetSecureContentTypeNonSniff(), - BrowserXssFilter: GetSecureBrowserXSSFilter(), - ContentSecurityPolicy: GetSecureContentSecurityPolicy(), - ContentSecurityPolicyReportOnly: GetSecureContentSecurityPolicyReportOnly(), - ReferrerPolicy: GetSecureReferrerPolicy(), - FeaturePolicy: GetSecureFeaturePolicy(), - IsDevelopment: false, - } - secureMiddleware := secure.New(secureOptions) - next = secureMiddleware.Handler(next) - return next -} - -// ContextMiddleware attachs request info to context -func ContextMiddleware(next http.Handler) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - requestID, err := utils.NewUUID() - if err != nil && err != auth.ErrNoAuthToken { - http.Error(w, err.Error(), http.StatusInternalServerError) - return - } - ctx := context.WithValue(r.Context(), utils.ContextRequestID, requestID) - ctx = context.WithValue(ctx, utils.ContextRequestUserAgent, r.UserAgent()) - ctx = context.WithValue(ctx, utils.ContextRequestHost, r.Host) - ctx = context.WithValue(ctx, utils.ContextRequestRemoteAddr, r.RemoteAddr) - next.ServeHTTP(w, r.WithContext(ctx)) - }) -} - -// AuditLogMiddleware notifies audit webhook regarding the request -func AuditLogMiddleware(next http.Handler) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - rw := logger.NewResponseWriter(w) - next.ServeHTTP(rw, r) - if strings.HasPrefix(r.URL.Path, "/ws") || strings.HasPrefix(r.URL.Path, "/api") { - logger.AuditLog(r.Context(), rw, r, map[string]interface{}{}, "Authorization", "Cookie", "Set-Cookie") - } - }) -} - -// AuthenticationMiddleware handles aut -func AuthenticationMiddleware(next http.Handler) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - token, err := auth.GetTokenFromRequest(r) - if err != nil && err != auth.ErrNoAuthToken { - http.Error(w, err.Error(), http.StatusUnauthorized) - return - } - sessionToken, _ := auth.DecryptToken(token) - // All handlers handle appropriately to return errors - // based on their swagger rules, we do not need to - // additionally return error here, let the next ServeHTTPs - // handle it appropriately. - if len(sessionToken) > 0 { - r.Header.Add("Authorization", fmt.Sprintf("Bearer %s", string(sessionToken))) - } else { - r.Header.Add("Authorization", fmt.Sprintf("Bearer %s", "Anonymous")) - } - ctx := r.Context() - claims, _ := auth.ParseClaimsFromToken(string(sessionToken)) - if claims != nil { - // save user session id context - ctx = context.WithValue(r.Context(), utils.ContextRequestUserID, claims.STSSessionToken) - } - next.ServeHTTP(w, r.WithContext(ctx)) - }) -} - -type notFoundRedirectRespWr struct { - http.ResponseWriter // We embed http.ResponseWriter - status int -} - -func (w *notFoundRedirectRespWr) WriteHeader(status int) { - w.status = status // Store the status for our own use - if status != http.StatusNotFound { - w.ResponseWriter.WriteHeader(status) - } -} - -func (w *notFoundRedirectRespWr) Write(p []byte) (int, error) { - if w.status != http.StatusNotFound { - return w.ResponseWriter.Write(p) - } - return len(p), nil // Lie that we successfully wrote it -} - -const ( - // SubPath path for hosting ui - SubPath = "OPERATOR_SUBPATH" -) - -var ( - subPath = "/" - subPathOnce sync.Once -) - -// GetSubPath is the sub-path where Operator UI will run -func GetSubPath() string { - subPathOnce.Do(func() { - subPath = parseSubPath(env.Get(SubPath, "")) - }) - return subPath -} - -func parseSubPath(v string) string { - v = strings.TrimSpace(v) - if v == "" { - return SlashSeparator - } - // Replace all unnecessary `\` to `/` - // also add pro-actively at the end. - subPath = path.Clean(filepath.ToSlash(v)) - if !strings.HasPrefix(subPath, SlashSeparator) { - subPath = SlashSeparator + subPath - } - if !strings.HasSuffix(subPath, SlashSeparator) { - subPath += SlashSeparator - } - return subPath -} - -func replaceBaseInIndex(indexPageBytes []byte, basePath string) []byte { - if basePath != "" { - validBasePath := regexp.MustCompile(`^[0-9a-zA-Z\/-]+$`) - if !validBasePath.MatchString(basePath) { - return indexPageBytes - } - indexPageStr := string(indexPageBytes) - newBase := fmt.Sprintf("", basePath) - indexPageStr = strings.Replace(indexPageStr, "", newBase, 1) - indexPageBytes = []byte(indexPageStr) - - } - return indexPageBytes -} - -// handleSPA handles the serving of the React Single Page Application -func handleSPA(w http.ResponseWriter, r *http.Request) { - basePath := GetSubPath() - // For SPA mode we will replace root base with a sub path if configured unless we received cp=y and cpb=/NEW/BASE - if v := r.URL.Query().Get("cp"); v == "y" { - if base := r.URL.Query().Get("cpb"); base != "" { - // make sure the subpath has a trailing slash - if !strings.HasSuffix(base, "/") { - base = fmt.Sprintf("%s/", base) - } - basePath = base - } - } - - indexPage, err := webApp.GetStaticAssets().Open("build/index.html") - if err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) - return - } - - // if these three parameters are present we are being asked to issue a session with these values - - indexPageBytes, err := io.ReadAll(indexPage) - if err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) - return - } - - // if we have a seeded basePath. This should override CONSOLE_SUBPATH every time, thus the `if else` - if basePath != GetSubPath() { - indexPageBytes = replaceBaseInIndex(indexPageBytes, basePath) - // if we have a custom subpath replace it in - } else if GetSubPath() != "/" { - indexPageBytes = replaceBaseInIndex(indexPageBytes, GetSubPath()) - } - indexPageBytes = replaceLicense(indexPageBytes) - - mimeType := mimedb.TypeByExtension(filepath.Ext(r.URL.Path)) - - if mimeType == "application/octet-stream" { - mimeType = "text/html" - } - - w.Header().Set("Content-Type", mimeType) - http.ServeContent(w, r, "index.html", time.Now(), bytes.NewReader(indexPageBytes)) -} - -// wrapHandlerSinglePageApplication handles a http.FileServer returning a 404 and overrides it with index.html -func wrapHandlerSinglePageApplication(h http.Handler) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - if match, _ := regexp.MatchString(fmt.Sprintf("^%s/?$", GetSubPath()), r.URL.Path); match { - handleSPA(w, r) - return - } - - w.Header().Set("Content-Type", mimedb.TypeByExtension(filepath.Ext(r.URL.Path))) - nfw := ¬FoundRedirectRespWr{ResponseWriter: w} - h.ServeHTTP(nfw, r) - if nfw.status == http.StatusNotFound { - handleSPA(w, r) - } - } -} - -// FileServerMiddleware serves files from the static folder -func FileServerMiddleware(next http.Handler) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.Header().Set("Server", globalAppName) // do not add version information - basePath := GetSubPath() - switch { - case strings.HasPrefix(r.URL.Path, basePath+"api"): - next.ServeHTTP(w, r) - default: - buildFs, err := fs.Sub(webApp.GetStaticAssets(), "build") - if err != nil { - panic(err) - } - wrapHandlerSinglePageApplication(requestBounce(http.StripPrefix(basePath, http.FileServer(http.FS(buildFs))))).ServeHTTP(w, r) - } - }) -} - -func requestBounce(handler http.Handler) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - if strings.HasSuffix(r.URL.Path, "/") { - http.NotFound(w, r) - return - } - - handler.ServeHTTP(w, r) - }) -} - -func replaceLicense(indexPageBytes []byte) []byte { - indexPageStr := string(indexPageBytes) - newPlan := fmt.Sprintf("", InstanceLicensePlan.String()) - indexPageStr = strings.Replace(indexPageStr, "", newPlan, 1) - indexPageBytes = []byte(indexPageStr) - return indexPageBytes -} diff --git a/api/consts.go b/api/consts.go deleted file mode 100644 index ba25fe015cc..00000000000 --- a/api/consts.go +++ /dev/null @@ -1,65 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -// list of all console environment constants -const ( - OperatorSAToken = "OPERATOR_SA_TOKEN" - Marketplace = "OPERATOR_MARKETPLACE" - globalAppName = "MinIO Operator" - - // Constants for prometheus annotations - prometheusPath = "prometheus.io/path" - prometheusScrape = "prometheus.io/scrape" - - // Image versions - - KESImageVersion = "minio/kes:2024-04-12T13-50-00Z" - - // Constants for common configuration - MinioImage = "OPERATOR_MINIO_IMAGE" - OperatorUIHostname = "OPERATOR_HOSTNAME" - OperatorUIPort = "OPERATOR_PORT" - OperatorUITLSPort = "OPERATOR_TLS_PORT" - - // K8sAPIServer address of the K8s API - K8sAPIServer = "OPERATOR_K8S_API_SERVER" - // K8SAPIServerTLSRootCA location of the root CA - K8SAPIServerTLSRootCA = "OPERATOR_K8S_API_SERVER_TLS_ROOT_CA" - - // Constants for Secure middleware - SecureAllowedHosts = "OPERATOR_SECURE_ALLOWED_HOSTS" - SecureAllowedHostsAreRegex = "OPERATOR_SECURE_ALLOWED_HOSTS_ARE_REGEX" - SecureFrameDeny = "OPERATOR_SECURE_FRAME_DENY" - SecureContentTypeNoSniff = "OPERATOR_SECURE_CONTENT_TYPE_NO_SNIFF" - SecureBrowserXSSFilter = "OPERATOR_SECURE_BROWSER_XSS_FILTER" - SecureContentSecurityPolicy = "OPERATOR_SECURE_CONTENT_SECURITY_POLICY" - SecureContentSecurityPolicyReportOnly = "OPERATOR_SECURE_CONTENT_SECURITY_POLICY_REPORT_ONLY" - SecureHostsProxyHeaders = "OPERATOR_SECURE_HOSTS_PROXY_HEADERS" - SecureSTSSeconds = "OPERATOR_SECURE_STS_SECONDS" - SecureSTSIncludeSubdomains = "OPERATOR_SECURE_STS_INCLUDE_SUB_DOMAINS" - SecureSTSPreload = "OPERATOR_SECURE_STS_PRELOAD" - SecureTLSRedirect = "OPERATOR_SECURE_TLS_REDIRECT" - SecureTLSHost = "OPERATOR_SECURE_TLS_HOST" - SecureTLSTemporaryRedirect = "OPERATOR_SECURE_TLS_TEMPORARY_REDIRECT" - SecureForceSTSHeader = "OPERATOR_SECURE_FORCE_STS_HEADER" - SecurePublicKey = "OPERATOR_SECURE_PUBLIC_KEY" - SecureReferrerPolicy = "OPERATOR_SECURE_REFERRER_POLICY" - SecureFeaturePolicy = "OPERATOR_SECURE_FEATURE_POLICY" - SecureExpectCTHeader = "OPERATOR_SECURE_EXPECT_CT_HEADER" - SlashSeparator = "/" -) diff --git a/api/cookies.go b/api/cookies.go deleted file mode 100644 index 1954f31e99f..00000000000 --- a/api/cookies.go +++ /dev/null @@ -1,88 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "net/http" - "time" - - xjwt "github.com/minio/operator/pkg/auth/token" -) - -// NewSessionCookieForConsole creates a cookie for a token -func NewSessionCookieForConsole(token string) http.Cookie { - sessionDuration := xjwt.GetConsoleSTSDuration() - return http.Cookie{ - Path: "/api/v1/", - Name: "token", - Value: token, - MaxAge: int(sessionDuration.Seconds()), // default 1 hr - Expires: time.Now().Add(sessionDuration), - HttpOnly: true, - // if len(GlobalPublicCerts) > 0 is true, that means Console is running with TLS enable and the browser - // should not leak any cookie if we access the site using HTTP - Secure: len(GlobalPublicCerts) > 0, - // read more: https://web.dev/samesite-cookies-explained/ - SameSite: http.SameSiteLaxMode, - } -} - -// NewIDPSessionCookie creates a cookie for a refresh token -func NewIDPSessionCookie(token string) http.Cookie { - return http.Cookie{ - Path: "/api/v1/", - Name: "idp-refresh-token", - Value: token, - HttpOnly: true, - Secure: len(GlobalPublicCerts) > 0, - SameSite: http.SameSiteLaxMode, - } -} - -// ExpireSessionCookie expires a cookie -func ExpireSessionCookie() http.Cookie { - return http.Cookie{ - Path: "/api/v1/", - Name: "token", - Value: "", - MaxAge: -1, - Expires: time.Unix(0, 0), - HttpOnly: true, - // if len(GlobalPublicCerts) > 0 is true, that means Console is running with TLS enable and the browser - // should not leak any cookie if we access the site using HTTP - Secure: len(GlobalPublicCerts) > 0, - // read more: https://web.dev/samesite-cookies-explained/ - SameSite: http.SameSiteLaxMode, - } -} - -// ExpireIDPSessionCookie expires a cookie for idp -func ExpireIDPSessionCookie() http.Cookie { - return http.Cookie{ - Path: "/api/v1/", - Name: "idp-refresh-token", - Value: "", - MaxAge: -1, - Expires: time.Unix(0, 0), - HttpOnly: true, - // if len(GlobalPublicCerts) > 0 is true, that means Console is running with TLS enable and the browser - // should not leak any cookie if we access the site using HTTP - Secure: len(GlobalPublicCerts) > 0, - // read more: https://web.dev/samesite-cookies-explained/ - SameSite: http.SameSiteLaxMode, - } -} diff --git a/api/doc.go b/api/doc.go deleted file mode 100644 index 6516aa325f7..00000000000 --- a/api/doc.go +++ /dev/null @@ -1,35 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -// Package api MinIO Operator -// -// Schemes: -// http -// ws -// Host: localhost -// BasePath: /api/v1 -// Version: 0.1.0 -// -// Consumes: -// - application/json -// -// Produces: -// - application/json -// -// swagger:meta -package api diff --git a/api/domain-handlers.go b/api/domain-handlers.go deleted file mode 100644 index 6d4b6412168..00000000000 --- a/api/domain-handlers.go +++ /dev/null @@ -1,96 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - - "github.com/go-openapi/runtime/middleware" - "github.com/minio/operator/api/operations" - "github.com/minio/operator/api/operations/operator_api" - "github.com/minio/operator/models" - miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -func registerDomainHandlers(api *operations.OperatorAPI) { - // Update Tenant Domains - api.OperatorAPIUpdateTenantDomainsHandler = operator_api.UpdateTenantDomainsHandlerFunc(func(params operator_api.UpdateTenantDomainsParams, principal *models.Principal) middleware.Responder { - err := getUpdateDomainsResponse(principal, params) - if err != nil { - return operator_api.NewUpdateTenantDomainsDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewUpdateTenantDomainsNoContent() - }) -} - -func getUpdateDomainsResponse(session *models.Principal, params operator_api.UpdateTenantDomainsParams) *models.Error { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - operatorCli, err := GetOperatorClient(session.STSSessionToken) - if err != nil { - return ErrorWithContext(ctx, err) - } - - opClient := &operatorClient{ - client: operatorCli, - } - - err = updateTenantDomains(ctx, opClient, params.Namespace, params.Tenant, params.Body.Domains) - - if err != nil { - return ErrorWithContext(ctx, err) - } - - return nil -} - -func updateTenantDomains(ctx context.Context, operatorClient OperatorClientI, namespace string, tenantName string, domainConfig *models.DomainsConfiguration) error { - minTenant, err := getTenant(ctx, operatorClient, namespace, tenantName) - if err != nil { - return err - } - - var features miniov2.Features - var domains miniov2.TenantDomains - - // We include current value for BucketDNS. Domains will be overwritten as we are passing all the values that must be saved. - if minTenant.Spec.Features != nil { - features = miniov2.Features{ - BucketDNS: minTenant.Spec.Features.BucketDNS, - } - } - - if domainConfig != nil { - // tenant domains - if domainConfig.Console != "" { - domains.Console = domainConfig.Console - } - - if domainConfig.Minio != nil { - domains.Minio = domainConfig.Minio - } - - features.Domains = &domains - } - - minTenant.Spec.Features = &features - - _, err = operatorClient.TenantUpdate(ctx, minTenant, metav1.UpdateOptions{}) - - return err -} diff --git a/api/domain-handlers_test.go b/api/domain-handlers_test.go deleted file mode 100644 index 2a0a2d4279d..00000000000 --- a/api/domain-handlers_test.go +++ /dev/null @@ -1,43 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "net/http" - - "github.com/minio/operator/api/operations" - "github.com/minio/operator/api/operations/operator_api" - "github.com/minio/operator/models" -) - -func (suite *TenantTestSuite) TestUpdateTenantDomainsHandlerWithError() { - params, api := suite.initUpdateTenantDomainsRequest() - response := api.OperatorAPIUpdateTenantDomainsHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.UpdateTenantDomainsDefault) - suite.assert.True(ok) -} - -func (suite *TenantTestSuite) initUpdateTenantDomainsRequest() (params operator_api.UpdateTenantDomainsParams, api operations.OperatorAPI) { - registerDomainHandlers(&api) - params.HTTPRequest = &http.Request{} - params.Namespace = "mock-namespace-domain" - params.Tenant = "mock-tenant-domain" - params.Body = &models.UpdateDomainsRequest{ - Domains: &models.DomainsConfiguration{}, - } - return params, api -} diff --git a/api/embedded_spec.go b/api/embedded_spec.go deleted file mode 100644 index 0ff2a2f3f59..00000000000 --- a/api/embedded_spec.go +++ /dev/null @@ -1,10161 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "encoding/json" -) - -var ( - // SwaggerJSON embedded version of the swagger document used at generation time - SwaggerJSON json.RawMessage - // FlatSwaggerJSON embedded flattened version of the swagger document used at generation time - FlatSwaggerJSON json.RawMessage -) - -func init() { - SwaggerJSON = json.RawMessage([]byte(`{ - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "schemes": [ - "http", - "ws" - ], - "swagger": "2.0", - "info": { - "title": "MinIO Operator", - "version": "0.1.0" - }, - "basePath": "/api/v1", - "paths": { - "/check-version": { - "get": { - "security": [], - "tags": [ - "UserAPI" - ], - "summary": "Checks the current Operator version against the latest", - "operationId": "CheckMinIOVersion”", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/checkOperatorVersionResponse" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/cluster/allocatable-resources": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Get allocatable cpu and memory for given number of nodes", - "operationId": "GetAllocatableResources", - "parameters": [ - { - "minimum": 1, - "type": "integer", - "format": "int32", - "name": "num_nodes", - "in": "query", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/allocatableResourcesResponse" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/cluster/max-allocatable-memory": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Get maximum allocatable memory for given number of nodes", - "operationId": "GetMaxAllocatableMem", - "parameters": [ - { - "minimum": 1, - "type": "integer", - "format": "int32", - "name": "num_nodes", - "in": "query", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/maxAllocatableMemResponse" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/get-parity/{nodes}/{disksPerNode}": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Gets parity by sending number of nodes \u0026 number of disks", - "operationId": "GetParity", - "parameters": [ - { - "minimum": 2, - "type": "integer", - "name": "nodes", - "in": "path", - "required": true - }, - { - "minimum": 1, - "type": "integer", - "name": "disksPerNode", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/parityResponse" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/list-pvcs": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "List all PVCs from namespaces that the user has access to", - "operationId": "ListPVCs", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/listPVCsResponse" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/login": { - "get": { - "security": [], - "tags": [ - "Auth" - ], - "summary": "Returns login strategy, form or sso.", - "operationId": "LoginDetail", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/loginDetails" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/login/oauth2/auth": { - "post": { - "security": [], - "tags": [ - "Auth" - ], - "summary": "Identity Provider oauth2 callback endpoint.", - "operationId": "LoginOauth2Auth", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/loginOauth2AuthRequest" - } - } - ], - "responses": { - "204": { - "description": "A successful login." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/login/operator": { - "post": { - "security": [], - "tags": [ - "Auth" - ], - "summary": "Login to Operator Console.", - "operationId": "LoginOperator", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/loginOperatorRequest" - } - } - ], - "responses": { - "204": { - "description": "A successful login." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/logout": { - "post": { - "tags": [ - "Auth" - ], - "summary": "Logout from Operator.", - "operationId": "Logout", - "responses": { - "200": { - "description": "A successful response." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/mp-integration": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Returns email registered for marketplace integration", - "operationId": "GetMPIntegration", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "type": "object", - "properties": { - "isEmailSet": { - "type": "boolean" - } - } - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - }, - "post": { - "tags": [ - "OperatorAPI" - ], - "summary": "Set email to register for marketplace integration", - "operationId": "PostMPIntegration", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/mpIntegration" - } - } - ], - "responses": { - "201": { - "description": "A successful response." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespace": { - "post": { - "tags": [ - "OperatorAPI" - ], - "summary": "Creates a new Namespace with given information", - "operationId": "CreateNamespace", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/namespace" - } - } - ], - "responses": { - "201": { - "description": "A successful response." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/resourcequotas/{resource-quota-name}": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Get Resource Quota", - "operationId": "GetResourceQuota", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "resource-quota-name", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/resourceQuota" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "List Tenants by Namespace", - "operationId": "ListTenants", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "sort_by", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "name": "offset", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "name": "limit", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/listTenantsResponse" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Tenant Details", - "operationId": "TenantDetails", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/tenant" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - }, - "put": { - "tags": [ - "OperatorAPI" - ], - "summary": "Update Tenant", - "operationId": "UpdateTenant", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/updateTenantRequest" - } - } - ], - "responses": { - "201": { - "description": "A successful response." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - }, - "delete": { - "tags": [ - "OperatorAPI" - ], - "summary": "Delete tenant and underlying pvcs", - "operationId": "DeleteTenant", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/deleteTenantRequest" - } - } - ], - "responses": { - "204": { - "description": "A successful response." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/certificates": { - "put": { - "tags": [ - "OperatorAPI" - ], - "summary": "Tenant Update Certificates", - "operationId": "TenantUpdateCertificate", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/tlsConfiguration" - } - } - ], - "responses": { - "201": { - "description": "A successful response." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/configuration": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Tenant Configuration", - "operationId": "TenantConfiguration", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/tenantConfigurationResponse" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - }, - "patch": { - "tags": [ - "OperatorAPI" - ], - "summary": "Update Tenant Configuration", - "operationId": "UpdateTenantConfiguration", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/updateTenantConfigurationRequest" - } - } - ], - "responses": { - "204": { - "description": "A successful response." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/csr": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "List Tenant Certificate Signing Request", - "operationId": "ListTenantCertificateSigningRequest", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/csrElements" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/domains": { - "put": { - "tags": [ - "OperatorAPI" - ], - "summary": "Update Domains for a Tenant", - "operationId": "UpdateTenantDomains", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/updateDomainsRequest" - } - } - ], - "responses": { - "204": { - "description": "A successful response." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/encryption": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Tenant Encryption Info", - "operationId": "TenantEncryptionInfo", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/encryptionConfigurationResponse" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - }, - "put": { - "tags": [ - "OperatorAPI" - ], - "summary": "Tenant Update Encryption", - "operationId": "TenantUpdateEncryption", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/encryptionConfiguration" - } - } - ], - "responses": { - "201": { - "description": "A successful response." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - }, - "delete": { - "tags": [ - "OperatorAPI" - ], - "summary": "Tenant Delete Encryption", - "operationId": "TenantDeleteEncryption", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - } - ], - "responses": { - "204": { - "description": "A successful response." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/events": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Get Events for given Tenant", - "operationId": "GetTenantEvents", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/eventListWrapper" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/identity-provider": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Tenant Identity Provider", - "operationId": "TenantIdentityProvider", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/idpConfiguration" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - }, - "post": { - "tags": [ - "OperatorAPI" - ], - "summary": "Update Tenant Identity Provider", - "operationId": "UpdateTenantIdentityProvider", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/idpConfiguration" - } - } - ], - "responses": { - "204": { - "description": "A successful response." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/log-report": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Get Tenant Log Report", - "operationId": "GetTenantLogReport", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/tenantLogReport" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/pods": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Get Pods For The Tenant", - "operationId": "GetTenantPods", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/tenantPod" - } - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/pods/{podName}": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Get Logs for Pod", - "operationId": "GetPodLogs", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "podName", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "type": "string" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - }, - "delete": { - "tags": [ - "OperatorAPI" - ], - "summary": "Delete pod", - "operationId": "DeletePod", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "podName", - "in": "path", - "required": true - } - ], - "responses": { - "204": { - "description": "A successful response." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/pods/{podName}/describe": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Describe Pod", - "operationId": "DescribePod", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "podName", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/describePodWrapper" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/pods/{podName}/events": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Get Events for Pod", - "operationId": "GetPodEvents", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "podName", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/eventListWrapper" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/pools": { - "put": { - "tags": [ - "OperatorAPI" - ], - "summary": "Tenant Update Pools", - "operationId": "TenantUpdatePools", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/poolUpdateRequest" - } - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/tenant" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - }, - "post": { - "tags": [ - "OperatorAPI" - ], - "summary": "Tenant Add Pool", - "operationId": "TenantAddPool", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/pool" - } - } - ], - "responses": { - "201": { - "description": "A successful response." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/pvc/{PVCName}": { - "delete": { - "tags": [ - "OperatorAPI" - ], - "summary": "Delete PVC", - "operationId": "DeletePVC", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "PVCName", - "in": "path", - "required": true - } - ], - "responses": { - "204": { - "description": "A successful response." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/pvcs": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "List all PVCs from given Tenant", - "operationId": "ListPVCsForTenant", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/listPVCsResponse" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/pvcs/{PVCName}/describe": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Get Describe output for PVC", - "operationId": "GetPVCDescribe", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "PVCName", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/describePVCWrapper" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/pvcs/{PVCName}/events": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Get Events for PVC", - "operationId": "GetPVCEvents", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "PVCName", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/eventListWrapper" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/security": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Tenant Security", - "operationId": "TenantSecurity", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/tenantSecurityResponse" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - }, - "post": { - "tags": [ - "OperatorAPI" - ], - "summary": "Update Tenant Security", - "operationId": "UpdateTenantSecurity", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/updateTenantSecurityRequest" - } - } - ], - "responses": { - "204": { - "description": "A successful response." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/set-administrators": { - "post": { - "tags": [ - "OperatorAPI" - ], - "summary": "Set the consoleAdmin policy to the specified users and groups", - "operationId": "SetTenantAdministrators", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/setAdministratorsRequest" - } - } - ], - "responses": { - "204": { - "description": "A successful response." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/usage": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Get Usage For The Tenant", - "operationId": "GetTenantUsage", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/tenantUsage" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/yaml": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Get the Tenant YAML", - "operationId": "GetTenantYAML", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/tenantYAML" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - }, - "put": { - "tags": [ - "OperatorAPI" - ], - "summary": "Put the Tenant YAML", - "operationId": "PutTenantYAML", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/tenantYAML" - } - } - ], - "responses": { - "201": { - "description": "A successful response." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/nodes/labels": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "List node labels", - "operationId": "ListNodeLabels", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/nodeLabels" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/session": { - "get": { - "tags": [ - "Auth" - ], - "summary": "Endpoint to check if your session is still valid", - "operationId": "SessionCheck", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/operatorSessionResponse" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/subnet/apikey": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Subnet api key", - "operationId": "OperatorSubnetApiKey", - "parameters": [ - { - "type": "string", - "name": "token", - "in": "query", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/operatorSubnetAPIKey" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/subnet/apikey/info": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Subnet API key info", - "operationId": "OperatorSubnetAPIKeyInfo", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/operatorSubnetRegisterAPIKeyResponse" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/subnet/apikey/register": { - "post": { - "tags": [ - "OperatorAPI" - ], - "summary": "Register Operator with Subnet", - "operationId": "OperatorSubnetRegisterAPIKey", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/operatorSubnetAPIKey" - } - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/operatorSubnetRegisterAPIKeyResponse" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/subnet/login": { - "post": { - "tags": [ - "OperatorAPI" - ], - "summary": "Login to subnet", - "operationId": "OperatorSubnetLogin", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/operatorSubnetLoginRequest" - } - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/operatorSubnetLoginResponse" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/subnet/login/mfa": { - "post": { - "tags": [ - "OperatorAPI" - ], - "summary": "Login to subnet using mfa", - "operationId": "OperatorSubnetLoginMFA", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/operatorSubnetLoginMFARequest" - } - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/operatorSubnetLoginResponse" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/subscription/info": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Subscription info", - "operationId": "SubscriptionInfo", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/license" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/subscription/namespaces/{namespace}/tenants/{tenant}/activate": { - "post": { - "tags": [ - "OperatorAPI" - ], - "summary": "Activate a particular tenant using the existing subscription license", - "operationId": "SubscriptionActivate", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - } - ], - "responses": { - "204": { - "description": "A successful response." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/subscription/refresh": { - "post": { - "tags": [ - "OperatorAPI" - ], - "summary": "Refresh existing subscription license", - "operationId": "SubscriptionRefresh", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/license" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/subscription/validate": { - "post": { - "tags": [ - "OperatorAPI" - ], - "summary": "Validates subscription license", - "operationId": "SubscriptionValidate", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/subscriptionValidateRequest" - } - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/license" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/tenants": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "List Tenant of All Namespaces", - "operationId": "ListAllTenants", - "parameters": [ - { - "type": "string", - "name": "sort_by", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "name": "offset", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "name": "limit", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/listTenantsResponse" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - }, - "post": { - "tags": [ - "OperatorAPI" - ], - "summary": "Create Tenant", - "operationId": "CreateTenant", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/createTenantRequest" - } - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/createTenantResponse" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - } - }, - "definitions": { - "BackendProperties": { - "type": "object", - "properties": { - "backendType": { - "type": "string" - }, - "rrSCParity": { - "type": "integer" - }, - "standardSCParity": { - "type": "integer" - } - } - }, - "allocatableResourcesResponse": { - "type": "object", - "properties": { - "cpu_priority": { - "$ref": "#/definitions/nodeMaxAllocatableResources" - }, - "mem_priority": { - "$ref": "#/definitions/nodeMaxAllocatableResources" - }, - "min_allocatable_cpu": { - "type": "integer", - "format": "int64" - }, - "min_allocatable_mem": { - "type": "integer", - "format": "int64" - } - } - }, - "annotation": { - "type": "object", - "properties": { - "key": { - "type": "string" - }, - "value": { - "type": "string" - } - } - }, - "awsConfiguration": { - "type": "object", - "required": [ - "secretsmanager" - ], - "properties": { - "secretsmanager": { - "type": "object", - "required": [ - "endpoint", - "region", - "credentials" - ], - "properties": { - "credentials": { - "type": "object", - "required": [ - "accesskey", - "secretkey" - ], - "properties": { - "accesskey": { - "type": "string" - }, - "secretkey": { - "type": "string" - }, - "token": { - "type": "string" - } - } - }, - "endpoint": { - "type": "string" - }, - "kmskey": { - "type": "string" - }, - "region": { - "type": "string" - } - } - } - } - }, - "azureConfiguration": { - "type": "object", - "required": [ - "keyvault" - ], - "properties": { - "keyvault": { - "type": "object", - "required": [ - "endpoint" - ], - "properties": { - "credentials": { - "type": "object", - "required": [ - "tenant_id", - "client_id", - "client_secret" - ], - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - }, - "tenant_id": { - "type": "string" - } - } - }, - "endpoint": { - "type": "string" - } - } - } - } - }, - "certificateInfo": { - "type": "object", - "properties": { - "domains": { - "type": "array", - "items": { - "type": "string" - } - }, - "expiry": { - "type": "string" - }, - "name": { - "type": "string" - }, - "serialNumber": { - "type": "string" - } - } - }, - "checkOperatorVersionResponse": { - "type": "object", - "properties": { - "current_version": { - "type": "string" - }, - "latest_version": { - "type": "string" - } - } - }, - "condition": { - "type": "object", - "properties": { - "status": { - "type": "string" - }, - "type": { - "type": "string" - } - } - }, - "configMap": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "optional": { - "type": "boolean" - } - } - }, - "container": { - "type": "object", - "properties": { - "args": { - "type": "array", - "items": { - "type": "string" - } - }, - "containerID": { - "type": "string" - }, - "environmentVariables": { - "type": "array", - "items": { - "$ref": "#/definitions/environmentVariable" - } - }, - "hostPorts": { - "type": "array", - "items": { - "type": "string" - } - }, - "image": { - "type": "string" - }, - "imageID": { - "type": "string" - }, - "lastState": { - "$ref": "#/definitions/state" - }, - "mounts": { - "type": "array", - "items": { - "$ref": "#/definitions/mount" - } - }, - "name": { - "type": "string" - }, - "ports": { - "type": "array", - "items": { - "type": "string" - } - }, - "ready": { - "type": "boolean" - }, - "restartCount": { - "type": "integer" - }, - "state": { - "$ref": "#/definitions/state" - } - } - }, - "createTenantRequest": { - "type": "object", - "required": [ - "name", - "namespace", - "pools" - ], - "properties": { - "access_key": { - "type": "string" - }, - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "domains": { - "type": "object", - "$ref": "#/definitions/domainsConfiguration" - }, - "enable_console": { - "type": "boolean", - "default": true - }, - "enable_tls": { - "type": "boolean", - "default": true - }, - "encryption": { - "type": "object", - "$ref": "#/definitions/encryptionConfiguration" - }, - "environmentVariables": { - "type": "array", - "items": { - "$ref": "#/definitions/environmentVariable" - } - }, - "erasureCodingParity": { - "type": "integer" - }, - "expose_console": { - "type": "boolean" - }, - "expose_minio": { - "type": "boolean" - }, - "expose_sftp": { - "type": "boolean" - }, - "idp": { - "type": "object", - "$ref": "#/definitions/idpConfiguration" - }, - "image": { - "type": "string" - }, - "image_pull_secret": { - "type": "string" - }, - "image_registry": { - "$ref": "#/definitions/imageRegistry" - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "mount_path": { - "type": "string" - }, - "name": { - "type": "string", - "pattern": "^[a-z0-9-]{3,63}$" - }, - "namespace": { - "type": "string" - }, - "pools": { - "type": "array", - "items": { - "$ref": "#/definitions/pool" - } - }, - "secret_key": { - "type": "string" - }, - "tls": { - "type": "object", - "$ref": "#/definitions/tlsConfiguration" - } - } - }, - "createTenantResponse": { - "type": "object", - "properties": { - "console": { - "type": "array", - "items": { - "$ref": "#/definitions/tenantResponseItem" - } - }, - "externalIDP": { - "type": "boolean" - } - } - }, - "csrElement": { - "type": "object", - "properties": { - "annotations": { - "type": "array", - "items": { - "$ref": "#/definitions/annotation" - } - }, - "deletion_grace_period_seconds": { - "type": "integer", - "format": "int64" - }, - "generate_name": { - "type": "string" - }, - "generation": { - "type": "integer", - "format": "int64" - }, - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "resource_version": { - "type": "string" - }, - "status": { - "type": "string" - } - } - }, - "csrElements": { - "type": "object", - "properties": { - "csrElement": { - "type": "array", - "items": { - "$ref": "#/definitions/csrElement" - } - } - } - }, - "deleteTenantRequest": { - "type": "object", - "properties": { - "delete_pvcs": { - "type": "boolean" - } - } - }, - "describePVCWrapper": { - "type": "object", - "properties": { - "accessModes": { - "type": "array", - "items": { - "type": "string" - } - }, - "annotations": { - "type": "array", - "items": { - "$ref": "#/definitions/annotation" - } - }, - "capacity": { - "type": "string" - }, - "finalizers": { - "type": "array", - "items": { - "type": "string" - } - }, - "labels": { - "type": "array", - "items": { - "$ref": "#/definitions/label" - } - }, - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "status": { - "type": "string" - }, - "storageClass": { - "type": "string" - }, - "volume": { - "type": "string" - }, - "volumeMode": { - "type": "string" - } - } - }, - "describePodWrapper": { - "type": "object", - "properties": { - "annotations": { - "type": "array", - "items": { - "$ref": "#/definitions/annotation" - } - }, - "conditions": { - "type": "array", - "items": { - "$ref": "#/definitions/condition" - } - }, - "containers": { - "type": "array", - "items": { - "$ref": "#/definitions/container" - } - }, - "controllerRef": { - "type": "string" - }, - "deletionGracePeriodSeconds": { - "type": "integer" - }, - "deletionTimestamp": { - "type": "string" - }, - "labels": { - "type": "array", - "items": { - "$ref": "#/definitions/label" - } - }, - "message": { - "type": "string" - }, - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "nodeName": { - "type": "string" - }, - "nodeSelector": { - "type": "array", - "items": { - "$ref": "#/definitions/nodeSelector" - } - }, - "phase": { - "type": "string" - }, - "podIP": { - "type": "string" - }, - "priority": { - "type": "integer" - }, - "priorityClassName": { - "type": "string" - }, - "qosClass": { - "type": "string" - }, - "reason": { - "type": "string" - }, - "startTime": { - "type": "string" - }, - "tolerations": { - "type": "array", - "items": { - "$ref": "#/definitions/toleration" - } - }, - "volumes": { - "type": "array", - "items": { - "$ref": "#/definitions/volume" - } - } - } - }, - "domainsConfiguration": { - "type": "object", - "properties": { - "console": { - "type": "string" - }, - "minio": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "encryptionConfiguration": { - "allOf": [ - { - "$ref": "#/definitions/metadataFields" - }, - { - "type": "object", - "properties": { - "aws": { - "type": "object", - "$ref": "#/definitions/awsConfiguration" - }, - "azure": { - "type": "object", - "$ref": "#/definitions/azureConfiguration" - }, - "gcp": { - "type": "object", - "$ref": "#/definitions/gcpConfiguration" - }, - "gemalto": { - "type": "object", - "$ref": "#/definitions/gemaltoConfiguration" - }, - "image": { - "type": "string" - }, - "kms_mtls": { - "type": "object", - "properties": { - "ca": { - "type": "string" - }, - "crt": { - "type": "string" - }, - "key": { - "type": "string" - } - } - }, - "minio_mtls": { - "type": "object", - "$ref": "#/definitions/keyPairConfiguration" - }, - "policies": { - "type": "object" - }, - "raw": { - "type": "string" - }, - "replicas": { - "type": "string" - }, - "secretsToBeDeleted": { - "type": "array", - "items": { - "type": "string" - } - }, - "securityContext": { - "type": "object", - "$ref": "#/definitions/securityContext" - }, - "server_tls": { - "type": "object", - "$ref": "#/definitions/keyPairConfiguration" - }, - "vault": { - "type": "object", - "$ref": "#/definitions/vaultConfiguration" - } - } - } - ] - }, - "encryptionConfigurationResponse": { - "allOf": [ - { - "$ref": "#/definitions/metadataFields" - }, - { - "type": "object", - "properties": { - "aws": { - "type": "object", - "$ref": "#/definitions/awsConfiguration" - }, - "azure": { - "type": "object", - "$ref": "#/definitions/azureConfiguration" - }, - "gcp": { - "type": "object", - "$ref": "#/definitions/gcpConfiguration" - }, - "gemalto": { - "type": "object", - "$ref": "#/definitions/gemaltoConfigurationResponse" - }, - "image": { - "type": "string" - }, - "kms_mtls": { - "type": "object", - "properties": { - "ca": { - "type": "object", - "$ref": "#/definitions/certificateInfo" - }, - "crt": { - "type": "object", - "$ref": "#/definitions/certificateInfo" - } - } - }, - "minio_mtls": { - "type": "object", - "$ref": "#/definitions/certificateInfo" - }, - "policies": { - "type": "object" - }, - "raw": { - "type": "string" - }, - "replicas": { - "type": "string" - }, - "securityContext": { - "type": "object", - "$ref": "#/definitions/securityContext" - }, - "server_tls": { - "type": "object", - "$ref": "#/definitions/certificateInfo" - }, - "vault": { - "type": "object", - "$ref": "#/definitions/vaultConfigurationResponse" - } - } - } - ] - }, - "environmentVariable": { - "type": "object", - "properties": { - "key": { - "type": "string" - }, - "value": { - "type": "string" - } - } - }, - "error": { - "type": "object", - "required": [ - "message", - "detailedMessage" - ], - "properties": { - "code": { - "type": "integer", - "format": "int32" - }, - "detailedMessage": { - "type": "string" - }, - "message": { - "type": "string" - } - } - }, - "eventListElement": { - "type": "object", - "properties": { - "event_type": { - "type": "string" - }, - "last_seen": { - "type": "integer", - "format": "int64" - }, - "message": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "object": { - "type": "string" - }, - "reason": { - "type": "string" - } - } - }, - "eventListWrapper": { - "type": "array", - "items": { - "$ref": "#/definitions/eventListElement" - } - }, - "gcpConfiguration": { - "type": "object", - "required": [ - "secretmanager" - ], - "properties": { - "secretmanager": { - "type": "object", - "required": [ - "project_id" - ], - "properties": { - "credentials": { - "type": "object", - "properties": { - "client_email": { - "type": "string" - }, - "client_id": { - "type": "string" - }, - "private_key": { - "type": "string" - }, - "private_key_id": { - "type": "string" - } - } - }, - "endpoint": { - "type": "string" - }, - "project_id": { - "type": "string" - } - } - } - } - }, - "gemaltoConfiguration": { - "type": "object", - "required": [ - "keysecure" - ], - "properties": { - "keysecure": { - "type": "object", - "required": [ - "endpoint", - "credentials" - ], - "properties": { - "credentials": { - "type": "object", - "required": [ - "token", - "domain" - ], - "properties": { - "domain": { - "type": "string" - }, - "retry": { - "type": "integer", - "format": "int64" - }, - "token": { - "type": "string" - } - } - }, - "endpoint": { - "type": "string" - } - } - } - } - }, - "gemaltoConfigurationResponse": { - "type": "object", - "required": [ - "keysecure" - ], - "properties": { - "keysecure": { - "type": "object", - "required": [ - "endpoint", - "credentials" - ], - "properties": { - "credentials": { - "type": "object", - "required": [ - "token", - "domain" - ], - "properties": { - "domain": { - "type": "string" - }, - "retry": { - "type": "integer", - "format": "int64" - }, - "token": { - "type": "string" - } - } - }, - "endpoint": { - "type": "string" - } - } - } - } - }, - "idpConfiguration": { - "type": "object", - "properties": { - "active_directory": { - "type": "object", - "required": [ - "url", - "lookup_bind_dn" - ], - "properties": { - "group_search_base_dn": { - "type": "string" - }, - "group_search_filter": { - "type": "string" - }, - "lookup_bind_dn": { - "type": "string" - }, - "lookup_bind_password": { - "type": "string" - }, - "server_insecure": { - "type": "boolean" - }, - "server_start_tls": { - "type": "boolean" - }, - "skip_tls_verification": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "user_dn_search_base_dn": { - "type": "string" - }, - "user_dn_search_filter": { - "type": "string" - }, - "user_dns": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "keys": { - "type": "array", - "items": { - "type": "object", - "required": [ - "access_key", - "secret_key" - ], - "properties": { - "access_key": { - "type": "string" - }, - "secret_key": { - "type": "string" - } - } - } - }, - "oidc": { - "type": "object", - "required": [ - "configuration_url", - "client_id", - "secret_id", - "claim_name" - ], - "properties": { - "callback_url": { - "type": "string" - }, - "claim_name": { - "type": "string" - }, - "client_id": { - "type": "string" - }, - "configuration_url": { - "type": "string" - }, - "scopes": { - "type": "string" - }, - "secret_id": { - "type": "string" - } - } - } - } - }, - "imageRegistry": { - "type": "object", - "required": [ - "registry", - "username", - "password" - ], - "properties": { - "password": { - "type": "string" - }, - "registry": { - "type": "string" - }, - "username": { - "type": "string" - } - } - }, - "keyPairConfiguration": { - "type": "object", - "required": [ - "crt", - "key" - ], - "properties": { - "crt": { - "type": "string" - }, - "key": { - "type": "string" - } - } - }, - "label": { - "type": "object", - "properties": { - "key": { - "type": "string" - }, - "value": { - "type": "string" - } - } - }, - "license": { - "type": "object", - "properties": { - "account_id": { - "type": "integer" - }, - "email": { - "type": "string" - }, - "expires_at": { - "type": "string" - }, - "organization": { - "type": "string" - }, - "plan": { - "type": "string" - }, - "storage_capacity": { - "type": "integer" - } - } - }, - "listPVCsResponse": { - "type": "object", - "properties": { - "pvcs": { - "type": "array", - "items": { - "$ref": "#/definitions/pvcsListResponse" - } - } - } - }, - "listTenantsResponse": { - "type": "object", - "properties": { - "tenants": { - "type": "array", - "title": "list of resulting tenants", - "items": { - "$ref": "#/definitions/tenantList" - } - }, - "total": { - "type": "integer", - "format": "int64", - "title": "number of tenants accessible to tenant user" - } - } - }, - "loginDetails": { - "type": "object", - "properties": { - "isK8S": { - "type": "boolean" - }, - "loginStrategy": { - "type": "string", - "enum": [ - "form", - "redirect", - "service-account", - "redirect-service-account" - ] - }, - "redirectRules": { - "type": "array", - "items": { - "$ref": "#/definitions/redirectRule" - } - } - } - }, - "loginOauth2AuthRequest": { - "type": "object", - "required": [ - "state", - "code" - ], - "properties": { - "code": { - "type": "string" - }, - "state": { - "type": "string" - } - } - }, - "loginOperatorRequest": { - "type": "object", - "required": [ - "jwt" - ], - "properties": { - "jwt": { - "type": "string" - } - } - }, - "loginRequest": { - "type": "object", - "properties": { - "accessKey": { - "type": "string" - }, - "features": { - "type": "object", - "properties": { - "hide_menu": { - "type": "boolean" - } - } - }, - "secretKey": { - "type": "string" - }, - "sts": { - "type": "string" - } - } - }, - "loginResponse": { - "type": "object", - "properties": { - "IDPRefreshToken": { - "type": "string" - }, - "sessionId": { - "type": "string" - } - } - }, - "maxAllocatableMemResponse": { - "type": "object", - "properties": { - "max_memory": { - "type": "integer", - "format": "int64" - } - } - }, - "metadataFields": { - "type": "object", - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "node_selector": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - }, - "mount": { - "type": "object", - "properties": { - "mountPath": { - "type": "string" - }, - "name": { - "type": "string" - }, - "readOnly": { - "type": "boolean" - }, - "subPath": { - "type": "string" - } - } - }, - "mpIntegration": { - "type": "object", - "properties": { - "email": { - "type": "string" - }, - "isInEU": { - "type": "boolean" - } - } - }, - "namespace": { - "type": "object", - "required": [ - "name" - ], - "properties": { - "name": { - "type": "string" - } - } - }, - "nodeLabels": { - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "nodeMaxAllocatableResources": { - "type": "object", - "properties": { - "max_allocatable_cpu": { - "type": "integer", - "format": "int64" - }, - "max_allocatable_mem": { - "type": "integer", - "format": "int64" - } - } - }, - "nodeSelector": { - "type": "object", - "properties": { - "key": { - "type": "string" - }, - "value": { - "type": "string" - } - } - }, - "nodeSelectorTerm": { - "description": "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.", - "type": "object", - "properties": { - "matchExpressions": { - "description": "A list of node selector requirements by node's labels.", - "type": "array", - "items": { - "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", - "type": "object", - "required": [ - "key", - "operator" - ], - "properties": { - "key": { - "description": "The label key that the selector applies to.", - "type": "string" - }, - "operator": { - "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", - "type": "string" - }, - "values": { - "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - "matchFields": { - "description": "A list of node selector requirements by node's fields.", - "type": "array", - "items": { - "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", - "type": "object", - "required": [ - "key", - "operator" - ], - "properties": { - "key": { - "description": "The label key that the selector applies to.", - "type": "string" - }, - "operator": { - "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", - "type": "string" - }, - "values": { - "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", - "type": "array", - "items": { - "type": "string" - } - } - } - } - } - } - }, - "operatorSessionResponse": { - "type": "object", - "properties": { - "features": { - "type": "array", - "items": { - "type": "string" - } - }, - "operator": { - "type": "boolean" - }, - "permissions": { - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "status": { - "type": "string", - "enum": [ - "ok" - ] - } - } - }, - "operatorSubnetAPIKey": { - "type": "object", - "properties": { - "apiKey": { - "type": "string" - } - } - }, - "operatorSubnetLoginMFARequest": { - "type": "object", - "required": [ - "username", - "otp", - "mfa_token" - ], - "properties": { - "mfa_token": { - "type": "string" - }, - "otp": { - "type": "string" - }, - "username": { - "type": "string" - } - } - }, - "operatorSubnetLoginRequest": { - "type": "object", - "properties": { - "password": { - "type": "string" - }, - "username": { - "type": "string" - } - } - }, - "operatorSubnetLoginResponse": { - "type": "object", - "properties": { - "access_token": { - "type": "string" - }, - "mfa_token": { - "type": "string" - } - } - }, - "operatorSubnetRegisterAPIKeyResponse": { - "type": "object", - "properties": { - "registered": { - "type": "boolean" - } - } - }, - "parityResponse": { - "type": "array", - "items": { - "type": "string" - } - }, - "podAffinityTerm": { - "description": "Required. A pod affinity term, associated with the corresponding weight.", - "type": "object", - "required": [ - "topologyKey" - ], - "properties": { - "labelSelector": { - "description": "A label query over a set of resources, in this case pods.", - "type": "object", - "properties": { - "matchExpressions": { - "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", - "type": "array", - "items": { - "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", - "type": "object", - "required": [ - "key", - "operator" - ], - "properties": { - "key": { - "description": "key is the label key that the selector applies to.", - "type": "string" - }, - "operator": { - "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", - "type": "string" - }, - "values": { - "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - "matchLabels": { - "description": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - }, - "namespaces": { - "description": "namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means \"this pod's namespace\"", - "type": "array", - "items": { - "type": "string" - } - }, - "topologyKey": { - "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", - "type": "string" - } - } - }, - "policyEntity": { - "type": "string", - "default": "user", - "enum": [ - "user", - "group" - ] - }, - "pool": { - "type": "object", - "required": [ - "servers", - "volumes_per_server", - "volume_configuration" - ], - "properties": { - "affinity": { - "$ref": "#/definitions/poolAffinity" - }, - "name": { - "type": "string" - }, - "node_selector": { - "description": "NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "resources": { - "$ref": "#/definitions/poolResources" - }, - "runtimeClassName": { - "type": "string" - }, - "securityContext": { - "type": "object", - "$ref": "#/definitions/securityContext" - }, - "servers": { - "type": "integer" - }, - "tolerations": { - "$ref": "#/definitions/poolTolerations" - }, - "volume_configuration": { - "type": "object", - "required": [ - "size" - ], - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "size": { - "type": "integer" - }, - "storage_class_name": { - "type": "string" - } - } - }, - "volumes_per_server": { - "type": "integer", - "format": "int32" - } - } - }, - "poolAffinity": { - "description": "If specified, affinity will define the pod's scheduling constraints", - "type": "object", - "properties": { - "nodeAffinity": { - "description": "Describes node affinity scheduling rules for the pod.", - "type": "object", - "properties": { - "preferredDuringSchedulingIgnoredDuringExecution": { - "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.", - "type": "array", - "items": { - "description": "An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).", - "type": "object", - "required": [ - "preference", - "weight" - ], - "properties": { - "preference": { - "description": "A node selector term, associated with the corresponding weight.", - "type": "object", - "$ref": "#/definitions/nodeSelectorTerm" - }, - "weight": { - "description": "Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.", - "type": "integer", - "format": "int32" - } - } - } - }, - "requiredDuringSchedulingIgnoredDuringExecution": { - "description": "If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.", - "type": "object", - "required": [ - "nodeSelectorTerms" - ], - "properties": { - "nodeSelectorTerms": { - "description": "Required. A list of node selector terms. The terms are ORed.", - "type": "array", - "items": { - "$ref": "#/definitions/nodeSelectorTerm" - } - } - } - } - } - }, - "podAffinity": { - "description": "Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, pool, etc. as some other pod(s)).", - "type": "object", - "properties": { - "preferredDuringSchedulingIgnoredDuringExecution": { - "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", - "type": "array", - "items": { - "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", - "type": "object", - "required": [ - "podAffinityTerm", - "weight" - ], - "properties": { - "podAffinityTerm": { - "$ref": "#/definitions/podAffinityTerm" - }, - "weight": { - "description": "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", - "type": "integer", - "format": "int32" - } - } - } - }, - "requiredDuringSchedulingIgnoredDuringExecution": { - "description": "If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", - "type": "array", - "items": { - "$ref": "#/definitions/podAffinityTerm" - } - } - } - }, - "podAntiAffinity": { - "description": "Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, pool, etc. as some other pod(s)).", - "type": "object", - "properties": { - "preferredDuringSchedulingIgnoredDuringExecution": { - "description": "The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", - "type": "array", - "items": { - "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", - "type": "object", - "required": [ - "podAffinityTerm", - "weight" - ], - "properties": { - "podAffinityTerm": { - "$ref": "#/definitions/podAffinityTerm" - }, - "weight": { - "description": "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", - "type": "integer", - "format": "int32" - } - } - } - }, - "requiredDuringSchedulingIgnoredDuringExecution": { - "description": "If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", - "type": "array", - "items": { - "$ref": "#/definitions/podAffinityTerm" - } - } - } - } - } - }, - "poolResources": { - "description": "If provided, use these requests and limit for cpu/memory resource allocation", - "type": "object", - "properties": { - "limits": { - "description": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/", - "type": "object", - "additionalProperties": { - "type": "integer", - "format": "int64" - } - }, - "requests": { - "description": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/", - "type": "object", - "additionalProperties": { - "type": "integer", - "format": "int64" - } - } - } - }, - "poolTolerationSeconds": { - "description": "TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.", - "type": "object", - "required": [ - "seconds" - ], - "properties": { - "seconds": { - "type": "integer", - "format": "int64" - } - } - }, - "poolTolerations": { - "description": "Tolerations allows users to set entries like effect, key, operator, value.", - "type": "array", - "items": { - "description": "The pod this Toleration is attached to tolerates any taint that matches the triple \u003ckey,value,effect\u003e using the matching operator \u003coperator\u003e.", - "type": "object", - "properties": { - "effect": { - "description": "Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.", - "type": "string" - }, - "key": { - "description": "Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.", - "type": "string" - }, - "operator": { - "description": "Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.", - "type": "string" - }, - "tolerationSeconds": { - "$ref": "#/definitions/poolTolerationSeconds" - }, - "value": { - "description": "Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.", - "type": "string" - } - } - } - }, - "poolUpdateRequest": { - "type": "object", - "required": [ - "pools" - ], - "properties": { - "pools": { - "type": "array", - "items": { - "$ref": "#/definitions/pool" - } - } - } - }, - "principal": { - "type": "object", - "properties": { - "STSAccessKeyID": { - "type": "string" - }, - "STSSecretAccessKey": { - "type": "string" - }, - "STSSessionToken": { - "type": "string" - }, - "accountAccessKey": { - "type": "string" - }, - "customStyleOb": { - "type": "string" - }, - "hm": { - "type": "boolean" - }, - "ob": { - "type": "boolean" - } - } - }, - "projectedVolume": { - "type": "object", - "properties": { - "sources": { - "type": "array", - "items": { - "$ref": "#/definitions/projectedVolumeSource" - } - } - } - }, - "projectedVolumeSource": { - "type": "object", - "properties": { - "configMap": { - "$ref": "#/definitions/configMap" - }, - "downwardApi": { - "type": "boolean" - }, - "secret": { - "$ref": "#/definitions/secret" - }, - "serviceAccountToken": { - "$ref": "#/definitions/serviceAccountToken" - } - } - }, - "pvc": { - "type": "object", - "properties": { - "claimName": { - "type": "string" - }, - "readOnly": { - "type": "boolean" - } - } - }, - "pvcsListResponse": { - "type": "object", - "properties": { - "age": { - "type": "string" - }, - "capacity": { - "type": "string" - }, - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "status": { - "type": "string" - }, - "storageClass": { - "type": "string" - }, - "tenant": { - "type": "string" - }, - "volume": { - "type": "string" - } - } - }, - "redirectRule": { - "type": "object", - "properties": { - "displayName": { - "type": "string" - }, - "redirect": { - "type": "string" - } - } - }, - "resourceQuota": { - "type": "object", - "properties": { - "elements": { - "type": "array", - "items": { - "$ref": "#/definitions/resourceQuotaElement" - } - }, - "name": { - "type": "string" - } - } - }, - "resourceQuotaElement": { - "type": "object", - "properties": { - "hard": { - "type": "integer", - "format": "int64" - }, - "name": { - "type": "string" - }, - "used": { - "type": "integer", - "format": "int64" - } - } - }, - "secret": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "optional": { - "type": "boolean" - } - } - }, - "securityContext": { - "type": "object", - "required": [ - "runAsUser", - "runAsGroup", - "runAsNonRoot" - ], - "properties": { - "fsGroup": { - "type": "string" - }, - "fsGroupChangePolicy": { - "type": "string" - }, - "runAsGroup": { - "type": "string" - }, - "runAsNonRoot": { - "type": "boolean" - }, - "runAsUser": { - "type": "string" - } - } - }, - "serverDrives": { - "type": "object", - "properties": { - "availableSpace": { - "type": "integer" - }, - "drivePath": { - "type": "string" - }, - "endpoint": { - "type": "string" - }, - "healing": { - "type": "boolean" - }, - "model": { - "type": "string" - }, - "rootDisk": { - "type": "boolean" - }, - "state": { - "type": "string" - }, - "totalSpace": { - "type": "integer" - }, - "usedSpace": { - "type": "integer" - }, - "uuid": { - "type": "string" - } - } - }, - "serverProperties": { - "type": "object", - "properties": { - "commitID": { - "type": "string" - }, - "drives": { - "type": "array", - "items": { - "$ref": "#/definitions/serverDrives" - } - }, - "endpoint": { - "type": "string" - }, - "network": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "poolNumber": { - "type": "integer" - }, - "state": { - "type": "string" - }, - "uptime": { - "type": "integer" - }, - "version": { - "type": "string" - } - } - }, - "serviceAccountToken": { - "type": "object", - "properties": { - "expirationSeconds": { - "type": "integer" - } - } - }, - "setAdministratorsRequest": { - "type": "object", - "properties": { - "group_dns": { - "type": "array", - "items": { - "type": "string" - } - }, - "user_dns": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "state": { - "type": "object", - "properties": { - "exitCode": { - "type": "integer" - }, - "finished": { - "type": "string" - }, - "message": { - "type": "string" - }, - "reason": { - "type": "string" - }, - "signal": { - "type": "integer" - }, - "started": { - "type": "string" - }, - "state": { - "type": "string" - } - } - }, - "subscriptionValidateRequest": { - "type": "object", - "properties": { - "email": { - "type": "string" - }, - "license": { - "type": "string" - }, - "password": { - "type": "string" - } - } - }, - "tenant": { - "type": "object", - "properties": { - "creation_date": { - "type": "string" - }, - "currentState": { - "type": "string" - }, - "deletion_date": { - "type": "string" - }, - "domains": { - "$ref": "#/definitions/domainsConfiguration" - }, - "encryptionEnabled": { - "type": "boolean" - }, - "endpoints": { - "type": "object", - "properties": { - "console": { - "type": "string" - }, - "minio": { - "type": "string" - } - } - }, - "idpAdEnabled": { - "type": "boolean" - }, - "idpOidcEnabled": { - "type": "boolean" - }, - "image": { - "type": "string" - }, - "minioTLS": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "pools": { - "type": "array", - "items": { - "$ref": "#/definitions/pool" - } - }, - "sftpExposed": { - "type": "boolean" - }, - "status": { - "$ref": "#/definitions/tenantStatus" - }, - "subnet_license": { - "$ref": "#/definitions/license" - }, - "tiers": { - "type": "array", - "items": { - "$ref": "#/definitions/tenantTierElement" - } - }, - "total_size": { - "type": "integer", - "format": "int64" - } - } - }, - "tenantConfigurationResponse": { - "type": "object", - "properties": { - "environmentVariables": { - "type": "array", - "items": { - "$ref": "#/definitions/environmentVariable" - } - }, - "sftpExposed": { - "type": "boolean" - } - } - }, - "tenantList": { - "type": "object", - "properties": { - "capacity": { - "type": "integer", - "format": "int64" - }, - "capacity_raw": { - "type": "integer", - "format": "int64" - }, - "capacity_raw_usage": { - "type": "integer", - "format": "int64" - }, - "capacity_usage": { - "type": "integer", - "format": "int64" - }, - "creation_date": { - "type": "string" - }, - "currentState": { - "type": "string" - }, - "deletion_date": { - "type": "string" - }, - "domains": { - "type": "object", - "$ref": "#/definitions/domainsConfiguration" - }, - "health_status": { - "type": "string" - }, - "instance_count": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "pool_count": { - "type": "integer" - }, - "tiers": { - "type": "array", - "items": { - "$ref": "#/definitions/tenantTierElement" - } - }, - "total_size": { - "type": "integer" - }, - "volume_count": { - "type": "integer" - } - } - }, - "tenantLogReport": { - "type": "object", - "properties": { - "blob": { - "type": "string" - }, - "filename": { - "type": "string" - } - } - }, - "tenantPod": { - "type": "object", - "required": [ - "name" - ], - "properties": { - "name": { - "type": "string" - }, - "node": { - "type": "string" - }, - "podIP": { - "type": "string" - }, - "restarts": { - "type": "integer" - }, - "status": { - "type": "string" - }, - "timeCreated": { - "type": "integer" - } - } - }, - "tenantResponseItem": { - "type": "object", - "properties": { - "access_key": { - "type": "string" - }, - "secret_key": { - "type": "string" - }, - "url": { - "type": "string" - } - } - }, - "tenantSecurityResponse": { - "type": "object", - "properties": { - "autoCert": { - "type": "boolean" - }, - "customCertificates": { - "type": "object", - "properties": { - "client": { - "type": "array", - "items": { - "$ref": "#/definitions/certificateInfo" - } - }, - "minio": { - "type": "array", - "items": { - "$ref": "#/definitions/certificateInfo" - } - }, - "minioCAs": { - "type": "array", - "items": { - "$ref": "#/definitions/certificateInfo" - } - } - } - }, - "securityContext": { - "type": "object", - "$ref": "#/definitions/securityContext" - } - } - }, - "tenantStatus": { - "type": "object", - "properties": { - "drives_healing": { - "type": "integer", - "format": "int32" - }, - "drives_offline": { - "type": "integer", - "format": "int32" - }, - "drives_online": { - "type": "integer", - "format": "int32" - }, - "health_status": { - "type": "string" - }, - "usage": { - "type": "object", - "properties": { - "capacity": { - "type": "integer", - "format": "int64" - }, - "capacity_usage": { - "type": "integer", - "format": "int64" - }, - "raw": { - "type": "integer", - "format": "int64" - }, - "raw_usage": { - "type": "integer", - "format": "int64" - } - } - }, - "write_quorum": { - "type": "integer", - "format": "int32" - } - } - }, - "tenantTierElement": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "size": { - "type": "integer", - "format": "int64" - }, - "type": { - "type": "string" - } - } - }, - "tenantUsage": { - "type": "object", - "properties": { - "disk_used": { - "type": "integer", - "format": "int64" - }, - "used": { - "type": "integer", - "format": "int64" - } - } - }, - "tenantYAML": { - "type": "object", - "properties": { - "yaml": { - "type": "string" - } - } - }, - "tlsConfiguration": { - "type": "object", - "properties": { - "minioCAsCertificates": { - "type": "array", - "items": { - "type": "string" - } - }, - "minioClientCertificates": { - "type": "array", - "items": { - "$ref": "#/definitions/keyPairConfiguration" - } - }, - "minioServerCertificates": { - "type": "array", - "items": { - "$ref": "#/definitions/keyPairConfiguration" - } - } - } - }, - "toleration": { - "type": "object", - "properties": { - "effect": { - "type": "string" - }, - "key": { - "type": "string" - }, - "operator": { - "type": "string" - }, - "tolerationSeconds": { - "type": "integer" - }, - "value": { - "type": "string" - } - } - }, - "updateDomainsRequest": { - "type": "object", - "properties": { - "domains": { - "$ref": "#/definitions/domainsConfiguration" - } - } - }, - "updateTenantConfigurationRequest": { - "type": "object", - "properties": { - "environmentVariables": { - "type": "array", - "items": { - "$ref": "#/definitions/environmentVariable" - } - }, - "keysToBeDeleted": { - "type": "array", - "items": { - "type": "string" - } - }, - "sftpExposed": { - "type": "boolean" - } - } - }, - "updateTenantRequest": { - "type": "object", - "properties": { - "image": { - "type": "string", - "pattern": "^((.*?)/(.*?):(.+))$" - }, - "image_pull_secret": { - "type": "string" - }, - "image_registry": { - "$ref": "#/definitions/imageRegistry" - }, - "sftpExposed": { - "type": "boolean" - } - } - }, - "updateTenantSecurityRequest": { - "type": "object", - "properties": { - "autoCert": { - "type": "boolean" - }, - "customCertificates": { - "type": "object", - "properties": { - "minioCAsCertificates": { - "type": "array", - "items": { - "type": "string" - } - }, - "minioClientCertificates": { - "type": "array", - "items": { - "$ref": "#/definitions/keyPairConfiguration" - } - }, - "minioServerCertificates": { - "type": "array", - "items": { - "$ref": "#/definitions/keyPairConfiguration" - } - }, - "secretsToBeDeleted": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "securityContext": { - "type": "object", - "$ref": "#/definitions/securityContext" - } - } - }, - "vaultConfiguration": { - "type": "object", - "required": [ - "endpoint", - "approle" - ], - "properties": { - "approle": { - "type": "object", - "required": [ - "id", - "secret" - ], - "properties": { - "engine": { - "type": "string" - }, - "id": { - "type": "string" - }, - "retry": { - "type": "integer", - "format": "int64" - }, - "secret": { - "type": "string" - } - } - }, - "endpoint": { - "type": "string" - }, - "engine": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "prefix": { - "type": "string" - }, - "status": { - "type": "object", - "properties": { - "ping": { - "type": "integer", - "format": "int64" - } - } - } - } - }, - "vaultConfigurationResponse": { - "type": "object", - "required": [ - "endpoint", - "approle" - ], - "properties": { - "approle": { - "type": "object", - "required": [ - "id", - "secret" - ], - "properties": { - "engine": { - "type": "string" - }, - "id": { - "type": "string" - }, - "retry": { - "type": "integer", - "format": "int64" - }, - "secret": { - "type": "string" - } - } - }, - "endpoint": { - "type": "string" - }, - "engine": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "prefix": { - "type": "string" - }, - "status": { - "type": "object", - "properties": { - "ping": { - "type": "integer", - "format": "int64" - } - } - } - } - }, - "volume": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "projected": { - "$ref": "#/definitions/projectedVolume" - }, - "pvc": { - "$ref": "#/definitions/pvc" - } - } - } - }, - "securityDefinitions": { - "key": { - "type": "oauth2", - "flow": "accessCode", - "authorizationUrl": "http://min.io", - "tokenUrl": "http://min.io" - } - }, - "security": [ - { - "key": [] - } - ] -}`)) - FlatSwaggerJSON = json.RawMessage([]byte(`{ - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "schemes": [ - "http", - "ws" - ], - "swagger": "2.0", - "info": { - "title": "MinIO Operator", - "version": "0.1.0" - }, - "basePath": "/api/v1", - "paths": { - "/check-version": { - "get": { - "security": [], - "tags": [ - "UserAPI" - ], - "summary": "Checks the current Operator version against the latest", - "operationId": "CheckMinIOVersion”", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/checkOperatorVersionResponse" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/cluster/allocatable-resources": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Get allocatable cpu and memory for given number of nodes", - "operationId": "GetAllocatableResources", - "parameters": [ - { - "minimum": 1, - "type": "integer", - "format": "int32", - "name": "num_nodes", - "in": "query", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/allocatableResourcesResponse" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/cluster/max-allocatable-memory": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Get maximum allocatable memory for given number of nodes", - "operationId": "GetMaxAllocatableMem", - "parameters": [ - { - "minimum": 1, - "type": "integer", - "format": "int32", - "name": "num_nodes", - "in": "query", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/maxAllocatableMemResponse" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/get-parity/{nodes}/{disksPerNode}": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Gets parity by sending number of nodes \u0026 number of disks", - "operationId": "GetParity", - "parameters": [ - { - "minimum": 2, - "type": "integer", - "name": "nodes", - "in": "path", - "required": true - }, - { - "minimum": 1, - "type": "integer", - "name": "disksPerNode", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/parityResponse" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/list-pvcs": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "List all PVCs from namespaces that the user has access to", - "operationId": "ListPVCs", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/listPVCsResponse" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/login": { - "get": { - "security": [], - "tags": [ - "Auth" - ], - "summary": "Returns login strategy, form or sso.", - "operationId": "LoginDetail", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/loginDetails" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/login/oauth2/auth": { - "post": { - "security": [], - "tags": [ - "Auth" - ], - "summary": "Identity Provider oauth2 callback endpoint.", - "operationId": "LoginOauth2Auth", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/loginOauth2AuthRequest" - } - } - ], - "responses": { - "204": { - "description": "A successful login." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/login/operator": { - "post": { - "security": [], - "tags": [ - "Auth" - ], - "summary": "Login to Operator Console.", - "operationId": "LoginOperator", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/loginOperatorRequest" - } - } - ], - "responses": { - "204": { - "description": "A successful login." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/logout": { - "post": { - "tags": [ - "Auth" - ], - "summary": "Logout from Operator.", - "operationId": "Logout", - "responses": { - "200": { - "description": "A successful response." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/mp-integration": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Returns email registered for marketplace integration", - "operationId": "GetMPIntegration", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "type": "object", - "properties": { - "isEmailSet": { - "type": "boolean" - } - } - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - }, - "post": { - "tags": [ - "OperatorAPI" - ], - "summary": "Set email to register for marketplace integration", - "operationId": "PostMPIntegration", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/mpIntegration" - } - } - ], - "responses": { - "201": { - "description": "A successful response." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespace": { - "post": { - "tags": [ - "OperatorAPI" - ], - "summary": "Creates a new Namespace with given information", - "operationId": "CreateNamespace", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/namespace" - } - } - ], - "responses": { - "201": { - "description": "A successful response." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/resourcequotas/{resource-quota-name}": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Get Resource Quota", - "operationId": "GetResourceQuota", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "resource-quota-name", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/resourceQuota" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "List Tenants by Namespace", - "operationId": "ListTenants", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "sort_by", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "name": "offset", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "name": "limit", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/listTenantsResponse" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Tenant Details", - "operationId": "TenantDetails", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/tenant" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - }, - "put": { - "tags": [ - "OperatorAPI" - ], - "summary": "Update Tenant", - "operationId": "UpdateTenant", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/updateTenantRequest" - } - } - ], - "responses": { - "201": { - "description": "A successful response." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - }, - "delete": { - "tags": [ - "OperatorAPI" - ], - "summary": "Delete tenant and underlying pvcs", - "operationId": "DeleteTenant", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "schema": { - "$ref": "#/definitions/deleteTenantRequest" - } - } - ], - "responses": { - "204": { - "description": "A successful response." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/certificates": { - "put": { - "tags": [ - "OperatorAPI" - ], - "summary": "Tenant Update Certificates", - "operationId": "TenantUpdateCertificate", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/tlsConfiguration" - } - } - ], - "responses": { - "201": { - "description": "A successful response." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/configuration": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Tenant Configuration", - "operationId": "TenantConfiguration", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/tenantConfigurationResponse" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - }, - "patch": { - "tags": [ - "OperatorAPI" - ], - "summary": "Update Tenant Configuration", - "operationId": "UpdateTenantConfiguration", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/updateTenantConfigurationRequest" - } - } - ], - "responses": { - "204": { - "description": "A successful response." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/csr": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "List Tenant Certificate Signing Request", - "operationId": "ListTenantCertificateSigningRequest", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/csrElements" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/domains": { - "put": { - "tags": [ - "OperatorAPI" - ], - "summary": "Update Domains for a Tenant", - "operationId": "UpdateTenantDomains", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/updateDomainsRequest" - } - } - ], - "responses": { - "204": { - "description": "A successful response." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/encryption": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Tenant Encryption Info", - "operationId": "TenantEncryptionInfo", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/encryptionConfigurationResponse" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - }, - "put": { - "tags": [ - "OperatorAPI" - ], - "summary": "Tenant Update Encryption", - "operationId": "TenantUpdateEncryption", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/encryptionConfiguration" - } - } - ], - "responses": { - "201": { - "description": "A successful response." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - }, - "delete": { - "tags": [ - "OperatorAPI" - ], - "summary": "Tenant Delete Encryption", - "operationId": "TenantDeleteEncryption", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - } - ], - "responses": { - "204": { - "description": "A successful response." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/events": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Get Events for given Tenant", - "operationId": "GetTenantEvents", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/eventListWrapper" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/identity-provider": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Tenant Identity Provider", - "operationId": "TenantIdentityProvider", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/idpConfiguration" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - }, - "post": { - "tags": [ - "OperatorAPI" - ], - "summary": "Update Tenant Identity Provider", - "operationId": "UpdateTenantIdentityProvider", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/idpConfiguration" - } - } - ], - "responses": { - "204": { - "description": "A successful response." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/log-report": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Get Tenant Log Report", - "operationId": "GetTenantLogReport", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/tenantLogReport" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/pods": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Get Pods For The Tenant", - "operationId": "GetTenantPods", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/tenantPod" - } - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/pods/{podName}": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Get Logs for Pod", - "operationId": "GetPodLogs", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "podName", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "type": "string" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - }, - "delete": { - "tags": [ - "OperatorAPI" - ], - "summary": "Delete pod", - "operationId": "DeletePod", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "podName", - "in": "path", - "required": true - } - ], - "responses": { - "204": { - "description": "A successful response." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/pods/{podName}/describe": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Describe Pod", - "operationId": "DescribePod", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "podName", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/describePodWrapper" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/pods/{podName}/events": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Get Events for Pod", - "operationId": "GetPodEvents", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "podName", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/eventListWrapper" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/pools": { - "put": { - "tags": [ - "OperatorAPI" - ], - "summary": "Tenant Update Pools", - "operationId": "TenantUpdatePools", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/poolUpdateRequest" - } - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/tenant" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - }, - "post": { - "tags": [ - "OperatorAPI" - ], - "summary": "Tenant Add Pool", - "operationId": "TenantAddPool", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/pool" - } - } - ], - "responses": { - "201": { - "description": "A successful response." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/pvc/{PVCName}": { - "delete": { - "tags": [ - "OperatorAPI" - ], - "summary": "Delete PVC", - "operationId": "DeletePVC", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "PVCName", - "in": "path", - "required": true - } - ], - "responses": { - "204": { - "description": "A successful response." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/pvcs": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "List all PVCs from given Tenant", - "operationId": "ListPVCsForTenant", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/listPVCsResponse" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/pvcs/{PVCName}/describe": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Get Describe output for PVC", - "operationId": "GetPVCDescribe", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "PVCName", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/describePVCWrapper" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/pvcs/{PVCName}/events": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Get Events for PVC", - "operationId": "GetPVCEvents", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "PVCName", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/eventListWrapper" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/security": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Tenant Security", - "operationId": "TenantSecurity", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/tenantSecurityResponse" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - }, - "post": { - "tags": [ - "OperatorAPI" - ], - "summary": "Update Tenant Security", - "operationId": "UpdateTenantSecurity", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/updateTenantSecurityRequest" - } - } - ], - "responses": { - "204": { - "description": "A successful response." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/set-administrators": { - "post": { - "tags": [ - "OperatorAPI" - ], - "summary": "Set the consoleAdmin policy to the specified users and groups", - "operationId": "SetTenantAdministrators", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/setAdministratorsRequest" - } - } - ], - "responses": { - "204": { - "description": "A successful response." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/usage": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Get Usage For The Tenant", - "operationId": "GetTenantUsage", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/tenantUsage" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/namespaces/{namespace}/tenants/{tenant}/yaml": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Get the Tenant YAML", - "operationId": "GetTenantYAML", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/tenantYAML" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - }, - "put": { - "tags": [ - "OperatorAPI" - ], - "summary": "Put the Tenant YAML", - "operationId": "PutTenantYAML", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/tenantYAML" - } - } - ], - "responses": { - "201": { - "description": "A successful response." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/nodes/labels": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "List node labels", - "operationId": "ListNodeLabels", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/nodeLabels" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/session": { - "get": { - "tags": [ - "Auth" - ], - "summary": "Endpoint to check if your session is still valid", - "operationId": "SessionCheck", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/operatorSessionResponse" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/subnet/apikey": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Subnet api key", - "operationId": "OperatorSubnetApiKey", - "parameters": [ - { - "type": "string", - "name": "token", - "in": "query", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/operatorSubnetAPIKey" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/subnet/apikey/info": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Subnet API key info", - "operationId": "OperatorSubnetAPIKeyInfo", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/operatorSubnetRegisterAPIKeyResponse" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/subnet/apikey/register": { - "post": { - "tags": [ - "OperatorAPI" - ], - "summary": "Register Operator with Subnet", - "operationId": "OperatorSubnetRegisterAPIKey", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/operatorSubnetAPIKey" - } - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/operatorSubnetRegisterAPIKeyResponse" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/subnet/login": { - "post": { - "tags": [ - "OperatorAPI" - ], - "summary": "Login to subnet", - "operationId": "OperatorSubnetLogin", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/operatorSubnetLoginRequest" - } - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/operatorSubnetLoginResponse" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/subnet/login/mfa": { - "post": { - "tags": [ - "OperatorAPI" - ], - "summary": "Login to subnet using mfa", - "operationId": "OperatorSubnetLoginMFA", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/operatorSubnetLoginMFARequest" - } - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/operatorSubnetLoginResponse" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/subscription/info": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "Subscription info", - "operationId": "SubscriptionInfo", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/license" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/subscription/namespaces/{namespace}/tenants/{tenant}/activate": { - "post": { - "tags": [ - "OperatorAPI" - ], - "summary": "Activate a particular tenant using the existing subscription license", - "operationId": "SubscriptionActivate", - "parameters": [ - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "tenant", - "in": "path", - "required": true - } - ], - "responses": { - "204": { - "description": "A successful response." - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/subscription/refresh": { - "post": { - "tags": [ - "OperatorAPI" - ], - "summary": "Refresh existing subscription license", - "operationId": "SubscriptionRefresh", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/license" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/subscription/validate": { - "post": { - "tags": [ - "OperatorAPI" - ], - "summary": "Validates subscription license", - "operationId": "SubscriptionValidate", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/subscriptionValidateRequest" - } - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/license" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - }, - "/tenants": { - "get": { - "tags": [ - "OperatorAPI" - ], - "summary": "List Tenant of All Namespaces", - "operationId": "ListAllTenants", - "parameters": [ - { - "type": "string", - "name": "sort_by", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "name": "offset", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "name": "limit", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/listTenantsResponse" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - }, - "post": { - "tags": [ - "OperatorAPI" - ], - "summary": "Create Tenant", - "operationId": "CreateTenant", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/createTenantRequest" - } - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/createTenantResponse" - } - }, - "default": { - "description": "Generic error response.", - "schema": { - "$ref": "#/definitions/error" - } - } - } - } - } - }, - "definitions": { - "AwsConfigurationSecretsmanager": { - "type": "object", - "required": [ - "endpoint", - "region", - "credentials" - ], - "properties": { - "credentials": { - "type": "object", - "required": [ - "accesskey", - "secretkey" - ], - "properties": { - "accesskey": { - "type": "string" - }, - "secretkey": { - "type": "string" - }, - "token": { - "type": "string" - } - } - }, - "endpoint": { - "type": "string" - }, - "kmskey": { - "type": "string" - }, - "region": { - "type": "string" - } - } - }, - "AwsConfigurationSecretsmanagerCredentials": { - "type": "object", - "required": [ - "accesskey", - "secretkey" - ], - "properties": { - "accesskey": { - "type": "string" - }, - "secretkey": { - "type": "string" - }, - "token": { - "type": "string" - } - } - }, - "AzureConfigurationKeyvault": { - "type": "object", - "required": [ - "endpoint" - ], - "properties": { - "credentials": { - "type": "object", - "required": [ - "tenant_id", - "client_id", - "client_secret" - ], - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - }, - "tenant_id": { - "type": "string" - } - } - }, - "endpoint": { - "type": "string" - } - } - }, - "AzureConfigurationKeyvaultCredentials": { - "type": "object", - "required": [ - "tenant_id", - "client_id", - "client_secret" - ], - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - }, - "tenant_id": { - "type": "string" - } - } - }, - "BackendProperties": { - "type": "object", - "properties": { - "backendType": { - "type": "string" - }, - "rrSCParity": { - "type": "integer" - }, - "standardSCParity": { - "type": "integer" - } - } - }, - "EncryptionConfigurationAO1KmsMtls": { - "type": "object", - "properties": { - "ca": { - "type": "string" - }, - "crt": { - "type": "string" - }, - "key": { - "type": "string" - } - } - }, - "EncryptionConfigurationResponseAO1KmsMtls": { - "type": "object", - "properties": { - "ca": { - "type": "object", - "$ref": "#/definitions/certificateInfo" - }, - "crt": { - "type": "object", - "$ref": "#/definitions/certificateInfo" - } - } - }, - "GcpConfigurationSecretmanager": { - "type": "object", - "required": [ - "project_id" - ], - "properties": { - "credentials": { - "type": "object", - "properties": { - "client_email": { - "type": "string" - }, - "client_id": { - "type": "string" - }, - "private_key": { - "type": "string" - }, - "private_key_id": { - "type": "string" - } - } - }, - "endpoint": { - "type": "string" - }, - "project_id": { - "type": "string" - } - } - }, - "GcpConfigurationSecretmanagerCredentials": { - "type": "object", - "properties": { - "client_email": { - "type": "string" - }, - "client_id": { - "type": "string" - }, - "private_key": { - "type": "string" - }, - "private_key_id": { - "type": "string" - } - } - }, - "GemaltoConfigurationKeysecure": { - "type": "object", - "required": [ - "endpoint", - "credentials" - ], - "properties": { - "credentials": { - "type": "object", - "required": [ - "token", - "domain" - ], - "properties": { - "domain": { - "type": "string" - }, - "retry": { - "type": "integer", - "format": "int64" - }, - "token": { - "type": "string" - } - } - }, - "endpoint": { - "type": "string" - } - } - }, - "GemaltoConfigurationKeysecureCredentials": { - "type": "object", - "required": [ - "token", - "domain" - ], - "properties": { - "domain": { - "type": "string" - }, - "retry": { - "type": "integer", - "format": "int64" - }, - "token": { - "type": "string" - } - } - }, - "GemaltoConfigurationResponseKeysecure": { - "type": "object", - "required": [ - "endpoint", - "credentials" - ], - "properties": { - "credentials": { - "type": "object", - "required": [ - "token", - "domain" - ], - "properties": { - "domain": { - "type": "string" - }, - "retry": { - "type": "integer", - "format": "int64" - }, - "token": { - "type": "string" - } - } - }, - "endpoint": { - "type": "string" - } - } - }, - "GemaltoConfigurationResponseKeysecureCredentials": { - "type": "object", - "required": [ - "token", - "domain" - ], - "properties": { - "domain": { - "type": "string" - }, - "retry": { - "type": "integer", - "format": "int64" - }, - "token": { - "type": "string" - } - } - }, - "IdpConfigurationActiveDirectory": { - "type": "object", - "required": [ - "url", - "lookup_bind_dn" - ], - "properties": { - "group_search_base_dn": { - "type": "string" - }, - "group_search_filter": { - "type": "string" - }, - "lookup_bind_dn": { - "type": "string" - }, - "lookup_bind_password": { - "type": "string" - }, - "server_insecure": { - "type": "boolean" - }, - "server_start_tls": { - "type": "boolean" - }, - "skip_tls_verification": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "user_dn_search_base_dn": { - "type": "string" - }, - "user_dn_search_filter": { - "type": "string" - }, - "user_dns": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "IdpConfigurationKeysItems0": { - "type": "object", - "required": [ - "access_key", - "secret_key" - ], - "properties": { - "access_key": { - "type": "string" - }, - "secret_key": { - "type": "string" - } - } - }, - "IdpConfigurationOidc": { - "type": "object", - "required": [ - "configuration_url", - "client_id", - "secret_id", - "claim_name" - ], - "properties": { - "callback_url": { - "type": "string" - }, - "claim_name": { - "type": "string" - }, - "client_id": { - "type": "string" - }, - "configuration_url": { - "type": "string" - }, - "scopes": { - "type": "string" - }, - "secret_id": { - "type": "string" - } - } - }, - "LoginRequestFeatures": { - "type": "object", - "properties": { - "hide_menu": { - "type": "boolean" - } - } - }, - "NodeSelectorTermMatchExpressionsItems0": { - "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", - "type": "object", - "required": [ - "key", - "operator" - ], - "properties": { - "key": { - "description": "The label key that the selector applies to.", - "type": "string" - }, - "operator": { - "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", - "type": "string" - }, - "values": { - "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "NodeSelectorTermMatchFieldsItems0": { - "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", - "type": "object", - "required": [ - "key", - "operator" - ], - "properties": { - "key": { - "description": "The label key that the selector applies to.", - "type": "string" - }, - "operator": { - "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", - "type": "string" - }, - "values": { - "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "PodAffinityTermLabelSelector": { - "description": "A label query over a set of resources, in this case pods.", - "type": "object", - "properties": { - "matchExpressions": { - "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", - "type": "array", - "items": { - "$ref": "#/definitions/PodAffinityTermLabelSelectorMatchExpressionsItems0" - } - }, - "matchLabels": { - "description": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - }, - "PodAffinityTermLabelSelectorMatchExpressionsItems0": { - "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", - "type": "object", - "required": [ - "key", - "operator" - ], - "properties": { - "key": { - "description": "key is the label key that the selector applies to.", - "type": "string" - }, - "operator": { - "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", - "type": "string" - }, - "values": { - "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "PoolAffinityNodeAffinity": { - "description": "Describes node affinity scheduling rules for the pod.", - "type": "object", - "properties": { - "preferredDuringSchedulingIgnoredDuringExecution": { - "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.", - "type": "array", - "items": { - "$ref": "#/definitions/PoolAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0" - } - }, - "requiredDuringSchedulingIgnoredDuringExecution": { - "description": "If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.", - "type": "object", - "required": [ - "nodeSelectorTerms" - ], - "properties": { - "nodeSelectorTerms": { - "description": "Required. A list of node selector terms. The terms are ORed.", - "type": "array", - "items": { - "$ref": "#/definitions/nodeSelectorTerm" - } - } - } - } - } - }, - "PoolAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0": { - "description": "An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).", - "type": "object", - "required": [ - "preference", - "weight" - ], - "properties": { - "preference": { - "description": "A node selector term, associated with the corresponding weight.", - "type": "object", - "$ref": "#/definitions/nodeSelectorTerm" - }, - "weight": { - "description": "Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.", - "type": "integer", - "format": "int32" - } - } - }, - "PoolAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecution": { - "description": "If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.", - "type": "object", - "required": [ - "nodeSelectorTerms" - ], - "properties": { - "nodeSelectorTerms": { - "description": "Required. A list of node selector terms. The terms are ORed.", - "type": "array", - "items": { - "$ref": "#/definitions/nodeSelectorTerm" - } - } - } - }, - "PoolAffinityPodAffinity": { - "description": "Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, pool, etc. as some other pod(s)).", - "type": "object", - "properties": { - "preferredDuringSchedulingIgnoredDuringExecution": { - "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", - "type": "array", - "items": { - "$ref": "#/definitions/PoolAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0" - } - }, - "requiredDuringSchedulingIgnoredDuringExecution": { - "description": "If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", - "type": "array", - "items": { - "$ref": "#/definitions/podAffinityTerm" - } - } - } - }, - "PoolAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0": { - "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", - "type": "object", - "required": [ - "podAffinityTerm", - "weight" - ], - "properties": { - "podAffinityTerm": { - "$ref": "#/definitions/podAffinityTerm" - }, - "weight": { - "description": "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", - "type": "integer", - "format": "int32" - } - } - }, - "PoolAffinityPodAntiAffinity": { - "description": "Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, pool, etc. as some other pod(s)).", - "type": "object", - "properties": { - "preferredDuringSchedulingIgnoredDuringExecution": { - "description": "The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", - "type": "array", - "items": { - "$ref": "#/definitions/PoolAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0" - } - }, - "requiredDuringSchedulingIgnoredDuringExecution": { - "description": "If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", - "type": "array", - "items": { - "$ref": "#/definitions/podAffinityTerm" - } - } - } - }, - "PoolAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0": { - "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", - "type": "object", - "required": [ - "podAffinityTerm", - "weight" - ], - "properties": { - "podAffinityTerm": { - "$ref": "#/definitions/podAffinityTerm" - }, - "weight": { - "description": "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", - "type": "integer", - "format": "int32" - } - } - }, - "PoolTolerationsItems0": { - "description": "The pod this Toleration is attached to tolerates any taint that matches the triple \u003ckey,value,effect\u003e using the matching operator \u003coperator\u003e.", - "type": "object", - "properties": { - "effect": { - "description": "Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.", - "type": "string" - }, - "key": { - "description": "Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.", - "type": "string" - }, - "operator": { - "description": "Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.", - "type": "string" - }, - "tolerationSeconds": { - "$ref": "#/definitions/poolTolerationSeconds" - }, - "value": { - "description": "Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.", - "type": "string" - } - } - }, - "PoolVolumeConfiguration": { - "type": "object", - "required": [ - "size" - ], - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "size": { - "type": "integer" - }, - "storage_class_name": { - "type": "string" - } - } - }, - "TenantEndpoints": { - "type": "object", - "properties": { - "console": { - "type": "string" - }, - "minio": { - "type": "string" - } - } - }, - "TenantSecurityResponseCustomCertificates": { - "type": "object", - "properties": { - "client": { - "type": "array", - "items": { - "$ref": "#/definitions/certificateInfo" - } - }, - "minio": { - "type": "array", - "items": { - "$ref": "#/definitions/certificateInfo" - } - }, - "minioCAs": { - "type": "array", - "items": { - "$ref": "#/definitions/certificateInfo" - } - } - } - }, - "TenantStatusUsage": { - "type": "object", - "properties": { - "capacity": { - "type": "integer", - "format": "int64" - }, - "capacity_usage": { - "type": "integer", - "format": "int64" - }, - "raw": { - "type": "integer", - "format": "int64" - }, - "raw_usage": { - "type": "integer", - "format": "int64" - } - } - }, - "UpdateTenantSecurityRequestCustomCertificates": { - "type": "object", - "properties": { - "minioCAsCertificates": { - "type": "array", - "items": { - "type": "string" - } - }, - "minioClientCertificates": { - "type": "array", - "items": { - "$ref": "#/definitions/keyPairConfiguration" - } - }, - "minioServerCertificates": { - "type": "array", - "items": { - "$ref": "#/definitions/keyPairConfiguration" - } - }, - "secretsToBeDeleted": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "VaultConfigurationApprole": { - "type": "object", - "required": [ - "id", - "secret" - ], - "properties": { - "engine": { - "type": "string" - }, - "id": { - "type": "string" - }, - "retry": { - "type": "integer", - "format": "int64" - }, - "secret": { - "type": "string" - } - } - }, - "VaultConfigurationResponseApprole": { - "type": "object", - "required": [ - "id", - "secret" - ], - "properties": { - "engine": { - "type": "string" - }, - "id": { - "type": "string" - }, - "retry": { - "type": "integer", - "format": "int64" - }, - "secret": { - "type": "string" - } - } - }, - "VaultConfigurationResponseStatus": { - "type": "object", - "properties": { - "ping": { - "type": "integer", - "format": "int64" - } - } - }, - "VaultConfigurationStatus": { - "type": "object", - "properties": { - "ping": { - "type": "integer", - "format": "int64" - } - } - }, - "allocatableResourcesResponse": { - "type": "object", - "properties": { - "cpu_priority": { - "$ref": "#/definitions/nodeMaxAllocatableResources" - }, - "mem_priority": { - "$ref": "#/definitions/nodeMaxAllocatableResources" - }, - "min_allocatable_cpu": { - "type": "integer", - "format": "int64" - }, - "min_allocatable_mem": { - "type": "integer", - "format": "int64" - } - } - }, - "annotation": { - "type": "object", - "properties": { - "key": { - "type": "string" - }, - "value": { - "type": "string" - } - } - }, - "awsConfiguration": { - "type": "object", - "required": [ - "secretsmanager" - ], - "properties": { - "secretsmanager": { - "type": "object", - "required": [ - "endpoint", - "region", - "credentials" - ], - "properties": { - "credentials": { - "type": "object", - "required": [ - "accesskey", - "secretkey" - ], - "properties": { - "accesskey": { - "type": "string" - }, - "secretkey": { - "type": "string" - }, - "token": { - "type": "string" - } - } - }, - "endpoint": { - "type": "string" - }, - "kmskey": { - "type": "string" - }, - "region": { - "type": "string" - } - } - } - } - }, - "azureConfiguration": { - "type": "object", - "required": [ - "keyvault" - ], - "properties": { - "keyvault": { - "type": "object", - "required": [ - "endpoint" - ], - "properties": { - "credentials": { - "type": "object", - "required": [ - "tenant_id", - "client_id", - "client_secret" - ], - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - }, - "tenant_id": { - "type": "string" - } - } - }, - "endpoint": { - "type": "string" - } - } - } - } - }, - "certificateInfo": { - "type": "object", - "properties": { - "domains": { - "type": "array", - "items": { - "type": "string" - } - }, - "expiry": { - "type": "string" - }, - "name": { - "type": "string" - }, - "serialNumber": { - "type": "string" - } - } - }, - "checkOperatorVersionResponse": { - "type": "object", - "properties": { - "current_version": { - "type": "string" - }, - "latest_version": { - "type": "string" - } - } - }, - "condition": { - "type": "object", - "properties": { - "status": { - "type": "string" - }, - "type": { - "type": "string" - } - } - }, - "configMap": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "optional": { - "type": "boolean" - } - } - }, - "container": { - "type": "object", - "properties": { - "args": { - "type": "array", - "items": { - "type": "string" - } - }, - "containerID": { - "type": "string" - }, - "environmentVariables": { - "type": "array", - "items": { - "$ref": "#/definitions/environmentVariable" - } - }, - "hostPorts": { - "type": "array", - "items": { - "type": "string" - } - }, - "image": { - "type": "string" - }, - "imageID": { - "type": "string" - }, - "lastState": { - "$ref": "#/definitions/state" - }, - "mounts": { - "type": "array", - "items": { - "$ref": "#/definitions/mount" - } - }, - "name": { - "type": "string" - }, - "ports": { - "type": "array", - "items": { - "type": "string" - } - }, - "ready": { - "type": "boolean" - }, - "restartCount": { - "type": "integer" - }, - "state": { - "$ref": "#/definitions/state" - } - } - }, - "createTenantRequest": { - "type": "object", - "required": [ - "name", - "namespace", - "pools" - ], - "properties": { - "access_key": { - "type": "string" - }, - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "domains": { - "type": "object", - "$ref": "#/definitions/domainsConfiguration" - }, - "enable_console": { - "type": "boolean", - "default": true - }, - "enable_tls": { - "type": "boolean", - "default": true - }, - "encryption": { - "type": "object", - "$ref": "#/definitions/encryptionConfiguration" - }, - "environmentVariables": { - "type": "array", - "items": { - "$ref": "#/definitions/environmentVariable" - } - }, - "erasureCodingParity": { - "type": "integer" - }, - "expose_console": { - "type": "boolean" - }, - "expose_minio": { - "type": "boolean" - }, - "expose_sftp": { - "type": "boolean" - }, - "idp": { - "type": "object", - "$ref": "#/definitions/idpConfiguration" - }, - "image": { - "type": "string" - }, - "image_pull_secret": { - "type": "string" - }, - "image_registry": { - "$ref": "#/definitions/imageRegistry" - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "mount_path": { - "type": "string" - }, - "name": { - "type": "string", - "pattern": "^[a-z0-9-]{3,63}$" - }, - "namespace": { - "type": "string" - }, - "pools": { - "type": "array", - "items": { - "$ref": "#/definitions/pool" - } - }, - "secret_key": { - "type": "string" - }, - "tls": { - "type": "object", - "$ref": "#/definitions/tlsConfiguration" - } - } - }, - "createTenantResponse": { - "type": "object", - "properties": { - "console": { - "type": "array", - "items": { - "$ref": "#/definitions/tenantResponseItem" - } - }, - "externalIDP": { - "type": "boolean" - } - } - }, - "csrElement": { - "type": "object", - "properties": { - "annotations": { - "type": "array", - "items": { - "$ref": "#/definitions/annotation" - } - }, - "deletion_grace_period_seconds": { - "type": "integer", - "format": "int64" - }, - "generate_name": { - "type": "string" - }, - "generation": { - "type": "integer", - "format": "int64" - }, - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "resource_version": { - "type": "string" - }, - "status": { - "type": "string" - } - } - }, - "csrElements": { - "type": "object", - "properties": { - "csrElement": { - "type": "array", - "items": { - "$ref": "#/definitions/csrElement" - } - } - } - }, - "deleteTenantRequest": { - "type": "object", - "properties": { - "delete_pvcs": { - "type": "boolean" - } - } - }, - "describePVCWrapper": { - "type": "object", - "properties": { - "accessModes": { - "type": "array", - "items": { - "type": "string" - } - }, - "annotations": { - "type": "array", - "items": { - "$ref": "#/definitions/annotation" - } - }, - "capacity": { - "type": "string" - }, - "finalizers": { - "type": "array", - "items": { - "type": "string" - } - }, - "labels": { - "type": "array", - "items": { - "$ref": "#/definitions/label" - } - }, - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "status": { - "type": "string" - }, - "storageClass": { - "type": "string" - }, - "volume": { - "type": "string" - }, - "volumeMode": { - "type": "string" - } - } - }, - "describePodWrapper": { - "type": "object", - "properties": { - "annotations": { - "type": "array", - "items": { - "$ref": "#/definitions/annotation" - } - }, - "conditions": { - "type": "array", - "items": { - "$ref": "#/definitions/condition" - } - }, - "containers": { - "type": "array", - "items": { - "$ref": "#/definitions/container" - } - }, - "controllerRef": { - "type": "string" - }, - "deletionGracePeriodSeconds": { - "type": "integer" - }, - "deletionTimestamp": { - "type": "string" - }, - "labels": { - "type": "array", - "items": { - "$ref": "#/definitions/label" - } - }, - "message": { - "type": "string" - }, - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "nodeName": { - "type": "string" - }, - "nodeSelector": { - "type": "array", - "items": { - "$ref": "#/definitions/nodeSelector" - } - }, - "phase": { - "type": "string" - }, - "podIP": { - "type": "string" - }, - "priority": { - "type": "integer" - }, - "priorityClassName": { - "type": "string" - }, - "qosClass": { - "type": "string" - }, - "reason": { - "type": "string" - }, - "startTime": { - "type": "string" - }, - "tolerations": { - "type": "array", - "items": { - "$ref": "#/definitions/toleration" - } - }, - "volumes": { - "type": "array", - "items": { - "$ref": "#/definitions/volume" - } - } - } - }, - "domainsConfiguration": { - "type": "object", - "properties": { - "console": { - "type": "string" - }, - "minio": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "encryptionConfiguration": { - "allOf": [ - { - "$ref": "#/definitions/metadataFields" - }, - { - "type": "object", - "properties": { - "aws": { - "type": "object", - "$ref": "#/definitions/awsConfiguration" - }, - "azure": { - "type": "object", - "$ref": "#/definitions/azureConfiguration" - }, - "gcp": { - "type": "object", - "$ref": "#/definitions/gcpConfiguration" - }, - "gemalto": { - "type": "object", - "$ref": "#/definitions/gemaltoConfiguration" - }, - "image": { - "type": "string" - }, - "kms_mtls": { - "type": "object", - "properties": { - "ca": { - "type": "string" - }, - "crt": { - "type": "string" - }, - "key": { - "type": "string" - } - } - }, - "minio_mtls": { - "type": "object", - "$ref": "#/definitions/keyPairConfiguration" - }, - "policies": { - "type": "object" - }, - "raw": { - "type": "string" - }, - "replicas": { - "type": "string" - }, - "secretsToBeDeleted": { - "type": "array", - "items": { - "type": "string" - } - }, - "securityContext": { - "type": "object", - "$ref": "#/definitions/securityContext" - }, - "server_tls": { - "type": "object", - "$ref": "#/definitions/keyPairConfiguration" - }, - "vault": { - "type": "object", - "$ref": "#/definitions/vaultConfiguration" - } - } - } - ] - }, - "encryptionConfigurationResponse": { - "allOf": [ - { - "$ref": "#/definitions/metadataFields" - }, - { - "type": "object", - "properties": { - "aws": { - "type": "object", - "$ref": "#/definitions/awsConfiguration" - }, - "azure": { - "type": "object", - "$ref": "#/definitions/azureConfiguration" - }, - "gcp": { - "type": "object", - "$ref": "#/definitions/gcpConfiguration" - }, - "gemalto": { - "type": "object", - "$ref": "#/definitions/gemaltoConfigurationResponse" - }, - "image": { - "type": "string" - }, - "kms_mtls": { - "type": "object", - "properties": { - "ca": { - "type": "object", - "$ref": "#/definitions/certificateInfo" - }, - "crt": { - "type": "object", - "$ref": "#/definitions/certificateInfo" - } - } - }, - "minio_mtls": { - "type": "object", - "$ref": "#/definitions/certificateInfo" - }, - "policies": { - "type": "object" - }, - "raw": { - "type": "string" - }, - "replicas": { - "type": "string" - }, - "securityContext": { - "type": "object", - "$ref": "#/definitions/securityContext" - }, - "server_tls": { - "type": "object", - "$ref": "#/definitions/certificateInfo" - }, - "vault": { - "type": "object", - "$ref": "#/definitions/vaultConfigurationResponse" - } - } - } - ] - }, - "environmentVariable": { - "type": "object", - "properties": { - "key": { - "type": "string" - }, - "value": { - "type": "string" - } - } - }, - "error": { - "type": "object", - "required": [ - "message", - "detailedMessage" - ], - "properties": { - "code": { - "type": "integer", - "format": "int32" - }, - "detailedMessage": { - "type": "string" - }, - "message": { - "type": "string" - } - } - }, - "eventListElement": { - "type": "object", - "properties": { - "event_type": { - "type": "string" - }, - "last_seen": { - "type": "integer", - "format": "int64" - }, - "message": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "object": { - "type": "string" - }, - "reason": { - "type": "string" - } - } - }, - "eventListWrapper": { - "type": "array", - "items": { - "$ref": "#/definitions/eventListElement" - } - }, - "gcpConfiguration": { - "type": "object", - "required": [ - "secretmanager" - ], - "properties": { - "secretmanager": { - "type": "object", - "required": [ - "project_id" - ], - "properties": { - "credentials": { - "type": "object", - "properties": { - "client_email": { - "type": "string" - }, - "client_id": { - "type": "string" - }, - "private_key": { - "type": "string" - }, - "private_key_id": { - "type": "string" - } - } - }, - "endpoint": { - "type": "string" - }, - "project_id": { - "type": "string" - } - } - } - } - }, - "gemaltoConfiguration": { - "type": "object", - "required": [ - "keysecure" - ], - "properties": { - "keysecure": { - "type": "object", - "required": [ - "endpoint", - "credentials" - ], - "properties": { - "credentials": { - "type": "object", - "required": [ - "token", - "domain" - ], - "properties": { - "domain": { - "type": "string" - }, - "retry": { - "type": "integer", - "format": "int64" - }, - "token": { - "type": "string" - } - } - }, - "endpoint": { - "type": "string" - } - } - } - } - }, - "gemaltoConfigurationResponse": { - "type": "object", - "required": [ - "keysecure" - ], - "properties": { - "keysecure": { - "type": "object", - "required": [ - "endpoint", - "credentials" - ], - "properties": { - "credentials": { - "type": "object", - "required": [ - "token", - "domain" - ], - "properties": { - "domain": { - "type": "string" - }, - "retry": { - "type": "integer", - "format": "int64" - }, - "token": { - "type": "string" - } - } - }, - "endpoint": { - "type": "string" - } - } - } - } - }, - "idpConfiguration": { - "type": "object", - "properties": { - "active_directory": { - "type": "object", - "required": [ - "url", - "lookup_bind_dn" - ], - "properties": { - "group_search_base_dn": { - "type": "string" - }, - "group_search_filter": { - "type": "string" - }, - "lookup_bind_dn": { - "type": "string" - }, - "lookup_bind_password": { - "type": "string" - }, - "server_insecure": { - "type": "boolean" - }, - "server_start_tls": { - "type": "boolean" - }, - "skip_tls_verification": { - "type": "boolean" - }, - "url": { - "type": "string" - }, - "user_dn_search_base_dn": { - "type": "string" - }, - "user_dn_search_filter": { - "type": "string" - }, - "user_dns": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "keys": { - "type": "array", - "items": { - "$ref": "#/definitions/IdpConfigurationKeysItems0" - } - }, - "oidc": { - "type": "object", - "required": [ - "configuration_url", - "client_id", - "secret_id", - "claim_name" - ], - "properties": { - "callback_url": { - "type": "string" - }, - "claim_name": { - "type": "string" - }, - "client_id": { - "type": "string" - }, - "configuration_url": { - "type": "string" - }, - "scopes": { - "type": "string" - }, - "secret_id": { - "type": "string" - } - } - } - } - }, - "imageRegistry": { - "type": "object", - "required": [ - "registry", - "username", - "password" - ], - "properties": { - "password": { - "type": "string" - }, - "registry": { - "type": "string" - }, - "username": { - "type": "string" - } - } - }, - "keyPairConfiguration": { - "type": "object", - "required": [ - "crt", - "key" - ], - "properties": { - "crt": { - "type": "string" - }, - "key": { - "type": "string" - } - } - }, - "label": { - "type": "object", - "properties": { - "key": { - "type": "string" - }, - "value": { - "type": "string" - } - } - }, - "license": { - "type": "object", - "properties": { - "account_id": { - "type": "integer" - }, - "email": { - "type": "string" - }, - "expires_at": { - "type": "string" - }, - "organization": { - "type": "string" - }, - "plan": { - "type": "string" - }, - "storage_capacity": { - "type": "integer" - } - } - }, - "listPVCsResponse": { - "type": "object", - "properties": { - "pvcs": { - "type": "array", - "items": { - "$ref": "#/definitions/pvcsListResponse" - } - } - } - }, - "listTenantsResponse": { - "type": "object", - "properties": { - "tenants": { - "type": "array", - "title": "list of resulting tenants", - "items": { - "$ref": "#/definitions/tenantList" - } - }, - "total": { - "type": "integer", - "format": "int64", - "title": "number of tenants accessible to tenant user" - } - } - }, - "loginDetails": { - "type": "object", - "properties": { - "isK8S": { - "type": "boolean" - }, - "loginStrategy": { - "type": "string", - "enum": [ - "form", - "redirect", - "service-account", - "redirect-service-account" - ] - }, - "redirectRules": { - "type": "array", - "items": { - "$ref": "#/definitions/redirectRule" - } - } - } - }, - "loginOauth2AuthRequest": { - "type": "object", - "required": [ - "state", - "code" - ], - "properties": { - "code": { - "type": "string" - }, - "state": { - "type": "string" - } - } - }, - "loginOperatorRequest": { - "type": "object", - "required": [ - "jwt" - ], - "properties": { - "jwt": { - "type": "string" - } - } - }, - "loginRequest": { - "type": "object", - "properties": { - "accessKey": { - "type": "string" - }, - "features": { - "type": "object", - "properties": { - "hide_menu": { - "type": "boolean" - } - } - }, - "secretKey": { - "type": "string" - }, - "sts": { - "type": "string" - } - } - }, - "loginResponse": { - "type": "object", - "properties": { - "IDPRefreshToken": { - "type": "string" - }, - "sessionId": { - "type": "string" - } - } - }, - "maxAllocatableMemResponse": { - "type": "object", - "properties": { - "max_memory": { - "type": "integer", - "format": "int64" - } - } - }, - "metadataFields": { - "type": "object", - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "node_selector": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - }, - "mount": { - "type": "object", - "properties": { - "mountPath": { - "type": "string" - }, - "name": { - "type": "string" - }, - "readOnly": { - "type": "boolean" - }, - "subPath": { - "type": "string" - } - } - }, - "mpIntegration": { - "type": "object", - "properties": { - "email": { - "type": "string" - }, - "isInEU": { - "type": "boolean" - } - } - }, - "namespace": { - "type": "object", - "required": [ - "name" - ], - "properties": { - "name": { - "type": "string" - } - } - }, - "nodeLabels": { - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "nodeMaxAllocatableResources": { - "type": "object", - "properties": { - "max_allocatable_cpu": { - "type": "integer", - "format": "int64" - }, - "max_allocatable_mem": { - "type": "integer", - "format": "int64" - } - } - }, - "nodeSelector": { - "type": "object", - "properties": { - "key": { - "type": "string" - }, - "value": { - "type": "string" - } - } - }, - "nodeSelectorTerm": { - "description": "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.", - "type": "object", - "properties": { - "matchExpressions": { - "description": "A list of node selector requirements by node's labels.", - "type": "array", - "items": { - "$ref": "#/definitions/NodeSelectorTermMatchExpressionsItems0" - } - }, - "matchFields": { - "description": "A list of node selector requirements by node's fields.", - "type": "array", - "items": { - "$ref": "#/definitions/NodeSelectorTermMatchFieldsItems0" - } - } - } - }, - "operatorSessionResponse": { - "type": "object", - "properties": { - "features": { - "type": "array", - "items": { - "type": "string" - } - }, - "operator": { - "type": "boolean" - }, - "permissions": { - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "status": { - "type": "string", - "enum": [ - "ok" - ] - } - } - }, - "operatorSubnetAPIKey": { - "type": "object", - "properties": { - "apiKey": { - "type": "string" - } - } - }, - "operatorSubnetLoginMFARequest": { - "type": "object", - "required": [ - "username", - "otp", - "mfa_token" - ], - "properties": { - "mfa_token": { - "type": "string" - }, - "otp": { - "type": "string" - }, - "username": { - "type": "string" - } - } - }, - "operatorSubnetLoginRequest": { - "type": "object", - "properties": { - "password": { - "type": "string" - }, - "username": { - "type": "string" - } - } - }, - "operatorSubnetLoginResponse": { - "type": "object", - "properties": { - "access_token": { - "type": "string" - }, - "mfa_token": { - "type": "string" - } - } - }, - "operatorSubnetRegisterAPIKeyResponse": { - "type": "object", - "properties": { - "registered": { - "type": "boolean" - } - } - }, - "parityResponse": { - "type": "array", - "items": { - "type": "string" - } - }, - "podAffinityTerm": { - "description": "Required. A pod affinity term, associated with the corresponding weight.", - "type": "object", - "required": [ - "topologyKey" - ], - "properties": { - "labelSelector": { - "description": "A label query over a set of resources, in this case pods.", - "type": "object", - "properties": { - "matchExpressions": { - "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", - "type": "array", - "items": { - "$ref": "#/definitions/PodAffinityTermLabelSelectorMatchExpressionsItems0" - } - }, - "matchLabels": { - "description": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - }, - "namespaces": { - "description": "namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means \"this pod's namespace\"", - "type": "array", - "items": { - "type": "string" - } - }, - "topologyKey": { - "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", - "type": "string" - } - } - }, - "policyEntity": { - "type": "string", - "default": "user", - "enum": [ - "user", - "group" - ] - }, - "pool": { - "type": "object", - "required": [ - "servers", - "volumes_per_server", - "volume_configuration" - ], - "properties": { - "affinity": { - "$ref": "#/definitions/poolAffinity" - }, - "name": { - "type": "string" - }, - "node_selector": { - "description": "NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "resources": { - "$ref": "#/definitions/poolResources" - }, - "runtimeClassName": { - "type": "string" - }, - "securityContext": { - "type": "object", - "$ref": "#/definitions/securityContext" - }, - "servers": { - "type": "integer" - }, - "tolerations": { - "$ref": "#/definitions/poolTolerations" - }, - "volume_configuration": { - "type": "object", - "required": [ - "size" - ], - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "size": { - "type": "integer" - }, - "storage_class_name": { - "type": "string" - } - } - }, - "volumes_per_server": { - "type": "integer", - "format": "int32" - } - } - }, - "poolAffinity": { - "description": "If specified, affinity will define the pod's scheduling constraints", - "type": "object", - "properties": { - "nodeAffinity": { - "description": "Describes node affinity scheduling rules for the pod.", - "type": "object", - "properties": { - "preferredDuringSchedulingIgnoredDuringExecution": { - "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.", - "type": "array", - "items": { - "$ref": "#/definitions/PoolAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0" - } - }, - "requiredDuringSchedulingIgnoredDuringExecution": { - "description": "If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.", - "type": "object", - "required": [ - "nodeSelectorTerms" - ], - "properties": { - "nodeSelectorTerms": { - "description": "Required. A list of node selector terms. The terms are ORed.", - "type": "array", - "items": { - "$ref": "#/definitions/nodeSelectorTerm" - } - } - } - } - } - }, - "podAffinity": { - "description": "Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, pool, etc. as some other pod(s)).", - "type": "object", - "properties": { - "preferredDuringSchedulingIgnoredDuringExecution": { - "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", - "type": "array", - "items": { - "$ref": "#/definitions/PoolAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0" - } - }, - "requiredDuringSchedulingIgnoredDuringExecution": { - "description": "If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", - "type": "array", - "items": { - "$ref": "#/definitions/podAffinityTerm" - } - } - } - }, - "podAntiAffinity": { - "description": "Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, pool, etc. as some other pod(s)).", - "type": "object", - "properties": { - "preferredDuringSchedulingIgnoredDuringExecution": { - "description": "The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", - "type": "array", - "items": { - "$ref": "#/definitions/PoolAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0" - } - }, - "requiredDuringSchedulingIgnoredDuringExecution": { - "description": "If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", - "type": "array", - "items": { - "$ref": "#/definitions/podAffinityTerm" - } - } - } - } - } - }, - "poolResources": { - "description": "If provided, use these requests and limit for cpu/memory resource allocation", - "type": "object", - "properties": { - "limits": { - "description": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/", - "type": "object", - "additionalProperties": { - "type": "integer", - "format": "int64" - } - }, - "requests": { - "description": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/", - "type": "object", - "additionalProperties": { - "type": "integer", - "format": "int64" - } - } - } - }, - "poolTolerationSeconds": { - "description": "TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.", - "type": "object", - "required": [ - "seconds" - ], - "properties": { - "seconds": { - "type": "integer", - "format": "int64" - } - } - }, - "poolTolerations": { - "description": "Tolerations allows users to set entries like effect, key, operator, value.", - "type": "array", - "items": { - "$ref": "#/definitions/PoolTolerationsItems0" - } - }, - "poolUpdateRequest": { - "type": "object", - "required": [ - "pools" - ], - "properties": { - "pools": { - "type": "array", - "items": { - "$ref": "#/definitions/pool" - } - } - } - }, - "principal": { - "type": "object", - "properties": { - "STSAccessKeyID": { - "type": "string" - }, - "STSSecretAccessKey": { - "type": "string" - }, - "STSSessionToken": { - "type": "string" - }, - "accountAccessKey": { - "type": "string" - }, - "customStyleOb": { - "type": "string" - }, - "hm": { - "type": "boolean" - }, - "ob": { - "type": "boolean" - } - } - }, - "projectedVolume": { - "type": "object", - "properties": { - "sources": { - "type": "array", - "items": { - "$ref": "#/definitions/projectedVolumeSource" - } - } - } - }, - "projectedVolumeSource": { - "type": "object", - "properties": { - "configMap": { - "$ref": "#/definitions/configMap" - }, - "downwardApi": { - "type": "boolean" - }, - "secret": { - "$ref": "#/definitions/secret" - }, - "serviceAccountToken": { - "$ref": "#/definitions/serviceAccountToken" - } - } - }, - "pvc": { - "type": "object", - "properties": { - "claimName": { - "type": "string" - }, - "readOnly": { - "type": "boolean" - } - } - }, - "pvcsListResponse": { - "type": "object", - "properties": { - "age": { - "type": "string" - }, - "capacity": { - "type": "string" - }, - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "status": { - "type": "string" - }, - "storageClass": { - "type": "string" - }, - "tenant": { - "type": "string" - }, - "volume": { - "type": "string" - } - } - }, - "redirectRule": { - "type": "object", - "properties": { - "displayName": { - "type": "string" - }, - "redirect": { - "type": "string" - } - } - }, - "resourceQuota": { - "type": "object", - "properties": { - "elements": { - "type": "array", - "items": { - "$ref": "#/definitions/resourceQuotaElement" - } - }, - "name": { - "type": "string" - } - } - }, - "resourceQuotaElement": { - "type": "object", - "properties": { - "hard": { - "type": "integer", - "format": "int64" - }, - "name": { - "type": "string" - }, - "used": { - "type": "integer", - "format": "int64" - } - } - }, - "secret": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "optional": { - "type": "boolean" - } - } - }, - "securityContext": { - "type": "object", - "required": [ - "runAsUser", - "runAsGroup", - "runAsNonRoot" - ], - "properties": { - "fsGroup": { - "type": "string" - }, - "fsGroupChangePolicy": { - "type": "string" - }, - "runAsGroup": { - "type": "string" - }, - "runAsNonRoot": { - "type": "boolean" - }, - "runAsUser": { - "type": "string" - } - } - }, - "serverDrives": { - "type": "object", - "properties": { - "availableSpace": { - "type": "integer" - }, - "drivePath": { - "type": "string" - }, - "endpoint": { - "type": "string" - }, - "healing": { - "type": "boolean" - }, - "model": { - "type": "string" - }, - "rootDisk": { - "type": "boolean" - }, - "state": { - "type": "string" - }, - "totalSpace": { - "type": "integer" - }, - "usedSpace": { - "type": "integer" - }, - "uuid": { - "type": "string" - } - } - }, - "serverProperties": { - "type": "object", - "properties": { - "commitID": { - "type": "string" - }, - "drives": { - "type": "array", - "items": { - "$ref": "#/definitions/serverDrives" - } - }, - "endpoint": { - "type": "string" - }, - "network": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "poolNumber": { - "type": "integer" - }, - "state": { - "type": "string" - }, - "uptime": { - "type": "integer" - }, - "version": { - "type": "string" - } - } - }, - "serviceAccountToken": { - "type": "object", - "properties": { - "expirationSeconds": { - "type": "integer" - } - } - }, - "setAdministratorsRequest": { - "type": "object", - "properties": { - "group_dns": { - "type": "array", - "items": { - "type": "string" - } - }, - "user_dns": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "state": { - "type": "object", - "properties": { - "exitCode": { - "type": "integer" - }, - "finished": { - "type": "string" - }, - "message": { - "type": "string" - }, - "reason": { - "type": "string" - }, - "signal": { - "type": "integer" - }, - "started": { - "type": "string" - }, - "state": { - "type": "string" - } - } - }, - "subscriptionValidateRequest": { - "type": "object", - "properties": { - "email": { - "type": "string" - }, - "license": { - "type": "string" - }, - "password": { - "type": "string" - } - } - }, - "tenant": { - "type": "object", - "properties": { - "creation_date": { - "type": "string" - }, - "currentState": { - "type": "string" - }, - "deletion_date": { - "type": "string" - }, - "domains": { - "$ref": "#/definitions/domainsConfiguration" - }, - "encryptionEnabled": { - "type": "boolean" - }, - "endpoints": { - "type": "object", - "properties": { - "console": { - "type": "string" - }, - "minio": { - "type": "string" - } - } - }, - "idpAdEnabled": { - "type": "boolean" - }, - "idpOidcEnabled": { - "type": "boolean" - }, - "image": { - "type": "string" - }, - "minioTLS": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "pools": { - "type": "array", - "items": { - "$ref": "#/definitions/pool" - } - }, - "sftpExposed": { - "type": "boolean" - }, - "status": { - "$ref": "#/definitions/tenantStatus" - }, - "subnet_license": { - "$ref": "#/definitions/license" - }, - "tiers": { - "type": "array", - "items": { - "$ref": "#/definitions/tenantTierElement" - } - }, - "total_size": { - "type": "integer", - "format": "int64" - } - } - }, - "tenantConfigurationResponse": { - "type": "object", - "properties": { - "environmentVariables": { - "type": "array", - "items": { - "$ref": "#/definitions/environmentVariable" - } - }, - "sftpExposed": { - "type": "boolean" - } - } - }, - "tenantList": { - "type": "object", - "properties": { - "capacity": { - "type": "integer", - "format": "int64" - }, - "capacity_raw": { - "type": "integer", - "format": "int64" - }, - "capacity_raw_usage": { - "type": "integer", - "format": "int64" - }, - "capacity_usage": { - "type": "integer", - "format": "int64" - }, - "creation_date": { - "type": "string" - }, - "currentState": { - "type": "string" - }, - "deletion_date": { - "type": "string" - }, - "domains": { - "type": "object", - "$ref": "#/definitions/domainsConfiguration" - }, - "health_status": { - "type": "string" - }, - "instance_count": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "pool_count": { - "type": "integer" - }, - "tiers": { - "type": "array", - "items": { - "$ref": "#/definitions/tenantTierElement" - } - }, - "total_size": { - "type": "integer" - }, - "volume_count": { - "type": "integer" - } - } - }, - "tenantLogReport": { - "type": "object", - "properties": { - "blob": { - "type": "string" - }, - "filename": { - "type": "string" - } - } - }, - "tenantPod": { - "type": "object", - "required": [ - "name" - ], - "properties": { - "name": { - "type": "string" - }, - "node": { - "type": "string" - }, - "podIP": { - "type": "string" - }, - "restarts": { - "type": "integer" - }, - "status": { - "type": "string" - }, - "timeCreated": { - "type": "integer" - } - } - }, - "tenantResponseItem": { - "type": "object", - "properties": { - "access_key": { - "type": "string" - }, - "secret_key": { - "type": "string" - }, - "url": { - "type": "string" - } - } - }, - "tenantSecurityResponse": { - "type": "object", - "properties": { - "autoCert": { - "type": "boolean" - }, - "customCertificates": { - "type": "object", - "properties": { - "client": { - "type": "array", - "items": { - "$ref": "#/definitions/certificateInfo" - } - }, - "minio": { - "type": "array", - "items": { - "$ref": "#/definitions/certificateInfo" - } - }, - "minioCAs": { - "type": "array", - "items": { - "$ref": "#/definitions/certificateInfo" - } - } - } - }, - "securityContext": { - "type": "object", - "$ref": "#/definitions/securityContext" - } - } - }, - "tenantStatus": { - "type": "object", - "properties": { - "drives_healing": { - "type": "integer", - "format": "int32" - }, - "drives_offline": { - "type": "integer", - "format": "int32" - }, - "drives_online": { - "type": "integer", - "format": "int32" - }, - "health_status": { - "type": "string" - }, - "usage": { - "type": "object", - "properties": { - "capacity": { - "type": "integer", - "format": "int64" - }, - "capacity_usage": { - "type": "integer", - "format": "int64" - }, - "raw": { - "type": "integer", - "format": "int64" - }, - "raw_usage": { - "type": "integer", - "format": "int64" - } - } - }, - "write_quorum": { - "type": "integer", - "format": "int32" - } - } - }, - "tenantTierElement": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "size": { - "type": "integer", - "format": "int64" - }, - "type": { - "type": "string" - } - } - }, - "tenantUsage": { - "type": "object", - "properties": { - "disk_used": { - "type": "integer", - "format": "int64" - }, - "used": { - "type": "integer", - "format": "int64" - } - } - }, - "tenantYAML": { - "type": "object", - "properties": { - "yaml": { - "type": "string" - } - } - }, - "tlsConfiguration": { - "type": "object", - "properties": { - "minioCAsCertificates": { - "type": "array", - "items": { - "type": "string" - } - }, - "minioClientCertificates": { - "type": "array", - "items": { - "$ref": "#/definitions/keyPairConfiguration" - } - }, - "minioServerCertificates": { - "type": "array", - "items": { - "$ref": "#/definitions/keyPairConfiguration" - } - } - } - }, - "toleration": { - "type": "object", - "properties": { - "effect": { - "type": "string" - }, - "key": { - "type": "string" - }, - "operator": { - "type": "string" - }, - "tolerationSeconds": { - "type": "integer" - }, - "value": { - "type": "string" - } - } - }, - "updateDomainsRequest": { - "type": "object", - "properties": { - "domains": { - "$ref": "#/definitions/domainsConfiguration" - } - } - }, - "updateTenantConfigurationRequest": { - "type": "object", - "properties": { - "environmentVariables": { - "type": "array", - "items": { - "$ref": "#/definitions/environmentVariable" - } - }, - "keysToBeDeleted": { - "type": "array", - "items": { - "type": "string" - } - }, - "sftpExposed": { - "type": "boolean" - } - } - }, - "updateTenantRequest": { - "type": "object", - "properties": { - "image": { - "type": "string", - "pattern": "^((.*?)/(.*?):(.+))$" - }, - "image_pull_secret": { - "type": "string" - }, - "image_registry": { - "$ref": "#/definitions/imageRegistry" - }, - "sftpExposed": { - "type": "boolean" - } - } - }, - "updateTenantSecurityRequest": { - "type": "object", - "properties": { - "autoCert": { - "type": "boolean" - }, - "customCertificates": { - "type": "object", - "properties": { - "minioCAsCertificates": { - "type": "array", - "items": { - "type": "string" - } - }, - "minioClientCertificates": { - "type": "array", - "items": { - "$ref": "#/definitions/keyPairConfiguration" - } - }, - "minioServerCertificates": { - "type": "array", - "items": { - "$ref": "#/definitions/keyPairConfiguration" - } - }, - "secretsToBeDeleted": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "securityContext": { - "type": "object", - "$ref": "#/definitions/securityContext" - } - } - }, - "vaultConfiguration": { - "type": "object", - "required": [ - "endpoint", - "approle" - ], - "properties": { - "approle": { - "type": "object", - "required": [ - "id", - "secret" - ], - "properties": { - "engine": { - "type": "string" - }, - "id": { - "type": "string" - }, - "retry": { - "type": "integer", - "format": "int64" - }, - "secret": { - "type": "string" - } - } - }, - "endpoint": { - "type": "string" - }, - "engine": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "prefix": { - "type": "string" - }, - "status": { - "type": "object", - "properties": { - "ping": { - "type": "integer", - "format": "int64" - } - } - } - } - }, - "vaultConfigurationResponse": { - "type": "object", - "required": [ - "endpoint", - "approle" - ], - "properties": { - "approle": { - "type": "object", - "required": [ - "id", - "secret" - ], - "properties": { - "engine": { - "type": "string" - }, - "id": { - "type": "string" - }, - "retry": { - "type": "integer", - "format": "int64" - }, - "secret": { - "type": "string" - } - } - }, - "endpoint": { - "type": "string" - }, - "engine": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "prefix": { - "type": "string" - }, - "status": { - "type": "object", - "properties": { - "ping": { - "type": "integer", - "format": "int64" - } - } - } - } - }, - "volume": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "projected": { - "$ref": "#/definitions/projectedVolume" - }, - "pvc": { - "$ref": "#/definitions/pvc" - } - } - } - }, - "securityDefinitions": { - "key": { - "type": "oauth2", - "flow": "accessCode", - "authorizationUrl": "http://min.io", - "tokenUrl": "http://min.io" - } - }, - "security": [ - { - "key": [] - } - ] -}`)) -} diff --git a/api/encryption-handlers.go b/api/encryption-handlers.go deleted file mode 100644 index 986e5324adb..00000000000 --- a/api/encryption-handlers.go +++ /dev/null @@ -1,1206 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "crypto" - "encoding/base64" - "encoding/hex" - "encoding/json" - "errors" - "fmt" - "regexp" - "strconv" - "strings" - "time" - - "github.com/go-openapi/runtime/middleware" - "github.com/minio/operator/api/operations" - "github.com/minio/operator/api/operations/operator_api" - "github.com/minio/operator/models" - miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - "github.com/minio/operator/pkg/kes" - "golang.org/x/mod/semver" - "gopkg.in/yaml.v2" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -const ( - // miniov2 will mount the mTLSCertificates in the following paths - // therefore we set these values in the KES yaml kesConfiguration - mTLSClientCrtPath = "/tmp/kes/client.crt" - mTLSClientKeyPath = "/tmp/kes/client.key" - mTLSClientCaPath = "/tmp/kes/ca.crt" - // if encryption is enabled and encryption is configured to use Vault - defaultPing = 10 // default ping - // imageTagWithArchRegex is a regular expression to identify if a KES tag - // includes the arch as suffix, ie: 2023-05-02T22-48-10Z-arm64 - kesImageTagWithArchRegexPattern = `(\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2}Z)(-.*)` -) - -const ( - // KesConfigVersion1 identifier v1 - // For KES releases before 2023-04-03T16-41-28Z and versions below v0.20.0 - KesConfigVersion1 = "v1" - // KesConfigVersion2 identifier v2 - // For KES releases after 2023-04-03T16-41-28Z and versions above v0.20.0 - // This corresponds to the rename of the `keys` sections to `keystore` in the kes server-config.yaml and some more fields added. - // See https://github.com/minio/kes/pull/342 - KesConfigVersion2 = "v2" - // KesConfigVersion3 identifier v3. - // For KES releases after 2023-11-09T17-35-47Z - // This corresponds to the deprecation of the `--key`, `--cert` and `--auth` kes command arguments. - // See https://github.com/minio/kes/pull/414 - KesConfigVersion3 = "v3" -) - -// KesConfigVersionsMap is a map of kes config version types -var KesConfigVersionsMap = map[string]interface{}{ - KesConfigVersion1: kes.ServerConfigV1{}, - KesConfigVersion2: kes.ServerConfigV2{}, - KesConfigVersion3: kes.ServerConfigV2{}, -} - -type configVersion func(clientCrtIdentity string, encryptionCfg *models.EncryptionConfiguration, mTLSCertificates map[string][]byte) ([]byte, error) - -func registerEncryptionHandlers(api *operations.OperatorAPI) { - // Get Tenant Encryption Configuration - api.OperatorAPITenantEncryptionInfoHandler = operator_api.TenantEncryptionInfoHandlerFunc(func(params operator_api.TenantEncryptionInfoParams, session *models.Principal) middleware.Responder { - configuration, err := getTenantEncryptionInfoResponse(session, params) - if err != nil { - return operator_api.NewTenantEncryptionInfoDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewTenantEncryptionInfoOK().WithPayload(configuration) - }) - // Update Tenant Encryption Configuration - api.OperatorAPITenantUpdateEncryptionHandler = operator_api.TenantUpdateEncryptionHandlerFunc(func(params operator_api.TenantUpdateEncryptionParams, session *models.Principal) middleware.Responder { - err := getTenantUpdateEncryptionResponse(session, params) - if err != nil { - return operator_api.NewTenantUpdateEncryptionDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewTenantUpdateEncryptionCreated() - }) - // Delete tenant Encryption Configuration - api.OperatorAPITenantDeleteEncryptionHandler = operator_api.TenantDeleteEncryptionHandlerFunc(func(params operator_api.TenantDeleteEncryptionParams, session *models.Principal) middleware.Responder { - err := getTenantDeleteEncryptionResponse(session, params) - if err != nil { - return operator_api.NewTenantDeleteEncryptionDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewTenantDeleteEncryptionNoContent() - }) -} - -// getTenantEncryptionResponse is a wrapper for tenantEncryptionInfo -func getTenantEncryptionInfoResponse(session *models.Principal, params operator_api.TenantEncryptionInfoParams) (*models.EncryptionConfigurationResponse, *models.Error) { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - // get Kubernetes Client - clientSet, err := K8sClient(session.STSSessionToken) - if err != nil { - return nil, ErrorWithContext(ctx, err, ErrEncryptionConfigNotFound) - } - k8sClient := k8sClient{ - client: clientSet, - } - opClientClientSet, err := GetOperatorClient(session.STSSessionToken) - if err != nil { - return nil, ErrorWithContext(ctx, err, ErrEncryptionConfigNotFound) - } - opClient := operatorClient{ - client: opClientClientSet, - } - configuration, err := tenantEncryptionInfo(ctx, &opClient, &k8sClient, params.Namespace, params) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - return configuration, nil -} - -// getTenantUpdateEncryptionResponse is a wrapper for tenantUpdateEncryption -func getTenantUpdateEncryptionResponse(session *models.Principal, params operator_api.TenantUpdateEncryptionParams) *models.Error { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - // get Kubernetes Client - clientSet, err := K8sClient(session.STSSessionToken) - if err != nil { - return ErrorWithContext(ctx, err, ErrUpdatingEncryptionConfig) - } - k8sClient := k8sClient{ - client: clientSet, - } - opClientClientSet, err := GetOperatorClient(session.STSSessionToken) - if err != nil { - return ErrorWithContext(ctx, err, ErrUpdatingEncryptionConfig) - } - opClient := operatorClient{ - client: opClientClientSet, - } - if err := tenantUpdateEncryption(ctx, &opClient, &k8sClient, params.Namespace, params); err != nil { - return ErrorWithContext(ctx, err, ErrUpdatingEncryptionConfig) - } - return nil -} - -// getTenantDeleteEncryptionResponse is a wrapper for tenantDeleteEncryption -func getTenantDeleteEncryptionResponse(session *models.Principal, params operator_api.TenantDeleteEncryptionParams) *models.Error { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - opClientClientSet, err := GetOperatorClient(session.STSSessionToken) - if err != nil { - return ErrorWithContext(ctx, err, ErrDeletingEncryptionConfig) - } - opClient := operatorClient{ - client: opClientClientSet, - } - if err := tenantDeleteEncryption(ctx, &opClient, params.Namespace, params); err != nil { - return ErrorWithContext(ctx, err, ErrDeletingEncryptionConfig) - } - return nil -} - -// tenantDeleteEncryption allow user to disable tenant encryption for a particular tenant -func tenantDeleteEncryption(ctx context.Context, operatorClient OperatorClientI, namespace string, params operator_api.TenantDeleteEncryptionParams) error { - tenantName := params.Tenant - tenant, err := operatorClient.TenantGet(ctx, namespace, tenantName, metav1.GetOptions{}) - if err != nil { - return err - } - tenant.EnsureDefaults() - tenant.Spec.KES = nil - _, err = operatorClient.TenantUpdate(ctx, tenant, metav1.UpdateOptions{}) - if err != nil { - return err - } - return nil -} - -// tenantUpdateEncryption allow user to update KES server certificates, KES client certificates (used by MinIO for mTLS) and KES configuration (KMS configuration, credentials, etc) -func tenantUpdateEncryption(ctx context.Context, operatorClient OperatorClientI, clientSet K8sClientI, namespace string, params operator_api.TenantUpdateEncryptionParams) error { - tenantName := params.Tenant - secretName := fmt.Sprintf("%s-secret", tenantName) - tenant, err := operatorClient.TenantGet(ctx, namespace, tenantName, metav1.GetOptions{}) - body := params.Body - if err != nil { - return err - } - tenant.EnsureDefaults() - // Initialize KES configuration if not present - if !tenant.HasKESEnabled() { - tenant.Spec.KES = &miniov2.KESConfig{} - } - if tenant.KESExternalCert() { - for _, certificateToBeDeleted := range params.Body.SecretsToBeDeleted { - if tenant.Spec.KES.ExternalCertSecret.Name == certificateToBeDeleted { - tenant.Spec.KES.ExternalCertSecret = nil - break - } - } - } - if tenant.ExternalClientCert() { - for _, certificateToBeDeleted := range params.Body.SecretsToBeDeleted { - if tenant.Spec.ExternalClientCertSecret.Name == certificateToBeDeleted { - tenant.Spec.ExternalClientCertSecret = nil - break - } - } - } - if body.ServerTLS != nil { - kesExternalCertSecretName := fmt.Sprintf("%s-kes-external-cert", secretName) - if tenant.KESExternalCert() { - kesExternalCertSecretName = tenant.Spec.KES.ExternalCertSecret.Name - } - // update certificates - certificates := []*models.KeyPairConfiguration{body.ServerTLS} - createdCertificates, err := createOrReplaceExternalCertSecrets(ctx, clientSet, namespace, certificates, kesExternalCertSecretName, tenantName) - if err != nil { - return err - } - if len(createdCertificates) > 0 { - tenant.Spec.KES.ExternalCertSecret = createdCertificates[0] - } - } - if body.MinioMtls != nil { - tenantExternalClientCertSecretName := fmt.Sprintf("%s-tenant-external-client-cert", secretName) - if tenant.ExternalClientCert() { - tenantExternalClientCertSecretName = tenant.Spec.ExternalClientCertSecret.Name - } - // Update certificates - certificates := []*models.KeyPairConfiguration{body.MinioMtls} - createdCertificates, err := createOrReplaceExternalCertSecrets(ctx, clientSet, namespace, certificates, tenantExternalClientCertSecretName, tenantName) - if err != nil { - return err - } - if len(createdCertificates) > 0 { - tenant.Spec.ExternalClientCertSecret = createdCertificates[0] - } - } - // update KES identities in kes-configuration.yaml secret - kesConfigurationSecretName := fmt.Sprintf("%s-kes-configuration", secretName) - kesClientCertSecretName := fmt.Sprintf("%s-kes-client-cert", secretName) - image := params.Body.Image - if image == "" { - image = miniov2.DefaultKESImage - } - tenant.Spec.KES.Image = image - kesConfigurationSecret, kesClientCertSecret, err := createOrReplaceKesConfigurationSecrets(ctx, clientSet, namespace, body, kesConfigurationSecretName, kesClientCertSecretName, tenantName, tenant.Spec.KES.Image) - if err != nil { - return err - } - tenant.Spec.KES.Configuration = kesConfigurationSecret - tenant.Spec.KES.ClientCertSecret = kesClientCertSecret - i, err := strconv.ParseInt(params.Body.Replicas, 10, 32) - if err != nil { - return err - } - tenant.Spec.KES.Replicas = int32(i) - tenant.Spec.KES.SecurityContext, err = convertModelSCToK8sSC(params.Body.SecurityContext) - if err != nil { - return err - } - _, err = operatorClient.TenantUpdate(ctx, tenant, metav1.UpdateOptions{}) - return err -} - -// tenantEncryptionInfo retrieves encryption information for the current tenant -func tenantEncryptionInfo(ctx context.Context, operatorClient OperatorClientI, clientSet K8sClientI, namespace string, params operator_api.TenantEncryptionInfoParams) (*models.EncryptionConfigurationResponse, error) { - tenantName := params.Tenant - tenant, err := operatorClient.TenantGet(ctx, namespace, tenantName, metav1.GetOptions{}) - if err != nil { - return nil, err - } - // Check if encryption is enabled for MinIO via KES - if tenant.HasKESEnabled() { - encryptConfig := &models.EncryptionConfigurationResponse{ - Image: tenant.Spec.KES.Image, - Replicas: fmt.Sprintf("%d", tenant.Spec.KES.Replicas), - } - if tenant.Spec.KES.Image == "" { - encryptConfig.Image = miniov2.GetTenantKesImage() - } - if tenant.Spec.KES.SecurityContext != nil { - encryptConfig.SecurityContext = convertK8sSCToModelSC(tenant.Spec.KES.SecurityContext) - } - if tenant.KESExternalCert() { - kesExternalCerts, err := parseTenantCertificates(ctx, clientSet, tenant.Namespace, []*miniov2.LocalCertificateReference{tenant.Spec.KES.ExternalCertSecret}) - if err != nil { - return nil, err - } - if len(kesExternalCerts) > 0 { - encryptConfig.ServerTLS = kesExternalCerts[0] - } - } - if tenant.ExternalClientCert() { - clientCerts, err := parseTenantCertificates(ctx, clientSet, tenant.Namespace, []*miniov2.LocalCertificateReference{tenant.Spec.ExternalClientCertSecret}) - if err != nil { - return nil, err - } - if len(clientCerts) > 0 { - encryptConfig.MinioMtls = clientCerts[0] - } - } - - if tenant.Spec.KES.Configuration != nil { - configSecret, err := clientSet.getSecret(ctx, tenant.Namespace, tenant.Spec.KES.Configuration.Name, metav1.GetOptions{}) - if err != nil { - return nil, err - } - if rawConfiguration, ok := configSecret.Data["server-config.yaml"]; ok { - kesConfigVersion, err := GetKesConfigVersion(encryptConfig.Image) - if err != nil { - return nil, err - } - // return raw configuration in case the user wants to edit KES configuration manually - switch kesConfigVersion { - case KesConfigVersion1: - err := getConfigurationResponseFromV1(ctx, clientSet, rawConfiguration, tenant, encryptConfig) - if err != nil { - return nil, err - } - case KesConfigVersion2: - err := getConfigurationResponseFromV2(ctx, clientSet, rawConfiguration, tenant, encryptConfig) - if err != nil { - return nil, err - } - default: - err := getConfigurationResponseFromV2(ctx, clientSet, rawConfiguration, tenant, encryptConfig) - if err != nil { - return nil, err - } - } - } - } - return encryptConfig, nil - } - return nil, ErrEncryptionConfigNotFound -} - -// getConfigurationResponseFromV2 hidrates EncryptionConfigurationResponse struct from ServerConfigV1 -func getConfigurationResponseFromV1(ctx context.Context, clientSet K8sClientI, rawConfiguration []byte, tenant *miniov2.Tenant, encryptConfig *models.EncryptionConfigurationResponse) error { - kesConfiguration := &kes.ServerConfigV1{} - encryptConfig.Raw = string(rawConfiguration) - err := yaml.Unmarshal(rawConfiguration, kesConfiguration) - if err != nil { - return err - } - if kesConfiguration.Keys.Vault != nil { - vault := kesConfiguration.Keys.Vault - vaultConfig := &models.VaultConfigurationResponse{ - Prefix: vault.Prefix, - Namespace: vault.Namespace, - Engine: vault.EnginePath, - Endpoint: &vault.Endpoint, - } - if vault.Status != nil { - vaultConfig.Status = &models.VaultConfigurationResponseStatus{ - Ping: int64(vault.Status.Ping.Seconds()), - } - } - if vault.AppRole != nil { - vaultConfig.Approle = &models.VaultConfigurationResponseApprole{ - Engine: vault.AppRole.EnginePath, - ID: &vault.AppRole.ID, - Retry: int64(vault.AppRole.Retry.Seconds()), - Secret: &vault.AppRole.Secret, - } - } - if tenant.KESClientCert() { - encryptConfig.KmsMtls = &models.EncryptionConfigurationResponseAO1KmsMtls{} - clientSecretName := tenant.Spec.KES.ClientCertSecret.Name - keyPair, err := clientSet.getSecret(ctx, tenant.Namespace, clientSecretName, metav1.GetOptions{}) - if err != nil { - return err - } - // Extract client public certificate - if rawCert, ok := keyPair.Data["client.crt"]; ok { - encryptConfig.KmsMtls.Crt, err = parseCertificate(clientSecretName, rawCert) - if err != nil { - return err - } - } - // Extract client ca certificate - if rawCert, ok := keyPair.Data["ca.crt"]; ok { - encryptConfig.KmsMtls.Ca, err = parseCertificate(clientSecretName, rawCert) - if err != nil { - return err - } - } - } - encryptConfig.Vault = vaultConfig - } - if kesConfiguration.Keys.Aws != nil { - awsJSON, err := json.Marshal(kesConfiguration.Keys.Aws) - if err != nil { - return err - } - awsConfig := &models.AwsConfiguration{} - err = json.Unmarshal(awsJSON, awsConfig) - if err != nil { - return err - } - encryptConfig.Aws = awsConfig - } - if kesConfiguration.Keys.Gcp != nil { - gcpJSON, err := json.Marshal(kesConfiguration.Keys.Gcp) - if err != nil { - return err - } - gcpConfig := &models.GcpConfiguration{} - err = json.Unmarshal(gcpJSON, gcpConfig) - if err != nil { - return err - } - encryptConfig.Gcp = gcpConfig - } - if kesConfiguration.Keys.Gemalto != nil { - gemalto := kesConfiguration.Keys.Gemalto - gemaltoConfig := &models.GemaltoConfigurationResponse{ - Keysecure: &models.GemaltoConfigurationResponseKeysecure{}, - } - if gemalto.KeySecure != nil { - gemaltoConfig.Keysecure.Endpoint = &gemalto.KeySecure.Endpoint - if gemalto.KeySecure.Credentials != nil { - gemaltoConfig.Keysecure.Credentials = &models.GemaltoConfigurationResponseKeysecureCredentials{ - Domain: &gemalto.KeySecure.Credentials.Domain, - Retry: int64(gemalto.KeySecure.Credentials.Retry.Seconds()), - Token: &gemalto.KeySecure.Credentials.Token, - } - } - if gemalto.KeySecure.TLS != nil { - if tenant.KESClientCert() { - encryptConfig.KmsMtls = &models.EncryptionConfigurationResponseAO1KmsMtls{} - clientSecretName := tenant.Spec.KES.ClientCertSecret.Name - keyPair, err := clientSet.getSecret(ctx, tenant.Namespace, clientSecretName, metav1.GetOptions{}) - if err != nil { - return err - } - // Extract client ca certificate - if rawCert, ok := keyPair.Data["ca.crt"]; ok { - encryptConfig.KmsMtls.Ca, err = parseCertificate(clientSecretName, rawCert) - if err != nil { - return err - } - } - } - } - } - encryptConfig.Gemalto = gemaltoConfig - } - if kesConfiguration.Keys.Azure != nil { - azureJSON, err := json.Marshal(kesConfiguration.Keys.Azure) - if err != nil { - return err - } - azureConfig := &models.AzureConfiguration{} - err = json.Unmarshal(azureJSON, azureConfig) - if err != nil { - return err - } - encryptConfig.Azure = azureConfig - } - if kesConfiguration.Policies != nil { - encryptConfig.Policies = kesConfiguration.Policies - } - return nil -} - -// getConfigurationResponseFromV2 hidrates EncryptionConfigurationResponse struct from ServerConfigV2 -func getConfigurationResponseFromV2(ctx context.Context, clientSet K8sClientI, rawConfiguration []byte, tenant *miniov2.Tenant, encryptConfig *models.EncryptionConfigurationResponse) error { - kesConfiguration := &kes.ServerConfigV2{} - encryptConfig.Raw = string(rawConfiguration) - err := yaml.Unmarshal(rawConfiguration, kesConfiguration) - if err != nil { - return err - } - if kesConfiguration.Keystore.Vault != nil { - vault := kesConfiguration.Keystore.Vault - vaultConfig := &models.VaultConfigurationResponse{ - Prefix: vault.Prefix, - Namespace: vault.Namespace, - Engine: vault.EnginePath, - Endpoint: &vault.Endpoint, - } - if vault.Status != nil { - vaultConfig.Status = &models.VaultConfigurationResponseStatus{ - Ping: int64(vault.Status.Ping.Seconds()), - } - } - if vault.AppRole != nil { - vaultConfig.Approle = &models.VaultConfigurationResponseApprole{ - Engine: vault.AppRole.EnginePath, - ID: &vault.AppRole.ID, - Retry: int64(vault.AppRole.Retry.Seconds()), - Secret: &vault.AppRole.Secret, - } - } - if tenant.KESClientCert() { - encryptConfig.KmsMtls = &models.EncryptionConfigurationResponseAO1KmsMtls{} - clientSecretName := tenant.Spec.KES.ClientCertSecret.Name - keyPair, err := clientSet.getSecret(ctx, tenant.Namespace, clientSecretName, metav1.GetOptions{}) - if err != nil { - return err - } - // Extract client public certificate - if rawCert, ok := keyPair.Data["client.crt"]; ok { - encryptConfig.KmsMtls.Crt, err = parseCertificate(clientSecretName, rawCert) - if err != nil { - return err - } - } - // Extract client ca certificate - if rawCert, ok := keyPair.Data["ca.crt"]; ok { - encryptConfig.KmsMtls.Ca, err = parseCertificate(clientSecretName, rawCert) - if err != nil { - return err - } - } - } - encryptConfig.Vault = vaultConfig - } - if kesConfiguration.Keystore.Aws != nil { - awsJSON, err := json.Marshal(kesConfiguration.Keystore.Aws) - if err != nil { - return err - } - awsConfig := &models.AwsConfiguration{} - err = json.Unmarshal(awsJSON, awsConfig) - if err != nil { - return err - } - encryptConfig.Aws = awsConfig - } - if kesConfiguration.Keystore.Gcp != nil { - gcpJSON, err := json.Marshal(kesConfiguration.Keystore.Gcp) - if err != nil { - return err - } - gcpConfig := &models.GcpConfiguration{} - err = json.Unmarshal(gcpJSON, gcpConfig) - if err != nil { - return err - } - encryptConfig.Gcp = gcpConfig - } - if kesConfiguration.Keystore.Gemalto != nil { - gemalto := kesConfiguration.Keystore.Gemalto - gemaltoConfig := &models.GemaltoConfigurationResponse{ - Keysecure: &models.GemaltoConfigurationResponseKeysecure{}, - } - if gemalto.KeySecure != nil { - gemaltoConfig.Keysecure.Endpoint = &gemalto.KeySecure.Endpoint - if gemalto.KeySecure.Credentials != nil { - gemaltoConfig.Keysecure.Credentials = &models.GemaltoConfigurationResponseKeysecureCredentials{ - Domain: &gemalto.KeySecure.Credentials.Domain, - Retry: int64(gemalto.KeySecure.Credentials.Retry.Seconds()), - Token: &gemalto.KeySecure.Credentials.Token, - } - } - if gemalto.KeySecure.TLS != nil { - if tenant.KESClientCert() { - encryptConfig.KmsMtls = &models.EncryptionConfigurationResponseAO1KmsMtls{} - clientSecretName := tenant.Spec.KES.ClientCertSecret.Name - keyPair, err := clientSet.getSecret(ctx, tenant.Namespace, clientSecretName, metav1.GetOptions{}) - if err != nil { - return err - } - // Extract client ca certificate - if rawCert, ok := keyPair.Data["ca.crt"]; ok { - encryptConfig.KmsMtls.Ca, err = parseCertificate(clientSecretName, rawCert) - if err != nil { - return err - } - } - } - } - } - encryptConfig.Gemalto = gemaltoConfig - } - if kesConfiguration.Keystore.Azure != nil { - azureJSON, err := json.Marshal(kesConfiguration.Keystore.Azure) - if err != nil { - return err - } - azureConfig := &models.AzureConfiguration{} - err = json.Unmarshal(azureJSON, azureConfig) - if err != nil { - return err - } - encryptConfig.Azure = azureConfig - } - if kesConfiguration.Policies != nil { - encryptConfig.Policies = kesConfiguration.Policies - } - return nil -} - -// getKESConfiguration will generate the KES server certificate secrets, the tenant client secrets for mTLS authentication between MinIO and KES and the -// kes-configuration.yaml file used by the KES service (how to connect to the external KMS, eg: Vault, AWS, Gemalto, etc) -func getKESConfiguration(ctx context.Context, clientSet K8sClientI, ns string, encryptionCfg *models.EncryptionConfiguration, secretName, tenantName string) (kesConfiguration *miniov2.KESConfig, err error) { - // Secrets used by the KES service - // - // kesExternalCertSecretName is the name of the secret that will store the certificates for TLS in the KES server, eg: server.key and server.crt - kesExternalCertSecretName := fmt.Sprintf("%s-kes-external-cert", secretName) - // kesClientCertSecretName is the name of the secret that will store the certificates for mTLS between KES and the KMS, eg: mTLS with Vault or Gemalto KMS - kesClientCertSecretName := fmt.Sprintf("%s-kes-client-cert", secretName) - // kesConfigurationSecretName is the name of the secret that will store the configuration file, eg: kes-configuration.yaml - kesConfigurationSecretName := fmt.Sprintf("%s-kes-configuration", secretName) - - kesConfiguration = &miniov2.KESConfig{ - Image: KESImageVersion, - Replicas: 1, - } - // Using custom image for KES - if encryptionCfg.Image != "" { - kesConfiguration.Image = encryptionCfg.Image - } - // Using custom replicas for KES - if encryptionCfg.Replicas != "" { - replicas, errReplicas := strconv.Atoi(encryptionCfg.Replicas) - if errReplicas != nil { - kesConfiguration.Replicas = int32(replicas) - } - } - // Generate server certificates for KES - if encryptionCfg.ServerTLS != nil { - certificates := []*models.KeyPairConfiguration{encryptionCfg.ServerTLS} - certificateSecrets, err := createOrReplaceExternalCertSecrets(ctx, clientSet, ns, certificates, kesExternalCertSecretName, tenantName) - if err != nil { - return nil, err - } - if len(certificateSecrets) > 0 { - // External TLS certificates used by KES - kesConfiguration.ExternalCertSecret = certificateSecrets[0] - } - } - // Prepare kesConfiguration for KES - serverConfigSecret, clientCertSecret, err := createOrReplaceKesConfigurationSecrets(ctx, clientSet, ns, encryptionCfg, kesConfigurationSecretName, kesClientCertSecretName, tenantName, kesConfiguration.Image) - if err != nil { - return nil, err - } - // Configuration used by KES - kesConfiguration.Configuration = serverConfigSecret - kesConfiguration.ClientCertSecret = clientCertSecret - - return kesConfiguration, nil -} - -func createOrReplaceKesConfigurationSecrets(ctx context.Context, clientSet K8sClientI, ns string, encryptionCfg *models.EncryptionConfiguration, kesConfigurationSecretName, kesClientCertSecretName, tenantName string, image string) (*corev1.LocalObjectReference, *miniov2.LocalCertificateReference, error) { - // if autoCert is enabled then Operator will generate the client certificates, calculate the client cert identity - // and pass it to KES via the ${MINIO_KES_IDENTITY} variable - clientCrtIdentity := "${MINIO_KES_IDENTITY}" - // If a client certificate is provided proceed to calculate the identity - if encryptionCfg.MinioMtls != nil { - // Client certificate for KES used by Minio to mTLS - clientTLSCrt, err := base64.StdEncoding.DecodeString(*encryptionCfg.MinioMtls.Crt) - if err != nil { - return nil, nil, err - } - // Calculate the client cert identity based on the clientTLSCrt - h := crypto.SHA256.New() - certificate, err := kes.ParseCertificate(clientTLSCrt) - if err != nil { - return nil, nil, err - } - h.Write(certificate.RawSubjectPublicKeyInfo) - clientCrtIdentity = hex.EncodeToString(h.Sum(nil)) - } - - // map to hold mTLSCertificates for KES mTLS against Vault - mTLSCertificates := map[string][]byte{} - - imm := true - // if mTLSCertificates contains elements we create the kubernetes secret - var clientCertSecretReference *miniov2.LocalCertificateReference - var serverRawConfig []byte - var err error - - if encryptionCfg.Raw != "" { - serverRawConfig = []byte(encryptionCfg.Raw) - // verify provided configuration is in valid YAML format - - cv, err := GetKesConfigVersion(image) - if err != nil { - return nil, nil, err - } - configType := KesConfigVersionsMap[cv] - err = yaml.Unmarshal(serverRawConfig, &configType) - if err != nil { - return nil, nil, err - } - } else { - - // Identify which method use to generate the KES config YAML - // Based on the KES Image name - kesConfigMethodVersion, err := getKesConfigMethod(image) - if err != nil { - return nil, nil, err - } - // Invoke the resulting kes config method - serverRawConfig, err = kesConfigMethodVersion(clientCrtIdentity, encryptionCfg, mTLSCertificates) - if err != nil { - return nil, nil, err - } - } - - if len(mTLSCertificates) > 0 { - // delete KES client cert secret only if new client certificates are provided - if err := clientSet.deleteSecret(ctx, ns, kesClientCertSecretName, metav1.DeleteOptions{}); err != nil { - // log the errors if any and continue - LogError("deleting secret name %s failed: %v, continuing..", kesClientCertSecretName, err) - } - // Secret to store KES mTLS kesConfiguration to authenticate against a KMS - kesClientCertSecret := corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: kesClientCertSecretName, - Labels: map[string]string{ - miniov2.TenantLabel: tenantName, - }, - }, - Immutable: &imm, - Data: mTLSCertificates, - } - _, err := clientSet.createSecret(ctx, ns, &kesClientCertSecret, metav1.CreateOptions{}) - if err != nil { - return nil, nil, err - } - // kubernetes generic secret - clientCertSecretReference = &miniov2.LocalCertificateReference{ - Name: kesClientCertSecretName, - } - } - - // delete KES configuration secret if exists - if err := clientSet.deleteSecret(ctx, ns, kesConfigurationSecretName, metav1.DeleteOptions{}); err != nil { - // log the errors if any and continue - LogError("deleting secret name %s failed: %v, continuing..", kesConfigurationSecretName, err) - } - - // Secret to store KES server kesConfiguration - kesConfigurationSecret := corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: kesConfigurationSecretName, - Labels: map[string]string{ - miniov2.TenantLabel: tenantName, - }, - }, - Immutable: &imm, - Data: map[string][]byte{ - "server-config.yaml": serverRawConfig, - }, - } - _, err = clientSet.createSecret(ctx, ns, &kesConfigurationSecret, metav1.CreateOptions{}) - return &corev1.LocalObjectReference{ - Name: kesConfigurationSecretName, - }, clientCertSecretReference, err -} - -func createKesConfigV1(clientCrtIdentity string, encryptionCfg *models.EncryptionConfiguration, mTLSCertificates map[string][]byte) ([]byte, error) { - // Default kesConfiguration for KES - kesConfig := &kes.ServerConfigV1{ - Addr: "0.0.0.0:7373", - Root: "disabled", - TLS: kes.TLS{ - KeyPath: "/tmp/kes/server.key", - CertPath: "/tmp/kes/server.crt", - }, - Policies: map[string]kes.Policy{ - "default-policy": { - Paths: []string{ - "/v1/key/create/my-minio-key", - "/v1/key/generate/my-minio-key", - "/v1/key/decrypt/my-minio-key", - }, - Identities: []kes.Identity{ - kes.Identity(clientCrtIdentity), - }, - }, - }, - Cache: kes.Cache{ - Expiry: &kes.Expiry{ - Any: 5 * time.Minute, - Unused: 20 * time.Second, - }, - }, - Log: kes.Log{ - Error: "on", - Audit: "off", - }, - Keys: kes.Keys{}, - } - switch { - case encryptionCfg.Vault != nil: - ping := defaultPing - if encryptionCfg.Vault.Status != nil { - ping = int(encryptionCfg.Vault.Status.Ping) - } - // Initialize Vault Config - kesConfig.Keys.Vault = &kes.Vault{ - Endpoint: *encryptionCfg.Vault.Endpoint, - EnginePath: encryptionCfg.Vault.Engine, - Namespace: encryptionCfg.Vault.Namespace, - Prefix: encryptionCfg.Vault.Prefix, - Status: &kes.VaultStatus{ - Ping: time.Duration(ping) * time.Second, - }, - } - // Vault AppRole credentials - if encryptionCfg.Vault.Approle != nil { - retry := encryptionCfg.Vault.Approle.Retry - kesConfig.Keys.Vault.AppRole = &kes.AppRole{ - EnginePath: encryptionCfg.Vault.Approle.Engine, - ID: *encryptionCfg.Vault.Approle.ID, - Secret: *encryptionCfg.Vault.Approle.Secret, - Retry: time.Duration(retry) * time.Second, - } - } else { - return nil, errors.New("approle credentials missing for kes") - } - // Vault mTLS kesConfiguration - if encryptionCfg.KmsMtls != nil { - vaultTLSConfig := encryptionCfg.KmsMtls - kesConfig.Keys.Vault.TLS = &kes.VaultTLS{} - if vaultTLSConfig.Crt != "" { - clientCrt, err := base64.StdEncoding.DecodeString(vaultTLSConfig.Crt) - if err != nil { - return nil, err - } - mTLSCertificates["client.crt"] = clientCrt - kesConfig.Keys.Vault.TLS.CertPath = mTLSClientCrtPath - } - if vaultTLSConfig.Key != "" { - clientKey, err := base64.StdEncoding.DecodeString(vaultTLSConfig.Key) - if err != nil { - return nil, err - } - mTLSCertificates["client.key"] = clientKey - kesConfig.Keys.Vault.TLS.KeyPath = mTLSClientKeyPath - } - if vaultTLSConfig.Ca != "" { - caCrt, err := base64.StdEncoding.DecodeString(vaultTLSConfig.Ca) - if err != nil { - return nil, err - } - mTLSCertificates["ca.crt"] = caCrt - kesConfig.Keys.Vault.TLS.CAPath = mTLSClientCaPath - } - } - case encryptionCfg.Aws != nil: - // Initialize AWS - kesConfig.Keys.Aws = &kes.Aws{ - SecretsManager: &kes.AwsSecretManager{}, - } - // AWS basic kesConfiguration - if encryptionCfg.Aws.Secretsmanager != nil { - kesConfig.Keys.Aws.SecretsManager.Endpoint = *encryptionCfg.Aws.Secretsmanager.Endpoint - kesConfig.Keys.Aws.SecretsManager.Region = *encryptionCfg.Aws.Secretsmanager.Region - kesConfig.Keys.Aws.SecretsManager.KmsKey = encryptionCfg.Aws.Secretsmanager.Kmskey - // AWS credentials - if encryptionCfg.Aws.Secretsmanager.Credentials != nil { - kesConfig.Keys.Aws.SecretsManager.Login = &kes.AwsSecretManagerLogin{ - AccessKey: *encryptionCfg.Aws.Secretsmanager.Credentials.Accesskey, - SecretKey: *encryptionCfg.Aws.Secretsmanager.Credentials.Secretkey, - SessionToken: encryptionCfg.Aws.Secretsmanager.Credentials.Token, - } - } - } - case encryptionCfg.Gemalto != nil: - // Initialize Gemalto - kesConfig.Keys.Gemalto = &kes.Gemalto{ - KeySecure: &kes.GemaltoKeySecure{}, - } - // Gemalto Configuration - if encryptionCfg.Gemalto.Keysecure != nil { - kesConfig.Keys.Gemalto.KeySecure.Endpoint = *encryptionCfg.Gemalto.Keysecure.Endpoint - // Gemalto TLS kesConfiguration - if encryptionCfg.KmsMtls != nil { - if encryptionCfg.KmsMtls.Ca != "" { - caCrt, err := base64.StdEncoding.DecodeString(encryptionCfg.KmsMtls.Ca) - if err != nil { - return nil, err - } - mTLSCertificates["ca.crt"] = caCrt - kesConfig.Keys.Gemalto.KeySecure.TLS = &kes.GemaltoTLS{ - CAPath: mTLSClientCaPath, - } - } - } - // Gemalto Login - if encryptionCfg.Gemalto.Keysecure.Credentials != nil { - kesConfig.Keys.Gemalto.KeySecure.Credentials = &kes.GemaltoCredentials{ - Token: *encryptionCfg.Gemalto.Keysecure.Credentials.Token, - Domain: *encryptionCfg.Gemalto.Keysecure.Credentials.Domain, - Retry: 15 * time.Second, - } - } - } - case encryptionCfg.Gcp != nil: - // Initialize GCP - kesConfig.Keys.Gcp = &kes.Gcp{ - SecretManager: &kes.GcpSecretManager{}, - } - // GCP basic kesConfiguration - if encryptionCfg.Gcp.Secretmanager != nil { - kesConfig.Keys.Gcp.SecretManager.ProjectID = *encryptionCfg.Gcp.Secretmanager.ProjectID - kesConfig.Keys.Gcp.SecretManager.Endpoint = encryptionCfg.Gcp.Secretmanager.Endpoint - // GCP credentials - if encryptionCfg.Gcp.Secretmanager.Credentials != nil { - kesConfig.Keys.Gcp.SecretManager.Credentials = &kes.GcpCredentials{ - ClientEmail: encryptionCfg.Gcp.Secretmanager.Credentials.ClientEmail, - ClientID: encryptionCfg.Gcp.Secretmanager.Credentials.ClientID, - PrivateKeyID: encryptionCfg.Gcp.Secretmanager.Credentials.PrivateKeyID, - PrivateKey: encryptionCfg.Gcp.Secretmanager.Credentials.PrivateKey, - } - } - } - case encryptionCfg.Azure != nil: - // Initialize Azure - kesConfig.Keys.Azure = &kes.Azure{ - KeyVault: &kes.AzureKeyVault{}, - } - if encryptionCfg.Azure.Keyvault != nil { - kesConfig.Keys.Azure.KeyVault.Endpoint = *encryptionCfg.Azure.Keyvault.Endpoint - if encryptionCfg.Azure.Keyvault.Credentials != nil { - kesConfig.Keys.Azure.KeyVault.Credentials = &kes.AzureCredentials{ - TenantID: *encryptionCfg.Azure.Keyvault.Credentials.TenantID, - ClientID: *encryptionCfg.Azure.Keyvault.Credentials.ClientID, - ClientSecret: *encryptionCfg.Azure.Keyvault.Credentials.ClientSecret, - } - } - } - } - return kesConfig.Marshal() -} - -func createKesConfigV2(clientCrtIdentity string, encryptionCfg *models.EncryptionConfiguration, mTLSCertificates map[string][]byte) ([]byte, error) { - kesConfig := &kes.ServerConfigV2{ - Addr: "0.0.0.0:7373", - TLS: kes.TLS{ - KeyPath: "/tmp/kes/server.key", - CertPath: "/tmp/kes/server.crt", - }, - Admin: kes.AdminIdentity{ - Identity: kes.Identity(clientCrtIdentity), - }, - Cache: kes.CacheV2{ - Expiry: &kes.ExpiryV2{ - Any: 5 * time.Minute, - Unused: 20 * time.Second, - }, - }, - Log: kes.Log{ - Error: "on", - Audit: "off", - }, - Keystore: kes.Keys{}, - } - - switch { - case encryptionCfg.Vault != nil: - ping := defaultPing - if encryptionCfg.Vault.Status != nil { - ping = int(encryptionCfg.Vault.Status.Ping) - } - // Initialize Vault Config - kesConfig.Keystore.Vault = &kes.Vault{ - Endpoint: *encryptionCfg.Vault.Endpoint, - EnginePath: encryptionCfg.Vault.Engine, - Namespace: encryptionCfg.Vault.Namespace, - Prefix: encryptionCfg.Vault.Prefix, - Status: &kes.VaultStatus{ - Ping: time.Duration(ping) * time.Second, - }, - } - // Vault AppRole credentials - if encryptionCfg.Vault.Approle != nil { - retry := encryptionCfg.Vault.Approle.Retry - kesConfig.Keystore.Vault.AppRole = &kes.AppRole{ - EnginePath: encryptionCfg.Vault.Approle.Engine, - ID: *encryptionCfg.Vault.Approle.ID, - Secret: *encryptionCfg.Vault.Approle.Secret, - Retry: time.Duration(retry) * time.Second, - } - } else { - return nil, errors.New("approle credentials missing for kes") - } - // Vault mTLS kesConfiguration - if encryptionCfg.KmsMtls != nil { - vaultTLSConfig := encryptionCfg.KmsMtls - kesConfig.Keystore.Vault.TLS = &kes.VaultTLS{} - if vaultTLSConfig.Crt != "" { - clientCrt, err := base64.StdEncoding.DecodeString(vaultTLSConfig.Crt) - if err != nil { - return nil, err - } - mTLSCertificates["client.crt"] = clientCrt - kesConfig.Keystore.Vault.TLS.CertPath = mTLSClientCrtPath - } - if vaultTLSConfig.Key != "" { - clientKey, err := base64.StdEncoding.DecodeString(vaultTLSConfig.Key) - if err != nil { - return nil, err - } - mTLSCertificates["client.key"] = clientKey - kesConfig.Keystore.Vault.TLS.KeyPath = mTLSClientKeyPath - } - if vaultTLSConfig.Ca != "" { - caCrt, err := base64.StdEncoding.DecodeString(vaultTLSConfig.Ca) - if err != nil { - return nil, err - } - mTLSCertificates["ca.crt"] = caCrt - kesConfig.Keystore.Vault.TLS.CAPath = mTLSClientCaPath - } - } - case encryptionCfg.Aws != nil: - // Initialize AWS - kesConfig.Keystore.Aws = &kes.Aws{ - SecretsManager: &kes.AwsSecretManager{}, - } - // AWS basic kesConfiguration - if encryptionCfg.Aws.Secretsmanager != nil { - kesConfig.Keystore.Aws.SecretsManager.Endpoint = *encryptionCfg.Aws.Secretsmanager.Endpoint - kesConfig.Keystore.Aws.SecretsManager.Region = *encryptionCfg.Aws.Secretsmanager.Region - kesConfig.Keystore.Aws.SecretsManager.KmsKey = encryptionCfg.Aws.Secretsmanager.Kmskey - // AWS credentials - if encryptionCfg.Aws.Secretsmanager.Credentials != nil { - kesConfig.Keystore.Aws.SecretsManager.Login = &kes.AwsSecretManagerLogin{ - AccessKey: *encryptionCfg.Aws.Secretsmanager.Credentials.Accesskey, - SecretKey: *encryptionCfg.Aws.Secretsmanager.Credentials.Secretkey, - SessionToken: encryptionCfg.Aws.Secretsmanager.Credentials.Token, - } - } - } - case encryptionCfg.Gemalto != nil: - // Initialize Gemalto - kesConfig.Keystore.Gemalto = &kes.Gemalto{ - KeySecure: &kes.GemaltoKeySecure{}, - } - // Gemalto Configuration - if encryptionCfg.Gemalto.Keysecure != nil { - kesConfig.Keystore.Gemalto.KeySecure.Endpoint = *encryptionCfg.Gemalto.Keysecure.Endpoint - // Gemalto TLS kesConfiguration - if encryptionCfg.KmsMtls != nil { - if encryptionCfg.KmsMtls.Ca != "" { - caCrt, err := base64.StdEncoding.DecodeString(encryptionCfg.KmsMtls.Ca) - if err != nil { - return nil, err - } - mTLSCertificates["ca.crt"] = caCrt - kesConfig.Keystore.Gemalto.KeySecure.TLS = &kes.GemaltoTLS{ - CAPath: mTLSClientCaPath, - } - } - } - // Gemalto Login - if encryptionCfg.Gemalto.Keysecure.Credentials != nil { - kesConfig.Keystore.Gemalto.KeySecure.Credentials = &kes.GemaltoCredentials{ - Token: *encryptionCfg.Gemalto.Keysecure.Credentials.Token, - Domain: *encryptionCfg.Gemalto.Keysecure.Credentials.Domain, - Retry: 15 * time.Second, - } - } - } - case encryptionCfg.Gcp != nil: - // Initialize GCP - kesConfig.Keystore.Gcp = &kes.Gcp{ - SecretManager: &kes.GcpSecretManager{}, - } - // GCP basic kesConfiguration - if encryptionCfg.Gcp.Secretmanager != nil { - kesConfig.Keystore.Gcp.SecretManager.ProjectID = *encryptionCfg.Gcp.Secretmanager.ProjectID - kesConfig.Keystore.Gcp.SecretManager.Endpoint = encryptionCfg.Gcp.Secretmanager.Endpoint - // GCP credentials - if encryptionCfg.Gcp.Secretmanager.Credentials != nil { - kesConfig.Keystore.Gcp.SecretManager.Credentials = &kes.GcpCredentials{ - ClientEmail: encryptionCfg.Gcp.Secretmanager.Credentials.ClientEmail, - ClientID: encryptionCfg.Gcp.Secretmanager.Credentials.ClientID, - PrivateKeyID: encryptionCfg.Gcp.Secretmanager.Credentials.PrivateKeyID, - PrivateKey: encryptionCfg.Gcp.Secretmanager.Credentials.PrivateKey, - } - } - } - case encryptionCfg.Azure != nil: - // Initialize Azure - kesConfig.Keystore.Azure = &kes.Azure{ - KeyVault: &kes.AzureKeyVault{}, - } - if encryptionCfg.Azure.Keyvault != nil { - kesConfig.Keystore.Azure.KeyVault.Endpoint = *encryptionCfg.Azure.Keyvault.Endpoint - if encryptionCfg.Azure.Keyvault.Credentials != nil { - kesConfig.Keystore.Azure.KeyVault.Credentials = &kes.AzureCredentials{ - TenantID: *encryptionCfg.Azure.Keyvault.Credentials.TenantID, - ClientID: *encryptionCfg.Azure.Keyvault.Credentials.ClientID, - ClientSecret: *encryptionCfg.Azure.Keyvault.Credentials.ClientSecret, - } - } - } - } - return kesConfig.Marshal() -} - -// getKesConfigMethod identify the config method to use based from the KES image name -func getKesConfigMethod(image string) (configVersion, error) { - version, err := GetKesConfigVersion(image) - if err != nil { - return nil, err - } - // switch for future (or previous) versions of KES config - switch version { - case KesConfigVersion1: - return createKesConfigV1, nil - default: - return createKesConfigV2, nil - } -} - -// GetKesConfigVersion Identifies the "Operator level" KES config version by evaluating the KES container tag. -// At some point KES versions were published using semantic versioning and date-time versioning later on, -// this method takes that into consideration to determine the right config to apply to KES containers. -func GetKesConfigVersion(image string) (string, error) { - version := KesConfigVersion3 - - imageStrings := strings.Split(image, ":") - var imageTag string - if len(imageStrings) > 1 { - imageTag = imageStrings[1] - } else { - return "", fmt.Errorf("%s not a valid KES release tag", image) - } - - if imageTag == "edge" { - return KesConfigVersion2, nil - } - - if imageTag == "latest" { - return KesConfigVersion3, nil - } - - // When the image tag is semantic version is config v1 - if semver.IsValid(imageTag) { - // Admin is required starting version v0.22.0 - if semver.Compare(imageTag, "v0.22.0") < 0 { - return KesConfigVersion1, nil - } - if semver.Compare(imageTag, "v0.23.0") < 0 { - return KesConfigVersion2, nil - } - return KesConfigVersion3, nil - } - - releaseTagNoArch := imageTag - - re := regexp.MustCompile(kesImageTagWithArchRegexPattern) - // if pattern matches, that means we have a tag with arch - if matched := re.Match([]byte(imageTag)); matched { - slicesOfTag := re.FindStringSubmatch(imageTag) - // here we will remove the arch suffix by assigning the first group in the regex - releaseTagNoArch = slicesOfTag[1] - } - - // v0.22.0 is the initial image version for Kes config v2, any time format came after and is v2 - // v0.23.0 deprecated `--key`, `--cert` and `--auth` flags, for this is v3 config - imageVersionTime, err := miniov2.ReleaseTagToReleaseTime(releaseTagNoArch) - if err != nil { - // could not parse semversion either, returning error - return "", fmt.Errorf("could not identify KES version from image TAG: %s", releaseTagNoArch) - } - - kesv2ReleaseTime, _ := miniov2.ReleaseTagToReleaseTime("2023-04-03T16-41-28Z") - kesv3ReleaseTime, _ := miniov2.ReleaseTagToReleaseTime("2023-11-09T17-35-47Z") - - if imageVersionTime.Equal(kesv2ReleaseTime) { - return KesConfigVersion2, nil - } - - if imageVersionTime.Equal(kesv3ReleaseTime) { - return KesConfigVersion3, nil - } - - if imageVersionTime.Before(kesv2ReleaseTime) { - return KesConfigVersion1, nil - } - - if imageVersionTime.Before(kesv3ReleaseTime) { - return KesConfigVersion2, nil - } - - if imageVersionTime.After(kesv3ReleaseTime) { - return KesConfigVersion3, nil - } - return version, nil -} diff --git a/api/encryption-handlers_test.go b/api/encryption-handlers_test.go deleted file mode 100644 index 37e2fadefe3..00000000000 --- a/api/encryption-handlers_test.go +++ /dev/null @@ -1,741 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "errors" - "fmt" - "net/http" - "time" - - "github.com/minio/operator/api/operations" - "github.com/minio/operator/api/operations/operator_api" - "github.com/minio/operator/models" - miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - "github.com/minio/operator/pkg/kes" - "gopkg.in/yaml.v2" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -func (suite *TenantTestSuite) TestTenantUpdateEncryptionHandlerWithError() { - params, api := suite.initTenantUpdateEncryptionRequest() - response := api.OperatorAPITenantUpdateEncryptionHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.TenantUpdateEncryptionDefault) - suite.assert.True(ok) -} - -func (suite *TenantTestSuite) TestTenantUpdateEncryptionWithExternalCertError() { - params, _ := suite.initTenantUpdateEncryptionRequest() - params.Body = &models.EncryptionConfiguration{ - ServerTLS: &models.KeyPairConfiguration{}, - } - opClientTenantGetMock = func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{ - Spec: miniov2.TenantSpec{ - KES: &miniov2.KESConfig{ - ExternalCertSecret: &miniov2.LocalCertificateReference{ - Name: "mock-crt", - }, - }, - }, - }, nil - } - err := tenantUpdateEncryption(context.Background(), suite.opClient, suite.k8sclient, params.Namespace, params) - suite.assert.NotNil(err) -} - -func (suite *TenantTestSuite) TestTenantUpdateEncryptionWithExternalClientCertError() { - params, _ := suite.initTenantUpdateEncryptionRequest() - params.Body = &models.EncryptionConfiguration{ - MinioMtls: &models.KeyPairConfiguration{}, - } - opClientTenantGetMock = func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{ - Spec: miniov2.TenantSpec{ - ExternalClientCertSecret: &miniov2.LocalCertificateReference{ - Name: "mock-crt", - }, - }, - }, nil - } - err := tenantUpdateEncryption(context.Background(), suite.opClient, suite.k8sclient, params.Namespace, params) - suite.assert.NotNil(err) -} - -func (suite *TenantTestSuite) TestTenantUpdateEncryptionAWSWithoutError() { - params, _ := suite.initTenantUpdateEncryptionRequest() - endpoint := "mock-endpoint" - region := "mock-region" - ak := "mock-accesskey" - sk := "mock-secretkey" - params.Body = &models.EncryptionConfiguration{ - Replicas: "1", - SecurityContext: suite.createMockModelsSecurityContext(), - SecretsToBeDeleted: []string{"mock-crt"}, - Aws: &models.AwsConfiguration{ - Secretsmanager: &models.AwsConfigurationSecretsmanager{ - Endpoint: &endpoint, - Region: ®ion, - Kmskey: "mock-kmskey", - Credentials: &models.AwsConfigurationSecretsmanagerCredentials{ - Accesskey: &ak, - Secretkey: &sk, - }, - }, - }, - } - k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.CreateOptions) (*corev1.Secret, error) { - return nil, nil - } - opClientTenantGetMock = func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{ - Spec: miniov2.TenantSpec{ - ExternalClientCertSecret: &miniov2.LocalCertificateReference{ - Name: "mock-crt", - }, - KES: &miniov2.KESConfig{ - ExternalCertSecret: &miniov2.LocalCertificateReference{ - Name: "mock-crt", - }, - }, - }, - }, nil - } - opClientTenantUpdateMock = func(ctx context.Context, tenant *miniov2.Tenant, opts metav1.UpdateOptions) (*miniov2.Tenant, error) { - return nil, nil - } - err := tenantUpdateEncryption(context.Background(), suite.opClient, suite.k8sclient, params.Namespace, params) - suite.assert.Nil(err) -} - -func (suite *TenantTestSuite) TestTenantUpdateEncryptionGemaltoWithoutError() { - params, _ := suite.initTenantUpdateEncryptionRequest() - endpoint := "mock-endpoint" - token := "mock-token" - domain := "mock-domain" - params.Body = &models.EncryptionConfiguration{ - Replicas: "1", - SecurityContext: suite.createMockModelsSecurityContext(), - Gemalto: &models.GemaltoConfiguration{ - Keysecure: &models.GemaltoConfigurationKeysecure{ - Endpoint: &endpoint, - Credentials: &models.GemaltoConfigurationKeysecureCredentials{ - Token: &token, - Domain: &domain, - }, - }, - }, - KmsMtls: &models.EncryptionConfigurationAO1KmsMtls{ - Ca: "bW9jaw==", - }, - } - suite.prepareEncryptionUpdateMocksNoError() - err := tenantUpdateEncryption(context.Background(), suite.opClient, suite.k8sclient, params.Namespace, params) - suite.assert.Nil(err) -} - -func (suite *TenantTestSuite) TestTenantUpdateEncryptionGCPWithoutError() { - params, _ := suite.initTenantUpdateEncryptionRequest() - project := "mock-project" - params.Body = &models.EncryptionConfiguration{ - Replicas: "1", - SecurityContext: suite.createMockModelsSecurityContext(), - Gcp: &models.GcpConfiguration{ - Secretmanager: &models.GcpConfigurationSecretmanager{ - ProjectID: &project, - Endpoint: "mock-endpoint", - Credentials: &models.GcpConfigurationSecretmanagerCredentials{ - ClientEmail: "mock", - ClientID: "mock", - PrivateKey: "mock", - PrivateKeyID: "mock", - }, - }, - }, - } - suite.prepareEncryptionUpdateMocksNoError() - err := tenantUpdateEncryption(context.Background(), suite.opClient, suite.k8sclient, params.Namespace, params) - suite.assert.Nil(err) -} - -func (suite *TenantTestSuite) TestTenantUpdateEncryptionAzureWithoutError() { - params, _ := suite.initTenantUpdateEncryptionRequest() - endpoint := "mock-endpoint" - tenant := "mock-tenant" - clientID := "mock-client-id" - clientSecret := "mock-client-secret" - params.Body = &models.EncryptionConfiguration{ - Replicas: "1", - SecurityContext: suite.createMockModelsSecurityContext(), - Azure: &models.AzureConfiguration{ - Keyvault: &models.AzureConfigurationKeyvault{ - Endpoint: &endpoint, - Credentials: &models.AzureConfigurationKeyvaultCredentials{ - TenantID: &tenant, - ClientID: &clientID, - ClientSecret: &clientSecret, - }, - }, - }, - } - suite.prepareEncryptionUpdateMocksNoError() - err := tenantUpdateEncryption(context.Background(), suite.opClient, suite.k8sclient, params.Namespace, params) - suite.assert.Nil(err) -} - -func (suite *TenantTestSuite) prepareEncryptionUpdateMocksNoError() { - k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.CreateOptions) (*corev1.Secret, error) { - return nil, nil - } - opClientTenantGetMock = func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{Spec: miniov2.TenantSpec{}}, nil - } - opClientTenantUpdateMock = func(ctx context.Context, tenant *miniov2.Tenant, opts metav1.UpdateOptions) (*miniov2.Tenant, error) { - return nil, nil - } -} - -func (suite *TenantTestSuite) initTenantUpdateEncryptionRequest() (params operator_api.TenantUpdateEncryptionParams, api operations.OperatorAPI) { - registerEncryptionHandlers(&api) - params.HTTPRequest = &http.Request{} - params.Namespace = "mock-namespace" - params.Tenant = "mock-tenant" - return params, api -} - -func (suite *TenantTestSuite) TestTenantDeleteEncryptionHandlerWithError() { - params, api := suite.initTenantDeleteEncryptionRequest() - response := api.OperatorAPITenantDeleteEncryptionHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.TenantDeleteEncryptionDefault) - suite.assert.True(ok) -} - -func (suite *TenantTestSuite) initTenantDeleteEncryptionRequest() (params operator_api.TenantDeleteEncryptionParams, api operations.OperatorAPI) { - registerEncryptionHandlers(&api) - params.HTTPRequest = &http.Request{} - params.Namespace = "mock-namespace" - params.Tenant = "mock-tenant" - return params, api -} - -func (suite *TenantTestSuite) TestTenantEncryptionInfoHandlerWithError() { - params, api := suite.initTenantEncryptionInfoRequest() - response := api.OperatorAPITenantEncryptionInfoHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.TenantEncryptionInfoDefault) - suite.assert.True(ok) -} - -func (suite *TenantTestSuite) TestTenantEncryptionInfoWitNoKesError() { - opClientTenantGetMock = func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{Spec: miniov2.TenantSpec{}}, nil - } - params, _ := suite.initTenantEncryptionInfoRequest() - res, err := tenantEncryptionInfo(context.Background(), suite.opClient, suite.k8sclient, params.Namespace, params) - suite.assert.Nil(res) - suite.assert.NotNil(err) -} - -func (suite *TenantTestSuite) TestTenantEncryptionInfoWithExtCertError() { - opClientTenantGetMock = func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{ - Spec: miniov2.TenantSpec{ - KES: &miniov2.KESConfig{ - ExternalCertSecret: &miniov2.LocalCertificateReference{ - Name: "mock-crt", - }, - SecurityContext: suite.createTenantPodSecurityContext(), - }, - }, - }, nil - } - k8sclientGetSecretMock = func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - return nil, errors.New("mock-get-error") - } - params, _ := suite.initTenantEncryptionInfoRequest() - res, err := tenantEncryptionInfo(context.Background(), suite.opClient, suite.k8sclient, params.Namespace, params) - suite.assert.Nil(res) - suite.assert.NotNil(err) -} - -func (suite *TenantTestSuite) TestTenantEncryptionInfoWithClientCertError() { - opClientTenantGetMock = func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{ - Spec: miniov2.TenantSpec{ - KES: &miniov2.KESConfig{}, - ExternalClientCertSecret: &miniov2.LocalCertificateReference{ - Name: "mock-crt", - }, - }, - }, nil - } - k8sclientGetSecretMock = func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - return nil, errors.New("mock-get-error") - } - params, _ := suite.initTenantEncryptionInfoRequest() - res, err := tenantEncryptionInfo(context.Background(), suite.opClient, suite.k8sclient, params.Namespace, params) - suite.assert.Nil(res) - suite.assert.NotNil(err) -} - -func (suite *TenantTestSuite) TestTenantEncryptionInfoWithKesClientCertErrorV2() { - opClientTenantGetMock = func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{ - Spec: miniov2.TenantSpec{ - KES: &miniov2.KESConfig{ - ClientCertSecret: &miniov2.LocalCertificateReference{ - Name: "mock-kes-crt", - }, - Configuration: &corev1.LocalObjectReference{ - Name: "mock-kes-config", - }, - }, - }, - }, nil - } - k8sclientGetSecretMock = func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - if secretName == "mock-kes-config" { - return &corev1.Secret{ - Data: map[string][]byte{ - "server-config.yaml": suite.getKesV2YamlMock(false), - }, - }, nil - } - if secretName == "mock-kes-crt" { - return &corev1.Secret{ - Data: map[string][]byte{ - "client.crt": []byte("mock-client-crt"), - }, - }, nil - } - return nil, errors.New("mock-get-error") - } - params, _ := suite.initTenantEncryptionInfoRequest() - res, err := tenantEncryptionInfo(context.Background(), suite.opClient, suite.k8sclient, params.Namespace, params) - suite.assert.Nil(res) - suite.assert.NotNil(err) - suite.assert.Equal(err, errors.New("certificate failed to decode")) -} - -func (suite *TenantTestSuite) TestTenantEncryptionInfoWithKesClientCertErrorV1() { - opClientTenantGetMock = func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{ - Spec: miniov2.TenantSpec{ - KES: &miniov2.KESConfig{ - ClientCertSecret: &miniov2.LocalCertificateReference{ - Name: "mock-kes-crt", - }, - Configuration: &corev1.LocalObjectReference{ - Name: "mock-kes-config", - }, - Image: "minio/kes:v0.21.1", - }, - }, - }, nil - } - k8sclientGetSecretMock = func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - if secretName == "mock-kes-config" { - return &corev1.Secret{ - Data: map[string][]byte{ - "server-config.yaml": suite.getKesV1YamlMock(false), - }, - }, nil - } - if secretName == "mock-kes-crt" { - return &corev1.Secret{ - Data: map[string][]byte{ - "client.crt": []byte("mock-client-crt"), - }, - }, nil - } - return nil, errors.New("mock-get-error") - } - params, _ := suite.initTenantEncryptionInfoRequest() - res, err := tenantEncryptionInfo(context.Background(), suite.opClient, suite.k8sclient, params.Namespace, params) - suite.assert.Nil(res) - suite.assert.NotNil(err) - suite.assert.Equal(err, errors.New("certificate failed to decode")) -} - -func (suite *TenantTestSuite) TestTenantEncryptionInfoWithKesClientCACertErrorV2() { - opClientTenantGetMock = func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{ - Spec: miniov2.TenantSpec{ - KES: &miniov2.KESConfig{ - ClientCertSecret: &miniov2.LocalCertificateReference{ - Name: "mock-kes-crt", - }, - Configuration: &corev1.LocalObjectReference{ - Name: "mock-kes-config", - }, - }, - }, - }, nil - } - k8sclientGetSecretMock = func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - if secretName == "mock-kes-config" { - return &corev1.Secret{ - Data: map[string][]byte{ - "server-config.yaml": suite.getKesV2YamlMock(false), - }, - }, nil - } - if secretName == "mock-kes-crt" { - return &corev1.Secret{ - Data: map[string][]byte{ - "ca.crt": []byte("mock-client-crt"), - }, - }, nil - } - return nil, errors.New("mock-get-error") - } - params, _ := suite.initTenantEncryptionInfoRequest() - res, err := tenantEncryptionInfo(context.Background(), suite.opClient, suite.k8sclient, params.Namespace, params) - suite.assert.Nil(res) - suite.assert.NotNil(err) - suite.assert.Equal(err, errors.New("certificate failed to decode")) -} - -func (suite *TenantTestSuite) TestTenantEncryptionInfoWithKesClientCACertErrorV1() { - opClientTenantGetMock = func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{ - Spec: miniov2.TenantSpec{ - KES: &miniov2.KESConfig{ - ClientCertSecret: &miniov2.LocalCertificateReference{ - Name: "mock-kes-crt", - }, - Configuration: &corev1.LocalObjectReference{ - Name: "mock-kes-config", - }, - Image: "minio/kes:v0.21.1", - }, - }, - }, nil - } - k8sclientGetSecretMock = func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - if secretName == "mock-kes-config" { - return &corev1.Secret{ - Data: map[string][]byte{ - "server-config.yaml": suite.getKesV1YamlMock(false), - }, - }, nil - } - if secretName == "mock-kes-crt" { - return &corev1.Secret{ - Data: map[string][]byte{ - "ca.crt": []byte("mock-client-crt"), - }, - }, nil - } - return nil, errors.New("mock-get-error") - } - params, _ := suite.initTenantEncryptionInfoRequest() - res, err := tenantEncryptionInfo(context.Background(), suite.opClient, suite.k8sclient, params.Namespace, params) - suite.assert.Nil(res) - suite.assert.NotNil(err) - suite.assert.Equal(err, errors.New("certificate failed to decode")) -} - -func (suite *TenantTestSuite) TestTenantEncryptionInfoWithGemaltoErrorV2() { - opClientTenantGetMock = func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{ - Spec: miniov2.TenantSpec{ - KES: &miniov2.KESConfig{ - ClientCertSecret: &miniov2.LocalCertificateReference{ - Name: "mock-kes-crt", - }, - Configuration: &corev1.LocalObjectReference{ - Name: "mock-kes-config", - }, - }, - }, - }, nil - } - k8sclientGetSecretMock = func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - if secretName == "mock-kes-config" { - return &corev1.Secret{ - Data: map[string][]byte{ - "server-config.yaml": suite.getKesV2YamlMock(true), - }, - }, nil - } - if secretName == "mock-kes-crt" { - return &corev1.Secret{ - Data: map[string][]byte{ - "ca.crt": []byte("mock-client-crt"), - }, - }, nil - } - return nil, errors.New("mock-get-error") - } - params, _ := suite.initTenantEncryptionInfoRequest() - res, err := tenantEncryptionInfo(context.Background(), suite.opClient, suite.k8sclient, params.Namespace, params) - suite.assert.Nil(res) - suite.assert.NotNil(err) - suite.assert.Equal(err, errors.New("certificate failed to decode")) -} - -func (suite *TenantTestSuite) TestTenantEncryptionInfoWithGemaltoErrorV1() { - opClientTenantGetMock = func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{ - Spec: miniov2.TenantSpec{ - KES: &miniov2.KESConfig{ - ClientCertSecret: &miniov2.LocalCertificateReference{ - Name: "mock-kes-crt", - }, - Configuration: &corev1.LocalObjectReference{ - Name: "mock-kes-config", - }, - Image: "minio/kes:v0.21.1", - }, - }, - }, nil - } - k8sclientGetSecretMock = func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - if secretName == "mock-kes-config" { - return &corev1.Secret{ - Data: map[string][]byte{ - "server-config.yaml": suite.getKesV1YamlMock(true), - }, - }, nil - } - if secretName == "mock-kes-crt" { - return &corev1.Secret{ - Data: map[string][]byte{ - "ca.crt": []byte("mock-client-crt"), - }, - }, nil - } - return nil, errors.New("mock-get-error") - } - params, _ := suite.initTenantEncryptionInfoRequest() - res, err := tenantEncryptionInfo(context.Background(), suite.opClient, suite.k8sclient, params.Namespace, params) - suite.assert.Nil(res) - suite.assert.NotNil(err) - suite.assert.Equal(err, errors.New("certificate failed to decode")) -} - -func (suite *TenantTestSuite) TestTenantEncryptionInfoWithoutErrorv2() { - rawConfig := suite.getKesV2YamlMock(true) - kesImage := miniov2.GetTenantKesImage() - - opClientTenantGetMock = func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{ - Spec: miniov2.TenantSpec{ - KES: &miniov2.KESConfig{ - Configuration: &corev1.LocalObjectReference{ - Name: "mock-kes-config", - }, - }, - }, - }, nil - } - k8sclientGetSecretMock = func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - if secretName == "mock-kes-config" { - return &corev1.Secret{ - Data: map[string][]byte{ - "server-config.yaml": rawConfig, - }, - }, nil - } - return nil, errors.New("mock-get-error") - } - params, _ := suite.initTenantEncryptionInfoRequest() - expectedConfig, err := suite.getExpectedEncriptionConfiguration(context.Background(), rawConfig, true, suite.opClient, params.Tenant, params.Namespace, kesImage) - suite.assert.Nil(err) - res, err := tenantEncryptionInfo(context.Background(), suite.opClient, suite.k8sclient, params.Namespace, params) - suite.assert.Equal(expectedConfig, res) - suite.assert.NotNil(res) - suite.assert.Nil(err) -} - -func (suite *TenantTestSuite) TestTenantEncryptionInfoWithoutErrorv1() { - rawConfig := suite.getKesV1YamlMock(false) - kesImage := "minio/kes:v0.21.1" - - opClientTenantGetMock = func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{ - Spec: miniov2.TenantSpec{ - KES: &miniov2.KESConfig{ - Configuration: &corev1.LocalObjectReference{ - Name: "mock-kes-config", - }, - Image: kesImage, - }, - }, - }, nil - } - k8sclientGetSecretMock = func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - if secretName == "mock-kes-config" { - return &corev1.Secret{ - Data: map[string][]byte{ - "server-config.yaml": rawConfig, - }, - }, nil - } - return nil, errors.New("mock-get-error") - } - params, _ := suite.initTenantEncryptionInfoRequest() - expectedConfig, err := suite.getExpectedEncriptionConfiguration(context.Background(), rawConfig, false, suite.opClient, params.Tenant, params.Namespace, kesImage) - suite.assert.Nil(err) - res, err := tenantEncryptionInfo(context.Background(), suite.opClient, suite.k8sclient, params.Namespace, params) - suite.assert.Equal(expectedConfig, res) - suite.assert.NotNil(res) - suite.assert.Nil(err) -} - -func (suite *TenantTestSuite) getExpectedEncriptionConfiguration(ctx context.Context, rawConfig []byte, noVault bool, operatorClient OperatorClientI, tenantName string, namespace string, kesImage string) (*models.EncryptionConfigurationResponse, error) { - tenant, err := operatorClient.TenantGet(ctx, namespace, tenantName, metav1.GetOptions{}) - endpoint := "mock-endpoint" - mockid := "mock-id" - mocksecret := "mock-secret" - mockdomain := "mock-domain" - mocktoken := "mock-token" - - if err != nil { - return nil, err - } - response := &models.EncryptionConfigurationResponse{ - Raw: string(rawConfig), - Image: kesImage, - Replicas: fmt.Sprintf("%d", tenant.Spec.KES.Replicas), - Aws: &models.AwsConfiguration{}, - Gcp: &models.GcpConfiguration{}, - Azure: &models.AzureConfiguration{}, - Vault: &models.VaultConfigurationResponse{ - Prefix: "mock-prefix", - Namespace: "mock-namespace", - Engine: "mock-engine-path", - Endpoint: &endpoint, - Status: &models.VaultConfigurationResponseStatus{ - Ping: 5, - }, - Approle: &models.VaultConfigurationResponseApprole{ - Engine: "mock-engine-path", - ID: &mockid, - Retry: 5, - Secret: &mocksecret, - }, - }, - Gemalto: &models.GemaltoConfigurationResponse{ - Keysecure: &models.GemaltoConfigurationResponseKeysecure{ - Endpoint: &endpoint, - Credentials: &models.GemaltoConfigurationResponseKeysecureCredentials{ - Domain: &mockdomain, - Retry: 5, - Token: &mocktoken, - }, - }, - }, - } - if noVault { - response.Vault = nil - } - - return response, nil -} - -func (suite *TenantTestSuite) getKesV1YamlMock(noVault bool) []byte { - kesConfig := &kes.ServerConfigV1{ - Keys: kes.Keys{ - Vault: &kes.Vault{ - Prefix: "mock-prefix", - Namespace: "mock-namespace", - EnginePath: "mock-engine-path", - Endpoint: "mock-endpoint", - Status: &kes.VaultStatus{ - Ping: 5 * time.Second, - }, - AppRole: &kes.AppRole{ - EnginePath: "mock-engine-path", - ID: "mock-id", - Retry: 5 * time.Second, - Secret: "mock-secret", - }, - }, - Aws: &kes.Aws{}, - Gcp: &kes.Gcp{}, - Gemalto: &kes.Gemalto{ - KeySecure: &kes.GemaltoKeySecure{ - Endpoint: "mock-endpoint", - Credentials: &kes.GemaltoCredentials{ - Domain: "mock-domain", - Retry: 5 * time.Second, - Token: "mock-token", - }, - TLS: &kes.GemaltoTLS{}, - }, - }, - Azure: &kes.Azure{}, - }, - } - if noVault { - kesConfig.Keys.Vault = nil - } - kesConfigBytes, _ := yaml.Marshal(kesConfig) - return kesConfigBytes -} - -func (suite *TenantTestSuite) getKesV2YamlMock(noVault bool) []byte { - kesConfig := &kes.ServerConfigV2{ - Keystore: kes.Keys{ - Vault: &kes.Vault{ - Prefix: "mock-prefix", - Namespace: "mock-namespace", - EnginePath: "mock-engine-path", - Endpoint: "mock-endpoint", - Status: &kes.VaultStatus{ - Ping: 5 * time.Second, - }, - AppRole: &kes.AppRole{ - EnginePath: "mock-engine-path", - ID: "mock-id", - Retry: 5 * time.Second, - Secret: "mock-secret", - }, - }, - Aws: &kes.Aws{}, - Gcp: &kes.Gcp{}, - Gemalto: &kes.Gemalto{ - KeySecure: &kes.GemaltoKeySecure{ - Endpoint: "mock-endpoint", - Credentials: &kes.GemaltoCredentials{ - Domain: "mock-domain", - Retry: 5 * time.Second, - Token: "mock-token", - }, - TLS: &kes.GemaltoTLS{}, - }, - }, - Azure: &kes.Azure{}, - }, - } - if noVault { - kesConfig.Keystore.Vault = nil - } - kesConfigBytes, _ := yaml.Marshal(kesConfig) - return kesConfigBytes -} - -func (suite *TenantTestSuite) initTenantEncryptionInfoRequest() (params operator_api.TenantEncryptionInfoParams, api operations.OperatorAPI) { - registerEncryptionHandlers(&api) - params.HTTPRequest = &http.Request{} - params.Namespace = "mock-namespace" - params.Tenant = "mock-tenant" - return params, api -} diff --git a/api/errors.go b/api/errors.go deleted file mode 100644 index 30b8fca177f..00000000000 --- a/api/errors.go +++ /dev/null @@ -1,267 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2022 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "errors" - "net/http" - "strings" - - "github.com/go-openapi/swag" - "github.com/minio/madmin-go/v3" - "github.com/minio/minio-go/v7" - "github.com/minio/operator/models" -) - -// Generic errors -var ( - ErrDefault = errors.New("an error occurred, please try again") - ErrInvalidLogin = errors.New("invalid Login") - ErrForbidden = errors.New("403 Forbidden") - ErrBadRequest = errors.New("400 Bad Request") - ErrFileTooLarge = errors.New("413 File too Large") - ErrInvalidSession = errors.New("invalid session") - ErrNotFound = errors.New("not found") - ErrGroupAlreadyExists = errors.New("error group name already in use") - ErrInvalidErasureCodingValue = errors.New("invalid Erasure Coding Value") - ErrBucketBodyNotInRequest = errors.New("error bucket body not in request") - ErrBucketNameNotInRequest = errors.New("error bucket name not in request") - ErrGroupBodyNotInRequest = errors.New("error group body not in request") - ErrGroupNameNotInRequest = errors.New("error group name not in request") - ErrPolicyNameNotInRequest = errors.New("error policy name not in request") - ErrPolicyBodyNotInRequest = errors.New("error policy body not in request") - ErrPolicyNameContainsSpace = errors.New("error policy name cannot contain spaces") - ErrInvalidEncryptionAlgorithm = errors.New("error invalid encryption algorithm") - ErrSSENotConfigured = errors.New("error server side encryption configuration not found") - ErrBucketLifeCycleNotConfigured = errors.New("error bucket life cycle configuration not found") - ErrChangePassword = errors.New("error please check your current password") - ErrInvalidLicense = errors.New("invalid license key") - ErrLicenseNotFound = errors.New("license not found") - ErrAvoidSelfAccountDelete = errors.New("logged in user cannot be deleted by itself") - ErrAccessDenied = errors.New("access denied") - ErrOauth2Provider = errors.New("unable to contact configured identity provider") - ErrNonUniqueAccessKey = errors.New("access key already in use") - ErrRemoteTierExists = errors.New("specified remote tier already exists") - ErrRemoteTierNotFound = errors.New("specified remote tier was not found") - ErrRemoteTierUppercase = errors.New("tier name must be in uppercase") - ErrRemoteTierBucketNotFound = errors.New("remote tier bucket not found") - ErrRemoteInvalidCredentials = errors.New("invalid remote tier credentials") - ErrUnableToGetTenantUsage = errors.New("unable to get tenant usage") - ErrTooManyNodes = errors.New("cannot request more nodes than what is available in the cluster") - ErrTooFewNodes = errors.New("there are not enough nodes in the cluster to support this tenant") - ErrTooFewAvailableNodes = errors.New("there is not enough available nodes to satisfy this requirement") - ErrFewerThanFourNodes = errors.New("at least 4 nodes are required for a tenant") - ErrUnableToGetTenantLogs = errors.New("unable to get tenant logs") - ErrUnableToUpdateTenantCertificates = errors.New("unable to update tenant certificates") - ErrUpdatingEncryptionConfig = errors.New("unable to update encryption configuration") - ErrDeletingEncryptionConfig = errors.New("error disabling tenant encryption") - ErrEncryptionConfigNotFound = errors.New("encryption configuration not found") - ErrPolicyNotFound = errors.New("policy does not exist") - ErrLoginNotAllowed = errors.New("login not allowed") - ErrPoolExists = errors.New("pool exists") -) - -// ErrorWithContext : -func ErrorWithContext(ctx context.Context, err ...interface{}) *models.Error { - errorCode := int32(500) - errorMessage := ErrDefault.Error() - var err1 error - var exists bool - if len(err) > 0 { - if err1, exists = err[0].(error); exists { - var lastError error - if len(err) > 1 { - if err2, lastExists := err[1].(error); lastExists { - lastError = err2 - } - } - if err1.Error() == ErrForbidden.Error() { - errorCode = 403 - } - if err1.Error() == ErrBadRequest.Error() { - errorCode = 400 - } - if err1 == ErrNotFound { - errorCode = 404 - errorMessage = ErrNotFound.Error() - } - if errors.Is(err1, ErrInvalidLogin) { - errorCode = 401 - errorMessage = ErrInvalidLogin.Error() - } - // If the last error is ErrInvalidLogin, this is a login failure - if errors.Is(lastError, ErrInvalidLogin) { - errorCode = 401 - errorMessage = err1.Error() - } - if strings.Contains(err1.Error(), ErrLoginNotAllowed.Error()) { - errorCode = 400 - errorMessage = ErrLoginNotAllowed.Error() - } - // console invalid erasure coding value - if errors.Is(err1, ErrInvalidErasureCodingValue) { - errorCode = 400 - errorMessage = ErrInvalidErasureCodingValue.Error() - } - if errors.Is(err1, ErrBucketBodyNotInRequest) { - errorCode = 400 - errorMessage = ErrBucketBodyNotInRequest.Error() - } - if errors.Is(err1, ErrBucketNameNotInRequest) { - errorCode = 400 - errorMessage = ErrBucketNameNotInRequest.Error() - } - if errors.Is(err1, ErrGroupBodyNotInRequest) { - errorCode = 400 - errorMessage = ErrGroupBodyNotInRequest.Error() - } - if errors.Is(err1, ErrGroupNameNotInRequest) { - errorCode = 400 - errorMessage = ErrGroupNameNotInRequest.Error() - } - if errors.Is(err1, ErrPolicyNameNotInRequest) { - errorCode = 400 - errorMessage = ErrPolicyNameNotInRequest.Error() - } - if errors.Is(err1, ErrPolicyBodyNotInRequest) { - errorCode = 400 - errorMessage = ErrPolicyBodyNotInRequest.Error() - } - if errors.Is(err1, ErrPolicyNameContainsSpace) { - errorCode = 400 - errorMessage = ErrPolicyNameContainsSpace.Error() - } - // console invalid session errors - if errors.Is(err1, ErrInvalidSession) { - errorCode = 401 - errorMessage = ErrInvalidSession.Error() - } - if errors.Is(err1, ErrGroupAlreadyExists) { - errorCode = 400 - errorMessage = ErrGroupAlreadyExists.Error() - } - // Bucket life cycle not configured - if errors.Is(err1, ErrBucketLifeCycleNotConfigured) { - errorCode = 404 - errorMessage = ErrBucketLifeCycleNotConfigured.Error() - } - // Encryption not configured - if errors.Is(err1, ErrSSENotConfigured) { - errorCode = 404 - errorMessage = ErrSSENotConfigured.Error() - } - if errors.Is(err1, ErrEncryptionConfigNotFound) { - errorCode = 404 - errorMessage = err1.Error() - } - // account change password - if errors.Is(err1, ErrChangePassword) { - errorCode = 403 - errorMessage = ErrChangePassword.Error() - } - if madmin.ToErrorResponse(err1).Code == "SignatureDoesNotMatch" { - errorCode = 403 - errorMessage = ErrChangePassword.Error() - } - if errors.Is(err1, ErrLicenseNotFound) { - errorCode = 404 - errorMessage = ErrLicenseNotFound.Error() - } - if errors.Is(err1, ErrInvalidLicense) { - errorCode = 404 - errorMessage = ErrInvalidLicense.Error() - } - if errors.Is(err1, ErrAvoidSelfAccountDelete) { - errorCode = 403 - errorMessage = ErrAvoidSelfAccountDelete.Error() - } - if errors.Is(err1, ErrAccessDenied) { - errorCode = 403 - errorMessage = ErrAccessDenied.Error() - } - if errors.Is(err1, ErrPolicyNotFound) { - errorCode = 404 - errorMessage = ErrPolicyNotFound.Error() - } - if madmin.ToErrorResponse(err1).Code == "AccessDenied" { - errorCode = 403 - errorMessage = ErrAccessDenied.Error() - } - if madmin.ToErrorResponse(err1).Code == "InvalidAccessKeyId" { - errorCode = 401 - errorMessage = ErrInvalidSession.Error() - } - // console invalid session errors - if madmin.ToErrorResponse(err1).Code == "XMinioAdminNoSuchUser" { - errorCode = 401 - errorMessage = ErrInvalidSession.Error() - } - // tiering errors - if err1.Error() == ErrRemoteTierExists.Error() { - errorCode = 400 - errorMessage = err1.Error() - } - if err1.Error() == ErrRemoteTierNotFound.Error() { - errorCode = 400 - errorMessage = err1.Error() - } - - if err1.Error() == ErrRemoteTierUppercase.Error() { - errorCode = 400 - errorMessage = err1.Error() - } - if err1.Error() == ErrRemoteTierBucketNotFound.Error() { - errorCode = 400 - errorMessage = err1.Error() - } - if err1.Error() == ErrRemoteInvalidCredentials.Error() { - errorCode = 403 - errorMessage = err1.Error() - } - if err1.Error() == ErrFileTooLarge.Error() { - errorCode = 413 - errorMessage = err1.Error() - } - // bucket already exists - if minio.ToErrorResponse(err1).Code == "BucketAlreadyOwnedByYou" { - errorCode = 400 - errorMessage = "Bucket already exists" - } - if errors.Is(err1, ErrPoolExists) { - errorCode = http.StatusNotAcceptable - errorMessage = err1.Error() - } - LogError("ErrorWithContext:%v", err...) - LogIf(ctx, err1, err...) - } - - if len(err) > 1 && err[1] != nil { - if err2, ok := err[1].(error); ok { - errorMessage = err2.Error() - } - } - } - return &models.Error{Code: errorCode, Message: swag.String(errorMessage), DetailedMessage: swag.String(err1.Error())} -} - -// Error receives an errors object and parse it against k8sErrors, returns the right errors code paired with a generic errors message -func Error(err ...interface{}) *models.Error { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - return ErrorWithContext(ctx, err...) -} diff --git a/api/errors_test.go b/api/errors_test.go deleted file mode 100644 index 59793345909..00000000000 --- a/api/errors_test.go +++ /dev/null @@ -1,138 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "fmt" - "testing" - - "github.com/go-openapi/swag" - "github.com/minio/operator/models" - "github.com/stretchr/testify/assert" -) - -func TestError(t *testing.T) { - type args struct { - err []interface{} - } - - type testError struct { - name string - args args - want *models.Error - } - - var tests []testError - - type expectedError struct { - err error - code int - } - - appErrors := map[string]expectedError{ - "ErrDefault": {code: 500, err: ErrDefault}, - "ErrInvalidLogin": {code: 401, err: ErrInvalidLogin}, - "ErrForbidden": {code: 403, err: ErrForbidden}, - "ErrFileTooLarge": {code: 413, err: ErrFileTooLarge}, - "ErrInvalidSession": {code: 401, err: ErrInvalidSession}, - "ErrNotFound": {code: 404, err: ErrNotFound}, - "ErrGroupAlreadyExists": {code: 400, err: ErrGroupAlreadyExists}, - "ErrInvalidErasureCodingValue": {code: 400, err: ErrInvalidErasureCodingValue}, - "ErrBucketBodyNotInRequest": {code: 400, err: ErrBucketBodyNotInRequest}, - "ErrBucketNameNotInRequest": {code: 400, err: ErrBucketNameNotInRequest}, - "ErrGroupBodyNotInRequest": {code: 400, err: ErrGroupBodyNotInRequest}, - "ErrGroupNameNotInRequest": {code: 400, err: ErrGroupNameNotInRequest}, - "ErrPolicyNameNotInRequest": {code: 400, err: ErrPolicyNameNotInRequest}, - "ErrPolicyBodyNotInRequest": {code: 400, err: ErrPolicyBodyNotInRequest}, - "ErrInvalidEncryptionAlgorithm": {code: 500, err: ErrInvalidEncryptionAlgorithm}, - "ErrSSENotConfigured": {code: 404, err: ErrSSENotConfigured}, - "ErrBucketLifeCycleNotConfigured": {code: 404, err: ErrBucketLifeCycleNotConfigured}, - "ErrChangePassword": {code: 403, err: ErrChangePassword}, - "ErrInvalidLicense": {code: 404, err: ErrInvalidLicense}, - "ErrLicenseNotFound": {code: 404, err: ErrLicenseNotFound}, - "ErrAvoidSelfAccountDelete": {code: 403, err: ErrAvoidSelfAccountDelete}, - "ErrAccessDenied": {code: 403, err: ErrAccessDenied}, - "ErrNonUniqueAccessKey": {code: 500, err: ErrNonUniqueAccessKey}, - "ErrRemoteTierExists": {code: 400, err: ErrRemoteTierExists}, - "ErrRemoteTierNotFound": {code: 400, err: ErrRemoteTierNotFound}, - "ErrRemoteTierUppercase": {code: 400, err: ErrRemoteTierUppercase}, - "ErrRemoteTierBucketNotFound": {code: 400, err: ErrRemoteTierBucketNotFound}, - "ErrRemoteInvalidCredentials": {code: 403, err: ErrRemoteInvalidCredentials}, - "ErrUnableToGetTenantUsage": {code: 500, err: ErrUnableToGetTenantUsage}, - "ErrTooManyNodes": {code: 500, err: ErrTooManyNodes}, - "ErrTooFewNodes": {code: 500, err: ErrTooFewNodes}, - "ErrTooFewAvailableNodes": {code: 500, err: ErrTooFewAvailableNodes}, - "ErrFewerThanFourNodes": {code: 500, err: ErrFewerThanFourNodes}, - "ErrUnableToGetTenantLogs": {code: 500, err: ErrUnableToGetTenantLogs}, - "ErrUnableToUpdateTenantCertificates": {code: 500, err: ErrUnableToUpdateTenantCertificates}, - "ErrUpdatingEncryptionConfig": {code: 500, err: ErrUpdatingEncryptionConfig}, - "ErrDeletingEncryptionConfig": {code: 500, err: ErrDeletingEncryptionConfig}, - "ErrEncryptionConfigNotFound": {code: 404, err: ErrEncryptionConfigNotFound}, - } - - for k, e := range appErrors { - tests = append(tests, testError{ - name: fmt.Sprintf("%s error", k), - args: args{ - err: []interface{}{e.err}, - }, - want: &models.Error{Code: int32(e.code), Message: swag.String(e.err.Error()), DetailedMessage: swag.String(e.err.Error())}, - }) - } - tests = append(tests, - testError{ - name: "passing multiple errors but ErrInvalidLogin is last", - args: args{ - err: []interface{}{ErrDefault, ErrInvalidLogin}, - }, - want: &models.Error{Code: int32(401), Message: swag.String(ErrDefault.Error()), DetailedMessage: swag.String(ErrDefault.Error())}, - }) - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got := Error(tt.args.err...) - assert.Equalf(t, tt.want.Code, got.Code, "Error(%v) Got (%v)", tt.want.Code, got.Code) - assert.Equalf(t, *tt.want.DetailedMessage, *got.DetailedMessage, "Error(%s) Got (%s)", *tt.want.DetailedMessage, *got.DetailedMessage) - }) - } -} - -func TestErrorWithContext(t *testing.T) { - type args struct { - ctx context.Context - err []interface{} - } - tests := []struct { - name string - args args - want *models.Error - }{ - { - name: "default error", - args: args{ - ctx: context.Background(), - err: []interface{}{ErrDefault}, - }, - want: &models.Error{Code: 500, Message: swag.String(ErrDefault.Error()), DetailedMessage: swag.String(ErrDefault.Error())}, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - assert.Equalf(t, tt.want, ErrorWithContext(tt.args.ctx, tt.args.err...), "ErrorWithContext(%v, %v)", tt.args.ctx, tt.args.err) - }) - } -} diff --git a/api/event-handlers.go b/api/event-handlers.go deleted file mode 100644 index 9dac9882340..00000000000 --- a/api/event-handlers.go +++ /dev/null @@ -1,75 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "fmt" - "sort" - - "github.com/go-openapi/runtime/middleware" - "github.com/minio/operator/api/operations" - "github.com/minio/operator/api/operations/operator_api" - "github.com/minio/operator/models" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -func registerEventHandlers(api *operations.OperatorAPI) { - // Get Tenant Events - api.OperatorAPIGetTenantEventsHandler = operator_api.GetTenantEventsHandlerFunc(func(params operator_api.GetTenantEventsParams, principal *models.Principal) middleware.Responder { - payload, err := getTenantEventsResponse(principal, params) - if err != nil { - return operator_api.NewGetTenantEventsDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewGetTenantEventsOK().WithPayload(payload) - }) -} - -func getTenantEventsResponse(session *models.Principal, params operator_api.GetTenantEventsParams) (models.EventListWrapper, *models.Error) { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - client, err := GetOperatorClient(session.STSSessionToken) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - clientset, err := K8sClient(session.STSSessionToken) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - tenant, err := client.MinioV2().Tenants(params.Namespace).Get(ctx, params.Tenant, metav1.GetOptions{}) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - events, err := clientset.CoreV1().Events(params.Namespace).List(ctx, metav1.ListOptions{FieldSelector: fmt.Sprintf("involvedObject.uid=%s", tenant.UID)}) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - retval := models.EventListWrapper{} - for _, event := range events.Items { - retval = append(retval, &models.EventListElement{ - Namespace: event.Namespace, - LastSeen: event.LastTimestamp.Unix(), - Message: event.Message, - EventType: event.Type, - Reason: event.Reason, - }) - } - sort.SliceStable(retval, func(i int, j int) bool { - return retval[i].LastSeen < retval[j].LastSeen - }) - return retval, nil -} diff --git a/api/idp-handlers.go b/api/idp-handlers.go deleted file mode 100644 index 999caf417dd..00000000000 --- a/api/idp-handlers.go +++ /dev/null @@ -1,101 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "errors" - - "github.com/go-openapi/runtime/middleware" - "github.com/minio/operator/api/operations" - "github.com/minio/operator/api/operations/operator_api" - "github.com/minio/operator/models" -) - -func registerIDPHandlers(api *operations.OperatorAPI) { - // Tenant identity provider details - api.OperatorAPITenantIdentityProviderHandler = operator_api.TenantIdentityProviderHandlerFunc(func(params operator_api.TenantIdentityProviderParams, session *models.Principal) middleware.Responder { - resp, err := getTenantIdentityProviderResponse(session, params) - if err != nil { - return operator_api.NewTenantIdentityProviderDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewTenantIdentityProviderOK().WithPayload(resp) - }) - - // Update Tenant identity provider configuration - api.OperatorAPIUpdateTenantIdentityProviderHandler = operator_api.UpdateTenantIdentityProviderHandlerFunc(func(params operator_api.UpdateTenantIdentityProviderParams, session *models.Principal) middleware.Responder { - err := getUpdateTenantIdentityProviderResponse(session, params) - if err != nil { - return operator_api.NewUpdateTenantIdentityProviderDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewUpdateTenantIdentityProviderNoContent() - }) -} - -func getTenantIdentityProviderResponse(session *models.Principal, params operator_api.TenantIdentityProviderParams) (*models.IdpConfiguration, *models.Error) { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - - opClientClientSet, err := GetOperatorClient(session.STSSessionToken) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - opClient := &operatorClient{ - client: opClientClientSet, - } - // get Kubernetes Client - clientSet, err := K8sClient(session.STSSessionToken) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - k8sClient := k8sClient{ - client: clientSet, - } - minTenant, err := getTenant(ctx, opClient, params.Namespace, params.Tenant) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - info, err := getTenantIdentityProvider(ctx, &k8sClient, minTenant) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - return info, nil -} - -func getUpdateTenantIdentityProviderResponse(session *models.Principal, params operator_api.UpdateTenantIdentityProviderParams) *models.Error { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - opClientClientSet, err := GetOperatorClient(session.STSSessionToken) - if err != nil { - return ErrorWithContext(ctx, err) - } - // get Kubernetes Client - clientSet, err := K8sClient(session.STSSessionToken) - if err != nil { - return ErrorWithContext(ctx, err) - } - k8sClient := k8sClient{ - client: clientSet, - } - opClient := &operatorClient{ - client: opClientClientSet, - } - if err := updateTenantIdentityProvider(ctx, opClient, &k8sClient, params.Namespace, params); err != nil { - return ErrorWithContext(ctx, err, errors.New("unable to update tenant")) - } - return nil -} diff --git a/api/idp-handlers_test.go b/api/idp-handlers_test.go deleted file mode 100644 index 60887d04764..00000000000 --- a/api/idp-handlers_test.go +++ /dev/null @@ -1,128 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "errors" - "net/http" - - "github.com/minio/operator/api/operations" - "github.com/minio/operator/api/operations/operator_api" - "github.com/minio/operator/models" - miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -func (suite *TenantTestSuite) TestUpdateTenantIdentityProviderHandlerWithError() { - params, api := suite.initUpdateTenantIdentityProviderRequest() - response := api.OperatorAPIUpdateTenantIdentityProviderHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.UpdateTenantIdentityProviderDefault) - suite.assert.True(ok) -} - -func (suite *TenantTestSuite) initUpdateTenantIdentityProviderRequest() (params operator_api.UpdateTenantIdentityProviderParams, api operations.OperatorAPI) { - registerIDPHandlers(&api) - params.HTTPRequest = &http.Request{} - params.Namespace = "mock-namespace" - params.Tenant = "mock-tenant" - params.Body = &models.IdpConfiguration{} - return params, api -} - -func (suite *TenantTestSuite) TestUpdateTenantIdentityProviderWithTenantError() { - ctx := context.Background() - opClientTenantGetMock = func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return nil, errors.New("mock") - } - params, _ := suite.initUpdateTenantIdentityProviderRequest() - err := updateTenantIdentityProvider(ctx, suite.opClient, suite.k8sclient, "mock-namespace", params) - suite.assert.NotNil(err) -} - -func (suite *TenantTestSuite) TestUpdateTenantIdentityProviderWithTenantConfigurationError() { - ctx := context.Background() - opClientTenantGetMock = func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{ - Spec: miniov2.TenantSpec{ - CredsSecret: &corev1.LocalObjectReference{ - Name: "mock", - }, - }, - }, nil - } - k8sclientGetSecretMock = func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - return nil, errors.New("mock-get-error") - } - params, _ := suite.initUpdateTenantIdentityProviderRequest() - err := updateTenantIdentityProvider(ctx, suite.opClient, suite.k8sclient, "mock-namespace", params) - suite.assert.NotNil(err) -} - -func (suite *TenantTestSuite) TestUpdateTenantIdentityProviderWithSecretCreationError() { - ctx := context.Background() - opClientTenantGetMock = func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{ - Spec: miniov2.TenantSpec{ - Env: []corev1.EnvVar{ - {Name: "mock", Value: "mock"}, - }, - }, - }, nil - } - k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.CreateOptions) (*corev1.Secret, error) { - return nil, errors.New("mock-create-error") - } - params, _ := suite.initUpdateTenantIdentityProviderRequest() - err := updateTenantIdentityProvider(ctx, suite.opClient, suite.k8sclient, "mock-namespace", params) - suite.assert.NotNil(err) -} - -func (suite *TenantTestSuite) TestUpdateTenantIdentityProviderWithoutError() { - ctx := context.Background() - opClientTenantGetMock = func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{}, nil - } - opClientTenantUpdateMock = func(ctx context.Context, tenant *miniov2.Tenant, opts metav1.UpdateOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{}, nil - } - k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.CreateOptions) (*corev1.Secret, error) { - return nil, nil - } - params, _ := suite.initUpdateTenantIdentityProviderRequest() - params.Body.ActiveDirectory = &models.IdpConfigurationActiveDirectory{} - configURL := "mock" - clientID := "mock" - clientSecret := "mock" - claimName := "mock" - params.Body.Oidc = &models.IdpConfigurationOidc{ - ConfigurationURL: &configURL, - ClientID: &clientID, - SecretID: &clientSecret, - ClaimName: &claimName, - } - params.Body.ActiveDirectory = &models.IdpConfigurationActiveDirectory{ - URL: &configURL, - LookupBindDn: &claimName, - SkipTLSVerification: true, - ServerInsecure: true, - ServerStartTLS: true, - } - err := updateTenantIdentityProvider(ctx, suite.opClient, suite.k8sclient, "mock-namespace", params) - suite.assert.Nil(err) -} diff --git a/api/k8s_client.go b/api/k8s_client.go deleted file mode 100644 index 4e38fdc548c..00000000000 --- a/api/k8s_client.go +++ /dev/null @@ -1,114 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - - v1 "k8s.io/api/core/v1" - storagev1 "k8s.io/api/storage/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/client-go/kubernetes" -) - -// K8sClientI interface with all functions to be implemented -// by mock when testing, it should include all K8sClientI respective api calls -// that are used within this project. -type K8sClientI interface { - getResourceQuota(ctx context.Context, namespace, resource string, opts metav1.GetOptions) (*v1.ResourceQuota, error) - getNamespace(ctx context.Context, name string, opts metav1.GetOptions) (*v1.Namespace, error) - getStorageClasses(ctx context.Context, opts metav1.ListOptions) (*storagev1.StorageClassList, error) - getSecret(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*v1.Secret, error) - getService(ctx context.Context, namespace, serviceName string, opts metav1.GetOptions) (*v1.Service, error) - deletePodCollection(ctx context.Context, namespace string, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error - deleteSecret(ctx context.Context, namespace string, name string, opts metav1.DeleteOptions) error - deleteSecretsCollection(ctx context.Context, namespace string, deleteOpts metav1.DeleteOptions, listOpts metav1.ListOptions) error - createSecret(ctx context.Context, namespace string, secret *v1.Secret, opts metav1.CreateOptions) (*v1.Secret, error) - updateSecret(ctx context.Context, namespace string, secret *v1.Secret, opts metav1.UpdateOptions) (*v1.Secret, error) - getPVC(ctx context.Context, namespace string, pvcName string, opts metav1.GetOptions) (*v1.PersistentVolumeClaim, error) - getConfigMap(ctx context.Context, namespace, configMap string, opts metav1.GetOptions) (*v1.ConfigMap, error) - createConfigMap(ctx context.Context, namespace string, cm *v1.ConfigMap, opts metav1.CreateOptions) (*v1.ConfigMap, error) - updateConfigMap(ctx context.Context, namespace string, cm *v1.ConfigMap, opts metav1.UpdateOptions) (*v1.ConfigMap, error) - deleteConfigMap(ctx context.Context, namespace string, name string, opts metav1.DeleteOptions) error -} - -// Interface implementation -// -// Define the structure of a k8s client and define the functions that are actually used -type k8sClient struct { - client *kubernetes.Clientset -} - -func (c *k8sClient) getResourceQuota(ctx context.Context, namespace, resource string, opts metav1.GetOptions) (*v1.ResourceQuota, error) { - return c.client.CoreV1().ResourceQuotas(namespace).Get(ctx, resource, opts) -} - -func (c *k8sClient) getSecret(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*v1.Secret, error) { - return c.client.CoreV1().Secrets(namespace).Get(ctx, secretName, opts) -} - -func (c *k8sClient) getService(ctx context.Context, namespace, serviceName string, opts metav1.GetOptions) (*v1.Service, error) { - return c.client.CoreV1().Services(namespace).Get(ctx, serviceName, opts) -} - -func (c *k8sClient) deletePodCollection(ctx context.Context, namespace string, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { - return c.client.CoreV1().Pods(namespace).DeleteCollection(ctx, opts, listOpts) -} - -func (c *k8sClient) deleteSecret(ctx context.Context, namespace string, name string, opts metav1.DeleteOptions) error { - return c.client.CoreV1().Secrets(namespace).Delete(ctx, name, opts) -} - -func (c *k8sClient) deleteSecretsCollection(ctx context.Context, namespace string, deleteOpts metav1.DeleteOptions, listOpts metav1.ListOptions) error { - return c.client.CoreV1().Secrets(namespace).DeleteCollection(ctx, deleteOpts, listOpts) -} - -func (c *k8sClient) createSecret(ctx context.Context, namespace string, secret *v1.Secret, opts metav1.CreateOptions) (*v1.Secret, error) { - return c.client.CoreV1().Secrets(namespace).Create(ctx, secret, opts) -} - -func (c *k8sClient) updateSecret(ctx context.Context, namespace string, secret *v1.Secret, opts metav1.UpdateOptions) (*v1.Secret, error) { - return c.client.CoreV1().Secrets(namespace).Update(ctx, secret, opts) -} - -func (c *k8sClient) getNamespace(ctx context.Context, name string, opts metav1.GetOptions) (*v1.Namespace, error) { - return c.client.CoreV1().Namespaces().Get(ctx, name, opts) -} - -func (c *k8sClient) getStorageClasses(ctx context.Context, opts metav1.ListOptions) (*storagev1.StorageClassList, error) { - return c.client.StorageV1().StorageClasses().List(ctx, opts) -} - -func (c *k8sClient) getPVC(ctx context.Context, namespace string, pvcName string, opts metav1.GetOptions) (*v1.PersistentVolumeClaim, error) { - return c.client.CoreV1().PersistentVolumeClaims(namespace).Get(ctx, pvcName, opts) -} - -func (c *k8sClient) getConfigMap(ctx context.Context, namespace, name string, opts metav1.GetOptions) (*v1.ConfigMap, error) { - return c.client.CoreV1().ConfigMaps(namespace).Get(ctx, name, opts) -} - -func (c *k8sClient) createConfigMap(ctx context.Context, namespace string, cm *v1.ConfigMap, opts metav1.CreateOptions) (*v1.ConfigMap, error) { - return c.client.CoreV1().ConfigMaps(namespace).Create(ctx, cm, opts) -} - -func (c *k8sClient) updateConfigMap(ctx context.Context, namespace string, cm *v1.ConfigMap, opts metav1.UpdateOptions) (*v1.ConfigMap, error) { - return c.client.CoreV1().ConfigMaps(namespace).Update(ctx, cm, opts) -} - -func (c *k8sClient) deleteConfigMap(ctx context.Context, namespace string, name string, opts metav1.DeleteOptions) error { - return c.client.CoreV1().ConfigMaps(namespace).Delete(ctx, name, opts) -} diff --git a/api/k8s_client_mock.go b/api/k8s_client_mock.go deleted file mode 100644 index 3045289d788..00000000000 --- a/api/k8s_client_mock.go +++ /dev/null @@ -1,102 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - - corev1 "k8s.io/api/core/v1" - storagev1 "k8s.io/api/storage/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -type k8sClientMock struct{} - -var ( - k8sClientGetResourceQuotaMock func(ctx context.Context, namespace, resource string, opts metav1.GetOptions) (*corev1.ResourceQuota, error) - k8sClientGetNameSpaceMock func(ctx context.Context, name string, opts metav1.GetOptions) (*corev1.Namespace, error) - k8sClientStorageClassesMock func(ctx context.Context, opts metav1.ListOptions) (*storagev1.StorageClassList, error) - - k8sClientGetConfigMapMock func(ctx context.Context, namespace, configMap string, opts metav1.GetOptions) (*corev1.ConfigMap, error) - k8sClientCreateConfigMapMock func(ctx context.Context, namespace string, cm *corev1.ConfigMap, opts metav1.CreateOptions) (*corev1.ConfigMap, error) - k8sClientUpdateConfigMapMock func(ctx context.Context, namespace string, cm *corev1.ConfigMap, opts metav1.UpdateOptions) (*corev1.ConfigMap, error) - k8sClientDeleteConfigMapMock func(ctx context.Context, namespace string, name string, opts metav1.DeleteOptions) error - - k8sClientDeletePodCollectionMock func(ctx context.Context, namespace string, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error - k8sClientDeleteSecretMock func(ctx context.Context, namespace string, name string, opts metav1.DeleteOptions) error - k8sClientDeleteSecretsCollectionMock func(ctx context.Context, namespace string, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error - k8sClientCreateSecretMock func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.CreateOptions) (*corev1.Secret, error) - k8sClientUpdateSecretMock func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.UpdateOptions) (*corev1.Secret, error) - k8sclientGetSecretMock func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) - k8sclientGetServiceMock func(ctx context.Context, namespace, serviceName string, opts metav1.GetOptions) (*corev1.Service, error) -) - -func (c k8sClientMock) getResourceQuota(ctx context.Context, namespace, resource string, opts metav1.GetOptions) (*corev1.ResourceQuota, error) { - return k8sClientGetResourceQuotaMock(ctx, namespace, resource, opts) -} - -func (c k8sClientMock) getNamespace(ctx context.Context, name string, opts metav1.GetOptions) (*corev1.Namespace, error) { - return k8sClientGetNameSpaceMock(ctx, name, opts) -} - -func (c k8sClientMock) getStorageClasses(ctx context.Context, opts metav1.ListOptions) (*storagev1.StorageClassList, error) { - return k8sClientStorageClassesMock(ctx, opts) -} - -func (c k8sClientMock) getConfigMap(ctx context.Context, namespace, configMap string, opts metav1.GetOptions) (*corev1.ConfigMap, error) { - return k8sClientGetConfigMapMock(ctx, namespace, configMap, opts) -} - -func (c k8sClientMock) createConfigMap(ctx context.Context, namespace string, cm *corev1.ConfigMap, opts metav1.CreateOptions) (*corev1.ConfigMap, error) { - return k8sClientCreateConfigMapMock(ctx, namespace, cm, opts) -} - -func (c k8sClientMock) updateConfigMap(ctx context.Context, namespace string, cm *corev1.ConfigMap, opts metav1.UpdateOptions) (*corev1.ConfigMap, error) { - return k8sClientUpdateConfigMapMock(ctx, namespace, cm, opts) -} - -func (c k8sClientMock) deleteConfigMap(ctx context.Context, namespace string, name string, opts metav1.DeleteOptions) error { - return k8sClientDeleteConfigMapMock(ctx, namespace, name, opts) -} - -func (c k8sClientMock) deletePodCollection(ctx context.Context, namespace string, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { - return k8sClientDeletePodCollectionMock(ctx, namespace, opts, listOpts) -} - -func (c k8sClientMock) deleteSecret(ctx context.Context, namespace string, name string, opts metav1.DeleteOptions) error { - return k8sClientDeleteSecretMock(ctx, namespace, name, opts) -} - -func (c k8sClientMock) deleteSecretsCollection(ctx context.Context, namespace string, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { - return k8sClientDeleteSecretsCollectionMock(ctx, namespace, opts, listOpts) -} - -func (c k8sClientMock) createSecret(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.CreateOptions) (*corev1.Secret, error) { - return k8sClientCreateSecretMock(ctx, namespace, secret, opts) -} - -func (c k8sClientMock) updateSecret(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.UpdateOptions) (*corev1.Secret, error) { - return k8sClientUpdateSecretMock(ctx, namespace, secret, opts) -} - -func (c k8sClientMock) getSecret(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - return k8sclientGetSecretMock(ctx, namespace, secretName, opts) -} - -func (c k8sClientMock) getService(ctx context.Context, namespace, serviceName string, opts metav1.GetOptions) (*corev1.Service, error) { - return k8sclientGetServiceMock(ctx, namespace, serviceName, opts) -} diff --git a/api/kubernetes.go b/api/kubernetes.go deleted file mode 100644 index 275d20840a7..00000000000 --- a/api/kubernetes.go +++ /dev/null @@ -1,91 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "net" - "strings" - - operator "github.com/minio/operator/pkg/client/clientset/versioned" - "github.com/minio/pkg/env" - "k8s.io/client-go/kubernetes" - "k8s.io/client-go/rest" - certutil "k8s.io/client-go/util/cert" -) - -// GetK8sAPIServer returns the URL to use for the k8s api -func GetK8sAPIServer() string { - // if console is running inside a k8s pod KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT will contain the k8s api server apiServerAddress - // if console is not running inside k8s by default will look for the k8s api server on localhost:8001 (kubectl proxy) - // NOTE: using kubectl proxy is for local development only, since every request send to localhost:8001 will bypass service account authentication - // more info here: https://kubernetes.io/docs/tasks/access-application-cluster/access-cluster/#directly-accessing-the-rest-api - // you can override this using CONSOLE_K8S_API_SERVER, ie use the k8s cluster from `kubectl config view` - host, port := env.Get("KUBERNETES_SERVICE_HOST", ""), env.Get("KUBERNETES_SERVICE_PORT", "") - apiServerAddress := "http://localhost:8001" - if host != "" && port != "" { - apiServerAddress = "https://" + net.JoinHostPort(host, port) - } - return env.Get(K8sAPIServer, apiServerAddress) -} - -// If CONSOLE_K8S_API_SERVER_TLS_ROOT_CA is true console will load the certificate into the -// http.client rootCAs pool, this is useful for testing an k8s ApiServer or when working with self-signed certificates -func getK8sAPIServerTLSRootCA() string { - return strings.TrimSpace(env.Get(K8SAPIServerTLSRootCA, "")) -} - -// getTLSClientConfig will return the right TLS configuration for the K8S client based on the configured TLS certificate -func getTLSClientConfig() rest.TLSClientConfig { - defaultRootCAFile := "/var/run/secrets/kubernetes.io/serviceaccount/ca.crt" - customRootCAFile := getK8sAPIServerTLSRootCA() - tlsClientConfig := rest.TLSClientConfig{} - // if console is running inside k8s by default he will have access to the CA Cert from the k8s local authority - if _, err := certutil.NewPool(defaultRootCAFile); err == nil { - tlsClientConfig.CAFile = defaultRootCAFile - } - // if the user explicitly define a custom CA certificate, instead, we will use that - if customRootCAFile != "" { - if _, err := certutil.NewPool(customRootCAFile); err == nil { - tlsClientConfig.CAFile = customRootCAFile - } - } - return tlsClientConfig -} - -// This operation will run only once at console startup -var tlsClientConfig = getTLSClientConfig() - -// GetK8sConfig returns the config for k8s api -func GetK8sConfig(token string) *rest.Config { - config := &rest.Config{ - Host: GetK8sAPIServer(), - TLSClientConfig: tlsClientConfig, - APIPath: "/", - BearerToken: token, - } - return config -} - -// GetOperatorClient returns an operator client using GetK8sConfig for its config -func GetOperatorClient(token string) (*operator.Clientset, error) { - return operator.NewForConfig(GetK8sConfig(token)) -} - -// K8sClient returns kubernetes client using GetK8sConfig for its config -func K8sClient(token string) (*kubernetes.Clientset, error) { - return kubernetes.NewForConfig(GetK8sConfig(token)) -} diff --git a/api/license.go b/api/license.go deleted file mode 100644 index 423842ec7f9..00000000000 --- a/api/license.go +++ /dev/null @@ -1,41 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -// SubnetPlan stores the plan -type SubnetPlan int - -// license enums -const ( - PlanAGPL SubnetPlan = iota - PlanStandard - PlanEnterprise -) - -func (sp SubnetPlan) String() string { - switch sp { - case PlanStandard: - return "standard" - case PlanEnterprise: - return "enterprise" - default: - return "agpl" - } -} - -// InstanceLicensePlan default assumed plan -var InstanceLicensePlan = PlanAGPL diff --git a/api/login.go b/api/login.go deleted file mode 100644 index 2301396aefc..00000000000 --- a/api/login.go +++ /dev/null @@ -1,250 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "encoding/base64" - "encoding/json" - "fmt" - "log" - "math/rand" - "net/http" - - xoauth2 "golang.org/x/oauth2" - - "github.com/minio/minio-go/v7/pkg/credentials" - "github.com/minio/pkg/env" - - "github.com/go-openapi/runtime" - "github.com/go-openapi/runtime/middleware" - "github.com/minio/operator/api/operations" - authApi "github.com/minio/operator/api/operations/auth" - "github.com/minio/operator/models" - - "github.com/minio/operator/pkg/auth" - "github.com/minio/operator/pkg/auth/idp/oauth2" -) - -func registerLoginHandlers(api *operations.OperatorAPI) { - // GET login strategy - api.AuthLoginDetailHandler = authApi.LoginDetailHandlerFunc(func(params authApi.LoginDetailParams) middleware.Responder { - loginDetails, err := getLoginDetailsResponse(params) - if err != nil { - return authApi.NewLoginDetailDefault(int(err.Code)).WithPayload(err) - } - return authApi.NewLoginDetailOK().WithPayload(loginDetails) - }) - // POST login using k8s service account token - api.AuthLoginOperatorHandler = authApi.LoginOperatorHandlerFunc(func(params authApi.LoginOperatorParams) middleware.Responder { - loginResponse, err := getLoginOperatorResponse(params) - if err != nil { - return authApi.NewLoginOperatorDefault(int(err.Code)).WithPayload(err) - } - // Custom response writer to set the session cookies - return middleware.ResponderFunc(func(w http.ResponseWriter, p runtime.Producer) { - cookie := NewSessionCookieForConsole(loginResponse.SessionID) - http.SetCookie(w, &cookie) - authApi.NewLoginOperatorNoContent().WriteResponse(w, p) - }) - }) - // POST login using external IDP - api.AuthLoginOauth2AuthHandler = authApi.LoginOauth2AuthHandlerFunc(func(params authApi.LoginOauth2AuthParams) middleware.Responder { - loginResponse, err := getLoginOauth2AuthResponse(params) - if err != nil { - return authApi.NewLoginOauth2AuthDefault(int(err.Code)).WithPayload(err) - } - // Custom response writer to set the session cookies - return middleware.ResponderFunc(func(w http.ResponseWriter, p runtime.Producer) { - cookie := NewSessionCookieForConsole(loginResponse.SessionID) - idpCookie := NewIDPSessionCookie(loginResponse.IDPRefreshToken) - http.SetCookie(w, &cookie) - http.SetCookie(w, &idpCookie) - authApi.NewLoginOauth2AuthNoContent().WriteResponse(w, p) - }) - }) -} - -// login performs a check of consoleCredentials against MinIO, generates some claims and returns the jwt -// for subsequent authentication -func login(credentials ConsoleCredentialsI) (*string, error) { - // try to obtain consoleCredentials, - tokens, err := credentials.Get() - if err != nil { - return nil, err - } - // if we made it here, the consoleCredentials work, generate a jwt with claims - token, err := auth.NewEncryptedTokenForClient(&tokens, credentials.GetAccountAccessKey(), nil) - if err != nil { - LogError("error authenticating user: %v", err) - return nil, ErrInvalidLogin - } - return &token, nil -} - -// isKubernetes returns true if minio is running in kubernetes. -func isKubernetes() bool { - // Kubernetes env used to validate if we are - // indeed running inside a kubernetes pod - // is KUBERNETES_SERVICE_HOST - // https://github.com/kubernetes/kubernetes/blob/master/pkg/kubelet/kubelet_pods.go#L541 - return env.Get("KUBERNETES_SERVICE_HOST", "") != "" -} - -// getLoginDetailsResponse returns information regarding the Console authentication mechanism. -func getLoginDetailsResponse(params authApi.LoginDetailParams) (*models.LoginDetails, *models.Error) { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - - r := params.HTTPRequest - - loginStrategy := models.LoginDetailsLoginStrategyServiceDashAccount - - var redirectRules []*models.RedirectRule - - if oauth2.IsIDPEnabled() { - loginStrategy = models.LoginDetailsLoginStrategyRedirectDashServiceDashAccount - // initialize new oauth2 client - oauth2Client, err := oauth2.NewOauth2ProviderClient(nil, r, GetConsoleHTTPClient("")) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - // Validate user against IDP - identityProvider := &auth.IdentityProvider{ - KeyFunc: oauth2.DefaultDerivedKey, - Client: oauth2Client, - } - - newRedirectRule := &models.RedirectRule{ - Redirect: identityProvider.GenerateLoginURL(), - DisplayName: "Login with SSO", - } - - redirectRules = append(redirectRules, newRedirectRule) - } - - loginDetails := &models.LoginDetails{ - LoginStrategy: loginStrategy, - RedirectRules: redirectRules, - IsK8S: isKubernetes(), - } - return loginDetails, nil -} - -// verifyUserAgainstIDP will verify user identity against the configured IDP and return MinIO credentials -func verifyUserAgainstIDP(ctx context.Context, provider auth.IdentityProviderI, code, state string) (*xoauth2.Token, error) { - oauth2Token, err := provider.VerifyIdentityForOperator(ctx, code, state) - if err != nil { - return nil, err - } - return oauth2Token, nil -} - -func getLoginOauth2AuthResponse(params authApi.LoginOauth2AuthParams) (*models.LoginResponse, *models.Error) { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - - r := params.HTTPRequest - lr := params.Body - - if oauth2.IsIDPEnabled() { - decodedRState, err := base64.StdEncoding.DecodeString(*lr.State) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - - var requestItems oauth2.LoginURLParams - err = json.Unmarshal(decodedRState, &requestItems) - - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - - // initialize new oauth2 client - oauth2Client, err := oauth2.NewOauth2ProviderClient(nil, r, GetConsoleHTTPClient("")) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - // initialize new identity provider - identityProvider := auth.IdentityProvider{ - KeyFunc: oauth2.DefaultDerivedKey, - Client: oauth2Client, - } - - // Pointer to extract the whole token from IdP - var oauth2Token *xoauth2.Token - - // Validate user against IDP - oauth2Token, err = verifyUserAgainstIDP(ctx, identityProvider, *lr.Code, requestItems.State) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - - // If we pass here that means the IDP correctly authenticate the user with the operator resource - // we proceed to use the service account token configured in the operator-console pod - creds, err := newConsoleCredentials(getK8sSAToken(oauth2Token)) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - token, err := login(ConsoleCredentials{ConsoleCredentials: creds}) - if err != nil { - return nil, ErrorWithContext(ctx, ErrInvalidLogin, nil, err) - } - // serialize output - loginResponse := &models.LoginResponse{ - SessionID: *token, - IDPRefreshToken: identityProvider.Client.RefreshToken, - } - return loginResponse, nil - } - return nil, ErrorWithContext(ctx, ErrDefault) -} - -func newConsoleCredentials(secretKey string) (*credentials.Credentials, error) { - creds, err := GetConsoleCredentialsForOperator(secretKey) - if err != nil { - return nil, err - } - return creds, nil -} - -// getLoginOperatorResponse validate the provided service account token against k8s api -func getLoginOperatorResponse(params authApi.LoginOperatorParams) (*models.LoginResponse, *models.Error) { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - - lmr := params.Body - - creds, err := newConsoleCredentials(*lmr.Jwt) - if err != nil { - log.Println(err) - return nil, ErrorWithContext(ctx, err) - } - consoleCreds := ConsoleCredentials{ConsoleCredentials: creds} - // Set a random as access key as session identifier - consoleCreds.AccountAccessKey = fmt.Sprintf("%d", rand.Intn(100000-10000)+10000) - token, err := login(consoleCreds) - if err != nil { - log.Println(err) - return nil, ErrorWithContext(ctx, ErrInvalidLogin, nil, err) - } - // serialize output - loginResponse := &models.LoginResponse{ - SessionID: *token, - } - return loginResponse, nil -} diff --git a/api/logout.go b/api/logout.go deleted file mode 100644 index 75e2ab2edf0..00000000000 --- a/api/logout.go +++ /dev/null @@ -1,81 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "fmt" - "net/http" - - "github.com/minio/operator/pkg/auth" - "github.com/minio/operator/pkg/auth/idp/oauth2" - - "github.com/go-openapi/runtime" - "github.com/go-openapi/runtime/middleware" - "github.com/minio/operator/api/operations" - authApi "github.com/minio/operator/api/operations/auth" - "github.com/minio/operator/models" -) - -func registerLogoutHandlers(api *operations.OperatorAPI) { - // logout from console - api.AuthLogoutHandler = authApi.LogoutHandlerFunc(func(params authApi.LogoutParams, session *models.Principal) middleware.Responder { - // Custom response writer to expire the session cookies - return middleware.ResponderFunc(func(w http.ResponseWriter, p runtime.Producer) { - if oauth2.IsIDPEnabled() { - err := logoutIDP(params.HTTPRequest) - if err != nil { - api.Logger("IDP logout failed: %v", err.DetailedMessage) - w.Header().Set("IDP-Logout", fmt.Sprintf("%v", err.DetailedMessage)) - } - } - expiredCookie := ExpireSessionCookie() - expiredIDPCookie := ExpireIDPSessionCookie() - // this will tell the browser to clear the cookies and invalidate user session - // additionally we are deleting the cookie from the client side - http.SetCookie(w, &expiredCookie) - http.SetCookie(w, &expiredIDPCookie) - authApi.NewLogoutOK().WriteResponse(w, p) - }) - }) -} - -func logoutIDP(r *http.Request) *models.Error { - ctx, cancel := context.WithCancel(r.Context()) - defer cancel() - - // initialize new oauth2 client - oauth2Client, err := oauth2.NewOauth2ProviderClient(nil, r, GetConsoleHTTPClient("")) - if err != nil { - return ErrorWithContext(ctx, err) - } - // initialize new identity provider - identityProvider := auth.IdentityProvider{ - KeyFunc: oauth2.DefaultDerivedKey, - Client: oauth2Client, - } - refreshToken, err := r.Cookie("idp-refresh-token") - if err != nil { - return ErrorWithContext(ctx, err) - } - - err = identityProvider.Logout(refreshToken.Value) - if err != nil { - return ErrorWithContext(ctx, ErrDefault, nil, err) - } - return nil -} diff --git a/api/logs.go b/api/logs.go deleted file mode 100644 index 1e1114b9b7b..00000000000 --- a/api/logs.go +++ /dev/null @@ -1,83 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package api - -import ( - "context" - "errors" - "log" - "os" - - "github.com/minio/cli" -) - -var ( - infoLog = log.New(os.Stdout, "I: ", log.LstdFlags) - errorLog = log.New(os.Stdout, "E: ", log.LstdFlags) -) - -func logInfo(msg string, data ...interface{}) { - infoLog.Printf(msg+"\n", data...) -} - -func logError(msg string, data ...interface{}) { - errorLog.Printf(msg+"\n", data...) -} - -func logIf(ctx context.Context, err error, errKind ...interface{}) { -} - -// globally changeable logger styles -var ( - LogInfo = logInfo - LogError = logError - LogIf = logIf -) - -// Context captures all command line flags values -type Context struct { - Host string - HTTPPort, HTTPSPort int - TLSRedirect string - // Legacy options, TODO: remove in future - TLSCertificate, TLSKey, TLSca string -} - -// Load loads restapi Context from command line context. -func (c *Context) Load(ctx *cli.Context) error { - *c = Context{ - Host: ctx.String("host"), - HTTPPort: ctx.Int("port"), - HTTPSPort: ctx.Int("tls-port"), - TLSRedirect: ctx.String("tls-redirect"), - // Legacy options to be removed. - TLSCertificate: ctx.String("tls-certificate"), - TLSKey: ctx.String("tls-key"), - TLSca: ctx.String("tls-ca"), - } - if c.HTTPPort > 65535 { - return errors.New("invalid argument --port out of range - ports can range from 1-65535") - } - if c.HTTPSPort > 65535 { - return errors.New("invalid argument --tls-port out of range - ports can range from 1-65535") - } - if c.TLSRedirect != "on" && c.TLSRedirect != "off" { - return errors.New("invalid argument --tls-redirect only accepts either 'on' or 'off'") - } - return nil -} diff --git a/api/logs_test.go b/api/logs_test.go deleted file mode 100644 index 3fb565ab6c8..00000000000 --- a/api/logs_test.go +++ /dev/null @@ -1,110 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2022 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "flag" - "fmt" - "testing" - - "github.com/minio/cli" - "github.com/stretchr/testify/assert" -) - -func TestContext_Load(t *testing.T) { - type fields struct { - Host string - HTTPPort int - HTTPSPort int - TLSRedirect string - TLSCertificate string - TLSKey string - TLSca string - } - type args struct { - values map[string]string - } - tests := []struct { - name string - fields fields - args args - wantErr bool - }{ - { - name: "valid args", - args: args{ - values: map[string]string{ - "tls-redirect": "on", - }, - }, - wantErr: false, - }, - { - name: "invalid args", - args: args{ - values: map[string]string{ - "tls-redirect": "aaaa", - }, - }, - wantErr: true, - }, - { - name: "invalid port http", - args: args{ - values: map[string]string{ - "tls-redirect": "on", - "port": "65536", - }, - }, - wantErr: true, - }, - { - name: "invalid port https", - args: args{ - values: map[string]string{ - "tls-redirect": "on", - "port": "65534", - "tls-port": "65536", - }, - }, - wantErr: true, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - c := &Context{} - - fs := flag.NewFlagSet("flags", flag.ContinueOnError) - for k, v := range tt.args.values { - fs.String(k, v, "ok") - } - - ctx := cli.NewContext(nil, fs, &cli.Context{}) - - err := c.Load(ctx) - if tt.wantErr { - assert.NotNilf(t, err, fmt.Sprintf("Load(%v)", err)) - } else { - assert.Nilf(t, err, fmt.Sprintf("Load(%v)", err)) - } - }) - } -} - -func Test_logInfo(t *testing.T) { - logInfo("message", nil) -} diff --git a/api/marketplace.go b/api/marketplace.go deleted file mode 100644 index 42c66217df5..00000000000 --- a/api/marketplace.go +++ /dev/null @@ -1,193 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2022 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "fmt" - "io" - "net/http" - "os" - "strings" - "time" - - "github.com/go-openapi/runtime/middleware" - "github.com/golang-jwt/jwt/v4" - "github.com/minio/operator/api/operations" - "github.com/minio/operator/api/operations/operator_api" - "github.com/minio/operator/models" - "github.com/minio/operator/pkg" - "github.com/minio/pkg/env" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -var ( - mpConfigMapDefault = "mp-config" - mpConfigMapKey = "MP_CONFIG_KEY" - mpHostEnvVar = "MP_HOST" - defaultMPHost = "https://marketplace.apps.min.dev" - mpEUHostEnvVar = "MP_EU_HOST" - defaultEUMPHost = "https://marketplace-eu.apps.min.dev" - isMPEmailSet = "isEmailSet" - emailNotSetMsg = "Email was not sent in request" -) - -func registerMarketplaceHandlers(api *operations.OperatorAPI) { - api.OperatorAPIGetMPIntegrationHandler = operator_api.GetMPIntegrationHandlerFunc(func(params operator_api.GetMPIntegrationParams, session *models.Principal) middleware.Responder { - payload, err := getMPIntegrationResponse(session, params) - if err != nil { - return operator_api.NewGetMPIntegrationDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewGetMPIntegrationOK().WithPayload(payload) - }) - - api.OperatorAPIPostMPIntegrationHandler = operator_api.PostMPIntegrationHandlerFunc(func(params operator_api.PostMPIntegrationParams, session *models.Principal) middleware.Responder { - err := postMPIntegrationResponse(session, params) - if err != nil { - return operator_api.NewPostMPIntegrationDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewPostMPIntegrationCreated() - }) -} - -func getMPIntegrationResponse(session *models.Principal, params operator_api.GetMPIntegrationParams) (*operator_api.GetMPIntegrationOKBody, *models.Error) { - clientSet, err := K8sClient(session.STSSessionToken) - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - isMPEmailSet, err := getMPEmail(ctx, &k8sClient{client: clientSet}) - if err != nil { - return nil, ErrorWithContext(ctx, ErrNotFound) - } - return &operator_api.GetMPIntegrationOKBody{ - IsEmailSet: isMPEmailSet, - }, nil -} - -func getMPEmail(ctx context.Context, clientSet K8sClientI) (bool, error) { - cm, err := clientSet.getConfigMap(ctx, "default", getMPConfigMapKey(mpConfigMapKey), metav1.GetOptions{}) - if err != nil { - return false, err - } - return cm.Data[isMPEmailSet] == "true", nil -} - -func postMPIntegrationResponse(session *models.Principal, params operator_api.PostMPIntegrationParams) *models.Error { - clientSet, err := K8sClient(session.STSSessionToken) - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - if err != nil { - return ErrorWithContext(ctx, err) - } - return setMPIntegration(ctx, params.Body.Email, params.Body.IsInEU, &k8sClient{client: clientSet}) -} - -func setMPIntegration(ctx context.Context, email string, isInEU bool, clientSet K8sClientI) *models.Error { - if email == "" { - return ErrorWithContext(ctx, ErrBadRequest, fmt.Errorf(emailNotSetMsg)) - } - if _, err := setMPEmail(ctx, email, isInEU, clientSet); err != nil { - return ErrorWithContext(ctx, err) - } - return nil -} - -func setMPEmail(ctx context.Context, email string, isInEU bool, clientSet K8sClientI) (*corev1.ConfigMap, error) { - if err := postEmailToMP(email, isInEU); err != nil { - return nil, err - } - cm := createCM() - return clientSet.createConfigMap(ctx, "default", cm, metav1.CreateOptions{}) -} - -func postEmailToMP(email string, isInEU bool) error { - mpURL, err := getMPURL(isInEU) - if err != nil { - return err - } - return makePostRequestToMP(mpURL, email) -} - -func getMPURL(isInEU bool) (string, error) { - mpHost := getMPHost(isInEU) - if mpHost == "" { - return "", fmt.Errorf("mp host not set") - } - return fmt.Sprintf("%s/mp-email", mpHost), nil -} - -func getMPHost(isInEU bool) string { - if isInEU { - return env.Get(mpEUHostEnvVar, defaultEUMPHost) - } - return env.Get(mpHostEnvVar, defaultMPHost) -} - -func makePostRequestToMP(url, email string) error { - request, err := createMPRequest(url, email) - if err != nil { - return err - } - client := GetConsoleHTTPClient("") - client.Timeout = 3 * time.Second - if res, err := client.Do(request); err != nil { - return err - } else if res.StatusCode >= http.StatusBadRequest { - b, _ := io.ReadAll(res.Body) - return fmt.Errorf("request to %s failed with status code %d and error %s", url, res.StatusCode, string(b)) - } - return nil -} - -func createMPRequest(url, email string) (*http.Request, error) { - request, err := http.NewRequest("POST", url, strings.NewReader(fmt.Sprintf("{\"email\":\"%s\"}", email))) - if err != nil { - return nil, err - } - jwtToken := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{}) - jwtTokenString, err := jwtToken.SignedString([]byte(pkg.MPSecret)) - if err != nil { - return nil, err - } - request.Header.Add("Cookie", fmt.Sprintf("jwtToken=%s", jwtTokenString)) - request.Header.Add("Content-Type", "application/json") - return request, nil -} - -func createCM() *corev1.ConfigMap { - return &corev1.ConfigMap{ - TypeMeta: metav1.TypeMeta{ - Kind: "ConfigMap", - APIVersion: "v1", - }, - ObjectMeta: metav1.ObjectMeta{ - Name: getMPConfigMapKey(mpConfigMapKey), - Namespace: "default", - }, - Data: map[string]string{isMPEmailSet: "true"}, - } -} - -func getMPConfigMapKey(envVar string) string { - if mp := os.Getenv(envVar); mp != "" { - return mp - } - return mpConfigMapDefault -} diff --git a/api/marketplace_test.go b/api/marketplace_test.go deleted file mode 100644 index 2bad94161e2..00000000000 --- a/api/marketplace_test.go +++ /dev/null @@ -1,194 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2022 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "errors" - "fmt" - "net/http" - "net/http/httptest" - "os" - "testing" - - "github.com/minio/operator/api/operations" - "github.com/minio/operator/api/operations/operator_api" - "github.com/minio/operator/models" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/suite" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -var ( - testWithError = false - testServerWithError = false - errMock = errors.New("mock error") -) - -type MarketplaceTestSuite struct { - suite.Suite - assert *assert.Assertions - kubernetesClient k8sClientMock - namespace string - postServer *httptest.Server -} - -func (suite *MarketplaceTestSuite) SetupSuite() { - suite.assert = assert.New(suite.T()) - suite.namespace = "default" - k8sClientGetConfigMapMock = suite.getConfigMapMock - k8sClientCreateConfigMapMock = suite.createConfigMapMock - k8sClientUpdateConfigMapMock = suite.updateConfigMapMock - k8sClientDeleteConfigMapMock = suite.deleteConfigMapMock - os.Setenv(mpConfigMapKey, "mp-mock-config") - suite.postServer = httptest.NewServer(http.HandlerFunc(suite.postHandler)) -} - -func (suite *MarketplaceTestSuite) postHandler( - w http.ResponseWriter, r *http.Request, -) { - if testServerWithError { - w.WriteHeader(400) - } else { - fmt.Fprintf(w, `{"post": "Post response"}`) - } -} - -func (suite *MarketplaceTestSuite) TearDownSuite() { - os.Unsetenv(mpConfigMapKey) -} - -func (suite *MarketplaceTestSuite) getConfigMapMock(ctx context.Context, namespace, configMap string, opts metav1.GetOptions) (*corev1.ConfigMap, error) { - if testWithError { - return nil, errMock - } - return &corev1.ConfigMap{Data: map[string]string{isMPEmailSet: "true"}}, nil -} - -func (suite *MarketplaceTestSuite) createConfigMapMock(ctx context.Context, namespace string, cm *corev1.ConfigMap, opts metav1.CreateOptions) (*corev1.ConfigMap, error) { - if testWithError { - return nil, errMock - } - return &corev1.ConfigMap{}, nil -} - -func (suite *MarketplaceTestSuite) updateConfigMapMock(ctx context.Context, namespace string, cm *corev1.ConfigMap, opts metav1.UpdateOptions) (*corev1.ConfigMap, error) { - if testWithError { - return nil, errMock - } - return &corev1.ConfigMap{}, nil -} - -func (suite *MarketplaceTestSuite) deleteConfigMapMock(ctx context.Context, namespace string, name string, opts metav1.DeleteOptions) error { - if testWithError { - return errMock - } - return nil -} - -func (suite *MarketplaceTestSuite) TestRegisterMarketplaceHandlers() { - api := &operations.OperatorAPI{} - suite.assert.Nil(api.OperatorAPIGetMPIntegrationHandler) - suite.assert.Nil(api.OperatorAPIPostMPIntegrationHandler) - registerMarketplaceHandlers(api) - suite.assert.NotNil(api.OperatorAPIGetMPIntegrationHandler) - suite.assert.NotNil(api.OperatorAPIPostMPIntegrationHandler) -} - -func (suite *MarketplaceTestSuite) TestGetMPIntegrationHandlerWithError() { - api := &operations.OperatorAPI{} - registerMarketplaceHandlers(api) - params := operator_api.NewGetMPIntegrationParams() - params.HTTPRequest = &http.Request{} - response := api.OperatorAPIGetMPIntegrationHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.GetMPIntegrationDefault) - suite.assert.True(ok) -} - -func (suite *MarketplaceTestSuite) TestPostMPIntegrationHandlerWithError() { - api := &operations.OperatorAPI{} - registerMarketplaceHandlers(api) - params := operator_api.NewPostMPIntegrationParams() - params.Body = &models.MpIntegration{Email: ""} - params.HTTPRequest = &http.Request{} - params.HTTPRequest.Header = map[string][]string{} - params.HTTPRequest.AddCookie(&http.Cookie{Value: "token", Name: "token"}) - response := api.OperatorAPIPostMPIntegrationHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.PostMPIntegrationDefault) - suite.assert.True(ok) -} - -func (suite *MarketplaceTestSuite) TestGetMPEmailWithError() { - testWithError = true - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - email, err := getMPEmail(ctx, &suite.kubernetesClient) - suite.assert.NotNil(err) - suite.assert.Empty(email) -} - -func (suite *MarketplaceTestSuite) TestGetMPEmailNoError() { - testWithError = false - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - isSet, err := getMPEmail(ctx, &suite.kubernetesClient) - suite.assert.Nil(err) - suite.assert.True(isSet) -} - -func (suite *MarketplaceTestSuite) TestSetMPIntegrationNoEmail() { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - err := setMPIntegration(ctx, "", false, &suite.kubernetesClient) - suite.assert.NotNil(err) -} - -func (suite *MarketplaceTestSuite) TestSetMPIntegrationWithError() { - testWithError = true - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - os.Setenv(mpHostEnvVar, " ") - err := setMPIntegration(ctx, "mock@mock.com", false, &suite.kubernetesClient) - suite.assert.NotNil(err) - os.Unsetenv(mpHostEnvVar) -} - -func (suite *MarketplaceTestSuite) TestSetMPIntegrationNoError() { - testWithError = false - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - os.Setenv(mpHostEnvVar, suite.postServer.URL) - err := setMPIntegration(ctx, "mock@mock.com", false, &suite.kubernetesClient) - suite.assert.Nil(err) - os.Unsetenv(mpHostEnvVar) -} - -func (suite *MarketplaceTestSuite) TestSetMPIntegrationWithRequestError() { - testWithError = false - testServerWithError = true - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - os.Setenv(mpHostEnvVar, suite.postServer.URL) - err := setMPIntegration(ctx, "mock@mock.com", false, &suite.kubernetesClient) - suite.assert.NotNil(err) - os.Unsetenv(mpHostEnvVar) -} - -func TestMarketplace(t *testing.T) { - suite.Run(t, new(MarketplaceTestSuite)) -} diff --git a/api/minio.go b/api/minio.go deleted file mode 100644 index aa33d48787a..00000000000 --- a/api/minio.go +++ /dev/null @@ -1,48 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "strings" - "time" - - xhttp "github.com/minio/operator/pkg/http" - "github.com/minio/operator/pkg/utils" - "github.com/minio/pkg/env" -) - -// GetMinioImage returns the image URL to be used when deploying a MinIO instance, if there is -// a preferred image to be used (configured via ENVIRONMENT VARIABLES) GetMinioImage will return that -// if not, GetMinioImage will try to obtain the image URL for the latest version of MinIO and return that -func GetMinioImage() (*string, error) { - image := strings.TrimSpace(env.Get(MinioImage, "")) - // if there is a preferred image configured by the user we'll always return that - if image != "" { - return &image, nil - } - client := GetConsoleHTTPClient("") - client.Timeout = 5 * time.Second - latestMinIOImage, errLatestMinIOImage := utils.GetLatestMinIOImage( - &xhttp.Client{ - Client: client, - }) - - if errLatestMinIOImage != nil { - return nil, errLatestMinIOImage - } - return latestMinIOImage, nil -} diff --git a/api/minio_operator_mock.go b/api/minio_operator_mock.go deleted file mode 100644 index 47d22a01aed..00000000000 --- a/api/minio_operator_mock.go +++ /dev/null @@ -1,43 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - v1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -type ( - opClientMock struct{} - httpClientMock struct{} -) - -func createMockPVC(pvcMockName, pvcMockNamespace string) *v1.PersistentVolumeClaim { - var mockVolumeMode v1.PersistentVolumeMode = "mockVolumeMode" - mockStorage := "mockStorage" - - return &v1.PersistentVolumeClaim{ - ObjectMeta: metav1.ObjectMeta{ - Name: pvcMockName, - Namespace: pvcMockNamespace, - }, - Spec: v1.PersistentVolumeClaimSpec{ - StorageClassName: &mockStorage, - VolumeMode: &mockVolumeMode, - }, - } -} diff --git a/api/namespaces.go b/api/namespaces.go deleted file mode 100644 index 0a500db7048..00000000000 --- a/api/namespaces.go +++ /dev/null @@ -1,79 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "errors" - - "github.com/go-openapi/runtime/middleware" - "github.com/minio/operator/api/operations" - "github.com/minio/operator/api/operations/operator_api" - "github.com/minio/operator/models" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - v1 "k8s.io/client-go/kubernetes/typed/core/v1" -) - -func registerNamespaceHandlers(api *operations.OperatorAPI) { - // Add Namespace - // api.OperatorAPICreateNamespaceHandler = operator_api.CreateNamespaceHandlerFunc(func(params operator_api.CreateNamespaceParams, session *models.Principal) middleware.Responder { - api.OperatorAPICreateNamespaceHandler = operator_api.CreateNamespaceHandlerFunc(func(params operator_api.CreateNamespaceParams, session *models.Principal) middleware.Responder { - err := getNamespaceCreatedResponse(session, params) - if err != nil { - return operator_api.NewCreateNamespaceDefault(int(err.Code)).WithPayload(err) - } - return nil - }) -} - -func getNamespaceCreatedResponse(session *models.Principal, params operator_api.CreateNamespaceParams) *models.Error { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - clientset, err := K8sClient(session.STSSessionToken) - if err != nil { - return ErrorWithContext(ctx, err) - } - - namespace := *params.Body.Name - - errCreation := getNamespaceCreated(ctx, clientset.CoreV1(), namespace) - - if errCreation != nil { - return ErrorWithContext(ctx, errCreation) - } - - return nil -} - -func getNamespaceCreated(ctx context.Context, clientset v1.CoreV1Interface, namespace string) error { - if namespace == "" { - errNS := errors.New("Namespace cannot be blank") - - return errNS - } - - coreNamespace := corev1.Namespace{ - ObjectMeta: metav1.ObjectMeta{ - Name: namespace, - }, - } - - _, err := clientset.Namespaces().Create(ctx, &coreNamespace, metav1.CreateOptions{}) - - return err -} diff --git a/api/namespaces_test.go b/api/namespaces_test.go deleted file mode 100644 index 605109744f3..00000000000 --- a/api/namespaces_test.go +++ /dev/null @@ -1,63 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "testing" - - "k8s.io/client-go/kubernetes/fake" -) - -func Test_CreateNamespace(t *testing.T) { - type args struct { - ctx context.Context - namespace string - } - tests := []struct { - name string - args args - wantErr bool - }{ - { - name: "Namespace created successfully", - args: args{ - ctx: context.Background(), - namespace: "ns-test", - }, - wantErr: false, - }, - { - // Description: If the namespace is blank, an error should be returned - name: "Namespace creation failed", - args: args{ - ctx: context.Background(), - namespace: "", - }, - wantErr: true, - }, - } - for _, tt := range tests { - kubeClient := fake.NewSimpleClientset() - t.Run(tt.name, func(t *testing.T) { - err := getNamespaceCreated(tt.args.ctx, kubeClient.CoreV1(), tt.args.namespace) - if (err != nil) != tt.wantErr { - t.Errorf("getNamespaceCreated() error = %v, wantErr %v", err, tt.wantErr) - } - }) - } -} diff --git a/api/nodes.go b/api/nodes.go deleted file mode 100644 index 903060d5eb3..00000000000 --- a/api/nodes.go +++ /dev/null @@ -1,370 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "errors" - "sort" - - "github.com/minio/minio-go/v7/pkg/set" - - "github.com/minio/operator/api/operations/operator_api" - - "github.com/go-openapi/runtime/middleware" - "github.com/minio/operator/api/operations" - "github.com/minio/operator/models" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - v1 "k8s.io/client-go/kubernetes/typed/core/v1" -) - -func registerNodesHandlers(api *operations.OperatorAPI) { - api.OperatorAPIGetMaxAllocatableMemHandler = operator_api.GetMaxAllocatableMemHandlerFunc(func(params operator_api.GetMaxAllocatableMemParams, principal *models.Principal) middleware.Responder { - resp, err := getMaxAllocatableMemoryResponse(params.HTTPRequest.Context(), principal, params.NumNodes) - if err != nil { - return operator_api.NewGetMaxAllocatableMemDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewGetMaxAllocatableMemOK().WithPayload(resp) - }) - - api.OperatorAPIListNodeLabelsHandler = operator_api.ListNodeLabelsHandlerFunc(func(params operator_api.ListNodeLabelsParams, principal *models.Principal) middleware.Responder { - resp, err := getNodeLabelsResponse(params.HTTPRequest.Context(), principal) - if err != nil { - return operator_api.NewListNodeLabelsDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewListNodeLabelsOK().WithPayload(*resp) - }) - - api.OperatorAPIGetAllocatableResourcesHandler = operator_api.GetAllocatableResourcesHandlerFunc(func(params operator_api.GetAllocatableResourcesParams, session *models.Principal) middleware.Responder { - resp, err := getAllocatableResourcesResponse(session, params) - if err != nil { - return operator_api.NewGetAllocatableResourcesDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewGetAllocatableResourcesOK().WithPayload(resp) - }) -} - -// NodeResourceInfo node information -type NodeResourceInfo struct { - Name string - AllocatableMemory int64 - AllocatableCPU int64 -} - -// getMaxAllocatableMemory get max allocatable memory given a desired number of nodes -func getMaxAllocatableMemory(ctx context.Context, clientset v1.CoreV1Interface, numNodes int32) (*models.MaxAllocatableMemResponse, error) { - // can't request less than 4 nodes - if numNodes < 4 { - return nil, ErrFewerThanFourNodes - } - - // get all nodes from cluster - nodes, err := clientset.Nodes().List(ctx, metav1.ListOptions{}) - if err != nil { - return nil, err - } - - // requesting more nodes than are schedulable in the cluster - schedulableNodes := len(nodes.Items) - nonMasterNodes := len(nodes.Items) - for _, node := range nodes.Items { - // check taints to check if node is schedulable - for _, taint := range node.Spec.Taints { - if taint.Effect == corev1.TaintEffectNoSchedule { - schedulableNodes-- - } - // check if the node is a master - if taint.Key == "node-role.kubernetes.io/master" { - nonMasterNodes-- - } - } - } - // requesting more nodes than schedulable and less than total number of workers - if int(numNodes) > schedulableNodes && int(numNodes) < nonMasterNodes { - return nil, ErrTooManyNodes - } - if nonMasterNodes < int(numNodes) { - return nil, ErrTooFewNodes - } - - // not enough schedulable nodes - if schedulableNodes < int(numNodes) { - return nil, ErrTooFewAvailableNodes - } - - availableMemSizes := []int64{} -OUTER: - for _, n := range nodes.Items { - // Don't consider node if it has a NoSchedule or NoExecute Taint - for _, t := range n.Spec.Taints { - switch t.Effect { - case corev1.TaintEffectNoSchedule: - continue OUTER - case corev1.TaintEffectNoExecute: - continue OUTER - default: - continue - } - } - if quantity, ok := n.Status.Allocatable[corev1.ResourceMemory]; ok { - availableMemSizes = append(availableMemSizes, quantity.Value()) - } - } - - maxAllocatableMemory := getMaxClusterMemory(numNodes, availableMemSizes) - - res := &models.MaxAllocatableMemResponse{ - MaxMemory: maxAllocatableMemory, - } - - return res, nil -} - -// getMaxClusterMemory returns the maximum memory size that can be used -// across numNodes (number of nodes) -func getMaxClusterMemory(numNodes int32, nodesMemorySizes []int64) int64 { - if int32(len(nodesMemorySizes)) < numNodes || numNodes == 0 { - return 0 - } - - // sort nodesMemorySizes int64 array - sort.Slice(nodesMemorySizes, func(i, j int) bool { return nodesMemorySizes[i] < nodesMemorySizes[j] }) - maxIndex := 0 - maxAllocatableMemory := nodesMemorySizes[maxIndex] - - for i, size := range nodesMemorySizes { - // maxAllocatableMemory is the minimum value of nodesMemorySizes array - // only within the size of numNodes, if more nodes are available - // then the maxAllocatableMemory is equal to the next minimum value - // on the sorted nodesMemorySizes array. - // e.g. with numNodes = 4; - // maxAllocatableMemory of [2,4,8,8] => 2 - // maxAllocatableMemory of [2,4,8,8,16] => 4 - if int32(i) < numNodes { - maxAllocatableMemory = min(maxAllocatableMemory, size) - } else { - maxIndex++ - maxAllocatableMemory = nodesMemorySizes[maxIndex] - } - } - return maxAllocatableMemory -} - -// min returns the smaller of x or y. -func min(x, y int64) int64 { - if x > y { - return y - } - return x -} - -func getMaxAllocatableMemoryResponse(ctx context.Context, session *models.Principal, numNodes int32) (*models.MaxAllocatableMemResponse, *models.Error) { - client, err := K8sClient(session.STSSessionToken) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - - clusterResources, err := getMaxAllocatableMemory(ctx, client.CoreV1(), numNodes) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - return clusterResources, nil -} - -func getNodeLabels(ctx context.Context, clientset v1.CoreV1Interface) (*models.NodeLabels, error) { - // get all nodes from cluster - nodes, err := clientset.Nodes().List(ctx, metav1.ListOptions{}) - if err != nil { - return nil, err - } - // make a map[string]set to avoid duplicate values - keyValueSet := map[string]set.StringSet{} - - for _, node := range nodes.Items { - for k, v := range node.Labels { - if _, ok := keyValueSet[k]; !ok { - keyValueSet[k] = set.NewStringSet() - } - keyValueSet[k].Add(v) - } - } - - // convert to output - res := models.NodeLabels{} - for k, valSet := range keyValueSet { - res[k] = valSet.ToSlice() - } - - return &res, nil -} - -func getNodeLabelsResponse(ctx context.Context, session *models.Principal) (*models.NodeLabels, *models.Error) { - client, err := K8sClient(session.STSSessionToken) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - - clusterResources, err := getNodeLabels(ctx, client.CoreV1()) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - return clusterResources, nil -} - -func getClusterResourcesInfo(numNodes int32, inNodesResources []NodeResourceInfo) *models.AllocatableResourcesResponse { - // purge any nodes with 0 cpu - var nodesResources []NodeResourceInfo - for _, n := range inNodesResources { - if n.AllocatableCPU > 0 { - nodesResources = append(nodesResources, n) - } - } - - if int32(len(nodesResources)) < numNodes || numNodes == 0 { - return &models.AllocatableResourcesResponse{ - CPUPriority: &models.NodeMaxAllocatableResources{ - MaxAllocatableCPU: 0, - MaxAllocatableMem: 0, - }, - MemPriority: &models.NodeMaxAllocatableResources{ - MaxAllocatableCPU: 0, - MaxAllocatableMem: 0, - }, - MinAllocatableCPU: 0, - MinAllocatableMem: 0, - } - } - - allocatableResources := &models.AllocatableResourcesResponse{} - - // sort nodesResources giving CPU priority - sort.Slice(nodesResources, func(i, j int) bool { return nodesResources[i].AllocatableCPU < nodesResources[j].AllocatableCPU }) - maxCPUNodesNeeded := len(nodesResources) - int(numNodes) - maxMemNodesNeeded := maxCPUNodesNeeded - - maxAllocatableCPU := nodesResources[maxCPUNodesNeeded].AllocatableCPU - minAllocatableCPU := nodesResources[maxCPUNodesNeeded].AllocatableCPU - minAllocatableMem := nodesResources[maxMemNodesNeeded].AllocatableMemory - - availableMemsForMaxCPU := []int64{} - for _, info := range nodesResources { - if info.AllocatableCPU >= maxAllocatableCPU { - availableMemsForMaxCPU = append(availableMemsForMaxCPU, info.AllocatableMemory) - } - // min allocatable resources overall - minAllocatableCPU = min(minAllocatableCPU, info.AllocatableCPU) - minAllocatableMem = min(minAllocatableMem, info.AllocatableMemory) - } - - sort.Slice(availableMemsForMaxCPU, func(i, j int) bool { return availableMemsForMaxCPU[i] < availableMemsForMaxCPU[j] }) - maxAllocatableMem := availableMemsForMaxCPU[len(availableMemsForMaxCPU)-int(numNodes)] - - allocatableResources.MinAllocatableCPU = minAllocatableCPU - allocatableResources.MinAllocatableMem = minAllocatableMem - allocatableResources.CPUPriority = &models.NodeMaxAllocatableResources{ - MaxAllocatableCPU: maxAllocatableCPU, - MaxAllocatableMem: maxAllocatableMem, - } - - // sort nodesResources giving Mem priority - sort.Slice(nodesResources, func(i, j int) bool { return nodesResources[i].AllocatableMemory < nodesResources[j].AllocatableMemory }) - maxMemNodesNeeded = len(nodesResources) - int(numNodes) - maxAllocatableMem = nodesResources[maxMemNodesNeeded].AllocatableMemory - - availableCPUsForMaxMem := []int64{} - for _, info := range nodesResources { - if info.AllocatableMemory >= maxAllocatableMem { - availableCPUsForMaxMem = append(availableCPUsForMaxMem, info.AllocatableCPU) - } - } - - sort.Slice(availableCPUsForMaxMem, func(i, j int) bool { return availableCPUsForMaxMem[i] < availableCPUsForMaxMem[j] }) - maxAllocatableCPU = availableCPUsForMaxMem[len(availableCPUsForMaxMem)-int(numNodes)] - - allocatableResources.MemPriority = &models.NodeMaxAllocatableResources{ - MaxAllocatableCPU: maxAllocatableCPU, - MaxAllocatableMem: maxAllocatableMem, - } - - return allocatableResources -} - -// getAllocatableResources get max allocatable memory given a desired number of nodes -func getAllocatableResources(ctx context.Context, clientset v1.CoreV1Interface, numNodes int32) (*models.AllocatableResourcesResponse, error) { - if numNodes == 0 { - return nil, errors.New("error NumNodes must be greated than 0") - } - - // get all nodes from cluster - nodes, err := clientset.Nodes().List(ctx, metav1.ListOptions{}) - if err != nil { - return nil, err - } - nodesInfo := []NodeResourceInfo{} -OUTER: - for _, n := range nodes.Items { - // Don't consider node if it has a NoSchedule or NoExecute Taint - for _, t := range n.Spec.Taints { - switch t.Effect { - case corev1.TaintEffectNoSchedule: - continue OUTER - case corev1.TaintEffectNoExecute: - continue OUTER - default: - continue - } - } - - var nodeMemory int64 - var nodeCPU int64 - if quantity, ok := n.Status.Allocatable[corev1.ResourceMemory]; ok { - // availableMemSizes = append(availableMemSizes, quantity.Value()) - nodeMemory = quantity.Value() - } - // we assume all nodes have allocatable cpu resource - if quantity, ok := n.Status.Allocatable[corev1.ResourceCPU]; ok { - // availableCPU = append(availableCPU, quantity.Value()) - nodeCPU = quantity.Value() - } - nodeInfo := NodeResourceInfo{ - Name: n.Name, - AllocatableCPU: nodeCPU, - AllocatableMemory: nodeMemory, - } - nodesInfo = append(nodesInfo, nodeInfo) - } - res := getClusterResourcesInfo(numNodes, nodesInfo) - - return res, nil -} - -// Get allocatable resources response - -func getAllocatableResourcesResponse(session *models.Principal, params operator_api.GetAllocatableResourcesParams) (*models.AllocatableResourcesResponse, *models.Error) { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - client, err := K8sClient(session.STSSessionToken) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - clusterResources, err := getAllocatableResources(ctx, client.CoreV1(), params.NumNodes) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - return clusterResources, nil -} diff --git a/api/nodes_test.go b/api/nodes_test.go deleted file mode 100644 index c317dadc891..00000000000 --- a/api/nodes_test.go +++ /dev/null @@ -1,366 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "reflect" - "testing" - - "github.com/minio/operator/models" - - corev1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/resource" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/client-go/kubernetes/fake" -) - -func NoTestMaxAllocatableMemory(t *testing.T) { - type args struct { - ctx context.Context - numNodes int32 - objs []runtime.Object - } - tests := []struct { - name string - args args - expected *models.MaxAllocatableMemResponse - wantErr bool - }{ - { - name: "Get Max Ram No Taints", - args: args{ - ctx: context.Background(), - numNodes: 2, - objs: []runtime.Object{ - &corev1.Node{ - ObjectMeta: metav1.ObjectMeta{ - Name: "node1", - }, - Status: corev1.NodeStatus{ - Allocatable: corev1.ResourceList{ - corev1.ResourceMemory: resource.MustParse("2Ki"), - corev1.ResourceCPU: resource.MustParse("4Ki"), - }, - }, - }, - &corev1.Node{ - ObjectMeta: metav1.ObjectMeta{ - Name: "node2", - }, - Status: corev1.NodeStatus{ - Allocatable: corev1.ResourceList{ - corev1.ResourceMemory: resource.MustParse("512"), - corev1.ResourceCPU: resource.MustParse("1Ki"), - }, - }, - }, - }, - }, - expected: &models.MaxAllocatableMemResponse{ - MaxMemory: int64(512), - }, - wantErr: false, - }, - { - // Description: if there are more nodes than the amount - // of nodes we want to use, but one has taints of NoSchedule - // node should not be considered for max memory - name: "Get Max Ram on nodes with NoSchedule", - args: args{ - ctx: context.Background(), - numNodes: 2, - objs: []runtime.Object{ - &corev1.Node{ - ObjectMeta: metav1.ObjectMeta{ - Name: "node1", - }, - Status: corev1.NodeStatus{ - Allocatable: corev1.ResourceList{ - corev1.ResourceMemory: resource.MustParse("2Ki"), - corev1.ResourceCPU: resource.MustParse("4Ki"), - }, - }, - }, - &corev1.Node{ - ObjectMeta: metav1.ObjectMeta{ - Name: "node2", - }, - Spec: corev1.NodeSpec{ - Taints: []corev1.Taint{ - { - Key: "node.kubernetes.io/unreachable", - Effect: corev1.TaintEffectNoSchedule, - }, - }, - }, - Status: corev1.NodeStatus{ - Allocatable: corev1.ResourceList{ - corev1.ResourceMemory: resource.MustParse("6Ki"), - corev1.ResourceCPU: resource.MustParse("1Ki"), - }, - }, - }, - &corev1.Node{ - ObjectMeta: metav1.ObjectMeta{ - Name: "node3", - }, - Status: corev1.NodeStatus{ - Allocatable: corev1.ResourceList{ - corev1.ResourceMemory: resource.MustParse("4Ki"), - corev1.ResourceCPU: resource.MustParse("1Ki"), - }, - }, - }, - }, - }, - expected: &models.MaxAllocatableMemResponse{ - MaxMemory: int64(2048), - }, - wantErr: false, - }, - { - // Description: if there are more nodes than the amount - // of nodes we want to use, but one has taints of NoExecute - // node should not be considered for max memory - // if one node has PreferNoSchedule that should be considered. - name: "Get Max Ram on nodes with NoExecute", - args: args{ - ctx: context.Background(), - numNodes: 2, - objs: []runtime.Object{ - &corev1.Node{ - ObjectMeta: metav1.ObjectMeta{ - Name: "node1", - }, - Status: corev1.NodeStatus{ - Allocatable: corev1.ResourceList{ - corev1.ResourceMemory: resource.MustParse("2Ki"), - corev1.ResourceCPU: resource.MustParse("4Ki"), - }, - }, - }, - &corev1.Node{ - ObjectMeta: metav1.ObjectMeta{ - Name: "node2", - }, - Spec: corev1.NodeSpec{ - Taints: []corev1.Taint{ - { - Key: "node.kubernetes.io/unreachable", - Effect: corev1.TaintEffectNoExecute, - }, - }, - }, - Status: corev1.NodeStatus{ - Allocatable: corev1.ResourceList{ - corev1.ResourceMemory: resource.MustParse("6Ki"), - corev1.ResourceCPU: resource.MustParse("1Ki"), - }, - }, - }, - &corev1.Node{ - ObjectMeta: metav1.ObjectMeta{ - Name: "node3", - }, - Spec: corev1.NodeSpec{ - Taints: []corev1.Taint{ - { - Key: "node.kubernetes.io/unreachable", - Effect: corev1.TaintEffectPreferNoSchedule, - }, - }, - }, - Status: corev1.NodeStatus{ - Allocatable: corev1.ResourceList{ - corev1.ResourceMemory: resource.MustParse("4Ki"), - corev1.ResourceCPU: resource.MustParse("1Ki"), - }, - }, - }, - }, - }, - expected: &models.MaxAllocatableMemResponse{ - MaxMemory: int64(2048), - }, - wantErr: false, - }, - { - // Description: if there are more nodes than the amount - // of nodes we want to use, max allocatable memory should - // be the minimum ram on the n nodes requested - name: "Get Max Ram, several nodes available", - args: args{ - ctx: context.Background(), - numNodes: 2, - objs: []runtime.Object{ - &corev1.Node{ - ObjectMeta: metav1.ObjectMeta{ - Name: "node1", - }, - Status: corev1.NodeStatus{ - Allocatable: corev1.ResourceList{ - corev1.ResourceMemory: resource.MustParse("2Ki"), - corev1.ResourceCPU: resource.MustParse("4Ki"), - }, - }, - }, - &corev1.Node{ - ObjectMeta: metav1.ObjectMeta{ - Name: "node2", - }, - Status: corev1.NodeStatus{ - Allocatable: corev1.ResourceList{ - corev1.ResourceMemory: resource.MustParse("6Ki"), - corev1.ResourceCPU: resource.MustParse("1Ki"), - }, - }, - }, - &corev1.Node{ - ObjectMeta: metav1.ObjectMeta{ - Name: "node3", - }, - Status: corev1.NodeStatus{ - Allocatable: corev1.ResourceList{ - corev1.ResourceMemory: resource.MustParse("4Ki"), - corev1.ResourceCPU: resource.MustParse("1Ki"), - }, - }, - }, - }, - }, - expected: &models.MaxAllocatableMemResponse{ - MaxMemory: int64(4096), - }, - wantErr: false, - }, - { - // Description: if request has nil as request, expect error - name: "Nil nodes should be greater than 0", - args: args{ - ctx: context.Background(), - numNodes: 0, - }, - wantErr: true, - }, - } - for _, tt := range tests { - kubeClient := fake.NewSimpleClientset(tt.args.objs...) - t.Run(tt.name, func(t *testing.T) { - got, err := getMaxAllocatableMemory(tt.args.ctx, kubeClient.CoreV1(), tt.args.numNodes) - if (err != nil) != tt.wantErr { - t.Errorf("getMaxAllocatableMemory() error = %v, wantErr %v", err, tt.wantErr) - } - if !reflect.DeepEqual(got, tt.expected) { - t.Errorf("\ngot: %d \nwant: %d", got, tt.expected) - } - }) - } -} - -func Test_MaxMemoryFunc(t *testing.T) { - type args struct { - numNodes int32 - nodesMemorySizes []int64 - } - tests := []struct { - name string - args args - expected int64 - wantErr bool - }{ - { - name: "Get Max memory", - args: args{ - numNodes: int32(4), - nodesMemorySizes: []int64{4294967296, 8589934592, 8589934592, 17179869184, 17179869184, 17179869184, 25769803776, 25769803776, 68719476736}, - }, - expected: int64(17179869184), - wantErr: false, - }, - { - // Description, if not enough nodes return 0 - name: "Get Max memory Not enough nodes", - args: args{ - numNodes: int32(4), - nodesMemorySizes: []int64{4294967296, 8589934592, 68719476736}, - }, - expected: int64(0), - wantErr: false, - }, - { - // Description, if not enough nodes return 0 - name: "Get Max memory no nodes", - args: args{ - numNodes: int32(4), - nodesMemorySizes: []int64{}, - }, - expected: int64(0), - wantErr: false, - }, - { - // Description, if not enough nodes return 0 - name: "Get Max memory no nodes, no request", - args: args{ - numNodes: int32(0), - nodesMemorySizes: []int64{}, - }, - expected: int64(0), - wantErr: false, - }, - { - // Description, if there are multiple nodes - // and required nodes is only 1, max should be equal to max memory - name: "Get Max memory one node", - args: args{ - numNodes: int32(1), - nodesMemorySizes: []int64{4294967296, 8589934592, 68719476736}, - }, - expected: int64(68719476736), - wantErr: false, - }, - { - // Description: if more nodes max memory should be the minimum - // value across pairs of numNodes - name: "Get Max memory two nodes", - args: args{ - numNodes: int32(2), - nodesMemorySizes: []int64{8589934592, 68719476736, 4294967296}, - }, - expected: int64(8589934592), - wantErr: false, - }, - { - name: "Get Max Multiple Memory Sizes", - args: args{ - numNodes: int32(4), - nodesMemorySizes: []int64{0, 0, 0, 0, 4294967296, 8589934592, 8589934592, 17179869184, 17179869184, 17179869184, 25769803776, 25769803776, 68719476736, 34359738368, 34359738368, 34359738368, 34359738368}, - }, - expected: int64(34359738368), - wantErr: false, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got := getMaxClusterMemory(tt.args.numNodes, tt.args.nodesMemorySizes) - if !reflect.DeepEqual(got, tt.expected) { - t.Errorf("\ngot: %d \nwant: %d", got, tt.expected) - } - }) - } -} diff --git a/api/operations/auth/login_detail.go b/api/operations/auth/login_detail.go deleted file mode 100644 index 82ca635de3c..00000000000 --- a/api/operations/auth/login_detail.go +++ /dev/null @@ -1,73 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package auth - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" -) - -// LoginDetailHandlerFunc turns a function with the right signature into a login detail handler -type LoginDetailHandlerFunc func(LoginDetailParams) middleware.Responder - -// Handle executing the request and returning a response -func (fn LoginDetailHandlerFunc) Handle(params LoginDetailParams) middleware.Responder { - return fn(params) -} - -// LoginDetailHandler interface for that can handle valid login detail params -type LoginDetailHandler interface { - Handle(LoginDetailParams) middleware.Responder -} - -// NewLoginDetail creates a new http.Handler for the login detail operation -func NewLoginDetail(ctx *middleware.Context, handler LoginDetailHandler) *LoginDetail { - return &LoginDetail{Context: ctx, Handler: handler} -} - -/* - LoginDetail swagger:route GET /login Auth loginDetail - -Returns login strategy, form or sso. -*/ -type LoginDetail struct { - Context *middleware.Context - Handler LoginDetailHandler -} - -func (o *LoginDetail) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewLoginDetailParams() - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/auth/login_detail_parameters.go b/api/operations/auth/login_detail_parameters.go deleted file mode 100644 index 05718ffe33c..00000000000 --- a/api/operations/auth/login_detail_parameters.go +++ /dev/null @@ -1,63 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package auth - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime/middleware" -) - -// NewLoginDetailParams creates a new LoginDetailParams object -// -// There are no default values defined in the spec. -func NewLoginDetailParams() LoginDetailParams { - - return LoginDetailParams{} -} - -// LoginDetailParams contains all the bound params for the login detail operation -// typically these are obtained from a http.Request -// -// swagger:parameters LoginDetail -type LoginDetailParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewLoginDetailParams() beforehand. -func (o *LoginDetailParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} diff --git a/api/operations/auth/login_detail_responses.go b/api/operations/auth/login_detail_responses.go deleted file mode 100644 index 2f12905725e..00000000000 --- a/api/operations/auth/login_detail_responses.go +++ /dev/null @@ -1,135 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package auth - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// LoginDetailOKCode is the HTTP code returned for type LoginDetailOK -const LoginDetailOKCode int = 200 - -/* -LoginDetailOK A successful response. - -swagger:response loginDetailOK -*/ -type LoginDetailOK struct { - - /* - In: Body - */ - Payload *models.LoginDetails `json:"body,omitempty"` -} - -// NewLoginDetailOK creates LoginDetailOK with default headers values -func NewLoginDetailOK() *LoginDetailOK { - - return &LoginDetailOK{} -} - -// WithPayload adds the payload to the login detail o k response -func (o *LoginDetailOK) WithPayload(payload *models.LoginDetails) *LoginDetailOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the login detail o k response -func (o *LoginDetailOK) SetPayload(payload *models.LoginDetails) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *LoginDetailOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} - -/* -LoginDetailDefault Generic error response. - -swagger:response loginDetailDefault -*/ -type LoginDetailDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewLoginDetailDefault creates LoginDetailDefault with default headers values -func NewLoginDetailDefault(code int) *LoginDetailDefault { - if code <= 0 { - code = 500 - } - - return &LoginDetailDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the login detail default response -func (o *LoginDetailDefault) WithStatusCode(code int) *LoginDetailDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the login detail default response -func (o *LoginDetailDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the login detail default response -func (o *LoginDetailDefault) WithPayload(payload *models.Error) *LoginDetailDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the login detail default response -func (o *LoginDetailDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *LoginDetailDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/auth/login_detail_urlbuilder.go b/api/operations/auth/login_detail_urlbuilder.go deleted file mode 100644 index e598e124f79..00000000000 --- a/api/operations/auth/login_detail_urlbuilder.go +++ /dev/null @@ -1,104 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package auth - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" -) - -// LoginDetailURL generates an URL for the login detail operation -type LoginDetailURL struct { - _basePath string -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *LoginDetailURL) WithBasePath(bp string) *LoginDetailURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *LoginDetailURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *LoginDetailURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/login" - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *LoginDetailURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *LoginDetailURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *LoginDetailURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on LoginDetailURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on LoginDetailURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *LoginDetailURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/auth/login_oauth2_auth.go b/api/operations/auth/login_oauth2_auth.go deleted file mode 100644 index 21011558184..00000000000 --- a/api/operations/auth/login_oauth2_auth.go +++ /dev/null @@ -1,73 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package auth - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" -) - -// LoginOauth2AuthHandlerFunc turns a function with the right signature into a login oauth2 auth handler -type LoginOauth2AuthHandlerFunc func(LoginOauth2AuthParams) middleware.Responder - -// Handle executing the request and returning a response -func (fn LoginOauth2AuthHandlerFunc) Handle(params LoginOauth2AuthParams) middleware.Responder { - return fn(params) -} - -// LoginOauth2AuthHandler interface for that can handle valid login oauth2 auth params -type LoginOauth2AuthHandler interface { - Handle(LoginOauth2AuthParams) middleware.Responder -} - -// NewLoginOauth2Auth creates a new http.Handler for the login oauth2 auth operation -func NewLoginOauth2Auth(ctx *middleware.Context, handler LoginOauth2AuthHandler) *LoginOauth2Auth { - return &LoginOauth2Auth{Context: ctx, Handler: handler} -} - -/* - LoginOauth2Auth swagger:route POST /login/oauth2/auth Auth loginOauth2Auth - -Identity Provider oauth2 callback endpoint. -*/ -type LoginOauth2Auth struct { - Context *middleware.Context - Handler LoginOauth2AuthHandler -} - -func (o *LoginOauth2Auth) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewLoginOauth2AuthParams() - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/auth/login_oauth2_auth_parameters.go b/api/operations/auth/login_oauth2_auth_parameters.go deleted file mode 100644 index d1f31018b5c..00000000000 --- a/api/operations/auth/login_oauth2_auth_parameters.go +++ /dev/null @@ -1,101 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package auth - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "io" - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/validate" - - "github.com/minio/operator/models" -) - -// NewLoginOauth2AuthParams creates a new LoginOauth2AuthParams object -// -// There are no default values defined in the spec. -func NewLoginOauth2AuthParams() LoginOauth2AuthParams { - - return LoginOauth2AuthParams{} -} - -// LoginOauth2AuthParams contains all the bound params for the login oauth2 auth operation -// typically these are obtained from a http.Request -// -// swagger:parameters LoginOauth2Auth -type LoginOauth2AuthParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: body - */ - Body *models.LoginOauth2AuthRequest -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewLoginOauth2AuthParams() beforehand. -func (o *LoginOauth2AuthParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - if runtime.HasBody(r) { - defer r.Body.Close() - var body models.LoginOauth2AuthRequest - if err := route.Consumer.Consume(r.Body, &body); err != nil { - if err == io.EOF { - res = append(res, errors.Required("body", "body", "")) - } else { - res = append(res, errors.NewParseError("body", "body", "", err)) - } - } else { - // validate body object - if err := body.Validate(route.Formats); err != nil { - res = append(res, err) - } - - ctx := validate.WithOperationRequest(r.Context()) - if err := body.ContextValidate(ctx, route.Formats); err != nil { - res = append(res, err) - } - - if len(res) == 0 { - o.Body = &body - } - } - } else { - res = append(res, errors.Required("body", "body", "")) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} diff --git a/api/operations/auth/login_oauth2_auth_responses.go b/api/operations/auth/login_oauth2_auth_responses.go deleted file mode 100644 index 842ce3c9221..00000000000 --- a/api/operations/auth/login_oauth2_auth_responses.go +++ /dev/null @@ -1,115 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package auth - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// LoginOauth2AuthNoContentCode is the HTTP code returned for type LoginOauth2AuthNoContent -const LoginOauth2AuthNoContentCode int = 204 - -/* -LoginOauth2AuthNoContent A successful login. - -swagger:response loginOauth2AuthNoContent -*/ -type LoginOauth2AuthNoContent struct { -} - -// NewLoginOauth2AuthNoContent creates LoginOauth2AuthNoContent with default headers values -func NewLoginOauth2AuthNoContent() *LoginOauth2AuthNoContent { - - return &LoginOauth2AuthNoContent{} -} - -// WriteResponse to the client -func (o *LoginOauth2AuthNoContent) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses - - rw.WriteHeader(204) -} - -/* -LoginOauth2AuthDefault Generic error response. - -swagger:response loginOauth2AuthDefault -*/ -type LoginOauth2AuthDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewLoginOauth2AuthDefault creates LoginOauth2AuthDefault with default headers values -func NewLoginOauth2AuthDefault(code int) *LoginOauth2AuthDefault { - if code <= 0 { - code = 500 - } - - return &LoginOauth2AuthDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the login oauth2 auth default response -func (o *LoginOauth2AuthDefault) WithStatusCode(code int) *LoginOauth2AuthDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the login oauth2 auth default response -func (o *LoginOauth2AuthDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the login oauth2 auth default response -func (o *LoginOauth2AuthDefault) WithPayload(payload *models.Error) *LoginOauth2AuthDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the login oauth2 auth default response -func (o *LoginOauth2AuthDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *LoginOauth2AuthDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/auth/login_oauth2_auth_urlbuilder.go b/api/operations/auth/login_oauth2_auth_urlbuilder.go deleted file mode 100644 index ad4dac87c17..00000000000 --- a/api/operations/auth/login_oauth2_auth_urlbuilder.go +++ /dev/null @@ -1,104 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package auth - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" -) - -// LoginOauth2AuthURL generates an URL for the login oauth2 auth operation -type LoginOauth2AuthURL struct { - _basePath string -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *LoginOauth2AuthURL) WithBasePath(bp string) *LoginOauth2AuthURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *LoginOauth2AuthURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *LoginOauth2AuthURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/login/oauth2/auth" - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *LoginOauth2AuthURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *LoginOauth2AuthURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *LoginOauth2AuthURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on LoginOauth2AuthURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on LoginOauth2AuthURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *LoginOauth2AuthURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/auth/login_operator.go b/api/operations/auth/login_operator.go deleted file mode 100644 index 7874c283163..00000000000 --- a/api/operations/auth/login_operator.go +++ /dev/null @@ -1,73 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package auth - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" -) - -// LoginOperatorHandlerFunc turns a function with the right signature into a login operator handler -type LoginOperatorHandlerFunc func(LoginOperatorParams) middleware.Responder - -// Handle executing the request and returning a response -func (fn LoginOperatorHandlerFunc) Handle(params LoginOperatorParams) middleware.Responder { - return fn(params) -} - -// LoginOperatorHandler interface for that can handle valid login operator params -type LoginOperatorHandler interface { - Handle(LoginOperatorParams) middleware.Responder -} - -// NewLoginOperator creates a new http.Handler for the login operator operation -func NewLoginOperator(ctx *middleware.Context, handler LoginOperatorHandler) *LoginOperator { - return &LoginOperator{Context: ctx, Handler: handler} -} - -/* - LoginOperator swagger:route POST /login/operator Auth loginOperator - -Login to Operator Console. -*/ -type LoginOperator struct { - Context *middleware.Context - Handler LoginOperatorHandler -} - -func (o *LoginOperator) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewLoginOperatorParams() - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/auth/login_operator_parameters.go b/api/operations/auth/login_operator_parameters.go deleted file mode 100644 index 4eccccfcfa7..00000000000 --- a/api/operations/auth/login_operator_parameters.go +++ /dev/null @@ -1,101 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package auth - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "io" - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/validate" - - "github.com/minio/operator/models" -) - -// NewLoginOperatorParams creates a new LoginOperatorParams object -// -// There are no default values defined in the spec. -func NewLoginOperatorParams() LoginOperatorParams { - - return LoginOperatorParams{} -} - -// LoginOperatorParams contains all the bound params for the login operator operation -// typically these are obtained from a http.Request -// -// swagger:parameters LoginOperator -type LoginOperatorParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: body - */ - Body *models.LoginOperatorRequest -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewLoginOperatorParams() beforehand. -func (o *LoginOperatorParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - if runtime.HasBody(r) { - defer r.Body.Close() - var body models.LoginOperatorRequest - if err := route.Consumer.Consume(r.Body, &body); err != nil { - if err == io.EOF { - res = append(res, errors.Required("body", "body", "")) - } else { - res = append(res, errors.NewParseError("body", "body", "", err)) - } - } else { - // validate body object - if err := body.Validate(route.Formats); err != nil { - res = append(res, err) - } - - ctx := validate.WithOperationRequest(r.Context()) - if err := body.ContextValidate(ctx, route.Formats); err != nil { - res = append(res, err) - } - - if len(res) == 0 { - o.Body = &body - } - } - } else { - res = append(res, errors.Required("body", "body", "")) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} diff --git a/api/operations/auth/login_operator_responses.go b/api/operations/auth/login_operator_responses.go deleted file mode 100644 index 1b3a036e282..00000000000 --- a/api/operations/auth/login_operator_responses.go +++ /dev/null @@ -1,115 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package auth - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// LoginOperatorNoContentCode is the HTTP code returned for type LoginOperatorNoContent -const LoginOperatorNoContentCode int = 204 - -/* -LoginOperatorNoContent A successful login. - -swagger:response loginOperatorNoContent -*/ -type LoginOperatorNoContent struct { -} - -// NewLoginOperatorNoContent creates LoginOperatorNoContent with default headers values -func NewLoginOperatorNoContent() *LoginOperatorNoContent { - - return &LoginOperatorNoContent{} -} - -// WriteResponse to the client -func (o *LoginOperatorNoContent) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses - - rw.WriteHeader(204) -} - -/* -LoginOperatorDefault Generic error response. - -swagger:response loginOperatorDefault -*/ -type LoginOperatorDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewLoginOperatorDefault creates LoginOperatorDefault with default headers values -func NewLoginOperatorDefault(code int) *LoginOperatorDefault { - if code <= 0 { - code = 500 - } - - return &LoginOperatorDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the login operator default response -func (o *LoginOperatorDefault) WithStatusCode(code int) *LoginOperatorDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the login operator default response -func (o *LoginOperatorDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the login operator default response -func (o *LoginOperatorDefault) WithPayload(payload *models.Error) *LoginOperatorDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the login operator default response -func (o *LoginOperatorDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *LoginOperatorDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/auth/login_operator_urlbuilder.go b/api/operations/auth/login_operator_urlbuilder.go deleted file mode 100644 index 64dc209e410..00000000000 --- a/api/operations/auth/login_operator_urlbuilder.go +++ /dev/null @@ -1,104 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package auth - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" -) - -// LoginOperatorURL generates an URL for the login operator operation -type LoginOperatorURL struct { - _basePath string -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *LoginOperatorURL) WithBasePath(bp string) *LoginOperatorURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *LoginOperatorURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *LoginOperatorURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/login/operator" - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *LoginOperatorURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *LoginOperatorURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *LoginOperatorURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on LoginOperatorURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on LoginOperatorURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *LoginOperatorURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/auth/logout.go b/api/operations/auth/logout.go deleted file mode 100644 index 2b3f380b540..00000000000 --- a/api/operations/auth/logout.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package auth - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// LogoutHandlerFunc turns a function with the right signature into a logout handler -type LogoutHandlerFunc func(LogoutParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn LogoutHandlerFunc) Handle(params LogoutParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// LogoutHandler interface for that can handle valid logout params -type LogoutHandler interface { - Handle(LogoutParams, *models.Principal) middleware.Responder -} - -// NewLogout creates a new http.Handler for the logout operation -func NewLogout(ctx *middleware.Context, handler LogoutHandler) *Logout { - return &Logout{Context: ctx, Handler: handler} -} - -/* - Logout swagger:route POST /logout Auth logout - -Logout from Operator. -*/ -type Logout struct { - Context *middleware.Context - Handler LogoutHandler -} - -func (o *Logout) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewLogoutParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/auth/logout_parameters.go b/api/operations/auth/logout_parameters.go deleted file mode 100644 index deb05ec8590..00000000000 --- a/api/operations/auth/logout_parameters.go +++ /dev/null @@ -1,63 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package auth - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime/middleware" -) - -// NewLogoutParams creates a new LogoutParams object -// -// There are no default values defined in the spec. -func NewLogoutParams() LogoutParams { - - return LogoutParams{} -} - -// LogoutParams contains all the bound params for the logout operation -// typically these are obtained from a http.Request -// -// swagger:parameters Logout -type LogoutParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewLogoutParams() beforehand. -func (o *LogoutParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} diff --git a/api/operations/auth/logout_responses.go b/api/operations/auth/logout_responses.go deleted file mode 100644 index 456f341576d..00000000000 --- a/api/operations/auth/logout_responses.go +++ /dev/null @@ -1,115 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package auth - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// LogoutOKCode is the HTTP code returned for type LogoutOK -const LogoutOKCode int = 200 - -/* -LogoutOK A successful response. - -swagger:response logoutOK -*/ -type LogoutOK struct { -} - -// NewLogoutOK creates LogoutOK with default headers values -func NewLogoutOK() *LogoutOK { - - return &LogoutOK{} -} - -// WriteResponse to the client -func (o *LogoutOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses - - rw.WriteHeader(200) -} - -/* -LogoutDefault Generic error response. - -swagger:response logoutDefault -*/ -type LogoutDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewLogoutDefault creates LogoutDefault with default headers values -func NewLogoutDefault(code int) *LogoutDefault { - if code <= 0 { - code = 500 - } - - return &LogoutDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the logout default response -func (o *LogoutDefault) WithStatusCode(code int) *LogoutDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the logout default response -func (o *LogoutDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the logout default response -func (o *LogoutDefault) WithPayload(payload *models.Error) *LogoutDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the logout default response -func (o *LogoutDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *LogoutDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/auth/logout_urlbuilder.go b/api/operations/auth/logout_urlbuilder.go deleted file mode 100644 index 9a73c2316e3..00000000000 --- a/api/operations/auth/logout_urlbuilder.go +++ /dev/null @@ -1,104 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package auth - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" -) - -// LogoutURL generates an URL for the logout operation -type LogoutURL struct { - _basePath string -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *LogoutURL) WithBasePath(bp string) *LogoutURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *LogoutURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *LogoutURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/logout" - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *LogoutURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *LogoutURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *LogoutURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on LogoutURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on LogoutURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *LogoutURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/auth/session_check.go b/api/operations/auth/session_check.go deleted file mode 100644 index 5a644198fa7..00000000000 --- a/api/operations/auth/session_check.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package auth - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// SessionCheckHandlerFunc turns a function with the right signature into a session check handler -type SessionCheckHandlerFunc func(SessionCheckParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn SessionCheckHandlerFunc) Handle(params SessionCheckParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// SessionCheckHandler interface for that can handle valid session check params -type SessionCheckHandler interface { - Handle(SessionCheckParams, *models.Principal) middleware.Responder -} - -// NewSessionCheck creates a new http.Handler for the session check operation -func NewSessionCheck(ctx *middleware.Context, handler SessionCheckHandler) *SessionCheck { - return &SessionCheck{Context: ctx, Handler: handler} -} - -/* - SessionCheck swagger:route GET /session Auth sessionCheck - -Endpoint to check if your session is still valid -*/ -type SessionCheck struct { - Context *middleware.Context - Handler SessionCheckHandler -} - -func (o *SessionCheck) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewSessionCheckParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/auth/session_check_parameters.go b/api/operations/auth/session_check_parameters.go deleted file mode 100644 index 36613f3a134..00000000000 --- a/api/operations/auth/session_check_parameters.go +++ /dev/null @@ -1,63 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package auth - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime/middleware" -) - -// NewSessionCheckParams creates a new SessionCheckParams object -// -// There are no default values defined in the spec. -func NewSessionCheckParams() SessionCheckParams { - - return SessionCheckParams{} -} - -// SessionCheckParams contains all the bound params for the session check operation -// typically these are obtained from a http.Request -// -// swagger:parameters SessionCheck -type SessionCheckParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewSessionCheckParams() beforehand. -func (o *SessionCheckParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} diff --git a/api/operations/auth/session_check_responses.go b/api/operations/auth/session_check_responses.go deleted file mode 100644 index b8ce14fb5e8..00000000000 --- a/api/operations/auth/session_check_responses.go +++ /dev/null @@ -1,135 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package auth - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// SessionCheckOKCode is the HTTP code returned for type SessionCheckOK -const SessionCheckOKCode int = 200 - -/* -SessionCheckOK A successful response. - -swagger:response sessionCheckOK -*/ -type SessionCheckOK struct { - - /* - In: Body - */ - Payload *models.OperatorSessionResponse `json:"body,omitempty"` -} - -// NewSessionCheckOK creates SessionCheckOK with default headers values -func NewSessionCheckOK() *SessionCheckOK { - - return &SessionCheckOK{} -} - -// WithPayload adds the payload to the session check o k response -func (o *SessionCheckOK) WithPayload(payload *models.OperatorSessionResponse) *SessionCheckOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the session check o k response -func (o *SessionCheckOK) SetPayload(payload *models.OperatorSessionResponse) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *SessionCheckOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} - -/* -SessionCheckDefault Generic error response. - -swagger:response sessionCheckDefault -*/ -type SessionCheckDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewSessionCheckDefault creates SessionCheckDefault with default headers values -func NewSessionCheckDefault(code int) *SessionCheckDefault { - if code <= 0 { - code = 500 - } - - return &SessionCheckDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the session check default response -func (o *SessionCheckDefault) WithStatusCode(code int) *SessionCheckDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the session check default response -func (o *SessionCheckDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the session check default response -func (o *SessionCheckDefault) WithPayload(payload *models.Error) *SessionCheckDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the session check default response -func (o *SessionCheckDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *SessionCheckDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/auth/session_check_urlbuilder.go b/api/operations/auth/session_check_urlbuilder.go deleted file mode 100644 index c02328c032b..00000000000 --- a/api/operations/auth/session_check_urlbuilder.go +++ /dev/null @@ -1,104 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package auth - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" -) - -// SessionCheckURL generates an URL for the session check operation -type SessionCheckURL struct { - _basePath string -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *SessionCheckURL) WithBasePath(bp string) *SessionCheckURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *SessionCheckURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *SessionCheckURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/session" - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *SessionCheckURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *SessionCheckURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *SessionCheckURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on SessionCheckURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on SessionCheckURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *SessionCheckURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api.go b/api/operations/operator_api.go deleted file mode 100644 index 444e471b824..00000000000 --- a/api/operations/operator_api.go +++ /dev/null @@ -1,1046 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operations - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "fmt" - "net/http" - "strings" - - "github.com/go-openapi/errors" - "github.com/go-openapi/loads" - "github.com/go-openapi/runtime" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/runtime/security" - "github.com/go-openapi/spec" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" - - "github.com/minio/operator/api/operations/auth" - "github.com/minio/operator/api/operations/operator_api" - "github.com/minio/operator/api/operations/user_api" - "github.com/minio/operator/models" -) - -// NewOperatorAPI creates a new Operator instance -func NewOperatorAPI(spec *loads.Document) *OperatorAPI { - return &OperatorAPI{ - handlers: make(map[string]map[string]http.Handler), - formats: strfmt.Default, - defaultConsumes: "application/json", - defaultProduces: "application/json", - customConsumers: make(map[string]runtime.Consumer), - customProducers: make(map[string]runtime.Producer), - PreServerShutdown: func() {}, - ServerShutdown: func() {}, - spec: spec, - useSwaggerUI: false, - ServeError: errors.ServeError, - BasicAuthenticator: security.BasicAuth, - APIKeyAuthenticator: security.APIKeyAuth, - BearerAuthenticator: security.BearerAuth, - - JSONConsumer: runtime.JSONConsumer(), - - JSONProducer: runtime.JSONProducer(), - - UserAPICheckMinIOVersionHandler: user_api.CheckMinIOVersionHandlerFunc(func(params user_api.CheckMinIOVersionParams) middleware.Responder { - return middleware.NotImplemented("operation user_api.CheckMinIOVersion has not yet been implemented") - }), - OperatorAPICreateNamespaceHandler: operator_api.CreateNamespaceHandlerFunc(func(params operator_api.CreateNamespaceParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.CreateNamespace has not yet been implemented") - }), - OperatorAPICreateTenantHandler: operator_api.CreateTenantHandlerFunc(func(params operator_api.CreateTenantParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.CreateTenant has not yet been implemented") - }), - OperatorAPIDeletePVCHandler: operator_api.DeletePVCHandlerFunc(func(params operator_api.DeletePVCParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.DeletePVC has not yet been implemented") - }), - OperatorAPIDeletePodHandler: operator_api.DeletePodHandlerFunc(func(params operator_api.DeletePodParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.DeletePod has not yet been implemented") - }), - OperatorAPIDeleteTenantHandler: operator_api.DeleteTenantHandlerFunc(func(params operator_api.DeleteTenantParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.DeleteTenant has not yet been implemented") - }), - OperatorAPIDescribePodHandler: operator_api.DescribePodHandlerFunc(func(params operator_api.DescribePodParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.DescribePod has not yet been implemented") - }), - OperatorAPIGetAllocatableResourcesHandler: operator_api.GetAllocatableResourcesHandlerFunc(func(params operator_api.GetAllocatableResourcesParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.GetAllocatableResources has not yet been implemented") - }), - OperatorAPIGetMPIntegrationHandler: operator_api.GetMPIntegrationHandlerFunc(func(params operator_api.GetMPIntegrationParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.GetMPIntegration has not yet been implemented") - }), - OperatorAPIGetMaxAllocatableMemHandler: operator_api.GetMaxAllocatableMemHandlerFunc(func(params operator_api.GetMaxAllocatableMemParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.GetMaxAllocatableMem has not yet been implemented") - }), - OperatorAPIGetPVCDescribeHandler: operator_api.GetPVCDescribeHandlerFunc(func(params operator_api.GetPVCDescribeParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.GetPVCDescribe has not yet been implemented") - }), - OperatorAPIGetPVCEventsHandler: operator_api.GetPVCEventsHandlerFunc(func(params operator_api.GetPVCEventsParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.GetPVCEvents has not yet been implemented") - }), - OperatorAPIGetParityHandler: operator_api.GetParityHandlerFunc(func(params operator_api.GetParityParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.GetParity has not yet been implemented") - }), - OperatorAPIGetPodEventsHandler: operator_api.GetPodEventsHandlerFunc(func(params operator_api.GetPodEventsParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.GetPodEvents has not yet been implemented") - }), - OperatorAPIGetPodLogsHandler: operator_api.GetPodLogsHandlerFunc(func(params operator_api.GetPodLogsParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.GetPodLogs has not yet been implemented") - }), - OperatorAPIGetResourceQuotaHandler: operator_api.GetResourceQuotaHandlerFunc(func(params operator_api.GetResourceQuotaParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.GetResourceQuota has not yet been implemented") - }), - OperatorAPIGetTenantEventsHandler: operator_api.GetTenantEventsHandlerFunc(func(params operator_api.GetTenantEventsParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.GetTenantEvents has not yet been implemented") - }), - OperatorAPIGetTenantLogReportHandler: operator_api.GetTenantLogReportHandlerFunc(func(params operator_api.GetTenantLogReportParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.GetTenantLogReport has not yet been implemented") - }), - OperatorAPIGetTenantPodsHandler: operator_api.GetTenantPodsHandlerFunc(func(params operator_api.GetTenantPodsParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.GetTenantPods has not yet been implemented") - }), - OperatorAPIGetTenantUsageHandler: operator_api.GetTenantUsageHandlerFunc(func(params operator_api.GetTenantUsageParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.GetTenantUsage has not yet been implemented") - }), - OperatorAPIGetTenantYAMLHandler: operator_api.GetTenantYAMLHandlerFunc(func(params operator_api.GetTenantYAMLParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.GetTenantYAML has not yet been implemented") - }), - OperatorAPIListAllTenantsHandler: operator_api.ListAllTenantsHandlerFunc(func(params operator_api.ListAllTenantsParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.ListAllTenants has not yet been implemented") - }), - OperatorAPIListNodeLabelsHandler: operator_api.ListNodeLabelsHandlerFunc(func(params operator_api.ListNodeLabelsParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.ListNodeLabels has not yet been implemented") - }), - OperatorAPIListPVCsHandler: operator_api.ListPVCsHandlerFunc(func(params operator_api.ListPVCsParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.ListPVCs has not yet been implemented") - }), - OperatorAPIListPVCsForTenantHandler: operator_api.ListPVCsForTenantHandlerFunc(func(params operator_api.ListPVCsForTenantParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.ListPVCsForTenant has not yet been implemented") - }), - OperatorAPIListTenantCertificateSigningRequestHandler: operator_api.ListTenantCertificateSigningRequestHandlerFunc(func(params operator_api.ListTenantCertificateSigningRequestParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.ListTenantCertificateSigningRequest has not yet been implemented") - }), - OperatorAPIListTenantsHandler: operator_api.ListTenantsHandlerFunc(func(params operator_api.ListTenantsParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.ListTenants has not yet been implemented") - }), - AuthLoginDetailHandler: auth.LoginDetailHandlerFunc(func(params auth.LoginDetailParams) middleware.Responder { - return middleware.NotImplemented("operation auth.LoginDetail has not yet been implemented") - }), - AuthLoginOauth2AuthHandler: auth.LoginOauth2AuthHandlerFunc(func(params auth.LoginOauth2AuthParams) middleware.Responder { - return middleware.NotImplemented("operation auth.LoginOauth2Auth has not yet been implemented") - }), - AuthLoginOperatorHandler: auth.LoginOperatorHandlerFunc(func(params auth.LoginOperatorParams) middleware.Responder { - return middleware.NotImplemented("operation auth.LoginOperator has not yet been implemented") - }), - AuthLogoutHandler: auth.LogoutHandlerFunc(func(params auth.LogoutParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation auth.Logout has not yet been implemented") - }), - OperatorAPIOperatorSubnetAPIKeyInfoHandler: operator_api.OperatorSubnetAPIKeyInfoHandlerFunc(func(params operator_api.OperatorSubnetAPIKeyInfoParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.OperatorSubnetAPIKeyInfo has not yet been implemented") - }), - OperatorAPIOperatorSubnetAPIKeyHandler: operator_api.OperatorSubnetAPIKeyHandlerFunc(func(params operator_api.OperatorSubnetAPIKeyParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.OperatorSubnetAPIKey has not yet been implemented") - }), - OperatorAPIOperatorSubnetLoginHandler: operator_api.OperatorSubnetLoginHandlerFunc(func(params operator_api.OperatorSubnetLoginParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.OperatorSubnetLogin has not yet been implemented") - }), - OperatorAPIOperatorSubnetLoginMFAHandler: operator_api.OperatorSubnetLoginMFAHandlerFunc(func(params operator_api.OperatorSubnetLoginMFAParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.OperatorSubnetLoginMFA has not yet been implemented") - }), - OperatorAPIOperatorSubnetRegisterAPIKeyHandler: operator_api.OperatorSubnetRegisterAPIKeyHandlerFunc(func(params operator_api.OperatorSubnetRegisterAPIKeyParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.OperatorSubnetRegisterAPIKey has not yet been implemented") - }), - OperatorAPIPostMPIntegrationHandler: operator_api.PostMPIntegrationHandlerFunc(func(params operator_api.PostMPIntegrationParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.PostMPIntegration has not yet been implemented") - }), - OperatorAPIPutTenantYAMLHandler: operator_api.PutTenantYAMLHandlerFunc(func(params operator_api.PutTenantYAMLParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.PutTenantYAML has not yet been implemented") - }), - AuthSessionCheckHandler: auth.SessionCheckHandlerFunc(func(params auth.SessionCheckParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation auth.SessionCheck has not yet been implemented") - }), - OperatorAPISetTenantAdministratorsHandler: operator_api.SetTenantAdministratorsHandlerFunc(func(params operator_api.SetTenantAdministratorsParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.SetTenantAdministrators has not yet been implemented") - }), - OperatorAPISubscriptionActivateHandler: operator_api.SubscriptionActivateHandlerFunc(func(params operator_api.SubscriptionActivateParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.SubscriptionActivate has not yet been implemented") - }), - OperatorAPISubscriptionInfoHandler: operator_api.SubscriptionInfoHandlerFunc(func(params operator_api.SubscriptionInfoParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.SubscriptionInfo has not yet been implemented") - }), - OperatorAPISubscriptionRefreshHandler: operator_api.SubscriptionRefreshHandlerFunc(func(params operator_api.SubscriptionRefreshParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.SubscriptionRefresh has not yet been implemented") - }), - OperatorAPISubscriptionValidateHandler: operator_api.SubscriptionValidateHandlerFunc(func(params operator_api.SubscriptionValidateParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.SubscriptionValidate has not yet been implemented") - }), - OperatorAPITenantAddPoolHandler: operator_api.TenantAddPoolHandlerFunc(func(params operator_api.TenantAddPoolParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.TenantAddPool has not yet been implemented") - }), - OperatorAPITenantConfigurationHandler: operator_api.TenantConfigurationHandlerFunc(func(params operator_api.TenantConfigurationParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.TenantConfiguration has not yet been implemented") - }), - OperatorAPITenantDeleteEncryptionHandler: operator_api.TenantDeleteEncryptionHandlerFunc(func(params operator_api.TenantDeleteEncryptionParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.TenantDeleteEncryption has not yet been implemented") - }), - OperatorAPITenantDetailsHandler: operator_api.TenantDetailsHandlerFunc(func(params operator_api.TenantDetailsParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.TenantDetails has not yet been implemented") - }), - OperatorAPITenantEncryptionInfoHandler: operator_api.TenantEncryptionInfoHandlerFunc(func(params operator_api.TenantEncryptionInfoParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.TenantEncryptionInfo has not yet been implemented") - }), - OperatorAPITenantIdentityProviderHandler: operator_api.TenantIdentityProviderHandlerFunc(func(params operator_api.TenantIdentityProviderParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.TenantIdentityProvider has not yet been implemented") - }), - OperatorAPITenantSecurityHandler: operator_api.TenantSecurityHandlerFunc(func(params operator_api.TenantSecurityParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.TenantSecurity has not yet been implemented") - }), - OperatorAPITenantUpdateCertificateHandler: operator_api.TenantUpdateCertificateHandlerFunc(func(params operator_api.TenantUpdateCertificateParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.TenantUpdateCertificate has not yet been implemented") - }), - OperatorAPITenantUpdateEncryptionHandler: operator_api.TenantUpdateEncryptionHandlerFunc(func(params operator_api.TenantUpdateEncryptionParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.TenantUpdateEncryption has not yet been implemented") - }), - OperatorAPITenantUpdatePoolsHandler: operator_api.TenantUpdatePoolsHandlerFunc(func(params operator_api.TenantUpdatePoolsParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.TenantUpdatePools has not yet been implemented") - }), - OperatorAPIUpdateTenantHandler: operator_api.UpdateTenantHandlerFunc(func(params operator_api.UpdateTenantParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.UpdateTenant has not yet been implemented") - }), - OperatorAPIUpdateTenantConfigurationHandler: operator_api.UpdateTenantConfigurationHandlerFunc(func(params operator_api.UpdateTenantConfigurationParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.UpdateTenantConfiguration has not yet been implemented") - }), - OperatorAPIUpdateTenantDomainsHandler: operator_api.UpdateTenantDomainsHandlerFunc(func(params operator_api.UpdateTenantDomainsParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.UpdateTenantDomains has not yet been implemented") - }), - OperatorAPIUpdateTenantIdentityProviderHandler: operator_api.UpdateTenantIdentityProviderHandlerFunc(func(params operator_api.UpdateTenantIdentityProviderParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.UpdateTenantIdentityProvider has not yet been implemented") - }), - OperatorAPIUpdateTenantSecurityHandler: operator_api.UpdateTenantSecurityHandlerFunc(func(params operator_api.UpdateTenantSecurityParams, principal *models.Principal) middleware.Responder { - return middleware.NotImplemented("operation operator_api.UpdateTenantSecurity has not yet been implemented") - }), - - KeyAuth: func(token string, scopes []string) (*models.Principal, error) { - return nil, errors.NotImplemented("oauth2 bearer auth (key) has not yet been implemented") - }, - // default authorizer is authorized meaning no requests are blocked - APIAuthorizer: security.Authorized(), - } -} - -/*OperatorAPI the operator API */ -type OperatorAPI struct { - spec *loads.Document - context *middleware.Context - handlers map[string]map[string]http.Handler - formats strfmt.Registry - customConsumers map[string]runtime.Consumer - customProducers map[string]runtime.Producer - defaultConsumes string - defaultProduces string - Middleware func(middleware.Builder) http.Handler - useSwaggerUI bool - - // BasicAuthenticator generates a runtime.Authenticator from the supplied basic auth function. - // It has a default implementation in the security package, however you can replace it for your particular usage. - BasicAuthenticator func(security.UserPassAuthentication) runtime.Authenticator - - // APIKeyAuthenticator generates a runtime.Authenticator from the supplied token auth function. - // It has a default implementation in the security package, however you can replace it for your particular usage. - APIKeyAuthenticator func(string, string, security.TokenAuthentication) runtime.Authenticator - - // BearerAuthenticator generates a runtime.Authenticator from the supplied bearer token auth function. - // It has a default implementation in the security package, however you can replace it for your particular usage. - BearerAuthenticator func(string, security.ScopedTokenAuthentication) runtime.Authenticator - - // JSONConsumer registers a consumer for the following mime types: - // - application/json - JSONConsumer runtime.Consumer - - // JSONProducer registers a producer for the following mime types: - // - application/json - JSONProducer runtime.Producer - - // KeyAuth registers a function that takes an access token and a collection of required scopes and returns a principal - // it performs authentication based on an oauth2 bearer token provided in the request - KeyAuth func(string, []string) (*models.Principal, error) - - // APIAuthorizer provides access control (ACL/RBAC/ABAC) by providing access to the request and authenticated principal - APIAuthorizer runtime.Authorizer - - // UserAPICheckMinIOVersionHandler sets the operation handler for the check min i o version operation - UserAPICheckMinIOVersionHandler user_api.CheckMinIOVersionHandler - // OperatorAPICreateNamespaceHandler sets the operation handler for the create namespace operation - OperatorAPICreateNamespaceHandler operator_api.CreateNamespaceHandler - // OperatorAPICreateTenantHandler sets the operation handler for the create tenant operation - OperatorAPICreateTenantHandler operator_api.CreateTenantHandler - // OperatorAPIDeletePVCHandler sets the operation handler for the delete p v c operation - OperatorAPIDeletePVCHandler operator_api.DeletePVCHandler - // OperatorAPIDeletePodHandler sets the operation handler for the delete pod operation - OperatorAPIDeletePodHandler operator_api.DeletePodHandler - // OperatorAPIDeleteTenantHandler sets the operation handler for the delete tenant operation - OperatorAPIDeleteTenantHandler operator_api.DeleteTenantHandler - // OperatorAPIDescribePodHandler sets the operation handler for the describe pod operation - OperatorAPIDescribePodHandler operator_api.DescribePodHandler - // OperatorAPIGetAllocatableResourcesHandler sets the operation handler for the get allocatable resources operation - OperatorAPIGetAllocatableResourcesHandler operator_api.GetAllocatableResourcesHandler - // OperatorAPIGetMPIntegrationHandler sets the operation handler for the get m p integration operation - OperatorAPIGetMPIntegrationHandler operator_api.GetMPIntegrationHandler - // OperatorAPIGetMaxAllocatableMemHandler sets the operation handler for the get max allocatable mem operation - OperatorAPIGetMaxAllocatableMemHandler operator_api.GetMaxAllocatableMemHandler - // OperatorAPIGetPVCDescribeHandler sets the operation handler for the get p v c describe operation - OperatorAPIGetPVCDescribeHandler operator_api.GetPVCDescribeHandler - // OperatorAPIGetPVCEventsHandler sets the operation handler for the get p v c events operation - OperatorAPIGetPVCEventsHandler operator_api.GetPVCEventsHandler - // OperatorAPIGetParityHandler sets the operation handler for the get parity operation - OperatorAPIGetParityHandler operator_api.GetParityHandler - // OperatorAPIGetPodEventsHandler sets the operation handler for the get pod events operation - OperatorAPIGetPodEventsHandler operator_api.GetPodEventsHandler - // OperatorAPIGetPodLogsHandler sets the operation handler for the get pod logs operation - OperatorAPIGetPodLogsHandler operator_api.GetPodLogsHandler - // OperatorAPIGetResourceQuotaHandler sets the operation handler for the get resource quota operation - OperatorAPIGetResourceQuotaHandler operator_api.GetResourceQuotaHandler - // OperatorAPIGetTenantEventsHandler sets the operation handler for the get tenant events operation - OperatorAPIGetTenantEventsHandler operator_api.GetTenantEventsHandler - // OperatorAPIGetTenantLogReportHandler sets the operation handler for the get tenant log report operation - OperatorAPIGetTenantLogReportHandler operator_api.GetTenantLogReportHandler - // OperatorAPIGetTenantPodsHandler sets the operation handler for the get tenant pods operation - OperatorAPIGetTenantPodsHandler operator_api.GetTenantPodsHandler - // OperatorAPIGetTenantUsageHandler sets the operation handler for the get tenant usage operation - OperatorAPIGetTenantUsageHandler operator_api.GetTenantUsageHandler - // OperatorAPIGetTenantYAMLHandler sets the operation handler for the get tenant y a m l operation - OperatorAPIGetTenantYAMLHandler operator_api.GetTenantYAMLHandler - // OperatorAPIListAllTenantsHandler sets the operation handler for the list all tenants operation - OperatorAPIListAllTenantsHandler operator_api.ListAllTenantsHandler - // OperatorAPIListNodeLabelsHandler sets the operation handler for the list node labels operation - OperatorAPIListNodeLabelsHandler operator_api.ListNodeLabelsHandler - // OperatorAPIListPVCsHandler sets the operation handler for the list p v cs operation - OperatorAPIListPVCsHandler operator_api.ListPVCsHandler - // OperatorAPIListPVCsForTenantHandler sets the operation handler for the list p v cs for tenant operation - OperatorAPIListPVCsForTenantHandler operator_api.ListPVCsForTenantHandler - // OperatorAPIListTenantCertificateSigningRequestHandler sets the operation handler for the list tenant certificate signing request operation - OperatorAPIListTenantCertificateSigningRequestHandler operator_api.ListTenantCertificateSigningRequestHandler - // OperatorAPIListTenantsHandler sets the operation handler for the list tenants operation - OperatorAPIListTenantsHandler operator_api.ListTenantsHandler - // AuthLoginDetailHandler sets the operation handler for the login detail operation - AuthLoginDetailHandler auth.LoginDetailHandler - // AuthLoginOauth2AuthHandler sets the operation handler for the login oauth2 auth operation - AuthLoginOauth2AuthHandler auth.LoginOauth2AuthHandler - // AuthLoginOperatorHandler sets the operation handler for the login operator operation - AuthLoginOperatorHandler auth.LoginOperatorHandler - // AuthLogoutHandler sets the operation handler for the logout operation - AuthLogoutHandler auth.LogoutHandler - // OperatorAPIOperatorSubnetAPIKeyInfoHandler sets the operation handler for the operator subnet API key info operation - OperatorAPIOperatorSubnetAPIKeyInfoHandler operator_api.OperatorSubnetAPIKeyInfoHandler - // OperatorAPIOperatorSubnetAPIKeyHandler sets the operation handler for the operator subnet Api key operation - OperatorAPIOperatorSubnetAPIKeyHandler operator_api.OperatorSubnetAPIKeyHandler - // OperatorAPIOperatorSubnetLoginHandler sets the operation handler for the operator subnet login operation - OperatorAPIOperatorSubnetLoginHandler operator_api.OperatorSubnetLoginHandler - // OperatorAPIOperatorSubnetLoginMFAHandler sets the operation handler for the operator subnet login m f a operation - OperatorAPIOperatorSubnetLoginMFAHandler operator_api.OperatorSubnetLoginMFAHandler - // OperatorAPIOperatorSubnetRegisterAPIKeyHandler sets the operation handler for the operator subnet register API key operation - OperatorAPIOperatorSubnetRegisterAPIKeyHandler operator_api.OperatorSubnetRegisterAPIKeyHandler - // OperatorAPIPostMPIntegrationHandler sets the operation handler for the post m p integration operation - OperatorAPIPostMPIntegrationHandler operator_api.PostMPIntegrationHandler - // OperatorAPIPutTenantYAMLHandler sets the operation handler for the put tenant y a m l operation - OperatorAPIPutTenantYAMLHandler operator_api.PutTenantYAMLHandler - // AuthSessionCheckHandler sets the operation handler for the session check operation - AuthSessionCheckHandler auth.SessionCheckHandler - // OperatorAPISetTenantAdministratorsHandler sets the operation handler for the set tenant administrators operation - OperatorAPISetTenantAdministratorsHandler operator_api.SetTenantAdministratorsHandler - // OperatorAPISubscriptionActivateHandler sets the operation handler for the subscription activate operation - OperatorAPISubscriptionActivateHandler operator_api.SubscriptionActivateHandler - // OperatorAPISubscriptionInfoHandler sets the operation handler for the subscription info operation - OperatorAPISubscriptionInfoHandler operator_api.SubscriptionInfoHandler - // OperatorAPISubscriptionRefreshHandler sets the operation handler for the subscription refresh operation - OperatorAPISubscriptionRefreshHandler operator_api.SubscriptionRefreshHandler - // OperatorAPISubscriptionValidateHandler sets the operation handler for the subscription validate operation - OperatorAPISubscriptionValidateHandler operator_api.SubscriptionValidateHandler - // OperatorAPITenantAddPoolHandler sets the operation handler for the tenant add pool operation - OperatorAPITenantAddPoolHandler operator_api.TenantAddPoolHandler - // OperatorAPITenantConfigurationHandler sets the operation handler for the tenant configuration operation - OperatorAPITenantConfigurationHandler operator_api.TenantConfigurationHandler - // OperatorAPITenantDeleteEncryptionHandler sets the operation handler for the tenant delete encryption operation - OperatorAPITenantDeleteEncryptionHandler operator_api.TenantDeleteEncryptionHandler - // OperatorAPITenantDetailsHandler sets the operation handler for the tenant details operation - OperatorAPITenantDetailsHandler operator_api.TenantDetailsHandler - // OperatorAPITenantEncryptionInfoHandler sets the operation handler for the tenant encryption info operation - OperatorAPITenantEncryptionInfoHandler operator_api.TenantEncryptionInfoHandler - // OperatorAPITenantIdentityProviderHandler sets the operation handler for the tenant identity provider operation - OperatorAPITenantIdentityProviderHandler operator_api.TenantIdentityProviderHandler - // OperatorAPITenantSecurityHandler sets the operation handler for the tenant security operation - OperatorAPITenantSecurityHandler operator_api.TenantSecurityHandler - // OperatorAPITenantUpdateCertificateHandler sets the operation handler for the tenant update certificate operation - OperatorAPITenantUpdateCertificateHandler operator_api.TenantUpdateCertificateHandler - // OperatorAPITenantUpdateEncryptionHandler sets the operation handler for the tenant update encryption operation - OperatorAPITenantUpdateEncryptionHandler operator_api.TenantUpdateEncryptionHandler - // OperatorAPITenantUpdatePoolsHandler sets the operation handler for the tenant update pools operation - OperatorAPITenantUpdatePoolsHandler operator_api.TenantUpdatePoolsHandler - // OperatorAPIUpdateTenantHandler sets the operation handler for the update tenant operation - OperatorAPIUpdateTenantHandler operator_api.UpdateTenantHandler - // OperatorAPIUpdateTenantConfigurationHandler sets the operation handler for the update tenant configuration operation - OperatorAPIUpdateTenantConfigurationHandler operator_api.UpdateTenantConfigurationHandler - // OperatorAPIUpdateTenantDomainsHandler sets the operation handler for the update tenant domains operation - OperatorAPIUpdateTenantDomainsHandler operator_api.UpdateTenantDomainsHandler - // OperatorAPIUpdateTenantIdentityProviderHandler sets the operation handler for the update tenant identity provider operation - OperatorAPIUpdateTenantIdentityProviderHandler operator_api.UpdateTenantIdentityProviderHandler - // OperatorAPIUpdateTenantSecurityHandler sets the operation handler for the update tenant security operation - OperatorAPIUpdateTenantSecurityHandler operator_api.UpdateTenantSecurityHandler - - // ServeError is called when an error is received, there is a default handler - // but you can set your own with this - ServeError func(http.ResponseWriter, *http.Request, error) - - // PreServerShutdown is called before the HTTP(S) server is shutdown - // This allows for custom functions to get executed before the HTTP(S) server stops accepting traffic - PreServerShutdown func() - - // ServerShutdown is called when the HTTP(S) server is shut down and done - // handling all active connections and does not accept connections any more - ServerShutdown func() - - // Custom command line argument groups with their descriptions - CommandLineOptionsGroups []swag.CommandLineOptionsGroup - - // User defined logger function. - Logger func(string, ...interface{}) -} - -// UseRedoc for documentation at /docs -func (o *OperatorAPI) UseRedoc() { - o.useSwaggerUI = false -} - -// UseSwaggerUI for documentation at /docs -func (o *OperatorAPI) UseSwaggerUI() { - o.useSwaggerUI = true -} - -// SetDefaultProduces sets the default produces media type -func (o *OperatorAPI) SetDefaultProduces(mediaType string) { - o.defaultProduces = mediaType -} - -// SetDefaultConsumes returns the default consumes media type -func (o *OperatorAPI) SetDefaultConsumes(mediaType string) { - o.defaultConsumes = mediaType -} - -// SetSpec sets a spec that will be served for the clients. -func (o *OperatorAPI) SetSpec(spec *loads.Document) { - o.spec = spec -} - -// DefaultProduces returns the default produces media type -func (o *OperatorAPI) DefaultProduces() string { - return o.defaultProduces -} - -// DefaultConsumes returns the default consumes media type -func (o *OperatorAPI) DefaultConsumes() string { - return o.defaultConsumes -} - -// Formats returns the registered string formats -func (o *OperatorAPI) Formats() strfmt.Registry { - return o.formats -} - -// RegisterFormat registers a custom format validator -func (o *OperatorAPI) RegisterFormat(name string, format strfmt.Format, validator strfmt.Validator) { - o.formats.Add(name, format, validator) -} - -// Validate validates the registrations in the OperatorAPI -func (o *OperatorAPI) Validate() error { - var unregistered []string - - if o.JSONConsumer == nil { - unregistered = append(unregistered, "JSONConsumer") - } - - if o.JSONProducer == nil { - unregistered = append(unregistered, "JSONProducer") - } - - if o.KeyAuth == nil { - unregistered = append(unregistered, "KeyAuth") - } - - if o.UserAPICheckMinIOVersionHandler == nil { - unregistered = append(unregistered, "user_api.CheckMinIOVersionHandler") - } - if o.OperatorAPICreateNamespaceHandler == nil { - unregistered = append(unregistered, "operator_api.CreateNamespaceHandler") - } - if o.OperatorAPICreateTenantHandler == nil { - unregistered = append(unregistered, "operator_api.CreateTenantHandler") - } - if o.OperatorAPIDeletePVCHandler == nil { - unregistered = append(unregistered, "operator_api.DeletePVCHandler") - } - if o.OperatorAPIDeletePodHandler == nil { - unregistered = append(unregistered, "operator_api.DeletePodHandler") - } - if o.OperatorAPIDeleteTenantHandler == nil { - unregistered = append(unregistered, "operator_api.DeleteTenantHandler") - } - if o.OperatorAPIDescribePodHandler == nil { - unregistered = append(unregistered, "operator_api.DescribePodHandler") - } - if o.OperatorAPIGetAllocatableResourcesHandler == nil { - unregistered = append(unregistered, "operator_api.GetAllocatableResourcesHandler") - } - if o.OperatorAPIGetMPIntegrationHandler == nil { - unregistered = append(unregistered, "operator_api.GetMPIntegrationHandler") - } - if o.OperatorAPIGetMaxAllocatableMemHandler == nil { - unregistered = append(unregistered, "operator_api.GetMaxAllocatableMemHandler") - } - if o.OperatorAPIGetPVCDescribeHandler == nil { - unregistered = append(unregistered, "operator_api.GetPVCDescribeHandler") - } - if o.OperatorAPIGetPVCEventsHandler == nil { - unregistered = append(unregistered, "operator_api.GetPVCEventsHandler") - } - if o.OperatorAPIGetParityHandler == nil { - unregistered = append(unregistered, "operator_api.GetParityHandler") - } - if o.OperatorAPIGetPodEventsHandler == nil { - unregistered = append(unregistered, "operator_api.GetPodEventsHandler") - } - if o.OperatorAPIGetPodLogsHandler == nil { - unregistered = append(unregistered, "operator_api.GetPodLogsHandler") - } - if o.OperatorAPIGetResourceQuotaHandler == nil { - unregistered = append(unregistered, "operator_api.GetResourceQuotaHandler") - } - if o.OperatorAPIGetTenantEventsHandler == nil { - unregistered = append(unregistered, "operator_api.GetTenantEventsHandler") - } - if o.OperatorAPIGetTenantLogReportHandler == nil { - unregistered = append(unregistered, "operator_api.GetTenantLogReportHandler") - } - if o.OperatorAPIGetTenantPodsHandler == nil { - unregistered = append(unregistered, "operator_api.GetTenantPodsHandler") - } - if o.OperatorAPIGetTenantUsageHandler == nil { - unregistered = append(unregistered, "operator_api.GetTenantUsageHandler") - } - if o.OperatorAPIGetTenantYAMLHandler == nil { - unregistered = append(unregistered, "operator_api.GetTenantYAMLHandler") - } - if o.OperatorAPIListAllTenantsHandler == nil { - unregistered = append(unregistered, "operator_api.ListAllTenantsHandler") - } - if o.OperatorAPIListNodeLabelsHandler == nil { - unregistered = append(unregistered, "operator_api.ListNodeLabelsHandler") - } - if o.OperatorAPIListPVCsHandler == nil { - unregistered = append(unregistered, "operator_api.ListPVCsHandler") - } - if o.OperatorAPIListPVCsForTenantHandler == nil { - unregistered = append(unregistered, "operator_api.ListPVCsForTenantHandler") - } - if o.OperatorAPIListTenantCertificateSigningRequestHandler == nil { - unregistered = append(unregistered, "operator_api.ListTenantCertificateSigningRequestHandler") - } - if o.OperatorAPIListTenantsHandler == nil { - unregistered = append(unregistered, "operator_api.ListTenantsHandler") - } - if o.AuthLoginDetailHandler == nil { - unregistered = append(unregistered, "auth.LoginDetailHandler") - } - if o.AuthLoginOauth2AuthHandler == nil { - unregistered = append(unregistered, "auth.LoginOauth2AuthHandler") - } - if o.AuthLoginOperatorHandler == nil { - unregistered = append(unregistered, "auth.LoginOperatorHandler") - } - if o.AuthLogoutHandler == nil { - unregistered = append(unregistered, "auth.LogoutHandler") - } - if o.OperatorAPIOperatorSubnetAPIKeyInfoHandler == nil { - unregistered = append(unregistered, "operator_api.OperatorSubnetAPIKeyInfoHandler") - } - if o.OperatorAPIOperatorSubnetAPIKeyHandler == nil { - unregistered = append(unregistered, "operator_api.OperatorSubnetAPIKeyHandler") - } - if o.OperatorAPIOperatorSubnetLoginHandler == nil { - unregistered = append(unregistered, "operator_api.OperatorSubnetLoginHandler") - } - if o.OperatorAPIOperatorSubnetLoginMFAHandler == nil { - unregistered = append(unregistered, "operator_api.OperatorSubnetLoginMFAHandler") - } - if o.OperatorAPIOperatorSubnetRegisterAPIKeyHandler == nil { - unregistered = append(unregistered, "operator_api.OperatorSubnetRegisterAPIKeyHandler") - } - if o.OperatorAPIPostMPIntegrationHandler == nil { - unregistered = append(unregistered, "operator_api.PostMPIntegrationHandler") - } - if o.OperatorAPIPutTenantYAMLHandler == nil { - unregistered = append(unregistered, "operator_api.PutTenantYAMLHandler") - } - if o.AuthSessionCheckHandler == nil { - unregistered = append(unregistered, "auth.SessionCheckHandler") - } - if o.OperatorAPISetTenantAdministratorsHandler == nil { - unregistered = append(unregistered, "operator_api.SetTenantAdministratorsHandler") - } - if o.OperatorAPISubscriptionActivateHandler == nil { - unregistered = append(unregistered, "operator_api.SubscriptionActivateHandler") - } - if o.OperatorAPISubscriptionInfoHandler == nil { - unregistered = append(unregistered, "operator_api.SubscriptionInfoHandler") - } - if o.OperatorAPISubscriptionRefreshHandler == nil { - unregistered = append(unregistered, "operator_api.SubscriptionRefreshHandler") - } - if o.OperatorAPISubscriptionValidateHandler == nil { - unregistered = append(unregistered, "operator_api.SubscriptionValidateHandler") - } - if o.OperatorAPITenantAddPoolHandler == nil { - unregistered = append(unregistered, "operator_api.TenantAddPoolHandler") - } - if o.OperatorAPITenantConfigurationHandler == nil { - unregistered = append(unregistered, "operator_api.TenantConfigurationHandler") - } - if o.OperatorAPITenantDeleteEncryptionHandler == nil { - unregistered = append(unregistered, "operator_api.TenantDeleteEncryptionHandler") - } - if o.OperatorAPITenantDetailsHandler == nil { - unregistered = append(unregistered, "operator_api.TenantDetailsHandler") - } - if o.OperatorAPITenantEncryptionInfoHandler == nil { - unregistered = append(unregistered, "operator_api.TenantEncryptionInfoHandler") - } - if o.OperatorAPITenantIdentityProviderHandler == nil { - unregistered = append(unregistered, "operator_api.TenantIdentityProviderHandler") - } - if o.OperatorAPITenantSecurityHandler == nil { - unregistered = append(unregistered, "operator_api.TenantSecurityHandler") - } - if o.OperatorAPITenantUpdateCertificateHandler == nil { - unregistered = append(unregistered, "operator_api.TenantUpdateCertificateHandler") - } - if o.OperatorAPITenantUpdateEncryptionHandler == nil { - unregistered = append(unregistered, "operator_api.TenantUpdateEncryptionHandler") - } - if o.OperatorAPITenantUpdatePoolsHandler == nil { - unregistered = append(unregistered, "operator_api.TenantUpdatePoolsHandler") - } - if o.OperatorAPIUpdateTenantHandler == nil { - unregistered = append(unregistered, "operator_api.UpdateTenantHandler") - } - if o.OperatorAPIUpdateTenantConfigurationHandler == nil { - unregistered = append(unregistered, "operator_api.UpdateTenantConfigurationHandler") - } - if o.OperatorAPIUpdateTenantDomainsHandler == nil { - unregistered = append(unregistered, "operator_api.UpdateTenantDomainsHandler") - } - if o.OperatorAPIUpdateTenantIdentityProviderHandler == nil { - unregistered = append(unregistered, "operator_api.UpdateTenantIdentityProviderHandler") - } - if o.OperatorAPIUpdateTenantSecurityHandler == nil { - unregistered = append(unregistered, "operator_api.UpdateTenantSecurityHandler") - } - - if len(unregistered) > 0 { - return fmt.Errorf("missing registration: %s", strings.Join(unregistered, ", ")) - } - - return nil -} - -// ServeErrorFor gets a error handler for a given operation id -func (o *OperatorAPI) ServeErrorFor(operationID string) func(http.ResponseWriter, *http.Request, error) { - return o.ServeError -} - -// AuthenticatorsFor gets the authenticators for the specified security schemes -func (o *OperatorAPI) AuthenticatorsFor(schemes map[string]spec.SecurityScheme) map[string]runtime.Authenticator { - result := make(map[string]runtime.Authenticator) - for name := range schemes { - switch name { - case "key": - result[name] = o.BearerAuthenticator(name, func(token string, scopes []string) (interface{}, error) { - return o.KeyAuth(token, scopes) - }) - - } - } - return result -} - -// Authorizer returns the registered authorizer -func (o *OperatorAPI) Authorizer() runtime.Authorizer { - return o.APIAuthorizer -} - -// ConsumersFor gets the consumers for the specified media types. -// MIME type parameters are ignored here. -func (o *OperatorAPI) ConsumersFor(mediaTypes []string) map[string]runtime.Consumer { - result := make(map[string]runtime.Consumer, len(mediaTypes)) - for _, mt := range mediaTypes { - switch mt { - case "application/json": - result["application/json"] = o.JSONConsumer - } - - if c, ok := o.customConsumers[mt]; ok { - result[mt] = c - } - } - return result -} - -// ProducersFor gets the producers for the specified media types. -// MIME type parameters are ignored here. -func (o *OperatorAPI) ProducersFor(mediaTypes []string) map[string]runtime.Producer { - result := make(map[string]runtime.Producer, len(mediaTypes)) - for _, mt := range mediaTypes { - switch mt { - case "application/json": - result["application/json"] = o.JSONProducer - } - - if p, ok := o.customProducers[mt]; ok { - result[mt] = p - } - } - return result -} - -// HandlerFor gets a http.Handler for the provided operation method and path -func (o *OperatorAPI) HandlerFor(method, path string) (http.Handler, bool) { - if o.handlers == nil { - return nil, false - } - um := strings.ToUpper(method) - if _, ok := o.handlers[um]; !ok { - return nil, false - } - if path == "/" { - path = "" - } - h, ok := o.handlers[um][path] - return h, ok -} - -// Context returns the middleware context for the operator API -func (o *OperatorAPI) Context() *middleware.Context { - if o.context == nil { - o.context = middleware.NewRoutableContext(o.spec, o, nil) - } - - return o.context -} - -func (o *OperatorAPI) initHandlerCache() { - o.Context() // don't care about the result, just that the initialization happened - if o.handlers == nil { - o.handlers = make(map[string]map[string]http.Handler) - } - - if o.handlers["GET"] == nil { - o.handlers["GET"] = make(map[string]http.Handler) - } - o.handlers["GET"]["/check-version"] = user_api.NewCheckMinIOVersion(o.context, o.UserAPICheckMinIOVersionHandler) - if o.handlers["POST"] == nil { - o.handlers["POST"] = make(map[string]http.Handler) - } - o.handlers["POST"]["/namespace"] = operator_api.NewCreateNamespace(o.context, o.OperatorAPICreateNamespaceHandler) - if o.handlers["POST"] == nil { - o.handlers["POST"] = make(map[string]http.Handler) - } - o.handlers["POST"]["/tenants"] = operator_api.NewCreateTenant(o.context, o.OperatorAPICreateTenantHandler) - if o.handlers["DELETE"] == nil { - o.handlers["DELETE"] = make(map[string]http.Handler) - } - o.handlers["DELETE"]["/namespaces/{namespace}/tenants/{tenant}/pvc/{PVCName}"] = operator_api.NewDeletePVC(o.context, o.OperatorAPIDeletePVCHandler) - if o.handlers["DELETE"] == nil { - o.handlers["DELETE"] = make(map[string]http.Handler) - } - o.handlers["DELETE"]["/namespaces/{namespace}/tenants/{tenant}/pods/{podName}"] = operator_api.NewDeletePod(o.context, o.OperatorAPIDeletePodHandler) - if o.handlers["DELETE"] == nil { - o.handlers["DELETE"] = make(map[string]http.Handler) - } - o.handlers["DELETE"]["/namespaces/{namespace}/tenants/{tenant}"] = operator_api.NewDeleteTenant(o.context, o.OperatorAPIDeleteTenantHandler) - if o.handlers["GET"] == nil { - o.handlers["GET"] = make(map[string]http.Handler) - } - o.handlers["GET"]["/namespaces/{namespace}/tenants/{tenant}/pods/{podName}/describe"] = operator_api.NewDescribePod(o.context, o.OperatorAPIDescribePodHandler) - if o.handlers["GET"] == nil { - o.handlers["GET"] = make(map[string]http.Handler) - } - o.handlers["GET"]["/cluster/allocatable-resources"] = operator_api.NewGetAllocatableResources(o.context, o.OperatorAPIGetAllocatableResourcesHandler) - if o.handlers["GET"] == nil { - o.handlers["GET"] = make(map[string]http.Handler) - } - o.handlers["GET"]["/mp-integration"] = operator_api.NewGetMPIntegration(o.context, o.OperatorAPIGetMPIntegrationHandler) - if o.handlers["GET"] == nil { - o.handlers["GET"] = make(map[string]http.Handler) - } - o.handlers["GET"]["/cluster/max-allocatable-memory"] = operator_api.NewGetMaxAllocatableMem(o.context, o.OperatorAPIGetMaxAllocatableMemHandler) - if o.handlers["GET"] == nil { - o.handlers["GET"] = make(map[string]http.Handler) - } - o.handlers["GET"]["/namespaces/{namespace}/tenants/{tenant}/pvcs/{PVCName}/describe"] = operator_api.NewGetPVCDescribe(o.context, o.OperatorAPIGetPVCDescribeHandler) - if o.handlers["GET"] == nil { - o.handlers["GET"] = make(map[string]http.Handler) - } - o.handlers["GET"]["/namespaces/{namespace}/tenants/{tenant}/pvcs/{PVCName}/events"] = operator_api.NewGetPVCEvents(o.context, o.OperatorAPIGetPVCEventsHandler) - if o.handlers["GET"] == nil { - o.handlers["GET"] = make(map[string]http.Handler) - } - o.handlers["GET"]["/get-parity/{nodes}/{disksPerNode}"] = operator_api.NewGetParity(o.context, o.OperatorAPIGetParityHandler) - if o.handlers["GET"] == nil { - o.handlers["GET"] = make(map[string]http.Handler) - } - o.handlers["GET"]["/namespaces/{namespace}/tenants/{tenant}/pods/{podName}/events"] = operator_api.NewGetPodEvents(o.context, o.OperatorAPIGetPodEventsHandler) - if o.handlers["GET"] == nil { - o.handlers["GET"] = make(map[string]http.Handler) - } - o.handlers["GET"]["/namespaces/{namespace}/tenants/{tenant}/pods/{podName}"] = operator_api.NewGetPodLogs(o.context, o.OperatorAPIGetPodLogsHandler) - if o.handlers["GET"] == nil { - o.handlers["GET"] = make(map[string]http.Handler) - } - o.handlers["GET"]["/namespaces/{namespace}/resourcequotas/{resource-quota-name}"] = operator_api.NewGetResourceQuota(o.context, o.OperatorAPIGetResourceQuotaHandler) - if o.handlers["GET"] == nil { - o.handlers["GET"] = make(map[string]http.Handler) - } - o.handlers["GET"]["/namespaces/{namespace}/tenants/{tenant}/events"] = operator_api.NewGetTenantEvents(o.context, o.OperatorAPIGetTenantEventsHandler) - if o.handlers["GET"] == nil { - o.handlers["GET"] = make(map[string]http.Handler) - } - o.handlers["GET"]["/namespaces/{namespace}/tenants/{tenant}/log-report"] = operator_api.NewGetTenantLogReport(o.context, o.OperatorAPIGetTenantLogReportHandler) - if o.handlers["GET"] == nil { - o.handlers["GET"] = make(map[string]http.Handler) - } - o.handlers["GET"]["/namespaces/{namespace}/tenants/{tenant}/pods"] = operator_api.NewGetTenantPods(o.context, o.OperatorAPIGetTenantPodsHandler) - if o.handlers["GET"] == nil { - o.handlers["GET"] = make(map[string]http.Handler) - } - o.handlers["GET"]["/namespaces/{namespace}/tenants/{tenant}/usage"] = operator_api.NewGetTenantUsage(o.context, o.OperatorAPIGetTenantUsageHandler) - if o.handlers["GET"] == nil { - o.handlers["GET"] = make(map[string]http.Handler) - } - o.handlers["GET"]["/namespaces/{namespace}/tenants/{tenant}/yaml"] = operator_api.NewGetTenantYAML(o.context, o.OperatorAPIGetTenantYAMLHandler) - if o.handlers["GET"] == nil { - o.handlers["GET"] = make(map[string]http.Handler) - } - o.handlers["GET"]["/tenants"] = operator_api.NewListAllTenants(o.context, o.OperatorAPIListAllTenantsHandler) - if o.handlers["GET"] == nil { - o.handlers["GET"] = make(map[string]http.Handler) - } - o.handlers["GET"]["/nodes/labels"] = operator_api.NewListNodeLabels(o.context, o.OperatorAPIListNodeLabelsHandler) - if o.handlers["GET"] == nil { - o.handlers["GET"] = make(map[string]http.Handler) - } - o.handlers["GET"]["/list-pvcs"] = operator_api.NewListPVCs(o.context, o.OperatorAPIListPVCsHandler) - if o.handlers["GET"] == nil { - o.handlers["GET"] = make(map[string]http.Handler) - } - o.handlers["GET"]["/namespaces/{namespace}/tenants/{tenant}/pvcs"] = operator_api.NewListPVCsForTenant(o.context, o.OperatorAPIListPVCsForTenantHandler) - if o.handlers["GET"] == nil { - o.handlers["GET"] = make(map[string]http.Handler) - } - o.handlers["GET"]["/namespaces/{namespace}/tenants/{tenant}/csr"] = operator_api.NewListTenantCertificateSigningRequest(o.context, o.OperatorAPIListTenantCertificateSigningRequestHandler) - if o.handlers["GET"] == nil { - o.handlers["GET"] = make(map[string]http.Handler) - } - o.handlers["GET"]["/namespaces/{namespace}/tenants"] = operator_api.NewListTenants(o.context, o.OperatorAPIListTenantsHandler) - if o.handlers["GET"] == nil { - o.handlers["GET"] = make(map[string]http.Handler) - } - o.handlers["GET"]["/login"] = auth.NewLoginDetail(o.context, o.AuthLoginDetailHandler) - if o.handlers["POST"] == nil { - o.handlers["POST"] = make(map[string]http.Handler) - } - o.handlers["POST"]["/login/oauth2/auth"] = auth.NewLoginOauth2Auth(o.context, o.AuthLoginOauth2AuthHandler) - if o.handlers["POST"] == nil { - o.handlers["POST"] = make(map[string]http.Handler) - } - o.handlers["POST"]["/login/operator"] = auth.NewLoginOperator(o.context, o.AuthLoginOperatorHandler) - if o.handlers["POST"] == nil { - o.handlers["POST"] = make(map[string]http.Handler) - } - o.handlers["POST"]["/logout"] = auth.NewLogout(o.context, o.AuthLogoutHandler) - if o.handlers["GET"] == nil { - o.handlers["GET"] = make(map[string]http.Handler) - } - o.handlers["GET"]["/subnet/apikey/info"] = operator_api.NewOperatorSubnetAPIKeyInfo(o.context, o.OperatorAPIOperatorSubnetAPIKeyInfoHandler) - if o.handlers["GET"] == nil { - o.handlers["GET"] = make(map[string]http.Handler) - } - o.handlers["GET"]["/subnet/apikey"] = operator_api.NewOperatorSubnetAPIKey(o.context, o.OperatorAPIOperatorSubnetAPIKeyHandler) - if o.handlers["POST"] == nil { - o.handlers["POST"] = make(map[string]http.Handler) - } - o.handlers["POST"]["/subnet/login"] = operator_api.NewOperatorSubnetLogin(o.context, o.OperatorAPIOperatorSubnetLoginHandler) - if o.handlers["POST"] == nil { - o.handlers["POST"] = make(map[string]http.Handler) - } - o.handlers["POST"]["/subnet/login/mfa"] = operator_api.NewOperatorSubnetLoginMFA(o.context, o.OperatorAPIOperatorSubnetLoginMFAHandler) - if o.handlers["POST"] == nil { - o.handlers["POST"] = make(map[string]http.Handler) - } - o.handlers["POST"]["/subnet/apikey/register"] = operator_api.NewOperatorSubnetRegisterAPIKey(o.context, o.OperatorAPIOperatorSubnetRegisterAPIKeyHandler) - if o.handlers["POST"] == nil { - o.handlers["POST"] = make(map[string]http.Handler) - } - o.handlers["POST"]["/mp-integration"] = operator_api.NewPostMPIntegration(o.context, o.OperatorAPIPostMPIntegrationHandler) - if o.handlers["PUT"] == nil { - o.handlers["PUT"] = make(map[string]http.Handler) - } - o.handlers["PUT"]["/namespaces/{namespace}/tenants/{tenant}/yaml"] = operator_api.NewPutTenantYAML(o.context, o.OperatorAPIPutTenantYAMLHandler) - if o.handlers["GET"] == nil { - o.handlers["GET"] = make(map[string]http.Handler) - } - o.handlers["GET"]["/session"] = auth.NewSessionCheck(o.context, o.AuthSessionCheckHandler) - if o.handlers["POST"] == nil { - o.handlers["POST"] = make(map[string]http.Handler) - } - o.handlers["POST"]["/namespaces/{namespace}/tenants/{tenant}/set-administrators"] = operator_api.NewSetTenantAdministrators(o.context, o.OperatorAPISetTenantAdministratorsHandler) - if o.handlers["POST"] == nil { - o.handlers["POST"] = make(map[string]http.Handler) - } - o.handlers["POST"]["/subscription/namespaces/{namespace}/tenants/{tenant}/activate"] = operator_api.NewSubscriptionActivate(o.context, o.OperatorAPISubscriptionActivateHandler) - if o.handlers["GET"] == nil { - o.handlers["GET"] = make(map[string]http.Handler) - } - o.handlers["GET"]["/subscription/info"] = operator_api.NewSubscriptionInfo(o.context, o.OperatorAPISubscriptionInfoHandler) - if o.handlers["POST"] == nil { - o.handlers["POST"] = make(map[string]http.Handler) - } - o.handlers["POST"]["/subscription/refresh"] = operator_api.NewSubscriptionRefresh(o.context, o.OperatorAPISubscriptionRefreshHandler) - if o.handlers["POST"] == nil { - o.handlers["POST"] = make(map[string]http.Handler) - } - o.handlers["POST"]["/subscription/validate"] = operator_api.NewSubscriptionValidate(o.context, o.OperatorAPISubscriptionValidateHandler) - if o.handlers["POST"] == nil { - o.handlers["POST"] = make(map[string]http.Handler) - } - o.handlers["POST"]["/namespaces/{namespace}/tenants/{tenant}/pools"] = operator_api.NewTenantAddPool(o.context, o.OperatorAPITenantAddPoolHandler) - if o.handlers["GET"] == nil { - o.handlers["GET"] = make(map[string]http.Handler) - } - o.handlers["GET"]["/namespaces/{namespace}/tenants/{tenant}/configuration"] = operator_api.NewTenantConfiguration(o.context, o.OperatorAPITenantConfigurationHandler) - if o.handlers["DELETE"] == nil { - o.handlers["DELETE"] = make(map[string]http.Handler) - } - o.handlers["DELETE"]["/namespaces/{namespace}/tenants/{tenant}/encryption"] = operator_api.NewTenantDeleteEncryption(o.context, o.OperatorAPITenantDeleteEncryptionHandler) - if o.handlers["GET"] == nil { - o.handlers["GET"] = make(map[string]http.Handler) - } - o.handlers["GET"]["/namespaces/{namespace}/tenants/{tenant}"] = operator_api.NewTenantDetails(o.context, o.OperatorAPITenantDetailsHandler) - if o.handlers["GET"] == nil { - o.handlers["GET"] = make(map[string]http.Handler) - } - o.handlers["GET"]["/namespaces/{namespace}/tenants/{tenant}/encryption"] = operator_api.NewTenantEncryptionInfo(o.context, o.OperatorAPITenantEncryptionInfoHandler) - if o.handlers["GET"] == nil { - o.handlers["GET"] = make(map[string]http.Handler) - } - o.handlers["GET"]["/namespaces/{namespace}/tenants/{tenant}/identity-provider"] = operator_api.NewTenantIdentityProvider(o.context, o.OperatorAPITenantIdentityProviderHandler) - if o.handlers["GET"] == nil { - o.handlers["GET"] = make(map[string]http.Handler) - } - o.handlers["GET"]["/namespaces/{namespace}/tenants/{tenant}/security"] = operator_api.NewTenantSecurity(o.context, o.OperatorAPITenantSecurityHandler) - if o.handlers["PUT"] == nil { - o.handlers["PUT"] = make(map[string]http.Handler) - } - o.handlers["PUT"]["/namespaces/{namespace}/tenants/{tenant}/certificates"] = operator_api.NewTenantUpdateCertificate(o.context, o.OperatorAPITenantUpdateCertificateHandler) - if o.handlers["PUT"] == nil { - o.handlers["PUT"] = make(map[string]http.Handler) - } - o.handlers["PUT"]["/namespaces/{namespace}/tenants/{tenant}/encryption"] = operator_api.NewTenantUpdateEncryption(o.context, o.OperatorAPITenantUpdateEncryptionHandler) - if o.handlers["PUT"] == nil { - o.handlers["PUT"] = make(map[string]http.Handler) - } - o.handlers["PUT"]["/namespaces/{namespace}/tenants/{tenant}/pools"] = operator_api.NewTenantUpdatePools(o.context, o.OperatorAPITenantUpdatePoolsHandler) - if o.handlers["PUT"] == nil { - o.handlers["PUT"] = make(map[string]http.Handler) - } - o.handlers["PUT"]["/namespaces/{namespace}/tenants/{tenant}"] = operator_api.NewUpdateTenant(o.context, o.OperatorAPIUpdateTenantHandler) - if o.handlers["PATCH"] == nil { - o.handlers["PATCH"] = make(map[string]http.Handler) - } - o.handlers["PATCH"]["/namespaces/{namespace}/tenants/{tenant}/configuration"] = operator_api.NewUpdateTenantConfiguration(o.context, o.OperatorAPIUpdateTenantConfigurationHandler) - if o.handlers["PUT"] == nil { - o.handlers["PUT"] = make(map[string]http.Handler) - } - o.handlers["PUT"]["/namespaces/{namespace}/tenants/{tenant}/domains"] = operator_api.NewUpdateTenantDomains(o.context, o.OperatorAPIUpdateTenantDomainsHandler) - if o.handlers["POST"] == nil { - o.handlers["POST"] = make(map[string]http.Handler) - } - o.handlers["POST"]["/namespaces/{namespace}/tenants/{tenant}/identity-provider"] = operator_api.NewUpdateTenantIdentityProvider(o.context, o.OperatorAPIUpdateTenantIdentityProviderHandler) - if o.handlers["POST"] == nil { - o.handlers["POST"] = make(map[string]http.Handler) - } - o.handlers["POST"]["/namespaces/{namespace}/tenants/{tenant}/security"] = operator_api.NewUpdateTenantSecurity(o.context, o.OperatorAPIUpdateTenantSecurityHandler) -} - -// Serve creates a http handler to serve the API over HTTP -// can be used directly in http.ListenAndServe(":8000", api.Serve(nil)) -func (o *OperatorAPI) Serve(builder middleware.Builder) http.Handler { - o.Init() - - if o.Middleware != nil { - return o.Middleware(builder) - } - if o.useSwaggerUI { - return o.context.APIHandlerSwaggerUI(builder) - } - return o.context.APIHandler(builder) -} - -// Init allows you to just initialize the handler cache, you can then recompose the middleware as you see fit -func (o *OperatorAPI) Init() { - if len(o.handlers) == 0 { - o.initHandlerCache() - } -} - -// RegisterConsumer allows you to add (or override) a consumer for a media type. -func (o *OperatorAPI) RegisterConsumer(mediaType string, consumer runtime.Consumer) { - o.customConsumers[mediaType] = consumer -} - -// RegisterProducer allows you to add (or override) a producer for a media type. -func (o *OperatorAPI) RegisterProducer(mediaType string, producer runtime.Producer) { - o.customProducers[mediaType] = producer -} - -// AddMiddlewareFor adds a http middleware to existing handler -func (o *OperatorAPI) AddMiddlewareFor(method, path string, builder middleware.Builder) { - um := strings.ToUpper(method) - if path == "/" { - path = "" - } - o.Init() - if h, ok := o.handlers[um][path]; ok { - o.handlers[um][path] = builder(h) - } -} diff --git a/api/operations/operator_api/create_namespace.go b/api/operations/operator_api/create_namespace.go deleted file mode 100644 index d8cffd355d0..00000000000 --- a/api/operations/operator_api/create_namespace.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// CreateNamespaceHandlerFunc turns a function with the right signature into a create namespace handler -type CreateNamespaceHandlerFunc func(CreateNamespaceParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn CreateNamespaceHandlerFunc) Handle(params CreateNamespaceParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// CreateNamespaceHandler interface for that can handle valid create namespace params -type CreateNamespaceHandler interface { - Handle(CreateNamespaceParams, *models.Principal) middleware.Responder -} - -// NewCreateNamespace creates a new http.Handler for the create namespace operation -func NewCreateNamespace(ctx *middleware.Context, handler CreateNamespaceHandler) *CreateNamespace { - return &CreateNamespace{Context: ctx, Handler: handler} -} - -/* - CreateNamespace swagger:route POST /namespace OperatorAPI createNamespace - -Creates a new Namespace with given information -*/ -type CreateNamespace struct { - Context *middleware.Context - Handler CreateNamespaceHandler -} - -func (o *CreateNamespace) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewCreateNamespaceParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/create_namespace_parameters.go b/api/operations/operator_api/create_namespace_parameters.go deleted file mode 100644 index 18720ff7a1c..00000000000 --- a/api/operations/operator_api/create_namespace_parameters.go +++ /dev/null @@ -1,101 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "io" - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/validate" - - "github.com/minio/operator/models" -) - -// NewCreateNamespaceParams creates a new CreateNamespaceParams object -// -// There are no default values defined in the spec. -func NewCreateNamespaceParams() CreateNamespaceParams { - - return CreateNamespaceParams{} -} - -// CreateNamespaceParams contains all the bound params for the create namespace operation -// typically these are obtained from a http.Request -// -// swagger:parameters CreateNamespace -type CreateNamespaceParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: body - */ - Body *models.Namespace -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewCreateNamespaceParams() beforehand. -func (o *CreateNamespaceParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - if runtime.HasBody(r) { - defer r.Body.Close() - var body models.Namespace - if err := route.Consumer.Consume(r.Body, &body); err != nil { - if err == io.EOF { - res = append(res, errors.Required("body", "body", "")) - } else { - res = append(res, errors.NewParseError("body", "body", "", err)) - } - } else { - // validate body object - if err := body.Validate(route.Formats); err != nil { - res = append(res, err) - } - - ctx := validate.WithOperationRequest(r.Context()) - if err := body.ContextValidate(ctx, route.Formats); err != nil { - res = append(res, err) - } - - if len(res) == 0 { - o.Body = &body - } - } - } else { - res = append(res, errors.Required("body", "body", "")) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} diff --git a/api/operations/operator_api/create_namespace_responses.go b/api/operations/operator_api/create_namespace_responses.go deleted file mode 100644 index 207f277caa1..00000000000 --- a/api/operations/operator_api/create_namespace_responses.go +++ /dev/null @@ -1,115 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// CreateNamespaceCreatedCode is the HTTP code returned for type CreateNamespaceCreated -const CreateNamespaceCreatedCode int = 201 - -/* -CreateNamespaceCreated A successful response. - -swagger:response createNamespaceCreated -*/ -type CreateNamespaceCreated struct { -} - -// NewCreateNamespaceCreated creates CreateNamespaceCreated with default headers values -func NewCreateNamespaceCreated() *CreateNamespaceCreated { - - return &CreateNamespaceCreated{} -} - -// WriteResponse to the client -func (o *CreateNamespaceCreated) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses - - rw.WriteHeader(201) -} - -/* -CreateNamespaceDefault Generic error response. - -swagger:response createNamespaceDefault -*/ -type CreateNamespaceDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewCreateNamespaceDefault creates CreateNamespaceDefault with default headers values -func NewCreateNamespaceDefault(code int) *CreateNamespaceDefault { - if code <= 0 { - code = 500 - } - - return &CreateNamespaceDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the create namespace default response -func (o *CreateNamespaceDefault) WithStatusCode(code int) *CreateNamespaceDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the create namespace default response -func (o *CreateNamespaceDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the create namespace default response -func (o *CreateNamespaceDefault) WithPayload(payload *models.Error) *CreateNamespaceDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the create namespace default response -func (o *CreateNamespaceDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *CreateNamespaceDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/create_namespace_urlbuilder.go b/api/operations/operator_api/create_namespace_urlbuilder.go deleted file mode 100644 index 9df8d63f092..00000000000 --- a/api/operations/operator_api/create_namespace_urlbuilder.go +++ /dev/null @@ -1,104 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" -) - -// CreateNamespaceURL generates an URL for the create namespace operation -type CreateNamespaceURL struct { - _basePath string -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *CreateNamespaceURL) WithBasePath(bp string) *CreateNamespaceURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *CreateNamespaceURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *CreateNamespaceURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/namespace" - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *CreateNamespaceURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *CreateNamespaceURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *CreateNamespaceURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on CreateNamespaceURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on CreateNamespaceURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *CreateNamespaceURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/create_tenant.go b/api/operations/operator_api/create_tenant.go deleted file mode 100644 index 45240a58492..00000000000 --- a/api/operations/operator_api/create_tenant.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// CreateTenantHandlerFunc turns a function with the right signature into a create tenant handler -type CreateTenantHandlerFunc func(CreateTenantParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn CreateTenantHandlerFunc) Handle(params CreateTenantParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// CreateTenantHandler interface for that can handle valid create tenant params -type CreateTenantHandler interface { - Handle(CreateTenantParams, *models.Principal) middleware.Responder -} - -// NewCreateTenant creates a new http.Handler for the create tenant operation -func NewCreateTenant(ctx *middleware.Context, handler CreateTenantHandler) *CreateTenant { - return &CreateTenant{Context: ctx, Handler: handler} -} - -/* - CreateTenant swagger:route POST /tenants OperatorAPI createTenant - -Create Tenant -*/ -type CreateTenant struct { - Context *middleware.Context - Handler CreateTenantHandler -} - -func (o *CreateTenant) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewCreateTenantParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/create_tenant_parameters.go b/api/operations/operator_api/create_tenant_parameters.go deleted file mode 100644 index 78ed212bfa8..00000000000 --- a/api/operations/operator_api/create_tenant_parameters.go +++ /dev/null @@ -1,101 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "io" - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/validate" - - "github.com/minio/operator/models" -) - -// NewCreateTenantParams creates a new CreateTenantParams object -// -// There are no default values defined in the spec. -func NewCreateTenantParams() CreateTenantParams { - - return CreateTenantParams{} -} - -// CreateTenantParams contains all the bound params for the create tenant operation -// typically these are obtained from a http.Request -// -// swagger:parameters CreateTenant -type CreateTenantParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: body - */ - Body *models.CreateTenantRequest -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewCreateTenantParams() beforehand. -func (o *CreateTenantParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - if runtime.HasBody(r) { - defer r.Body.Close() - var body models.CreateTenantRequest - if err := route.Consumer.Consume(r.Body, &body); err != nil { - if err == io.EOF { - res = append(res, errors.Required("body", "body", "")) - } else { - res = append(res, errors.NewParseError("body", "body", "", err)) - } - } else { - // validate body object - if err := body.Validate(route.Formats); err != nil { - res = append(res, err) - } - - ctx := validate.WithOperationRequest(r.Context()) - if err := body.ContextValidate(ctx, route.Formats); err != nil { - res = append(res, err) - } - - if len(res) == 0 { - o.Body = &body - } - } - } else { - res = append(res, errors.Required("body", "body", "")) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} diff --git a/api/operations/operator_api/create_tenant_responses.go b/api/operations/operator_api/create_tenant_responses.go deleted file mode 100644 index 052f0bcba0c..00000000000 --- a/api/operations/operator_api/create_tenant_responses.go +++ /dev/null @@ -1,135 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// CreateTenantOKCode is the HTTP code returned for type CreateTenantOK -const CreateTenantOKCode int = 200 - -/* -CreateTenantOK A successful response. - -swagger:response createTenantOK -*/ -type CreateTenantOK struct { - - /* - In: Body - */ - Payload *models.CreateTenantResponse `json:"body,omitempty"` -} - -// NewCreateTenantOK creates CreateTenantOK with default headers values -func NewCreateTenantOK() *CreateTenantOK { - - return &CreateTenantOK{} -} - -// WithPayload adds the payload to the create tenant o k response -func (o *CreateTenantOK) WithPayload(payload *models.CreateTenantResponse) *CreateTenantOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the create tenant o k response -func (o *CreateTenantOK) SetPayload(payload *models.CreateTenantResponse) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *CreateTenantOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} - -/* -CreateTenantDefault Generic error response. - -swagger:response createTenantDefault -*/ -type CreateTenantDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewCreateTenantDefault creates CreateTenantDefault with default headers values -func NewCreateTenantDefault(code int) *CreateTenantDefault { - if code <= 0 { - code = 500 - } - - return &CreateTenantDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the create tenant default response -func (o *CreateTenantDefault) WithStatusCode(code int) *CreateTenantDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the create tenant default response -func (o *CreateTenantDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the create tenant default response -func (o *CreateTenantDefault) WithPayload(payload *models.Error) *CreateTenantDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the create tenant default response -func (o *CreateTenantDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *CreateTenantDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/create_tenant_urlbuilder.go b/api/operations/operator_api/create_tenant_urlbuilder.go deleted file mode 100644 index d9bfd1ca0ab..00000000000 --- a/api/operations/operator_api/create_tenant_urlbuilder.go +++ /dev/null @@ -1,104 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" -) - -// CreateTenantURL generates an URL for the create tenant operation -type CreateTenantURL struct { - _basePath string -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *CreateTenantURL) WithBasePath(bp string) *CreateTenantURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *CreateTenantURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *CreateTenantURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/tenants" - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *CreateTenantURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *CreateTenantURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *CreateTenantURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on CreateTenantURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on CreateTenantURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *CreateTenantURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/delete_p_v_c.go b/api/operations/operator_api/delete_p_v_c.go deleted file mode 100644 index a52c8a365d7..00000000000 --- a/api/operations/operator_api/delete_p_v_c.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// DeletePVCHandlerFunc turns a function with the right signature into a delete p v c handler -type DeletePVCHandlerFunc func(DeletePVCParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn DeletePVCHandlerFunc) Handle(params DeletePVCParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// DeletePVCHandler interface for that can handle valid delete p v c params -type DeletePVCHandler interface { - Handle(DeletePVCParams, *models.Principal) middleware.Responder -} - -// NewDeletePVC creates a new http.Handler for the delete p v c operation -func NewDeletePVC(ctx *middleware.Context, handler DeletePVCHandler) *DeletePVC { - return &DeletePVC{Context: ctx, Handler: handler} -} - -/* - DeletePVC swagger:route DELETE /namespaces/{namespace}/tenants/{tenant}/pvc/{PVCName} OperatorAPI deletePVC - -Delete PVC -*/ -type DeletePVC struct { - Context *middleware.Context - Handler DeletePVCHandler -} - -func (o *DeletePVC) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewDeletePVCParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/delete_p_v_c_parameters.go b/api/operations/operator_api/delete_p_v_c_parameters.go deleted file mode 100644 index 7c8074cf2e4..00000000000 --- a/api/operations/operator_api/delete_p_v_c_parameters.go +++ /dev/null @@ -1,136 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" -) - -// NewDeletePVCParams creates a new DeletePVCParams object -// -// There are no default values defined in the spec. -func NewDeletePVCParams() DeletePVCParams { - - return DeletePVCParams{} -} - -// DeletePVCParams contains all the bound params for the delete p v c operation -// typically these are obtained from a http.Request -// -// swagger:parameters DeletePVC -type DeletePVCParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: path - */ - PVCName string - /* - Required: true - In: path - */ - Namespace string - /* - Required: true - In: path - */ - Tenant string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewDeletePVCParams() beforehand. -func (o *DeletePVCParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - rPVCName, rhkPVCName, _ := route.Params.GetOK("PVCName") - if err := o.bindPVCName(rPVCName, rhkPVCName, route.Formats); err != nil { - res = append(res, err) - } - - rNamespace, rhkNamespace, _ := route.Params.GetOK("namespace") - if err := o.bindNamespace(rNamespace, rhkNamespace, route.Formats); err != nil { - res = append(res, err) - } - - rTenant, rhkTenant, _ := route.Params.GetOK("tenant") - if err := o.bindTenant(rTenant, rhkTenant, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindPVCName binds and validates parameter PVCName from path. -func (o *DeletePVCParams) bindPVCName(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.PVCName = raw - - return nil -} - -// bindNamespace binds and validates parameter Namespace from path. -func (o *DeletePVCParams) bindNamespace(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Namespace = raw - - return nil -} - -// bindTenant binds and validates parameter Tenant from path. -func (o *DeletePVCParams) bindTenant(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Tenant = raw - - return nil -} diff --git a/api/operations/operator_api/delete_p_v_c_responses.go b/api/operations/operator_api/delete_p_v_c_responses.go deleted file mode 100644 index 4fa815334b9..00000000000 --- a/api/operations/operator_api/delete_p_v_c_responses.go +++ /dev/null @@ -1,115 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// DeletePVCNoContentCode is the HTTP code returned for type DeletePVCNoContent -const DeletePVCNoContentCode int = 204 - -/* -DeletePVCNoContent A successful response. - -swagger:response deletePVCNoContent -*/ -type DeletePVCNoContent struct { -} - -// NewDeletePVCNoContent creates DeletePVCNoContent with default headers values -func NewDeletePVCNoContent() *DeletePVCNoContent { - - return &DeletePVCNoContent{} -} - -// WriteResponse to the client -func (o *DeletePVCNoContent) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses - - rw.WriteHeader(204) -} - -/* -DeletePVCDefault Generic error response. - -swagger:response deletePVCDefault -*/ -type DeletePVCDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewDeletePVCDefault creates DeletePVCDefault with default headers values -func NewDeletePVCDefault(code int) *DeletePVCDefault { - if code <= 0 { - code = 500 - } - - return &DeletePVCDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the delete p v c default response -func (o *DeletePVCDefault) WithStatusCode(code int) *DeletePVCDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the delete p v c default response -func (o *DeletePVCDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the delete p v c default response -func (o *DeletePVCDefault) WithPayload(payload *models.Error) *DeletePVCDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the delete p v c default response -func (o *DeletePVCDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *DeletePVCDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/delete_p_v_c_urlbuilder.go b/api/operations/operator_api/delete_p_v_c_urlbuilder.go deleted file mode 100644 index 0a436b22b2b..00000000000 --- a/api/operations/operator_api/delete_p_v_c_urlbuilder.go +++ /dev/null @@ -1,132 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" -) - -// DeletePVCURL generates an URL for the delete p v c operation -type DeletePVCURL struct { - PVCName string - Namespace string - Tenant string - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *DeletePVCURL) WithBasePath(bp string) *DeletePVCURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *DeletePVCURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *DeletePVCURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/namespaces/{namespace}/tenants/{tenant}/pvc/{PVCName}" - - pVCName := o.PVCName - if pVCName != "" { - _path = strings.Replace(_path, "{PVCName}", pVCName, -1) - } else { - return nil, errors.New("pVCName is required on DeletePVCURL") - } - - namespace := o.Namespace - if namespace != "" { - _path = strings.Replace(_path, "{namespace}", namespace, -1) - } else { - return nil, errors.New("namespace is required on DeletePVCURL") - } - - tenant := o.Tenant - if tenant != "" { - _path = strings.Replace(_path, "{tenant}", tenant, -1) - } else { - return nil, errors.New("tenant is required on DeletePVCURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *DeletePVCURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *DeletePVCURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *DeletePVCURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on DeletePVCURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on DeletePVCURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *DeletePVCURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/delete_pod.go b/api/operations/operator_api/delete_pod.go deleted file mode 100644 index 55905914ab5..00000000000 --- a/api/operations/operator_api/delete_pod.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// DeletePodHandlerFunc turns a function with the right signature into a delete pod handler -type DeletePodHandlerFunc func(DeletePodParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn DeletePodHandlerFunc) Handle(params DeletePodParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// DeletePodHandler interface for that can handle valid delete pod params -type DeletePodHandler interface { - Handle(DeletePodParams, *models.Principal) middleware.Responder -} - -// NewDeletePod creates a new http.Handler for the delete pod operation -func NewDeletePod(ctx *middleware.Context, handler DeletePodHandler) *DeletePod { - return &DeletePod{Context: ctx, Handler: handler} -} - -/* - DeletePod swagger:route DELETE /namespaces/{namespace}/tenants/{tenant}/pods/{podName} OperatorAPI deletePod - -Delete pod -*/ -type DeletePod struct { - Context *middleware.Context - Handler DeletePodHandler -} - -func (o *DeletePod) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewDeletePodParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/delete_pod_parameters.go b/api/operations/operator_api/delete_pod_parameters.go deleted file mode 100644 index 02b057e99c5..00000000000 --- a/api/operations/operator_api/delete_pod_parameters.go +++ /dev/null @@ -1,136 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" -) - -// NewDeletePodParams creates a new DeletePodParams object -// -// There are no default values defined in the spec. -func NewDeletePodParams() DeletePodParams { - - return DeletePodParams{} -} - -// DeletePodParams contains all the bound params for the delete pod operation -// typically these are obtained from a http.Request -// -// swagger:parameters DeletePod -type DeletePodParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: path - */ - Namespace string - /* - Required: true - In: path - */ - PodName string - /* - Required: true - In: path - */ - Tenant string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewDeletePodParams() beforehand. -func (o *DeletePodParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - rNamespace, rhkNamespace, _ := route.Params.GetOK("namespace") - if err := o.bindNamespace(rNamespace, rhkNamespace, route.Formats); err != nil { - res = append(res, err) - } - - rPodName, rhkPodName, _ := route.Params.GetOK("podName") - if err := o.bindPodName(rPodName, rhkPodName, route.Formats); err != nil { - res = append(res, err) - } - - rTenant, rhkTenant, _ := route.Params.GetOK("tenant") - if err := o.bindTenant(rTenant, rhkTenant, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindNamespace binds and validates parameter Namespace from path. -func (o *DeletePodParams) bindNamespace(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Namespace = raw - - return nil -} - -// bindPodName binds and validates parameter PodName from path. -func (o *DeletePodParams) bindPodName(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.PodName = raw - - return nil -} - -// bindTenant binds and validates parameter Tenant from path. -func (o *DeletePodParams) bindTenant(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Tenant = raw - - return nil -} diff --git a/api/operations/operator_api/delete_pod_responses.go b/api/operations/operator_api/delete_pod_responses.go deleted file mode 100644 index 76f8ec0776a..00000000000 --- a/api/operations/operator_api/delete_pod_responses.go +++ /dev/null @@ -1,115 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// DeletePodNoContentCode is the HTTP code returned for type DeletePodNoContent -const DeletePodNoContentCode int = 204 - -/* -DeletePodNoContent A successful response. - -swagger:response deletePodNoContent -*/ -type DeletePodNoContent struct { -} - -// NewDeletePodNoContent creates DeletePodNoContent with default headers values -func NewDeletePodNoContent() *DeletePodNoContent { - - return &DeletePodNoContent{} -} - -// WriteResponse to the client -func (o *DeletePodNoContent) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses - - rw.WriteHeader(204) -} - -/* -DeletePodDefault Generic error response. - -swagger:response deletePodDefault -*/ -type DeletePodDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewDeletePodDefault creates DeletePodDefault with default headers values -func NewDeletePodDefault(code int) *DeletePodDefault { - if code <= 0 { - code = 500 - } - - return &DeletePodDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the delete pod default response -func (o *DeletePodDefault) WithStatusCode(code int) *DeletePodDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the delete pod default response -func (o *DeletePodDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the delete pod default response -func (o *DeletePodDefault) WithPayload(payload *models.Error) *DeletePodDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the delete pod default response -func (o *DeletePodDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *DeletePodDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/delete_pod_urlbuilder.go b/api/operations/operator_api/delete_pod_urlbuilder.go deleted file mode 100644 index 3d6bbc77e76..00000000000 --- a/api/operations/operator_api/delete_pod_urlbuilder.go +++ /dev/null @@ -1,132 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" -) - -// DeletePodURL generates an URL for the delete pod operation -type DeletePodURL struct { - Namespace string - PodName string - Tenant string - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *DeletePodURL) WithBasePath(bp string) *DeletePodURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *DeletePodURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *DeletePodURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/namespaces/{namespace}/tenants/{tenant}/pods/{podName}" - - namespace := o.Namespace - if namespace != "" { - _path = strings.Replace(_path, "{namespace}", namespace, -1) - } else { - return nil, errors.New("namespace is required on DeletePodURL") - } - - podName := o.PodName - if podName != "" { - _path = strings.Replace(_path, "{podName}", podName, -1) - } else { - return nil, errors.New("podName is required on DeletePodURL") - } - - tenant := o.Tenant - if tenant != "" { - _path = strings.Replace(_path, "{tenant}", tenant, -1) - } else { - return nil, errors.New("tenant is required on DeletePodURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *DeletePodURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *DeletePodURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *DeletePodURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on DeletePodURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on DeletePodURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *DeletePodURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/delete_tenant.go b/api/operations/operator_api/delete_tenant.go deleted file mode 100644 index a0ca5309111..00000000000 --- a/api/operations/operator_api/delete_tenant.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// DeleteTenantHandlerFunc turns a function with the right signature into a delete tenant handler -type DeleteTenantHandlerFunc func(DeleteTenantParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn DeleteTenantHandlerFunc) Handle(params DeleteTenantParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// DeleteTenantHandler interface for that can handle valid delete tenant params -type DeleteTenantHandler interface { - Handle(DeleteTenantParams, *models.Principal) middleware.Responder -} - -// NewDeleteTenant creates a new http.Handler for the delete tenant operation -func NewDeleteTenant(ctx *middleware.Context, handler DeleteTenantHandler) *DeleteTenant { - return &DeleteTenant{Context: ctx, Handler: handler} -} - -/* - DeleteTenant swagger:route DELETE /namespaces/{namespace}/tenants/{tenant} OperatorAPI deleteTenant - -Delete tenant and underlying pvcs -*/ -type DeleteTenant struct { - Context *middleware.Context - Handler DeleteTenantHandler -} - -func (o *DeleteTenant) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewDeleteTenantParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/delete_tenant_parameters.go b/api/operations/operator_api/delete_tenant_parameters.go deleted file mode 100644 index 502bbbc94d0..00000000000 --- a/api/operations/operator_api/delete_tenant_parameters.go +++ /dev/null @@ -1,142 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/validate" - - "github.com/minio/operator/models" -) - -// NewDeleteTenantParams creates a new DeleteTenantParams object -// -// There are no default values defined in the spec. -func NewDeleteTenantParams() DeleteTenantParams { - - return DeleteTenantParams{} -} - -// DeleteTenantParams contains all the bound params for the delete tenant operation -// typically these are obtained from a http.Request -// -// swagger:parameters DeleteTenant -type DeleteTenantParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - In: body - */ - Body *models.DeleteTenantRequest - /* - Required: true - In: path - */ - Namespace string - /* - Required: true - In: path - */ - Tenant string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewDeleteTenantParams() beforehand. -func (o *DeleteTenantParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - if runtime.HasBody(r) { - defer r.Body.Close() - var body models.DeleteTenantRequest - if err := route.Consumer.Consume(r.Body, &body); err != nil { - res = append(res, errors.NewParseError("body", "body", "", err)) - } else { - // validate body object - if err := body.Validate(route.Formats); err != nil { - res = append(res, err) - } - - ctx := validate.WithOperationRequest(r.Context()) - if err := body.ContextValidate(ctx, route.Formats); err != nil { - res = append(res, err) - } - - if len(res) == 0 { - o.Body = &body - } - } - } - - rNamespace, rhkNamespace, _ := route.Params.GetOK("namespace") - if err := o.bindNamespace(rNamespace, rhkNamespace, route.Formats); err != nil { - res = append(res, err) - } - - rTenant, rhkTenant, _ := route.Params.GetOK("tenant") - if err := o.bindTenant(rTenant, rhkTenant, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindNamespace binds and validates parameter Namespace from path. -func (o *DeleteTenantParams) bindNamespace(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Namespace = raw - - return nil -} - -// bindTenant binds and validates parameter Tenant from path. -func (o *DeleteTenantParams) bindTenant(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Tenant = raw - - return nil -} diff --git a/api/operations/operator_api/delete_tenant_responses.go b/api/operations/operator_api/delete_tenant_responses.go deleted file mode 100644 index 4b9ae40f5fd..00000000000 --- a/api/operations/operator_api/delete_tenant_responses.go +++ /dev/null @@ -1,115 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// DeleteTenantNoContentCode is the HTTP code returned for type DeleteTenantNoContent -const DeleteTenantNoContentCode int = 204 - -/* -DeleteTenantNoContent A successful response. - -swagger:response deleteTenantNoContent -*/ -type DeleteTenantNoContent struct { -} - -// NewDeleteTenantNoContent creates DeleteTenantNoContent with default headers values -func NewDeleteTenantNoContent() *DeleteTenantNoContent { - - return &DeleteTenantNoContent{} -} - -// WriteResponse to the client -func (o *DeleteTenantNoContent) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses - - rw.WriteHeader(204) -} - -/* -DeleteTenantDefault Generic error response. - -swagger:response deleteTenantDefault -*/ -type DeleteTenantDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewDeleteTenantDefault creates DeleteTenantDefault with default headers values -func NewDeleteTenantDefault(code int) *DeleteTenantDefault { - if code <= 0 { - code = 500 - } - - return &DeleteTenantDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the delete tenant default response -func (o *DeleteTenantDefault) WithStatusCode(code int) *DeleteTenantDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the delete tenant default response -func (o *DeleteTenantDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the delete tenant default response -func (o *DeleteTenantDefault) WithPayload(payload *models.Error) *DeleteTenantDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the delete tenant default response -func (o *DeleteTenantDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *DeleteTenantDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/delete_tenant_urlbuilder.go b/api/operations/operator_api/delete_tenant_urlbuilder.go deleted file mode 100644 index d2dce6a6059..00000000000 --- a/api/operations/operator_api/delete_tenant_urlbuilder.go +++ /dev/null @@ -1,124 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" -) - -// DeleteTenantURL generates an URL for the delete tenant operation -type DeleteTenantURL struct { - Namespace string - Tenant string - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *DeleteTenantURL) WithBasePath(bp string) *DeleteTenantURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *DeleteTenantURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *DeleteTenantURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/namespaces/{namespace}/tenants/{tenant}" - - namespace := o.Namespace - if namespace != "" { - _path = strings.Replace(_path, "{namespace}", namespace, -1) - } else { - return nil, errors.New("namespace is required on DeleteTenantURL") - } - - tenant := o.Tenant - if tenant != "" { - _path = strings.Replace(_path, "{tenant}", tenant, -1) - } else { - return nil, errors.New("tenant is required on DeleteTenantURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *DeleteTenantURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *DeleteTenantURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *DeleteTenantURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on DeleteTenantURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on DeleteTenantURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *DeleteTenantURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/describe_pod.go b/api/operations/operator_api/describe_pod.go deleted file mode 100644 index 30e7c01b44b..00000000000 --- a/api/operations/operator_api/describe_pod.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// DescribePodHandlerFunc turns a function with the right signature into a describe pod handler -type DescribePodHandlerFunc func(DescribePodParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn DescribePodHandlerFunc) Handle(params DescribePodParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// DescribePodHandler interface for that can handle valid describe pod params -type DescribePodHandler interface { - Handle(DescribePodParams, *models.Principal) middleware.Responder -} - -// NewDescribePod creates a new http.Handler for the describe pod operation -func NewDescribePod(ctx *middleware.Context, handler DescribePodHandler) *DescribePod { - return &DescribePod{Context: ctx, Handler: handler} -} - -/* - DescribePod swagger:route GET /namespaces/{namespace}/tenants/{tenant}/pods/{podName}/describe OperatorAPI describePod - -Describe Pod -*/ -type DescribePod struct { - Context *middleware.Context - Handler DescribePodHandler -} - -func (o *DescribePod) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewDescribePodParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/describe_pod_parameters.go b/api/operations/operator_api/describe_pod_parameters.go deleted file mode 100644 index e625c721936..00000000000 --- a/api/operations/operator_api/describe_pod_parameters.go +++ /dev/null @@ -1,136 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" -) - -// NewDescribePodParams creates a new DescribePodParams object -// -// There are no default values defined in the spec. -func NewDescribePodParams() DescribePodParams { - - return DescribePodParams{} -} - -// DescribePodParams contains all the bound params for the describe pod operation -// typically these are obtained from a http.Request -// -// swagger:parameters DescribePod -type DescribePodParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: path - */ - Namespace string - /* - Required: true - In: path - */ - PodName string - /* - Required: true - In: path - */ - Tenant string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewDescribePodParams() beforehand. -func (o *DescribePodParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - rNamespace, rhkNamespace, _ := route.Params.GetOK("namespace") - if err := o.bindNamespace(rNamespace, rhkNamespace, route.Formats); err != nil { - res = append(res, err) - } - - rPodName, rhkPodName, _ := route.Params.GetOK("podName") - if err := o.bindPodName(rPodName, rhkPodName, route.Formats); err != nil { - res = append(res, err) - } - - rTenant, rhkTenant, _ := route.Params.GetOK("tenant") - if err := o.bindTenant(rTenant, rhkTenant, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindNamespace binds and validates parameter Namespace from path. -func (o *DescribePodParams) bindNamespace(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Namespace = raw - - return nil -} - -// bindPodName binds and validates parameter PodName from path. -func (o *DescribePodParams) bindPodName(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.PodName = raw - - return nil -} - -// bindTenant binds and validates parameter Tenant from path. -func (o *DescribePodParams) bindTenant(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Tenant = raw - - return nil -} diff --git a/api/operations/operator_api/describe_pod_responses.go b/api/operations/operator_api/describe_pod_responses.go deleted file mode 100644 index e0fb12bb149..00000000000 --- a/api/operations/operator_api/describe_pod_responses.go +++ /dev/null @@ -1,135 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// DescribePodOKCode is the HTTP code returned for type DescribePodOK -const DescribePodOKCode int = 200 - -/* -DescribePodOK A successful response. - -swagger:response describePodOK -*/ -type DescribePodOK struct { - - /* - In: Body - */ - Payload *models.DescribePodWrapper `json:"body,omitempty"` -} - -// NewDescribePodOK creates DescribePodOK with default headers values -func NewDescribePodOK() *DescribePodOK { - - return &DescribePodOK{} -} - -// WithPayload adds the payload to the describe pod o k response -func (o *DescribePodOK) WithPayload(payload *models.DescribePodWrapper) *DescribePodOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the describe pod o k response -func (o *DescribePodOK) SetPayload(payload *models.DescribePodWrapper) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *DescribePodOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} - -/* -DescribePodDefault Generic error response. - -swagger:response describePodDefault -*/ -type DescribePodDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewDescribePodDefault creates DescribePodDefault with default headers values -func NewDescribePodDefault(code int) *DescribePodDefault { - if code <= 0 { - code = 500 - } - - return &DescribePodDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the describe pod default response -func (o *DescribePodDefault) WithStatusCode(code int) *DescribePodDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the describe pod default response -func (o *DescribePodDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the describe pod default response -func (o *DescribePodDefault) WithPayload(payload *models.Error) *DescribePodDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the describe pod default response -func (o *DescribePodDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *DescribePodDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/describe_pod_urlbuilder.go b/api/operations/operator_api/describe_pod_urlbuilder.go deleted file mode 100644 index e395bbd1c92..00000000000 --- a/api/operations/operator_api/describe_pod_urlbuilder.go +++ /dev/null @@ -1,132 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" -) - -// DescribePodURL generates an URL for the describe pod operation -type DescribePodURL struct { - Namespace string - PodName string - Tenant string - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *DescribePodURL) WithBasePath(bp string) *DescribePodURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *DescribePodURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *DescribePodURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/namespaces/{namespace}/tenants/{tenant}/pods/{podName}/describe" - - namespace := o.Namespace - if namespace != "" { - _path = strings.Replace(_path, "{namespace}", namespace, -1) - } else { - return nil, errors.New("namespace is required on DescribePodURL") - } - - podName := o.PodName - if podName != "" { - _path = strings.Replace(_path, "{podName}", podName, -1) - } else { - return nil, errors.New("podName is required on DescribePodURL") - } - - tenant := o.Tenant - if tenant != "" { - _path = strings.Replace(_path, "{tenant}", tenant, -1) - } else { - return nil, errors.New("tenant is required on DescribePodURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *DescribePodURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *DescribePodURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *DescribePodURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on DescribePodURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on DescribePodURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *DescribePodURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/get_allocatable_resources.go b/api/operations/operator_api/get_allocatable_resources.go deleted file mode 100644 index 0bf4d2faa34..00000000000 --- a/api/operations/operator_api/get_allocatable_resources.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// GetAllocatableResourcesHandlerFunc turns a function with the right signature into a get allocatable resources handler -type GetAllocatableResourcesHandlerFunc func(GetAllocatableResourcesParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn GetAllocatableResourcesHandlerFunc) Handle(params GetAllocatableResourcesParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// GetAllocatableResourcesHandler interface for that can handle valid get allocatable resources params -type GetAllocatableResourcesHandler interface { - Handle(GetAllocatableResourcesParams, *models.Principal) middleware.Responder -} - -// NewGetAllocatableResources creates a new http.Handler for the get allocatable resources operation -func NewGetAllocatableResources(ctx *middleware.Context, handler GetAllocatableResourcesHandler) *GetAllocatableResources { - return &GetAllocatableResources{Context: ctx, Handler: handler} -} - -/* - GetAllocatableResources swagger:route GET /cluster/allocatable-resources OperatorAPI getAllocatableResources - -Get allocatable cpu and memory for given number of nodes -*/ -type GetAllocatableResources struct { - Context *middleware.Context - Handler GetAllocatableResourcesHandler -} - -func (o *GetAllocatableResources) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewGetAllocatableResourcesParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/get_allocatable_resources_parameters.go b/api/operations/operator_api/get_allocatable_resources_parameters.go deleted file mode 100644 index 6b2a43f3521..00000000000 --- a/api/operations/operator_api/get_allocatable_resources_parameters.go +++ /dev/null @@ -1,120 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" - "github.com/go-openapi/validate" -) - -// NewGetAllocatableResourcesParams creates a new GetAllocatableResourcesParams object -// -// There are no default values defined in the spec. -func NewGetAllocatableResourcesParams() GetAllocatableResourcesParams { - - return GetAllocatableResourcesParams{} -} - -// GetAllocatableResourcesParams contains all the bound params for the get allocatable resources operation -// typically these are obtained from a http.Request -// -// swagger:parameters GetAllocatableResources -type GetAllocatableResourcesParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - Minimum: 1 - In: query - */ - NumNodes int32 -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewGetAllocatableResourcesParams() beforehand. -func (o *GetAllocatableResourcesParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - qs := runtime.Values(r.URL.Query()) - - qNumNodes, qhkNumNodes, _ := qs.GetOK("num_nodes") - if err := o.bindNumNodes(qNumNodes, qhkNumNodes, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindNumNodes binds and validates parameter NumNodes from query. -func (o *GetAllocatableResourcesParams) bindNumNodes(rawData []string, hasKey bool, formats strfmt.Registry) error { - if !hasKey { - return errors.Required("num_nodes", "query", rawData) - } - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // AllowEmptyValue: false - - if err := validate.RequiredString("num_nodes", "query", raw); err != nil { - return err - } - - value, err := swag.ConvertInt32(raw) - if err != nil { - return errors.InvalidType("num_nodes", "query", "int32", raw) - } - o.NumNodes = value - - if err := o.validateNumNodes(formats); err != nil { - return err - } - - return nil -} - -// validateNumNodes carries on validations for parameter NumNodes -func (o *GetAllocatableResourcesParams) validateNumNodes(formats strfmt.Registry) error { - - if err := validate.MinimumInt("num_nodes", "query", int64(o.NumNodes), 1, false); err != nil { - return err - } - - return nil -} diff --git a/api/operations/operator_api/get_allocatable_resources_responses.go b/api/operations/operator_api/get_allocatable_resources_responses.go deleted file mode 100644 index 61b33d1fe90..00000000000 --- a/api/operations/operator_api/get_allocatable_resources_responses.go +++ /dev/null @@ -1,135 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// GetAllocatableResourcesOKCode is the HTTP code returned for type GetAllocatableResourcesOK -const GetAllocatableResourcesOKCode int = 200 - -/* -GetAllocatableResourcesOK A successful response. - -swagger:response getAllocatableResourcesOK -*/ -type GetAllocatableResourcesOK struct { - - /* - In: Body - */ - Payload *models.AllocatableResourcesResponse `json:"body,omitempty"` -} - -// NewGetAllocatableResourcesOK creates GetAllocatableResourcesOK with default headers values -func NewGetAllocatableResourcesOK() *GetAllocatableResourcesOK { - - return &GetAllocatableResourcesOK{} -} - -// WithPayload adds the payload to the get allocatable resources o k response -func (o *GetAllocatableResourcesOK) WithPayload(payload *models.AllocatableResourcesResponse) *GetAllocatableResourcesOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the get allocatable resources o k response -func (o *GetAllocatableResourcesOK) SetPayload(payload *models.AllocatableResourcesResponse) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *GetAllocatableResourcesOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} - -/* -GetAllocatableResourcesDefault Generic error response. - -swagger:response getAllocatableResourcesDefault -*/ -type GetAllocatableResourcesDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewGetAllocatableResourcesDefault creates GetAllocatableResourcesDefault with default headers values -func NewGetAllocatableResourcesDefault(code int) *GetAllocatableResourcesDefault { - if code <= 0 { - code = 500 - } - - return &GetAllocatableResourcesDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the get allocatable resources default response -func (o *GetAllocatableResourcesDefault) WithStatusCode(code int) *GetAllocatableResourcesDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the get allocatable resources default response -func (o *GetAllocatableResourcesDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the get allocatable resources default response -func (o *GetAllocatableResourcesDefault) WithPayload(payload *models.Error) *GetAllocatableResourcesDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the get allocatable resources default response -func (o *GetAllocatableResourcesDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *GetAllocatableResourcesDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/get_allocatable_resources_urlbuilder.go b/api/operations/operator_api/get_allocatable_resources_urlbuilder.go deleted file mode 100644 index 04e15f63287..00000000000 --- a/api/operations/operator_api/get_allocatable_resources_urlbuilder.go +++ /dev/null @@ -1,119 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - - "github.com/go-openapi/swag" -) - -// GetAllocatableResourcesURL generates an URL for the get allocatable resources operation -type GetAllocatableResourcesURL struct { - NumNodes int32 - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *GetAllocatableResourcesURL) WithBasePath(bp string) *GetAllocatableResourcesURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *GetAllocatableResourcesURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *GetAllocatableResourcesURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/cluster/allocatable-resources" - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - qs := make(url.Values) - - numNodesQ := swag.FormatInt32(o.NumNodes) - if numNodesQ != "" { - qs.Set("num_nodes", numNodesQ) - } - - _result.RawQuery = qs.Encode() - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *GetAllocatableResourcesURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *GetAllocatableResourcesURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *GetAllocatableResourcesURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on GetAllocatableResourcesURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on GetAllocatableResourcesURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *GetAllocatableResourcesURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/get_m_p_integration.go b/api/operations/operator_api/get_m_p_integration.go deleted file mode 100644 index 582a0110c77..00000000000 --- a/api/operations/operator_api/get_m_p_integration.go +++ /dev/null @@ -1,128 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "context" - "net/http" - - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" - - "github.com/minio/operator/models" -) - -// GetMPIntegrationHandlerFunc turns a function with the right signature into a get m p integration handler -type GetMPIntegrationHandlerFunc func(GetMPIntegrationParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn GetMPIntegrationHandlerFunc) Handle(params GetMPIntegrationParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// GetMPIntegrationHandler interface for that can handle valid get m p integration params -type GetMPIntegrationHandler interface { - Handle(GetMPIntegrationParams, *models.Principal) middleware.Responder -} - -// NewGetMPIntegration creates a new http.Handler for the get m p integration operation -func NewGetMPIntegration(ctx *middleware.Context, handler GetMPIntegrationHandler) *GetMPIntegration { - return &GetMPIntegration{Context: ctx, Handler: handler} -} - -/* - GetMPIntegration swagger:route GET /mp-integration OperatorAPI getMPIntegration - -Returns email registered for marketplace integration -*/ -type GetMPIntegration struct { - Context *middleware.Context - Handler GetMPIntegrationHandler -} - -func (o *GetMPIntegration) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewGetMPIntegrationParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} - -// GetMPIntegrationOKBody get m p integration o k body -// -// swagger:model GetMPIntegrationOKBody -type GetMPIntegrationOKBody struct { - - // is email set - IsEmailSet bool `json:"isEmailSet,omitempty"` -} - -// Validate validates this get m p integration o k body -func (o *GetMPIntegrationOKBody) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this get m p integration o k body based on context it is used -func (o *GetMPIntegrationOKBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (o *GetMPIntegrationOKBody) MarshalBinary() ([]byte, error) { - if o == nil { - return nil, nil - } - return swag.WriteJSON(o) -} - -// UnmarshalBinary interface implementation -func (o *GetMPIntegrationOKBody) UnmarshalBinary(b []byte) error { - var res GetMPIntegrationOKBody - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *o = res - return nil -} diff --git a/api/operations/operator_api/get_m_p_integration_parameters.go b/api/operations/operator_api/get_m_p_integration_parameters.go deleted file mode 100644 index 6e88e606c85..00000000000 --- a/api/operations/operator_api/get_m_p_integration_parameters.go +++ /dev/null @@ -1,63 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime/middleware" -) - -// NewGetMPIntegrationParams creates a new GetMPIntegrationParams object -// -// There are no default values defined in the spec. -func NewGetMPIntegrationParams() GetMPIntegrationParams { - - return GetMPIntegrationParams{} -} - -// GetMPIntegrationParams contains all the bound params for the get m p integration operation -// typically these are obtained from a http.Request -// -// swagger:parameters GetMPIntegration -type GetMPIntegrationParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewGetMPIntegrationParams() beforehand. -func (o *GetMPIntegrationParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} diff --git a/api/operations/operator_api/get_m_p_integration_responses.go b/api/operations/operator_api/get_m_p_integration_responses.go deleted file mode 100644 index 36a4e1b47df..00000000000 --- a/api/operations/operator_api/get_m_p_integration_responses.go +++ /dev/null @@ -1,135 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// GetMPIntegrationOKCode is the HTTP code returned for type GetMPIntegrationOK -const GetMPIntegrationOKCode int = 200 - -/* -GetMPIntegrationOK A successful response. - -swagger:response getMPIntegrationOK -*/ -type GetMPIntegrationOK struct { - - /* - In: Body - */ - Payload *GetMPIntegrationOKBody `json:"body,omitempty"` -} - -// NewGetMPIntegrationOK creates GetMPIntegrationOK with default headers values -func NewGetMPIntegrationOK() *GetMPIntegrationOK { - - return &GetMPIntegrationOK{} -} - -// WithPayload adds the payload to the get m p integration o k response -func (o *GetMPIntegrationOK) WithPayload(payload *GetMPIntegrationOKBody) *GetMPIntegrationOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the get m p integration o k response -func (o *GetMPIntegrationOK) SetPayload(payload *GetMPIntegrationOKBody) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *GetMPIntegrationOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} - -/* -GetMPIntegrationDefault Generic error response. - -swagger:response getMPIntegrationDefault -*/ -type GetMPIntegrationDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewGetMPIntegrationDefault creates GetMPIntegrationDefault with default headers values -func NewGetMPIntegrationDefault(code int) *GetMPIntegrationDefault { - if code <= 0 { - code = 500 - } - - return &GetMPIntegrationDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the get m p integration default response -func (o *GetMPIntegrationDefault) WithStatusCode(code int) *GetMPIntegrationDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the get m p integration default response -func (o *GetMPIntegrationDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the get m p integration default response -func (o *GetMPIntegrationDefault) WithPayload(payload *models.Error) *GetMPIntegrationDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the get m p integration default response -func (o *GetMPIntegrationDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *GetMPIntegrationDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/get_m_p_integration_urlbuilder.go b/api/operations/operator_api/get_m_p_integration_urlbuilder.go deleted file mode 100644 index 020ba09634a..00000000000 --- a/api/operations/operator_api/get_m_p_integration_urlbuilder.go +++ /dev/null @@ -1,104 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" -) - -// GetMPIntegrationURL generates an URL for the get m p integration operation -type GetMPIntegrationURL struct { - _basePath string -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *GetMPIntegrationURL) WithBasePath(bp string) *GetMPIntegrationURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *GetMPIntegrationURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *GetMPIntegrationURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/mp-integration" - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *GetMPIntegrationURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *GetMPIntegrationURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *GetMPIntegrationURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on GetMPIntegrationURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on GetMPIntegrationURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *GetMPIntegrationURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/get_max_allocatable_mem.go b/api/operations/operator_api/get_max_allocatable_mem.go deleted file mode 100644 index 762c93bbe40..00000000000 --- a/api/operations/operator_api/get_max_allocatable_mem.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// GetMaxAllocatableMemHandlerFunc turns a function with the right signature into a get max allocatable mem handler -type GetMaxAllocatableMemHandlerFunc func(GetMaxAllocatableMemParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn GetMaxAllocatableMemHandlerFunc) Handle(params GetMaxAllocatableMemParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// GetMaxAllocatableMemHandler interface for that can handle valid get max allocatable mem params -type GetMaxAllocatableMemHandler interface { - Handle(GetMaxAllocatableMemParams, *models.Principal) middleware.Responder -} - -// NewGetMaxAllocatableMem creates a new http.Handler for the get max allocatable mem operation -func NewGetMaxAllocatableMem(ctx *middleware.Context, handler GetMaxAllocatableMemHandler) *GetMaxAllocatableMem { - return &GetMaxAllocatableMem{Context: ctx, Handler: handler} -} - -/* - GetMaxAllocatableMem swagger:route GET /cluster/max-allocatable-memory OperatorAPI getMaxAllocatableMem - -Get maximum allocatable memory for given number of nodes -*/ -type GetMaxAllocatableMem struct { - Context *middleware.Context - Handler GetMaxAllocatableMemHandler -} - -func (o *GetMaxAllocatableMem) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewGetMaxAllocatableMemParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/get_max_allocatable_mem_parameters.go b/api/operations/operator_api/get_max_allocatable_mem_parameters.go deleted file mode 100644 index 7e2d7bfc8a4..00000000000 --- a/api/operations/operator_api/get_max_allocatable_mem_parameters.go +++ /dev/null @@ -1,120 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" - "github.com/go-openapi/validate" -) - -// NewGetMaxAllocatableMemParams creates a new GetMaxAllocatableMemParams object -// -// There are no default values defined in the spec. -func NewGetMaxAllocatableMemParams() GetMaxAllocatableMemParams { - - return GetMaxAllocatableMemParams{} -} - -// GetMaxAllocatableMemParams contains all the bound params for the get max allocatable mem operation -// typically these are obtained from a http.Request -// -// swagger:parameters GetMaxAllocatableMem -type GetMaxAllocatableMemParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - Minimum: 1 - In: query - */ - NumNodes int32 -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewGetMaxAllocatableMemParams() beforehand. -func (o *GetMaxAllocatableMemParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - qs := runtime.Values(r.URL.Query()) - - qNumNodes, qhkNumNodes, _ := qs.GetOK("num_nodes") - if err := o.bindNumNodes(qNumNodes, qhkNumNodes, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindNumNodes binds and validates parameter NumNodes from query. -func (o *GetMaxAllocatableMemParams) bindNumNodes(rawData []string, hasKey bool, formats strfmt.Registry) error { - if !hasKey { - return errors.Required("num_nodes", "query", rawData) - } - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // AllowEmptyValue: false - - if err := validate.RequiredString("num_nodes", "query", raw); err != nil { - return err - } - - value, err := swag.ConvertInt32(raw) - if err != nil { - return errors.InvalidType("num_nodes", "query", "int32", raw) - } - o.NumNodes = value - - if err := o.validateNumNodes(formats); err != nil { - return err - } - - return nil -} - -// validateNumNodes carries on validations for parameter NumNodes -func (o *GetMaxAllocatableMemParams) validateNumNodes(formats strfmt.Registry) error { - - if err := validate.MinimumInt("num_nodes", "query", int64(o.NumNodes), 1, false); err != nil { - return err - } - - return nil -} diff --git a/api/operations/operator_api/get_max_allocatable_mem_responses.go b/api/operations/operator_api/get_max_allocatable_mem_responses.go deleted file mode 100644 index c07252fe61e..00000000000 --- a/api/operations/operator_api/get_max_allocatable_mem_responses.go +++ /dev/null @@ -1,135 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// GetMaxAllocatableMemOKCode is the HTTP code returned for type GetMaxAllocatableMemOK -const GetMaxAllocatableMemOKCode int = 200 - -/* -GetMaxAllocatableMemOK A successful response. - -swagger:response getMaxAllocatableMemOK -*/ -type GetMaxAllocatableMemOK struct { - - /* - In: Body - */ - Payload *models.MaxAllocatableMemResponse `json:"body,omitempty"` -} - -// NewGetMaxAllocatableMemOK creates GetMaxAllocatableMemOK with default headers values -func NewGetMaxAllocatableMemOK() *GetMaxAllocatableMemOK { - - return &GetMaxAllocatableMemOK{} -} - -// WithPayload adds the payload to the get max allocatable mem o k response -func (o *GetMaxAllocatableMemOK) WithPayload(payload *models.MaxAllocatableMemResponse) *GetMaxAllocatableMemOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the get max allocatable mem o k response -func (o *GetMaxAllocatableMemOK) SetPayload(payload *models.MaxAllocatableMemResponse) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *GetMaxAllocatableMemOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} - -/* -GetMaxAllocatableMemDefault Generic error response. - -swagger:response getMaxAllocatableMemDefault -*/ -type GetMaxAllocatableMemDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewGetMaxAllocatableMemDefault creates GetMaxAllocatableMemDefault with default headers values -func NewGetMaxAllocatableMemDefault(code int) *GetMaxAllocatableMemDefault { - if code <= 0 { - code = 500 - } - - return &GetMaxAllocatableMemDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the get max allocatable mem default response -func (o *GetMaxAllocatableMemDefault) WithStatusCode(code int) *GetMaxAllocatableMemDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the get max allocatable mem default response -func (o *GetMaxAllocatableMemDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the get max allocatable mem default response -func (o *GetMaxAllocatableMemDefault) WithPayload(payload *models.Error) *GetMaxAllocatableMemDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the get max allocatable mem default response -func (o *GetMaxAllocatableMemDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *GetMaxAllocatableMemDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/get_max_allocatable_mem_urlbuilder.go b/api/operations/operator_api/get_max_allocatable_mem_urlbuilder.go deleted file mode 100644 index 625aca6d7c1..00000000000 --- a/api/operations/operator_api/get_max_allocatable_mem_urlbuilder.go +++ /dev/null @@ -1,119 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - - "github.com/go-openapi/swag" -) - -// GetMaxAllocatableMemURL generates an URL for the get max allocatable mem operation -type GetMaxAllocatableMemURL struct { - NumNodes int32 - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *GetMaxAllocatableMemURL) WithBasePath(bp string) *GetMaxAllocatableMemURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *GetMaxAllocatableMemURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *GetMaxAllocatableMemURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/cluster/max-allocatable-memory" - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - qs := make(url.Values) - - numNodesQ := swag.FormatInt32(o.NumNodes) - if numNodesQ != "" { - qs.Set("num_nodes", numNodesQ) - } - - _result.RawQuery = qs.Encode() - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *GetMaxAllocatableMemURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *GetMaxAllocatableMemURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *GetMaxAllocatableMemURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on GetMaxAllocatableMemURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on GetMaxAllocatableMemURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *GetMaxAllocatableMemURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/get_p_v_c_describe.go b/api/operations/operator_api/get_p_v_c_describe.go deleted file mode 100644 index fdccce8709e..00000000000 --- a/api/operations/operator_api/get_p_v_c_describe.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// GetPVCDescribeHandlerFunc turns a function with the right signature into a get p v c describe handler -type GetPVCDescribeHandlerFunc func(GetPVCDescribeParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn GetPVCDescribeHandlerFunc) Handle(params GetPVCDescribeParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// GetPVCDescribeHandler interface for that can handle valid get p v c describe params -type GetPVCDescribeHandler interface { - Handle(GetPVCDescribeParams, *models.Principal) middleware.Responder -} - -// NewGetPVCDescribe creates a new http.Handler for the get p v c describe operation -func NewGetPVCDescribe(ctx *middleware.Context, handler GetPVCDescribeHandler) *GetPVCDescribe { - return &GetPVCDescribe{Context: ctx, Handler: handler} -} - -/* - GetPVCDescribe swagger:route GET /namespaces/{namespace}/tenants/{tenant}/pvcs/{PVCName}/describe OperatorAPI getPVCDescribe - -Get Describe output for PVC -*/ -type GetPVCDescribe struct { - Context *middleware.Context - Handler GetPVCDescribeHandler -} - -func (o *GetPVCDescribe) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewGetPVCDescribeParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/get_p_v_c_describe_parameters.go b/api/operations/operator_api/get_p_v_c_describe_parameters.go deleted file mode 100644 index 6e02bd6db7b..00000000000 --- a/api/operations/operator_api/get_p_v_c_describe_parameters.go +++ /dev/null @@ -1,136 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" -) - -// NewGetPVCDescribeParams creates a new GetPVCDescribeParams object -// -// There are no default values defined in the spec. -func NewGetPVCDescribeParams() GetPVCDescribeParams { - - return GetPVCDescribeParams{} -} - -// GetPVCDescribeParams contains all the bound params for the get p v c describe operation -// typically these are obtained from a http.Request -// -// swagger:parameters GetPVCDescribe -type GetPVCDescribeParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: path - */ - PVCName string - /* - Required: true - In: path - */ - Namespace string - /* - Required: true - In: path - */ - Tenant string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewGetPVCDescribeParams() beforehand. -func (o *GetPVCDescribeParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - rPVCName, rhkPVCName, _ := route.Params.GetOK("PVCName") - if err := o.bindPVCName(rPVCName, rhkPVCName, route.Formats); err != nil { - res = append(res, err) - } - - rNamespace, rhkNamespace, _ := route.Params.GetOK("namespace") - if err := o.bindNamespace(rNamespace, rhkNamespace, route.Formats); err != nil { - res = append(res, err) - } - - rTenant, rhkTenant, _ := route.Params.GetOK("tenant") - if err := o.bindTenant(rTenant, rhkTenant, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindPVCName binds and validates parameter PVCName from path. -func (o *GetPVCDescribeParams) bindPVCName(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.PVCName = raw - - return nil -} - -// bindNamespace binds and validates parameter Namespace from path. -func (o *GetPVCDescribeParams) bindNamespace(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Namespace = raw - - return nil -} - -// bindTenant binds and validates parameter Tenant from path. -func (o *GetPVCDescribeParams) bindTenant(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Tenant = raw - - return nil -} diff --git a/api/operations/operator_api/get_p_v_c_describe_responses.go b/api/operations/operator_api/get_p_v_c_describe_responses.go deleted file mode 100644 index 65060041345..00000000000 --- a/api/operations/operator_api/get_p_v_c_describe_responses.go +++ /dev/null @@ -1,135 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// GetPVCDescribeOKCode is the HTTP code returned for type GetPVCDescribeOK -const GetPVCDescribeOKCode int = 200 - -/* -GetPVCDescribeOK A successful response. - -swagger:response getPVCDescribeOK -*/ -type GetPVCDescribeOK struct { - - /* - In: Body - */ - Payload *models.DescribePVCWrapper `json:"body,omitempty"` -} - -// NewGetPVCDescribeOK creates GetPVCDescribeOK with default headers values -func NewGetPVCDescribeOK() *GetPVCDescribeOK { - - return &GetPVCDescribeOK{} -} - -// WithPayload adds the payload to the get p v c describe o k response -func (o *GetPVCDescribeOK) WithPayload(payload *models.DescribePVCWrapper) *GetPVCDescribeOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the get p v c describe o k response -func (o *GetPVCDescribeOK) SetPayload(payload *models.DescribePVCWrapper) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *GetPVCDescribeOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} - -/* -GetPVCDescribeDefault Generic error response. - -swagger:response getPVCDescribeDefault -*/ -type GetPVCDescribeDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewGetPVCDescribeDefault creates GetPVCDescribeDefault with default headers values -func NewGetPVCDescribeDefault(code int) *GetPVCDescribeDefault { - if code <= 0 { - code = 500 - } - - return &GetPVCDescribeDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the get p v c describe default response -func (o *GetPVCDescribeDefault) WithStatusCode(code int) *GetPVCDescribeDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the get p v c describe default response -func (o *GetPVCDescribeDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the get p v c describe default response -func (o *GetPVCDescribeDefault) WithPayload(payload *models.Error) *GetPVCDescribeDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the get p v c describe default response -func (o *GetPVCDescribeDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *GetPVCDescribeDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/get_p_v_c_describe_urlbuilder.go b/api/operations/operator_api/get_p_v_c_describe_urlbuilder.go deleted file mode 100644 index ecced735707..00000000000 --- a/api/operations/operator_api/get_p_v_c_describe_urlbuilder.go +++ /dev/null @@ -1,132 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" -) - -// GetPVCDescribeURL generates an URL for the get p v c describe operation -type GetPVCDescribeURL struct { - PVCName string - Namespace string - Tenant string - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *GetPVCDescribeURL) WithBasePath(bp string) *GetPVCDescribeURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *GetPVCDescribeURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *GetPVCDescribeURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/namespaces/{namespace}/tenants/{tenant}/pvcs/{PVCName}/describe" - - pVCName := o.PVCName - if pVCName != "" { - _path = strings.Replace(_path, "{PVCName}", pVCName, -1) - } else { - return nil, errors.New("pVCName is required on GetPVCDescribeURL") - } - - namespace := o.Namespace - if namespace != "" { - _path = strings.Replace(_path, "{namespace}", namespace, -1) - } else { - return nil, errors.New("namespace is required on GetPVCDescribeURL") - } - - tenant := o.Tenant - if tenant != "" { - _path = strings.Replace(_path, "{tenant}", tenant, -1) - } else { - return nil, errors.New("tenant is required on GetPVCDescribeURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *GetPVCDescribeURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *GetPVCDescribeURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *GetPVCDescribeURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on GetPVCDescribeURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on GetPVCDescribeURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *GetPVCDescribeURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/get_p_v_c_events.go b/api/operations/operator_api/get_p_v_c_events.go deleted file mode 100644 index bc83fef3646..00000000000 --- a/api/operations/operator_api/get_p_v_c_events.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// GetPVCEventsHandlerFunc turns a function with the right signature into a get p v c events handler -type GetPVCEventsHandlerFunc func(GetPVCEventsParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn GetPVCEventsHandlerFunc) Handle(params GetPVCEventsParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// GetPVCEventsHandler interface for that can handle valid get p v c events params -type GetPVCEventsHandler interface { - Handle(GetPVCEventsParams, *models.Principal) middleware.Responder -} - -// NewGetPVCEvents creates a new http.Handler for the get p v c events operation -func NewGetPVCEvents(ctx *middleware.Context, handler GetPVCEventsHandler) *GetPVCEvents { - return &GetPVCEvents{Context: ctx, Handler: handler} -} - -/* - GetPVCEvents swagger:route GET /namespaces/{namespace}/tenants/{tenant}/pvcs/{PVCName}/events OperatorAPI getPVCEvents - -Get Events for PVC -*/ -type GetPVCEvents struct { - Context *middleware.Context - Handler GetPVCEventsHandler -} - -func (o *GetPVCEvents) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewGetPVCEventsParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/get_p_v_c_events_parameters.go b/api/operations/operator_api/get_p_v_c_events_parameters.go deleted file mode 100644 index dbf190685b6..00000000000 --- a/api/operations/operator_api/get_p_v_c_events_parameters.go +++ /dev/null @@ -1,136 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" -) - -// NewGetPVCEventsParams creates a new GetPVCEventsParams object -// -// There are no default values defined in the spec. -func NewGetPVCEventsParams() GetPVCEventsParams { - - return GetPVCEventsParams{} -} - -// GetPVCEventsParams contains all the bound params for the get p v c events operation -// typically these are obtained from a http.Request -// -// swagger:parameters GetPVCEvents -type GetPVCEventsParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: path - */ - PVCName string - /* - Required: true - In: path - */ - Namespace string - /* - Required: true - In: path - */ - Tenant string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewGetPVCEventsParams() beforehand. -func (o *GetPVCEventsParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - rPVCName, rhkPVCName, _ := route.Params.GetOK("PVCName") - if err := o.bindPVCName(rPVCName, rhkPVCName, route.Formats); err != nil { - res = append(res, err) - } - - rNamespace, rhkNamespace, _ := route.Params.GetOK("namespace") - if err := o.bindNamespace(rNamespace, rhkNamespace, route.Formats); err != nil { - res = append(res, err) - } - - rTenant, rhkTenant, _ := route.Params.GetOK("tenant") - if err := o.bindTenant(rTenant, rhkTenant, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindPVCName binds and validates parameter PVCName from path. -func (o *GetPVCEventsParams) bindPVCName(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.PVCName = raw - - return nil -} - -// bindNamespace binds and validates parameter Namespace from path. -func (o *GetPVCEventsParams) bindNamespace(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Namespace = raw - - return nil -} - -// bindTenant binds and validates parameter Tenant from path. -func (o *GetPVCEventsParams) bindTenant(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Tenant = raw - - return nil -} diff --git a/api/operations/operator_api/get_p_v_c_events_responses.go b/api/operations/operator_api/get_p_v_c_events_responses.go deleted file mode 100644 index c28c41218c5..00000000000 --- a/api/operations/operator_api/get_p_v_c_events_responses.go +++ /dev/null @@ -1,138 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// GetPVCEventsOKCode is the HTTP code returned for type GetPVCEventsOK -const GetPVCEventsOKCode int = 200 - -/* -GetPVCEventsOK A successful response. - -swagger:response getPVCEventsOK -*/ -type GetPVCEventsOK struct { - - /* - In: Body - */ - Payload models.EventListWrapper `json:"body,omitempty"` -} - -// NewGetPVCEventsOK creates GetPVCEventsOK with default headers values -func NewGetPVCEventsOK() *GetPVCEventsOK { - - return &GetPVCEventsOK{} -} - -// WithPayload adds the payload to the get p v c events o k response -func (o *GetPVCEventsOK) WithPayload(payload models.EventListWrapper) *GetPVCEventsOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the get p v c events o k response -func (o *GetPVCEventsOK) SetPayload(payload models.EventListWrapper) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *GetPVCEventsOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - payload := o.Payload - if payload == nil { - // return empty array - payload = models.EventListWrapper{} - } - - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } -} - -/* -GetPVCEventsDefault Generic error response. - -swagger:response getPVCEventsDefault -*/ -type GetPVCEventsDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewGetPVCEventsDefault creates GetPVCEventsDefault with default headers values -func NewGetPVCEventsDefault(code int) *GetPVCEventsDefault { - if code <= 0 { - code = 500 - } - - return &GetPVCEventsDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the get p v c events default response -func (o *GetPVCEventsDefault) WithStatusCode(code int) *GetPVCEventsDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the get p v c events default response -func (o *GetPVCEventsDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the get p v c events default response -func (o *GetPVCEventsDefault) WithPayload(payload *models.Error) *GetPVCEventsDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the get p v c events default response -func (o *GetPVCEventsDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *GetPVCEventsDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/get_p_v_c_events_urlbuilder.go b/api/operations/operator_api/get_p_v_c_events_urlbuilder.go deleted file mode 100644 index 839e3dfddff..00000000000 --- a/api/operations/operator_api/get_p_v_c_events_urlbuilder.go +++ /dev/null @@ -1,132 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" -) - -// GetPVCEventsURL generates an URL for the get p v c events operation -type GetPVCEventsURL struct { - PVCName string - Namespace string - Tenant string - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *GetPVCEventsURL) WithBasePath(bp string) *GetPVCEventsURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *GetPVCEventsURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *GetPVCEventsURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/namespaces/{namespace}/tenants/{tenant}/pvcs/{PVCName}/events" - - pVCName := o.PVCName - if pVCName != "" { - _path = strings.Replace(_path, "{PVCName}", pVCName, -1) - } else { - return nil, errors.New("pVCName is required on GetPVCEventsURL") - } - - namespace := o.Namespace - if namespace != "" { - _path = strings.Replace(_path, "{namespace}", namespace, -1) - } else { - return nil, errors.New("namespace is required on GetPVCEventsURL") - } - - tenant := o.Tenant - if tenant != "" { - _path = strings.Replace(_path, "{tenant}", tenant, -1) - } else { - return nil, errors.New("tenant is required on GetPVCEventsURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *GetPVCEventsURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *GetPVCEventsURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *GetPVCEventsURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on GetPVCEventsURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on GetPVCEventsURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *GetPVCEventsURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/get_parity.go b/api/operations/operator_api/get_parity.go deleted file mode 100644 index bb17a5aeb1c..00000000000 --- a/api/operations/operator_api/get_parity.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// GetParityHandlerFunc turns a function with the right signature into a get parity handler -type GetParityHandlerFunc func(GetParityParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn GetParityHandlerFunc) Handle(params GetParityParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// GetParityHandler interface for that can handle valid get parity params -type GetParityHandler interface { - Handle(GetParityParams, *models.Principal) middleware.Responder -} - -// NewGetParity creates a new http.Handler for the get parity operation -func NewGetParity(ctx *middleware.Context, handler GetParityHandler) *GetParity { - return &GetParity{Context: ctx, Handler: handler} -} - -/* - GetParity swagger:route GET /get-parity/{nodes}/{disksPerNode} OperatorAPI getParity - -Gets parity by sending number of nodes & number of disks -*/ -type GetParity struct { - Context *middleware.Context - Handler GetParityHandler -} - -func (o *GetParity) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewGetParityParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/get_parity_parameters.go b/api/operations/operator_api/get_parity_parameters.go deleted file mode 100644 index 01c68aa8faf..00000000000 --- a/api/operations/operator_api/get_parity_parameters.go +++ /dev/null @@ -1,154 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" - "github.com/go-openapi/validate" -) - -// NewGetParityParams creates a new GetParityParams object -// -// There are no default values defined in the spec. -func NewGetParityParams() GetParityParams { - - return GetParityParams{} -} - -// GetParityParams contains all the bound params for the get parity operation -// typically these are obtained from a http.Request -// -// swagger:parameters GetParity -type GetParityParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - Minimum: 1 - In: path - */ - DisksPerNode int64 - /* - Required: true - Minimum: 2 - In: path - */ - Nodes int64 -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewGetParityParams() beforehand. -func (o *GetParityParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - rDisksPerNode, rhkDisksPerNode, _ := route.Params.GetOK("disksPerNode") - if err := o.bindDisksPerNode(rDisksPerNode, rhkDisksPerNode, route.Formats); err != nil { - res = append(res, err) - } - - rNodes, rhkNodes, _ := route.Params.GetOK("nodes") - if err := o.bindNodes(rNodes, rhkNodes, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindDisksPerNode binds and validates parameter DisksPerNode from path. -func (o *GetParityParams) bindDisksPerNode(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - - value, err := swag.ConvertInt64(raw) - if err != nil { - return errors.InvalidType("disksPerNode", "path", "int64", raw) - } - o.DisksPerNode = value - - if err := o.validateDisksPerNode(formats); err != nil { - return err - } - - return nil -} - -// validateDisksPerNode carries on validations for parameter DisksPerNode -func (o *GetParityParams) validateDisksPerNode(formats strfmt.Registry) error { - - if err := validate.MinimumInt("disksPerNode", "path", o.DisksPerNode, 1, false); err != nil { - return err - } - - return nil -} - -// bindNodes binds and validates parameter Nodes from path. -func (o *GetParityParams) bindNodes(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - - value, err := swag.ConvertInt64(raw) - if err != nil { - return errors.InvalidType("nodes", "path", "int64", raw) - } - o.Nodes = value - - if err := o.validateNodes(formats); err != nil { - return err - } - - return nil -} - -// validateNodes carries on validations for parameter Nodes -func (o *GetParityParams) validateNodes(formats strfmt.Registry) error { - - if err := validate.MinimumInt("nodes", "path", o.Nodes, 2, false); err != nil { - return err - } - - return nil -} diff --git a/api/operations/operator_api/get_parity_responses.go b/api/operations/operator_api/get_parity_responses.go deleted file mode 100644 index b73987b62e0..00000000000 --- a/api/operations/operator_api/get_parity_responses.go +++ /dev/null @@ -1,138 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// GetParityOKCode is the HTTP code returned for type GetParityOK -const GetParityOKCode int = 200 - -/* -GetParityOK A successful response. - -swagger:response getParityOK -*/ -type GetParityOK struct { - - /* - In: Body - */ - Payload models.ParityResponse `json:"body,omitempty"` -} - -// NewGetParityOK creates GetParityOK with default headers values -func NewGetParityOK() *GetParityOK { - - return &GetParityOK{} -} - -// WithPayload adds the payload to the get parity o k response -func (o *GetParityOK) WithPayload(payload models.ParityResponse) *GetParityOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the get parity o k response -func (o *GetParityOK) SetPayload(payload models.ParityResponse) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *GetParityOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - payload := o.Payload - if payload == nil { - // return empty array - payload = models.ParityResponse{} - } - - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } -} - -/* -GetParityDefault Generic error response. - -swagger:response getParityDefault -*/ -type GetParityDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewGetParityDefault creates GetParityDefault with default headers values -func NewGetParityDefault(code int) *GetParityDefault { - if code <= 0 { - code = 500 - } - - return &GetParityDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the get parity default response -func (o *GetParityDefault) WithStatusCode(code int) *GetParityDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the get parity default response -func (o *GetParityDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the get parity default response -func (o *GetParityDefault) WithPayload(payload *models.Error) *GetParityDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the get parity default response -func (o *GetParityDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *GetParityDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/get_parity_urlbuilder.go b/api/operations/operator_api/get_parity_urlbuilder.go deleted file mode 100644 index e5fad6b2c7a..00000000000 --- a/api/operations/operator_api/get_parity_urlbuilder.go +++ /dev/null @@ -1,126 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" - - "github.com/go-openapi/swag" -) - -// GetParityURL generates an URL for the get parity operation -type GetParityURL struct { - DisksPerNode int64 - Nodes int64 - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *GetParityURL) WithBasePath(bp string) *GetParityURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *GetParityURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *GetParityURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/get-parity/{nodes}/{disksPerNode}" - - disksPerNode := swag.FormatInt64(o.DisksPerNode) - if disksPerNode != "" { - _path = strings.Replace(_path, "{disksPerNode}", disksPerNode, -1) - } else { - return nil, errors.New("disksPerNode is required on GetParityURL") - } - - nodes := swag.FormatInt64(o.Nodes) - if nodes != "" { - _path = strings.Replace(_path, "{nodes}", nodes, -1) - } else { - return nil, errors.New("nodes is required on GetParityURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *GetParityURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *GetParityURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *GetParityURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on GetParityURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on GetParityURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *GetParityURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/get_pod_events.go b/api/operations/operator_api/get_pod_events.go deleted file mode 100644 index 78e86c7f636..00000000000 --- a/api/operations/operator_api/get_pod_events.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// GetPodEventsHandlerFunc turns a function with the right signature into a get pod events handler -type GetPodEventsHandlerFunc func(GetPodEventsParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn GetPodEventsHandlerFunc) Handle(params GetPodEventsParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// GetPodEventsHandler interface for that can handle valid get pod events params -type GetPodEventsHandler interface { - Handle(GetPodEventsParams, *models.Principal) middleware.Responder -} - -// NewGetPodEvents creates a new http.Handler for the get pod events operation -func NewGetPodEvents(ctx *middleware.Context, handler GetPodEventsHandler) *GetPodEvents { - return &GetPodEvents{Context: ctx, Handler: handler} -} - -/* - GetPodEvents swagger:route GET /namespaces/{namespace}/tenants/{tenant}/pods/{podName}/events OperatorAPI getPodEvents - -Get Events for Pod -*/ -type GetPodEvents struct { - Context *middleware.Context - Handler GetPodEventsHandler -} - -func (o *GetPodEvents) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewGetPodEventsParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/get_pod_events_parameters.go b/api/operations/operator_api/get_pod_events_parameters.go deleted file mode 100644 index ae92dfe82c9..00000000000 --- a/api/operations/operator_api/get_pod_events_parameters.go +++ /dev/null @@ -1,136 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" -) - -// NewGetPodEventsParams creates a new GetPodEventsParams object -// -// There are no default values defined in the spec. -func NewGetPodEventsParams() GetPodEventsParams { - - return GetPodEventsParams{} -} - -// GetPodEventsParams contains all the bound params for the get pod events operation -// typically these are obtained from a http.Request -// -// swagger:parameters GetPodEvents -type GetPodEventsParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: path - */ - Namespace string - /* - Required: true - In: path - */ - PodName string - /* - Required: true - In: path - */ - Tenant string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewGetPodEventsParams() beforehand. -func (o *GetPodEventsParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - rNamespace, rhkNamespace, _ := route.Params.GetOK("namespace") - if err := o.bindNamespace(rNamespace, rhkNamespace, route.Formats); err != nil { - res = append(res, err) - } - - rPodName, rhkPodName, _ := route.Params.GetOK("podName") - if err := o.bindPodName(rPodName, rhkPodName, route.Formats); err != nil { - res = append(res, err) - } - - rTenant, rhkTenant, _ := route.Params.GetOK("tenant") - if err := o.bindTenant(rTenant, rhkTenant, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindNamespace binds and validates parameter Namespace from path. -func (o *GetPodEventsParams) bindNamespace(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Namespace = raw - - return nil -} - -// bindPodName binds and validates parameter PodName from path. -func (o *GetPodEventsParams) bindPodName(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.PodName = raw - - return nil -} - -// bindTenant binds and validates parameter Tenant from path. -func (o *GetPodEventsParams) bindTenant(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Tenant = raw - - return nil -} diff --git a/api/operations/operator_api/get_pod_events_responses.go b/api/operations/operator_api/get_pod_events_responses.go deleted file mode 100644 index 4f445c64b22..00000000000 --- a/api/operations/operator_api/get_pod_events_responses.go +++ /dev/null @@ -1,138 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// GetPodEventsOKCode is the HTTP code returned for type GetPodEventsOK -const GetPodEventsOKCode int = 200 - -/* -GetPodEventsOK A successful response. - -swagger:response getPodEventsOK -*/ -type GetPodEventsOK struct { - - /* - In: Body - */ - Payload models.EventListWrapper `json:"body,omitempty"` -} - -// NewGetPodEventsOK creates GetPodEventsOK with default headers values -func NewGetPodEventsOK() *GetPodEventsOK { - - return &GetPodEventsOK{} -} - -// WithPayload adds the payload to the get pod events o k response -func (o *GetPodEventsOK) WithPayload(payload models.EventListWrapper) *GetPodEventsOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the get pod events o k response -func (o *GetPodEventsOK) SetPayload(payload models.EventListWrapper) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *GetPodEventsOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - payload := o.Payload - if payload == nil { - // return empty array - payload = models.EventListWrapper{} - } - - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } -} - -/* -GetPodEventsDefault Generic error response. - -swagger:response getPodEventsDefault -*/ -type GetPodEventsDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewGetPodEventsDefault creates GetPodEventsDefault with default headers values -func NewGetPodEventsDefault(code int) *GetPodEventsDefault { - if code <= 0 { - code = 500 - } - - return &GetPodEventsDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the get pod events default response -func (o *GetPodEventsDefault) WithStatusCode(code int) *GetPodEventsDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the get pod events default response -func (o *GetPodEventsDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the get pod events default response -func (o *GetPodEventsDefault) WithPayload(payload *models.Error) *GetPodEventsDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the get pod events default response -func (o *GetPodEventsDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *GetPodEventsDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/get_pod_events_urlbuilder.go b/api/operations/operator_api/get_pod_events_urlbuilder.go deleted file mode 100644 index f5244af6bee..00000000000 --- a/api/operations/operator_api/get_pod_events_urlbuilder.go +++ /dev/null @@ -1,132 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" -) - -// GetPodEventsURL generates an URL for the get pod events operation -type GetPodEventsURL struct { - Namespace string - PodName string - Tenant string - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *GetPodEventsURL) WithBasePath(bp string) *GetPodEventsURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *GetPodEventsURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *GetPodEventsURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/namespaces/{namespace}/tenants/{tenant}/pods/{podName}/events" - - namespace := o.Namespace - if namespace != "" { - _path = strings.Replace(_path, "{namespace}", namespace, -1) - } else { - return nil, errors.New("namespace is required on GetPodEventsURL") - } - - podName := o.PodName - if podName != "" { - _path = strings.Replace(_path, "{podName}", podName, -1) - } else { - return nil, errors.New("podName is required on GetPodEventsURL") - } - - tenant := o.Tenant - if tenant != "" { - _path = strings.Replace(_path, "{tenant}", tenant, -1) - } else { - return nil, errors.New("tenant is required on GetPodEventsURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *GetPodEventsURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *GetPodEventsURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *GetPodEventsURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on GetPodEventsURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on GetPodEventsURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *GetPodEventsURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/get_pod_logs.go b/api/operations/operator_api/get_pod_logs.go deleted file mode 100644 index 9c7b4eff211..00000000000 --- a/api/operations/operator_api/get_pod_logs.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// GetPodLogsHandlerFunc turns a function with the right signature into a get pod logs handler -type GetPodLogsHandlerFunc func(GetPodLogsParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn GetPodLogsHandlerFunc) Handle(params GetPodLogsParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// GetPodLogsHandler interface for that can handle valid get pod logs params -type GetPodLogsHandler interface { - Handle(GetPodLogsParams, *models.Principal) middleware.Responder -} - -// NewGetPodLogs creates a new http.Handler for the get pod logs operation -func NewGetPodLogs(ctx *middleware.Context, handler GetPodLogsHandler) *GetPodLogs { - return &GetPodLogs{Context: ctx, Handler: handler} -} - -/* - GetPodLogs swagger:route GET /namespaces/{namespace}/tenants/{tenant}/pods/{podName} OperatorAPI getPodLogs - -Get Logs for Pod -*/ -type GetPodLogs struct { - Context *middleware.Context - Handler GetPodLogsHandler -} - -func (o *GetPodLogs) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewGetPodLogsParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/get_pod_logs_parameters.go b/api/operations/operator_api/get_pod_logs_parameters.go deleted file mode 100644 index 744576b5bf4..00000000000 --- a/api/operations/operator_api/get_pod_logs_parameters.go +++ /dev/null @@ -1,136 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" -) - -// NewGetPodLogsParams creates a new GetPodLogsParams object -// -// There are no default values defined in the spec. -func NewGetPodLogsParams() GetPodLogsParams { - - return GetPodLogsParams{} -} - -// GetPodLogsParams contains all the bound params for the get pod logs operation -// typically these are obtained from a http.Request -// -// swagger:parameters GetPodLogs -type GetPodLogsParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: path - */ - Namespace string - /* - Required: true - In: path - */ - PodName string - /* - Required: true - In: path - */ - Tenant string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewGetPodLogsParams() beforehand. -func (o *GetPodLogsParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - rNamespace, rhkNamespace, _ := route.Params.GetOK("namespace") - if err := o.bindNamespace(rNamespace, rhkNamespace, route.Formats); err != nil { - res = append(res, err) - } - - rPodName, rhkPodName, _ := route.Params.GetOK("podName") - if err := o.bindPodName(rPodName, rhkPodName, route.Formats); err != nil { - res = append(res, err) - } - - rTenant, rhkTenant, _ := route.Params.GetOK("tenant") - if err := o.bindTenant(rTenant, rhkTenant, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindNamespace binds and validates parameter Namespace from path. -func (o *GetPodLogsParams) bindNamespace(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Namespace = raw - - return nil -} - -// bindPodName binds and validates parameter PodName from path. -func (o *GetPodLogsParams) bindPodName(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.PodName = raw - - return nil -} - -// bindTenant binds and validates parameter Tenant from path. -func (o *GetPodLogsParams) bindTenant(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Tenant = raw - - return nil -} diff --git a/api/operations/operator_api/get_pod_logs_responses.go b/api/operations/operator_api/get_pod_logs_responses.go deleted file mode 100644 index 1500eea1233..00000000000 --- a/api/operations/operator_api/get_pod_logs_responses.go +++ /dev/null @@ -1,133 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// GetPodLogsOKCode is the HTTP code returned for type GetPodLogsOK -const GetPodLogsOKCode int = 200 - -/* -GetPodLogsOK A successful response. - -swagger:response getPodLogsOK -*/ -type GetPodLogsOK struct { - - /* - In: Body - */ - Payload string `json:"body,omitempty"` -} - -// NewGetPodLogsOK creates GetPodLogsOK with default headers values -func NewGetPodLogsOK() *GetPodLogsOK { - - return &GetPodLogsOK{} -} - -// WithPayload adds the payload to the get pod logs o k response -func (o *GetPodLogsOK) WithPayload(payload string) *GetPodLogsOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the get pod logs o k response -func (o *GetPodLogsOK) SetPayload(payload string) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *GetPodLogsOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } -} - -/* -GetPodLogsDefault Generic error response. - -swagger:response getPodLogsDefault -*/ -type GetPodLogsDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewGetPodLogsDefault creates GetPodLogsDefault with default headers values -func NewGetPodLogsDefault(code int) *GetPodLogsDefault { - if code <= 0 { - code = 500 - } - - return &GetPodLogsDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the get pod logs default response -func (o *GetPodLogsDefault) WithStatusCode(code int) *GetPodLogsDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the get pod logs default response -func (o *GetPodLogsDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the get pod logs default response -func (o *GetPodLogsDefault) WithPayload(payload *models.Error) *GetPodLogsDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the get pod logs default response -func (o *GetPodLogsDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *GetPodLogsDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/get_pod_logs_urlbuilder.go b/api/operations/operator_api/get_pod_logs_urlbuilder.go deleted file mode 100644 index 9be8b429f39..00000000000 --- a/api/operations/operator_api/get_pod_logs_urlbuilder.go +++ /dev/null @@ -1,132 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" -) - -// GetPodLogsURL generates an URL for the get pod logs operation -type GetPodLogsURL struct { - Namespace string - PodName string - Tenant string - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *GetPodLogsURL) WithBasePath(bp string) *GetPodLogsURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *GetPodLogsURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *GetPodLogsURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/namespaces/{namespace}/tenants/{tenant}/pods/{podName}" - - namespace := o.Namespace - if namespace != "" { - _path = strings.Replace(_path, "{namespace}", namespace, -1) - } else { - return nil, errors.New("namespace is required on GetPodLogsURL") - } - - podName := o.PodName - if podName != "" { - _path = strings.Replace(_path, "{podName}", podName, -1) - } else { - return nil, errors.New("podName is required on GetPodLogsURL") - } - - tenant := o.Tenant - if tenant != "" { - _path = strings.Replace(_path, "{tenant}", tenant, -1) - } else { - return nil, errors.New("tenant is required on GetPodLogsURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *GetPodLogsURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *GetPodLogsURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *GetPodLogsURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on GetPodLogsURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on GetPodLogsURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *GetPodLogsURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/get_resource_quota.go b/api/operations/operator_api/get_resource_quota.go deleted file mode 100644 index 32d8eaf7cc6..00000000000 --- a/api/operations/operator_api/get_resource_quota.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// GetResourceQuotaHandlerFunc turns a function with the right signature into a get resource quota handler -type GetResourceQuotaHandlerFunc func(GetResourceQuotaParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn GetResourceQuotaHandlerFunc) Handle(params GetResourceQuotaParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// GetResourceQuotaHandler interface for that can handle valid get resource quota params -type GetResourceQuotaHandler interface { - Handle(GetResourceQuotaParams, *models.Principal) middleware.Responder -} - -// NewGetResourceQuota creates a new http.Handler for the get resource quota operation -func NewGetResourceQuota(ctx *middleware.Context, handler GetResourceQuotaHandler) *GetResourceQuota { - return &GetResourceQuota{Context: ctx, Handler: handler} -} - -/* - GetResourceQuota swagger:route GET /namespaces/{namespace}/resourcequotas/{resource-quota-name} OperatorAPI getResourceQuota - -Get Resource Quota -*/ -type GetResourceQuota struct { - Context *middleware.Context - Handler GetResourceQuotaHandler -} - -func (o *GetResourceQuota) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewGetResourceQuotaParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/get_resource_quota_parameters.go b/api/operations/operator_api/get_resource_quota_parameters.go deleted file mode 100644 index b63969abd57..00000000000 --- a/api/operations/operator_api/get_resource_quota_parameters.go +++ /dev/null @@ -1,112 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" -) - -// NewGetResourceQuotaParams creates a new GetResourceQuotaParams object -// -// There are no default values defined in the spec. -func NewGetResourceQuotaParams() GetResourceQuotaParams { - - return GetResourceQuotaParams{} -} - -// GetResourceQuotaParams contains all the bound params for the get resource quota operation -// typically these are obtained from a http.Request -// -// swagger:parameters GetResourceQuota -type GetResourceQuotaParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: path - */ - Namespace string - /* - Required: true - In: path - */ - ResourceQuotaName string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewGetResourceQuotaParams() beforehand. -func (o *GetResourceQuotaParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - rNamespace, rhkNamespace, _ := route.Params.GetOK("namespace") - if err := o.bindNamespace(rNamespace, rhkNamespace, route.Formats); err != nil { - res = append(res, err) - } - - rResourceQuotaName, rhkResourceQuotaName, _ := route.Params.GetOK("resource-quota-name") - if err := o.bindResourceQuotaName(rResourceQuotaName, rhkResourceQuotaName, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindNamespace binds and validates parameter Namespace from path. -func (o *GetResourceQuotaParams) bindNamespace(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Namespace = raw - - return nil -} - -// bindResourceQuotaName binds and validates parameter ResourceQuotaName from path. -func (o *GetResourceQuotaParams) bindResourceQuotaName(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.ResourceQuotaName = raw - - return nil -} diff --git a/api/operations/operator_api/get_resource_quota_responses.go b/api/operations/operator_api/get_resource_quota_responses.go deleted file mode 100644 index 91c3eb76694..00000000000 --- a/api/operations/operator_api/get_resource_quota_responses.go +++ /dev/null @@ -1,135 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// GetResourceQuotaOKCode is the HTTP code returned for type GetResourceQuotaOK -const GetResourceQuotaOKCode int = 200 - -/* -GetResourceQuotaOK A successful response. - -swagger:response getResourceQuotaOK -*/ -type GetResourceQuotaOK struct { - - /* - In: Body - */ - Payload *models.ResourceQuota `json:"body,omitempty"` -} - -// NewGetResourceQuotaOK creates GetResourceQuotaOK with default headers values -func NewGetResourceQuotaOK() *GetResourceQuotaOK { - - return &GetResourceQuotaOK{} -} - -// WithPayload adds the payload to the get resource quota o k response -func (o *GetResourceQuotaOK) WithPayload(payload *models.ResourceQuota) *GetResourceQuotaOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the get resource quota o k response -func (o *GetResourceQuotaOK) SetPayload(payload *models.ResourceQuota) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *GetResourceQuotaOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} - -/* -GetResourceQuotaDefault Generic error response. - -swagger:response getResourceQuotaDefault -*/ -type GetResourceQuotaDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewGetResourceQuotaDefault creates GetResourceQuotaDefault with default headers values -func NewGetResourceQuotaDefault(code int) *GetResourceQuotaDefault { - if code <= 0 { - code = 500 - } - - return &GetResourceQuotaDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the get resource quota default response -func (o *GetResourceQuotaDefault) WithStatusCode(code int) *GetResourceQuotaDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the get resource quota default response -func (o *GetResourceQuotaDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the get resource quota default response -func (o *GetResourceQuotaDefault) WithPayload(payload *models.Error) *GetResourceQuotaDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the get resource quota default response -func (o *GetResourceQuotaDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *GetResourceQuotaDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/get_resource_quota_urlbuilder.go b/api/operations/operator_api/get_resource_quota_urlbuilder.go deleted file mode 100644 index e13de8ba853..00000000000 --- a/api/operations/operator_api/get_resource_quota_urlbuilder.go +++ /dev/null @@ -1,124 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" -) - -// GetResourceQuotaURL generates an URL for the get resource quota operation -type GetResourceQuotaURL struct { - Namespace string - ResourceQuotaName string - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *GetResourceQuotaURL) WithBasePath(bp string) *GetResourceQuotaURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *GetResourceQuotaURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *GetResourceQuotaURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/namespaces/{namespace}/resourcequotas/{resource-quota-name}" - - namespace := o.Namespace - if namespace != "" { - _path = strings.Replace(_path, "{namespace}", namespace, -1) - } else { - return nil, errors.New("namespace is required on GetResourceQuotaURL") - } - - resourceQuotaName := o.ResourceQuotaName - if resourceQuotaName != "" { - _path = strings.Replace(_path, "{resource-quota-name}", resourceQuotaName, -1) - } else { - return nil, errors.New("resourceQuotaName is required on GetResourceQuotaURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *GetResourceQuotaURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *GetResourceQuotaURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *GetResourceQuotaURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on GetResourceQuotaURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on GetResourceQuotaURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *GetResourceQuotaURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/get_tenant_events.go b/api/operations/operator_api/get_tenant_events.go deleted file mode 100644 index 2d438843b95..00000000000 --- a/api/operations/operator_api/get_tenant_events.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// GetTenantEventsHandlerFunc turns a function with the right signature into a get tenant events handler -type GetTenantEventsHandlerFunc func(GetTenantEventsParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn GetTenantEventsHandlerFunc) Handle(params GetTenantEventsParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// GetTenantEventsHandler interface for that can handle valid get tenant events params -type GetTenantEventsHandler interface { - Handle(GetTenantEventsParams, *models.Principal) middleware.Responder -} - -// NewGetTenantEvents creates a new http.Handler for the get tenant events operation -func NewGetTenantEvents(ctx *middleware.Context, handler GetTenantEventsHandler) *GetTenantEvents { - return &GetTenantEvents{Context: ctx, Handler: handler} -} - -/* - GetTenantEvents swagger:route GET /namespaces/{namespace}/tenants/{tenant}/events OperatorAPI getTenantEvents - -Get Events for given Tenant -*/ -type GetTenantEvents struct { - Context *middleware.Context - Handler GetTenantEventsHandler -} - -func (o *GetTenantEvents) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewGetTenantEventsParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/get_tenant_events_parameters.go b/api/operations/operator_api/get_tenant_events_parameters.go deleted file mode 100644 index c2709d9ed76..00000000000 --- a/api/operations/operator_api/get_tenant_events_parameters.go +++ /dev/null @@ -1,112 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" -) - -// NewGetTenantEventsParams creates a new GetTenantEventsParams object -// -// There are no default values defined in the spec. -func NewGetTenantEventsParams() GetTenantEventsParams { - - return GetTenantEventsParams{} -} - -// GetTenantEventsParams contains all the bound params for the get tenant events operation -// typically these are obtained from a http.Request -// -// swagger:parameters GetTenantEvents -type GetTenantEventsParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: path - */ - Namespace string - /* - Required: true - In: path - */ - Tenant string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewGetTenantEventsParams() beforehand. -func (o *GetTenantEventsParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - rNamespace, rhkNamespace, _ := route.Params.GetOK("namespace") - if err := o.bindNamespace(rNamespace, rhkNamespace, route.Formats); err != nil { - res = append(res, err) - } - - rTenant, rhkTenant, _ := route.Params.GetOK("tenant") - if err := o.bindTenant(rTenant, rhkTenant, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindNamespace binds and validates parameter Namespace from path. -func (o *GetTenantEventsParams) bindNamespace(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Namespace = raw - - return nil -} - -// bindTenant binds and validates parameter Tenant from path. -func (o *GetTenantEventsParams) bindTenant(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Tenant = raw - - return nil -} diff --git a/api/operations/operator_api/get_tenant_events_responses.go b/api/operations/operator_api/get_tenant_events_responses.go deleted file mode 100644 index 9040ff71af0..00000000000 --- a/api/operations/operator_api/get_tenant_events_responses.go +++ /dev/null @@ -1,138 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// GetTenantEventsOKCode is the HTTP code returned for type GetTenantEventsOK -const GetTenantEventsOKCode int = 200 - -/* -GetTenantEventsOK A successful response. - -swagger:response getTenantEventsOK -*/ -type GetTenantEventsOK struct { - - /* - In: Body - */ - Payload models.EventListWrapper `json:"body,omitempty"` -} - -// NewGetTenantEventsOK creates GetTenantEventsOK with default headers values -func NewGetTenantEventsOK() *GetTenantEventsOK { - - return &GetTenantEventsOK{} -} - -// WithPayload adds the payload to the get tenant events o k response -func (o *GetTenantEventsOK) WithPayload(payload models.EventListWrapper) *GetTenantEventsOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the get tenant events o k response -func (o *GetTenantEventsOK) SetPayload(payload models.EventListWrapper) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *GetTenantEventsOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - payload := o.Payload - if payload == nil { - // return empty array - payload = models.EventListWrapper{} - } - - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } -} - -/* -GetTenantEventsDefault Generic error response. - -swagger:response getTenantEventsDefault -*/ -type GetTenantEventsDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewGetTenantEventsDefault creates GetTenantEventsDefault with default headers values -func NewGetTenantEventsDefault(code int) *GetTenantEventsDefault { - if code <= 0 { - code = 500 - } - - return &GetTenantEventsDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the get tenant events default response -func (o *GetTenantEventsDefault) WithStatusCode(code int) *GetTenantEventsDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the get tenant events default response -func (o *GetTenantEventsDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the get tenant events default response -func (o *GetTenantEventsDefault) WithPayload(payload *models.Error) *GetTenantEventsDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the get tenant events default response -func (o *GetTenantEventsDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *GetTenantEventsDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/get_tenant_events_urlbuilder.go b/api/operations/operator_api/get_tenant_events_urlbuilder.go deleted file mode 100644 index 0a82e822bd7..00000000000 --- a/api/operations/operator_api/get_tenant_events_urlbuilder.go +++ /dev/null @@ -1,124 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" -) - -// GetTenantEventsURL generates an URL for the get tenant events operation -type GetTenantEventsURL struct { - Namespace string - Tenant string - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *GetTenantEventsURL) WithBasePath(bp string) *GetTenantEventsURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *GetTenantEventsURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *GetTenantEventsURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/namespaces/{namespace}/tenants/{tenant}/events" - - namespace := o.Namespace - if namespace != "" { - _path = strings.Replace(_path, "{namespace}", namespace, -1) - } else { - return nil, errors.New("namespace is required on GetTenantEventsURL") - } - - tenant := o.Tenant - if tenant != "" { - _path = strings.Replace(_path, "{tenant}", tenant, -1) - } else { - return nil, errors.New("tenant is required on GetTenantEventsURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *GetTenantEventsURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *GetTenantEventsURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *GetTenantEventsURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on GetTenantEventsURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on GetTenantEventsURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *GetTenantEventsURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/get_tenant_log_report.go b/api/operations/operator_api/get_tenant_log_report.go deleted file mode 100644 index eec7f828884..00000000000 --- a/api/operations/operator_api/get_tenant_log_report.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// GetTenantLogReportHandlerFunc turns a function with the right signature into a get tenant log report handler -type GetTenantLogReportHandlerFunc func(GetTenantLogReportParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn GetTenantLogReportHandlerFunc) Handle(params GetTenantLogReportParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// GetTenantLogReportHandler interface for that can handle valid get tenant log report params -type GetTenantLogReportHandler interface { - Handle(GetTenantLogReportParams, *models.Principal) middleware.Responder -} - -// NewGetTenantLogReport creates a new http.Handler for the get tenant log report operation -func NewGetTenantLogReport(ctx *middleware.Context, handler GetTenantLogReportHandler) *GetTenantLogReport { - return &GetTenantLogReport{Context: ctx, Handler: handler} -} - -/* - GetTenantLogReport swagger:route GET /namespaces/{namespace}/tenants/{tenant}/log-report OperatorAPI getTenantLogReport - -Get Tenant Log Report -*/ -type GetTenantLogReport struct { - Context *middleware.Context - Handler GetTenantLogReportHandler -} - -func (o *GetTenantLogReport) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewGetTenantLogReportParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/get_tenant_log_report_parameters.go b/api/operations/operator_api/get_tenant_log_report_parameters.go deleted file mode 100644 index 492aa556c61..00000000000 --- a/api/operations/operator_api/get_tenant_log_report_parameters.go +++ /dev/null @@ -1,112 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" -) - -// NewGetTenantLogReportParams creates a new GetTenantLogReportParams object -// -// There are no default values defined in the spec. -func NewGetTenantLogReportParams() GetTenantLogReportParams { - - return GetTenantLogReportParams{} -} - -// GetTenantLogReportParams contains all the bound params for the get tenant log report operation -// typically these are obtained from a http.Request -// -// swagger:parameters GetTenantLogReport -type GetTenantLogReportParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: path - */ - Namespace string - /* - Required: true - In: path - */ - Tenant string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewGetTenantLogReportParams() beforehand. -func (o *GetTenantLogReportParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - rNamespace, rhkNamespace, _ := route.Params.GetOK("namespace") - if err := o.bindNamespace(rNamespace, rhkNamespace, route.Formats); err != nil { - res = append(res, err) - } - - rTenant, rhkTenant, _ := route.Params.GetOK("tenant") - if err := o.bindTenant(rTenant, rhkTenant, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindNamespace binds and validates parameter Namespace from path. -func (o *GetTenantLogReportParams) bindNamespace(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Namespace = raw - - return nil -} - -// bindTenant binds and validates parameter Tenant from path. -func (o *GetTenantLogReportParams) bindTenant(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Tenant = raw - - return nil -} diff --git a/api/operations/operator_api/get_tenant_log_report_responses.go b/api/operations/operator_api/get_tenant_log_report_responses.go deleted file mode 100644 index 311d66342df..00000000000 --- a/api/operations/operator_api/get_tenant_log_report_responses.go +++ /dev/null @@ -1,135 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// GetTenantLogReportOKCode is the HTTP code returned for type GetTenantLogReportOK -const GetTenantLogReportOKCode int = 200 - -/* -GetTenantLogReportOK A successful response. - -swagger:response getTenantLogReportOK -*/ -type GetTenantLogReportOK struct { - - /* - In: Body - */ - Payload *models.TenantLogReport `json:"body,omitempty"` -} - -// NewGetTenantLogReportOK creates GetTenantLogReportOK with default headers values -func NewGetTenantLogReportOK() *GetTenantLogReportOK { - - return &GetTenantLogReportOK{} -} - -// WithPayload adds the payload to the get tenant log report o k response -func (o *GetTenantLogReportOK) WithPayload(payload *models.TenantLogReport) *GetTenantLogReportOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the get tenant log report o k response -func (o *GetTenantLogReportOK) SetPayload(payload *models.TenantLogReport) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *GetTenantLogReportOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} - -/* -GetTenantLogReportDefault Generic error response. - -swagger:response getTenantLogReportDefault -*/ -type GetTenantLogReportDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewGetTenantLogReportDefault creates GetTenantLogReportDefault with default headers values -func NewGetTenantLogReportDefault(code int) *GetTenantLogReportDefault { - if code <= 0 { - code = 500 - } - - return &GetTenantLogReportDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the get tenant log report default response -func (o *GetTenantLogReportDefault) WithStatusCode(code int) *GetTenantLogReportDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the get tenant log report default response -func (o *GetTenantLogReportDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the get tenant log report default response -func (o *GetTenantLogReportDefault) WithPayload(payload *models.Error) *GetTenantLogReportDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the get tenant log report default response -func (o *GetTenantLogReportDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *GetTenantLogReportDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/get_tenant_log_report_urlbuilder.go b/api/operations/operator_api/get_tenant_log_report_urlbuilder.go deleted file mode 100644 index f8dca6748db..00000000000 --- a/api/operations/operator_api/get_tenant_log_report_urlbuilder.go +++ /dev/null @@ -1,124 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" -) - -// GetTenantLogReportURL generates an URL for the get tenant log report operation -type GetTenantLogReportURL struct { - Namespace string - Tenant string - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *GetTenantLogReportURL) WithBasePath(bp string) *GetTenantLogReportURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *GetTenantLogReportURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *GetTenantLogReportURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/namespaces/{namespace}/tenants/{tenant}/log-report" - - namespace := o.Namespace - if namespace != "" { - _path = strings.Replace(_path, "{namespace}", namespace, -1) - } else { - return nil, errors.New("namespace is required on GetTenantLogReportURL") - } - - tenant := o.Tenant - if tenant != "" { - _path = strings.Replace(_path, "{tenant}", tenant, -1) - } else { - return nil, errors.New("tenant is required on GetTenantLogReportURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *GetTenantLogReportURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *GetTenantLogReportURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *GetTenantLogReportURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on GetTenantLogReportURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on GetTenantLogReportURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *GetTenantLogReportURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/get_tenant_pods.go b/api/operations/operator_api/get_tenant_pods.go deleted file mode 100644 index 8fb3b5dbd85..00000000000 --- a/api/operations/operator_api/get_tenant_pods.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// GetTenantPodsHandlerFunc turns a function with the right signature into a get tenant pods handler -type GetTenantPodsHandlerFunc func(GetTenantPodsParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn GetTenantPodsHandlerFunc) Handle(params GetTenantPodsParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// GetTenantPodsHandler interface for that can handle valid get tenant pods params -type GetTenantPodsHandler interface { - Handle(GetTenantPodsParams, *models.Principal) middleware.Responder -} - -// NewGetTenantPods creates a new http.Handler for the get tenant pods operation -func NewGetTenantPods(ctx *middleware.Context, handler GetTenantPodsHandler) *GetTenantPods { - return &GetTenantPods{Context: ctx, Handler: handler} -} - -/* - GetTenantPods swagger:route GET /namespaces/{namespace}/tenants/{tenant}/pods OperatorAPI getTenantPods - -Get Pods For The Tenant -*/ -type GetTenantPods struct { - Context *middleware.Context - Handler GetTenantPodsHandler -} - -func (o *GetTenantPods) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewGetTenantPodsParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/get_tenant_pods_parameters.go b/api/operations/operator_api/get_tenant_pods_parameters.go deleted file mode 100644 index 92f73b0eb1f..00000000000 --- a/api/operations/operator_api/get_tenant_pods_parameters.go +++ /dev/null @@ -1,112 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" -) - -// NewGetTenantPodsParams creates a new GetTenantPodsParams object -// -// There are no default values defined in the spec. -func NewGetTenantPodsParams() GetTenantPodsParams { - - return GetTenantPodsParams{} -} - -// GetTenantPodsParams contains all the bound params for the get tenant pods operation -// typically these are obtained from a http.Request -// -// swagger:parameters GetTenantPods -type GetTenantPodsParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: path - */ - Namespace string - /* - Required: true - In: path - */ - Tenant string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewGetTenantPodsParams() beforehand. -func (o *GetTenantPodsParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - rNamespace, rhkNamespace, _ := route.Params.GetOK("namespace") - if err := o.bindNamespace(rNamespace, rhkNamespace, route.Formats); err != nil { - res = append(res, err) - } - - rTenant, rhkTenant, _ := route.Params.GetOK("tenant") - if err := o.bindTenant(rTenant, rhkTenant, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindNamespace binds and validates parameter Namespace from path. -func (o *GetTenantPodsParams) bindNamespace(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Namespace = raw - - return nil -} - -// bindTenant binds and validates parameter Tenant from path. -func (o *GetTenantPodsParams) bindTenant(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Tenant = raw - - return nil -} diff --git a/api/operations/operator_api/get_tenant_pods_responses.go b/api/operations/operator_api/get_tenant_pods_responses.go deleted file mode 100644 index 69af4a407f9..00000000000 --- a/api/operations/operator_api/get_tenant_pods_responses.go +++ /dev/null @@ -1,138 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// GetTenantPodsOKCode is the HTTP code returned for type GetTenantPodsOK -const GetTenantPodsOKCode int = 200 - -/* -GetTenantPodsOK A successful response. - -swagger:response getTenantPodsOK -*/ -type GetTenantPodsOK struct { - - /* - In: Body - */ - Payload []*models.TenantPod `json:"body,omitempty"` -} - -// NewGetTenantPodsOK creates GetTenantPodsOK with default headers values -func NewGetTenantPodsOK() *GetTenantPodsOK { - - return &GetTenantPodsOK{} -} - -// WithPayload adds the payload to the get tenant pods o k response -func (o *GetTenantPodsOK) WithPayload(payload []*models.TenantPod) *GetTenantPodsOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the get tenant pods o k response -func (o *GetTenantPodsOK) SetPayload(payload []*models.TenantPod) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *GetTenantPodsOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - payload := o.Payload - if payload == nil { - // return empty array - payload = make([]*models.TenantPod, 0, 50) - } - - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } -} - -/* -GetTenantPodsDefault Generic error response. - -swagger:response getTenantPodsDefault -*/ -type GetTenantPodsDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewGetTenantPodsDefault creates GetTenantPodsDefault with default headers values -func NewGetTenantPodsDefault(code int) *GetTenantPodsDefault { - if code <= 0 { - code = 500 - } - - return &GetTenantPodsDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the get tenant pods default response -func (o *GetTenantPodsDefault) WithStatusCode(code int) *GetTenantPodsDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the get tenant pods default response -func (o *GetTenantPodsDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the get tenant pods default response -func (o *GetTenantPodsDefault) WithPayload(payload *models.Error) *GetTenantPodsDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the get tenant pods default response -func (o *GetTenantPodsDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *GetTenantPodsDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/get_tenant_pods_urlbuilder.go b/api/operations/operator_api/get_tenant_pods_urlbuilder.go deleted file mode 100644 index 0c0ce503190..00000000000 --- a/api/operations/operator_api/get_tenant_pods_urlbuilder.go +++ /dev/null @@ -1,124 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" -) - -// GetTenantPodsURL generates an URL for the get tenant pods operation -type GetTenantPodsURL struct { - Namespace string - Tenant string - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *GetTenantPodsURL) WithBasePath(bp string) *GetTenantPodsURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *GetTenantPodsURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *GetTenantPodsURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/namespaces/{namespace}/tenants/{tenant}/pods" - - namespace := o.Namespace - if namespace != "" { - _path = strings.Replace(_path, "{namespace}", namespace, -1) - } else { - return nil, errors.New("namespace is required on GetTenantPodsURL") - } - - tenant := o.Tenant - if tenant != "" { - _path = strings.Replace(_path, "{tenant}", tenant, -1) - } else { - return nil, errors.New("tenant is required on GetTenantPodsURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *GetTenantPodsURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *GetTenantPodsURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *GetTenantPodsURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on GetTenantPodsURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on GetTenantPodsURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *GetTenantPodsURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/get_tenant_usage.go b/api/operations/operator_api/get_tenant_usage.go deleted file mode 100644 index ba4590b45c8..00000000000 --- a/api/operations/operator_api/get_tenant_usage.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// GetTenantUsageHandlerFunc turns a function with the right signature into a get tenant usage handler -type GetTenantUsageHandlerFunc func(GetTenantUsageParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn GetTenantUsageHandlerFunc) Handle(params GetTenantUsageParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// GetTenantUsageHandler interface for that can handle valid get tenant usage params -type GetTenantUsageHandler interface { - Handle(GetTenantUsageParams, *models.Principal) middleware.Responder -} - -// NewGetTenantUsage creates a new http.Handler for the get tenant usage operation -func NewGetTenantUsage(ctx *middleware.Context, handler GetTenantUsageHandler) *GetTenantUsage { - return &GetTenantUsage{Context: ctx, Handler: handler} -} - -/* - GetTenantUsage swagger:route GET /namespaces/{namespace}/tenants/{tenant}/usage OperatorAPI getTenantUsage - -Get Usage For The Tenant -*/ -type GetTenantUsage struct { - Context *middleware.Context - Handler GetTenantUsageHandler -} - -func (o *GetTenantUsage) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewGetTenantUsageParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/get_tenant_usage_parameters.go b/api/operations/operator_api/get_tenant_usage_parameters.go deleted file mode 100644 index b89983071aa..00000000000 --- a/api/operations/operator_api/get_tenant_usage_parameters.go +++ /dev/null @@ -1,112 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" -) - -// NewGetTenantUsageParams creates a new GetTenantUsageParams object -// -// There are no default values defined in the spec. -func NewGetTenantUsageParams() GetTenantUsageParams { - - return GetTenantUsageParams{} -} - -// GetTenantUsageParams contains all the bound params for the get tenant usage operation -// typically these are obtained from a http.Request -// -// swagger:parameters GetTenantUsage -type GetTenantUsageParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: path - */ - Namespace string - /* - Required: true - In: path - */ - Tenant string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewGetTenantUsageParams() beforehand. -func (o *GetTenantUsageParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - rNamespace, rhkNamespace, _ := route.Params.GetOK("namespace") - if err := o.bindNamespace(rNamespace, rhkNamespace, route.Formats); err != nil { - res = append(res, err) - } - - rTenant, rhkTenant, _ := route.Params.GetOK("tenant") - if err := o.bindTenant(rTenant, rhkTenant, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindNamespace binds and validates parameter Namespace from path. -func (o *GetTenantUsageParams) bindNamespace(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Namespace = raw - - return nil -} - -// bindTenant binds and validates parameter Tenant from path. -func (o *GetTenantUsageParams) bindTenant(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Tenant = raw - - return nil -} diff --git a/api/operations/operator_api/get_tenant_usage_responses.go b/api/operations/operator_api/get_tenant_usage_responses.go deleted file mode 100644 index a0a3afcc5be..00000000000 --- a/api/operations/operator_api/get_tenant_usage_responses.go +++ /dev/null @@ -1,135 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// GetTenantUsageOKCode is the HTTP code returned for type GetTenantUsageOK -const GetTenantUsageOKCode int = 200 - -/* -GetTenantUsageOK A successful response. - -swagger:response getTenantUsageOK -*/ -type GetTenantUsageOK struct { - - /* - In: Body - */ - Payload *models.TenantUsage `json:"body,omitempty"` -} - -// NewGetTenantUsageOK creates GetTenantUsageOK with default headers values -func NewGetTenantUsageOK() *GetTenantUsageOK { - - return &GetTenantUsageOK{} -} - -// WithPayload adds the payload to the get tenant usage o k response -func (o *GetTenantUsageOK) WithPayload(payload *models.TenantUsage) *GetTenantUsageOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the get tenant usage o k response -func (o *GetTenantUsageOK) SetPayload(payload *models.TenantUsage) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *GetTenantUsageOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} - -/* -GetTenantUsageDefault Generic error response. - -swagger:response getTenantUsageDefault -*/ -type GetTenantUsageDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewGetTenantUsageDefault creates GetTenantUsageDefault with default headers values -func NewGetTenantUsageDefault(code int) *GetTenantUsageDefault { - if code <= 0 { - code = 500 - } - - return &GetTenantUsageDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the get tenant usage default response -func (o *GetTenantUsageDefault) WithStatusCode(code int) *GetTenantUsageDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the get tenant usage default response -func (o *GetTenantUsageDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the get tenant usage default response -func (o *GetTenantUsageDefault) WithPayload(payload *models.Error) *GetTenantUsageDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the get tenant usage default response -func (o *GetTenantUsageDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *GetTenantUsageDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/get_tenant_usage_urlbuilder.go b/api/operations/operator_api/get_tenant_usage_urlbuilder.go deleted file mode 100644 index 75e784c0068..00000000000 --- a/api/operations/operator_api/get_tenant_usage_urlbuilder.go +++ /dev/null @@ -1,124 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" -) - -// GetTenantUsageURL generates an URL for the get tenant usage operation -type GetTenantUsageURL struct { - Namespace string - Tenant string - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *GetTenantUsageURL) WithBasePath(bp string) *GetTenantUsageURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *GetTenantUsageURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *GetTenantUsageURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/namespaces/{namespace}/tenants/{tenant}/usage" - - namespace := o.Namespace - if namespace != "" { - _path = strings.Replace(_path, "{namespace}", namespace, -1) - } else { - return nil, errors.New("namespace is required on GetTenantUsageURL") - } - - tenant := o.Tenant - if tenant != "" { - _path = strings.Replace(_path, "{tenant}", tenant, -1) - } else { - return nil, errors.New("tenant is required on GetTenantUsageURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *GetTenantUsageURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *GetTenantUsageURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *GetTenantUsageURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on GetTenantUsageURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on GetTenantUsageURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *GetTenantUsageURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/get_tenant_y_a_m_l.go b/api/operations/operator_api/get_tenant_y_a_m_l.go deleted file mode 100644 index bb3c694f89c..00000000000 --- a/api/operations/operator_api/get_tenant_y_a_m_l.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// GetTenantYAMLHandlerFunc turns a function with the right signature into a get tenant y a m l handler -type GetTenantYAMLHandlerFunc func(GetTenantYAMLParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn GetTenantYAMLHandlerFunc) Handle(params GetTenantYAMLParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// GetTenantYAMLHandler interface for that can handle valid get tenant y a m l params -type GetTenantYAMLHandler interface { - Handle(GetTenantYAMLParams, *models.Principal) middleware.Responder -} - -// NewGetTenantYAML creates a new http.Handler for the get tenant y a m l operation -func NewGetTenantYAML(ctx *middleware.Context, handler GetTenantYAMLHandler) *GetTenantYAML { - return &GetTenantYAML{Context: ctx, Handler: handler} -} - -/* - GetTenantYAML swagger:route GET /namespaces/{namespace}/tenants/{tenant}/yaml OperatorAPI getTenantYAML - -Get the Tenant YAML -*/ -type GetTenantYAML struct { - Context *middleware.Context - Handler GetTenantYAMLHandler -} - -func (o *GetTenantYAML) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewGetTenantYAMLParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/get_tenant_y_a_m_l_parameters.go b/api/operations/operator_api/get_tenant_y_a_m_l_parameters.go deleted file mode 100644 index 4a27a588fce..00000000000 --- a/api/operations/operator_api/get_tenant_y_a_m_l_parameters.go +++ /dev/null @@ -1,112 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" -) - -// NewGetTenantYAMLParams creates a new GetTenantYAMLParams object -// -// There are no default values defined in the spec. -func NewGetTenantYAMLParams() GetTenantYAMLParams { - - return GetTenantYAMLParams{} -} - -// GetTenantYAMLParams contains all the bound params for the get tenant y a m l operation -// typically these are obtained from a http.Request -// -// swagger:parameters GetTenantYAML -type GetTenantYAMLParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: path - */ - Namespace string - /* - Required: true - In: path - */ - Tenant string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewGetTenantYAMLParams() beforehand. -func (o *GetTenantYAMLParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - rNamespace, rhkNamespace, _ := route.Params.GetOK("namespace") - if err := o.bindNamespace(rNamespace, rhkNamespace, route.Formats); err != nil { - res = append(res, err) - } - - rTenant, rhkTenant, _ := route.Params.GetOK("tenant") - if err := o.bindTenant(rTenant, rhkTenant, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindNamespace binds and validates parameter Namespace from path. -func (o *GetTenantYAMLParams) bindNamespace(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Namespace = raw - - return nil -} - -// bindTenant binds and validates parameter Tenant from path. -func (o *GetTenantYAMLParams) bindTenant(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Tenant = raw - - return nil -} diff --git a/api/operations/operator_api/get_tenant_y_a_m_l_responses.go b/api/operations/operator_api/get_tenant_y_a_m_l_responses.go deleted file mode 100644 index 0d0d77dbb8d..00000000000 --- a/api/operations/operator_api/get_tenant_y_a_m_l_responses.go +++ /dev/null @@ -1,135 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// GetTenantYAMLOKCode is the HTTP code returned for type GetTenantYAMLOK -const GetTenantYAMLOKCode int = 200 - -/* -GetTenantYAMLOK A successful response. - -swagger:response getTenantYAMLOK -*/ -type GetTenantYAMLOK struct { - - /* - In: Body - */ - Payload *models.TenantYAML `json:"body,omitempty"` -} - -// NewGetTenantYAMLOK creates GetTenantYAMLOK with default headers values -func NewGetTenantYAMLOK() *GetTenantYAMLOK { - - return &GetTenantYAMLOK{} -} - -// WithPayload adds the payload to the get tenant y a m l o k response -func (o *GetTenantYAMLOK) WithPayload(payload *models.TenantYAML) *GetTenantYAMLOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the get tenant y a m l o k response -func (o *GetTenantYAMLOK) SetPayload(payload *models.TenantYAML) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *GetTenantYAMLOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} - -/* -GetTenantYAMLDefault Generic error response. - -swagger:response getTenantYAMLDefault -*/ -type GetTenantYAMLDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewGetTenantYAMLDefault creates GetTenantYAMLDefault with default headers values -func NewGetTenantYAMLDefault(code int) *GetTenantYAMLDefault { - if code <= 0 { - code = 500 - } - - return &GetTenantYAMLDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the get tenant y a m l default response -func (o *GetTenantYAMLDefault) WithStatusCode(code int) *GetTenantYAMLDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the get tenant y a m l default response -func (o *GetTenantYAMLDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the get tenant y a m l default response -func (o *GetTenantYAMLDefault) WithPayload(payload *models.Error) *GetTenantYAMLDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the get tenant y a m l default response -func (o *GetTenantYAMLDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *GetTenantYAMLDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/get_tenant_y_a_m_l_urlbuilder.go b/api/operations/operator_api/get_tenant_y_a_m_l_urlbuilder.go deleted file mode 100644 index 8271554bc22..00000000000 --- a/api/operations/operator_api/get_tenant_y_a_m_l_urlbuilder.go +++ /dev/null @@ -1,124 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" -) - -// GetTenantYAMLURL generates an URL for the get tenant y a m l operation -type GetTenantYAMLURL struct { - Namespace string - Tenant string - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *GetTenantYAMLURL) WithBasePath(bp string) *GetTenantYAMLURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *GetTenantYAMLURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *GetTenantYAMLURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/namespaces/{namespace}/tenants/{tenant}/yaml" - - namespace := o.Namespace - if namespace != "" { - _path = strings.Replace(_path, "{namespace}", namespace, -1) - } else { - return nil, errors.New("namespace is required on GetTenantYAMLURL") - } - - tenant := o.Tenant - if tenant != "" { - _path = strings.Replace(_path, "{tenant}", tenant, -1) - } else { - return nil, errors.New("tenant is required on GetTenantYAMLURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *GetTenantYAMLURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *GetTenantYAMLURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *GetTenantYAMLURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on GetTenantYAMLURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on GetTenantYAMLURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *GetTenantYAMLURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/list_all_tenants.go b/api/operations/operator_api/list_all_tenants.go deleted file mode 100644 index 12512f5364d..00000000000 --- a/api/operations/operator_api/list_all_tenants.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// ListAllTenantsHandlerFunc turns a function with the right signature into a list all tenants handler -type ListAllTenantsHandlerFunc func(ListAllTenantsParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn ListAllTenantsHandlerFunc) Handle(params ListAllTenantsParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// ListAllTenantsHandler interface for that can handle valid list all tenants params -type ListAllTenantsHandler interface { - Handle(ListAllTenantsParams, *models.Principal) middleware.Responder -} - -// NewListAllTenants creates a new http.Handler for the list all tenants operation -func NewListAllTenants(ctx *middleware.Context, handler ListAllTenantsHandler) *ListAllTenants { - return &ListAllTenants{Context: ctx, Handler: handler} -} - -/* - ListAllTenants swagger:route GET /tenants OperatorAPI listAllTenants - -List Tenant of All Namespaces -*/ -type ListAllTenants struct { - Context *middleware.Context - Handler ListAllTenantsHandler -} - -func (o *ListAllTenants) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewListAllTenantsParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/list_all_tenants_parameters.go b/api/operations/operator_api/list_all_tenants_parameters.go deleted file mode 100644 index c2c7a81b0b6..00000000000 --- a/api/operations/operator_api/list_all_tenants_parameters.go +++ /dev/null @@ -1,159 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// NewListAllTenantsParams creates a new ListAllTenantsParams object -// -// There are no default values defined in the spec. -func NewListAllTenantsParams() ListAllTenantsParams { - - return ListAllTenantsParams{} -} - -// ListAllTenantsParams contains all the bound params for the list all tenants operation -// typically these are obtained from a http.Request -// -// swagger:parameters ListAllTenants -type ListAllTenantsParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - In: query - */ - Limit *int32 - /* - In: query - */ - Offset *int32 - /* - In: query - */ - SortBy *string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewListAllTenantsParams() beforehand. -func (o *ListAllTenantsParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - qs := runtime.Values(r.URL.Query()) - - qLimit, qhkLimit, _ := qs.GetOK("limit") - if err := o.bindLimit(qLimit, qhkLimit, route.Formats); err != nil { - res = append(res, err) - } - - qOffset, qhkOffset, _ := qs.GetOK("offset") - if err := o.bindOffset(qOffset, qhkOffset, route.Formats); err != nil { - res = append(res, err) - } - - qSortBy, qhkSortBy, _ := qs.GetOK("sort_by") - if err := o.bindSortBy(qSortBy, qhkSortBy, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindLimit binds and validates parameter Limit from query. -func (o *ListAllTenantsParams) bindLimit(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: false - // AllowEmptyValue: false - - if raw == "" { // empty values pass all other validations - return nil - } - - value, err := swag.ConvertInt32(raw) - if err != nil { - return errors.InvalidType("limit", "query", "int32", raw) - } - o.Limit = &value - - return nil -} - -// bindOffset binds and validates parameter Offset from query. -func (o *ListAllTenantsParams) bindOffset(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: false - // AllowEmptyValue: false - - if raw == "" { // empty values pass all other validations - return nil - } - - value, err := swag.ConvertInt32(raw) - if err != nil { - return errors.InvalidType("offset", "query", "int32", raw) - } - o.Offset = &value - - return nil -} - -// bindSortBy binds and validates parameter SortBy from query. -func (o *ListAllTenantsParams) bindSortBy(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: false - // AllowEmptyValue: false - - if raw == "" { // empty values pass all other validations - return nil - } - o.SortBy = &raw - - return nil -} diff --git a/api/operations/operator_api/list_all_tenants_responses.go b/api/operations/operator_api/list_all_tenants_responses.go deleted file mode 100644 index 4a166bf05d0..00000000000 --- a/api/operations/operator_api/list_all_tenants_responses.go +++ /dev/null @@ -1,135 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// ListAllTenantsOKCode is the HTTP code returned for type ListAllTenantsOK -const ListAllTenantsOKCode int = 200 - -/* -ListAllTenantsOK A successful response. - -swagger:response listAllTenantsOK -*/ -type ListAllTenantsOK struct { - - /* - In: Body - */ - Payload *models.ListTenantsResponse `json:"body,omitempty"` -} - -// NewListAllTenantsOK creates ListAllTenantsOK with default headers values -func NewListAllTenantsOK() *ListAllTenantsOK { - - return &ListAllTenantsOK{} -} - -// WithPayload adds the payload to the list all tenants o k response -func (o *ListAllTenantsOK) WithPayload(payload *models.ListTenantsResponse) *ListAllTenantsOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the list all tenants o k response -func (o *ListAllTenantsOK) SetPayload(payload *models.ListTenantsResponse) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *ListAllTenantsOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} - -/* -ListAllTenantsDefault Generic error response. - -swagger:response listAllTenantsDefault -*/ -type ListAllTenantsDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewListAllTenantsDefault creates ListAllTenantsDefault with default headers values -func NewListAllTenantsDefault(code int) *ListAllTenantsDefault { - if code <= 0 { - code = 500 - } - - return &ListAllTenantsDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the list all tenants default response -func (o *ListAllTenantsDefault) WithStatusCode(code int) *ListAllTenantsDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the list all tenants default response -func (o *ListAllTenantsDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the list all tenants default response -func (o *ListAllTenantsDefault) WithPayload(payload *models.Error) *ListAllTenantsDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the list all tenants default response -func (o *ListAllTenantsDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *ListAllTenantsDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/list_all_tenants_urlbuilder.go b/api/operations/operator_api/list_all_tenants_urlbuilder.go deleted file mode 100644 index d362bc89b32..00000000000 --- a/api/operations/operator_api/list_all_tenants_urlbuilder.go +++ /dev/null @@ -1,140 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - - "github.com/go-openapi/swag" -) - -// ListAllTenantsURL generates an URL for the list all tenants operation -type ListAllTenantsURL struct { - Limit *int32 - Offset *int32 - SortBy *string - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *ListAllTenantsURL) WithBasePath(bp string) *ListAllTenantsURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *ListAllTenantsURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *ListAllTenantsURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/tenants" - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - qs := make(url.Values) - - var limitQ string - if o.Limit != nil { - limitQ = swag.FormatInt32(*o.Limit) - } - if limitQ != "" { - qs.Set("limit", limitQ) - } - - var offsetQ string - if o.Offset != nil { - offsetQ = swag.FormatInt32(*o.Offset) - } - if offsetQ != "" { - qs.Set("offset", offsetQ) - } - - var sortByQ string - if o.SortBy != nil { - sortByQ = *o.SortBy - } - if sortByQ != "" { - qs.Set("sort_by", sortByQ) - } - - _result.RawQuery = qs.Encode() - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *ListAllTenantsURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *ListAllTenantsURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *ListAllTenantsURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on ListAllTenantsURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on ListAllTenantsURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *ListAllTenantsURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/list_node_labels.go b/api/operations/operator_api/list_node_labels.go deleted file mode 100644 index 66dd64d1fec..00000000000 --- a/api/operations/operator_api/list_node_labels.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// ListNodeLabelsHandlerFunc turns a function with the right signature into a list node labels handler -type ListNodeLabelsHandlerFunc func(ListNodeLabelsParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn ListNodeLabelsHandlerFunc) Handle(params ListNodeLabelsParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// ListNodeLabelsHandler interface for that can handle valid list node labels params -type ListNodeLabelsHandler interface { - Handle(ListNodeLabelsParams, *models.Principal) middleware.Responder -} - -// NewListNodeLabels creates a new http.Handler for the list node labels operation -func NewListNodeLabels(ctx *middleware.Context, handler ListNodeLabelsHandler) *ListNodeLabels { - return &ListNodeLabels{Context: ctx, Handler: handler} -} - -/* - ListNodeLabels swagger:route GET /nodes/labels OperatorAPI listNodeLabels - -List node labels -*/ -type ListNodeLabels struct { - Context *middleware.Context - Handler ListNodeLabelsHandler -} - -func (o *ListNodeLabels) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewListNodeLabelsParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/list_node_labels_parameters.go b/api/operations/operator_api/list_node_labels_parameters.go deleted file mode 100644 index a1730a414e5..00000000000 --- a/api/operations/operator_api/list_node_labels_parameters.go +++ /dev/null @@ -1,63 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime/middleware" -) - -// NewListNodeLabelsParams creates a new ListNodeLabelsParams object -// -// There are no default values defined in the spec. -func NewListNodeLabelsParams() ListNodeLabelsParams { - - return ListNodeLabelsParams{} -} - -// ListNodeLabelsParams contains all the bound params for the list node labels operation -// typically these are obtained from a http.Request -// -// swagger:parameters ListNodeLabels -type ListNodeLabelsParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewListNodeLabelsParams() beforehand. -func (o *ListNodeLabelsParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} diff --git a/api/operations/operator_api/list_node_labels_responses.go b/api/operations/operator_api/list_node_labels_responses.go deleted file mode 100644 index 643c6028f74..00000000000 --- a/api/operations/operator_api/list_node_labels_responses.go +++ /dev/null @@ -1,138 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// ListNodeLabelsOKCode is the HTTP code returned for type ListNodeLabelsOK -const ListNodeLabelsOKCode int = 200 - -/* -ListNodeLabelsOK A successful response. - -swagger:response listNodeLabelsOK -*/ -type ListNodeLabelsOK struct { - - /* - In: Body - */ - Payload models.NodeLabels `json:"body,omitempty"` -} - -// NewListNodeLabelsOK creates ListNodeLabelsOK with default headers values -func NewListNodeLabelsOK() *ListNodeLabelsOK { - - return &ListNodeLabelsOK{} -} - -// WithPayload adds the payload to the list node labels o k response -func (o *ListNodeLabelsOK) WithPayload(payload models.NodeLabels) *ListNodeLabelsOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the list node labels o k response -func (o *ListNodeLabelsOK) SetPayload(payload models.NodeLabels) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *ListNodeLabelsOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - payload := o.Payload - if payload == nil { - // return empty map - payload = models.NodeLabels{} - } - - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } -} - -/* -ListNodeLabelsDefault Generic error response. - -swagger:response listNodeLabelsDefault -*/ -type ListNodeLabelsDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewListNodeLabelsDefault creates ListNodeLabelsDefault with default headers values -func NewListNodeLabelsDefault(code int) *ListNodeLabelsDefault { - if code <= 0 { - code = 500 - } - - return &ListNodeLabelsDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the list node labels default response -func (o *ListNodeLabelsDefault) WithStatusCode(code int) *ListNodeLabelsDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the list node labels default response -func (o *ListNodeLabelsDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the list node labels default response -func (o *ListNodeLabelsDefault) WithPayload(payload *models.Error) *ListNodeLabelsDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the list node labels default response -func (o *ListNodeLabelsDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *ListNodeLabelsDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/list_node_labels_urlbuilder.go b/api/operations/operator_api/list_node_labels_urlbuilder.go deleted file mode 100644 index 3e302a7a3c1..00000000000 --- a/api/operations/operator_api/list_node_labels_urlbuilder.go +++ /dev/null @@ -1,104 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" -) - -// ListNodeLabelsURL generates an URL for the list node labels operation -type ListNodeLabelsURL struct { - _basePath string -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *ListNodeLabelsURL) WithBasePath(bp string) *ListNodeLabelsURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *ListNodeLabelsURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *ListNodeLabelsURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/nodes/labels" - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *ListNodeLabelsURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *ListNodeLabelsURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *ListNodeLabelsURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on ListNodeLabelsURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on ListNodeLabelsURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *ListNodeLabelsURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/list_p_v_cs.go b/api/operations/operator_api/list_p_v_cs.go deleted file mode 100644 index 8069c47ba1f..00000000000 --- a/api/operations/operator_api/list_p_v_cs.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// ListPVCsHandlerFunc turns a function with the right signature into a list p v cs handler -type ListPVCsHandlerFunc func(ListPVCsParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn ListPVCsHandlerFunc) Handle(params ListPVCsParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// ListPVCsHandler interface for that can handle valid list p v cs params -type ListPVCsHandler interface { - Handle(ListPVCsParams, *models.Principal) middleware.Responder -} - -// NewListPVCs creates a new http.Handler for the list p v cs operation -func NewListPVCs(ctx *middleware.Context, handler ListPVCsHandler) *ListPVCs { - return &ListPVCs{Context: ctx, Handler: handler} -} - -/* - ListPVCs swagger:route GET /list-pvcs OperatorAPI listPVCs - -List all PVCs from namespaces that the user has access to -*/ -type ListPVCs struct { - Context *middleware.Context - Handler ListPVCsHandler -} - -func (o *ListPVCs) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewListPVCsParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/list_p_v_cs_for_tenant.go b/api/operations/operator_api/list_p_v_cs_for_tenant.go deleted file mode 100644 index 0107bd98a17..00000000000 --- a/api/operations/operator_api/list_p_v_cs_for_tenant.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// ListPVCsForTenantHandlerFunc turns a function with the right signature into a list p v cs for tenant handler -type ListPVCsForTenantHandlerFunc func(ListPVCsForTenantParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn ListPVCsForTenantHandlerFunc) Handle(params ListPVCsForTenantParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// ListPVCsForTenantHandler interface for that can handle valid list p v cs for tenant params -type ListPVCsForTenantHandler interface { - Handle(ListPVCsForTenantParams, *models.Principal) middleware.Responder -} - -// NewListPVCsForTenant creates a new http.Handler for the list p v cs for tenant operation -func NewListPVCsForTenant(ctx *middleware.Context, handler ListPVCsForTenantHandler) *ListPVCsForTenant { - return &ListPVCsForTenant{Context: ctx, Handler: handler} -} - -/* - ListPVCsForTenant swagger:route GET /namespaces/{namespace}/tenants/{tenant}/pvcs OperatorAPI listPVCsForTenant - -List all PVCs from given Tenant -*/ -type ListPVCsForTenant struct { - Context *middleware.Context - Handler ListPVCsForTenantHandler -} - -func (o *ListPVCsForTenant) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewListPVCsForTenantParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/list_p_v_cs_for_tenant_parameters.go b/api/operations/operator_api/list_p_v_cs_for_tenant_parameters.go deleted file mode 100644 index 3ec9a1a9e1c..00000000000 --- a/api/operations/operator_api/list_p_v_cs_for_tenant_parameters.go +++ /dev/null @@ -1,112 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" -) - -// NewListPVCsForTenantParams creates a new ListPVCsForTenantParams object -// -// There are no default values defined in the spec. -func NewListPVCsForTenantParams() ListPVCsForTenantParams { - - return ListPVCsForTenantParams{} -} - -// ListPVCsForTenantParams contains all the bound params for the list p v cs for tenant operation -// typically these are obtained from a http.Request -// -// swagger:parameters ListPVCsForTenant -type ListPVCsForTenantParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: path - */ - Namespace string - /* - Required: true - In: path - */ - Tenant string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewListPVCsForTenantParams() beforehand. -func (o *ListPVCsForTenantParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - rNamespace, rhkNamespace, _ := route.Params.GetOK("namespace") - if err := o.bindNamespace(rNamespace, rhkNamespace, route.Formats); err != nil { - res = append(res, err) - } - - rTenant, rhkTenant, _ := route.Params.GetOK("tenant") - if err := o.bindTenant(rTenant, rhkTenant, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindNamespace binds and validates parameter Namespace from path. -func (o *ListPVCsForTenantParams) bindNamespace(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Namespace = raw - - return nil -} - -// bindTenant binds and validates parameter Tenant from path. -func (o *ListPVCsForTenantParams) bindTenant(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Tenant = raw - - return nil -} diff --git a/api/operations/operator_api/list_p_v_cs_for_tenant_responses.go b/api/operations/operator_api/list_p_v_cs_for_tenant_responses.go deleted file mode 100644 index ee3259e6fef..00000000000 --- a/api/operations/operator_api/list_p_v_cs_for_tenant_responses.go +++ /dev/null @@ -1,135 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// ListPVCsForTenantOKCode is the HTTP code returned for type ListPVCsForTenantOK -const ListPVCsForTenantOKCode int = 200 - -/* -ListPVCsForTenantOK A successful response. - -swagger:response listPVCsForTenantOK -*/ -type ListPVCsForTenantOK struct { - - /* - In: Body - */ - Payload *models.ListPVCsResponse `json:"body,omitempty"` -} - -// NewListPVCsForTenantOK creates ListPVCsForTenantOK with default headers values -func NewListPVCsForTenantOK() *ListPVCsForTenantOK { - - return &ListPVCsForTenantOK{} -} - -// WithPayload adds the payload to the list p v cs for tenant o k response -func (o *ListPVCsForTenantOK) WithPayload(payload *models.ListPVCsResponse) *ListPVCsForTenantOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the list p v cs for tenant o k response -func (o *ListPVCsForTenantOK) SetPayload(payload *models.ListPVCsResponse) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *ListPVCsForTenantOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} - -/* -ListPVCsForTenantDefault Generic error response. - -swagger:response listPVCsForTenantDefault -*/ -type ListPVCsForTenantDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewListPVCsForTenantDefault creates ListPVCsForTenantDefault with default headers values -func NewListPVCsForTenantDefault(code int) *ListPVCsForTenantDefault { - if code <= 0 { - code = 500 - } - - return &ListPVCsForTenantDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the list p v cs for tenant default response -func (o *ListPVCsForTenantDefault) WithStatusCode(code int) *ListPVCsForTenantDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the list p v cs for tenant default response -func (o *ListPVCsForTenantDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the list p v cs for tenant default response -func (o *ListPVCsForTenantDefault) WithPayload(payload *models.Error) *ListPVCsForTenantDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the list p v cs for tenant default response -func (o *ListPVCsForTenantDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *ListPVCsForTenantDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/list_p_v_cs_for_tenant_urlbuilder.go b/api/operations/operator_api/list_p_v_cs_for_tenant_urlbuilder.go deleted file mode 100644 index d9e777616e2..00000000000 --- a/api/operations/operator_api/list_p_v_cs_for_tenant_urlbuilder.go +++ /dev/null @@ -1,124 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" -) - -// ListPVCsForTenantURL generates an URL for the list p v cs for tenant operation -type ListPVCsForTenantURL struct { - Namespace string - Tenant string - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *ListPVCsForTenantURL) WithBasePath(bp string) *ListPVCsForTenantURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *ListPVCsForTenantURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *ListPVCsForTenantURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/namespaces/{namespace}/tenants/{tenant}/pvcs" - - namespace := o.Namespace - if namespace != "" { - _path = strings.Replace(_path, "{namespace}", namespace, -1) - } else { - return nil, errors.New("namespace is required on ListPVCsForTenantURL") - } - - tenant := o.Tenant - if tenant != "" { - _path = strings.Replace(_path, "{tenant}", tenant, -1) - } else { - return nil, errors.New("tenant is required on ListPVCsForTenantURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *ListPVCsForTenantURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *ListPVCsForTenantURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *ListPVCsForTenantURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on ListPVCsForTenantURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on ListPVCsForTenantURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *ListPVCsForTenantURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/list_p_v_cs_parameters.go b/api/operations/operator_api/list_p_v_cs_parameters.go deleted file mode 100644 index 8abd2d5dd7f..00000000000 --- a/api/operations/operator_api/list_p_v_cs_parameters.go +++ /dev/null @@ -1,63 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime/middleware" -) - -// NewListPVCsParams creates a new ListPVCsParams object -// -// There are no default values defined in the spec. -func NewListPVCsParams() ListPVCsParams { - - return ListPVCsParams{} -} - -// ListPVCsParams contains all the bound params for the list p v cs operation -// typically these are obtained from a http.Request -// -// swagger:parameters ListPVCs -type ListPVCsParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewListPVCsParams() beforehand. -func (o *ListPVCsParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} diff --git a/api/operations/operator_api/list_p_v_cs_responses.go b/api/operations/operator_api/list_p_v_cs_responses.go deleted file mode 100644 index 55499eec863..00000000000 --- a/api/operations/operator_api/list_p_v_cs_responses.go +++ /dev/null @@ -1,135 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// ListPVCsOKCode is the HTTP code returned for type ListPVCsOK -const ListPVCsOKCode int = 200 - -/* -ListPVCsOK A successful response. - -swagger:response listPVCsOK -*/ -type ListPVCsOK struct { - - /* - In: Body - */ - Payload *models.ListPVCsResponse `json:"body,omitempty"` -} - -// NewListPVCsOK creates ListPVCsOK with default headers values -func NewListPVCsOK() *ListPVCsOK { - - return &ListPVCsOK{} -} - -// WithPayload adds the payload to the list p v cs o k response -func (o *ListPVCsOK) WithPayload(payload *models.ListPVCsResponse) *ListPVCsOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the list p v cs o k response -func (o *ListPVCsOK) SetPayload(payload *models.ListPVCsResponse) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *ListPVCsOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} - -/* -ListPVCsDefault Generic error response. - -swagger:response listPVCsDefault -*/ -type ListPVCsDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewListPVCsDefault creates ListPVCsDefault with default headers values -func NewListPVCsDefault(code int) *ListPVCsDefault { - if code <= 0 { - code = 500 - } - - return &ListPVCsDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the list p v cs default response -func (o *ListPVCsDefault) WithStatusCode(code int) *ListPVCsDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the list p v cs default response -func (o *ListPVCsDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the list p v cs default response -func (o *ListPVCsDefault) WithPayload(payload *models.Error) *ListPVCsDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the list p v cs default response -func (o *ListPVCsDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *ListPVCsDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/list_p_v_cs_urlbuilder.go b/api/operations/operator_api/list_p_v_cs_urlbuilder.go deleted file mode 100644 index b8fa9833f2a..00000000000 --- a/api/operations/operator_api/list_p_v_cs_urlbuilder.go +++ /dev/null @@ -1,104 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" -) - -// ListPVCsURL generates an URL for the list p v cs operation -type ListPVCsURL struct { - _basePath string -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *ListPVCsURL) WithBasePath(bp string) *ListPVCsURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *ListPVCsURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *ListPVCsURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/list-pvcs" - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *ListPVCsURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *ListPVCsURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *ListPVCsURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on ListPVCsURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on ListPVCsURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *ListPVCsURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/list_tenant_certificate_signing_request.go b/api/operations/operator_api/list_tenant_certificate_signing_request.go deleted file mode 100644 index 008979485a5..00000000000 --- a/api/operations/operator_api/list_tenant_certificate_signing_request.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// ListTenantCertificateSigningRequestHandlerFunc turns a function with the right signature into a list tenant certificate signing request handler -type ListTenantCertificateSigningRequestHandlerFunc func(ListTenantCertificateSigningRequestParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn ListTenantCertificateSigningRequestHandlerFunc) Handle(params ListTenantCertificateSigningRequestParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// ListTenantCertificateSigningRequestHandler interface for that can handle valid list tenant certificate signing request params -type ListTenantCertificateSigningRequestHandler interface { - Handle(ListTenantCertificateSigningRequestParams, *models.Principal) middleware.Responder -} - -// NewListTenantCertificateSigningRequest creates a new http.Handler for the list tenant certificate signing request operation -func NewListTenantCertificateSigningRequest(ctx *middleware.Context, handler ListTenantCertificateSigningRequestHandler) *ListTenantCertificateSigningRequest { - return &ListTenantCertificateSigningRequest{Context: ctx, Handler: handler} -} - -/* - ListTenantCertificateSigningRequest swagger:route GET /namespaces/{namespace}/tenants/{tenant}/csr OperatorAPI listTenantCertificateSigningRequest - -List Tenant Certificate Signing Request -*/ -type ListTenantCertificateSigningRequest struct { - Context *middleware.Context - Handler ListTenantCertificateSigningRequestHandler -} - -func (o *ListTenantCertificateSigningRequest) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewListTenantCertificateSigningRequestParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/list_tenant_certificate_signing_request_parameters.go b/api/operations/operator_api/list_tenant_certificate_signing_request_parameters.go deleted file mode 100644 index 6f4c74dd69c..00000000000 --- a/api/operations/operator_api/list_tenant_certificate_signing_request_parameters.go +++ /dev/null @@ -1,112 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" -) - -// NewListTenantCertificateSigningRequestParams creates a new ListTenantCertificateSigningRequestParams object -// -// There are no default values defined in the spec. -func NewListTenantCertificateSigningRequestParams() ListTenantCertificateSigningRequestParams { - - return ListTenantCertificateSigningRequestParams{} -} - -// ListTenantCertificateSigningRequestParams contains all the bound params for the list tenant certificate signing request operation -// typically these are obtained from a http.Request -// -// swagger:parameters ListTenantCertificateSigningRequest -type ListTenantCertificateSigningRequestParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: path - */ - Namespace string - /* - Required: true - In: path - */ - Tenant string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewListTenantCertificateSigningRequestParams() beforehand. -func (o *ListTenantCertificateSigningRequestParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - rNamespace, rhkNamespace, _ := route.Params.GetOK("namespace") - if err := o.bindNamespace(rNamespace, rhkNamespace, route.Formats); err != nil { - res = append(res, err) - } - - rTenant, rhkTenant, _ := route.Params.GetOK("tenant") - if err := o.bindTenant(rTenant, rhkTenant, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindNamespace binds and validates parameter Namespace from path. -func (o *ListTenantCertificateSigningRequestParams) bindNamespace(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Namespace = raw - - return nil -} - -// bindTenant binds and validates parameter Tenant from path. -func (o *ListTenantCertificateSigningRequestParams) bindTenant(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Tenant = raw - - return nil -} diff --git a/api/operations/operator_api/list_tenant_certificate_signing_request_responses.go b/api/operations/operator_api/list_tenant_certificate_signing_request_responses.go deleted file mode 100644 index 9cf06a48dc3..00000000000 --- a/api/operations/operator_api/list_tenant_certificate_signing_request_responses.go +++ /dev/null @@ -1,135 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// ListTenantCertificateSigningRequestOKCode is the HTTP code returned for type ListTenantCertificateSigningRequestOK -const ListTenantCertificateSigningRequestOKCode int = 200 - -/* -ListTenantCertificateSigningRequestOK A successful response. - -swagger:response listTenantCertificateSigningRequestOK -*/ -type ListTenantCertificateSigningRequestOK struct { - - /* - In: Body - */ - Payload *models.CsrElements `json:"body,omitempty"` -} - -// NewListTenantCertificateSigningRequestOK creates ListTenantCertificateSigningRequestOK with default headers values -func NewListTenantCertificateSigningRequestOK() *ListTenantCertificateSigningRequestOK { - - return &ListTenantCertificateSigningRequestOK{} -} - -// WithPayload adds the payload to the list tenant certificate signing request o k response -func (o *ListTenantCertificateSigningRequestOK) WithPayload(payload *models.CsrElements) *ListTenantCertificateSigningRequestOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the list tenant certificate signing request o k response -func (o *ListTenantCertificateSigningRequestOK) SetPayload(payload *models.CsrElements) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *ListTenantCertificateSigningRequestOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} - -/* -ListTenantCertificateSigningRequestDefault Generic error response. - -swagger:response listTenantCertificateSigningRequestDefault -*/ -type ListTenantCertificateSigningRequestDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewListTenantCertificateSigningRequestDefault creates ListTenantCertificateSigningRequestDefault with default headers values -func NewListTenantCertificateSigningRequestDefault(code int) *ListTenantCertificateSigningRequestDefault { - if code <= 0 { - code = 500 - } - - return &ListTenantCertificateSigningRequestDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the list tenant certificate signing request default response -func (o *ListTenantCertificateSigningRequestDefault) WithStatusCode(code int) *ListTenantCertificateSigningRequestDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the list tenant certificate signing request default response -func (o *ListTenantCertificateSigningRequestDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the list tenant certificate signing request default response -func (o *ListTenantCertificateSigningRequestDefault) WithPayload(payload *models.Error) *ListTenantCertificateSigningRequestDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the list tenant certificate signing request default response -func (o *ListTenantCertificateSigningRequestDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *ListTenantCertificateSigningRequestDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/list_tenant_certificate_signing_request_urlbuilder.go b/api/operations/operator_api/list_tenant_certificate_signing_request_urlbuilder.go deleted file mode 100644 index 57d902878d3..00000000000 --- a/api/operations/operator_api/list_tenant_certificate_signing_request_urlbuilder.go +++ /dev/null @@ -1,124 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" -) - -// ListTenantCertificateSigningRequestURL generates an URL for the list tenant certificate signing request operation -type ListTenantCertificateSigningRequestURL struct { - Namespace string - Tenant string - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *ListTenantCertificateSigningRequestURL) WithBasePath(bp string) *ListTenantCertificateSigningRequestURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *ListTenantCertificateSigningRequestURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *ListTenantCertificateSigningRequestURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/namespaces/{namespace}/tenants/{tenant}/csr" - - namespace := o.Namespace - if namespace != "" { - _path = strings.Replace(_path, "{namespace}", namespace, -1) - } else { - return nil, errors.New("namespace is required on ListTenantCertificateSigningRequestURL") - } - - tenant := o.Tenant - if tenant != "" { - _path = strings.Replace(_path, "{tenant}", tenant, -1) - } else { - return nil, errors.New("tenant is required on ListTenantCertificateSigningRequestURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *ListTenantCertificateSigningRequestURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *ListTenantCertificateSigningRequestURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *ListTenantCertificateSigningRequestURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on ListTenantCertificateSigningRequestURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on ListTenantCertificateSigningRequestURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *ListTenantCertificateSigningRequestURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/list_tenants.go b/api/operations/operator_api/list_tenants.go deleted file mode 100644 index 8f1737aab08..00000000000 --- a/api/operations/operator_api/list_tenants.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// ListTenantsHandlerFunc turns a function with the right signature into a list tenants handler -type ListTenantsHandlerFunc func(ListTenantsParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn ListTenantsHandlerFunc) Handle(params ListTenantsParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// ListTenantsHandler interface for that can handle valid list tenants params -type ListTenantsHandler interface { - Handle(ListTenantsParams, *models.Principal) middleware.Responder -} - -// NewListTenants creates a new http.Handler for the list tenants operation -func NewListTenants(ctx *middleware.Context, handler ListTenantsHandler) *ListTenants { - return &ListTenants{Context: ctx, Handler: handler} -} - -/* - ListTenants swagger:route GET /namespaces/{namespace}/tenants OperatorAPI listTenants - -List Tenants by Namespace -*/ -type ListTenants struct { - Context *middleware.Context - Handler ListTenantsHandler -} - -func (o *ListTenants) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewListTenantsParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/list_tenants_parameters.go b/api/operations/operator_api/list_tenants_parameters.go deleted file mode 100644 index 184e9843f6c..00000000000 --- a/api/operations/operator_api/list_tenants_parameters.go +++ /dev/null @@ -1,183 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// NewListTenantsParams creates a new ListTenantsParams object -// -// There are no default values defined in the spec. -func NewListTenantsParams() ListTenantsParams { - - return ListTenantsParams{} -} - -// ListTenantsParams contains all the bound params for the list tenants operation -// typically these are obtained from a http.Request -// -// swagger:parameters ListTenants -type ListTenantsParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - In: query - */ - Limit *int32 - /* - Required: true - In: path - */ - Namespace string - /* - In: query - */ - Offset *int32 - /* - In: query - */ - SortBy *string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewListTenantsParams() beforehand. -func (o *ListTenantsParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - qs := runtime.Values(r.URL.Query()) - - qLimit, qhkLimit, _ := qs.GetOK("limit") - if err := o.bindLimit(qLimit, qhkLimit, route.Formats); err != nil { - res = append(res, err) - } - - rNamespace, rhkNamespace, _ := route.Params.GetOK("namespace") - if err := o.bindNamespace(rNamespace, rhkNamespace, route.Formats); err != nil { - res = append(res, err) - } - - qOffset, qhkOffset, _ := qs.GetOK("offset") - if err := o.bindOffset(qOffset, qhkOffset, route.Formats); err != nil { - res = append(res, err) - } - - qSortBy, qhkSortBy, _ := qs.GetOK("sort_by") - if err := o.bindSortBy(qSortBy, qhkSortBy, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindLimit binds and validates parameter Limit from query. -func (o *ListTenantsParams) bindLimit(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: false - // AllowEmptyValue: false - - if raw == "" { // empty values pass all other validations - return nil - } - - value, err := swag.ConvertInt32(raw) - if err != nil { - return errors.InvalidType("limit", "query", "int32", raw) - } - o.Limit = &value - - return nil -} - -// bindNamespace binds and validates parameter Namespace from path. -func (o *ListTenantsParams) bindNamespace(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Namespace = raw - - return nil -} - -// bindOffset binds and validates parameter Offset from query. -func (o *ListTenantsParams) bindOffset(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: false - // AllowEmptyValue: false - - if raw == "" { // empty values pass all other validations - return nil - } - - value, err := swag.ConvertInt32(raw) - if err != nil { - return errors.InvalidType("offset", "query", "int32", raw) - } - o.Offset = &value - - return nil -} - -// bindSortBy binds and validates parameter SortBy from query. -func (o *ListTenantsParams) bindSortBy(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: false - // AllowEmptyValue: false - - if raw == "" { // empty values pass all other validations - return nil - } - o.SortBy = &raw - - return nil -} diff --git a/api/operations/operator_api/list_tenants_responses.go b/api/operations/operator_api/list_tenants_responses.go deleted file mode 100644 index 9a991b6be36..00000000000 --- a/api/operations/operator_api/list_tenants_responses.go +++ /dev/null @@ -1,135 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// ListTenantsOKCode is the HTTP code returned for type ListTenantsOK -const ListTenantsOKCode int = 200 - -/* -ListTenantsOK A successful response. - -swagger:response listTenantsOK -*/ -type ListTenantsOK struct { - - /* - In: Body - */ - Payload *models.ListTenantsResponse `json:"body,omitempty"` -} - -// NewListTenantsOK creates ListTenantsOK with default headers values -func NewListTenantsOK() *ListTenantsOK { - - return &ListTenantsOK{} -} - -// WithPayload adds the payload to the list tenants o k response -func (o *ListTenantsOK) WithPayload(payload *models.ListTenantsResponse) *ListTenantsOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the list tenants o k response -func (o *ListTenantsOK) SetPayload(payload *models.ListTenantsResponse) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *ListTenantsOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} - -/* -ListTenantsDefault Generic error response. - -swagger:response listTenantsDefault -*/ -type ListTenantsDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewListTenantsDefault creates ListTenantsDefault with default headers values -func NewListTenantsDefault(code int) *ListTenantsDefault { - if code <= 0 { - code = 500 - } - - return &ListTenantsDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the list tenants default response -func (o *ListTenantsDefault) WithStatusCode(code int) *ListTenantsDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the list tenants default response -func (o *ListTenantsDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the list tenants default response -func (o *ListTenantsDefault) WithPayload(payload *models.Error) *ListTenantsDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the list tenants default response -func (o *ListTenantsDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *ListTenantsDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/list_tenants_urlbuilder.go b/api/operations/operator_api/list_tenants_urlbuilder.go deleted file mode 100644 index e6c0a2a4670..00000000000 --- a/api/operations/operator_api/list_tenants_urlbuilder.go +++ /dev/null @@ -1,150 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" - - "github.com/go-openapi/swag" -) - -// ListTenantsURL generates an URL for the list tenants operation -type ListTenantsURL struct { - Namespace string - - Limit *int32 - Offset *int32 - SortBy *string - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *ListTenantsURL) WithBasePath(bp string) *ListTenantsURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *ListTenantsURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *ListTenantsURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/namespaces/{namespace}/tenants" - - namespace := o.Namespace - if namespace != "" { - _path = strings.Replace(_path, "{namespace}", namespace, -1) - } else { - return nil, errors.New("namespace is required on ListTenantsURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - qs := make(url.Values) - - var limitQ string - if o.Limit != nil { - limitQ = swag.FormatInt32(*o.Limit) - } - if limitQ != "" { - qs.Set("limit", limitQ) - } - - var offsetQ string - if o.Offset != nil { - offsetQ = swag.FormatInt32(*o.Offset) - } - if offsetQ != "" { - qs.Set("offset", offsetQ) - } - - var sortByQ string - if o.SortBy != nil { - sortByQ = *o.SortBy - } - if sortByQ != "" { - qs.Set("sort_by", sortByQ) - } - - _result.RawQuery = qs.Encode() - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *ListTenantsURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *ListTenantsURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *ListTenantsURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on ListTenantsURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on ListTenantsURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *ListTenantsURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/operator_subnet_api_key.go b/api/operations/operator_api/operator_subnet_api_key.go deleted file mode 100644 index ad054bb07d0..00000000000 --- a/api/operations/operator_api/operator_subnet_api_key.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// OperatorSubnetAPIKeyHandlerFunc turns a function with the right signature into a operator subnet Api key handler -type OperatorSubnetAPIKeyHandlerFunc func(OperatorSubnetAPIKeyParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn OperatorSubnetAPIKeyHandlerFunc) Handle(params OperatorSubnetAPIKeyParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// OperatorSubnetAPIKeyHandler interface for that can handle valid operator subnet Api key params -type OperatorSubnetAPIKeyHandler interface { - Handle(OperatorSubnetAPIKeyParams, *models.Principal) middleware.Responder -} - -// NewOperatorSubnetAPIKey creates a new http.Handler for the operator subnet Api key operation -func NewOperatorSubnetAPIKey(ctx *middleware.Context, handler OperatorSubnetAPIKeyHandler) *OperatorSubnetAPIKey { - return &OperatorSubnetAPIKey{Context: ctx, Handler: handler} -} - -/* - OperatorSubnetAPIKey swagger:route GET /subnet/apikey OperatorAPI operatorSubnetApiKey - -Subnet api key -*/ -type OperatorSubnetAPIKey struct { - Context *middleware.Context - Handler OperatorSubnetAPIKeyHandler -} - -func (o *OperatorSubnetAPIKey) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewOperatorSubnetAPIKeyParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/operator_subnet_api_key_info.go b/api/operations/operator_api/operator_subnet_api_key_info.go deleted file mode 100644 index cb5ac54268b..00000000000 --- a/api/operations/operator_api/operator_subnet_api_key_info.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// OperatorSubnetAPIKeyInfoHandlerFunc turns a function with the right signature into a operator subnet API key info handler -type OperatorSubnetAPIKeyInfoHandlerFunc func(OperatorSubnetAPIKeyInfoParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn OperatorSubnetAPIKeyInfoHandlerFunc) Handle(params OperatorSubnetAPIKeyInfoParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// OperatorSubnetAPIKeyInfoHandler interface for that can handle valid operator subnet API key info params -type OperatorSubnetAPIKeyInfoHandler interface { - Handle(OperatorSubnetAPIKeyInfoParams, *models.Principal) middleware.Responder -} - -// NewOperatorSubnetAPIKeyInfo creates a new http.Handler for the operator subnet API key info operation -func NewOperatorSubnetAPIKeyInfo(ctx *middleware.Context, handler OperatorSubnetAPIKeyInfoHandler) *OperatorSubnetAPIKeyInfo { - return &OperatorSubnetAPIKeyInfo{Context: ctx, Handler: handler} -} - -/* - OperatorSubnetAPIKeyInfo swagger:route GET /subnet/apikey/info OperatorAPI operatorSubnetApiKeyInfo - -Subnet API key info -*/ -type OperatorSubnetAPIKeyInfo struct { - Context *middleware.Context - Handler OperatorSubnetAPIKeyInfoHandler -} - -func (o *OperatorSubnetAPIKeyInfo) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewOperatorSubnetAPIKeyInfoParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/operator_subnet_api_key_info_parameters.go b/api/operations/operator_api/operator_subnet_api_key_info_parameters.go deleted file mode 100644 index c6b5dd4f970..00000000000 --- a/api/operations/operator_api/operator_subnet_api_key_info_parameters.go +++ /dev/null @@ -1,63 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime/middleware" -) - -// NewOperatorSubnetAPIKeyInfoParams creates a new OperatorSubnetAPIKeyInfoParams object -// -// There are no default values defined in the spec. -func NewOperatorSubnetAPIKeyInfoParams() OperatorSubnetAPIKeyInfoParams { - - return OperatorSubnetAPIKeyInfoParams{} -} - -// OperatorSubnetAPIKeyInfoParams contains all the bound params for the operator subnet API key info operation -// typically these are obtained from a http.Request -// -// swagger:parameters OperatorSubnetAPIKeyInfo -type OperatorSubnetAPIKeyInfoParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewOperatorSubnetAPIKeyInfoParams() beforehand. -func (o *OperatorSubnetAPIKeyInfoParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} diff --git a/api/operations/operator_api/operator_subnet_api_key_info_responses.go b/api/operations/operator_api/operator_subnet_api_key_info_responses.go deleted file mode 100644 index c399eeb5e20..00000000000 --- a/api/operations/operator_api/operator_subnet_api_key_info_responses.go +++ /dev/null @@ -1,135 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// OperatorSubnetAPIKeyInfoOKCode is the HTTP code returned for type OperatorSubnetAPIKeyInfoOK -const OperatorSubnetAPIKeyInfoOKCode int = 200 - -/* -OperatorSubnetAPIKeyInfoOK A successful response. - -swagger:response operatorSubnetApiKeyInfoOK -*/ -type OperatorSubnetAPIKeyInfoOK struct { - - /* - In: Body - */ - Payload *models.OperatorSubnetRegisterAPIKeyResponse `json:"body,omitempty"` -} - -// NewOperatorSubnetAPIKeyInfoOK creates OperatorSubnetAPIKeyInfoOK with default headers values -func NewOperatorSubnetAPIKeyInfoOK() *OperatorSubnetAPIKeyInfoOK { - - return &OperatorSubnetAPIKeyInfoOK{} -} - -// WithPayload adds the payload to the operator subnet Api key info o k response -func (o *OperatorSubnetAPIKeyInfoOK) WithPayload(payload *models.OperatorSubnetRegisterAPIKeyResponse) *OperatorSubnetAPIKeyInfoOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the operator subnet Api key info o k response -func (o *OperatorSubnetAPIKeyInfoOK) SetPayload(payload *models.OperatorSubnetRegisterAPIKeyResponse) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *OperatorSubnetAPIKeyInfoOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} - -/* -OperatorSubnetAPIKeyInfoDefault Generic error response. - -swagger:response operatorSubnetApiKeyInfoDefault -*/ -type OperatorSubnetAPIKeyInfoDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewOperatorSubnetAPIKeyInfoDefault creates OperatorSubnetAPIKeyInfoDefault with default headers values -func NewOperatorSubnetAPIKeyInfoDefault(code int) *OperatorSubnetAPIKeyInfoDefault { - if code <= 0 { - code = 500 - } - - return &OperatorSubnetAPIKeyInfoDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the operator subnet API key info default response -func (o *OperatorSubnetAPIKeyInfoDefault) WithStatusCode(code int) *OperatorSubnetAPIKeyInfoDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the operator subnet API key info default response -func (o *OperatorSubnetAPIKeyInfoDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the operator subnet API key info default response -func (o *OperatorSubnetAPIKeyInfoDefault) WithPayload(payload *models.Error) *OperatorSubnetAPIKeyInfoDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the operator subnet API key info default response -func (o *OperatorSubnetAPIKeyInfoDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *OperatorSubnetAPIKeyInfoDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/operator_subnet_api_key_info_urlbuilder.go b/api/operations/operator_api/operator_subnet_api_key_info_urlbuilder.go deleted file mode 100644 index ed76ac44cf0..00000000000 --- a/api/operations/operator_api/operator_subnet_api_key_info_urlbuilder.go +++ /dev/null @@ -1,104 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" -) - -// OperatorSubnetAPIKeyInfoURL generates an URL for the operator subnet API key info operation -type OperatorSubnetAPIKeyInfoURL struct { - _basePath string -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *OperatorSubnetAPIKeyInfoURL) WithBasePath(bp string) *OperatorSubnetAPIKeyInfoURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *OperatorSubnetAPIKeyInfoURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *OperatorSubnetAPIKeyInfoURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/subnet/apikey/info" - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *OperatorSubnetAPIKeyInfoURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *OperatorSubnetAPIKeyInfoURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *OperatorSubnetAPIKeyInfoURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on OperatorSubnetAPIKeyInfoURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on OperatorSubnetAPIKeyInfoURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *OperatorSubnetAPIKeyInfoURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/operator_subnet_api_key_parameters.go b/api/operations/operator_api/operator_subnet_api_key_parameters.go deleted file mode 100644 index 582452dd2e4..00000000000 --- a/api/operations/operator_api/operator_subnet_api_key_parameters.go +++ /dev/null @@ -1,99 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/validate" -) - -// NewOperatorSubnetAPIKeyParams creates a new OperatorSubnetAPIKeyParams object -// -// There are no default values defined in the spec. -func NewOperatorSubnetAPIKeyParams() OperatorSubnetAPIKeyParams { - - return OperatorSubnetAPIKeyParams{} -} - -// OperatorSubnetAPIKeyParams contains all the bound params for the operator subnet Api key operation -// typically these are obtained from a http.Request -// -// swagger:parameters OperatorSubnetApiKey -type OperatorSubnetAPIKeyParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: query - */ - Token string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewOperatorSubnetAPIKeyParams() beforehand. -func (o *OperatorSubnetAPIKeyParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - qs := runtime.Values(r.URL.Query()) - - qToken, qhkToken, _ := qs.GetOK("token") - if err := o.bindToken(qToken, qhkToken, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindToken binds and validates parameter Token from query. -func (o *OperatorSubnetAPIKeyParams) bindToken(rawData []string, hasKey bool, formats strfmt.Registry) error { - if !hasKey { - return errors.Required("token", "query", rawData) - } - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // AllowEmptyValue: false - - if err := validate.RequiredString("token", "query", raw); err != nil { - return err - } - o.Token = raw - - return nil -} diff --git a/api/operations/operator_api/operator_subnet_api_key_responses.go b/api/operations/operator_api/operator_subnet_api_key_responses.go deleted file mode 100644 index 63966cbf497..00000000000 --- a/api/operations/operator_api/operator_subnet_api_key_responses.go +++ /dev/null @@ -1,135 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// OperatorSubnetAPIKeyOKCode is the HTTP code returned for type OperatorSubnetAPIKeyOK -const OperatorSubnetAPIKeyOKCode int = 200 - -/* -OperatorSubnetAPIKeyOK A successful response. - -swagger:response operatorSubnetApiKeyOK -*/ -type OperatorSubnetAPIKeyOK struct { - - /* - In: Body - */ - Payload *models.OperatorSubnetAPIKey `json:"body,omitempty"` -} - -// NewOperatorSubnetAPIKeyOK creates OperatorSubnetAPIKeyOK with default headers values -func NewOperatorSubnetAPIKeyOK() *OperatorSubnetAPIKeyOK { - - return &OperatorSubnetAPIKeyOK{} -} - -// WithPayload adds the payload to the operator subnet Api key o k response -func (o *OperatorSubnetAPIKeyOK) WithPayload(payload *models.OperatorSubnetAPIKey) *OperatorSubnetAPIKeyOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the operator subnet Api key o k response -func (o *OperatorSubnetAPIKeyOK) SetPayload(payload *models.OperatorSubnetAPIKey) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *OperatorSubnetAPIKeyOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} - -/* -OperatorSubnetAPIKeyDefault Generic error response. - -swagger:response operatorSubnetApiKeyDefault -*/ -type OperatorSubnetAPIKeyDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewOperatorSubnetAPIKeyDefault creates OperatorSubnetAPIKeyDefault with default headers values -func NewOperatorSubnetAPIKeyDefault(code int) *OperatorSubnetAPIKeyDefault { - if code <= 0 { - code = 500 - } - - return &OperatorSubnetAPIKeyDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the operator subnet Api key default response -func (o *OperatorSubnetAPIKeyDefault) WithStatusCode(code int) *OperatorSubnetAPIKeyDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the operator subnet Api key default response -func (o *OperatorSubnetAPIKeyDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the operator subnet Api key default response -func (o *OperatorSubnetAPIKeyDefault) WithPayload(payload *models.Error) *OperatorSubnetAPIKeyDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the operator subnet Api key default response -func (o *OperatorSubnetAPIKeyDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *OperatorSubnetAPIKeyDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/operator_subnet_api_key_urlbuilder.go b/api/operations/operator_api/operator_subnet_api_key_urlbuilder.go deleted file mode 100644 index 39be85d808d..00000000000 --- a/api/operations/operator_api/operator_subnet_api_key_urlbuilder.go +++ /dev/null @@ -1,117 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" -) - -// OperatorSubnetAPIKeyURL generates an URL for the operator subnet Api key operation -type OperatorSubnetAPIKeyURL struct { - Token string - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *OperatorSubnetAPIKeyURL) WithBasePath(bp string) *OperatorSubnetAPIKeyURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *OperatorSubnetAPIKeyURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *OperatorSubnetAPIKeyURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/subnet/apikey" - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - qs := make(url.Values) - - tokenQ := o.Token - if tokenQ != "" { - qs.Set("token", tokenQ) - } - - _result.RawQuery = qs.Encode() - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *OperatorSubnetAPIKeyURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *OperatorSubnetAPIKeyURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *OperatorSubnetAPIKeyURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on OperatorSubnetAPIKeyURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on OperatorSubnetAPIKeyURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *OperatorSubnetAPIKeyURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/operator_subnet_login.go b/api/operations/operator_api/operator_subnet_login.go deleted file mode 100644 index 651dc95ce52..00000000000 --- a/api/operations/operator_api/operator_subnet_login.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// OperatorSubnetLoginHandlerFunc turns a function with the right signature into a operator subnet login handler -type OperatorSubnetLoginHandlerFunc func(OperatorSubnetLoginParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn OperatorSubnetLoginHandlerFunc) Handle(params OperatorSubnetLoginParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// OperatorSubnetLoginHandler interface for that can handle valid operator subnet login params -type OperatorSubnetLoginHandler interface { - Handle(OperatorSubnetLoginParams, *models.Principal) middleware.Responder -} - -// NewOperatorSubnetLogin creates a new http.Handler for the operator subnet login operation -func NewOperatorSubnetLogin(ctx *middleware.Context, handler OperatorSubnetLoginHandler) *OperatorSubnetLogin { - return &OperatorSubnetLogin{Context: ctx, Handler: handler} -} - -/* - OperatorSubnetLogin swagger:route POST /subnet/login OperatorAPI operatorSubnetLogin - -Login to subnet -*/ -type OperatorSubnetLogin struct { - Context *middleware.Context - Handler OperatorSubnetLoginHandler -} - -func (o *OperatorSubnetLogin) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewOperatorSubnetLoginParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/operator_subnet_login_m_f_a.go b/api/operations/operator_api/operator_subnet_login_m_f_a.go deleted file mode 100644 index eff8e911cb9..00000000000 --- a/api/operations/operator_api/operator_subnet_login_m_f_a.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// OperatorSubnetLoginMFAHandlerFunc turns a function with the right signature into a operator subnet login m f a handler -type OperatorSubnetLoginMFAHandlerFunc func(OperatorSubnetLoginMFAParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn OperatorSubnetLoginMFAHandlerFunc) Handle(params OperatorSubnetLoginMFAParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// OperatorSubnetLoginMFAHandler interface for that can handle valid operator subnet login m f a params -type OperatorSubnetLoginMFAHandler interface { - Handle(OperatorSubnetLoginMFAParams, *models.Principal) middleware.Responder -} - -// NewOperatorSubnetLoginMFA creates a new http.Handler for the operator subnet login m f a operation -func NewOperatorSubnetLoginMFA(ctx *middleware.Context, handler OperatorSubnetLoginMFAHandler) *OperatorSubnetLoginMFA { - return &OperatorSubnetLoginMFA{Context: ctx, Handler: handler} -} - -/* - OperatorSubnetLoginMFA swagger:route POST /subnet/login/mfa OperatorAPI operatorSubnetLoginMFA - -Login to subnet using mfa -*/ -type OperatorSubnetLoginMFA struct { - Context *middleware.Context - Handler OperatorSubnetLoginMFAHandler -} - -func (o *OperatorSubnetLoginMFA) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewOperatorSubnetLoginMFAParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/operator_subnet_login_m_f_a_parameters.go b/api/operations/operator_api/operator_subnet_login_m_f_a_parameters.go deleted file mode 100644 index 4bc304ee1e3..00000000000 --- a/api/operations/operator_api/operator_subnet_login_m_f_a_parameters.go +++ /dev/null @@ -1,101 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "io" - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/validate" - - "github.com/minio/operator/models" -) - -// NewOperatorSubnetLoginMFAParams creates a new OperatorSubnetLoginMFAParams object -// -// There are no default values defined in the spec. -func NewOperatorSubnetLoginMFAParams() OperatorSubnetLoginMFAParams { - - return OperatorSubnetLoginMFAParams{} -} - -// OperatorSubnetLoginMFAParams contains all the bound params for the operator subnet login m f a operation -// typically these are obtained from a http.Request -// -// swagger:parameters OperatorSubnetLoginMFA -type OperatorSubnetLoginMFAParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: body - */ - Body *models.OperatorSubnetLoginMFARequest -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewOperatorSubnetLoginMFAParams() beforehand. -func (o *OperatorSubnetLoginMFAParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - if runtime.HasBody(r) { - defer r.Body.Close() - var body models.OperatorSubnetLoginMFARequest - if err := route.Consumer.Consume(r.Body, &body); err != nil { - if err == io.EOF { - res = append(res, errors.Required("body", "body", "")) - } else { - res = append(res, errors.NewParseError("body", "body", "", err)) - } - } else { - // validate body object - if err := body.Validate(route.Formats); err != nil { - res = append(res, err) - } - - ctx := validate.WithOperationRequest(r.Context()) - if err := body.ContextValidate(ctx, route.Formats); err != nil { - res = append(res, err) - } - - if len(res) == 0 { - o.Body = &body - } - } - } else { - res = append(res, errors.Required("body", "body", "")) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} diff --git a/api/operations/operator_api/operator_subnet_login_m_f_a_responses.go b/api/operations/operator_api/operator_subnet_login_m_f_a_responses.go deleted file mode 100644 index 2a99d9e38e4..00000000000 --- a/api/operations/operator_api/operator_subnet_login_m_f_a_responses.go +++ /dev/null @@ -1,135 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// OperatorSubnetLoginMFAOKCode is the HTTP code returned for type OperatorSubnetLoginMFAOK -const OperatorSubnetLoginMFAOKCode int = 200 - -/* -OperatorSubnetLoginMFAOK A successful response. - -swagger:response operatorSubnetLoginMFAOK -*/ -type OperatorSubnetLoginMFAOK struct { - - /* - In: Body - */ - Payload *models.OperatorSubnetLoginResponse `json:"body,omitempty"` -} - -// NewOperatorSubnetLoginMFAOK creates OperatorSubnetLoginMFAOK with default headers values -func NewOperatorSubnetLoginMFAOK() *OperatorSubnetLoginMFAOK { - - return &OperatorSubnetLoginMFAOK{} -} - -// WithPayload adds the payload to the operator subnet login m f a o k response -func (o *OperatorSubnetLoginMFAOK) WithPayload(payload *models.OperatorSubnetLoginResponse) *OperatorSubnetLoginMFAOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the operator subnet login m f a o k response -func (o *OperatorSubnetLoginMFAOK) SetPayload(payload *models.OperatorSubnetLoginResponse) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *OperatorSubnetLoginMFAOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} - -/* -OperatorSubnetLoginMFADefault Generic error response. - -swagger:response operatorSubnetLoginMFADefault -*/ -type OperatorSubnetLoginMFADefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewOperatorSubnetLoginMFADefault creates OperatorSubnetLoginMFADefault with default headers values -func NewOperatorSubnetLoginMFADefault(code int) *OperatorSubnetLoginMFADefault { - if code <= 0 { - code = 500 - } - - return &OperatorSubnetLoginMFADefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the operator subnet login m f a default response -func (o *OperatorSubnetLoginMFADefault) WithStatusCode(code int) *OperatorSubnetLoginMFADefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the operator subnet login m f a default response -func (o *OperatorSubnetLoginMFADefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the operator subnet login m f a default response -func (o *OperatorSubnetLoginMFADefault) WithPayload(payload *models.Error) *OperatorSubnetLoginMFADefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the operator subnet login m f a default response -func (o *OperatorSubnetLoginMFADefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *OperatorSubnetLoginMFADefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/operator_subnet_login_m_f_a_urlbuilder.go b/api/operations/operator_api/operator_subnet_login_m_f_a_urlbuilder.go deleted file mode 100644 index ddc88f741ad..00000000000 --- a/api/operations/operator_api/operator_subnet_login_m_f_a_urlbuilder.go +++ /dev/null @@ -1,104 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" -) - -// OperatorSubnetLoginMFAURL generates an URL for the operator subnet login m f a operation -type OperatorSubnetLoginMFAURL struct { - _basePath string -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *OperatorSubnetLoginMFAURL) WithBasePath(bp string) *OperatorSubnetLoginMFAURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *OperatorSubnetLoginMFAURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *OperatorSubnetLoginMFAURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/subnet/login/mfa" - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *OperatorSubnetLoginMFAURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *OperatorSubnetLoginMFAURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *OperatorSubnetLoginMFAURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on OperatorSubnetLoginMFAURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on OperatorSubnetLoginMFAURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *OperatorSubnetLoginMFAURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/operator_subnet_login_parameters.go b/api/operations/operator_api/operator_subnet_login_parameters.go deleted file mode 100644 index 0f3c76f5309..00000000000 --- a/api/operations/operator_api/operator_subnet_login_parameters.go +++ /dev/null @@ -1,101 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "io" - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/validate" - - "github.com/minio/operator/models" -) - -// NewOperatorSubnetLoginParams creates a new OperatorSubnetLoginParams object -// -// There are no default values defined in the spec. -func NewOperatorSubnetLoginParams() OperatorSubnetLoginParams { - - return OperatorSubnetLoginParams{} -} - -// OperatorSubnetLoginParams contains all the bound params for the operator subnet login operation -// typically these are obtained from a http.Request -// -// swagger:parameters OperatorSubnetLogin -type OperatorSubnetLoginParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: body - */ - Body *models.OperatorSubnetLoginRequest -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewOperatorSubnetLoginParams() beforehand. -func (o *OperatorSubnetLoginParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - if runtime.HasBody(r) { - defer r.Body.Close() - var body models.OperatorSubnetLoginRequest - if err := route.Consumer.Consume(r.Body, &body); err != nil { - if err == io.EOF { - res = append(res, errors.Required("body", "body", "")) - } else { - res = append(res, errors.NewParseError("body", "body", "", err)) - } - } else { - // validate body object - if err := body.Validate(route.Formats); err != nil { - res = append(res, err) - } - - ctx := validate.WithOperationRequest(r.Context()) - if err := body.ContextValidate(ctx, route.Formats); err != nil { - res = append(res, err) - } - - if len(res) == 0 { - o.Body = &body - } - } - } else { - res = append(res, errors.Required("body", "body", "")) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} diff --git a/api/operations/operator_api/operator_subnet_login_responses.go b/api/operations/operator_api/operator_subnet_login_responses.go deleted file mode 100644 index 8511ff2f746..00000000000 --- a/api/operations/operator_api/operator_subnet_login_responses.go +++ /dev/null @@ -1,135 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// OperatorSubnetLoginOKCode is the HTTP code returned for type OperatorSubnetLoginOK -const OperatorSubnetLoginOKCode int = 200 - -/* -OperatorSubnetLoginOK A successful response. - -swagger:response operatorSubnetLoginOK -*/ -type OperatorSubnetLoginOK struct { - - /* - In: Body - */ - Payload *models.OperatorSubnetLoginResponse `json:"body,omitempty"` -} - -// NewOperatorSubnetLoginOK creates OperatorSubnetLoginOK with default headers values -func NewOperatorSubnetLoginOK() *OperatorSubnetLoginOK { - - return &OperatorSubnetLoginOK{} -} - -// WithPayload adds the payload to the operator subnet login o k response -func (o *OperatorSubnetLoginOK) WithPayload(payload *models.OperatorSubnetLoginResponse) *OperatorSubnetLoginOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the operator subnet login o k response -func (o *OperatorSubnetLoginOK) SetPayload(payload *models.OperatorSubnetLoginResponse) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *OperatorSubnetLoginOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} - -/* -OperatorSubnetLoginDefault Generic error response. - -swagger:response operatorSubnetLoginDefault -*/ -type OperatorSubnetLoginDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewOperatorSubnetLoginDefault creates OperatorSubnetLoginDefault with default headers values -func NewOperatorSubnetLoginDefault(code int) *OperatorSubnetLoginDefault { - if code <= 0 { - code = 500 - } - - return &OperatorSubnetLoginDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the operator subnet login default response -func (o *OperatorSubnetLoginDefault) WithStatusCode(code int) *OperatorSubnetLoginDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the operator subnet login default response -func (o *OperatorSubnetLoginDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the operator subnet login default response -func (o *OperatorSubnetLoginDefault) WithPayload(payload *models.Error) *OperatorSubnetLoginDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the operator subnet login default response -func (o *OperatorSubnetLoginDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *OperatorSubnetLoginDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/operator_subnet_login_urlbuilder.go b/api/operations/operator_api/operator_subnet_login_urlbuilder.go deleted file mode 100644 index 40c00665ef6..00000000000 --- a/api/operations/operator_api/operator_subnet_login_urlbuilder.go +++ /dev/null @@ -1,104 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" -) - -// OperatorSubnetLoginURL generates an URL for the operator subnet login operation -type OperatorSubnetLoginURL struct { - _basePath string -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *OperatorSubnetLoginURL) WithBasePath(bp string) *OperatorSubnetLoginURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *OperatorSubnetLoginURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *OperatorSubnetLoginURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/subnet/login" - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *OperatorSubnetLoginURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *OperatorSubnetLoginURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *OperatorSubnetLoginURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on OperatorSubnetLoginURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on OperatorSubnetLoginURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *OperatorSubnetLoginURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/operator_subnet_register_api_key.go b/api/operations/operator_api/operator_subnet_register_api_key.go deleted file mode 100644 index 16067fd4c77..00000000000 --- a/api/operations/operator_api/operator_subnet_register_api_key.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// OperatorSubnetRegisterAPIKeyHandlerFunc turns a function with the right signature into a operator subnet register API key handler -type OperatorSubnetRegisterAPIKeyHandlerFunc func(OperatorSubnetRegisterAPIKeyParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn OperatorSubnetRegisterAPIKeyHandlerFunc) Handle(params OperatorSubnetRegisterAPIKeyParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// OperatorSubnetRegisterAPIKeyHandler interface for that can handle valid operator subnet register API key params -type OperatorSubnetRegisterAPIKeyHandler interface { - Handle(OperatorSubnetRegisterAPIKeyParams, *models.Principal) middleware.Responder -} - -// NewOperatorSubnetRegisterAPIKey creates a new http.Handler for the operator subnet register API key operation -func NewOperatorSubnetRegisterAPIKey(ctx *middleware.Context, handler OperatorSubnetRegisterAPIKeyHandler) *OperatorSubnetRegisterAPIKey { - return &OperatorSubnetRegisterAPIKey{Context: ctx, Handler: handler} -} - -/* - OperatorSubnetRegisterAPIKey swagger:route POST /subnet/apikey/register OperatorAPI operatorSubnetRegisterApiKey - -Register Operator with Subnet -*/ -type OperatorSubnetRegisterAPIKey struct { - Context *middleware.Context - Handler OperatorSubnetRegisterAPIKeyHandler -} - -func (o *OperatorSubnetRegisterAPIKey) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewOperatorSubnetRegisterAPIKeyParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/operator_subnet_register_api_key_parameters.go b/api/operations/operator_api/operator_subnet_register_api_key_parameters.go deleted file mode 100644 index ef94f02cfaa..00000000000 --- a/api/operations/operator_api/operator_subnet_register_api_key_parameters.go +++ /dev/null @@ -1,101 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "io" - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/validate" - - "github.com/minio/operator/models" -) - -// NewOperatorSubnetRegisterAPIKeyParams creates a new OperatorSubnetRegisterAPIKeyParams object -// -// There are no default values defined in the spec. -func NewOperatorSubnetRegisterAPIKeyParams() OperatorSubnetRegisterAPIKeyParams { - - return OperatorSubnetRegisterAPIKeyParams{} -} - -// OperatorSubnetRegisterAPIKeyParams contains all the bound params for the operator subnet register API key operation -// typically these are obtained from a http.Request -// -// swagger:parameters OperatorSubnetRegisterAPIKey -type OperatorSubnetRegisterAPIKeyParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: body - */ - Body *models.OperatorSubnetAPIKey -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewOperatorSubnetRegisterAPIKeyParams() beforehand. -func (o *OperatorSubnetRegisterAPIKeyParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - if runtime.HasBody(r) { - defer r.Body.Close() - var body models.OperatorSubnetAPIKey - if err := route.Consumer.Consume(r.Body, &body); err != nil { - if err == io.EOF { - res = append(res, errors.Required("body", "body", "")) - } else { - res = append(res, errors.NewParseError("body", "body", "", err)) - } - } else { - // validate body object - if err := body.Validate(route.Formats); err != nil { - res = append(res, err) - } - - ctx := validate.WithOperationRequest(r.Context()) - if err := body.ContextValidate(ctx, route.Formats); err != nil { - res = append(res, err) - } - - if len(res) == 0 { - o.Body = &body - } - } - } else { - res = append(res, errors.Required("body", "body", "")) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} diff --git a/api/operations/operator_api/operator_subnet_register_api_key_responses.go b/api/operations/operator_api/operator_subnet_register_api_key_responses.go deleted file mode 100644 index 24709471c94..00000000000 --- a/api/operations/operator_api/operator_subnet_register_api_key_responses.go +++ /dev/null @@ -1,135 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// OperatorSubnetRegisterAPIKeyOKCode is the HTTP code returned for type OperatorSubnetRegisterAPIKeyOK -const OperatorSubnetRegisterAPIKeyOKCode int = 200 - -/* -OperatorSubnetRegisterAPIKeyOK A successful response. - -swagger:response operatorSubnetRegisterApiKeyOK -*/ -type OperatorSubnetRegisterAPIKeyOK struct { - - /* - In: Body - */ - Payload *models.OperatorSubnetRegisterAPIKeyResponse `json:"body,omitempty"` -} - -// NewOperatorSubnetRegisterAPIKeyOK creates OperatorSubnetRegisterAPIKeyOK with default headers values -func NewOperatorSubnetRegisterAPIKeyOK() *OperatorSubnetRegisterAPIKeyOK { - - return &OperatorSubnetRegisterAPIKeyOK{} -} - -// WithPayload adds the payload to the operator subnet register Api key o k response -func (o *OperatorSubnetRegisterAPIKeyOK) WithPayload(payload *models.OperatorSubnetRegisterAPIKeyResponse) *OperatorSubnetRegisterAPIKeyOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the operator subnet register Api key o k response -func (o *OperatorSubnetRegisterAPIKeyOK) SetPayload(payload *models.OperatorSubnetRegisterAPIKeyResponse) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *OperatorSubnetRegisterAPIKeyOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} - -/* -OperatorSubnetRegisterAPIKeyDefault Generic error response. - -swagger:response operatorSubnetRegisterApiKeyDefault -*/ -type OperatorSubnetRegisterAPIKeyDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewOperatorSubnetRegisterAPIKeyDefault creates OperatorSubnetRegisterAPIKeyDefault with default headers values -func NewOperatorSubnetRegisterAPIKeyDefault(code int) *OperatorSubnetRegisterAPIKeyDefault { - if code <= 0 { - code = 500 - } - - return &OperatorSubnetRegisterAPIKeyDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the operator subnet register API key default response -func (o *OperatorSubnetRegisterAPIKeyDefault) WithStatusCode(code int) *OperatorSubnetRegisterAPIKeyDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the operator subnet register API key default response -func (o *OperatorSubnetRegisterAPIKeyDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the operator subnet register API key default response -func (o *OperatorSubnetRegisterAPIKeyDefault) WithPayload(payload *models.Error) *OperatorSubnetRegisterAPIKeyDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the operator subnet register API key default response -func (o *OperatorSubnetRegisterAPIKeyDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *OperatorSubnetRegisterAPIKeyDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/operator_subnet_register_api_key_urlbuilder.go b/api/operations/operator_api/operator_subnet_register_api_key_urlbuilder.go deleted file mode 100644 index 03c16fb7e0c..00000000000 --- a/api/operations/operator_api/operator_subnet_register_api_key_urlbuilder.go +++ /dev/null @@ -1,104 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" -) - -// OperatorSubnetRegisterAPIKeyURL generates an URL for the operator subnet register API key operation -type OperatorSubnetRegisterAPIKeyURL struct { - _basePath string -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *OperatorSubnetRegisterAPIKeyURL) WithBasePath(bp string) *OperatorSubnetRegisterAPIKeyURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *OperatorSubnetRegisterAPIKeyURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *OperatorSubnetRegisterAPIKeyURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/subnet/apikey/register" - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *OperatorSubnetRegisterAPIKeyURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *OperatorSubnetRegisterAPIKeyURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *OperatorSubnetRegisterAPIKeyURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on OperatorSubnetRegisterAPIKeyURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on OperatorSubnetRegisterAPIKeyURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *OperatorSubnetRegisterAPIKeyURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/post_m_p_integration.go b/api/operations/operator_api/post_m_p_integration.go deleted file mode 100644 index bdfbab583c4..00000000000 --- a/api/operations/operator_api/post_m_p_integration.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// PostMPIntegrationHandlerFunc turns a function with the right signature into a post m p integration handler -type PostMPIntegrationHandlerFunc func(PostMPIntegrationParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn PostMPIntegrationHandlerFunc) Handle(params PostMPIntegrationParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// PostMPIntegrationHandler interface for that can handle valid post m p integration params -type PostMPIntegrationHandler interface { - Handle(PostMPIntegrationParams, *models.Principal) middleware.Responder -} - -// NewPostMPIntegration creates a new http.Handler for the post m p integration operation -func NewPostMPIntegration(ctx *middleware.Context, handler PostMPIntegrationHandler) *PostMPIntegration { - return &PostMPIntegration{Context: ctx, Handler: handler} -} - -/* - PostMPIntegration swagger:route POST /mp-integration OperatorAPI postMPIntegration - -Set email to register for marketplace integration -*/ -type PostMPIntegration struct { - Context *middleware.Context - Handler PostMPIntegrationHandler -} - -func (o *PostMPIntegration) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewPostMPIntegrationParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/post_m_p_integration_parameters.go b/api/operations/operator_api/post_m_p_integration_parameters.go deleted file mode 100644 index 280f6a84aac..00000000000 --- a/api/operations/operator_api/post_m_p_integration_parameters.go +++ /dev/null @@ -1,101 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "io" - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/validate" - - "github.com/minio/operator/models" -) - -// NewPostMPIntegrationParams creates a new PostMPIntegrationParams object -// -// There are no default values defined in the spec. -func NewPostMPIntegrationParams() PostMPIntegrationParams { - - return PostMPIntegrationParams{} -} - -// PostMPIntegrationParams contains all the bound params for the post m p integration operation -// typically these are obtained from a http.Request -// -// swagger:parameters PostMPIntegration -type PostMPIntegrationParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: body - */ - Body *models.MpIntegration -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewPostMPIntegrationParams() beforehand. -func (o *PostMPIntegrationParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - if runtime.HasBody(r) { - defer r.Body.Close() - var body models.MpIntegration - if err := route.Consumer.Consume(r.Body, &body); err != nil { - if err == io.EOF { - res = append(res, errors.Required("body", "body", "")) - } else { - res = append(res, errors.NewParseError("body", "body", "", err)) - } - } else { - // validate body object - if err := body.Validate(route.Formats); err != nil { - res = append(res, err) - } - - ctx := validate.WithOperationRequest(r.Context()) - if err := body.ContextValidate(ctx, route.Formats); err != nil { - res = append(res, err) - } - - if len(res) == 0 { - o.Body = &body - } - } - } else { - res = append(res, errors.Required("body", "body", "")) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} diff --git a/api/operations/operator_api/post_m_p_integration_responses.go b/api/operations/operator_api/post_m_p_integration_responses.go deleted file mode 100644 index 54d56e83a1e..00000000000 --- a/api/operations/operator_api/post_m_p_integration_responses.go +++ /dev/null @@ -1,115 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// PostMPIntegrationCreatedCode is the HTTP code returned for type PostMPIntegrationCreated -const PostMPIntegrationCreatedCode int = 201 - -/* -PostMPIntegrationCreated A successful response. - -swagger:response postMPIntegrationCreated -*/ -type PostMPIntegrationCreated struct { -} - -// NewPostMPIntegrationCreated creates PostMPIntegrationCreated with default headers values -func NewPostMPIntegrationCreated() *PostMPIntegrationCreated { - - return &PostMPIntegrationCreated{} -} - -// WriteResponse to the client -func (o *PostMPIntegrationCreated) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses - - rw.WriteHeader(201) -} - -/* -PostMPIntegrationDefault Generic error response. - -swagger:response postMPIntegrationDefault -*/ -type PostMPIntegrationDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewPostMPIntegrationDefault creates PostMPIntegrationDefault with default headers values -func NewPostMPIntegrationDefault(code int) *PostMPIntegrationDefault { - if code <= 0 { - code = 500 - } - - return &PostMPIntegrationDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the post m p integration default response -func (o *PostMPIntegrationDefault) WithStatusCode(code int) *PostMPIntegrationDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the post m p integration default response -func (o *PostMPIntegrationDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the post m p integration default response -func (o *PostMPIntegrationDefault) WithPayload(payload *models.Error) *PostMPIntegrationDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the post m p integration default response -func (o *PostMPIntegrationDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *PostMPIntegrationDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/post_m_p_integration_urlbuilder.go b/api/operations/operator_api/post_m_p_integration_urlbuilder.go deleted file mode 100644 index a950023278e..00000000000 --- a/api/operations/operator_api/post_m_p_integration_urlbuilder.go +++ /dev/null @@ -1,104 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" -) - -// PostMPIntegrationURL generates an URL for the post m p integration operation -type PostMPIntegrationURL struct { - _basePath string -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *PostMPIntegrationURL) WithBasePath(bp string) *PostMPIntegrationURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *PostMPIntegrationURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *PostMPIntegrationURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/mp-integration" - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *PostMPIntegrationURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *PostMPIntegrationURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *PostMPIntegrationURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on PostMPIntegrationURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on PostMPIntegrationURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *PostMPIntegrationURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/put_tenant_y_a_m_l.go b/api/operations/operator_api/put_tenant_y_a_m_l.go deleted file mode 100644 index 979b8ab8ea0..00000000000 --- a/api/operations/operator_api/put_tenant_y_a_m_l.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// PutTenantYAMLHandlerFunc turns a function with the right signature into a put tenant y a m l handler -type PutTenantYAMLHandlerFunc func(PutTenantYAMLParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn PutTenantYAMLHandlerFunc) Handle(params PutTenantYAMLParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// PutTenantYAMLHandler interface for that can handle valid put tenant y a m l params -type PutTenantYAMLHandler interface { - Handle(PutTenantYAMLParams, *models.Principal) middleware.Responder -} - -// NewPutTenantYAML creates a new http.Handler for the put tenant y a m l operation -func NewPutTenantYAML(ctx *middleware.Context, handler PutTenantYAMLHandler) *PutTenantYAML { - return &PutTenantYAML{Context: ctx, Handler: handler} -} - -/* - PutTenantYAML swagger:route PUT /namespaces/{namespace}/tenants/{tenant}/yaml OperatorAPI putTenantYAML - -Put the Tenant YAML -*/ -type PutTenantYAML struct { - Context *middleware.Context - Handler PutTenantYAMLHandler -} - -func (o *PutTenantYAML) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewPutTenantYAMLParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/put_tenant_y_a_m_l_parameters.go b/api/operations/operator_api/put_tenant_y_a_m_l_parameters.go deleted file mode 100644 index b94324b6695..00000000000 --- a/api/operations/operator_api/put_tenant_y_a_m_l_parameters.go +++ /dev/null @@ -1,150 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "io" - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/validate" - - "github.com/minio/operator/models" -) - -// NewPutTenantYAMLParams creates a new PutTenantYAMLParams object -// -// There are no default values defined in the spec. -func NewPutTenantYAMLParams() PutTenantYAMLParams { - - return PutTenantYAMLParams{} -} - -// PutTenantYAMLParams contains all the bound params for the put tenant y a m l operation -// typically these are obtained from a http.Request -// -// swagger:parameters PutTenantYAML -type PutTenantYAMLParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: body - */ - Body *models.TenantYAML - /* - Required: true - In: path - */ - Namespace string - /* - Required: true - In: path - */ - Tenant string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewPutTenantYAMLParams() beforehand. -func (o *PutTenantYAMLParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - if runtime.HasBody(r) { - defer r.Body.Close() - var body models.TenantYAML - if err := route.Consumer.Consume(r.Body, &body); err != nil { - if err == io.EOF { - res = append(res, errors.Required("body", "body", "")) - } else { - res = append(res, errors.NewParseError("body", "body", "", err)) - } - } else { - // validate body object - if err := body.Validate(route.Formats); err != nil { - res = append(res, err) - } - - ctx := validate.WithOperationRequest(r.Context()) - if err := body.ContextValidate(ctx, route.Formats); err != nil { - res = append(res, err) - } - - if len(res) == 0 { - o.Body = &body - } - } - } else { - res = append(res, errors.Required("body", "body", "")) - } - - rNamespace, rhkNamespace, _ := route.Params.GetOK("namespace") - if err := o.bindNamespace(rNamespace, rhkNamespace, route.Formats); err != nil { - res = append(res, err) - } - - rTenant, rhkTenant, _ := route.Params.GetOK("tenant") - if err := o.bindTenant(rTenant, rhkTenant, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindNamespace binds and validates parameter Namespace from path. -func (o *PutTenantYAMLParams) bindNamespace(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Namespace = raw - - return nil -} - -// bindTenant binds and validates parameter Tenant from path. -func (o *PutTenantYAMLParams) bindTenant(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Tenant = raw - - return nil -} diff --git a/api/operations/operator_api/put_tenant_y_a_m_l_responses.go b/api/operations/operator_api/put_tenant_y_a_m_l_responses.go deleted file mode 100644 index ff3aecfedf5..00000000000 --- a/api/operations/operator_api/put_tenant_y_a_m_l_responses.go +++ /dev/null @@ -1,115 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// PutTenantYAMLCreatedCode is the HTTP code returned for type PutTenantYAMLCreated -const PutTenantYAMLCreatedCode int = 201 - -/* -PutTenantYAMLCreated A successful response. - -swagger:response putTenantYAMLCreated -*/ -type PutTenantYAMLCreated struct { -} - -// NewPutTenantYAMLCreated creates PutTenantYAMLCreated with default headers values -func NewPutTenantYAMLCreated() *PutTenantYAMLCreated { - - return &PutTenantYAMLCreated{} -} - -// WriteResponse to the client -func (o *PutTenantYAMLCreated) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses - - rw.WriteHeader(201) -} - -/* -PutTenantYAMLDefault Generic error response. - -swagger:response putTenantYAMLDefault -*/ -type PutTenantYAMLDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewPutTenantYAMLDefault creates PutTenantYAMLDefault with default headers values -func NewPutTenantYAMLDefault(code int) *PutTenantYAMLDefault { - if code <= 0 { - code = 500 - } - - return &PutTenantYAMLDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the put tenant y a m l default response -func (o *PutTenantYAMLDefault) WithStatusCode(code int) *PutTenantYAMLDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the put tenant y a m l default response -func (o *PutTenantYAMLDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the put tenant y a m l default response -func (o *PutTenantYAMLDefault) WithPayload(payload *models.Error) *PutTenantYAMLDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the put tenant y a m l default response -func (o *PutTenantYAMLDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *PutTenantYAMLDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/put_tenant_y_a_m_l_urlbuilder.go b/api/operations/operator_api/put_tenant_y_a_m_l_urlbuilder.go deleted file mode 100644 index c3baf7df757..00000000000 --- a/api/operations/operator_api/put_tenant_y_a_m_l_urlbuilder.go +++ /dev/null @@ -1,124 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" -) - -// PutTenantYAMLURL generates an URL for the put tenant y a m l operation -type PutTenantYAMLURL struct { - Namespace string - Tenant string - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *PutTenantYAMLURL) WithBasePath(bp string) *PutTenantYAMLURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *PutTenantYAMLURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *PutTenantYAMLURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/namespaces/{namespace}/tenants/{tenant}/yaml" - - namespace := o.Namespace - if namespace != "" { - _path = strings.Replace(_path, "{namespace}", namespace, -1) - } else { - return nil, errors.New("namespace is required on PutTenantYAMLURL") - } - - tenant := o.Tenant - if tenant != "" { - _path = strings.Replace(_path, "{tenant}", tenant, -1) - } else { - return nil, errors.New("tenant is required on PutTenantYAMLURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *PutTenantYAMLURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *PutTenantYAMLURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *PutTenantYAMLURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on PutTenantYAMLURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on PutTenantYAMLURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *PutTenantYAMLURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/set_tenant_administrators.go b/api/operations/operator_api/set_tenant_administrators.go deleted file mode 100644 index 1de2ebdd2b8..00000000000 --- a/api/operations/operator_api/set_tenant_administrators.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// SetTenantAdministratorsHandlerFunc turns a function with the right signature into a set tenant administrators handler -type SetTenantAdministratorsHandlerFunc func(SetTenantAdministratorsParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn SetTenantAdministratorsHandlerFunc) Handle(params SetTenantAdministratorsParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// SetTenantAdministratorsHandler interface for that can handle valid set tenant administrators params -type SetTenantAdministratorsHandler interface { - Handle(SetTenantAdministratorsParams, *models.Principal) middleware.Responder -} - -// NewSetTenantAdministrators creates a new http.Handler for the set tenant administrators operation -func NewSetTenantAdministrators(ctx *middleware.Context, handler SetTenantAdministratorsHandler) *SetTenantAdministrators { - return &SetTenantAdministrators{Context: ctx, Handler: handler} -} - -/* - SetTenantAdministrators swagger:route POST /namespaces/{namespace}/tenants/{tenant}/set-administrators OperatorAPI setTenantAdministrators - -Set the consoleAdmin policy to the specified users and groups -*/ -type SetTenantAdministrators struct { - Context *middleware.Context - Handler SetTenantAdministratorsHandler -} - -func (o *SetTenantAdministrators) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewSetTenantAdministratorsParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/set_tenant_administrators_parameters.go b/api/operations/operator_api/set_tenant_administrators_parameters.go deleted file mode 100644 index fd33c43a076..00000000000 --- a/api/operations/operator_api/set_tenant_administrators_parameters.go +++ /dev/null @@ -1,150 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "io" - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/validate" - - "github.com/minio/operator/models" -) - -// NewSetTenantAdministratorsParams creates a new SetTenantAdministratorsParams object -// -// There are no default values defined in the spec. -func NewSetTenantAdministratorsParams() SetTenantAdministratorsParams { - - return SetTenantAdministratorsParams{} -} - -// SetTenantAdministratorsParams contains all the bound params for the set tenant administrators operation -// typically these are obtained from a http.Request -// -// swagger:parameters SetTenantAdministrators -type SetTenantAdministratorsParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: body - */ - Body *models.SetAdministratorsRequest - /* - Required: true - In: path - */ - Namespace string - /* - Required: true - In: path - */ - Tenant string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewSetTenantAdministratorsParams() beforehand. -func (o *SetTenantAdministratorsParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - if runtime.HasBody(r) { - defer r.Body.Close() - var body models.SetAdministratorsRequest - if err := route.Consumer.Consume(r.Body, &body); err != nil { - if err == io.EOF { - res = append(res, errors.Required("body", "body", "")) - } else { - res = append(res, errors.NewParseError("body", "body", "", err)) - } - } else { - // validate body object - if err := body.Validate(route.Formats); err != nil { - res = append(res, err) - } - - ctx := validate.WithOperationRequest(r.Context()) - if err := body.ContextValidate(ctx, route.Formats); err != nil { - res = append(res, err) - } - - if len(res) == 0 { - o.Body = &body - } - } - } else { - res = append(res, errors.Required("body", "body", "")) - } - - rNamespace, rhkNamespace, _ := route.Params.GetOK("namespace") - if err := o.bindNamespace(rNamespace, rhkNamespace, route.Formats); err != nil { - res = append(res, err) - } - - rTenant, rhkTenant, _ := route.Params.GetOK("tenant") - if err := o.bindTenant(rTenant, rhkTenant, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindNamespace binds and validates parameter Namespace from path. -func (o *SetTenantAdministratorsParams) bindNamespace(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Namespace = raw - - return nil -} - -// bindTenant binds and validates parameter Tenant from path. -func (o *SetTenantAdministratorsParams) bindTenant(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Tenant = raw - - return nil -} diff --git a/api/operations/operator_api/set_tenant_administrators_responses.go b/api/operations/operator_api/set_tenant_administrators_responses.go deleted file mode 100644 index f73ee5c0e46..00000000000 --- a/api/operations/operator_api/set_tenant_administrators_responses.go +++ /dev/null @@ -1,115 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// SetTenantAdministratorsNoContentCode is the HTTP code returned for type SetTenantAdministratorsNoContent -const SetTenantAdministratorsNoContentCode int = 204 - -/* -SetTenantAdministratorsNoContent A successful response. - -swagger:response setTenantAdministratorsNoContent -*/ -type SetTenantAdministratorsNoContent struct { -} - -// NewSetTenantAdministratorsNoContent creates SetTenantAdministratorsNoContent with default headers values -func NewSetTenantAdministratorsNoContent() *SetTenantAdministratorsNoContent { - - return &SetTenantAdministratorsNoContent{} -} - -// WriteResponse to the client -func (o *SetTenantAdministratorsNoContent) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses - - rw.WriteHeader(204) -} - -/* -SetTenantAdministratorsDefault Generic error response. - -swagger:response setTenantAdministratorsDefault -*/ -type SetTenantAdministratorsDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewSetTenantAdministratorsDefault creates SetTenantAdministratorsDefault with default headers values -func NewSetTenantAdministratorsDefault(code int) *SetTenantAdministratorsDefault { - if code <= 0 { - code = 500 - } - - return &SetTenantAdministratorsDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the set tenant administrators default response -func (o *SetTenantAdministratorsDefault) WithStatusCode(code int) *SetTenantAdministratorsDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the set tenant administrators default response -func (o *SetTenantAdministratorsDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the set tenant administrators default response -func (o *SetTenantAdministratorsDefault) WithPayload(payload *models.Error) *SetTenantAdministratorsDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the set tenant administrators default response -func (o *SetTenantAdministratorsDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *SetTenantAdministratorsDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/set_tenant_administrators_urlbuilder.go b/api/operations/operator_api/set_tenant_administrators_urlbuilder.go deleted file mode 100644 index 041ed1527b6..00000000000 --- a/api/operations/operator_api/set_tenant_administrators_urlbuilder.go +++ /dev/null @@ -1,124 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" -) - -// SetTenantAdministratorsURL generates an URL for the set tenant administrators operation -type SetTenantAdministratorsURL struct { - Namespace string - Tenant string - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *SetTenantAdministratorsURL) WithBasePath(bp string) *SetTenantAdministratorsURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *SetTenantAdministratorsURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *SetTenantAdministratorsURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/namespaces/{namespace}/tenants/{tenant}/set-administrators" - - namespace := o.Namespace - if namespace != "" { - _path = strings.Replace(_path, "{namespace}", namespace, -1) - } else { - return nil, errors.New("namespace is required on SetTenantAdministratorsURL") - } - - tenant := o.Tenant - if tenant != "" { - _path = strings.Replace(_path, "{tenant}", tenant, -1) - } else { - return nil, errors.New("tenant is required on SetTenantAdministratorsURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *SetTenantAdministratorsURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *SetTenantAdministratorsURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *SetTenantAdministratorsURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on SetTenantAdministratorsURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on SetTenantAdministratorsURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *SetTenantAdministratorsURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/subscription_activate.go b/api/operations/operator_api/subscription_activate.go deleted file mode 100644 index e39b05b4696..00000000000 --- a/api/operations/operator_api/subscription_activate.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// SubscriptionActivateHandlerFunc turns a function with the right signature into a subscription activate handler -type SubscriptionActivateHandlerFunc func(SubscriptionActivateParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn SubscriptionActivateHandlerFunc) Handle(params SubscriptionActivateParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// SubscriptionActivateHandler interface for that can handle valid subscription activate params -type SubscriptionActivateHandler interface { - Handle(SubscriptionActivateParams, *models.Principal) middleware.Responder -} - -// NewSubscriptionActivate creates a new http.Handler for the subscription activate operation -func NewSubscriptionActivate(ctx *middleware.Context, handler SubscriptionActivateHandler) *SubscriptionActivate { - return &SubscriptionActivate{Context: ctx, Handler: handler} -} - -/* - SubscriptionActivate swagger:route POST /subscription/namespaces/{namespace}/tenants/{tenant}/activate OperatorAPI subscriptionActivate - -Activate a particular tenant using the existing subscription license -*/ -type SubscriptionActivate struct { - Context *middleware.Context - Handler SubscriptionActivateHandler -} - -func (o *SubscriptionActivate) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewSubscriptionActivateParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/subscription_activate_parameters.go b/api/operations/operator_api/subscription_activate_parameters.go deleted file mode 100644 index 25b9903d9a1..00000000000 --- a/api/operations/operator_api/subscription_activate_parameters.go +++ /dev/null @@ -1,112 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" -) - -// NewSubscriptionActivateParams creates a new SubscriptionActivateParams object -// -// There are no default values defined in the spec. -func NewSubscriptionActivateParams() SubscriptionActivateParams { - - return SubscriptionActivateParams{} -} - -// SubscriptionActivateParams contains all the bound params for the subscription activate operation -// typically these are obtained from a http.Request -// -// swagger:parameters SubscriptionActivate -type SubscriptionActivateParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: path - */ - Namespace string - /* - Required: true - In: path - */ - Tenant string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewSubscriptionActivateParams() beforehand. -func (o *SubscriptionActivateParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - rNamespace, rhkNamespace, _ := route.Params.GetOK("namespace") - if err := o.bindNamespace(rNamespace, rhkNamespace, route.Formats); err != nil { - res = append(res, err) - } - - rTenant, rhkTenant, _ := route.Params.GetOK("tenant") - if err := o.bindTenant(rTenant, rhkTenant, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindNamespace binds and validates parameter Namespace from path. -func (o *SubscriptionActivateParams) bindNamespace(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Namespace = raw - - return nil -} - -// bindTenant binds and validates parameter Tenant from path. -func (o *SubscriptionActivateParams) bindTenant(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Tenant = raw - - return nil -} diff --git a/api/operations/operator_api/subscription_activate_responses.go b/api/operations/operator_api/subscription_activate_responses.go deleted file mode 100644 index 892e6da070d..00000000000 --- a/api/operations/operator_api/subscription_activate_responses.go +++ /dev/null @@ -1,115 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// SubscriptionActivateNoContentCode is the HTTP code returned for type SubscriptionActivateNoContent -const SubscriptionActivateNoContentCode int = 204 - -/* -SubscriptionActivateNoContent A successful response. - -swagger:response subscriptionActivateNoContent -*/ -type SubscriptionActivateNoContent struct { -} - -// NewSubscriptionActivateNoContent creates SubscriptionActivateNoContent with default headers values -func NewSubscriptionActivateNoContent() *SubscriptionActivateNoContent { - - return &SubscriptionActivateNoContent{} -} - -// WriteResponse to the client -func (o *SubscriptionActivateNoContent) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses - - rw.WriteHeader(204) -} - -/* -SubscriptionActivateDefault Generic error response. - -swagger:response subscriptionActivateDefault -*/ -type SubscriptionActivateDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewSubscriptionActivateDefault creates SubscriptionActivateDefault with default headers values -func NewSubscriptionActivateDefault(code int) *SubscriptionActivateDefault { - if code <= 0 { - code = 500 - } - - return &SubscriptionActivateDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the subscription activate default response -func (o *SubscriptionActivateDefault) WithStatusCode(code int) *SubscriptionActivateDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the subscription activate default response -func (o *SubscriptionActivateDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the subscription activate default response -func (o *SubscriptionActivateDefault) WithPayload(payload *models.Error) *SubscriptionActivateDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the subscription activate default response -func (o *SubscriptionActivateDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *SubscriptionActivateDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/subscription_activate_urlbuilder.go b/api/operations/operator_api/subscription_activate_urlbuilder.go deleted file mode 100644 index 47d5a1642a6..00000000000 --- a/api/operations/operator_api/subscription_activate_urlbuilder.go +++ /dev/null @@ -1,124 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" -) - -// SubscriptionActivateURL generates an URL for the subscription activate operation -type SubscriptionActivateURL struct { - Namespace string - Tenant string - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *SubscriptionActivateURL) WithBasePath(bp string) *SubscriptionActivateURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *SubscriptionActivateURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *SubscriptionActivateURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/subscription/namespaces/{namespace}/tenants/{tenant}/activate" - - namespace := o.Namespace - if namespace != "" { - _path = strings.Replace(_path, "{namespace}", namespace, -1) - } else { - return nil, errors.New("namespace is required on SubscriptionActivateURL") - } - - tenant := o.Tenant - if tenant != "" { - _path = strings.Replace(_path, "{tenant}", tenant, -1) - } else { - return nil, errors.New("tenant is required on SubscriptionActivateURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *SubscriptionActivateURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *SubscriptionActivateURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *SubscriptionActivateURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on SubscriptionActivateURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on SubscriptionActivateURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *SubscriptionActivateURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/subscription_info.go b/api/operations/operator_api/subscription_info.go deleted file mode 100644 index 8a4d049263d..00000000000 --- a/api/operations/operator_api/subscription_info.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// SubscriptionInfoHandlerFunc turns a function with the right signature into a subscription info handler -type SubscriptionInfoHandlerFunc func(SubscriptionInfoParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn SubscriptionInfoHandlerFunc) Handle(params SubscriptionInfoParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// SubscriptionInfoHandler interface for that can handle valid subscription info params -type SubscriptionInfoHandler interface { - Handle(SubscriptionInfoParams, *models.Principal) middleware.Responder -} - -// NewSubscriptionInfo creates a new http.Handler for the subscription info operation -func NewSubscriptionInfo(ctx *middleware.Context, handler SubscriptionInfoHandler) *SubscriptionInfo { - return &SubscriptionInfo{Context: ctx, Handler: handler} -} - -/* - SubscriptionInfo swagger:route GET /subscription/info OperatorAPI subscriptionInfo - -Subscription info -*/ -type SubscriptionInfo struct { - Context *middleware.Context - Handler SubscriptionInfoHandler -} - -func (o *SubscriptionInfo) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewSubscriptionInfoParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/subscription_info_parameters.go b/api/operations/operator_api/subscription_info_parameters.go deleted file mode 100644 index 9fa5ebc5215..00000000000 --- a/api/operations/operator_api/subscription_info_parameters.go +++ /dev/null @@ -1,63 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime/middleware" -) - -// NewSubscriptionInfoParams creates a new SubscriptionInfoParams object -// -// There are no default values defined in the spec. -func NewSubscriptionInfoParams() SubscriptionInfoParams { - - return SubscriptionInfoParams{} -} - -// SubscriptionInfoParams contains all the bound params for the subscription info operation -// typically these are obtained from a http.Request -// -// swagger:parameters SubscriptionInfo -type SubscriptionInfoParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewSubscriptionInfoParams() beforehand. -func (o *SubscriptionInfoParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} diff --git a/api/operations/operator_api/subscription_info_responses.go b/api/operations/operator_api/subscription_info_responses.go deleted file mode 100644 index f32b61267e8..00000000000 --- a/api/operations/operator_api/subscription_info_responses.go +++ /dev/null @@ -1,135 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// SubscriptionInfoOKCode is the HTTP code returned for type SubscriptionInfoOK -const SubscriptionInfoOKCode int = 200 - -/* -SubscriptionInfoOK A successful response. - -swagger:response subscriptionInfoOK -*/ -type SubscriptionInfoOK struct { - - /* - In: Body - */ - Payload *models.License `json:"body,omitempty"` -} - -// NewSubscriptionInfoOK creates SubscriptionInfoOK with default headers values -func NewSubscriptionInfoOK() *SubscriptionInfoOK { - - return &SubscriptionInfoOK{} -} - -// WithPayload adds the payload to the subscription info o k response -func (o *SubscriptionInfoOK) WithPayload(payload *models.License) *SubscriptionInfoOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the subscription info o k response -func (o *SubscriptionInfoOK) SetPayload(payload *models.License) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *SubscriptionInfoOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} - -/* -SubscriptionInfoDefault Generic error response. - -swagger:response subscriptionInfoDefault -*/ -type SubscriptionInfoDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewSubscriptionInfoDefault creates SubscriptionInfoDefault with default headers values -func NewSubscriptionInfoDefault(code int) *SubscriptionInfoDefault { - if code <= 0 { - code = 500 - } - - return &SubscriptionInfoDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the subscription info default response -func (o *SubscriptionInfoDefault) WithStatusCode(code int) *SubscriptionInfoDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the subscription info default response -func (o *SubscriptionInfoDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the subscription info default response -func (o *SubscriptionInfoDefault) WithPayload(payload *models.Error) *SubscriptionInfoDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the subscription info default response -func (o *SubscriptionInfoDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *SubscriptionInfoDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/subscription_info_urlbuilder.go b/api/operations/operator_api/subscription_info_urlbuilder.go deleted file mode 100644 index 7a5d5c94b47..00000000000 --- a/api/operations/operator_api/subscription_info_urlbuilder.go +++ /dev/null @@ -1,104 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" -) - -// SubscriptionInfoURL generates an URL for the subscription info operation -type SubscriptionInfoURL struct { - _basePath string -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *SubscriptionInfoURL) WithBasePath(bp string) *SubscriptionInfoURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *SubscriptionInfoURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *SubscriptionInfoURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/subscription/info" - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *SubscriptionInfoURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *SubscriptionInfoURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *SubscriptionInfoURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on SubscriptionInfoURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on SubscriptionInfoURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *SubscriptionInfoURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/subscription_refresh.go b/api/operations/operator_api/subscription_refresh.go deleted file mode 100644 index c8e8e0dde92..00000000000 --- a/api/operations/operator_api/subscription_refresh.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// SubscriptionRefreshHandlerFunc turns a function with the right signature into a subscription refresh handler -type SubscriptionRefreshHandlerFunc func(SubscriptionRefreshParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn SubscriptionRefreshHandlerFunc) Handle(params SubscriptionRefreshParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// SubscriptionRefreshHandler interface for that can handle valid subscription refresh params -type SubscriptionRefreshHandler interface { - Handle(SubscriptionRefreshParams, *models.Principal) middleware.Responder -} - -// NewSubscriptionRefresh creates a new http.Handler for the subscription refresh operation -func NewSubscriptionRefresh(ctx *middleware.Context, handler SubscriptionRefreshHandler) *SubscriptionRefresh { - return &SubscriptionRefresh{Context: ctx, Handler: handler} -} - -/* - SubscriptionRefresh swagger:route POST /subscription/refresh OperatorAPI subscriptionRefresh - -Refresh existing subscription license -*/ -type SubscriptionRefresh struct { - Context *middleware.Context - Handler SubscriptionRefreshHandler -} - -func (o *SubscriptionRefresh) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewSubscriptionRefreshParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/subscription_refresh_parameters.go b/api/operations/operator_api/subscription_refresh_parameters.go deleted file mode 100644 index 13f73521dc8..00000000000 --- a/api/operations/operator_api/subscription_refresh_parameters.go +++ /dev/null @@ -1,63 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime/middleware" -) - -// NewSubscriptionRefreshParams creates a new SubscriptionRefreshParams object -// -// There are no default values defined in the spec. -func NewSubscriptionRefreshParams() SubscriptionRefreshParams { - - return SubscriptionRefreshParams{} -} - -// SubscriptionRefreshParams contains all the bound params for the subscription refresh operation -// typically these are obtained from a http.Request -// -// swagger:parameters SubscriptionRefresh -type SubscriptionRefreshParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewSubscriptionRefreshParams() beforehand. -func (o *SubscriptionRefreshParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} diff --git a/api/operations/operator_api/subscription_refresh_responses.go b/api/operations/operator_api/subscription_refresh_responses.go deleted file mode 100644 index a71b7538fdc..00000000000 --- a/api/operations/operator_api/subscription_refresh_responses.go +++ /dev/null @@ -1,135 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// SubscriptionRefreshOKCode is the HTTP code returned for type SubscriptionRefreshOK -const SubscriptionRefreshOKCode int = 200 - -/* -SubscriptionRefreshOK A successful response. - -swagger:response subscriptionRefreshOK -*/ -type SubscriptionRefreshOK struct { - - /* - In: Body - */ - Payload *models.License `json:"body,omitempty"` -} - -// NewSubscriptionRefreshOK creates SubscriptionRefreshOK with default headers values -func NewSubscriptionRefreshOK() *SubscriptionRefreshOK { - - return &SubscriptionRefreshOK{} -} - -// WithPayload adds the payload to the subscription refresh o k response -func (o *SubscriptionRefreshOK) WithPayload(payload *models.License) *SubscriptionRefreshOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the subscription refresh o k response -func (o *SubscriptionRefreshOK) SetPayload(payload *models.License) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *SubscriptionRefreshOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} - -/* -SubscriptionRefreshDefault Generic error response. - -swagger:response subscriptionRefreshDefault -*/ -type SubscriptionRefreshDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewSubscriptionRefreshDefault creates SubscriptionRefreshDefault with default headers values -func NewSubscriptionRefreshDefault(code int) *SubscriptionRefreshDefault { - if code <= 0 { - code = 500 - } - - return &SubscriptionRefreshDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the subscription refresh default response -func (o *SubscriptionRefreshDefault) WithStatusCode(code int) *SubscriptionRefreshDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the subscription refresh default response -func (o *SubscriptionRefreshDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the subscription refresh default response -func (o *SubscriptionRefreshDefault) WithPayload(payload *models.Error) *SubscriptionRefreshDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the subscription refresh default response -func (o *SubscriptionRefreshDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *SubscriptionRefreshDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/subscription_refresh_urlbuilder.go b/api/operations/operator_api/subscription_refresh_urlbuilder.go deleted file mode 100644 index b6c2bebad0e..00000000000 --- a/api/operations/operator_api/subscription_refresh_urlbuilder.go +++ /dev/null @@ -1,104 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" -) - -// SubscriptionRefreshURL generates an URL for the subscription refresh operation -type SubscriptionRefreshURL struct { - _basePath string -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *SubscriptionRefreshURL) WithBasePath(bp string) *SubscriptionRefreshURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *SubscriptionRefreshURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *SubscriptionRefreshURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/subscription/refresh" - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *SubscriptionRefreshURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *SubscriptionRefreshURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *SubscriptionRefreshURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on SubscriptionRefreshURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on SubscriptionRefreshURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *SubscriptionRefreshURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/subscription_validate.go b/api/operations/operator_api/subscription_validate.go deleted file mode 100644 index 08c9f5fe415..00000000000 --- a/api/operations/operator_api/subscription_validate.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// SubscriptionValidateHandlerFunc turns a function with the right signature into a subscription validate handler -type SubscriptionValidateHandlerFunc func(SubscriptionValidateParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn SubscriptionValidateHandlerFunc) Handle(params SubscriptionValidateParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// SubscriptionValidateHandler interface for that can handle valid subscription validate params -type SubscriptionValidateHandler interface { - Handle(SubscriptionValidateParams, *models.Principal) middleware.Responder -} - -// NewSubscriptionValidate creates a new http.Handler for the subscription validate operation -func NewSubscriptionValidate(ctx *middleware.Context, handler SubscriptionValidateHandler) *SubscriptionValidate { - return &SubscriptionValidate{Context: ctx, Handler: handler} -} - -/* - SubscriptionValidate swagger:route POST /subscription/validate OperatorAPI subscriptionValidate - -Validates subscription license -*/ -type SubscriptionValidate struct { - Context *middleware.Context - Handler SubscriptionValidateHandler -} - -func (o *SubscriptionValidate) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewSubscriptionValidateParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/subscription_validate_parameters.go b/api/operations/operator_api/subscription_validate_parameters.go deleted file mode 100644 index f6b7ab95203..00000000000 --- a/api/operations/operator_api/subscription_validate_parameters.go +++ /dev/null @@ -1,101 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "io" - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/validate" - - "github.com/minio/operator/models" -) - -// NewSubscriptionValidateParams creates a new SubscriptionValidateParams object -// -// There are no default values defined in the spec. -func NewSubscriptionValidateParams() SubscriptionValidateParams { - - return SubscriptionValidateParams{} -} - -// SubscriptionValidateParams contains all the bound params for the subscription validate operation -// typically these are obtained from a http.Request -// -// swagger:parameters SubscriptionValidate -type SubscriptionValidateParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: body - */ - Body *models.SubscriptionValidateRequest -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewSubscriptionValidateParams() beforehand. -func (o *SubscriptionValidateParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - if runtime.HasBody(r) { - defer r.Body.Close() - var body models.SubscriptionValidateRequest - if err := route.Consumer.Consume(r.Body, &body); err != nil { - if err == io.EOF { - res = append(res, errors.Required("body", "body", "")) - } else { - res = append(res, errors.NewParseError("body", "body", "", err)) - } - } else { - // validate body object - if err := body.Validate(route.Formats); err != nil { - res = append(res, err) - } - - ctx := validate.WithOperationRequest(r.Context()) - if err := body.ContextValidate(ctx, route.Formats); err != nil { - res = append(res, err) - } - - if len(res) == 0 { - o.Body = &body - } - } - } else { - res = append(res, errors.Required("body", "body", "")) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} diff --git a/api/operations/operator_api/subscription_validate_responses.go b/api/operations/operator_api/subscription_validate_responses.go deleted file mode 100644 index b13423c5ba3..00000000000 --- a/api/operations/operator_api/subscription_validate_responses.go +++ /dev/null @@ -1,135 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// SubscriptionValidateOKCode is the HTTP code returned for type SubscriptionValidateOK -const SubscriptionValidateOKCode int = 200 - -/* -SubscriptionValidateOK A successful response. - -swagger:response subscriptionValidateOK -*/ -type SubscriptionValidateOK struct { - - /* - In: Body - */ - Payload *models.License `json:"body,omitempty"` -} - -// NewSubscriptionValidateOK creates SubscriptionValidateOK with default headers values -func NewSubscriptionValidateOK() *SubscriptionValidateOK { - - return &SubscriptionValidateOK{} -} - -// WithPayload adds the payload to the subscription validate o k response -func (o *SubscriptionValidateOK) WithPayload(payload *models.License) *SubscriptionValidateOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the subscription validate o k response -func (o *SubscriptionValidateOK) SetPayload(payload *models.License) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *SubscriptionValidateOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} - -/* -SubscriptionValidateDefault Generic error response. - -swagger:response subscriptionValidateDefault -*/ -type SubscriptionValidateDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewSubscriptionValidateDefault creates SubscriptionValidateDefault with default headers values -func NewSubscriptionValidateDefault(code int) *SubscriptionValidateDefault { - if code <= 0 { - code = 500 - } - - return &SubscriptionValidateDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the subscription validate default response -func (o *SubscriptionValidateDefault) WithStatusCode(code int) *SubscriptionValidateDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the subscription validate default response -func (o *SubscriptionValidateDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the subscription validate default response -func (o *SubscriptionValidateDefault) WithPayload(payload *models.Error) *SubscriptionValidateDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the subscription validate default response -func (o *SubscriptionValidateDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *SubscriptionValidateDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/subscription_validate_urlbuilder.go b/api/operations/operator_api/subscription_validate_urlbuilder.go deleted file mode 100644 index eef5144416f..00000000000 --- a/api/operations/operator_api/subscription_validate_urlbuilder.go +++ /dev/null @@ -1,104 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" -) - -// SubscriptionValidateURL generates an URL for the subscription validate operation -type SubscriptionValidateURL struct { - _basePath string -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *SubscriptionValidateURL) WithBasePath(bp string) *SubscriptionValidateURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *SubscriptionValidateURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *SubscriptionValidateURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/subscription/validate" - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *SubscriptionValidateURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *SubscriptionValidateURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *SubscriptionValidateURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on SubscriptionValidateURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on SubscriptionValidateURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *SubscriptionValidateURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/tenant_add_pool.go b/api/operations/operator_api/tenant_add_pool.go deleted file mode 100644 index 4c2dc3c0e3a..00000000000 --- a/api/operations/operator_api/tenant_add_pool.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// TenantAddPoolHandlerFunc turns a function with the right signature into a tenant add pool handler -type TenantAddPoolHandlerFunc func(TenantAddPoolParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn TenantAddPoolHandlerFunc) Handle(params TenantAddPoolParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// TenantAddPoolHandler interface for that can handle valid tenant add pool params -type TenantAddPoolHandler interface { - Handle(TenantAddPoolParams, *models.Principal) middleware.Responder -} - -// NewTenantAddPool creates a new http.Handler for the tenant add pool operation -func NewTenantAddPool(ctx *middleware.Context, handler TenantAddPoolHandler) *TenantAddPool { - return &TenantAddPool{Context: ctx, Handler: handler} -} - -/* - TenantAddPool swagger:route POST /namespaces/{namespace}/tenants/{tenant}/pools OperatorAPI tenantAddPool - -Tenant Add Pool -*/ -type TenantAddPool struct { - Context *middleware.Context - Handler TenantAddPoolHandler -} - -func (o *TenantAddPool) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewTenantAddPoolParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/tenant_add_pool_parameters.go b/api/operations/operator_api/tenant_add_pool_parameters.go deleted file mode 100644 index 0b69d1ce5b1..00000000000 --- a/api/operations/operator_api/tenant_add_pool_parameters.go +++ /dev/null @@ -1,150 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "io" - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/validate" - - "github.com/minio/operator/models" -) - -// NewTenantAddPoolParams creates a new TenantAddPoolParams object -// -// There are no default values defined in the spec. -func NewTenantAddPoolParams() TenantAddPoolParams { - - return TenantAddPoolParams{} -} - -// TenantAddPoolParams contains all the bound params for the tenant add pool operation -// typically these are obtained from a http.Request -// -// swagger:parameters TenantAddPool -type TenantAddPoolParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: body - */ - Body *models.Pool - /* - Required: true - In: path - */ - Namespace string - /* - Required: true - In: path - */ - Tenant string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewTenantAddPoolParams() beforehand. -func (o *TenantAddPoolParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - if runtime.HasBody(r) { - defer r.Body.Close() - var body models.Pool - if err := route.Consumer.Consume(r.Body, &body); err != nil { - if err == io.EOF { - res = append(res, errors.Required("body", "body", "")) - } else { - res = append(res, errors.NewParseError("body", "body", "", err)) - } - } else { - // validate body object - if err := body.Validate(route.Formats); err != nil { - res = append(res, err) - } - - ctx := validate.WithOperationRequest(r.Context()) - if err := body.ContextValidate(ctx, route.Formats); err != nil { - res = append(res, err) - } - - if len(res) == 0 { - o.Body = &body - } - } - } else { - res = append(res, errors.Required("body", "body", "")) - } - - rNamespace, rhkNamespace, _ := route.Params.GetOK("namespace") - if err := o.bindNamespace(rNamespace, rhkNamespace, route.Formats); err != nil { - res = append(res, err) - } - - rTenant, rhkTenant, _ := route.Params.GetOK("tenant") - if err := o.bindTenant(rTenant, rhkTenant, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindNamespace binds and validates parameter Namespace from path. -func (o *TenantAddPoolParams) bindNamespace(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Namespace = raw - - return nil -} - -// bindTenant binds and validates parameter Tenant from path. -func (o *TenantAddPoolParams) bindTenant(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Tenant = raw - - return nil -} diff --git a/api/operations/operator_api/tenant_add_pool_responses.go b/api/operations/operator_api/tenant_add_pool_responses.go deleted file mode 100644 index d38ec11c3fc..00000000000 --- a/api/operations/operator_api/tenant_add_pool_responses.go +++ /dev/null @@ -1,115 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// TenantAddPoolCreatedCode is the HTTP code returned for type TenantAddPoolCreated -const TenantAddPoolCreatedCode int = 201 - -/* -TenantAddPoolCreated A successful response. - -swagger:response tenantAddPoolCreated -*/ -type TenantAddPoolCreated struct { -} - -// NewTenantAddPoolCreated creates TenantAddPoolCreated with default headers values -func NewTenantAddPoolCreated() *TenantAddPoolCreated { - - return &TenantAddPoolCreated{} -} - -// WriteResponse to the client -func (o *TenantAddPoolCreated) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses - - rw.WriteHeader(201) -} - -/* -TenantAddPoolDefault Generic error response. - -swagger:response tenantAddPoolDefault -*/ -type TenantAddPoolDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewTenantAddPoolDefault creates TenantAddPoolDefault with default headers values -func NewTenantAddPoolDefault(code int) *TenantAddPoolDefault { - if code <= 0 { - code = 500 - } - - return &TenantAddPoolDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the tenant add pool default response -func (o *TenantAddPoolDefault) WithStatusCode(code int) *TenantAddPoolDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the tenant add pool default response -func (o *TenantAddPoolDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the tenant add pool default response -func (o *TenantAddPoolDefault) WithPayload(payload *models.Error) *TenantAddPoolDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the tenant add pool default response -func (o *TenantAddPoolDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *TenantAddPoolDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/tenant_add_pool_urlbuilder.go b/api/operations/operator_api/tenant_add_pool_urlbuilder.go deleted file mode 100644 index 0b59704b96c..00000000000 --- a/api/operations/operator_api/tenant_add_pool_urlbuilder.go +++ /dev/null @@ -1,124 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" -) - -// TenantAddPoolURL generates an URL for the tenant add pool operation -type TenantAddPoolURL struct { - Namespace string - Tenant string - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *TenantAddPoolURL) WithBasePath(bp string) *TenantAddPoolURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *TenantAddPoolURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *TenantAddPoolURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/namespaces/{namespace}/tenants/{tenant}/pools" - - namespace := o.Namespace - if namespace != "" { - _path = strings.Replace(_path, "{namespace}", namespace, -1) - } else { - return nil, errors.New("namespace is required on TenantAddPoolURL") - } - - tenant := o.Tenant - if tenant != "" { - _path = strings.Replace(_path, "{tenant}", tenant, -1) - } else { - return nil, errors.New("tenant is required on TenantAddPoolURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *TenantAddPoolURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *TenantAddPoolURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *TenantAddPoolURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on TenantAddPoolURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on TenantAddPoolURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *TenantAddPoolURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/tenant_configuration.go b/api/operations/operator_api/tenant_configuration.go deleted file mode 100644 index b4101f0d558..00000000000 --- a/api/operations/operator_api/tenant_configuration.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// TenantConfigurationHandlerFunc turns a function with the right signature into a tenant configuration handler -type TenantConfigurationHandlerFunc func(TenantConfigurationParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn TenantConfigurationHandlerFunc) Handle(params TenantConfigurationParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// TenantConfigurationHandler interface for that can handle valid tenant configuration params -type TenantConfigurationHandler interface { - Handle(TenantConfigurationParams, *models.Principal) middleware.Responder -} - -// NewTenantConfiguration creates a new http.Handler for the tenant configuration operation -func NewTenantConfiguration(ctx *middleware.Context, handler TenantConfigurationHandler) *TenantConfiguration { - return &TenantConfiguration{Context: ctx, Handler: handler} -} - -/* - TenantConfiguration swagger:route GET /namespaces/{namespace}/tenants/{tenant}/configuration OperatorAPI tenantConfiguration - -Tenant Configuration -*/ -type TenantConfiguration struct { - Context *middleware.Context - Handler TenantConfigurationHandler -} - -func (o *TenantConfiguration) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewTenantConfigurationParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/tenant_configuration_parameters.go b/api/operations/operator_api/tenant_configuration_parameters.go deleted file mode 100644 index eba7ef6add1..00000000000 --- a/api/operations/operator_api/tenant_configuration_parameters.go +++ /dev/null @@ -1,112 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" -) - -// NewTenantConfigurationParams creates a new TenantConfigurationParams object -// -// There are no default values defined in the spec. -func NewTenantConfigurationParams() TenantConfigurationParams { - - return TenantConfigurationParams{} -} - -// TenantConfigurationParams contains all the bound params for the tenant configuration operation -// typically these are obtained from a http.Request -// -// swagger:parameters TenantConfiguration -type TenantConfigurationParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: path - */ - Namespace string - /* - Required: true - In: path - */ - Tenant string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewTenantConfigurationParams() beforehand. -func (o *TenantConfigurationParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - rNamespace, rhkNamespace, _ := route.Params.GetOK("namespace") - if err := o.bindNamespace(rNamespace, rhkNamespace, route.Formats); err != nil { - res = append(res, err) - } - - rTenant, rhkTenant, _ := route.Params.GetOK("tenant") - if err := o.bindTenant(rTenant, rhkTenant, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindNamespace binds and validates parameter Namespace from path. -func (o *TenantConfigurationParams) bindNamespace(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Namespace = raw - - return nil -} - -// bindTenant binds and validates parameter Tenant from path. -func (o *TenantConfigurationParams) bindTenant(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Tenant = raw - - return nil -} diff --git a/api/operations/operator_api/tenant_configuration_responses.go b/api/operations/operator_api/tenant_configuration_responses.go deleted file mode 100644 index 7021d801f9a..00000000000 --- a/api/operations/operator_api/tenant_configuration_responses.go +++ /dev/null @@ -1,135 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// TenantConfigurationOKCode is the HTTP code returned for type TenantConfigurationOK -const TenantConfigurationOKCode int = 200 - -/* -TenantConfigurationOK A successful response. - -swagger:response tenantConfigurationOK -*/ -type TenantConfigurationOK struct { - - /* - In: Body - */ - Payload *models.TenantConfigurationResponse `json:"body,omitempty"` -} - -// NewTenantConfigurationOK creates TenantConfigurationOK with default headers values -func NewTenantConfigurationOK() *TenantConfigurationOK { - - return &TenantConfigurationOK{} -} - -// WithPayload adds the payload to the tenant configuration o k response -func (o *TenantConfigurationOK) WithPayload(payload *models.TenantConfigurationResponse) *TenantConfigurationOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the tenant configuration o k response -func (o *TenantConfigurationOK) SetPayload(payload *models.TenantConfigurationResponse) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *TenantConfigurationOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} - -/* -TenantConfigurationDefault Generic error response. - -swagger:response tenantConfigurationDefault -*/ -type TenantConfigurationDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewTenantConfigurationDefault creates TenantConfigurationDefault with default headers values -func NewTenantConfigurationDefault(code int) *TenantConfigurationDefault { - if code <= 0 { - code = 500 - } - - return &TenantConfigurationDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the tenant configuration default response -func (o *TenantConfigurationDefault) WithStatusCode(code int) *TenantConfigurationDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the tenant configuration default response -func (o *TenantConfigurationDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the tenant configuration default response -func (o *TenantConfigurationDefault) WithPayload(payload *models.Error) *TenantConfigurationDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the tenant configuration default response -func (o *TenantConfigurationDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *TenantConfigurationDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/tenant_configuration_urlbuilder.go b/api/operations/operator_api/tenant_configuration_urlbuilder.go deleted file mode 100644 index 4540cb367cd..00000000000 --- a/api/operations/operator_api/tenant_configuration_urlbuilder.go +++ /dev/null @@ -1,124 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" -) - -// TenantConfigurationURL generates an URL for the tenant configuration operation -type TenantConfigurationURL struct { - Namespace string - Tenant string - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *TenantConfigurationURL) WithBasePath(bp string) *TenantConfigurationURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *TenantConfigurationURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *TenantConfigurationURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/namespaces/{namespace}/tenants/{tenant}/configuration" - - namespace := o.Namespace - if namespace != "" { - _path = strings.Replace(_path, "{namespace}", namespace, -1) - } else { - return nil, errors.New("namespace is required on TenantConfigurationURL") - } - - tenant := o.Tenant - if tenant != "" { - _path = strings.Replace(_path, "{tenant}", tenant, -1) - } else { - return nil, errors.New("tenant is required on TenantConfigurationURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *TenantConfigurationURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *TenantConfigurationURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *TenantConfigurationURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on TenantConfigurationURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on TenantConfigurationURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *TenantConfigurationURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/tenant_delete_encryption.go b/api/operations/operator_api/tenant_delete_encryption.go deleted file mode 100644 index 590002fec19..00000000000 --- a/api/operations/operator_api/tenant_delete_encryption.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// TenantDeleteEncryptionHandlerFunc turns a function with the right signature into a tenant delete encryption handler -type TenantDeleteEncryptionHandlerFunc func(TenantDeleteEncryptionParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn TenantDeleteEncryptionHandlerFunc) Handle(params TenantDeleteEncryptionParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// TenantDeleteEncryptionHandler interface for that can handle valid tenant delete encryption params -type TenantDeleteEncryptionHandler interface { - Handle(TenantDeleteEncryptionParams, *models.Principal) middleware.Responder -} - -// NewTenantDeleteEncryption creates a new http.Handler for the tenant delete encryption operation -func NewTenantDeleteEncryption(ctx *middleware.Context, handler TenantDeleteEncryptionHandler) *TenantDeleteEncryption { - return &TenantDeleteEncryption{Context: ctx, Handler: handler} -} - -/* - TenantDeleteEncryption swagger:route DELETE /namespaces/{namespace}/tenants/{tenant}/encryption OperatorAPI tenantDeleteEncryption - -Tenant Delete Encryption -*/ -type TenantDeleteEncryption struct { - Context *middleware.Context - Handler TenantDeleteEncryptionHandler -} - -func (o *TenantDeleteEncryption) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewTenantDeleteEncryptionParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/tenant_delete_encryption_parameters.go b/api/operations/operator_api/tenant_delete_encryption_parameters.go deleted file mode 100644 index 82a5f39974b..00000000000 --- a/api/operations/operator_api/tenant_delete_encryption_parameters.go +++ /dev/null @@ -1,112 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" -) - -// NewTenantDeleteEncryptionParams creates a new TenantDeleteEncryptionParams object -// -// There are no default values defined in the spec. -func NewTenantDeleteEncryptionParams() TenantDeleteEncryptionParams { - - return TenantDeleteEncryptionParams{} -} - -// TenantDeleteEncryptionParams contains all the bound params for the tenant delete encryption operation -// typically these are obtained from a http.Request -// -// swagger:parameters TenantDeleteEncryption -type TenantDeleteEncryptionParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: path - */ - Namespace string - /* - Required: true - In: path - */ - Tenant string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewTenantDeleteEncryptionParams() beforehand. -func (o *TenantDeleteEncryptionParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - rNamespace, rhkNamespace, _ := route.Params.GetOK("namespace") - if err := o.bindNamespace(rNamespace, rhkNamespace, route.Formats); err != nil { - res = append(res, err) - } - - rTenant, rhkTenant, _ := route.Params.GetOK("tenant") - if err := o.bindTenant(rTenant, rhkTenant, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindNamespace binds and validates parameter Namespace from path. -func (o *TenantDeleteEncryptionParams) bindNamespace(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Namespace = raw - - return nil -} - -// bindTenant binds and validates parameter Tenant from path. -func (o *TenantDeleteEncryptionParams) bindTenant(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Tenant = raw - - return nil -} diff --git a/api/operations/operator_api/tenant_delete_encryption_responses.go b/api/operations/operator_api/tenant_delete_encryption_responses.go deleted file mode 100644 index 921f5e05b87..00000000000 --- a/api/operations/operator_api/tenant_delete_encryption_responses.go +++ /dev/null @@ -1,115 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// TenantDeleteEncryptionNoContentCode is the HTTP code returned for type TenantDeleteEncryptionNoContent -const TenantDeleteEncryptionNoContentCode int = 204 - -/* -TenantDeleteEncryptionNoContent A successful response. - -swagger:response tenantDeleteEncryptionNoContent -*/ -type TenantDeleteEncryptionNoContent struct { -} - -// NewTenantDeleteEncryptionNoContent creates TenantDeleteEncryptionNoContent with default headers values -func NewTenantDeleteEncryptionNoContent() *TenantDeleteEncryptionNoContent { - - return &TenantDeleteEncryptionNoContent{} -} - -// WriteResponse to the client -func (o *TenantDeleteEncryptionNoContent) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses - - rw.WriteHeader(204) -} - -/* -TenantDeleteEncryptionDefault Generic error response. - -swagger:response tenantDeleteEncryptionDefault -*/ -type TenantDeleteEncryptionDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewTenantDeleteEncryptionDefault creates TenantDeleteEncryptionDefault with default headers values -func NewTenantDeleteEncryptionDefault(code int) *TenantDeleteEncryptionDefault { - if code <= 0 { - code = 500 - } - - return &TenantDeleteEncryptionDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the tenant delete encryption default response -func (o *TenantDeleteEncryptionDefault) WithStatusCode(code int) *TenantDeleteEncryptionDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the tenant delete encryption default response -func (o *TenantDeleteEncryptionDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the tenant delete encryption default response -func (o *TenantDeleteEncryptionDefault) WithPayload(payload *models.Error) *TenantDeleteEncryptionDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the tenant delete encryption default response -func (o *TenantDeleteEncryptionDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *TenantDeleteEncryptionDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/tenant_delete_encryption_urlbuilder.go b/api/operations/operator_api/tenant_delete_encryption_urlbuilder.go deleted file mode 100644 index 7db099665dc..00000000000 --- a/api/operations/operator_api/tenant_delete_encryption_urlbuilder.go +++ /dev/null @@ -1,124 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" -) - -// TenantDeleteEncryptionURL generates an URL for the tenant delete encryption operation -type TenantDeleteEncryptionURL struct { - Namespace string - Tenant string - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *TenantDeleteEncryptionURL) WithBasePath(bp string) *TenantDeleteEncryptionURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *TenantDeleteEncryptionURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *TenantDeleteEncryptionURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/namespaces/{namespace}/tenants/{tenant}/encryption" - - namespace := o.Namespace - if namespace != "" { - _path = strings.Replace(_path, "{namespace}", namespace, -1) - } else { - return nil, errors.New("namespace is required on TenantDeleteEncryptionURL") - } - - tenant := o.Tenant - if tenant != "" { - _path = strings.Replace(_path, "{tenant}", tenant, -1) - } else { - return nil, errors.New("tenant is required on TenantDeleteEncryptionURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *TenantDeleteEncryptionURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *TenantDeleteEncryptionURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *TenantDeleteEncryptionURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on TenantDeleteEncryptionURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on TenantDeleteEncryptionURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *TenantDeleteEncryptionURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/tenant_details.go b/api/operations/operator_api/tenant_details.go deleted file mode 100644 index 98035b00f7e..00000000000 --- a/api/operations/operator_api/tenant_details.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// TenantDetailsHandlerFunc turns a function with the right signature into a tenant details handler -type TenantDetailsHandlerFunc func(TenantDetailsParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn TenantDetailsHandlerFunc) Handle(params TenantDetailsParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// TenantDetailsHandler interface for that can handle valid tenant details params -type TenantDetailsHandler interface { - Handle(TenantDetailsParams, *models.Principal) middleware.Responder -} - -// NewTenantDetails creates a new http.Handler for the tenant details operation -func NewTenantDetails(ctx *middleware.Context, handler TenantDetailsHandler) *TenantDetails { - return &TenantDetails{Context: ctx, Handler: handler} -} - -/* - TenantDetails swagger:route GET /namespaces/{namespace}/tenants/{tenant} OperatorAPI tenantDetails - -Tenant Details -*/ -type TenantDetails struct { - Context *middleware.Context - Handler TenantDetailsHandler -} - -func (o *TenantDetails) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewTenantDetailsParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/tenant_details_parameters.go b/api/operations/operator_api/tenant_details_parameters.go deleted file mode 100644 index 076dff6a4bb..00000000000 --- a/api/operations/operator_api/tenant_details_parameters.go +++ /dev/null @@ -1,112 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" -) - -// NewTenantDetailsParams creates a new TenantDetailsParams object -// -// There are no default values defined in the spec. -func NewTenantDetailsParams() TenantDetailsParams { - - return TenantDetailsParams{} -} - -// TenantDetailsParams contains all the bound params for the tenant details operation -// typically these are obtained from a http.Request -// -// swagger:parameters TenantDetails -type TenantDetailsParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: path - */ - Namespace string - /* - Required: true - In: path - */ - Tenant string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewTenantDetailsParams() beforehand. -func (o *TenantDetailsParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - rNamespace, rhkNamespace, _ := route.Params.GetOK("namespace") - if err := o.bindNamespace(rNamespace, rhkNamespace, route.Formats); err != nil { - res = append(res, err) - } - - rTenant, rhkTenant, _ := route.Params.GetOK("tenant") - if err := o.bindTenant(rTenant, rhkTenant, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindNamespace binds and validates parameter Namespace from path. -func (o *TenantDetailsParams) bindNamespace(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Namespace = raw - - return nil -} - -// bindTenant binds and validates parameter Tenant from path. -func (o *TenantDetailsParams) bindTenant(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Tenant = raw - - return nil -} diff --git a/api/operations/operator_api/tenant_details_responses.go b/api/operations/operator_api/tenant_details_responses.go deleted file mode 100644 index b33df5fc5b9..00000000000 --- a/api/operations/operator_api/tenant_details_responses.go +++ /dev/null @@ -1,135 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// TenantDetailsOKCode is the HTTP code returned for type TenantDetailsOK -const TenantDetailsOKCode int = 200 - -/* -TenantDetailsOK A successful response. - -swagger:response tenantDetailsOK -*/ -type TenantDetailsOK struct { - - /* - In: Body - */ - Payload *models.Tenant `json:"body,omitempty"` -} - -// NewTenantDetailsOK creates TenantDetailsOK with default headers values -func NewTenantDetailsOK() *TenantDetailsOK { - - return &TenantDetailsOK{} -} - -// WithPayload adds the payload to the tenant details o k response -func (o *TenantDetailsOK) WithPayload(payload *models.Tenant) *TenantDetailsOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the tenant details o k response -func (o *TenantDetailsOK) SetPayload(payload *models.Tenant) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *TenantDetailsOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} - -/* -TenantDetailsDefault Generic error response. - -swagger:response tenantDetailsDefault -*/ -type TenantDetailsDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewTenantDetailsDefault creates TenantDetailsDefault with default headers values -func NewTenantDetailsDefault(code int) *TenantDetailsDefault { - if code <= 0 { - code = 500 - } - - return &TenantDetailsDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the tenant details default response -func (o *TenantDetailsDefault) WithStatusCode(code int) *TenantDetailsDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the tenant details default response -func (o *TenantDetailsDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the tenant details default response -func (o *TenantDetailsDefault) WithPayload(payload *models.Error) *TenantDetailsDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the tenant details default response -func (o *TenantDetailsDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *TenantDetailsDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/tenant_details_urlbuilder.go b/api/operations/operator_api/tenant_details_urlbuilder.go deleted file mode 100644 index 12294d2bedc..00000000000 --- a/api/operations/operator_api/tenant_details_urlbuilder.go +++ /dev/null @@ -1,124 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" -) - -// TenantDetailsURL generates an URL for the tenant details operation -type TenantDetailsURL struct { - Namespace string - Tenant string - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *TenantDetailsURL) WithBasePath(bp string) *TenantDetailsURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *TenantDetailsURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *TenantDetailsURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/namespaces/{namespace}/tenants/{tenant}" - - namespace := o.Namespace - if namespace != "" { - _path = strings.Replace(_path, "{namespace}", namespace, -1) - } else { - return nil, errors.New("namespace is required on TenantDetailsURL") - } - - tenant := o.Tenant - if tenant != "" { - _path = strings.Replace(_path, "{tenant}", tenant, -1) - } else { - return nil, errors.New("tenant is required on TenantDetailsURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *TenantDetailsURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *TenantDetailsURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *TenantDetailsURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on TenantDetailsURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on TenantDetailsURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *TenantDetailsURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/tenant_encryption_info.go b/api/operations/operator_api/tenant_encryption_info.go deleted file mode 100644 index 80e88afcde0..00000000000 --- a/api/operations/operator_api/tenant_encryption_info.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// TenantEncryptionInfoHandlerFunc turns a function with the right signature into a tenant encryption info handler -type TenantEncryptionInfoHandlerFunc func(TenantEncryptionInfoParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn TenantEncryptionInfoHandlerFunc) Handle(params TenantEncryptionInfoParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// TenantEncryptionInfoHandler interface for that can handle valid tenant encryption info params -type TenantEncryptionInfoHandler interface { - Handle(TenantEncryptionInfoParams, *models.Principal) middleware.Responder -} - -// NewTenantEncryptionInfo creates a new http.Handler for the tenant encryption info operation -func NewTenantEncryptionInfo(ctx *middleware.Context, handler TenantEncryptionInfoHandler) *TenantEncryptionInfo { - return &TenantEncryptionInfo{Context: ctx, Handler: handler} -} - -/* - TenantEncryptionInfo swagger:route GET /namespaces/{namespace}/tenants/{tenant}/encryption OperatorAPI tenantEncryptionInfo - -Tenant Encryption Info -*/ -type TenantEncryptionInfo struct { - Context *middleware.Context - Handler TenantEncryptionInfoHandler -} - -func (o *TenantEncryptionInfo) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewTenantEncryptionInfoParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/tenant_encryption_info_parameters.go b/api/operations/operator_api/tenant_encryption_info_parameters.go deleted file mode 100644 index 404e1589fd1..00000000000 --- a/api/operations/operator_api/tenant_encryption_info_parameters.go +++ /dev/null @@ -1,112 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" -) - -// NewTenantEncryptionInfoParams creates a new TenantEncryptionInfoParams object -// -// There are no default values defined in the spec. -func NewTenantEncryptionInfoParams() TenantEncryptionInfoParams { - - return TenantEncryptionInfoParams{} -} - -// TenantEncryptionInfoParams contains all the bound params for the tenant encryption info operation -// typically these are obtained from a http.Request -// -// swagger:parameters TenantEncryptionInfo -type TenantEncryptionInfoParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: path - */ - Namespace string - /* - Required: true - In: path - */ - Tenant string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewTenantEncryptionInfoParams() beforehand. -func (o *TenantEncryptionInfoParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - rNamespace, rhkNamespace, _ := route.Params.GetOK("namespace") - if err := o.bindNamespace(rNamespace, rhkNamespace, route.Formats); err != nil { - res = append(res, err) - } - - rTenant, rhkTenant, _ := route.Params.GetOK("tenant") - if err := o.bindTenant(rTenant, rhkTenant, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindNamespace binds and validates parameter Namespace from path. -func (o *TenantEncryptionInfoParams) bindNamespace(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Namespace = raw - - return nil -} - -// bindTenant binds and validates parameter Tenant from path. -func (o *TenantEncryptionInfoParams) bindTenant(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Tenant = raw - - return nil -} diff --git a/api/operations/operator_api/tenant_encryption_info_responses.go b/api/operations/operator_api/tenant_encryption_info_responses.go deleted file mode 100644 index 623d59c9b6b..00000000000 --- a/api/operations/operator_api/tenant_encryption_info_responses.go +++ /dev/null @@ -1,135 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// TenantEncryptionInfoOKCode is the HTTP code returned for type TenantEncryptionInfoOK -const TenantEncryptionInfoOKCode int = 200 - -/* -TenantEncryptionInfoOK A successful response. - -swagger:response tenantEncryptionInfoOK -*/ -type TenantEncryptionInfoOK struct { - - /* - In: Body - */ - Payload *models.EncryptionConfigurationResponse `json:"body,omitempty"` -} - -// NewTenantEncryptionInfoOK creates TenantEncryptionInfoOK with default headers values -func NewTenantEncryptionInfoOK() *TenantEncryptionInfoOK { - - return &TenantEncryptionInfoOK{} -} - -// WithPayload adds the payload to the tenant encryption info o k response -func (o *TenantEncryptionInfoOK) WithPayload(payload *models.EncryptionConfigurationResponse) *TenantEncryptionInfoOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the tenant encryption info o k response -func (o *TenantEncryptionInfoOK) SetPayload(payload *models.EncryptionConfigurationResponse) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *TenantEncryptionInfoOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} - -/* -TenantEncryptionInfoDefault Generic error response. - -swagger:response tenantEncryptionInfoDefault -*/ -type TenantEncryptionInfoDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewTenantEncryptionInfoDefault creates TenantEncryptionInfoDefault with default headers values -func NewTenantEncryptionInfoDefault(code int) *TenantEncryptionInfoDefault { - if code <= 0 { - code = 500 - } - - return &TenantEncryptionInfoDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the tenant encryption info default response -func (o *TenantEncryptionInfoDefault) WithStatusCode(code int) *TenantEncryptionInfoDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the tenant encryption info default response -func (o *TenantEncryptionInfoDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the tenant encryption info default response -func (o *TenantEncryptionInfoDefault) WithPayload(payload *models.Error) *TenantEncryptionInfoDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the tenant encryption info default response -func (o *TenantEncryptionInfoDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *TenantEncryptionInfoDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/tenant_encryption_info_urlbuilder.go b/api/operations/operator_api/tenant_encryption_info_urlbuilder.go deleted file mode 100644 index 16762ab55a4..00000000000 --- a/api/operations/operator_api/tenant_encryption_info_urlbuilder.go +++ /dev/null @@ -1,124 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" -) - -// TenantEncryptionInfoURL generates an URL for the tenant encryption info operation -type TenantEncryptionInfoURL struct { - Namespace string - Tenant string - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *TenantEncryptionInfoURL) WithBasePath(bp string) *TenantEncryptionInfoURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *TenantEncryptionInfoURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *TenantEncryptionInfoURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/namespaces/{namespace}/tenants/{tenant}/encryption" - - namespace := o.Namespace - if namespace != "" { - _path = strings.Replace(_path, "{namespace}", namespace, -1) - } else { - return nil, errors.New("namespace is required on TenantEncryptionInfoURL") - } - - tenant := o.Tenant - if tenant != "" { - _path = strings.Replace(_path, "{tenant}", tenant, -1) - } else { - return nil, errors.New("tenant is required on TenantEncryptionInfoURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *TenantEncryptionInfoURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *TenantEncryptionInfoURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *TenantEncryptionInfoURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on TenantEncryptionInfoURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on TenantEncryptionInfoURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *TenantEncryptionInfoURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/tenant_identity_provider.go b/api/operations/operator_api/tenant_identity_provider.go deleted file mode 100644 index 06b8898afd8..00000000000 --- a/api/operations/operator_api/tenant_identity_provider.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// TenantIdentityProviderHandlerFunc turns a function with the right signature into a tenant identity provider handler -type TenantIdentityProviderHandlerFunc func(TenantIdentityProviderParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn TenantIdentityProviderHandlerFunc) Handle(params TenantIdentityProviderParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// TenantIdentityProviderHandler interface for that can handle valid tenant identity provider params -type TenantIdentityProviderHandler interface { - Handle(TenantIdentityProviderParams, *models.Principal) middleware.Responder -} - -// NewTenantIdentityProvider creates a new http.Handler for the tenant identity provider operation -func NewTenantIdentityProvider(ctx *middleware.Context, handler TenantIdentityProviderHandler) *TenantIdentityProvider { - return &TenantIdentityProvider{Context: ctx, Handler: handler} -} - -/* - TenantIdentityProvider swagger:route GET /namespaces/{namespace}/tenants/{tenant}/identity-provider OperatorAPI tenantIdentityProvider - -Tenant Identity Provider -*/ -type TenantIdentityProvider struct { - Context *middleware.Context - Handler TenantIdentityProviderHandler -} - -func (o *TenantIdentityProvider) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewTenantIdentityProviderParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/tenant_identity_provider_parameters.go b/api/operations/operator_api/tenant_identity_provider_parameters.go deleted file mode 100644 index 57f33908eb8..00000000000 --- a/api/operations/operator_api/tenant_identity_provider_parameters.go +++ /dev/null @@ -1,112 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" -) - -// NewTenantIdentityProviderParams creates a new TenantIdentityProviderParams object -// -// There are no default values defined in the spec. -func NewTenantIdentityProviderParams() TenantIdentityProviderParams { - - return TenantIdentityProviderParams{} -} - -// TenantIdentityProviderParams contains all the bound params for the tenant identity provider operation -// typically these are obtained from a http.Request -// -// swagger:parameters TenantIdentityProvider -type TenantIdentityProviderParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: path - */ - Namespace string - /* - Required: true - In: path - */ - Tenant string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewTenantIdentityProviderParams() beforehand. -func (o *TenantIdentityProviderParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - rNamespace, rhkNamespace, _ := route.Params.GetOK("namespace") - if err := o.bindNamespace(rNamespace, rhkNamespace, route.Formats); err != nil { - res = append(res, err) - } - - rTenant, rhkTenant, _ := route.Params.GetOK("tenant") - if err := o.bindTenant(rTenant, rhkTenant, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindNamespace binds and validates parameter Namespace from path. -func (o *TenantIdentityProviderParams) bindNamespace(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Namespace = raw - - return nil -} - -// bindTenant binds and validates parameter Tenant from path. -func (o *TenantIdentityProviderParams) bindTenant(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Tenant = raw - - return nil -} diff --git a/api/operations/operator_api/tenant_identity_provider_responses.go b/api/operations/operator_api/tenant_identity_provider_responses.go deleted file mode 100644 index 070d7acaa13..00000000000 --- a/api/operations/operator_api/tenant_identity_provider_responses.go +++ /dev/null @@ -1,135 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// TenantIdentityProviderOKCode is the HTTP code returned for type TenantIdentityProviderOK -const TenantIdentityProviderOKCode int = 200 - -/* -TenantIdentityProviderOK A successful response. - -swagger:response tenantIdentityProviderOK -*/ -type TenantIdentityProviderOK struct { - - /* - In: Body - */ - Payload *models.IdpConfiguration `json:"body,omitempty"` -} - -// NewTenantIdentityProviderOK creates TenantIdentityProviderOK with default headers values -func NewTenantIdentityProviderOK() *TenantIdentityProviderOK { - - return &TenantIdentityProviderOK{} -} - -// WithPayload adds the payload to the tenant identity provider o k response -func (o *TenantIdentityProviderOK) WithPayload(payload *models.IdpConfiguration) *TenantIdentityProviderOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the tenant identity provider o k response -func (o *TenantIdentityProviderOK) SetPayload(payload *models.IdpConfiguration) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *TenantIdentityProviderOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} - -/* -TenantIdentityProviderDefault Generic error response. - -swagger:response tenantIdentityProviderDefault -*/ -type TenantIdentityProviderDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewTenantIdentityProviderDefault creates TenantIdentityProviderDefault with default headers values -func NewTenantIdentityProviderDefault(code int) *TenantIdentityProviderDefault { - if code <= 0 { - code = 500 - } - - return &TenantIdentityProviderDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the tenant identity provider default response -func (o *TenantIdentityProviderDefault) WithStatusCode(code int) *TenantIdentityProviderDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the tenant identity provider default response -func (o *TenantIdentityProviderDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the tenant identity provider default response -func (o *TenantIdentityProviderDefault) WithPayload(payload *models.Error) *TenantIdentityProviderDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the tenant identity provider default response -func (o *TenantIdentityProviderDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *TenantIdentityProviderDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/tenant_identity_provider_urlbuilder.go b/api/operations/operator_api/tenant_identity_provider_urlbuilder.go deleted file mode 100644 index f70f16b4ee3..00000000000 --- a/api/operations/operator_api/tenant_identity_provider_urlbuilder.go +++ /dev/null @@ -1,124 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" -) - -// TenantIdentityProviderURL generates an URL for the tenant identity provider operation -type TenantIdentityProviderURL struct { - Namespace string - Tenant string - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *TenantIdentityProviderURL) WithBasePath(bp string) *TenantIdentityProviderURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *TenantIdentityProviderURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *TenantIdentityProviderURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/namespaces/{namespace}/tenants/{tenant}/identity-provider" - - namespace := o.Namespace - if namespace != "" { - _path = strings.Replace(_path, "{namespace}", namespace, -1) - } else { - return nil, errors.New("namespace is required on TenantIdentityProviderURL") - } - - tenant := o.Tenant - if tenant != "" { - _path = strings.Replace(_path, "{tenant}", tenant, -1) - } else { - return nil, errors.New("tenant is required on TenantIdentityProviderURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *TenantIdentityProviderURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *TenantIdentityProviderURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *TenantIdentityProviderURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on TenantIdentityProviderURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on TenantIdentityProviderURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *TenantIdentityProviderURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/tenant_security.go b/api/operations/operator_api/tenant_security.go deleted file mode 100644 index a5a6fd0cfbb..00000000000 --- a/api/operations/operator_api/tenant_security.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// TenantSecurityHandlerFunc turns a function with the right signature into a tenant security handler -type TenantSecurityHandlerFunc func(TenantSecurityParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn TenantSecurityHandlerFunc) Handle(params TenantSecurityParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// TenantSecurityHandler interface for that can handle valid tenant security params -type TenantSecurityHandler interface { - Handle(TenantSecurityParams, *models.Principal) middleware.Responder -} - -// NewTenantSecurity creates a new http.Handler for the tenant security operation -func NewTenantSecurity(ctx *middleware.Context, handler TenantSecurityHandler) *TenantSecurity { - return &TenantSecurity{Context: ctx, Handler: handler} -} - -/* - TenantSecurity swagger:route GET /namespaces/{namespace}/tenants/{tenant}/security OperatorAPI tenantSecurity - -Tenant Security -*/ -type TenantSecurity struct { - Context *middleware.Context - Handler TenantSecurityHandler -} - -func (o *TenantSecurity) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewTenantSecurityParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/tenant_security_parameters.go b/api/operations/operator_api/tenant_security_parameters.go deleted file mode 100644 index 1ded1653199..00000000000 --- a/api/operations/operator_api/tenant_security_parameters.go +++ /dev/null @@ -1,112 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" -) - -// NewTenantSecurityParams creates a new TenantSecurityParams object -// -// There are no default values defined in the spec. -func NewTenantSecurityParams() TenantSecurityParams { - - return TenantSecurityParams{} -} - -// TenantSecurityParams contains all the bound params for the tenant security operation -// typically these are obtained from a http.Request -// -// swagger:parameters TenantSecurity -type TenantSecurityParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: path - */ - Namespace string - /* - Required: true - In: path - */ - Tenant string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewTenantSecurityParams() beforehand. -func (o *TenantSecurityParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - rNamespace, rhkNamespace, _ := route.Params.GetOK("namespace") - if err := o.bindNamespace(rNamespace, rhkNamespace, route.Formats); err != nil { - res = append(res, err) - } - - rTenant, rhkTenant, _ := route.Params.GetOK("tenant") - if err := o.bindTenant(rTenant, rhkTenant, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindNamespace binds and validates parameter Namespace from path. -func (o *TenantSecurityParams) bindNamespace(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Namespace = raw - - return nil -} - -// bindTenant binds and validates parameter Tenant from path. -func (o *TenantSecurityParams) bindTenant(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Tenant = raw - - return nil -} diff --git a/api/operations/operator_api/tenant_security_responses.go b/api/operations/operator_api/tenant_security_responses.go deleted file mode 100644 index e65bdcf1461..00000000000 --- a/api/operations/operator_api/tenant_security_responses.go +++ /dev/null @@ -1,135 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// TenantSecurityOKCode is the HTTP code returned for type TenantSecurityOK -const TenantSecurityOKCode int = 200 - -/* -TenantSecurityOK A successful response. - -swagger:response tenantSecurityOK -*/ -type TenantSecurityOK struct { - - /* - In: Body - */ - Payload *models.TenantSecurityResponse `json:"body,omitempty"` -} - -// NewTenantSecurityOK creates TenantSecurityOK with default headers values -func NewTenantSecurityOK() *TenantSecurityOK { - - return &TenantSecurityOK{} -} - -// WithPayload adds the payload to the tenant security o k response -func (o *TenantSecurityOK) WithPayload(payload *models.TenantSecurityResponse) *TenantSecurityOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the tenant security o k response -func (o *TenantSecurityOK) SetPayload(payload *models.TenantSecurityResponse) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *TenantSecurityOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} - -/* -TenantSecurityDefault Generic error response. - -swagger:response tenantSecurityDefault -*/ -type TenantSecurityDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewTenantSecurityDefault creates TenantSecurityDefault with default headers values -func NewTenantSecurityDefault(code int) *TenantSecurityDefault { - if code <= 0 { - code = 500 - } - - return &TenantSecurityDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the tenant security default response -func (o *TenantSecurityDefault) WithStatusCode(code int) *TenantSecurityDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the tenant security default response -func (o *TenantSecurityDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the tenant security default response -func (o *TenantSecurityDefault) WithPayload(payload *models.Error) *TenantSecurityDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the tenant security default response -func (o *TenantSecurityDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *TenantSecurityDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/tenant_security_urlbuilder.go b/api/operations/operator_api/tenant_security_urlbuilder.go deleted file mode 100644 index 6beeb604c0f..00000000000 --- a/api/operations/operator_api/tenant_security_urlbuilder.go +++ /dev/null @@ -1,124 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" -) - -// TenantSecurityURL generates an URL for the tenant security operation -type TenantSecurityURL struct { - Namespace string - Tenant string - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *TenantSecurityURL) WithBasePath(bp string) *TenantSecurityURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *TenantSecurityURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *TenantSecurityURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/namespaces/{namespace}/tenants/{tenant}/security" - - namespace := o.Namespace - if namespace != "" { - _path = strings.Replace(_path, "{namespace}", namespace, -1) - } else { - return nil, errors.New("namespace is required on TenantSecurityURL") - } - - tenant := o.Tenant - if tenant != "" { - _path = strings.Replace(_path, "{tenant}", tenant, -1) - } else { - return nil, errors.New("tenant is required on TenantSecurityURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *TenantSecurityURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *TenantSecurityURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *TenantSecurityURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on TenantSecurityURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on TenantSecurityURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *TenantSecurityURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/tenant_update_certificate.go b/api/operations/operator_api/tenant_update_certificate.go deleted file mode 100644 index 9125bafbea4..00000000000 --- a/api/operations/operator_api/tenant_update_certificate.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// TenantUpdateCertificateHandlerFunc turns a function with the right signature into a tenant update certificate handler -type TenantUpdateCertificateHandlerFunc func(TenantUpdateCertificateParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn TenantUpdateCertificateHandlerFunc) Handle(params TenantUpdateCertificateParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// TenantUpdateCertificateHandler interface for that can handle valid tenant update certificate params -type TenantUpdateCertificateHandler interface { - Handle(TenantUpdateCertificateParams, *models.Principal) middleware.Responder -} - -// NewTenantUpdateCertificate creates a new http.Handler for the tenant update certificate operation -func NewTenantUpdateCertificate(ctx *middleware.Context, handler TenantUpdateCertificateHandler) *TenantUpdateCertificate { - return &TenantUpdateCertificate{Context: ctx, Handler: handler} -} - -/* - TenantUpdateCertificate swagger:route PUT /namespaces/{namespace}/tenants/{tenant}/certificates OperatorAPI tenantUpdateCertificate - -Tenant Update Certificates -*/ -type TenantUpdateCertificate struct { - Context *middleware.Context - Handler TenantUpdateCertificateHandler -} - -func (o *TenantUpdateCertificate) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewTenantUpdateCertificateParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/tenant_update_certificate_parameters.go b/api/operations/operator_api/tenant_update_certificate_parameters.go deleted file mode 100644 index 9ed392e7a47..00000000000 --- a/api/operations/operator_api/tenant_update_certificate_parameters.go +++ /dev/null @@ -1,150 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "io" - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/validate" - - "github.com/minio/operator/models" -) - -// NewTenantUpdateCertificateParams creates a new TenantUpdateCertificateParams object -// -// There are no default values defined in the spec. -func NewTenantUpdateCertificateParams() TenantUpdateCertificateParams { - - return TenantUpdateCertificateParams{} -} - -// TenantUpdateCertificateParams contains all the bound params for the tenant update certificate operation -// typically these are obtained from a http.Request -// -// swagger:parameters TenantUpdateCertificate -type TenantUpdateCertificateParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: body - */ - Body *models.TLSConfiguration - /* - Required: true - In: path - */ - Namespace string - /* - Required: true - In: path - */ - Tenant string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewTenantUpdateCertificateParams() beforehand. -func (o *TenantUpdateCertificateParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - if runtime.HasBody(r) { - defer r.Body.Close() - var body models.TLSConfiguration - if err := route.Consumer.Consume(r.Body, &body); err != nil { - if err == io.EOF { - res = append(res, errors.Required("body", "body", "")) - } else { - res = append(res, errors.NewParseError("body", "body", "", err)) - } - } else { - // validate body object - if err := body.Validate(route.Formats); err != nil { - res = append(res, err) - } - - ctx := validate.WithOperationRequest(r.Context()) - if err := body.ContextValidate(ctx, route.Formats); err != nil { - res = append(res, err) - } - - if len(res) == 0 { - o.Body = &body - } - } - } else { - res = append(res, errors.Required("body", "body", "")) - } - - rNamespace, rhkNamespace, _ := route.Params.GetOK("namespace") - if err := o.bindNamespace(rNamespace, rhkNamespace, route.Formats); err != nil { - res = append(res, err) - } - - rTenant, rhkTenant, _ := route.Params.GetOK("tenant") - if err := o.bindTenant(rTenant, rhkTenant, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindNamespace binds and validates parameter Namespace from path. -func (o *TenantUpdateCertificateParams) bindNamespace(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Namespace = raw - - return nil -} - -// bindTenant binds and validates parameter Tenant from path. -func (o *TenantUpdateCertificateParams) bindTenant(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Tenant = raw - - return nil -} diff --git a/api/operations/operator_api/tenant_update_certificate_responses.go b/api/operations/operator_api/tenant_update_certificate_responses.go deleted file mode 100644 index 36fffd02229..00000000000 --- a/api/operations/operator_api/tenant_update_certificate_responses.go +++ /dev/null @@ -1,115 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// TenantUpdateCertificateCreatedCode is the HTTP code returned for type TenantUpdateCertificateCreated -const TenantUpdateCertificateCreatedCode int = 201 - -/* -TenantUpdateCertificateCreated A successful response. - -swagger:response tenantUpdateCertificateCreated -*/ -type TenantUpdateCertificateCreated struct { -} - -// NewTenantUpdateCertificateCreated creates TenantUpdateCertificateCreated with default headers values -func NewTenantUpdateCertificateCreated() *TenantUpdateCertificateCreated { - - return &TenantUpdateCertificateCreated{} -} - -// WriteResponse to the client -func (o *TenantUpdateCertificateCreated) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses - - rw.WriteHeader(201) -} - -/* -TenantUpdateCertificateDefault Generic error response. - -swagger:response tenantUpdateCertificateDefault -*/ -type TenantUpdateCertificateDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewTenantUpdateCertificateDefault creates TenantUpdateCertificateDefault with default headers values -func NewTenantUpdateCertificateDefault(code int) *TenantUpdateCertificateDefault { - if code <= 0 { - code = 500 - } - - return &TenantUpdateCertificateDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the tenant update certificate default response -func (o *TenantUpdateCertificateDefault) WithStatusCode(code int) *TenantUpdateCertificateDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the tenant update certificate default response -func (o *TenantUpdateCertificateDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the tenant update certificate default response -func (o *TenantUpdateCertificateDefault) WithPayload(payload *models.Error) *TenantUpdateCertificateDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the tenant update certificate default response -func (o *TenantUpdateCertificateDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *TenantUpdateCertificateDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/tenant_update_certificate_urlbuilder.go b/api/operations/operator_api/tenant_update_certificate_urlbuilder.go deleted file mode 100644 index 32d50905cff..00000000000 --- a/api/operations/operator_api/tenant_update_certificate_urlbuilder.go +++ /dev/null @@ -1,124 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" -) - -// TenantUpdateCertificateURL generates an URL for the tenant update certificate operation -type TenantUpdateCertificateURL struct { - Namespace string - Tenant string - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *TenantUpdateCertificateURL) WithBasePath(bp string) *TenantUpdateCertificateURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *TenantUpdateCertificateURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *TenantUpdateCertificateURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/namespaces/{namespace}/tenants/{tenant}/certificates" - - namespace := o.Namespace - if namespace != "" { - _path = strings.Replace(_path, "{namespace}", namespace, -1) - } else { - return nil, errors.New("namespace is required on TenantUpdateCertificateURL") - } - - tenant := o.Tenant - if tenant != "" { - _path = strings.Replace(_path, "{tenant}", tenant, -1) - } else { - return nil, errors.New("tenant is required on TenantUpdateCertificateURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *TenantUpdateCertificateURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *TenantUpdateCertificateURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *TenantUpdateCertificateURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on TenantUpdateCertificateURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on TenantUpdateCertificateURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *TenantUpdateCertificateURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/tenant_update_encryption.go b/api/operations/operator_api/tenant_update_encryption.go deleted file mode 100644 index 07cd209c390..00000000000 --- a/api/operations/operator_api/tenant_update_encryption.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// TenantUpdateEncryptionHandlerFunc turns a function with the right signature into a tenant update encryption handler -type TenantUpdateEncryptionHandlerFunc func(TenantUpdateEncryptionParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn TenantUpdateEncryptionHandlerFunc) Handle(params TenantUpdateEncryptionParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// TenantUpdateEncryptionHandler interface for that can handle valid tenant update encryption params -type TenantUpdateEncryptionHandler interface { - Handle(TenantUpdateEncryptionParams, *models.Principal) middleware.Responder -} - -// NewTenantUpdateEncryption creates a new http.Handler for the tenant update encryption operation -func NewTenantUpdateEncryption(ctx *middleware.Context, handler TenantUpdateEncryptionHandler) *TenantUpdateEncryption { - return &TenantUpdateEncryption{Context: ctx, Handler: handler} -} - -/* - TenantUpdateEncryption swagger:route PUT /namespaces/{namespace}/tenants/{tenant}/encryption OperatorAPI tenantUpdateEncryption - -Tenant Update Encryption -*/ -type TenantUpdateEncryption struct { - Context *middleware.Context - Handler TenantUpdateEncryptionHandler -} - -func (o *TenantUpdateEncryption) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewTenantUpdateEncryptionParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/tenant_update_encryption_parameters.go b/api/operations/operator_api/tenant_update_encryption_parameters.go deleted file mode 100644 index 615f6442fa3..00000000000 --- a/api/operations/operator_api/tenant_update_encryption_parameters.go +++ /dev/null @@ -1,150 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "io" - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/validate" - - "github.com/minio/operator/models" -) - -// NewTenantUpdateEncryptionParams creates a new TenantUpdateEncryptionParams object -// -// There are no default values defined in the spec. -func NewTenantUpdateEncryptionParams() TenantUpdateEncryptionParams { - - return TenantUpdateEncryptionParams{} -} - -// TenantUpdateEncryptionParams contains all the bound params for the tenant update encryption operation -// typically these are obtained from a http.Request -// -// swagger:parameters TenantUpdateEncryption -type TenantUpdateEncryptionParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: body - */ - Body *models.EncryptionConfiguration - /* - Required: true - In: path - */ - Namespace string - /* - Required: true - In: path - */ - Tenant string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewTenantUpdateEncryptionParams() beforehand. -func (o *TenantUpdateEncryptionParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - if runtime.HasBody(r) { - defer r.Body.Close() - var body models.EncryptionConfiguration - if err := route.Consumer.Consume(r.Body, &body); err != nil { - if err == io.EOF { - res = append(res, errors.Required("body", "body", "")) - } else { - res = append(res, errors.NewParseError("body", "body", "", err)) - } - } else { - // validate body object - if err := body.Validate(route.Formats); err != nil { - res = append(res, err) - } - - ctx := validate.WithOperationRequest(r.Context()) - if err := body.ContextValidate(ctx, route.Formats); err != nil { - res = append(res, err) - } - - if len(res) == 0 { - o.Body = &body - } - } - } else { - res = append(res, errors.Required("body", "body", "")) - } - - rNamespace, rhkNamespace, _ := route.Params.GetOK("namespace") - if err := o.bindNamespace(rNamespace, rhkNamespace, route.Formats); err != nil { - res = append(res, err) - } - - rTenant, rhkTenant, _ := route.Params.GetOK("tenant") - if err := o.bindTenant(rTenant, rhkTenant, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindNamespace binds and validates parameter Namespace from path. -func (o *TenantUpdateEncryptionParams) bindNamespace(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Namespace = raw - - return nil -} - -// bindTenant binds and validates parameter Tenant from path. -func (o *TenantUpdateEncryptionParams) bindTenant(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Tenant = raw - - return nil -} diff --git a/api/operations/operator_api/tenant_update_encryption_responses.go b/api/operations/operator_api/tenant_update_encryption_responses.go deleted file mode 100644 index 49d884df2c5..00000000000 --- a/api/operations/operator_api/tenant_update_encryption_responses.go +++ /dev/null @@ -1,115 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// TenantUpdateEncryptionCreatedCode is the HTTP code returned for type TenantUpdateEncryptionCreated -const TenantUpdateEncryptionCreatedCode int = 201 - -/* -TenantUpdateEncryptionCreated A successful response. - -swagger:response tenantUpdateEncryptionCreated -*/ -type TenantUpdateEncryptionCreated struct { -} - -// NewTenantUpdateEncryptionCreated creates TenantUpdateEncryptionCreated with default headers values -func NewTenantUpdateEncryptionCreated() *TenantUpdateEncryptionCreated { - - return &TenantUpdateEncryptionCreated{} -} - -// WriteResponse to the client -func (o *TenantUpdateEncryptionCreated) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses - - rw.WriteHeader(201) -} - -/* -TenantUpdateEncryptionDefault Generic error response. - -swagger:response tenantUpdateEncryptionDefault -*/ -type TenantUpdateEncryptionDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewTenantUpdateEncryptionDefault creates TenantUpdateEncryptionDefault with default headers values -func NewTenantUpdateEncryptionDefault(code int) *TenantUpdateEncryptionDefault { - if code <= 0 { - code = 500 - } - - return &TenantUpdateEncryptionDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the tenant update encryption default response -func (o *TenantUpdateEncryptionDefault) WithStatusCode(code int) *TenantUpdateEncryptionDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the tenant update encryption default response -func (o *TenantUpdateEncryptionDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the tenant update encryption default response -func (o *TenantUpdateEncryptionDefault) WithPayload(payload *models.Error) *TenantUpdateEncryptionDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the tenant update encryption default response -func (o *TenantUpdateEncryptionDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *TenantUpdateEncryptionDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/tenant_update_encryption_urlbuilder.go b/api/operations/operator_api/tenant_update_encryption_urlbuilder.go deleted file mode 100644 index f8010bbd22f..00000000000 --- a/api/operations/operator_api/tenant_update_encryption_urlbuilder.go +++ /dev/null @@ -1,124 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" -) - -// TenantUpdateEncryptionURL generates an URL for the tenant update encryption operation -type TenantUpdateEncryptionURL struct { - Namespace string - Tenant string - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *TenantUpdateEncryptionURL) WithBasePath(bp string) *TenantUpdateEncryptionURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *TenantUpdateEncryptionURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *TenantUpdateEncryptionURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/namespaces/{namespace}/tenants/{tenant}/encryption" - - namespace := o.Namespace - if namespace != "" { - _path = strings.Replace(_path, "{namespace}", namespace, -1) - } else { - return nil, errors.New("namespace is required on TenantUpdateEncryptionURL") - } - - tenant := o.Tenant - if tenant != "" { - _path = strings.Replace(_path, "{tenant}", tenant, -1) - } else { - return nil, errors.New("tenant is required on TenantUpdateEncryptionURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *TenantUpdateEncryptionURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *TenantUpdateEncryptionURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *TenantUpdateEncryptionURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on TenantUpdateEncryptionURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on TenantUpdateEncryptionURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *TenantUpdateEncryptionURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/tenant_update_pools.go b/api/operations/operator_api/tenant_update_pools.go deleted file mode 100644 index c1605508ad1..00000000000 --- a/api/operations/operator_api/tenant_update_pools.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// TenantUpdatePoolsHandlerFunc turns a function with the right signature into a tenant update pools handler -type TenantUpdatePoolsHandlerFunc func(TenantUpdatePoolsParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn TenantUpdatePoolsHandlerFunc) Handle(params TenantUpdatePoolsParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// TenantUpdatePoolsHandler interface for that can handle valid tenant update pools params -type TenantUpdatePoolsHandler interface { - Handle(TenantUpdatePoolsParams, *models.Principal) middleware.Responder -} - -// NewTenantUpdatePools creates a new http.Handler for the tenant update pools operation -func NewTenantUpdatePools(ctx *middleware.Context, handler TenantUpdatePoolsHandler) *TenantUpdatePools { - return &TenantUpdatePools{Context: ctx, Handler: handler} -} - -/* - TenantUpdatePools swagger:route PUT /namespaces/{namespace}/tenants/{tenant}/pools OperatorAPI tenantUpdatePools - -Tenant Update Pools -*/ -type TenantUpdatePools struct { - Context *middleware.Context - Handler TenantUpdatePoolsHandler -} - -func (o *TenantUpdatePools) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewTenantUpdatePoolsParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/tenant_update_pools_parameters.go b/api/operations/operator_api/tenant_update_pools_parameters.go deleted file mode 100644 index 5ac7f42a1e4..00000000000 --- a/api/operations/operator_api/tenant_update_pools_parameters.go +++ /dev/null @@ -1,150 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "io" - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/validate" - - "github.com/minio/operator/models" -) - -// NewTenantUpdatePoolsParams creates a new TenantUpdatePoolsParams object -// -// There are no default values defined in the spec. -func NewTenantUpdatePoolsParams() TenantUpdatePoolsParams { - - return TenantUpdatePoolsParams{} -} - -// TenantUpdatePoolsParams contains all the bound params for the tenant update pools operation -// typically these are obtained from a http.Request -// -// swagger:parameters TenantUpdatePools -type TenantUpdatePoolsParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: body - */ - Body *models.PoolUpdateRequest - /* - Required: true - In: path - */ - Namespace string - /* - Required: true - In: path - */ - Tenant string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewTenantUpdatePoolsParams() beforehand. -func (o *TenantUpdatePoolsParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - if runtime.HasBody(r) { - defer r.Body.Close() - var body models.PoolUpdateRequest - if err := route.Consumer.Consume(r.Body, &body); err != nil { - if err == io.EOF { - res = append(res, errors.Required("body", "body", "")) - } else { - res = append(res, errors.NewParseError("body", "body", "", err)) - } - } else { - // validate body object - if err := body.Validate(route.Formats); err != nil { - res = append(res, err) - } - - ctx := validate.WithOperationRequest(r.Context()) - if err := body.ContextValidate(ctx, route.Formats); err != nil { - res = append(res, err) - } - - if len(res) == 0 { - o.Body = &body - } - } - } else { - res = append(res, errors.Required("body", "body", "")) - } - - rNamespace, rhkNamespace, _ := route.Params.GetOK("namespace") - if err := o.bindNamespace(rNamespace, rhkNamespace, route.Formats); err != nil { - res = append(res, err) - } - - rTenant, rhkTenant, _ := route.Params.GetOK("tenant") - if err := o.bindTenant(rTenant, rhkTenant, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindNamespace binds and validates parameter Namespace from path. -func (o *TenantUpdatePoolsParams) bindNamespace(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Namespace = raw - - return nil -} - -// bindTenant binds and validates parameter Tenant from path. -func (o *TenantUpdatePoolsParams) bindTenant(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Tenant = raw - - return nil -} diff --git a/api/operations/operator_api/tenant_update_pools_responses.go b/api/operations/operator_api/tenant_update_pools_responses.go deleted file mode 100644 index bd14d41af63..00000000000 --- a/api/operations/operator_api/tenant_update_pools_responses.go +++ /dev/null @@ -1,135 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// TenantUpdatePoolsOKCode is the HTTP code returned for type TenantUpdatePoolsOK -const TenantUpdatePoolsOKCode int = 200 - -/* -TenantUpdatePoolsOK A successful response. - -swagger:response tenantUpdatePoolsOK -*/ -type TenantUpdatePoolsOK struct { - - /* - In: Body - */ - Payload *models.Tenant `json:"body,omitempty"` -} - -// NewTenantUpdatePoolsOK creates TenantUpdatePoolsOK with default headers values -func NewTenantUpdatePoolsOK() *TenantUpdatePoolsOK { - - return &TenantUpdatePoolsOK{} -} - -// WithPayload adds the payload to the tenant update pools o k response -func (o *TenantUpdatePoolsOK) WithPayload(payload *models.Tenant) *TenantUpdatePoolsOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the tenant update pools o k response -func (o *TenantUpdatePoolsOK) SetPayload(payload *models.Tenant) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *TenantUpdatePoolsOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} - -/* -TenantUpdatePoolsDefault Generic error response. - -swagger:response tenantUpdatePoolsDefault -*/ -type TenantUpdatePoolsDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewTenantUpdatePoolsDefault creates TenantUpdatePoolsDefault with default headers values -func NewTenantUpdatePoolsDefault(code int) *TenantUpdatePoolsDefault { - if code <= 0 { - code = 500 - } - - return &TenantUpdatePoolsDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the tenant update pools default response -func (o *TenantUpdatePoolsDefault) WithStatusCode(code int) *TenantUpdatePoolsDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the tenant update pools default response -func (o *TenantUpdatePoolsDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the tenant update pools default response -func (o *TenantUpdatePoolsDefault) WithPayload(payload *models.Error) *TenantUpdatePoolsDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the tenant update pools default response -func (o *TenantUpdatePoolsDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *TenantUpdatePoolsDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/tenant_update_pools_urlbuilder.go b/api/operations/operator_api/tenant_update_pools_urlbuilder.go deleted file mode 100644 index 679c625de4f..00000000000 --- a/api/operations/operator_api/tenant_update_pools_urlbuilder.go +++ /dev/null @@ -1,124 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" -) - -// TenantUpdatePoolsURL generates an URL for the tenant update pools operation -type TenantUpdatePoolsURL struct { - Namespace string - Tenant string - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *TenantUpdatePoolsURL) WithBasePath(bp string) *TenantUpdatePoolsURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *TenantUpdatePoolsURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *TenantUpdatePoolsURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/namespaces/{namespace}/tenants/{tenant}/pools" - - namespace := o.Namespace - if namespace != "" { - _path = strings.Replace(_path, "{namespace}", namespace, -1) - } else { - return nil, errors.New("namespace is required on TenantUpdatePoolsURL") - } - - tenant := o.Tenant - if tenant != "" { - _path = strings.Replace(_path, "{tenant}", tenant, -1) - } else { - return nil, errors.New("tenant is required on TenantUpdatePoolsURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *TenantUpdatePoolsURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *TenantUpdatePoolsURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *TenantUpdatePoolsURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on TenantUpdatePoolsURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on TenantUpdatePoolsURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *TenantUpdatePoolsURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/update_tenant.go b/api/operations/operator_api/update_tenant.go deleted file mode 100644 index 832c41720df..00000000000 --- a/api/operations/operator_api/update_tenant.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// UpdateTenantHandlerFunc turns a function with the right signature into a update tenant handler -type UpdateTenantHandlerFunc func(UpdateTenantParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn UpdateTenantHandlerFunc) Handle(params UpdateTenantParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// UpdateTenantHandler interface for that can handle valid update tenant params -type UpdateTenantHandler interface { - Handle(UpdateTenantParams, *models.Principal) middleware.Responder -} - -// NewUpdateTenant creates a new http.Handler for the update tenant operation -func NewUpdateTenant(ctx *middleware.Context, handler UpdateTenantHandler) *UpdateTenant { - return &UpdateTenant{Context: ctx, Handler: handler} -} - -/* - UpdateTenant swagger:route PUT /namespaces/{namespace}/tenants/{tenant} OperatorAPI updateTenant - -Update Tenant -*/ -type UpdateTenant struct { - Context *middleware.Context - Handler UpdateTenantHandler -} - -func (o *UpdateTenant) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewUpdateTenantParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/update_tenant_configuration.go b/api/operations/operator_api/update_tenant_configuration.go deleted file mode 100644 index a833fabc2eb..00000000000 --- a/api/operations/operator_api/update_tenant_configuration.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// UpdateTenantConfigurationHandlerFunc turns a function with the right signature into a update tenant configuration handler -type UpdateTenantConfigurationHandlerFunc func(UpdateTenantConfigurationParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn UpdateTenantConfigurationHandlerFunc) Handle(params UpdateTenantConfigurationParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// UpdateTenantConfigurationHandler interface for that can handle valid update tenant configuration params -type UpdateTenantConfigurationHandler interface { - Handle(UpdateTenantConfigurationParams, *models.Principal) middleware.Responder -} - -// NewUpdateTenantConfiguration creates a new http.Handler for the update tenant configuration operation -func NewUpdateTenantConfiguration(ctx *middleware.Context, handler UpdateTenantConfigurationHandler) *UpdateTenantConfiguration { - return &UpdateTenantConfiguration{Context: ctx, Handler: handler} -} - -/* - UpdateTenantConfiguration swagger:route PATCH /namespaces/{namespace}/tenants/{tenant}/configuration OperatorAPI updateTenantConfiguration - -Update Tenant Configuration -*/ -type UpdateTenantConfiguration struct { - Context *middleware.Context - Handler UpdateTenantConfigurationHandler -} - -func (o *UpdateTenantConfiguration) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewUpdateTenantConfigurationParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/update_tenant_configuration_parameters.go b/api/operations/operator_api/update_tenant_configuration_parameters.go deleted file mode 100644 index 6452f4655ef..00000000000 --- a/api/operations/operator_api/update_tenant_configuration_parameters.go +++ /dev/null @@ -1,150 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "io" - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/validate" - - "github.com/minio/operator/models" -) - -// NewUpdateTenantConfigurationParams creates a new UpdateTenantConfigurationParams object -// -// There are no default values defined in the spec. -func NewUpdateTenantConfigurationParams() UpdateTenantConfigurationParams { - - return UpdateTenantConfigurationParams{} -} - -// UpdateTenantConfigurationParams contains all the bound params for the update tenant configuration operation -// typically these are obtained from a http.Request -// -// swagger:parameters UpdateTenantConfiguration -type UpdateTenantConfigurationParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: body - */ - Body *models.UpdateTenantConfigurationRequest - /* - Required: true - In: path - */ - Namespace string - /* - Required: true - In: path - */ - Tenant string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewUpdateTenantConfigurationParams() beforehand. -func (o *UpdateTenantConfigurationParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - if runtime.HasBody(r) { - defer r.Body.Close() - var body models.UpdateTenantConfigurationRequest - if err := route.Consumer.Consume(r.Body, &body); err != nil { - if err == io.EOF { - res = append(res, errors.Required("body", "body", "")) - } else { - res = append(res, errors.NewParseError("body", "body", "", err)) - } - } else { - // validate body object - if err := body.Validate(route.Formats); err != nil { - res = append(res, err) - } - - ctx := validate.WithOperationRequest(r.Context()) - if err := body.ContextValidate(ctx, route.Formats); err != nil { - res = append(res, err) - } - - if len(res) == 0 { - o.Body = &body - } - } - } else { - res = append(res, errors.Required("body", "body", "")) - } - - rNamespace, rhkNamespace, _ := route.Params.GetOK("namespace") - if err := o.bindNamespace(rNamespace, rhkNamespace, route.Formats); err != nil { - res = append(res, err) - } - - rTenant, rhkTenant, _ := route.Params.GetOK("tenant") - if err := o.bindTenant(rTenant, rhkTenant, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindNamespace binds and validates parameter Namespace from path. -func (o *UpdateTenantConfigurationParams) bindNamespace(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Namespace = raw - - return nil -} - -// bindTenant binds and validates parameter Tenant from path. -func (o *UpdateTenantConfigurationParams) bindTenant(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Tenant = raw - - return nil -} diff --git a/api/operations/operator_api/update_tenant_configuration_responses.go b/api/operations/operator_api/update_tenant_configuration_responses.go deleted file mode 100644 index ad2e129e844..00000000000 --- a/api/operations/operator_api/update_tenant_configuration_responses.go +++ /dev/null @@ -1,115 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// UpdateTenantConfigurationNoContentCode is the HTTP code returned for type UpdateTenantConfigurationNoContent -const UpdateTenantConfigurationNoContentCode int = 204 - -/* -UpdateTenantConfigurationNoContent A successful response. - -swagger:response updateTenantConfigurationNoContent -*/ -type UpdateTenantConfigurationNoContent struct { -} - -// NewUpdateTenantConfigurationNoContent creates UpdateTenantConfigurationNoContent with default headers values -func NewUpdateTenantConfigurationNoContent() *UpdateTenantConfigurationNoContent { - - return &UpdateTenantConfigurationNoContent{} -} - -// WriteResponse to the client -func (o *UpdateTenantConfigurationNoContent) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses - - rw.WriteHeader(204) -} - -/* -UpdateTenantConfigurationDefault Generic error response. - -swagger:response updateTenantConfigurationDefault -*/ -type UpdateTenantConfigurationDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewUpdateTenantConfigurationDefault creates UpdateTenantConfigurationDefault with default headers values -func NewUpdateTenantConfigurationDefault(code int) *UpdateTenantConfigurationDefault { - if code <= 0 { - code = 500 - } - - return &UpdateTenantConfigurationDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the update tenant configuration default response -func (o *UpdateTenantConfigurationDefault) WithStatusCode(code int) *UpdateTenantConfigurationDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the update tenant configuration default response -func (o *UpdateTenantConfigurationDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the update tenant configuration default response -func (o *UpdateTenantConfigurationDefault) WithPayload(payload *models.Error) *UpdateTenantConfigurationDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the update tenant configuration default response -func (o *UpdateTenantConfigurationDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *UpdateTenantConfigurationDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/update_tenant_configuration_urlbuilder.go b/api/operations/operator_api/update_tenant_configuration_urlbuilder.go deleted file mode 100644 index e722760208e..00000000000 --- a/api/operations/operator_api/update_tenant_configuration_urlbuilder.go +++ /dev/null @@ -1,124 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" -) - -// UpdateTenantConfigurationURL generates an URL for the update tenant configuration operation -type UpdateTenantConfigurationURL struct { - Namespace string - Tenant string - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *UpdateTenantConfigurationURL) WithBasePath(bp string) *UpdateTenantConfigurationURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *UpdateTenantConfigurationURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *UpdateTenantConfigurationURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/namespaces/{namespace}/tenants/{tenant}/configuration" - - namespace := o.Namespace - if namespace != "" { - _path = strings.Replace(_path, "{namespace}", namespace, -1) - } else { - return nil, errors.New("namespace is required on UpdateTenantConfigurationURL") - } - - tenant := o.Tenant - if tenant != "" { - _path = strings.Replace(_path, "{tenant}", tenant, -1) - } else { - return nil, errors.New("tenant is required on UpdateTenantConfigurationURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *UpdateTenantConfigurationURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *UpdateTenantConfigurationURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *UpdateTenantConfigurationURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on UpdateTenantConfigurationURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on UpdateTenantConfigurationURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *UpdateTenantConfigurationURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/update_tenant_domains.go b/api/operations/operator_api/update_tenant_domains.go deleted file mode 100644 index f53c33a02dd..00000000000 --- a/api/operations/operator_api/update_tenant_domains.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// UpdateTenantDomainsHandlerFunc turns a function with the right signature into a update tenant domains handler -type UpdateTenantDomainsHandlerFunc func(UpdateTenantDomainsParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn UpdateTenantDomainsHandlerFunc) Handle(params UpdateTenantDomainsParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// UpdateTenantDomainsHandler interface for that can handle valid update tenant domains params -type UpdateTenantDomainsHandler interface { - Handle(UpdateTenantDomainsParams, *models.Principal) middleware.Responder -} - -// NewUpdateTenantDomains creates a new http.Handler for the update tenant domains operation -func NewUpdateTenantDomains(ctx *middleware.Context, handler UpdateTenantDomainsHandler) *UpdateTenantDomains { - return &UpdateTenantDomains{Context: ctx, Handler: handler} -} - -/* - UpdateTenantDomains swagger:route PUT /namespaces/{namespace}/tenants/{tenant}/domains OperatorAPI updateTenantDomains - -Update Domains for a Tenant -*/ -type UpdateTenantDomains struct { - Context *middleware.Context - Handler UpdateTenantDomainsHandler -} - -func (o *UpdateTenantDomains) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewUpdateTenantDomainsParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/update_tenant_domains_parameters.go b/api/operations/operator_api/update_tenant_domains_parameters.go deleted file mode 100644 index 5136acbb407..00000000000 --- a/api/operations/operator_api/update_tenant_domains_parameters.go +++ /dev/null @@ -1,150 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "io" - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/validate" - - "github.com/minio/operator/models" -) - -// NewUpdateTenantDomainsParams creates a new UpdateTenantDomainsParams object -// -// There are no default values defined in the spec. -func NewUpdateTenantDomainsParams() UpdateTenantDomainsParams { - - return UpdateTenantDomainsParams{} -} - -// UpdateTenantDomainsParams contains all the bound params for the update tenant domains operation -// typically these are obtained from a http.Request -// -// swagger:parameters UpdateTenantDomains -type UpdateTenantDomainsParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: body - */ - Body *models.UpdateDomainsRequest - /* - Required: true - In: path - */ - Namespace string - /* - Required: true - In: path - */ - Tenant string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewUpdateTenantDomainsParams() beforehand. -func (o *UpdateTenantDomainsParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - if runtime.HasBody(r) { - defer r.Body.Close() - var body models.UpdateDomainsRequest - if err := route.Consumer.Consume(r.Body, &body); err != nil { - if err == io.EOF { - res = append(res, errors.Required("body", "body", "")) - } else { - res = append(res, errors.NewParseError("body", "body", "", err)) - } - } else { - // validate body object - if err := body.Validate(route.Formats); err != nil { - res = append(res, err) - } - - ctx := validate.WithOperationRequest(r.Context()) - if err := body.ContextValidate(ctx, route.Formats); err != nil { - res = append(res, err) - } - - if len(res) == 0 { - o.Body = &body - } - } - } else { - res = append(res, errors.Required("body", "body", "")) - } - - rNamespace, rhkNamespace, _ := route.Params.GetOK("namespace") - if err := o.bindNamespace(rNamespace, rhkNamespace, route.Formats); err != nil { - res = append(res, err) - } - - rTenant, rhkTenant, _ := route.Params.GetOK("tenant") - if err := o.bindTenant(rTenant, rhkTenant, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindNamespace binds and validates parameter Namespace from path. -func (o *UpdateTenantDomainsParams) bindNamespace(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Namespace = raw - - return nil -} - -// bindTenant binds and validates parameter Tenant from path. -func (o *UpdateTenantDomainsParams) bindTenant(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Tenant = raw - - return nil -} diff --git a/api/operations/operator_api/update_tenant_domains_responses.go b/api/operations/operator_api/update_tenant_domains_responses.go deleted file mode 100644 index 6bc248fa551..00000000000 --- a/api/operations/operator_api/update_tenant_domains_responses.go +++ /dev/null @@ -1,115 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// UpdateTenantDomainsNoContentCode is the HTTP code returned for type UpdateTenantDomainsNoContent -const UpdateTenantDomainsNoContentCode int = 204 - -/* -UpdateTenantDomainsNoContent A successful response. - -swagger:response updateTenantDomainsNoContent -*/ -type UpdateTenantDomainsNoContent struct { -} - -// NewUpdateTenantDomainsNoContent creates UpdateTenantDomainsNoContent with default headers values -func NewUpdateTenantDomainsNoContent() *UpdateTenantDomainsNoContent { - - return &UpdateTenantDomainsNoContent{} -} - -// WriteResponse to the client -func (o *UpdateTenantDomainsNoContent) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses - - rw.WriteHeader(204) -} - -/* -UpdateTenantDomainsDefault Generic error response. - -swagger:response updateTenantDomainsDefault -*/ -type UpdateTenantDomainsDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewUpdateTenantDomainsDefault creates UpdateTenantDomainsDefault with default headers values -func NewUpdateTenantDomainsDefault(code int) *UpdateTenantDomainsDefault { - if code <= 0 { - code = 500 - } - - return &UpdateTenantDomainsDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the update tenant domains default response -func (o *UpdateTenantDomainsDefault) WithStatusCode(code int) *UpdateTenantDomainsDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the update tenant domains default response -func (o *UpdateTenantDomainsDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the update tenant domains default response -func (o *UpdateTenantDomainsDefault) WithPayload(payload *models.Error) *UpdateTenantDomainsDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the update tenant domains default response -func (o *UpdateTenantDomainsDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *UpdateTenantDomainsDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/update_tenant_domains_urlbuilder.go b/api/operations/operator_api/update_tenant_domains_urlbuilder.go deleted file mode 100644 index a787f1c4fff..00000000000 --- a/api/operations/operator_api/update_tenant_domains_urlbuilder.go +++ /dev/null @@ -1,124 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" -) - -// UpdateTenantDomainsURL generates an URL for the update tenant domains operation -type UpdateTenantDomainsURL struct { - Namespace string - Tenant string - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *UpdateTenantDomainsURL) WithBasePath(bp string) *UpdateTenantDomainsURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *UpdateTenantDomainsURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *UpdateTenantDomainsURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/namespaces/{namespace}/tenants/{tenant}/domains" - - namespace := o.Namespace - if namespace != "" { - _path = strings.Replace(_path, "{namespace}", namespace, -1) - } else { - return nil, errors.New("namespace is required on UpdateTenantDomainsURL") - } - - tenant := o.Tenant - if tenant != "" { - _path = strings.Replace(_path, "{tenant}", tenant, -1) - } else { - return nil, errors.New("tenant is required on UpdateTenantDomainsURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *UpdateTenantDomainsURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *UpdateTenantDomainsURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *UpdateTenantDomainsURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on UpdateTenantDomainsURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on UpdateTenantDomainsURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *UpdateTenantDomainsURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/update_tenant_identity_provider.go b/api/operations/operator_api/update_tenant_identity_provider.go deleted file mode 100644 index 20e016800d6..00000000000 --- a/api/operations/operator_api/update_tenant_identity_provider.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// UpdateTenantIdentityProviderHandlerFunc turns a function with the right signature into a update tenant identity provider handler -type UpdateTenantIdentityProviderHandlerFunc func(UpdateTenantIdentityProviderParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn UpdateTenantIdentityProviderHandlerFunc) Handle(params UpdateTenantIdentityProviderParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// UpdateTenantIdentityProviderHandler interface for that can handle valid update tenant identity provider params -type UpdateTenantIdentityProviderHandler interface { - Handle(UpdateTenantIdentityProviderParams, *models.Principal) middleware.Responder -} - -// NewUpdateTenantIdentityProvider creates a new http.Handler for the update tenant identity provider operation -func NewUpdateTenantIdentityProvider(ctx *middleware.Context, handler UpdateTenantIdentityProviderHandler) *UpdateTenantIdentityProvider { - return &UpdateTenantIdentityProvider{Context: ctx, Handler: handler} -} - -/* - UpdateTenantIdentityProvider swagger:route POST /namespaces/{namespace}/tenants/{tenant}/identity-provider OperatorAPI updateTenantIdentityProvider - -Update Tenant Identity Provider -*/ -type UpdateTenantIdentityProvider struct { - Context *middleware.Context - Handler UpdateTenantIdentityProviderHandler -} - -func (o *UpdateTenantIdentityProvider) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewUpdateTenantIdentityProviderParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/update_tenant_identity_provider_parameters.go b/api/operations/operator_api/update_tenant_identity_provider_parameters.go deleted file mode 100644 index 98337dce230..00000000000 --- a/api/operations/operator_api/update_tenant_identity_provider_parameters.go +++ /dev/null @@ -1,150 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "io" - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/validate" - - "github.com/minio/operator/models" -) - -// NewUpdateTenantIdentityProviderParams creates a new UpdateTenantIdentityProviderParams object -// -// There are no default values defined in the spec. -func NewUpdateTenantIdentityProviderParams() UpdateTenantIdentityProviderParams { - - return UpdateTenantIdentityProviderParams{} -} - -// UpdateTenantIdentityProviderParams contains all the bound params for the update tenant identity provider operation -// typically these are obtained from a http.Request -// -// swagger:parameters UpdateTenantIdentityProvider -type UpdateTenantIdentityProviderParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: body - */ - Body *models.IdpConfiguration - /* - Required: true - In: path - */ - Namespace string - /* - Required: true - In: path - */ - Tenant string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewUpdateTenantIdentityProviderParams() beforehand. -func (o *UpdateTenantIdentityProviderParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - if runtime.HasBody(r) { - defer r.Body.Close() - var body models.IdpConfiguration - if err := route.Consumer.Consume(r.Body, &body); err != nil { - if err == io.EOF { - res = append(res, errors.Required("body", "body", "")) - } else { - res = append(res, errors.NewParseError("body", "body", "", err)) - } - } else { - // validate body object - if err := body.Validate(route.Formats); err != nil { - res = append(res, err) - } - - ctx := validate.WithOperationRequest(r.Context()) - if err := body.ContextValidate(ctx, route.Formats); err != nil { - res = append(res, err) - } - - if len(res) == 0 { - o.Body = &body - } - } - } else { - res = append(res, errors.Required("body", "body", "")) - } - - rNamespace, rhkNamespace, _ := route.Params.GetOK("namespace") - if err := o.bindNamespace(rNamespace, rhkNamespace, route.Formats); err != nil { - res = append(res, err) - } - - rTenant, rhkTenant, _ := route.Params.GetOK("tenant") - if err := o.bindTenant(rTenant, rhkTenant, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindNamespace binds and validates parameter Namespace from path. -func (o *UpdateTenantIdentityProviderParams) bindNamespace(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Namespace = raw - - return nil -} - -// bindTenant binds and validates parameter Tenant from path. -func (o *UpdateTenantIdentityProviderParams) bindTenant(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Tenant = raw - - return nil -} diff --git a/api/operations/operator_api/update_tenant_identity_provider_responses.go b/api/operations/operator_api/update_tenant_identity_provider_responses.go deleted file mode 100644 index 5fbabd69238..00000000000 --- a/api/operations/operator_api/update_tenant_identity_provider_responses.go +++ /dev/null @@ -1,115 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// UpdateTenantIdentityProviderNoContentCode is the HTTP code returned for type UpdateTenantIdentityProviderNoContent -const UpdateTenantIdentityProviderNoContentCode int = 204 - -/* -UpdateTenantIdentityProviderNoContent A successful response. - -swagger:response updateTenantIdentityProviderNoContent -*/ -type UpdateTenantIdentityProviderNoContent struct { -} - -// NewUpdateTenantIdentityProviderNoContent creates UpdateTenantIdentityProviderNoContent with default headers values -func NewUpdateTenantIdentityProviderNoContent() *UpdateTenantIdentityProviderNoContent { - - return &UpdateTenantIdentityProviderNoContent{} -} - -// WriteResponse to the client -func (o *UpdateTenantIdentityProviderNoContent) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses - - rw.WriteHeader(204) -} - -/* -UpdateTenantIdentityProviderDefault Generic error response. - -swagger:response updateTenantIdentityProviderDefault -*/ -type UpdateTenantIdentityProviderDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewUpdateTenantIdentityProviderDefault creates UpdateTenantIdentityProviderDefault with default headers values -func NewUpdateTenantIdentityProviderDefault(code int) *UpdateTenantIdentityProviderDefault { - if code <= 0 { - code = 500 - } - - return &UpdateTenantIdentityProviderDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the update tenant identity provider default response -func (o *UpdateTenantIdentityProviderDefault) WithStatusCode(code int) *UpdateTenantIdentityProviderDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the update tenant identity provider default response -func (o *UpdateTenantIdentityProviderDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the update tenant identity provider default response -func (o *UpdateTenantIdentityProviderDefault) WithPayload(payload *models.Error) *UpdateTenantIdentityProviderDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the update tenant identity provider default response -func (o *UpdateTenantIdentityProviderDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *UpdateTenantIdentityProviderDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/update_tenant_identity_provider_urlbuilder.go b/api/operations/operator_api/update_tenant_identity_provider_urlbuilder.go deleted file mode 100644 index f4ad87cab17..00000000000 --- a/api/operations/operator_api/update_tenant_identity_provider_urlbuilder.go +++ /dev/null @@ -1,124 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" -) - -// UpdateTenantIdentityProviderURL generates an URL for the update tenant identity provider operation -type UpdateTenantIdentityProviderURL struct { - Namespace string - Tenant string - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *UpdateTenantIdentityProviderURL) WithBasePath(bp string) *UpdateTenantIdentityProviderURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *UpdateTenantIdentityProviderURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *UpdateTenantIdentityProviderURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/namespaces/{namespace}/tenants/{tenant}/identity-provider" - - namespace := o.Namespace - if namespace != "" { - _path = strings.Replace(_path, "{namespace}", namespace, -1) - } else { - return nil, errors.New("namespace is required on UpdateTenantIdentityProviderURL") - } - - tenant := o.Tenant - if tenant != "" { - _path = strings.Replace(_path, "{tenant}", tenant, -1) - } else { - return nil, errors.New("tenant is required on UpdateTenantIdentityProviderURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *UpdateTenantIdentityProviderURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *UpdateTenantIdentityProviderURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *UpdateTenantIdentityProviderURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on UpdateTenantIdentityProviderURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on UpdateTenantIdentityProviderURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *UpdateTenantIdentityProviderURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/update_tenant_parameters.go b/api/operations/operator_api/update_tenant_parameters.go deleted file mode 100644 index 41c7ce65d8c..00000000000 --- a/api/operations/operator_api/update_tenant_parameters.go +++ /dev/null @@ -1,150 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "io" - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/validate" - - "github.com/minio/operator/models" -) - -// NewUpdateTenantParams creates a new UpdateTenantParams object -// -// There are no default values defined in the spec. -func NewUpdateTenantParams() UpdateTenantParams { - - return UpdateTenantParams{} -} - -// UpdateTenantParams contains all the bound params for the update tenant operation -// typically these are obtained from a http.Request -// -// swagger:parameters UpdateTenant -type UpdateTenantParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: body - */ - Body *models.UpdateTenantRequest - /* - Required: true - In: path - */ - Namespace string - /* - Required: true - In: path - */ - Tenant string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewUpdateTenantParams() beforehand. -func (o *UpdateTenantParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - if runtime.HasBody(r) { - defer r.Body.Close() - var body models.UpdateTenantRequest - if err := route.Consumer.Consume(r.Body, &body); err != nil { - if err == io.EOF { - res = append(res, errors.Required("body", "body", "")) - } else { - res = append(res, errors.NewParseError("body", "body", "", err)) - } - } else { - // validate body object - if err := body.Validate(route.Formats); err != nil { - res = append(res, err) - } - - ctx := validate.WithOperationRequest(r.Context()) - if err := body.ContextValidate(ctx, route.Formats); err != nil { - res = append(res, err) - } - - if len(res) == 0 { - o.Body = &body - } - } - } else { - res = append(res, errors.Required("body", "body", "")) - } - - rNamespace, rhkNamespace, _ := route.Params.GetOK("namespace") - if err := o.bindNamespace(rNamespace, rhkNamespace, route.Formats); err != nil { - res = append(res, err) - } - - rTenant, rhkTenant, _ := route.Params.GetOK("tenant") - if err := o.bindTenant(rTenant, rhkTenant, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindNamespace binds and validates parameter Namespace from path. -func (o *UpdateTenantParams) bindNamespace(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Namespace = raw - - return nil -} - -// bindTenant binds and validates parameter Tenant from path. -func (o *UpdateTenantParams) bindTenant(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Tenant = raw - - return nil -} diff --git a/api/operations/operator_api/update_tenant_responses.go b/api/operations/operator_api/update_tenant_responses.go deleted file mode 100644 index 2cbce777af4..00000000000 --- a/api/operations/operator_api/update_tenant_responses.go +++ /dev/null @@ -1,115 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// UpdateTenantCreatedCode is the HTTP code returned for type UpdateTenantCreated -const UpdateTenantCreatedCode int = 201 - -/* -UpdateTenantCreated A successful response. - -swagger:response updateTenantCreated -*/ -type UpdateTenantCreated struct { -} - -// NewUpdateTenantCreated creates UpdateTenantCreated with default headers values -func NewUpdateTenantCreated() *UpdateTenantCreated { - - return &UpdateTenantCreated{} -} - -// WriteResponse to the client -func (o *UpdateTenantCreated) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses - - rw.WriteHeader(201) -} - -/* -UpdateTenantDefault Generic error response. - -swagger:response updateTenantDefault -*/ -type UpdateTenantDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewUpdateTenantDefault creates UpdateTenantDefault with default headers values -func NewUpdateTenantDefault(code int) *UpdateTenantDefault { - if code <= 0 { - code = 500 - } - - return &UpdateTenantDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the update tenant default response -func (o *UpdateTenantDefault) WithStatusCode(code int) *UpdateTenantDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the update tenant default response -func (o *UpdateTenantDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the update tenant default response -func (o *UpdateTenantDefault) WithPayload(payload *models.Error) *UpdateTenantDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the update tenant default response -func (o *UpdateTenantDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *UpdateTenantDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/update_tenant_security.go b/api/operations/operator_api/update_tenant_security.go deleted file mode 100644 index ddbd8abfa0a..00000000000 --- a/api/operations/operator_api/update_tenant_security.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/minio/operator/models" -) - -// UpdateTenantSecurityHandlerFunc turns a function with the right signature into a update tenant security handler -type UpdateTenantSecurityHandlerFunc func(UpdateTenantSecurityParams, *models.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn UpdateTenantSecurityHandlerFunc) Handle(params UpdateTenantSecurityParams, principal *models.Principal) middleware.Responder { - return fn(params, principal) -} - -// UpdateTenantSecurityHandler interface for that can handle valid update tenant security params -type UpdateTenantSecurityHandler interface { - Handle(UpdateTenantSecurityParams, *models.Principal) middleware.Responder -} - -// NewUpdateTenantSecurity creates a new http.Handler for the update tenant security operation -func NewUpdateTenantSecurity(ctx *middleware.Context, handler UpdateTenantSecurityHandler) *UpdateTenantSecurity { - return &UpdateTenantSecurity{Context: ctx, Handler: handler} -} - -/* - UpdateTenantSecurity swagger:route POST /namespaces/{namespace}/tenants/{tenant}/security OperatorAPI updateTenantSecurity - -Update Tenant Security -*/ -type UpdateTenantSecurity struct { - Context *middleware.Context - Handler UpdateTenantSecurityHandler -} - -func (o *UpdateTenantSecurity) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewUpdateTenantSecurityParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *models.Principal - if uprinc != nil { - principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/operator_api/update_tenant_security_parameters.go b/api/operations/operator_api/update_tenant_security_parameters.go deleted file mode 100644 index 8313542ef90..00000000000 --- a/api/operations/operator_api/update_tenant_security_parameters.go +++ /dev/null @@ -1,150 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "io" - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/validate" - - "github.com/minio/operator/models" -) - -// NewUpdateTenantSecurityParams creates a new UpdateTenantSecurityParams object -// -// There are no default values defined in the spec. -func NewUpdateTenantSecurityParams() UpdateTenantSecurityParams { - - return UpdateTenantSecurityParams{} -} - -// UpdateTenantSecurityParams contains all the bound params for the update tenant security operation -// typically these are obtained from a http.Request -// -// swagger:parameters UpdateTenantSecurity -type UpdateTenantSecurityParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: body - */ - Body *models.UpdateTenantSecurityRequest - /* - Required: true - In: path - */ - Namespace string - /* - Required: true - In: path - */ - Tenant string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewUpdateTenantSecurityParams() beforehand. -func (o *UpdateTenantSecurityParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - if runtime.HasBody(r) { - defer r.Body.Close() - var body models.UpdateTenantSecurityRequest - if err := route.Consumer.Consume(r.Body, &body); err != nil { - if err == io.EOF { - res = append(res, errors.Required("body", "body", "")) - } else { - res = append(res, errors.NewParseError("body", "body", "", err)) - } - } else { - // validate body object - if err := body.Validate(route.Formats); err != nil { - res = append(res, err) - } - - ctx := validate.WithOperationRequest(r.Context()) - if err := body.ContextValidate(ctx, route.Formats); err != nil { - res = append(res, err) - } - - if len(res) == 0 { - o.Body = &body - } - } - } else { - res = append(res, errors.Required("body", "body", "")) - } - - rNamespace, rhkNamespace, _ := route.Params.GetOK("namespace") - if err := o.bindNamespace(rNamespace, rhkNamespace, route.Formats); err != nil { - res = append(res, err) - } - - rTenant, rhkTenant, _ := route.Params.GetOK("tenant") - if err := o.bindTenant(rTenant, rhkTenant, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindNamespace binds and validates parameter Namespace from path. -func (o *UpdateTenantSecurityParams) bindNamespace(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Namespace = raw - - return nil -} - -// bindTenant binds and validates parameter Tenant from path. -func (o *UpdateTenantSecurityParams) bindTenant(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.Tenant = raw - - return nil -} diff --git a/api/operations/operator_api/update_tenant_security_responses.go b/api/operations/operator_api/update_tenant_security_responses.go deleted file mode 100644 index 18aa4e1b973..00000000000 --- a/api/operations/operator_api/update_tenant_security_responses.go +++ /dev/null @@ -1,115 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// UpdateTenantSecurityNoContentCode is the HTTP code returned for type UpdateTenantSecurityNoContent -const UpdateTenantSecurityNoContentCode int = 204 - -/* -UpdateTenantSecurityNoContent A successful response. - -swagger:response updateTenantSecurityNoContent -*/ -type UpdateTenantSecurityNoContent struct { -} - -// NewUpdateTenantSecurityNoContent creates UpdateTenantSecurityNoContent with default headers values -func NewUpdateTenantSecurityNoContent() *UpdateTenantSecurityNoContent { - - return &UpdateTenantSecurityNoContent{} -} - -// WriteResponse to the client -func (o *UpdateTenantSecurityNoContent) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses - - rw.WriteHeader(204) -} - -/* -UpdateTenantSecurityDefault Generic error response. - -swagger:response updateTenantSecurityDefault -*/ -type UpdateTenantSecurityDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewUpdateTenantSecurityDefault creates UpdateTenantSecurityDefault with default headers values -func NewUpdateTenantSecurityDefault(code int) *UpdateTenantSecurityDefault { - if code <= 0 { - code = 500 - } - - return &UpdateTenantSecurityDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the update tenant security default response -func (o *UpdateTenantSecurityDefault) WithStatusCode(code int) *UpdateTenantSecurityDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the update tenant security default response -func (o *UpdateTenantSecurityDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the update tenant security default response -func (o *UpdateTenantSecurityDefault) WithPayload(payload *models.Error) *UpdateTenantSecurityDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the update tenant security default response -func (o *UpdateTenantSecurityDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *UpdateTenantSecurityDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/operator_api/update_tenant_security_urlbuilder.go b/api/operations/operator_api/update_tenant_security_urlbuilder.go deleted file mode 100644 index 056bf676557..00000000000 --- a/api/operations/operator_api/update_tenant_security_urlbuilder.go +++ /dev/null @@ -1,124 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" -) - -// UpdateTenantSecurityURL generates an URL for the update tenant security operation -type UpdateTenantSecurityURL struct { - Namespace string - Tenant string - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *UpdateTenantSecurityURL) WithBasePath(bp string) *UpdateTenantSecurityURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *UpdateTenantSecurityURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *UpdateTenantSecurityURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/namespaces/{namespace}/tenants/{tenant}/security" - - namespace := o.Namespace - if namespace != "" { - _path = strings.Replace(_path, "{namespace}", namespace, -1) - } else { - return nil, errors.New("namespace is required on UpdateTenantSecurityURL") - } - - tenant := o.Tenant - if tenant != "" { - _path = strings.Replace(_path, "{tenant}", tenant, -1) - } else { - return nil, errors.New("tenant is required on UpdateTenantSecurityURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *UpdateTenantSecurityURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *UpdateTenantSecurityURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *UpdateTenantSecurityURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on UpdateTenantSecurityURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on UpdateTenantSecurityURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *UpdateTenantSecurityURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/operator_api/update_tenant_urlbuilder.go b/api/operations/operator_api/update_tenant_urlbuilder.go deleted file mode 100644 index b42447a23f7..00000000000 --- a/api/operations/operator_api/update_tenant_urlbuilder.go +++ /dev/null @@ -1,124 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package operator_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" -) - -// UpdateTenantURL generates an URL for the update tenant operation -type UpdateTenantURL struct { - Namespace string - Tenant string - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *UpdateTenantURL) WithBasePath(bp string) *UpdateTenantURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *UpdateTenantURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *UpdateTenantURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/namespaces/{namespace}/tenants/{tenant}" - - namespace := o.Namespace - if namespace != "" { - _path = strings.Replace(_path, "{namespace}", namespace, -1) - } else { - return nil, errors.New("namespace is required on UpdateTenantURL") - } - - tenant := o.Tenant - if tenant != "" { - _path = strings.Replace(_path, "{tenant}", tenant, -1) - } else { - return nil, errors.New("tenant is required on UpdateTenantURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *UpdateTenantURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *UpdateTenantURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *UpdateTenantURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on UpdateTenantURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on UpdateTenantURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *UpdateTenantURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operations/user_api/check_min_i_o_version.go b/api/operations/user_api/check_min_i_o_version.go deleted file mode 100644 index df25031c6b4..00000000000 --- a/api/operations/user_api/check_min_i_o_version.go +++ /dev/null @@ -1,73 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package user_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" -) - -// CheckMinIOVersionHandlerFunc turns a function with the right signature into a check min i o version handler -type CheckMinIOVersionHandlerFunc func(CheckMinIOVersionParams) middleware.Responder - -// Handle executing the request and returning a response -func (fn CheckMinIOVersionHandlerFunc) Handle(params CheckMinIOVersionParams) middleware.Responder { - return fn(params) -} - -// CheckMinIOVersionHandler interface for that can handle valid check min i o version params -type CheckMinIOVersionHandler interface { - Handle(CheckMinIOVersionParams) middleware.Responder -} - -// NewCheckMinIOVersion creates a new http.Handler for the check min i o version operation -func NewCheckMinIOVersion(ctx *middleware.Context, handler CheckMinIOVersionHandler) *CheckMinIOVersion { - return &CheckMinIOVersion{Context: ctx, Handler: handler} -} - -/* - CheckMinIOVersion swagger:route GET /check-version UserAPI checkMinIOVersion - -Checks the current Operator version against the latest -*/ -type CheckMinIOVersion struct { - Context *middleware.Context - Handler CheckMinIOVersionHandler -} - -func (o *CheckMinIOVersion) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewCheckMinIOVersionParams() - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/api/operations/user_api/check_min_i_o_version_parameters.go b/api/operations/user_api/check_min_i_o_version_parameters.go deleted file mode 100644 index c0c3c645b75..00000000000 --- a/api/operations/user_api/check_min_i_o_version_parameters.go +++ /dev/null @@ -1,63 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package user_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime/middleware" -) - -// NewCheckMinIOVersionParams creates a new CheckMinIOVersionParams object -// -// There are no default values defined in the spec. -func NewCheckMinIOVersionParams() CheckMinIOVersionParams { - - return CheckMinIOVersionParams{} -} - -// CheckMinIOVersionParams contains all the bound params for the check min i o version operation -// typically these are obtained from a http.Request -// -// swagger:parameters CheckMinIOVersion” -type CheckMinIOVersionParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewCheckMinIOVersionParams() beforehand. -func (o *CheckMinIOVersionParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} diff --git a/api/operations/user_api/check_min_i_o_version_responses.go b/api/operations/user_api/check_min_i_o_version_responses.go deleted file mode 100644 index 795435cab52..00000000000 --- a/api/operations/user_api/check_min_i_o_version_responses.go +++ /dev/null @@ -1,135 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package user_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/minio/operator/models" -) - -// CheckMinIOVersionOKCode is the HTTP code returned for type CheckMinIOVersionOK -const CheckMinIOVersionOKCode int = 200 - -/* -CheckMinIOVersionOK A successful response. - -swagger:response checkMinIOVersionOK -*/ -type CheckMinIOVersionOK struct { - - /* - In: Body - */ - Payload *models.CheckOperatorVersionResponse `json:"body,omitempty"` -} - -// NewCheckMinIOVersionOK creates CheckMinIOVersionOK with default headers values -func NewCheckMinIOVersionOK() *CheckMinIOVersionOK { - - return &CheckMinIOVersionOK{} -} - -// WithPayload adds the payload to the check min i o version o k response -func (o *CheckMinIOVersionOK) WithPayload(payload *models.CheckOperatorVersionResponse) *CheckMinIOVersionOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the check min i o version o k response -func (o *CheckMinIOVersionOK) SetPayload(payload *models.CheckOperatorVersionResponse) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *CheckMinIOVersionOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} - -/* -CheckMinIOVersionDefault Generic error response. - -swagger:response checkMinIOVersionDefault -*/ -type CheckMinIOVersionDefault struct { - _statusCode int - - /* - In: Body - */ - Payload *models.Error `json:"body,omitempty"` -} - -// NewCheckMinIOVersionDefault creates CheckMinIOVersionDefault with default headers values -func NewCheckMinIOVersionDefault(code int) *CheckMinIOVersionDefault { - if code <= 0 { - code = 500 - } - - return &CheckMinIOVersionDefault{ - _statusCode: code, - } -} - -// WithStatusCode adds the status to the check min i o version default response -func (o *CheckMinIOVersionDefault) WithStatusCode(code int) *CheckMinIOVersionDefault { - o._statusCode = code - return o -} - -// SetStatusCode sets the status to the check min i o version default response -func (o *CheckMinIOVersionDefault) SetStatusCode(code int) { - o._statusCode = code -} - -// WithPayload adds the payload to the check min i o version default response -func (o *CheckMinIOVersionDefault) WithPayload(payload *models.Error) *CheckMinIOVersionDefault { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the check min i o version default response -func (o *CheckMinIOVersionDefault) SetPayload(payload *models.Error) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *CheckMinIOVersionDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(o._statusCode) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/api/operations/user_api/check_min_i_o_version_urlbuilder.go b/api/operations/user_api/check_min_i_o_version_urlbuilder.go deleted file mode 100644 index 1976a1d83e0..00000000000 --- a/api/operations/user_api/check_min_i_o_version_urlbuilder.go +++ /dev/null @@ -1,104 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package user_api - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" -) - -// CheckMinIOVersionURL generates an URL for the check min i o version operation -type CheckMinIOVersionURL struct { - _basePath string -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *CheckMinIOVersionURL) WithBasePath(bp string) *CheckMinIOVersionURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *CheckMinIOVersionURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *CheckMinIOVersionURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/check-version" - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *CheckMinIOVersionURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *CheckMinIOVersionURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *CheckMinIOVersionURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on CheckMinIOVersionURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on CheckMinIOVersionURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *CheckMinIOVersionURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/api/operator.go b/api/operator.go deleted file mode 100644 index 8d5f61f3c77..00000000000 --- a/api/operator.go +++ /dev/null @@ -1,82 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "log" - - "github.com/minio/minio-go/v7/pkg/credentials" -) - -// operatorCredentialsProvider is an struct to hold the JWT (service account token) -type operatorCredentialsProvider struct { - serviceAccountJWT string -} - -// Implementing the interfaces of the minio Provider, we use this to leverage on the existing console Authentication flow -func (s operatorCredentialsProvider) Retrieve() (credentials.Value, error) { - return credentials.Value{ - AccessKeyID: "", - SecretAccessKey: "", - SessionToken: s.serviceAccountJWT, - }, nil -} - -// IsExpired dummy function, must be implemented in order to work with the minio provider authentication -func (s operatorCredentialsProvider) IsExpired() bool { - return false -} - -// OperatorClient interface with all functions to be implemented -// by mock when testing, it should include all OperatorClient respective api calls -// that are used within this project. -type OperatorClient interface { - Authenticate(context.Context) ([]byte, error) -} - -// Authenticate implements the operator authenticate function via REST /api -func (c *operatorClient) Authenticate(ctx context.Context) ([]byte, error) { - return c.client.RESTClient().Verb("GET").RequestURI("/api").DoRaw(ctx) -} - -// checkServiceAccountTokenValid will make an authenticated request against kubernetes api, if the -// request success means the provided jwt its a valid service account token and the console user can use it for future -// requests until it expires -func checkServiceAccountTokenValid(ctx context.Context, operatorClient OperatorClient) error { - _, err := operatorClient.Authenticate(ctx) - return err -} - -// GetConsoleCredentialsForOperator will validate the provided JWT (service account token) and return it in the form of credentials.Login -func GetConsoleCredentialsForOperator(jwt string) (*credentials.Credentials, error) { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - opClientClientSet, err := GetOperatorClient(jwt) - if err != nil { - log.Println(err) - return nil, err - } - opClient := &operatorClient{ - client: opClientClientSet, - } - if err = checkServiceAccountTokenValid(ctx, opClient); err != nil { - log.Println(err) - return nil, ErrInvalidLogin - } - return credentials.New(operatorCredentialsProvider{serviceAccountJWT: jwt}), nil -} diff --git a/api/operator_client.go b/api/operator_client.go deleted file mode 100644 index 2f5e4f26b79..00000000000 --- a/api/operator_client.go +++ /dev/null @@ -1,70 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - - miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - operatorClientset "github.com/minio/operator/pkg/client/clientset/versioned" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - types "k8s.io/apimachinery/pkg/types" -) - -// OperatorClientI interface with all functions to be implemented -// by mock when testing, it should include all OperatorClientI respective api calls -// that are used within this project. -type OperatorClientI interface { - TenantDelete(ctx context.Context, namespace string, instanceName string, options metav1.DeleteOptions) error - TenantGet(ctx context.Context, namespace string, instanceName string, options metav1.GetOptions) (*miniov2.Tenant, error) - TenantPatch(ctx context.Context, namespace string, instanceName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*miniov2.Tenant, error) - TenantUpdate(ctx context.Context, tenant *miniov2.Tenant, opts metav1.UpdateOptions) (*miniov2.Tenant, error) - TenantList(ctx context.Context, namespace string, opts metav1.ListOptions) (*miniov2.TenantList, error) -} - -// Interface implementation -// -// Define the structure of a operator client and define the functions that are actually used -// from the minio operator. -type operatorClient struct { - client *operatorClientset.Clientset -} - -// TenantDelete implements the minio instance delete action from minio operator -func (c *operatorClient) TenantDelete(ctx context.Context, namespace string, instanceName string, options metav1.DeleteOptions) error { - return c.client.MinioV2().Tenants(namespace).Delete(ctx, instanceName, options) -} - -// TenantGet implements the minio instance get action from minio operator -func (c *operatorClient) TenantGet(ctx context.Context, namespace string, instanceName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return c.client.MinioV2().Tenants(namespace).Get(ctx, instanceName, options) -} - -// TenantPatch implements the minio instance patch action from minio operator -func (c *operatorClient) TenantPatch(ctx context.Context, namespace string, instanceName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*miniov2.Tenant, error) { - return c.client.MinioV2().Tenants(namespace).Patch(ctx, instanceName, pt, data, options) -} - -// TenantUpdate implements the minio instance patch action from minio operator -func (c *operatorClient) TenantUpdate(ctx context.Context, tenant *miniov2.Tenant, options metav1.UpdateOptions) (*miniov2.Tenant, error) { - return c.client.MinioV2().Tenants(tenant.Namespace).Update(ctx, tenant, options) -} - -// TenantList implements the minio instance list action from minio operator -func (c *operatorClient) TenantList(ctx context.Context, namespace string, opts metav1.ListOptions) (*miniov2.TenantList, error) { - return c.client.MinioV2().Tenants(namespace).List(ctx, opts) -} diff --git a/api/operator_subnet.go b/api/operator_subnet.go deleted file mode 100644 index 3a5959c7a3e..00000000000 --- a/api/operator_subnet.go +++ /dev/null @@ -1,255 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2022 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "errors" - "fmt" - "os" - - "github.com/go-openapi/runtime/middleware" - "github.com/minio/operator/api/operations" - "github.com/minio/operator/api/operations/operator_api" - "github.com/minio/operator/models" - miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - xhttp "github.com/minio/operator/pkg/http" - "github.com/minio/operator/pkg/subnet" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -var ( - apiKeySecretDefault = "operator-subnet" - apiKeySecretEnvVar = "API_KEY_SECRET_NAME" -) - -type tenantInterface struct { - tenant miniov2.Tenant - mAdminClient MinioAdmin -} - -func registerOperatorSubnetHandlers(api *operations.OperatorAPI) { - api.OperatorAPIOperatorSubnetLoginHandler = operator_api.OperatorSubnetLoginHandlerFunc(func(params operator_api.OperatorSubnetLoginParams, session *models.Principal) middleware.Responder { - res, err := getOperatorSubnetLoginResponse(session, params) - if err != nil { - return operator_api.NewOperatorSubnetLoginDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewOperatorSubnetLoginOK().WithPayload(res) - }) - - api.OperatorAPIOperatorSubnetLoginMFAHandler = operator_api.OperatorSubnetLoginMFAHandlerFunc(func(params operator_api.OperatorSubnetLoginMFAParams, session *models.Principal) middleware.Responder { - res, err := getOperatorSubnetLoginMFAResponse(session, params) - if err != nil { - return operator_api.NewOperatorSubnetLoginMFADefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewOperatorSubnetLoginMFAOK().WithPayload(res) - }) - - api.OperatorAPIOperatorSubnetAPIKeyHandler = operator_api.OperatorSubnetAPIKeyHandlerFunc(func(params operator_api.OperatorSubnetAPIKeyParams, session *models.Principal) middleware.Responder { - res, err := getOperatorSubnetAPIKeyResponse(session, params) - if err != nil { - return operator_api.NewOperatorSubnetAPIKeyDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewOperatorSubnetAPIKeyOK().WithPayload(res) - }) - - api.OperatorAPIOperatorSubnetRegisterAPIKeyHandler = operator_api.OperatorSubnetRegisterAPIKeyHandlerFunc(func(params operator_api.OperatorSubnetRegisterAPIKeyParams, session *models.Principal) middleware.Responder { - res, err := getOperatorSubnetRegisterAPIKeyResponse(session, params) - if err != nil { - return operator_api.NewOperatorSubnetRegisterAPIKeyDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewOperatorSubnetRegisterAPIKeyOK().WithPayload(res) - }) - api.OperatorAPIOperatorSubnetAPIKeyInfoHandler = operator_api.OperatorSubnetAPIKeyInfoHandlerFunc(func(params operator_api.OperatorSubnetAPIKeyInfoParams, session *models.Principal) middleware.Responder { - res, err := getOperatorSubnetAPIKeyInfoResponse(session, params) - if err != nil { - return operator_api.NewOperatorSubnetAPIKeyInfoDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewOperatorSubnetAPIKeyInfoOK().WithPayload(res) - }) -} - -func getOperatorSubnetLoginResponse(session *models.Principal, params operator_api.OperatorSubnetLoginParams) (*models.OperatorSubnetLoginResponse, *models.Error) { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - username := params.Body.Username - password := params.Body.Password - if username == "" || password == "" { - return nil, ErrorWithContext(ctx, errors.New("empty credentials")) - } - subnetHTTPClient := &xhttp.Client{Client: GetConsoleHTTPClient("")} - token, mfa, err := SubnetLogin(subnetHTTPClient, username, password) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - return &models.OperatorSubnetLoginResponse{ - AccessToken: token, - MfaToken: mfa, - }, nil -} - -func getOperatorSubnetLoginMFAResponse(session *models.Principal, params operator_api.OperatorSubnetLoginMFAParams) (*models.OperatorSubnetLoginResponse, *models.Error) { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - subnetHTTPClient := &xhttp.Client{Client: GetConsoleHTTPClient("")} - res, err := subnet.LoginWithMFA(subnetHTTPClient, *params.Body.Username, *params.Body.MfaToken, *params.Body.Otp) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - return &models.OperatorSubnetLoginResponse{ - AccessToken: res.AccessToken, - }, nil -} - -func getOperatorSubnetAPIKeyResponse(session *models.Principal, params operator_api.OperatorSubnetAPIKeyParams) (*models.OperatorSubnetAPIKey, *models.Error) { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - subnetHTTPClient := &xhttp.Client{Client: GetConsoleHTTPClient("")} - token := params.HTTPRequest.URL.Query().Get("token") - apiKey, err := subnet.GetAPIKey(subnetHTTPClient, token) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - return &models.OperatorSubnetAPIKey{APIKey: apiKey}, nil -} - -func getOperatorSubnetRegisterAPIKeyResponse(session *models.Principal, params operator_api.OperatorSubnetRegisterAPIKeyParams) (*models.OperatorSubnetRegisterAPIKeyResponse, *models.Error) { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - clientSet, err := K8sClient(session.STSSessionToken) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - k8sClient := &k8sClient{client: clientSet} - tenants, err := getTenantsToRegister(ctx, session, k8sClient) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - return registerTenants(ctx, k8sClient, tenants, params.Body.APIKey) -} - -func getTenantsToRegister(ctx context.Context, session *models.Principal, k8sClient K8sClientI) ([]tenantInterface, error) { - opClientClientSet, err := GetOperatorClient(session.STSSessionToken) - if err != nil { - return nil, err - } - opClient := &operatorClient{client: opClientClientSet} - tenantList, err := opClient.TenantList(ctx, "", metav1.ListOptions{}) - if err != nil { - return nil, err - } - var tenantStructs []tenantInterface - for _, tenant := range tenantList.Items { - svcURL := tenant.GetTenantServiceURL() - mAdmin, err := getTenantAdminClient(ctx, k8sClient, &tenant, svcURL) - if err != nil { - return nil, err - } - tenantStructs = append(tenantStructs, tenantInterface{tenant: tenant, mAdminClient: AdminClient{Client: mAdmin}}) - } - return tenantStructs, nil -} - -func registerTenants(ctx context.Context, k8sClient K8sClientI, tenants []tenantInterface, apiKey string) (*models.OperatorSubnetRegisterAPIKeyResponse, *models.Error) { - for _, tenant := range tenants { - if err := registerTenant(ctx, tenant.mAdminClient, apiKey); err != nil { - return nil, ErrorWithContext(ctx, err) - } - } - if err := createSubnetAPIKeySecret(ctx, apiKey, k8sClient); err != nil { - return nil, ErrorWithContext(ctx, err) - } - return &models.OperatorSubnetRegisterAPIKeyResponse{Registered: true}, nil -} - -// SubnetRegisterWithAPIKey start registration with api key -func SubnetRegisterWithAPIKey(ctx context.Context, minioClient MinioAdmin, apiKey string) (bool, error) { - serverInfo, err := minioClient.serverInfo(ctx) - if err != nil { - return false, err - } - registerResult, err := subnet.Register(GetConsoleHTTPClient(""), serverInfo, apiKey, "", "") - if err != nil { - return false, err - } - // Keep existing subnet proxy if exists - subnetKey, err := GetSubnetKeyFromMinIOConfig(ctx, minioClient) - if err != nil { - return false, err - } - configStr := fmt.Sprintf("subnet license=%s api_key=%s proxy=%s", registerResult.License, registerResult.APIKey, subnetKey.Proxy) - _, err = minioClient.setConfigKV(ctx, configStr) - if err != nil { - return false, err - } - // cluster registered correctly - return true, nil -} - -func registerTenant(ctx context.Context, adminClient MinioAdmin, apiKey string) error { - _, err := SubnetRegisterWithAPIKey(ctx, adminClient, apiKey) - return err -} - -func createSubnetAPIKeySecret(ctx context.Context, apiKey string, k8sClient K8sClientI) error { - apiKeySecret := &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{Name: getAPIKeySecretName()}, - Type: corev1.SecretTypeOpaque, - Data: map[string][]byte{"api-key": []byte(apiKey)}, - } - _, err := k8sClient.createSecret(ctx, "default", apiKeySecret, metav1.CreateOptions{}) - return err -} - -func getOperatorSubnetAPIKeyInfoResponse(session *models.Principal, params operator_api.OperatorSubnetAPIKeyInfoParams) (*models.OperatorSubnetRegisterAPIKeyResponse, *models.Error) { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - clientSet, err := K8sClient(session.STSSessionToken) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - k8sClient := &k8sClient{client: clientSet} - if _, err := k8sClient.getSecret(ctx, "default", getAPIKeySecretName(), metav1.GetOptions{}); err != nil { - return nil, ErrorWithContext(ctx, err) - } - return &models.OperatorSubnetRegisterAPIKeyResponse{Registered: true}, nil -} - -func getAPIKeySecretName() string { - if s := os.Getenv(apiKeySecretEnvVar); s != "" { - return s - } - return apiKeySecretDefault -} - -// SubnetLogin start login -func SubnetLogin(client xhttp.ClientI, username, password string) (string, string, error) { - tokens, err := subnet.Login(client, username, password) - if err != nil { - return "", "", err - } - if tokens.MfaToken != "" { - // user needs to complete login flow using mfa - return "", tokens.MfaToken, nil - } - if tokens.AccessToken != "" { - // register token to minio - return tokens.AccessToken, "", nil - } - return "", "", errors.New("something went wrong") -} diff --git a/api/operator_subnet_test.go b/api/operator_subnet_test.go deleted file mode 100644 index 1e9601fd03c..00000000000 --- a/api/operator_subnet_test.go +++ /dev/null @@ -1,315 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2022 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "errors" - "fmt" - "net/http" - "net/http/httptest" - "net/url" - "os" - "testing" - - "github.com/minio/madmin-go/v3" - "github.com/minio/operator/api/operations" - "github.com/minio/operator/api/operations/operator_api" - "github.com/minio/operator/models" - v2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - "github.com/minio/operator/pkg/subnet" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/suite" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -type OperatorSubnetTestSuite struct { - suite.Suite - assert *assert.Assertions - loginServer *httptest.Server - loginWithError bool - loginMFAServer *httptest.Server - loginMFAWithError bool - getAPIKeyServer *httptest.Server - getAPIKeyWithError bool - registerAPIKeyServer *httptest.Server - registerAPIKeyWithError bool - k8sClient k8sClientMock - adminClient AdminClientMock -} - -func (suite *OperatorSubnetTestSuite) SetupSuite() { - suite.assert = assert.New(suite.T()) - suite.loginServer = httptest.NewServer(http.HandlerFunc(suite.loginHandler)) - suite.loginMFAServer = httptest.NewServer(http.HandlerFunc(suite.loginMFAHandler)) - suite.getAPIKeyServer = httptest.NewServer(http.HandlerFunc(suite.getAPIKeyHandler)) - suite.registerAPIKeyServer = httptest.NewServer(http.HandlerFunc(suite.registerAPIKeyHandler)) - suite.k8sClient = k8sClientMock{} - suite.adminClient = AdminClientMock{} - k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.CreateOptions) (*corev1.Secret, error) { - return &corev1.Secret{}, nil - } - k8sclientGetSecretMock = func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - data := make(map[string][]byte) - data["secretkey"] = []byte("secret") - data["accesskey"] = []byte("access") - sec := &corev1.Secret{ - Data: data, - } - return sec, nil - } -} - -func (suite *OperatorSubnetTestSuite) loginHandler( - w http.ResponseWriter, r *http.Request, -) { - if suite.loginWithError { - w.WriteHeader(400) - } else { - fmt.Fprintf(w, `{"mfa_required": true, "mfa_token": "mockToken"}`) - } -} - -func (suite *OperatorSubnetTestSuite) loginMFAHandler( - w http.ResponseWriter, r *http.Request, -) { - if suite.loginMFAWithError { - w.WriteHeader(400) - } else { - fmt.Fprintf(w, `{"token_info": {"access_token": "mockToken"}}`) - } -} - -func (suite *OperatorSubnetTestSuite) getAPIKeyHandler( - w http.ResponseWriter, r *http.Request, -) { - if suite.getAPIKeyWithError { - w.WriteHeader(400) - } else { - fmt.Fprintf(w, `{"api_key": "mockAPIKey"}`) - } -} - -func (suite *OperatorSubnetTestSuite) registerAPIKeyHandler( - w http.ResponseWriter, r *http.Request, -) { - if suite.registerAPIKeyWithError { - w.WriteHeader(400) - } else { - fmt.Fprintf(w, `{"api_key": "mockAPIKey"}`) - } -} - -func (suite *OperatorSubnetTestSuite) TearDownSuite() { -} - -func (suite *OperatorSubnetTestSuite) TestRegisterOperatorSubnetHanlders() { - api := &operations.OperatorAPI{} - suite.assert.Nil(api.OperatorAPIOperatorSubnetLoginHandler) - suite.assert.Nil(api.OperatorAPIOperatorSubnetLoginMFAHandler) - suite.assert.Nil(api.OperatorAPIOperatorSubnetAPIKeyHandler) - suite.assert.Nil(api.OperatorAPIOperatorSubnetRegisterAPIKeyHandler) - registerOperatorSubnetHandlers(api) - suite.assert.NotNil(api.OperatorAPIOperatorSubnetLoginHandler) - suite.assert.NotNil(api.OperatorAPIOperatorSubnetLoginMFAHandler) - suite.assert.NotNil(api.OperatorAPIOperatorSubnetAPIKeyHandler) - suite.assert.NotNil(api.OperatorAPIOperatorSubnetRegisterAPIKeyHandler) -} - -func (suite *OperatorSubnetTestSuite) TestOperatorSubnetLoginHandlerWithEmptyCredentials() { - params, api := suite.initSubnetLoginRequest("", "") - response := api.OperatorAPIOperatorSubnetLoginHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.OperatorSubnetLoginDefault) - suite.assert.True(ok) -} - -func (suite *OperatorSubnetTestSuite) TestOperatorSubnetLoginHandlerWithServerError() { - params, api := suite.initSubnetLoginRequest("mockusername", "mockpassword") - suite.loginWithError = true - os.Setenv(subnet.SubnetURL, suite.loginServer.URL) - response := api.OperatorAPIOperatorSubnetLoginHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.OperatorSubnetLoginDefault) - suite.assert.True(ok) - os.Unsetenv(subnet.SubnetURL) -} - -func (suite *OperatorSubnetTestSuite) TestOperatorSubnetLoginHandlerWithoutError() { - params, api := suite.initSubnetLoginRequest("mockusername", "mockpassword") - suite.loginWithError = false - os.Setenv(subnet.SubnetURL, suite.loginServer.URL) - response := api.OperatorAPIOperatorSubnetLoginHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.OperatorSubnetLoginOK) - suite.assert.True(ok) - os.Unsetenv(subnet.SubnetURL) -} - -func (suite *OperatorSubnetTestSuite) initSubnetLoginRequest(username, password string) (params operator_api.OperatorSubnetLoginParams, api operations.OperatorAPI) { - registerOperatorSubnetHandlers(&api) - params.Body = &models.OperatorSubnetLoginRequest{Username: username, Password: password} - params.HTTPRequest = &http.Request{} - return params, api -} - -func (suite *OperatorSubnetTestSuite) TestOperatorSubnetLoginMFAHandlerWithServerError() { - params, api := suite.initSubnetLoginMFARequest("mockusername", "mockMFA", "mockOTP") - suite.loginMFAWithError = true - os.Setenv(subnet.SubnetURL, suite.loginMFAServer.URL) - response := api.OperatorAPIOperatorSubnetLoginMFAHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.OperatorSubnetLoginMFADefault) - suite.assert.True(ok) - os.Unsetenv(subnet.SubnetURL) -} - -func (suite *OperatorSubnetTestSuite) TestOperatorSubnetLoginMFAHandlerWithoutError() { - params, api := suite.initSubnetLoginMFARequest("mockusername", "mockMFA", "mockOTP") - suite.loginMFAWithError = false - os.Setenv(subnet.SubnetURL, suite.loginMFAServer.URL) - response := api.OperatorAPIOperatorSubnetLoginMFAHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.OperatorSubnetLoginMFAOK) - suite.assert.True(ok) - os.Unsetenv(subnet.SubnetURL) -} - -func (suite *OperatorSubnetTestSuite) initSubnetLoginMFARequest(username, mfa, otp string) (params operator_api.OperatorSubnetLoginMFAParams, api operations.OperatorAPI) { - registerOperatorSubnetHandlers(&api) - params.Body = &models.OperatorSubnetLoginMFARequest{Username: &username, MfaToken: &mfa, Otp: &otp} - params.HTTPRequest = &http.Request{} - return params, api -} - -func (suite *OperatorSubnetTestSuite) TestOperatorSubnetAPIKeyHandlerWithServerError() { - params, api := suite.initSubnetAPIKeyRequest() - suite.getAPIKeyWithError = true - os.Setenv(subnet.SubnetURL, suite.getAPIKeyServer.URL) - response := api.OperatorAPIOperatorSubnetAPIKeyHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.OperatorSubnetAPIKeyDefault) - suite.assert.True(ok) - os.Unsetenv(subnet.SubnetURL) -} - -func (suite *OperatorSubnetTestSuite) TestOperatorSubnetAPIKeyHandlerWithoutError() { - params, api := suite.initSubnetAPIKeyRequest() - suite.getAPIKeyWithError = false - os.Setenv(subnet.SubnetURL, suite.getAPIKeyServer.URL) - response := api.OperatorAPIOperatorSubnetAPIKeyHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.OperatorSubnetAPIKeyOK) - suite.assert.True(ok) - os.Unsetenv(subnet.SubnetURL) -} - -func (suite *OperatorSubnetTestSuite) initSubnetAPIKeyRequest() (params operator_api.OperatorSubnetAPIKeyParams, api operations.OperatorAPI) { - registerOperatorSubnetHandlers(&api) - params.HTTPRequest = &http.Request{URL: &url.URL{}} - return params, api -} - -// TODO: Improve register tests (make code more testable) -// func (suite *OperatorSubnetTestSuite) TestOperatorSubnetRegisterAPIKeyHandlerWithServerError() { -// params, api := suite.initSubnetRegisterAPIKeyRequest() -// suite.registerAPIKeyWithError = true -// os.Setenv(subnet.SubnetURL, suite.registerAPIKeyServer.URL) -// response := api.OperatorAPIOperatorSubnetRegisterAPIKeyHandler.Handle(params, &models.Principal{}) -// _, ok := response.(*operator_api.OperatorSubnetRegisterAPIKeyDefault) -// suite.assert.True(ok) -// os.Unsetenv(subnet.SubnetURL) -// } - -// func (suite *OperatorSubnetTestSuite) TestOperatorSubnetRegisterAPIKeyHandlerWithError() { -// ctx := context.Background() -// suite.registerAPIKeyWithError = false -// os.Setenv(subnet.SubnetURL, suite.registerAPIKeyServer.URL) -// res, err := registerTenants([]v2.Tenant{{ -// Spec: v2.TenantSpec{CredsSecret: &corev1.LocalObjectReference{Name: "secret-name"}}, -// }}, "mockAPIKey", ctx, suite.k8sClient) -// suite.assert.Nil(res) -// suite.assert.NotNil(err) -// os.Unsetenv(subnet.SubnetURL) -// } - -// func (suite *OperatorSubnetTestSuite) TestOperatorSubnetRegisterAPIKeyHandlerGetTenants() { -// ctx := context.Background() -// res, err := getTenantsToRegister(ctx, &models.Principal{}) -// suite.assert.NotNil(res) -// suite.assert.Nil(err) -// } - -func (suite *OperatorSubnetTestSuite) TestOperatorSubnetRegisterAPIKeyHandlerWithUnreachableTenant() { - ctx := context.Background() - MinioServerInfoMock = func(ctx context.Context) (madmin.InfoMessage, error) { - return madmin.InfoMessage{}, errors.New("error") - } - res, err := registerTenants(ctx, suite.k8sClient, []tenantInterface{ - { - tenant: v2.Tenant{ - Spec: v2.TenantSpec{CredsSecret: &corev1.LocalObjectReference{Name: "secret-name"}}, - }, - mAdminClient: suite.adminClient, - }, - }, "mockAPIKey") - suite.assert.Nil(res) - suite.assert.NotNil(err) -} - -func (suite *OperatorSubnetTestSuite) TestOperatorSubnetRegisterAPIKeyHandlerZeroTenants() { - ctx := context.Background() - res, err := registerTenants(ctx, suite.k8sClient, []tenantInterface{}, "mockAPIKey") - suite.assert.NotNil(res) - suite.assert.Nil(err) -} - -// func (suite *OperatorSubnetTestSuite) initSubnetRegisterAPIKeyRequest() (params operator_api.OperatorSubnetRegisterAPIKeyParams, api operations.OperatorAPI) { -// registerOperatorSubnetHandlers(&api) -// params.Body = &models.OperatorSubnetAPIKey{APIKey: "mockAPIKey"} -// params.HTTPRequest = &http.Request{} -// return params, api -// } - -func (suite *OperatorSubnetTestSuite) TestOperatorSubnetAPIKeyInfoHandlerWithNoSecret() { - params, api := suite.initSubnetAPIKeyInfoRequest() - os.Setenv(apiKeySecretEnvVar, "mock-operator-subnet") - response := api.OperatorAPIOperatorSubnetAPIKeyInfoHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.OperatorSubnetAPIKeyInfoDefault) - suite.assert.True(ok) - os.Unsetenv(apiKeySecretEnvVar) -} - -// func (suite *OperatorSubnetTestSuite) TestOperatorSubnetAPIKeyInfoHandlerWithSecret() { -// params, api := suite.initSubnetAPIKeyInfoRequest() -// os.Setenv(apiKeySecretEnvVar, "mock-operator-subnet") -// session := &models.Principal{} -// clientSet, _ := cluster.K8sClient(session.STSSessionToken) -// k8sClient := &k8sClient{client: clientSet} -// ctx := context.Background() -// secret := &corev1.Secret{ObjectMeta: metav1.ObjectMeta{Name: getAPIKeySecretName()}} -// k8sClient.createSecret(ctx, "default", secret, metav1.CreateOptions{}) -// response := api.OperatorAPIOperatorSubnetAPIKeyInfoHandler.Handle(params, session) -// _, ok := response.(*operator_api.OperatorSubnetAPIKeyInfoOK) -// suite.assert.True(ok) -// k8sClient.deleteSecret(ctx, "default", getAPIKeySecretName(), metav1.DeleteOptions{}) -// os.Unsetenv(apiKeySecretEnvVar) -// } - -func (suite *OperatorSubnetTestSuite) initSubnetAPIKeyInfoRequest() (params operator_api.OperatorSubnetAPIKeyInfoParams, api operations.OperatorAPI) { - registerOperatorSubnetHandlers(&api) - params.HTTPRequest = &http.Request{} - return params, api -} - -func TestOperatorSubnet(t *testing.T) { - suite.Run(t, new(OperatorSubnetTestSuite)) -} diff --git a/api/operator_test.go b/api/operator_test.go deleted file mode 100644 index 828d86333b0..00000000000 --- a/api/operator_test.go +++ /dev/null @@ -1,101 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "errors" - "testing" - - operatorClientset "github.com/minio/operator/pkg/client/clientset/versioned" -) - -type operatorClientTest struct { - client *operatorClientset.Clientset -} - -var operatorAuthenticateMock func(ctx context.Context) ([]byte, error) - -// TenantDelete implements the minio instance delete action from minio-operator -func (c *operatorClientTest) Authenticate(ctx context.Context) ([]byte, error) { - return operatorAuthenticateMock(ctx) -} - -func Test_checkServiceAccountTokenValid(t *testing.T) { - successResponse := func() { - operatorAuthenticateMock = func(ctx context.Context) ([]byte, error) { - return nil, nil - } - } - - failResponse := func() { - operatorAuthenticateMock = func(ctx context.Context) ([]byte, error) { - return nil, errors.New("something went wrong") - } - } - - opClientClientSet, _ := GetOperatorClient("") - - opClient := &operatorClientTest{ - client: opClientClientSet, - } - - type args struct { - ctx context.Context - operatorClient *operatorClientTest - mockFunction func() - } - tests := []struct { - name string - args args - want bool - }{ - { - name: "Success authentication - correct jwt (service account token)", - args: args{ - ctx: context.Background(), - operatorClient: opClient, - mockFunction: successResponse, - }, - want: true, - }, - { - name: "Fail authentication - incorrect jwt (service account token)", - args: args{ - ctx: context.Background(), - operatorClient: opClient, - mockFunction: failResponse, - }, - want: false, - }, - } - for _, tt := range tests { - tt := tt - t.Run(tt.name, func(t *testing.T) { - if tt.args.mockFunction != nil { - tt.args.mockFunction() - } - got := checkServiceAccountTokenValid(tt.args.ctx, tt.args.operatorClient) - if got != nil && tt.want { - t.Errorf("checkServiceAccountTokenValid() = expected success but got %s", got) - } - if got == nil && !tt.want { - t.Error("checkServiceAccountTokenValid() = expected failure but got success") - } - }) - } -} diff --git a/api/parity.go b/api/parity.go deleted file mode 100644 index 8573382a9d9..00000000000 --- a/api/parity.go +++ /dev/null @@ -1,62 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "fmt" - - "github.com/minio/operator/pkg/utils" - - "github.com/go-openapi/runtime/middleware" - "github.com/minio/operator/api/operations" - "github.com/minio/operator/api/operations/operator_api" - "github.com/minio/operator/models" -) - -func registerParityHandlers(api *operations.OperatorAPI) { - api.OperatorAPIGetParityHandler = operator_api.GetParityHandlerFunc(func(params operator_api.GetParityParams, principal *models.Principal) middleware.Responder { - resp, err := getParityResponse(params) - if err != nil { - return operator_api.NewGetParityDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewGetParityOK().WithPayload(resp) - }) -} - -// GetParityInfo returns the parity for nxd config -func GetParityInfo(nodes int64, disksPerNode int64) (models.ParityResponse, error) { - parityVals, err := utils.PossibleParityValues(fmt.Sprintf(`http://minio{1...%d}/export/set{1...%d}`, nodes, disksPerNode)) - if err != nil { - return nil, err - } - - return parityVals, nil -} - -func getParityResponse(params operator_api.GetParityParams) (models.ParityResponse, *models.Error) { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - nodes := params.Nodes - disksPerNode := params.DisksPerNode - parityValues, err := GetParityInfo(nodes, disksPerNode) - if err != nil { - LogError("error getting parity info: %v", err) - return nil, ErrorWithContext(ctx, err) - } - return parityValues, nil -} diff --git a/api/parity_test.go b/api/parity_test.go deleted file mode 100644 index b563ef05b50..00000000000 --- a/api/parity_test.go +++ /dev/null @@ -1,131 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "encoding/json" - "net/http" - "reflect" - "testing" - - "github.com/minio/operator/api/operations/operator_api" - "github.com/stretchr/testify/assert" - - "github.com/minio/operator/models" -) - -func Test_getParityInfo(t *testing.T) { - tests := []struct { - description string - wantErr bool - nodes int64 - disksPerNode int64 - expectedResp models.ParityResponse - }{ - { - description: "Incorrect Number of endpoints provided", - wantErr: true, - nodes: 1, - disksPerNode: 1, - expectedResp: nil, - }, - { - description: "Number of endpoints is valid", - wantErr: false, - nodes: 4, - disksPerNode: 10, - expectedResp: models.ParityResponse{"EC:4", "EC:3", "EC:2"}, - }, - { - description: "More nodes than disks", - wantErr: false, - nodes: 4, - disksPerNode: 1, - expectedResp: models.ParityResponse{"EC:2"}, - }, - { - description: "More disks than nodes", - wantErr: false, - nodes: 2, - disksPerNode: 50, - expectedResp: models.ParityResponse{"EC:5", "EC:4", "EC:3", "EC:2"}, - }, - } - - for _, tt := range tests { - t.Run(tt.description, func(t *testing.T) { - parity, err := GetParityInfo(tt.nodes, tt.disksPerNode) - if (err != nil) != tt.wantErr { - t.Errorf("GetParityInfo() error = %v, wantErr %v", err, tt.wantErr) - } - - if !reflect.DeepEqual(parity, tt.expectedResp) { - ji, _ := json.Marshal(parity) - vi, _ := json.Marshal(tt.expectedResp) - t.Errorf("\ngot: %s \nwant: %s", ji, vi) - } - }) - } -} - -func Test_getParityResponse(t *testing.T) { - type args struct { - params operator_api.GetParityParams - } - tests := []struct { - name string - args args - want models.ParityResponse - wantErr bool - }{ - { - name: "valid", - args: args{ - params: operator_api.GetParityParams{ - HTTPRequest: &http.Request{}, - DisksPerNode: 4, - Nodes: 4, - }, - }, - want: models.ParityResponse{"EC:8", "EC:7", "EC:6", "EC:5", "EC:4", "EC:3", "EC:2"}, - wantErr: false, - }, - { - name: "invalid", - args: args{ - params: operator_api.GetParityParams{ - HTTPRequest: &http.Request{}, - DisksPerNode: -4, - Nodes: 4, - }, - }, - want: models.ParityResponse(nil), - wantErr: true, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got, got1 := getParityResponse(tt.args.params) - assert.Equalf(t, tt.want, got, "getParityResponse(%v)", tt.args.params) - if tt.wantErr { - assert.NotNilf(t, got1, "getParityResponse(%v)", tt.args.params) - } else { - assert.Nilf(t, got1, "getParityResponse(%v)", tt.args.params) - } - }) - } -} diff --git a/api/pod-handlers.go b/api/pod-handlers.go deleted file mode 100644 index 25e87d8b1a2..00000000000 --- a/api/pod-handlers.go +++ /dev/null @@ -1,598 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "archive/zip" - "bytes" - "context" - "encoding/base64" - "encoding/json" - "errors" - "fmt" - "io" - "sort" - "time" - - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/swag" - "github.com/minio/operator/api/operations" - "github.com/minio/operator/api/operations/operator_api" - "github.com/minio/operator/models" - miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - "gopkg.in/yaml.v2" - corev1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/resource" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/util/duration" - "k8s.io/apimachinery/pkg/util/sets" - v1 "k8s.io/client-go/kubernetes/typed/core/v1" - "k8s.io/utils/strings/slices" -) - -func registerPodHandlers(api *operations.OperatorAPI) { - api.OperatorAPIGetTenantPodsHandler = operator_api.GetTenantPodsHandlerFunc(func(params operator_api.GetTenantPodsParams, session *models.Principal) middleware.Responder { - payload, err := getTenantPodsResponse(session, params) - if err != nil { - return operator_api.NewGetTenantPodsDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewGetTenantPodsOK().WithPayload(payload) - }) - - api.OperatorAPIGetPodLogsHandler = operator_api.GetPodLogsHandlerFunc(func(params operator_api.GetPodLogsParams, session *models.Principal) middleware.Responder { - payload, err := getPodLogsResponse(session, params) - if err != nil { - return operator_api.NewGetPodLogsDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewGetPodLogsOK().WithPayload(payload) - }) - - api.OperatorAPIGetPodEventsHandler = operator_api.GetPodEventsHandlerFunc(func(params operator_api.GetPodEventsParams, session *models.Principal) middleware.Responder { - payload, err := getPodEventsResponse(session, params) - if err != nil { - return operator_api.NewGetPodEventsDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewGetPodEventsOK().WithPayload(payload) - }) - - api.OperatorAPIDescribePodHandler = operator_api.DescribePodHandlerFunc(func(params operator_api.DescribePodParams, session *models.Principal) middleware.Responder { - payload, err := getDescribePodResponse(session, params) - if err != nil { - return operator_api.NewDescribePodDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewDescribePodOK().WithPayload(payload) - }) - // Delete Pod - api.OperatorAPIDeletePodHandler = operator_api.DeletePodHandlerFunc(func(params operator_api.DeletePodParams, session *models.Principal) middleware.Responder { - err := getDeletePodResponse(session, params) - if err != nil { - return operator_api.NewDeletePodDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewDeletePodNoContent() - }) - // Tenant log report - api.OperatorAPIGetTenantLogReportHandler = operator_api.GetTenantLogReportHandlerFunc(func(params operator_api.GetTenantLogReportParams, principal *models.Principal) middleware.Responder { - payload, err := getTenantLogReportResponse(principal, params) - if err != nil { - return operator_api.NewGetTenantLogReportDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewGetTenantLogReportOK().WithPayload(payload) - }) -} - -func getPodLogsResponse(session *models.Principal, params operator_api.GetPodLogsParams) (string, *models.Error) { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - clientset, err := K8sClient(session.STSSessionToken) - if err != nil { - return "", ErrorWithContext(ctx, err) - } - listOpts := &corev1.PodLogOptions{Container: "minio"} - logs := clientset.CoreV1().Pods(params.Namespace).GetLogs(params.PodName, listOpts) - - buffLogs, err := logs.Stream(ctx) - if err != nil { - return "", ErrorWithContext(ctx, err) - } - - defer buffLogs.Close() - - buf := new(bytes.Buffer) - _, err = io.Copy(buf, buffLogs) - if err != nil { - return "", ErrorWithContext(ctx, err) - } - return buf.String(), nil -} - -func getTenantPodsResponse(session *models.Principal, params operator_api.GetTenantPodsParams) ([]*models.TenantPod, *models.Error) { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - clientset, err := K8sClient(session.STSSessionToken) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - listOpts := metav1.ListOptions{ - LabelSelector: fmt.Sprintf("%s=%s", miniov2.TenantLabel, params.Tenant), - } - pods, err := clientset.CoreV1().Pods(params.Namespace).List(ctx, listOpts) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - return getTenantPods(pods), nil -} - -func getTenantPods(pods *corev1.PodList) []*models.TenantPod { - retval := []*models.TenantPod{} - for _, pod := range pods.Items { - var restarts int64 - if len(pod.Status.ContainerStatuses) > 0 { - restarts = int64(pod.Status.ContainerStatuses[0].RestartCount) - } - status := string(pod.Status.Phase) - if pod.DeletionTimestamp != nil { - status = "Terminating" - } - retval = append(retval, &models.TenantPod{ - Name: swag.String(pod.Name), - Status: status, - TimeCreated: pod.CreationTimestamp.Unix(), - PodIP: pod.Status.PodIP, - Restarts: restarts, - Node: pod.Spec.NodeName, - }) - } - return retval -} - -// getDeletePodResponse gets the output of deleting a minio instance -func getDeletePodResponse(session *models.Principal, params operator_api.DeletePodParams) *models.Error { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - // get Kubernetes Client - clientset, err := K8sClient(session.STSSessionToken) - if err != nil { - return ErrorWithContext(ctx, err) - } - listOpts := metav1.ListOptions{ - LabelSelector: fmt.Sprintf("%s=%s", miniov2.TenantLabel, params.Tenant), - FieldSelector: fmt.Sprintf("metadata.name=%s%s", params.Tenant, params.PodName[len(params.Tenant):]), - } - if err = clientset.CoreV1().Pods(params.Namespace).DeleteCollection(ctx, metav1.DeleteOptions{}, listOpts); err != nil { - return ErrorWithContext(ctx, err) - } - return nil -} - -func getPodEventsResponse(session *models.Principal, params operator_api.GetPodEventsParams) (models.EventListWrapper, *models.Error) { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - clientset, err := K8sClient(session.STSSessionToken) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - pod, err := clientset.CoreV1().Pods(params.Namespace).Get(ctx, params.PodName, metav1.GetOptions{}) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - events, err := clientset.CoreV1().Events(params.Namespace).List(ctx, metav1.ListOptions{FieldSelector: fmt.Sprintf("involvedObject.uid=%s", pod.UID)}) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - retval := models.EventListWrapper{} - for i := 0; i < len(events.Items); i++ { - retval = append(retval, &models.EventListElement{ - Namespace: events.Items[i].Namespace, - LastSeen: events.Items[i].LastTimestamp.Unix(), - Message: events.Items[i].Message, - EventType: events.Items[i].Type, - Reason: events.Items[i].Reason, - }) - } - sort.SliceStable(retval, func(i int, j int) bool { - return retval[i].LastSeen < retval[j].LastSeen - }) - return retval, nil -} - -func getDescribePodResponse(session *models.Principal, params operator_api.DescribePodParams) (*models.DescribePodWrapper, *models.Error) { - ctx := context.Background() - clientset, err := K8sClient(session.STSSessionToken) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - pod, err := clientset.CoreV1().Pods(params.Namespace).Get(ctx, params.PodName, metav1.GetOptions{}) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - return getDescribePod(pod) -} - -func getDescribePod(pod *corev1.Pod) (*models.DescribePodWrapper, *models.Error) { - retval := &models.DescribePodWrapper{ - Name: pod.Name, - Namespace: pod.Namespace, - PriorityClassName: pod.Spec.PriorityClassName, - NodeName: pod.Spec.NodeName, - } - if pod.Spec.Priority != nil { - retval.Priority = int64(*pod.Spec.Priority) - } - if pod.Status.StartTime != nil { - retval.StartTime = pod.Status.StartTime.Time.String() - } - labelArray := make([]*models.Label, len(pod.Labels)) - i := 0 - for key := range pod.Labels { - labelArray[i] = &models.Label{Key: key, Value: pod.Labels[key]} - i++ - } - retval.Labels = labelArray - annotationArray := make([]*models.Annotation, len(pod.Annotations)) - i = 0 - for key := range pod.Annotations { - annotationArray[i] = &models.Annotation{Key: key, Value: pod.Annotations[key]} - i++ - } - retval.Annotations = annotationArray - if pod.DeletionTimestamp != nil { - retval.DeletionTimestamp = translateTimestampSince(*pod.DeletionTimestamp) - } - if pod.DeletionGracePeriodSeconds != nil { - retval.DeletionGracePeriodSeconds = *pod.DeletionGracePeriodSeconds - } - retval.Phase = string(pod.Status.Phase) - retval.Reason = pod.Status.Reason - retval.Message = pod.Status.Message - retval.PodIP = pod.Status.PodIP - retval.ControllerRef = metav1.GetControllerOf(pod).String() - retval.Containers = make([]*models.Container, len(pod.Spec.Containers)) - statusMap := map[string]corev1.ContainerStatus{} - statusKeys := make([]string, len(pod.Status.ContainerStatuses)) - for i, status := range pod.Status.ContainerStatuses { - statusMap[status.Name] = status - statusKeys[i] = status.Name - - } - for i := range pod.Spec.Containers { - container := pod.Spec.Containers[i] - retval.Containers[i] = &models.Container{ - Name: container.Name, - Image: container.Image, - Ports: describeContainerPorts(container.Ports), - HostPorts: describeContainerHostPorts(container.Ports), - Args: container.Args, - } - if slices.Contains(statusKeys, container.Name) { - containerStatus := statusMap[container.Name] - retval.Containers[i].ContainerID = containerStatus.ContainerID - retval.Containers[i].ImageID = containerStatus.ImageID - retval.Containers[i].Ready = containerStatus.Ready - retval.Containers[i].RestartCount = int64(containerStatus.RestartCount) - retval.Containers[i].State = describeContainerState(containerStatus.State) - retval.Containers[i].LastState = describeContainerState(containerStatus.LastTerminationState) - } - retval.Containers[i].EnvironmentVariables = make([]*models.EnvironmentVariable, len(container.Env)) - for j := range container.Env { - retval.Containers[i].EnvironmentVariables[j] = &models.EnvironmentVariable{ - Key: container.Env[j].Name, - Value: container.Env[j].Value, - } - } - retval.Containers[i].Mounts = make([]*models.Mount, len(container.VolumeMounts)) - for j := range container.VolumeMounts { - retval.Containers[i].Mounts[j] = &models.Mount{ - Name: container.VolumeMounts[j].Name, - MountPath: container.VolumeMounts[j].MountPath, - SubPath: container.VolumeMounts[j].SubPath, - ReadOnly: container.VolumeMounts[j].ReadOnly, - } - } - } - retval.Conditions = make([]*models.Condition, len(pod.Status.Conditions)) - for i := range pod.Status.Conditions { - retval.Conditions[i] = &models.Condition{ - Type: string(pod.Status.Conditions[i].Type), - Status: string(pod.Status.Conditions[i].Status), - } - } - retval.Volumes = make([]*models.Volume, len(pod.Spec.Volumes)) - for i := range pod.Spec.Volumes { - retval.Volumes[i] = &models.Volume{ - Name: pod.Spec.Volumes[i].Name, - } - if pod.Spec.Volumes[i].PersistentVolumeClaim != nil { - retval.Volumes[i].Pvc = &models.Pvc{ - ReadOnly: pod.Spec.Volumes[i].PersistentVolumeClaim.ReadOnly, - ClaimName: pod.Spec.Volumes[i].PersistentVolumeClaim.ClaimName, - } - } else if pod.Spec.Volumes[i].Projected != nil { - retval.Volumes[i].Projected = &models.ProjectedVolume{} - retval.Volumes[i].Projected.Sources = make([]*models.ProjectedVolumeSource, len(pod.Spec.Volumes[i].Projected.Sources)) - for j := range pod.Spec.Volumes[i].Projected.Sources { - retval.Volumes[i].Projected.Sources[j] = &models.ProjectedVolumeSource{} - if pod.Spec.Volumes[i].Projected.Sources[j].Secret != nil { - retval.Volumes[i].Projected.Sources[j].Secret = &models.Secret{ - Name: pod.Spec.Volumes[i].Projected.Sources[j].Secret.Name, - Optional: pod.Spec.Volumes[i].Projected.Sources[j].Secret.Optional != nil, - } - } - if pod.Spec.Volumes[i].Projected.Sources[j].DownwardAPI != nil { - retval.Volumes[i].Projected.Sources[j].DownwardAPI = true - } - if pod.Spec.Volumes[i].Projected.Sources[j].ConfigMap != nil { - retval.Volumes[i].Projected.Sources[j].ConfigMap = &models.ConfigMap{ - Name: pod.Spec.Volumes[i].Projected.Sources[j].ConfigMap.Name, - Optional: pod.Spec.Volumes[i].Projected.Sources[j].ConfigMap.Optional != nil, - } - } - if pod.Spec.Volumes[i].Projected.Sources[j].ServiceAccountToken != nil { - if pod.Spec.Volumes[i].Projected.Sources[j].ServiceAccountToken.ExpirationSeconds != nil { - retval.Volumes[i].Projected.Sources[j].ServiceAccountToken = &models.ServiceAccountToken{ - ExpirationSeconds: *pod.Spec.Volumes[i].Projected.Sources[j].ServiceAccountToken.ExpirationSeconds, - } - } - } - } - } - } - retval.QosClass = string(getPodQOS(pod)) - nodeSelectorArray := make([]*models.NodeSelector, len(pod.Spec.NodeSelector)) - i = 0 - for key := range pod.Spec.NodeSelector { - nodeSelectorArray[i] = &models.NodeSelector{Key: key, Value: pod.Spec.NodeSelector[key]} - i++ - } - retval.NodeSelector = nodeSelectorArray - retval.Tolerations = make([]*models.Toleration, len(pod.Spec.Tolerations)) - for i := range pod.Spec.Tolerations { - retval.Tolerations[i] = &models.Toleration{ - Effect: string(pod.Spec.Tolerations[i].Effect), - Key: pod.Spec.Tolerations[i].Key, - Value: pod.Spec.Tolerations[i].Value, - Operator: string(pod.Spec.Tolerations[i].Operator), - TolerationSeconds: *pod.Spec.Tolerations[i].TolerationSeconds, - } - } - return retval, nil -} - -func describeContainerState(status corev1.ContainerState) *models.State { - retval := &models.State{} - switch { - case status.Running != nil: - retval.State = "Running" - retval.Started = status.Running.StartedAt.Time.Format(time.RFC1123Z) - case status.Waiting != nil: - retval.State = "Waiting" - retval.Reason = status.Waiting.Reason - retval.Message = status.Waiting.Message - case status.Terminated != nil: - retval.State = "Terminated" - retval.Message = status.Terminated.Message - retval.Reason = status.Terminated.Reason - retval.ExitCode = int64(status.Terminated.ExitCode) - retval.Signal = int64(status.Terminated.Signal) - retval.Started = status.Terminated.StartedAt.Time.Format(time.RFC1123Z) - retval.Finished = status.Terminated.FinishedAt.Time.Format(time.RFC1123Z) - default: - retval.State = "Waiting" - } - return retval -} - -func describeContainerPorts(cPorts []corev1.ContainerPort) []string { - ports := make([]string, 0, len(cPorts)) - for _, cPort := range cPorts { - ports = append(ports, fmt.Sprintf("%d/%s", cPort.ContainerPort, cPort.Protocol)) - } - return ports -} - -func describeContainerHostPorts(cPorts []corev1.ContainerPort) []string { - ports := make([]string, 0, len(cPorts)) - for _, cPort := range cPorts { - ports = append(ports, fmt.Sprintf("%d/%s", cPort.HostPort, cPort.Protocol)) - } - return ports -} - -// getPodQOS gets Pod's Quality of Service Class -func getPodQOS(pod *corev1.Pod) corev1.PodQOSClass { - requests := corev1.ResourceList{} - limits := corev1.ResourceList{} - zeroQuantity := resource.MustParse("0") - isGuaranteed := true - allContainers := []corev1.Container{} - allContainers = append(allContainers, pod.Spec.Containers...) - allContainers = append(allContainers, pod.Spec.InitContainers...) - for _, container := range allContainers { - // process requests - for name, quantity := range container.Resources.Requests { - if !isSupportedQoSComputeResource(name) { - continue - } - if quantity.Cmp(zeroQuantity) == 1 { - delta := quantity.DeepCopy() - if _, exists := requests[name]; !exists { - requests[name] = delta - } else { - delta.Add(requests[name]) - requests[name] = delta - } - } - } - // process limits - qosLimitsFound := sets.NewString() - for name, quantity := range container.Resources.Limits { - if !isSupportedQoSComputeResource(name) { - continue - } - if quantity.Cmp(zeroQuantity) == 1 { - qosLimitsFound.Insert(string(name)) - delta := quantity.DeepCopy() - if _, exists := limits[name]; !exists { - limits[name] = delta - } else { - delta.Add(limits[name]) - limits[name] = delta - } - } - } - - if !qosLimitsFound.HasAll(string(corev1.ResourceMemory), string(corev1.ResourceCPU)) { - isGuaranteed = false - } - } - if len(requests) == 0 && len(limits) == 0 { - return corev1.PodQOSBestEffort - } - // Check is requests match limits for all resources. - if isGuaranteed { - for name, req := range requests { - if lim, exists := limits[name]; !exists || lim.Cmp(req) != 0 { - isGuaranteed = false - break - } - } - } - if isGuaranteed && - len(requests) == len(limits) { - return corev1.PodQOSGuaranteed - } - return corev1.PodQOSBurstable -} - -var supportedQoSComputeResources = sets.NewString(string(corev1.ResourceCPU), string(corev1.ResourceMemory)) - -func isSupportedQoSComputeResource(name corev1.ResourceName) bool { - return supportedQoSComputeResources.Has(string(name)) -} - -func translateTimestampSince(timestamp metav1.Time) string { - if timestamp.IsZero() { - return "" - } - - return duration.HumanDuration(time.Since(timestamp.Time)) -} - -func getTenantLogReportResponse(session *models.Principal, params operator_api.GetTenantLogReportParams) (*models.TenantLogReport, *models.Error) { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - - payload := &models.TenantLogReport{} - - clientset, err := K8sClient(session.STSSessionToken) - if err != nil { - return payload, ErrorWithContext(ctx, err) - } - operatorCli, err := GetOperatorClient(session.STSSessionToken) - if err != nil { - return payload, ErrorWithContext(ctx, err) - } - opClient := &operatorClient{ - client: operatorCli, - } - if err != nil { - return payload, ErrorWithContext(ctx, err) - } - minTenant, err := getTenant(ctx, opClient, params.Namespace, params.Tenant) - if err != nil { - return payload, ErrorWithContext(ctx, err) - } - reportBytes, reportError := generateTenantLogReport(ctx, clientset.CoreV1(), params.Tenant, params.Namespace, minTenant) - if reportError != nil { - return payload, ErrorWithContext(ctx, reportError) - } - payload.Filename = params.Tenant + "-report.zip" - sEnc := base64.StdEncoding.EncodeToString(reportBytes) - payload.Blob = sEnc - - return payload, nil -} - -func generateTenantLogReport(ctx context.Context, coreInterface v1.CoreV1Interface, tenantName string, namespace string, tenant *miniov2.Tenant) ([]byte, *models.Error) { - if tenantName == "" || namespace == "" { - return []byte{}, ErrorWithContext(ctx, errors.New("Namespace and Tenant name cannot be empty")) - } - podListOpts := metav1.ListOptions{ - LabelSelector: fmt.Sprintf("%s=%s", miniov2.TenantLabel, tenantName), - } - pods, err := coreInterface.Pods(namespace).List(ctx, podListOpts) - if err != nil { - return []byte{}, ErrorWithContext(ctx, err) - } - events := coreInterface.Events(namespace) - - var report bytes.Buffer - - zipw := zip.NewWriter(&report) - - tenantAsYaml, err := yaml.Marshal(tenant) - if err == nil { - f, err := zipw.Create(tenantName + ".yaml") - - if err == nil { - - _, err := f.Write(tenantAsYaml) - if err != nil { - return []byte{}, ErrorWithContext(ctx, err) - } - } - } else { - return []byte{}, ErrorWithContext(ctx, err) - } - for i := 0; i < len(pods.Items); i++ { - listOpts := &corev1.PodLogOptions{Container: "minio"} - request := coreInterface.Pods(namespace).GetLogs(pods.Items[i].Name, listOpts) - buff, err := request.DoRaw(ctx) - if err == nil { - f, err := zipw.Create(pods.Items[i].Name + ".log") - if err == nil { - f.Write(buff) - } - } else { - return []byte{}, ErrorWithContext(ctx, err) - } - podEvents, err := events.List(ctx, metav1.ListOptions{FieldSelector: fmt.Sprintf("involvedObject.uid=%s", pods.Items[i].UID)}) - if err == nil { - podEventsJSON, err := json.Marshal(podEvents) - if err == nil { - f, err := zipw.Create(pods.Items[i].Name + "-events.txt") - if err == nil { - f.Write(podEventsJSON) - } - } - } else { - return []byte{}, ErrorWithContext(ctx, err) - } - status := pods.Items[i].Status - statusJSON, err := json.Marshal(status) - if err == nil { - f, err := zipw.Create(pods.Items[i].Name + "-status.txt") - if err == nil { - f.Write(statusJSON) - } - } else { - return []byte{}, ErrorWithContext(ctx, err) - } - } - zipw.Close() - - return report.Bytes(), nil -} diff --git a/api/pod-handlers_test.go b/api/pod-handlers_test.go deleted file mode 100644 index d4551d71f6f..00000000000 --- a/api/pod-handlers_test.go +++ /dev/null @@ -1,554 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "net/http" - "time" - - "github.com/go-openapi/swag" - - "github.com/minio/operator/api/operations" - "github.com/minio/operator/api/operations/operator_api" - "github.com/minio/operator/models" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/util/duration" -) - -func (suite *TenantTestSuite) TestDeletePodHandlerWithoutError() { - params, api := suite.initDeletePodRequest() - response := api.OperatorAPIDeletePodHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.DeletePodDefault) - suite.assert.True(ok) -} - -func (suite *TenantTestSuite) initDeletePodRequest() (params operator_api.DeletePodParams, api operations.OperatorAPI) { - registerPodHandlers(&api) - params.HTTPRequest = &http.Request{} - params.Namespace = "mock-namespace" - params.Tenant = "mock-tenant" - params.PodName = "mock-tenantmock-pod" - return params, api -} - -func (suite *TenantTestSuite) TestGetTenantPodsHandlerWithError() { - params, api := suite.initGetTenantPodsRequest() - response := api.OperatorAPIGetTenantPodsHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.GetTenantPodsDefault) - suite.assert.True(ok) -} - -func (suite *TenantTestSuite) initGetTenantPodsRequest() (params operator_api.GetTenantPodsParams, api operations.OperatorAPI) { - registerPodHandlers(&api) - params.HTTPRequest = &http.Request{} - params.Namespace = "mock-namespace" - params.Tenant = "mock-tenant" - return params, api -} - -func (suite *TenantTestSuite) TestGetTenantPodsWithoutError() { - pods := getTenantPods(&corev1.PodList{ - Items: []corev1.Pod{ - { - Status: corev1.PodStatus{ - ContainerStatuses: []corev1.ContainerStatus{{}}, - }, - ObjectMeta: metav1.ObjectMeta{ - DeletionTimestamp: &metav1.Time{Time: time.Now()}, - }, - }, - }, - }) - suite.assert.Equal(1, len(pods)) -} - -func (suite *TenantTestSuite) TestGetPodLogsHandlerWithError() { - params, api := suite.initGetPodLogsRequest() - response := api.OperatorAPIGetPodLogsHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.GetPodLogsDefault) - suite.assert.True(ok) -} - -func (suite *TenantTestSuite) initGetPodLogsRequest() (params operator_api.GetPodLogsParams, api operations.OperatorAPI) { - registerPodHandlers(&api) - params.HTTPRequest = &http.Request{} - params.Namespace = "mock-namespace" - params.Tenant = "mock-tenant" - params.PodName = "mokc-pod" - return params, api -} - -func (suite *TenantTestSuite) TestGetPodEventsHandlerWithError() { - params, api := suite.initGetPodEventsRequest() - response := api.OperatorAPIGetPodEventsHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.GetPodEventsDefault) - suite.assert.True(ok) -} - -func (suite *TenantTestSuite) initGetPodEventsRequest() (params operator_api.GetPodEventsParams, api operations.OperatorAPI) { - registerPodHandlers(&api) - params.HTTPRequest = &http.Request{} - params.Namespace = "mock-namespace" - params.Tenant = "mock-tenant" - params.PodName = "mock-pod" - return params, api -} - -func (suite *TenantTestSuite) TestDescribePodHandlerWithError() { - params, api := suite.initDescribePodRequest() - response := api.OperatorAPIDescribePodHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.DescribePodDefault) - suite.assert.True(ok) -} - -func (suite *TenantTestSuite) initDescribePodRequest() (params operator_api.DescribePodParams, api operations.OperatorAPI) { - registerPodHandlers(&api) - params.HTTPRequest = &http.Request{} - params.Namespace = "mock-namespace" - params.Tenant = "mock-tenant" - params.PodName = "mock-pod" - return params, api -} - -func (suite *TenantTestSuite) TestGetDescribePodBuildsResponseFromPodInfo() { - mockTime := time.Date(2023, 4, 25, 14, 30, 45, 100, time.UTC) - mockContainerOne := corev1.Container{ - Name: "c1", - Image: "c1-image", - Ports: []corev1.ContainerPort{ - { - Name: "c1-port-1", - HostPort: int32(9000), - ContainerPort: int32(8080), - Protocol: corev1.ProtocolTCP, - }, - { - Name: "c1-port-2", - HostPort: int32(3000), - ContainerPort: int32(7070), - Protocol: corev1.ProtocolUDP, - }, - }, - Args: []string{"c1-arg1", "c1-arg2"}, - Env: []corev1.EnvVar{ - { - Name: "c1-env-var1", - Value: "c1-env-value1", - }, - { - Name: "c1-env-var2", - Value: "c1-env-value2", - }, - }, - VolumeMounts: []corev1.VolumeMount{ - { - Name: "c1-mount1", - MountPath: "c1-mount1-path", - ReadOnly: true, - SubPath: "c1-mount1-subpath", - }, - { - Name: "c1-mount2", - MountPath: "c1-mount2-path", - ReadOnly: true, - SubPath: "c1-mount2-subpath", - }, - }, - } - mockContainerTwo := corev1.Container{ - Name: "c2", - Image: "c2-image", - Ports: []corev1.ContainerPort{ - { - Name: "c2-port-1", - HostPort: int32(9000), - ContainerPort: int32(8080), - Protocol: corev1.ProtocolTCP, - }, - { - Name: "c2-port-2", - HostPort: int32(3000), - ContainerPort: int32(7070), - Protocol: corev1.ProtocolUDP, - }, - }, - Args: []string{"c2-arg1", "c2-arg2"}, - Env: []corev1.EnvVar{ - { - Name: "c2-env-var1", - Value: "c2-env-value1", - }, - { - Name: "c2-env-var2", - Value: "c2-env-value2", - }, - }, - VolumeMounts: []corev1.VolumeMount{ - { - Name: "c2-mount1", - MountPath: "c2-mount1-path", - ReadOnly: true, - SubPath: "c2-mount1-subpath", - }, - { - Name: "c2-mount2", - MountPath: "c2-mount2-path", - ReadOnly: true, - SubPath: "c2-mount2-subpath", - }, - }, - } - mockPodInfo := &corev1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "mock-pod", - Namespace: "mock-namespace", - Labels: map[string]string{"Key1": "Val1", "Key2": "Val2"}, - Annotations: map[string]string{"Annotation1": "Annotation1Val1", "Annotation2": "Annotation1Val2"}, - DeletionTimestamp: &metav1.Time{Time: mockTime}, - DeletionGracePeriodSeconds: swag.Int64(60), - OwnerReferences: []metav1.OwnerReference{ - { - APIVersion: "v1", - Kind: "ReferenceKind", - Name: "ReferenceName", - Controller: swag.Bool(true), - }, - }, - }, - Spec: corev1.PodSpec{ - PriorityClassName: "mock-priority-class", - NodeName: "mock-node", - Priority: swag.Int32(10), - Containers: []corev1.Container{mockContainerOne, mockContainerTwo}, - Volumes: []corev1.Volume{ - { - Name: "v1", - VolumeSource: corev1.VolumeSource{ - PersistentVolumeClaim: &corev1.PersistentVolumeClaimVolumeSource{ - ClaimName: "v1-pvc", - ReadOnly: true, - }, - }, - }, - { - Name: "v1", - VolumeSource: corev1.VolumeSource{ - Projected: &corev1.ProjectedVolumeSource{ - Sources: []corev1.VolumeProjection{ - { - Secret: &corev1.SecretProjection{ - LocalObjectReference: corev1.LocalObjectReference{ - Name: "v1-vs-secret1", - }, - }, - DownwardAPI: &corev1.DownwardAPIProjection{ - Items: []corev1.DownwardAPIVolumeFile{}, - }, - ConfigMap: &corev1.ConfigMapProjection{ - LocalObjectReference: corev1.LocalObjectReference{ - Name: "v1-vs-configmap1", - }, - }, - ServiceAccountToken: &corev1.ServiceAccountTokenProjection{ - ExpirationSeconds: swag.Int64(1000), - }, - }, - }, - DefaultMode: swag.Int32(511), - }, - }, - }, - }, - NodeSelector: map[string]string{ - "p1-ns-key1": "p1-ns-val1", - "p1-ns-key2": "p1-ns-val2", - }, - Tolerations: []corev1.Toleration{ - { - Key: "p1-t1-key", - Operator: corev1.TolerationOpExists, - Value: "p1-t1-val", - Effect: corev1.TaintEffectNoSchedule, - TolerationSeconds: swag.Int64(60), - }, - { - Key: "p1-t2-key", - Operator: corev1.TolerationOpEqual, - Value: "p1-t2-val", - Effect: corev1.TaintEffectPreferNoSchedule, - TolerationSeconds: swag.Int64(70), - }, - }, - }, - Status: corev1.PodStatus{ - StartTime: &metav1.Time{Time: mockTime}, - ContainerStatuses: []corev1.ContainerStatus{ - { - Name: "c1", - ContainerID: "c1-id", - ImageID: "c1-image-id", - Ready: true, - RestartCount: int32(3), - State: corev1.ContainerState{ - Running: &corev1.ContainerStateRunning{ - StartedAt: metav1.Time{Time: mockTime}, - }, - }, - LastTerminationState: corev1.ContainerState{ - Waiting: &corev1.ContainerStateWaiting{ - Reason: "c1-some-reason", - Message: "c1-some-message", - }, - }, - }, - { - Name: "c2", - ContainerID: "c2-id", - ImageID: "c2-image-id", - Ready: true, - RestartCount: int32(3), - State: corev1.ContainerState{ - Running: &corev1.ContainerStateRunning{ - StartedAt: metav1.Time{Time: mockTime}, - }, - }, - LastTerminationState: corev1.ContainerState{ - Terminated: &corev1.ContainerStateTerminated{ - Reason: "c2-some-reason", - Message: "c2-some-message", - ExitCode: int32(4), - Signal: int32(1), - StartedAt: metav1.Time{Time: mockTime}, - FinishedAt: metav1.Time{Time: mockTime}, - ContainerID: "c2-id", - }, - }, - }, - }, - Phase: corev1.PodPhase("phase"), - Reason: "StatusReason", - Message: "StatusMessage", - PodIP: "192.1.2.3", - Conditions: []corev1.PodCondition{ - { - Type: corev1.ContainersReady, - Status: corev1.ConditionTrue, - }, - { - Type: corev1.PodInitialized, - Status: corev1.ConditionFalse, - }, - }, - }, - } - - res, err := getDescribePod(mockPodInfo) - - suite.assert.NotNil(res) - suite.assert.Nil(err) - suite.assert.Equal(mockPodInfo.Name, res.Name) - suite.assert.Equal(mockPodInfo.Namespace, res.Namespace) - suite.assert.Equal(mockPodInfo.Spec.PriorityClassName, res.PriorityClassName) - suite.assert.Equal(mockPodInfo.Spec.NodeName, res.NodeName) - suite.assert.Equal(int64(10), res.Priority) - suite.assert.Equal(mockPodInfo.Status.StartTime.Time.String(), res.StartTime) - suite.assert.Contains(res.Labels, &models.Label{Key: "Key1", Value: "Val1"}) - suite.assert.Contains(res.Labels, &models.Label{Key: "Key2", Value: "Val2"}) - suite.assert.Contains(res.Annotations, &models.Annotation{Key: "Annotation1", Value: "Annotation1Val1"}) - suite.assert.Contains(res.Annotations, &models.Annotation{Key: "Annotation2", Value: "Annotation1Val2"}) - suite.assert.Equal(duration.HumanDuration(time.Since(mockTime)), res.DeletionTimestamp) - suite.assert.Equal(int64(60), res.DeletionGracePeriodSeconds) - suite.assert.Equal("phase", res.Phase) - suite.assert.Equal("StatusReason", res.Reason) - suite.assert.Equal("StatusMessage", res.Message) - suite.assert.Equal("192.1.2.3", res.PodIP) - suite.assert.Equal("&OwnerReference{Kind:ReferenceKind,Name:ReferenceName,UID:,APIVersion:v1,Controller:*true,BlockOwnerDeletion:nil,}", res.ControllerRef) - suite.assert.Equal([]*models.Container{ - { - Name: "c1", - Image: "c1-image", - Ports: []string{"8080/TCP", "7070/UDP"}, - HostPorts: []string{"9000/TCP", "3000/UDP"}, - Args: []string{"c1-arg1", "c1-arg2"}, - ContainerID: "c1-id", - ImageID: "c1-image-id", - Ready: true, - RestartCount: int64(3), - State: &models.State{ - ExitCode: int64(0), - Finished: "", - Message: "", - Reason: "", - Signal: int64(0), - Started: "Tue, 25 Apr 2023 14:30:45 +0000", - State: "Running", - }, - LastState: &models.State{ - ExitCode: int64(0), - Finished: "", - Message: "c1-some-message", - Reason: "c1-some-reason", - Signal: int64(0), - Started: "", - State: "Waiting", - }, - EnvironmentVariables: []*models.EnvironmentVariable{ - { - Key: "c1-env-var1", - Value: "c1-env-value1", - }, - { - Key: "c1-env-var2", - Value: "c1-env-value2", - }, - }, - Mounts: []*models.Mount{ - { - Name: "c1-mount1", - MountPath: "c1-mount1-path", - ReadOnly: true, - SubPath: "c1-mount1-subpath", - }, - { - Name: "c1-mount2", - MountPath: "c1-mount2-path", - ReadOnly: true, - SubPath: "c1-mount2-subpath", - }, - }, - }, - { - Name: "c2", - Image: "c2-image", - Ports: []string{"8080/TCP", "7070/UDP"}, - HostPorts: []string{"9000/TCP", "3000/UDP"}, - Args: []string{"c2-arg1", "c2-arg2"}, - ContainerID: "c2-id", - ImageID: "c2-image-id", - Ready: true, - RestartCount: int64(3), - State: &models.State{ - ExitCode: int64(0), - Finished: "", - Message: "", - Reason: "", - Signal: int64(0), - Started: "Tue, 25 Apr 2023 14:30:45 +0000", - State: "Running", - }, - LastState: &models.State{ - ExitCode: int64(4), - Finished: "Tue, 25 Apr 2023 14:30:45 +0000", - Message: "c2-some-message", - Reason: "c2-some-reason", - Signal: int64(1), - Started: "Tue, 25 Apr 2023 14:30:45 +0000", - State: "Terminated", - }, - EnvironmentVariables: []*models.EnvironmentVariable{ - { - Key: "c2-env-var1", - Value: "c2-env-value1", - }, - { - Key: "c2-env-var2", - Value: "c2-env-value2", - }, - }, - Mounts: []*models.Mount{ - { - Name: "c2-mount1", - MountPath: "c2-mount1-path", - ReadOnly: true, - SubPath: "c2-mount1-subpath", - }, - { - Name: "c2-mount2", - MountPath: "c2-mount2-path", - ReadOnly: true, - SubPath: "c2-mount2-subpath", - }, - }, - }, - }, res.Containers) - suite.assert.Equal([]*models.Condition{ - { - Type: "ContainersReady", - Status: "True", - }, - { - Type: "Initialized", - Status: "False", - }, - }, res.Conditions) - suite.assert.Equal([]*models.Volume{ - { - Name: "v1", - Pvc: &models.Pvc{ - ClaimName: "v1-pvc", - ReadOnly: true, - }, - }, - { - Name: "v1", - Projected: &models.ProjectedVolume{ - Sources: []*models.ProjectedVolumeSource{ - { - Secret: &models.Secret{ - Name: "v1-vs-secret1", - Optional: false, - }, - DownwardAPI: true, - ConfigMap: &models.ConfigMap{ - Name: "v1-vs-configmap1", - Optional: false, - }, - ServiceAccountToken: &models.ServiceAccountToken{ - ExpirationSeconds: int64(1000), - }, - }, - }, - }, - }, - }, res.Volumes) - suite.assert.Equal("BestEffort", res.QosClass) - suite.assert.Contains(res.NodeSelector, &models.NodeSelector{ - Key: "p1-ns-key1", - Value: "p1-ns-val1", - }) - suite.assert.Contains(res.NodeSelector, &models.NodeSelector{ - Key: "p1-ns-key2", - Value: "p1-ns-val2", - }) - suite.assert.Equal([]*models.Toleration{ - { - Key: "p1-t1-key", - Operator: "Exists", - Value: "p1-t1-val", - Effect: "NoSchedule", - TolerationSeconds: int64(60), - }, - { - Key: "p1-t2-key", - Operator: "Equal", - Value: "p1-t2-val", - Effect: "PreferNoSchedule", - TolerationSeconds: int64(70), - }, - }, res.Tolerations) -} diff --git a/api/pool-handlers.go b/api/pool-handlers.go deleted file mode 100644 index 205ee0d1198..00000000000 --- a/api/pool-handlers.go +++ /dev/null @@ -1,140 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "encoding/json" - "errors" - - "github.com/go-openapi/runtime/middleware" - "github.com/minio/operator/api/operations" - "github.com/minio/operator/api/operations/operator_api" - "github.com/minio/operator/models" - miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/types" -) - -func registerPoolHandlers(api *operations.OperatorAPI) { - // Add Tenant Pools - api.OperatorAPITenantAddPoolHandler = operator_api.TenantAddPoolHandlerFunc(func(params operator_api.TenantAddPoolParams, session *models.Principal) middleware.Responder { - // check the poolName if it exists - resp, err := getTenantDetailsResponse(session, operator_api.TenantDetailsParams{Namespace: params.Namespace, Tenant: params.Tenant, HTTPRequest: params.HTTPRequest}) - if err != nil { - return operator_api.NewTenantAddPoolDefault(int(err.Code)).WithPayload(err) - } - for _, p := range resp.Pools { - if p.Name == params.Body.Name { - err = ErrorWithContext(params.HTTPRequest.Context(), ErrPoolExists) - return operator_api.NewTenantAddPoolDefault(int(err.Code)).WithPayload(err) - } - } - err = getTenantAddPoolResponse(session, params) - if err != nil { - return operator_api.NewTenantAddPoolDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewTenantAddPoolCreated() - }) - // Update Tenant Pools - api.OperatorAPITenantUpdatePoolsHandler = operator_api.TenantUpdatePoolsHandlerFunc(func(params operator_api.TenantUpdatePoolsParams, session *models.Principal) middleware.Responder { - resp, err := getTenantUpdatePoolResponse(session, params) - if err != nil { - return operator_api.NewTenantUpdatePoolsDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewTenantUpdatePoolsOK().WithPayload(resp) - }) -} - -func getTenantAddPoolResponse(session *models.Principal, params operator_api.TenantAddPoolParams) *models.Error { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - - opClientClientSet, err := GetOperatorClient(session.STSSessionToken) - if err != nil { - return ErrorWithContext(ctx, err) - } - opClient := &operatorClient{ - client: opClientClientSet, - } - if err := addTenantPool(ctx, opClient, params); err != nil { - return ErrorWithContext(ctx, err, errors.New("unable to add pool")) - } - return nil -} - -func getTenantUpdatePoolResponse(session *models.Principal, params operator_api.TenantUpdatePoolsParams) (*models.Tenant, *models.Error) { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - opClientClientSet, err := GetOperatorClient(session.STSSessionToken) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - - opClient := &operatorClient{ - client: opClientClientSet, - } - - tenant, err := updateTenantPools(ctx, opClient, params.Namespace, params.Tenant, params.Body.Pools) - if err != nil { - LogError("error updating Tenant's pools: %v", err) - return nil, ErrorWithContext(ctx, err) - } - return tenant, nil -} - -// updateTenantPools Sets the Tenant's pools to the ones provided by the request -// -// It does the equivalent to a PUT request on Tenant's pools -func updateTenantPools( - ctx context.Context, - operatorClient OperatorClientI, - namespace string, - tenantName string, - poolsReq []*models.Pool, -) (*models.Tenant, error) { - minInst, err := operatorClient.TenantGet(ctx, namespace, tenantName, metav1.GetOptions{}) - if err != nil { - return nil, err - } - - // set the pools if they are provided - var newPoolArray []miniov2.Pool - for _, pool := range poolsReq { - pool, err := parseTenantPoolRequest(pool) - if err != nil { - return nil, err - } - newPoolArray = append(newPoolArray, *pool) - } - - // replace pools array - minInst.Spec.Pools = newPoolArray - - minInst = minInst.DeepCopy() - minInst.EnsureDefaults() - - payloadBytes, err := json.Marshal(minInst) - if err != nil { - return nil, err - } - tenantUpdated, err := operatorClient.TenantPatch(ctx, namespace, minInst.Name, types.MergePatchType, payloadBytes, metav1.PatchOptions{}) - if err != nil { - return nil, err - } - return getTenantInfo(tenantUpdated), nil -} diff --git a/api/pool-handlers_test.go b/api/pool-handlers_test.go deleted file mode 100644 index ee264b4b829..00000000000 --- a/api/pool-handlers_test.go +++ /dev/null @@ -1,258 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "errors" - "net/http" - - "github.com/minio/operator/api/operations" - "github.com/minio/operator/api/operations/operator_api" - "github.com/minio/operator/models" - miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - corev1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/resource" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - types "k8s.io/apimachinery/pkg/types" -) - -func (suite *TenantTestSuite) TestTenantAddPoolHandlerWithError() { - params, api := suite.initTenantAddPoolRequest() - response := api.OperatorAPITenantAddPoolHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.TenantAddPoolDefault) - suite.assert.True(ok) -} - -func (suite *TenantTestSuite) initTenantAddPoolRequest() (params operator_api.TenantAddPoolParams, api operations.OperatorAPI) { - registerPoolHandlers(&api) - params.HTTPRequest = &http.Request{} - params.Namespace = "mock-namespace" - params.Tenant = "mock-tenant" - return params, api -} - -func (suite *TenantTestSuite) TestTenantUpdatePoolsHandlerWithError() { - params, api := suite.initTenantUpdatePoolsRequest() - response := api.OperatorAPITenantUpdatePoolsHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.TenantUpdatePoolsDefault) - suite.assert.True(ok) -} - -func (suite *TenantTestSuite) initTenantUpdatePoolsRequest() (params operator_api.TenantUpdatePoolsParams, api operations.OperatorAPI) { - registerPoolHandlers(&api) - params.HTTPRequest = &http.Request{} - params.Namespace = "mock-namespace" - params.Tenant = "mock-tenant" - params.Body = &models.PoolUpdateRequest{ - Pools: []*models.Pool{}, - } - return params, api -} - -func (suite *TenantTestSuite) TestUpdateTenantPoolsWithPoolError() { - opClientTenantGetMock = func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{}, nil - } - _, err := updateTenantPools(context.Background(), suite.opClient, "mock-namespace", "mock-tenant", []*models.Pool{{}}) - suite.assert.NotNil(err) -} - -func (suite *TenantTestSuite) TestUpdateTenantPoolsWithPatchError() { - size := int64(1024) - seconds := int64(5) - weight := int32(1024) - servers := int64(4) - volumes := int32(4) - mockString := "mock-string" - pools := []*models.Pool{{ - VolumeConfiguration: &models.PoolVolumeConfiguration{ - Size: &size, - }, - Servers: &servers, - VolumesPerServer: &volumes, - Resources: &models.PoolResources{ - Requests: map[string]int64{ - "cpu": 1, - }, - Limits: map[string]int64{ - "memory": 1, - }, - }, - Tolerations: models.PoolTolerations{{ - TolerationSeconds: &models.PoolTolerationSeconds{ - Seconds: &seconds, - }, - }}, - Affinity: &models.PoolAffinity{ - NodeAffinity: &models.PoolAffinityNodeAffinity{ - RequiredDuringSchedulingIgnoredDuringExecution: &models.PoolAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecution{ - NodeSelectorTerms: []*models.NodeSelectorTerm{{ - MatchExpressions: []*models.NodeSelectorTermMatchExpressionsItems0{{ - Key: &mockString, - Operator: &mockString, - }}, - }}, - }, - PreferredDuringSchedulingIgnoredDuringExecution: []*models.PoolAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0{{ - Weight: &weight, - Preference: &models.NodeSelectorTerm{ - MatchFields: []*models.NodeSelectorTermMatchFieldsItems0{{ - Key: &mockString, - Operator: &mockString, - }}, - }, - }}, - }, - PodAffinity: &models.PoolAffinityPodAffinity{ - RequiredDuringSchedulingIgnoredDuringExecution: []*models.PodAffinityTerm{{ - LabelSelector: &models.PodAffinityTermLabelSelector{ - MatchExpressions: []*models.PodAffinityTermLabelSelectorMatchExpressionsItems0{{ - Key: &mockString, - Operator: &mockString, - }}, - }, - TopologyKey: &mockString, - }}, - PreferredDuringSchedulingIgnoredDuringExecution: []*models.PoolAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0{{ - PodAffinityTerm: &models.PodAffinityTerm{ - LabelSelector: &models.PodAffinityTermLabelSelector{ - MatchExpressions: []*models.PodAffinityTermLabelSelectorMatchExpressionsItems0{{ - Key: &mockString, - Operator: &mockString, - }}, - }, - TopologyKey: &mockString, - }, - Weight: &weight, - }}, - }, - PodAntiAffinity: &models.PoolAffinityPodAntiAffinity{ - RequiredDuringSchedulingIgnoredDuringExecution: []*models.PodAffinityTerm{{ - LabelSelector: &models.PodAffinityTermLabelSelector{ - MatchExpressions: []*models.PodAffinityTermLabelSelectorMatchExpressionsItems0{{ - Key: &mockString, - Operator: &mockString, - }}, - }, - TopologyKey: &mockString, - }}, - PreferredDuringSchedulingIgnoredDuringExecution: []*models.PoolAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0{{ - PodAffinityTerm: &models.PodAffinityTerm{ - LabelSelector: &models.PodAffinityTermLabelSelector{ - MatchExpressions: []*models.PodAffinityTermLabelSelectorMatchExpressionsItems0{{ - Key: &mockString, - Operator: &mockString, - }}, - }, - TopologyKey: &mockString, - }, - Weight: &weight, - }}, - }, - }, - }} - opClientTenantGetMock = func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{}, nil - } - opClientTenantPatchMock = func(ctx context.Context, namespace string, tenantName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*miniov2.Tenant, error) { - return nil, errors.New("mock-patch-error") - } - _, err := updateTenantPools(context.Background(), suite.opClient, "mock-namespace", "mock-tenant", pools) - suite.assert.NotNil(err) -} - -func (suite *TenantTestSuite) TestUpdateTenantPoolsWithoutError() { - seconds := int64(10) - opClientTenantGetMock = func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{}, nil - } - opClientTenantPatchMock = func(ctx context.Context, namespace string, tenantName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{ - Spec: miniov2.TenantSpec{ - Pools: []miniov2.Pool{{ - VolumeClaimTemplate: &corev1.PersistentVolumeClaim{ - Spec: corev1.PersistentVolumeClaimSpec{ - Resources: corev1.VolumeResourceRequirements{ - Requests: corev1.ResourceList{ - corev1.ResourceStorage: resource.MustParse("1Gi"), - }, - }, - }, - }, - SecurityContext: suite.createTenantPodSecurityContext(), - Tolerations: []corev1.Toleration{{ - TolerationSeconds: &seconds, - }}, - Resources: corev1.ResourceRequirements{ - Requests: corev1.ResourceList{ - corev1.ResourceCPU: resource.MustParse("1"), - corev1.ResourceMemory: resource.MustParse("1Gi"), - }, - Limits: corev1.ResourceList{ - corev1.ResourceLimitsMemory: resource.MustParse("1"), - }, - }, - Affinity: &corev1.Affinity{ - NodeAffinity: &corev1.NodeAffinity{ - RequiredDuringSchedulingIgnoredDuringExecution: &corev1.NodeSelector{ - NodeSelectorTerms: []corev1.NodeSelectorTerm{{ - MatchExpressions: []corev1.NodeSelectorRequirement{{}}, - }}, - }, - PreferredDuringSchedulingIgnoredDuringExecution: []corev1.PreferredSchedulingTerm{{ - Preference: corev1.NodeSelectorTerm{ - MatchFields: []corev1.NodeSelectorRequirement{{}}, - }, - }}, - }, - PodAffinity: &corev1.PodAffinity{ - RequiredDuringSchedulingIgnoredDuringExecution: []corev1.PodAffinityTerm{{ - LabelSelector: &metav1.LabelSelector{ - MatchExpressions: []metav1.LabelSelectorRequirement{{}}, - }, - }}, - PreferredDuringSchedulingIgnoredDuringExecution: []corev1.WeightedPodAffinityTerm{{ - PodAffinityTerm: corev1.PodAffinityTerm{ - LabelSelector: &metav1.LabelSelector{ - MatchExpressions: []metav1.LabelSelectorRequirement{{}}, - }, - }, - }}, - }, - PodAntiAffinity: &corev1.PodAntiAffinity{ - RequiredDuringSchedulingIgnoredDuringExecution: []corev1.PodAffinityTerm{{ - LabelSelector: &metav1.LabelSelector{ - MatchExpressions: []metav1.LabelSelectorRequirement{{}}, - }, - }}, - PreferredDuringSchedulingIgnoredDuringExecution: []corev1.WeightedPodAffinityTerm{{ - PodAffinityTerm: corev1.PodAffinityTerm{ - LabelSelector: &metav1.LabelSelector{ - MatchExpressions: []metav1.LabelSelectorRequirement{{}}, - }, - }, - }}, - }, - }, - }}, - }, - }, nil - } - _, err := updateTenantPools(context.Background(), suite.opClient, "mock-namespace", "mock-tenant", []*models.Pool{}) - suite.assert.Nil(err) -} diff --git a/api/proxy.go b/api/proxy.go deleted file mode 100644 index 95e6d3adace..00000000000 --- a/api/proxy.go +++ /dev/null @@ -1,342 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "bytes" - "crypto/sha1" - "crypto/tls" - "encoding/json" - "errors" - "fmt" - "io" - "log" - "net/http" - "net/http/cookiejar" - url2 "net/url" - "strings" - "time" - - "github.com/minio/websocket" - - v2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - - "github.com/minio/operator/pkg/auth" -) - -func serveProxy(responseWriter http.ResponseWriter, req *http.Request) { - urlParts := strings.Split(req.URL.Path, "/") - // Either proxy or hop, will decide the type of session - proxyMethod := urlParts[2] - - if len(urlParts) < 5 { - log.Println(len(urlParts)) - return - } - namespace := urlParts[3] - tenantName := urlParts[4] - - // validate the tenantName - - token, err := auth.GetTokenFromRequest(req) - if err != nil { - log.Println(err) - responseWriter.WriteHeader(401) - return - } - claims, err := auth.SessionTokenAuthenticate(token) - if err != nil { - log.Printf("Unable to validate the session token %s: %v\n", token, err) - responseWriter.WriteHeader(401) - - return - } - - STSSessionToken := claims.STSSessionToken - - opClientClientSet, err := GetOperatorClient(STSSessionToken) - if err != nil { - log.Println(err) - responseWriter.WriteHeader(404) - return - } - opClient := operatorClient{ - client: opClientClientSet, - } - tenant, err := opClient.TenantGet(req.Context(), namespace, tenantName, metav1.GetOptions{}) - if err != nil { - log.Println(err) - responseWriter.WriteHeader(502) - return - } - - nsTenant := fmt.Sprintf("%s/%s", tenant.Namespace, tenant.Name) - - tenantSchema := "http" - tenantPort := fmt.Sprintf(":%d", v2.ConsolePort) - if tenant.AutoCert() || tenant.ExternalCert() { - tenantSchema = "https" - tenantPort = fmt.Sprintf(":%d", v2.ConsoleTLSPort) - } - - tenantURL := fmt.Sprintf("%s://%s.%s.svc.%s%s", tenantSchema, tenant.ConsoleCIServiceName(), tenant.Namespace, v2.GetClusterDomain(), tenantPort) - // for development - // tenantURL = "http://localhost:9091" - // tenantURL = "https://localhost:9443" - - h := sha1.New() - h.Write([]byte(nsTenant)) - tenantCookieName := fmt.Sprintf("token-%s-%s-%x", proxyMethod, claims.AccountAccessKey, string(h.Sum(nil))) - tenantCookie, err := req.Cookie(tenantCookieName) - if err != nil { - // login to tenantName - loginURL := fmt.Sprintf("%s/api/v1/login", tenantURL) - - // get the tenant credentials - clientSet, err := K8sClient(STSSessionToken) - if err != nil { - log.Println(err) - responseWriter.WriteHeader(500) - return - } - - k8sClient := k8sClient{ - client: clientSet, - } - tenantConfiguration, err := GetTenantConfiguration(req.Context(), &k8sClient, tenant) - if err != nil { - log.Println(err) - responseWriter.WriteHeader(500) - return - } - - data := map[string]interface{}{ - "accessKey": tenantConfiguration["accesskey"], - "secretKey": tenantConfiguration["secretkey"], - } - // if this a proxy request hide the menu - if proxyMethod == "proxy" { - data["features"] = map[string]bool{ - "hide_menu": true, - } - } - payload, _ := json.Marshal(data) - - loginReq, err := http.NewRequest(http.MethodPost, loginURL, bytes.NewReader(payload)) - if err != nil { - log.Println(err) - responseWriter.WriteHeader(500) - return - } - loginReq.Header.Add("Content-Type", "application/json") - - // use localhost to ensure 'InsecureSkipVerify' - client := GetConsoleHTTPClient("http://127.0.0.1") - loginResp, err := client.Do(loginReq) - if err != nil { - log.Println(err) - responseWriter.WriteHeader(500) - return - } - - if loginResp.StatusCode < 200 && loginResp.StatusCode <= 299 { - log.Println(fmt.Printf("Status: %d. Couldn't complete login", loginResp.StatusCode)) - responseWriter.WriteHeader(500) - return - } - - for _, c := range loginResp.Cookies() { - if c.Name == "token" { - tenantCookie = c - c := &http.Cookie{ - Name: tenantCookieName, - Value: c.Value, - Path: c.Path, - Expires: c.Expires, - HttpOnly: c.HttpOnly, - } - - http.SetCookie(responseWriter, c) - break - } - } - defer loginResp.Body.Close() - } - - if tenantCookie == nil { - log.Println(errors.New("couldn't login to tenant and get cookie")) - responseWriter.WriteHeader(403) - return - } - // at this point we have a valid cookie ready to either route HTTP or WS - // now we need to know if we are doing an /api/ call (http) or /ws/ call (ws) - callType := urlParts[5] - - targetURL, err := url2.Parse(tenantURL) - if err != nil { - log.Println(err) - responseWriter.WriteHeader(500) - return - } - tenantBase := fmt.Sprintf("/api/%s/%s/%s", proxyMethod, tenant.Namespace, tenant.Name) - targetURL.Path = strings.ReplaceAll(req.URL.Path, tenantBase, "") - - proxiedCookie := &http.Cookie{ - Name: "token", - Value: tenantCookie.Value, - Path: tenantCookie.Path, - Expires: tenantCookie.Expires, - HttpOnly: tenantCookie.HttpOnly, - } - - proxyCookieJar, _ := cookiejar.New(nil) - proxyCookieJar.SetCookies(targetURL, []*http.Cookie{proxiedCookie}) - switch callType { - case "ws": - handleWSRequest(responseWriter, req, proxyCookieJar, targetURL, tenantSchema) - default: - handleHTTPRequest(responseWriter, req, proxyCookieJar, tenantBase, targetURL) - } -} - -func handleHTTPRequest(responseWriter http.ResponseWriter, req *http.Request, proxyCookieJar *cookiejar.Jar, tenantBase string, targetURL *url2.URL) { - // use localhost to ensure 'InsecureSkipVerify' - client := GetConsoleHTTPClient("http://127.0.0.1") - client.Jar = proxyCookieJar - client.CheckRedirect = func(req *http.Request, via []*http.Request) error { - return http.ErrUseLastResponse - } - - // are we proxying something with cp=y? (console proxy) then add cpb (console proxy base) so the console - // on the other side updates the to this value overriding sub path or root - if v := req.URL.Query().Get("cp"); v == "y" { - q := req.URL.Query() - q.Add("cpb", tenantBase) - req.URL.RawQuery = q.Encode() - } - // copy query params - targetURL.RawQuery = req.URL.Query().Encode() - - proxRequest, err := http.NewRequest(req.Method, targetURL.String(), req.Body) - if err != nil { - log.Println(err) - responseWriter.WriteHeader(500) - return - } - - for _, v := range req.Header.Values("Content-Type") { - proxRequest.Header.Add("Content-Type", v) - } - - resp, err := client.Do(proxRequest) - if err != nil { - log.Println(err) - responseWriter.WriteHeader(500) - return - } - - for hk, hv := range resp.Header { - if hk != "X-Frame-Options" { - for _, v := range hv { - responseWriter.Header().Add(hk, v) - } - } - } - // Allow iframes - responseWriter.Header().Set("X-Frame-Options", "SAMEORIGIN") - responseWriter.Header().Set("X-XSS-Protection", "1; mode=block") - // Pass HTTP status code to proxy response - responseWriter.WriteHeader(resp.StatusCode) - - io.Copy(responseWriter, resp.Body) -} - -var upgrader = websocket.Upgrader{ - ReadBufferSize: 0, - WriteBufferSize: 1024, -} - -func handleWSRequest(responseWriter http.ResponseWriter, req *http.Request, proxyCookieJar *cookiejar.Jar, targetURL *url2.URL, schema string) { - dialer := &websocket.Dialer{ - Proxy: http.ProxyFromEnvironment, - HandshakeTimeout: 45 * time.Second, - Jar: proxyCookieJar, - TLSClientConfig: &tls.Config{ - InsecureSkipVerify: true, - }, - } - - upgrader.CheckOrigin = func(r *http.Request) bool { - return true - } - - c, err := upgrader.Upgrade(responseWriter, req, nil) - if err != nil { - log.Print("error upgrade connection:", err) - return - } - defer c.Close() - if schema == "http" { - targetURL.Scheme = "ws" - } else { - targetURL.Scheme = "wss" - } - - // establish a websocket to the tenant - tenantConn, _, err := dialer.Dial(targetURL.String(), nil) - if err != nil { - log.Println("dial:", err) - return - } - defer tenantConn.Close() - - doneTenant := make(chan struct{}) - done := make(chan struct{}) - - // start read pump from tenant connection - go func() { - defer close(doneTenant) - for { - msgType, message, err := tenantConn.ReadMessage() - if err != nil { - log.Println("error read from tenant:", err) - return - } - c.WriteMessage(msgType, message) - } - }() - - // start read pump from tenant connection - go func() { - defer close(done) - for { - msgType, message, err := c.ReadMessage() - if err != nil { - log.Println("error read from client:", err) - return - } - tenantConn.WriteMessage(msgType, message) - } - }() - - select { - case <-done: - case <-doneTenant: - } -} diff --git a/api/resource_quota.go b/api/resource_quota.go deleted file mode 100644 index b266a42e45f..00000000000 --- a/api/resource_quota.go +++ /dev/null @@ -1,108 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "fmt" - - "k8s.io/apimachinery/pkg/api/errors" - - "github.com/go-openapi/runtime/middleware" - "github.com/minio/operator/api/operations" - "github.com/minio/operator/api/operations/operator_api" - "github.com/minio/operator/models" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -func registerResourceQuotaHandlers(api *operations.OperatorAPI) { - // Get Resource Quota - api.OperatorAPIGetResourceQuotaHandler = operator_api.GetResourceQuotaHandlerFunc(func(params operator_api.GetResourceQuotaParams, session *models.Principal) middleware.Responder { - resp, err := getResourceQuotaResponse(session, params) - if err != nil { - return operator_api.NewGetResourceQuotaDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewGetResourceQuotaOK().WithPayload(resp) - }) -} - -func getResourceQuota(ctx context.Context, client K8sClientI, namespace, resourcequota string) (*models.ResourceQuota, error) { - resourceQuota, err := client.getResourceQuota(ctx, namespace, resourcequota, metav1.GetOptions{}) - if err != nil { - // if there's no resource quotas - if errors.IsNotFound(err) { - // validate if at least the namespace is valid, if it is, return all storage classes with max capacity - _, err := client.getNamespace(ctx, namespace, metav1.GetOptions{}) - if err != nil { - return nil, err - } - storageClasses, err := client.getStorageClasses(ctx, metav1.ListOptions{}) - if err != nil { - return nil, err - } - rq := models.ResourceQuota{Name: resourceQuota.Name} - for _, sc := range storageClasses.Items { - // Create Resource element with hard limit maxed out - name := fmt.Sprintf("%s.storageclass.storage.k8s.io/requests.storage", sc.Name) - element := models.ResourceQuotaElement{ - Name: name, - Hard: 9223372036854775807, - } - rq.Elements = append(rq.Elements, &element) - } - return &rq, nil - } - - return nil, err - } - rq := models.ResourceQuota{Name: resourceQuota.Name} - resourceElementss := make(map[string]models.ResourceQuotaElement) - for name, quantity := range resourceQuota.Status.Hard { - // Create Resource element with hard limit - element := models.ResourceQuotaElement{ - Name: string(name), - Hard: quantity.Value(), - } - resourceElementss[string(name)] = element - } - for name, quantity := range resourceQuota.Status.Used { - // Update resource element with Used quota - if r, ok := resourceElementss[string(name)]; ok { - r.Used = quantity.Value() - // Element will only be returned if it has Hard and Used status - rq.Elements = append(rq.Elements, &r) - } - } - return &rq, nil -} - -func getResourceQuotaResponse(session *models.Principal, params operator_api.GetResourceQuotaParams) (*models.ResourceQuota, *models.Error) { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - client, err := K8sClient(session.STSSessionToken) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - k8sClient := &k8sClient{ - client: client, - } - resourceQuota, err := getResourceQuota(ctx, k8sClient, params.Namespace, params.ResourceQuotaName) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - return resourceQuota, nil -} diff --git a/api/resource_quota_test.go b/api/resource_quota_test.go deleted file mode 100644 index 24b55fe5f1a..00000000000 --- a/api/resource_quota_test.go +++ /dev/null @@ -1,132 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "errors" - "reflect" - "testing" - - "github.com/minio/operator/models" - v1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/resource" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -func Test_ResourceQuota(t *testing.T) { - mockHardResourceQuota := v1.ResourceList{ - "storage": resource.MustParse("1000"), - "cpu": resource.MustParse("2Ki"), - } - mockUsedResourceQuota := v1.ResourceList{ - "storage": resource.MustParse("500"), - "cpu": resource.MustParse("1Ki"), - } - mockRQResponse := v1.ResourceQuota{ - Spec: v1.ResourceQuotaSpec{ - Hard: mockHardResourceQuota, - }, - Status: v1.ResourceQuotaStatus{ - Hard: mockHardResourceQuota, - Used: mockUsedResourceQuota, - }, - } - mockRQResponse.Name = "ResourceQuota1" - // k8sclientGetResourceQuotaMock = func(ctx context.Context, namespace, resource string, opts metav1.GetOptions) (*v1.ResourceQuota, error) { - // return nil, nil - // } - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - kubernetesClient := k8sClientMock{} - type args struct { - ctx context.Context - client K8sClientI - } - tests := []struct { - name string - args args - wantErr bool - want models.ResourceQuota - mockResourceQuota func(ctx context.Context, namespace, resource string, opts metav1.GetOptions) (*v1.ResourceQuota, error) - }{ - { - name: "Return resource quota elements", - args: args{ - ctx: ctx, - client: kubernetesClient, - }, - want: models.ResourceQuota{ - Name: mockRQResponse.Name, - Elements: []*models.ResourceQuotaElement{ - { - Name: "storage", - Hard: int64(1000), - Used: int64(500), - }, - { - Name: "cpu", - Hard: int64(2048), - Used: int64(1024), - }, - }, - }, - mockResourceQuota: func(ctx context.Context, namespace, resource string, opts metav1.GetOptions) (*v1.ResourceQuota, error) { - return &mockRQResponse, nil - }, - wantErr: false, - }, - { - name: "Return empty resource quota elements", - args: args{ - ctx: ctx, - client: kubernetesClient, - }, - want: models.ResourceQuota{}, - mockResourceQuota: func(ctx context.Context, namespace, resource string, opts metav1.GetOptions) (*v1.ResourceQuota, error) { - return &v1.ResourceQuota{}, nil - }, - wantErr: false, - }, - { - name: "Handle error while fetching storage quota elements", - args: args{ - ctx: ctx, - client: kubernetesClient, - }, - wantErr: true, - mockResourceQuota: func(ctx context.Context, namespace, resource string, opts metav1.GetOptions) (*v1.ResourceQuota, error) { - return nil, errors.New("error") - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - k8sClientGetResourceQuotaMock = tt.mockResourceQuota - got, err := getResourceQuota(tt.args.ctx, tt.args.client, "ns", mockRQResponse.Name) - if err != nil { - if tt.wantErr { - return - } - t.Errorf("getResourceQuota() error = %v, wantErr %v", err, tt.wantErr) - } - if reflect.DeepEqual(got, tt.want) { - t.Errorf("got %v want %v", got, tt.want) - } - }) - } -} diff --git a/api/server.go b/api/server.go deleted file mode 100644 index 366226ad1b3..00000000000 --- a/api/server.go +++ /dev/null @@ -1,524 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package api - -import ( - "context" - "crypto/tls" - "crypto/x509" - "errors" - "fmt" - "log" - "net" - "net/http" - "os" - "os/signal" - "strconv" - "sync" - "sync/atomic" - "syscall" - "time" - - "github.com/go-openapi/runtime/flagext" - "github.com/go-openapi/swag" - flags "github.com/jessevdk/go-flags" - "golang.org/x/net/netutil" - - "github.com/minio/operator/api/operations" -) - -const ( - schemeHTTP = "http" - schemeHTTPS = "https" - schemeUnix = "unix" -) - -var defaultSchemes []string - -func init() { - defaultSchemes = []string{ - schemeHTTP, - } -} - -// NewServer creates a new api operator server but does not configure it -func NewServer(api *operations.OperatorAPI) *Server { - s := new(Server) - - s.shutdown = make(chan struct{}) - s.api = api - s.interrupt = make(chan os.Signal, 1) - return s -} - -// ConfigureAPI configures the API and handlers. -func (s *Server) ConfigureAPI() { - if s.api != nil { - s.handler = configureAPI(s.api) - } -} - -// ConfigureFlags configures the additional flags defined by the handlers. Needs to be called before the parser.Parse -func (s *Server) ConfigureFlags() { - if s.api != nil { - configureFlags(s.api) - } -} - -// Server for the operator API -type Server struct { - EnabledListeners []string `long:"scheme" description:"the listeners to enable, this can be repeated and defaults to the schemes in the swagger spec"` - CleanupTimeout time.Duration `long:"cleanup-timeout" description:"grace period for which to wait before killing idle connections" default:"10s"` - GracefulTimeout time.Duration `long:"graceful-timeout" description:"grace period for which to wait before shutting down the server" default:"15s"` - MaxHeaderSize flagext.ByteSize `long:"max-header-size" description:"controls the maximum number of bytes the server will read parsing the request header's keys and values, including the request line. It does not limit the size of the request body." default:"1MiB"` - - SocketPath flags.Filename `long:"socket-path" description:"the unix socket to listen on" default:"/var/run/operator.sock"` - domainSocketL net.Listener - - Host string `long:"host" description:"the IP to listen on" default:"localhost" env:"HOST"` - Port int `long:"port" description:"the port to listen on for insecure connections, defaults to a random value" env:"PORT"` - ListenLimit int `long:"listen-limit" description:"limit the number of outstanding requests"` - KeepAlive time.Duration `long:"keep-alive" description:"sets the TCP keep-alive timeouts on accepted connections. It prunes dead TCP connections ( e.g. closing laptop mid-download)" default:"3m"` - ReadTimeout time.Duration `long:"read-timeout" description:"maximum duration before timing out read of the request" default:"30s"` - WriteTimeout time.Duration `long:"write-timeout" description:"maximum duration before timing out write of the response" default:"60s"` - httpServerL net.Listener - - TLSHost string `long:"tls-host" description:"the IP to listen on for tls, when not specified it's the same as --host" env:"TLS_HOST"` - TLSPort int `long:"tls-port" description:"the port to listen on for secure connections, defaults to a random value" env:"TLS_PORT"` - TLSCertificate flags.Filename `long:"tls-certificate" description:"the certificate to use for secure connections" env:"TLS_CERTIFICATE"` - TLSCertificateKey flags.Filename `long:"tls-key" description:"the private key to use for secure connections" env:"TLS_PRIVATE_KEY"` - TLSCACertificate flags.Filename `long:"tls-ca" description:"the certificate authority file to be used with mutual tls auth" env:"TLS_CA_CERTIFICATE"` - TLSListenLimit int `long:"tls-listen-limit" description:"limit the number of outstanding requests"` - TLSKeepAlive time.Duration `long:"tls-keep-alive" description:"sets the TCP keep-alive timeouts on accepted connections. It prunes dead TCP connections ( e.g. closing laptop mid-download)"` - TLSReadTimeout time.Duration `long:"tls-read-timeout" description:"maximum duration before timing out read of the request"` - TLSWriteTimeout time.Duration `long:"tls-write-timeout" description:"maximum duration before timing out write of the response"` - httpsServerL net.Listener - - api *operations.OperatorAPI - handler http.Handler - hasListeners bool - shutdown chan struct{} - shuttingDown int32 - interrupted bool - interrupt chan os.Signal -} - -// Logf logs message either via defined user logger or via system one if no user logger is defined. -func (s *Server) Logf(f string, args ...interface{}) { - if s.api != nil && s.api.Logger != nil { - s.api.Logger(f, args...) - } else { - log.Printf(f, args...) - } -} - -// Fatalf logs message either via defined user logger or via system one if no user logger is defined. -// Exits with non-zero status after printing -func (s *Server) Fatalf(f string, args ...interface{}) { - if s.api != nil && s.api.Logger != nil { - s.api.Logger(f, args...) - os.Exit(1) - } else { - log.Fatalf(f, args...) - } -} - -// SetAPI configures the server with the specified API. Needs to be called before Serve -func (s *Server) SetAPI(api *operations.OperatorAPI) { - if api == nil { - s.api = nil - s.handler = nil - return - } - - s.api = api - s.handler = configureAPI(api) -} - -func (s *Server) hasScheme(scheme string) bool { - schemes := s.EnabledListeners - if len(schemes) == 0 { - schemes = defaultSchemes - } - - for _, v := range schemes { - if v == scheme { - return true - } - } - return false -} - -// Serve the api -func (s *Server) Serve() (err error) { - if !s.hasListeners { - if err = s.Listen(); err != nil { - return err - } - } - - // set default handler, if none is set - if s.handler == nil { - if s.api == nil { - return errors.New("can't create the default handler, as no api is set") - } - - s.SetHandler(s.api.Serve(nil)) - } - - wg := new(sync.WaitGroup) - once := new(sync.Once) - signalNotify(s.interrupt) - go handleInterrupt(once, s) - - servers := []*http.Server{} - - if s.hasScheme(schemeUnix) { - domainSocket := new(http.Server) - domainSocket.MaxHeaderBytes = int(s.MaxHeaderSize) - domainSocket.Handler = s.handler - if int64(s.CleanupTimeout) > 0 { - domainSocket.IdleTimeout = s.CleanupTimeout - } - - configureServer(domainSocket, "unix", string(s.SocketPath)) - - servers = append(servers, domainSocket) - wg.Add(1) - s.Logf("Serving operator at unix://%s", s.SocketPath) - go func(l net.Listener) { - defer wg.Done() - if err := domainSocket.Serve(l); err != nil && err != http.ErrServerClosed { - s.Fatalf("%v", err) - } - s.Logf("Stopped serving operator at unix://%s", s.SocketPath) - }(s.domainSocketL) - } - - if s.hasScheme(schemeHTTP) { - httpServer := new(http.Server) - httpServer.MaxHeaderBytes = int(s.MaxHeaderSize) - httpServer.ReadTimeout = s.ReadTimeout - httpServer.WriteTimeout = s.WriteTimeout - httpServer.SetKeepAlivesEnabled(int64(s.KeepAlive) > 0) - if s.ListenLimit > 0 { - s.httpServerL = netutil.LimitListener(s.httpServerL, s.ListenLimit) - } - - if int64(s.CleanupTimeout) > 0 { - httpServer.IdleTimeout = s.CleanupTimeout - } - - httpServer.Handler = s.handler - - configureServer(httpServer, "http", s.httpServerL.Addr().String()) - - servers = append(servers, httpServer) - wg.Add(1) - s.Logf("Serving operator at http://%s", s.httpServerL.Addr()) - go func(l net.Listener) { - defer wg.Done() - if err := httpServer.Serve(l); err != nil && err != http.ErrServerClosed { - s.Fatalf("%v", err) - } - s.Logf("Stopped serving operator at http://%s", l.Addr()) - }(s.httpServerL) - } - - if s.hasScheme(schemeHTTPS) { - httpsServer := new(http.Server) - httpsServer.MaxHeaderBytes = int(s.MaxHeaderSize) - httpsServer.ReadTimeout = s.TLSReadTimeout - httpsServer.WriteTimeout = s.TLSWriteTimeout - httpsServer.SetKeepAlivesEnabled(int64(s.TLSKeepAlive) > 0) - if s.TLSListenLimit > 0 { - s.httpsServerL = netutil.LimitListener(s.httpsServerL, s.TLSListenLimit) - } - if int64(s.CleanupTimeout) > 0 { - httpsServer.IdleTimeout = s.CleanupTimeout - } - httpsServer.Handler = s.handler - - // Inspired by https://blog.bracebin.com/achieving-perfect-ssl-labs-score-with-go - httpsServer.TLSConfig = &tls.Config{ - // Causes servers to use Go's default ciphersuite preferences, - // which are tuned to avoid attacks. Does nothing on clients. - PreferServerCipherSuites: true, - // Only use curves which have assembly implementations - // https://github.com/golang/go/tree/master/src/crypto/elliptic - CurvePreferences: []tls.CurveID{tls.CurveP256}, - // Use modern tls mode https://wiki.mozilla.org/Security/Server_Side_TLS#Modern_compatibility - NextProtos: []string{"h2", "http/1.1"}, - // https://www.owasp.org/index.php/Transport_Layer_Protection_Cheat_Sheet#Rule_-_Only_Support_Strong_Protocols - MinVersion: tls.VersionTLS12, - // These ciphersuites support Forward Secrecy: https://en.wikipedia.org/wiki/Forward_secrecy - CipherSuites: []uint16{ - tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, - tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, - tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, - tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, - tls.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305, - tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305, - }, - } - - // build standard config from server options - if s.TLSCertificate != "" && s.TLSCertificateKey != "" { - httpsServer.TLSConfig.Certificates = make([]tls.Certificate, 1) - httpsServer.TLSConfig.Certificates[0], err = tls.LoadX509KeyPair(string(s.TLSCertificate), string(s.TLSCertificateKey)) - if err != nil { - return err - } - } - - if s.TLSCACertificate != "" { - // include specified CA certificate - caCert, caCertErr := os.ReadFile(string(s.TLSCACertificate)) - if caCertErr != nil { - return caCertErr - } - caCertPool := x509.NewCertPool() - ok := caCertPool.AppendCertsFromPEM(caCert) - if !ok { - return fmt.Errorf("cannot parse CA certificate") - } - httpsServer.TLSConfig.ClientCAs = caCertPool - httpsServer.TLSConfig.ClientAuth = tls.RequireAndVerifyClientCert - } - - // call custom TLS configurator - configureTLS(httpsServer.TLSConfig) - - if len(httpsServer.TLSConfig.Certificates) == 0 && httpsServer.TLSConfig.GetCertificate == nil { - // after standard and custom config are passed, this ends up with no certificate - if s.TLSCertificate == "" { - if s.TLSCertificateKey == "" { - s.Fatalf("the required flags `--tls-certificate` and `--tls-key` were not specified") - } - s.Fatalf("the required flag `--tls-certificate` was not specified") - } - if s.TLSCertificateKey == "" { - s.Fatalf("the required flag `--tls-key` was not specified") - } - // this happens with a wrong custom TLS configurator - s.Fatalf("no certificate was configured for TLS") - } - - configureServer(httpsServer, "https", s.httpsServerL.Addr().String()) - - servers = append(servers, httpsServer) - wg.Add(1) - s.Logf("Serving operator at https://%s", s.httpsServerL.Addr()) - go func(l net.Listener) { - defer wg.Done() - if err := httpsServer.Serve(l); err != nil && err != http.ErrServerClosed { - s.Fatalf("%v", err) - } - s.Logf("Stopped serving operator at https://%s", l.Addr()) - }(tls.NewListener(s.httpsServerL, httpsServer.TLSConfig)) - } - - wg.Add(1) - go s.handleShutdown(wg, &servers) - - wg.Wait() - return nil -} - -// Listen creates the listeners for the server -func (s *Server) Listen() error { - if s.hasListeners { // already done this - return nil - } - - if s.hasScheme(schemeHTTPS) { - // Use http host if https host wasn't defined - if s.TLSHost == "" { - s.TLSHost = s.Host - } - // Use http listen limit if https listen limit wasn't defined - if s.TLSListenLimit == 0 { - s.TLSListenLimit = s.ListenLimit - } - // Use http tcp keep alive if https tcp keep alive wasn't defined - if int64(s.TLSKeepAlive) == 0 { - s.TLSKeepAlive = s.KeepAlive - } - // Use http read timeout if https read timeout wasn't defined - if int64(s.TLSReadTimeout) == 0 { - s.TLSReadTimeout = s.ReadTimeout - } - // Use http write timeout if https write timeout wasn't defined - if int64(s.TLSWriteTimeout) == 0 { - s.TLSWriteTimeout = s.WriteTimeout - } - } - - if s.hasScheme(schemeUnix) { - domSockListener, err := net.Listen("unix", string(s.SocketPath)) - if err != nil { - return err - } - s.domainSocketL = domSockListener - } - - if s.hasScheme(schemeHTTP) { - listener, err := net.Listen("tcp", net.JoinHostPort(s.Host, strconv.Itoa(s.Port))) - if err != nil { - return err - } - - h, p, err := swag.SplitHostPort(listener.Addr().String()) - if err != nil { - return err - } - s.Host = h - s.Port = p - s.httpServerL = listener - } - - if s.hasScheme(schemeHTTPS) { - tlsListener, err := net.Listen("tcp", net.JoinHostPort(s.TLSHost, strconv.Itoa(s.TLSPort))) - if err != nil { - return err - } - - sh, sp, err := swag.SplitHostPort(tlsListener.Addr().String()) - if err != nil { - return err - } - s.TLSHost = sh - s.TLSPort = sp - s.httpsServerL = tlsListener - } - - s.hasListeners = true - return nil -} - -// Shutdown server and clean up resources -func (s *Server) Shutdown() error { - if atomic.CompareAndSwapInt32(&s.shuttingDown, 0, 1) { - close(s.shutdown) - } - return nil -} - -func (s *Server) handleShutdown(wg *sync.WaitGroup, serversPtr *[]*http.Server) { - // wg.Done must occur last, after s.api.ServerShutdown() - // (to preserve old behaviour) - defer wg.Done() - - <-s.shutdown - - servers := *serversPtr - - ctx, cancel := context.WithTimeout(context.TODO(), s.GracefulTimeout) - defer cancel() - - // first execute the pre-shutdown hook - s.api.PreServerShutdown() - - shutdownChan := make(chan bool) - for i := range servers { - server := servers[i] - go func() { - var success bool - defer func() { - shutdownChan <- success - }() - if err := server.Shutdown(ctx); err != nil { - // Error from closing listeners, or context timeout: - s.Logf("HTTP server Shutdown: %v", err) - } else { - success = true - } - }() - } - - // Wait until all listeners have successfully shut down before calling ServerShutdown - success := true - for range servers { - success = success && <-shutdownChan - } - if success { - s.api.ServerShutdown() - } -} - -// GetHandler returns a handler useful for testing -func (s *Server) GetHandler() http.Handler { - return s.handler -} - -// SetHandler allows for setting a http handler on this server -func (s *Server) SetHandler(handler http.Handler) { - s.handler = handler -} - -// UnixListener returns the domain socket listener -func (s *Server) UnixListener() (net.Listener, error) { - if !s.hasListeners { - if err := s.Listen(); err != nil { - return nil, err - } - } - return s.domainSocketL, nil -} - -// HTTPListener returns the http listener -func (s *Server) HTTPListener() (net.Listener, error) { - if !s.hasListeners { - if err := s.Listen(); err != nil { - return nil, err - } - } - return s.httpServerL, nil -} - -// TLSListener returns the https listener -func (s *Server) TLSListener() (net.Listener, error) { - if !s.hasListeners { - if err := s.Listen(); err != nil { - return nil, err - } - } - return s.httpsServerL, nil -} - -func handleInterrupt(once *sync.Once, s *Server) { - once.Do(func() { - for range s.interrupt { - if s.interrupted { - s.Logf("Server already shutting down") - continue - } - s.interrupted = true - s.Logf("Shutting down... ") - if err := s.Shutdown(); err != nil { - s.Logf("HTTP server Shutdown: %v", err) - } - } - }) -} - -func signalNotify(interrupt chan<- os.Signal) { - signal.Notify(interrupt, syscall.SIGINT, syscall.SIGTERM) -} diff --git a/api/session.go b/api/session.go deleted file mode 100644 index e78bc3ce1ab..00000000000 --- a/api/session.go +++ /dev/null @@ -1,67 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "fmt" - - "github.com/go-openapi/runtime/middleware" - "github.com/minio/operator/api/operations" - authApi "github.com/minio/operator/api/operations/auth" - "github.com/minio/operator/models" -) - -func registerSessionHandlers(api *operations.OperatorAPI) { - // session check - api.AuthSessionCheckHandler = authApi.SessionCheckHandlerFunc(func(params authApi.SessionCheckParams, session *models.Principal) middleware.Responder { - sessionResp, err := getSessionResponse(session, params) - if err != nil { - return authApi.NewSessionCheckDefault(int(err.Code)).WithPayload(err) - } - return authApi.NewSessionCheckOK().WithPayload(sessionResp) - }) -} - -// getSessionResponse parse the token of the current session and returns a list of allowed actions to render in the UI -func getSessionResponse(session *models.Principal, params authApi.SessionCheckParams) (*models.OperatorSessionResponse, *models.Error) { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - // serialize output - if session == nil { - return nil, ErrorWithContext(ctx, ErrInvalidSession) - } - sessionResp := &models.OperatorSessionResponse{ - Status: models.OperatorSessionResponseStatusOk, - Operator: true, - Permissions: map[string][]string{}, - Features: getListOfOperatorFeatures(), - } - return sessionResp, nil -} - -// getListOfEnabledFeatures returns a list of features -func getListOfOperatorFeatures() []string { - features := []string{} - mpEnabled := getMarketplace() - - if mpEnabled != "" { - features = append(features, fmt.Sprintf("mp-mode-%s", mpEnabled)) - } - - return features -} diff --git a/api/subnet-utils.go b/api/subnet-utils.go deleted file mode 100644 index 62ebfe97c62..00000000000 --- a/api/subnet-utils.go +++ /dev/null @@ -1,333 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "bufio" - "bytes" - "context" - "crypto/tls" - "encoding/base64" - "encoding/json" - "errors" - "fmt" - "io" - "net" - "net/http" - "os" - "strings" - "time" - - "github.com/minio/madmin-go/v3" - mc "github.com/minio/mc/cmd" - "github.com/tidwall/gjson" - "golang.org/x/crypto/ssh/terminal" -) - -const ( - subnetRespBodyLimit = 1 << 20 // 1 MiB -) - -var ( - subnetBaseURLEnvVar = "SUBNET_BASE_URL" - httpClient *http.Client -) - -// LicenseTokenConfig stores subnet license information -type LicenseTokenConfig struct { - APIKey string - License string - Proxy string -} - -type subnetMFAReq struct { - Username string `json:"username"` - OTP string `json:"otp"` - Token string `json:"token"` -} - -// BaseURL returns subnet base url -func BaseURL() string { - url := os.Getenv(subnetBaseURLEnvVar) - if url != "" { - return url - } - return "https://subnet.min.io" -} - -// RegisterURL returns subnet register url -func RegisterURL() string { - return BaseURL() + "/api/cluster/register" -} - -// LoginURL returns subnet login url -func LoginURL() string { - return BaseURL() + "/api/auth/login" -} - -// MFAURL returns subnet mfa url -func MFAURL() string { - return BaseURL() + "/api/auth/mfa-login" -} - -// KeyURL returns subnet api key url -func KeyURL() string { - return BaseURL() + "/api/auth/api-key" -} - -// GetHTTPClient returns a http client to communicate with subnet -func GetHTTPClient() *http.Client { - if httpClient == nil { - httpClient = prepareHTTPClient(false) - } - return httpClient -} - -func prepareHTTPClient(insecure bool) *http.Client { - return &http.Client{Transport: PrepareClientTransport(insecure)} -} - -// PrepareClientTransport prepares http transport -func PrepareClientTransport(insecure bool) *http.Transport { - dialer := &net.Dialer{ - Timeout: 10 * time.Second, - KeepAlive: 15 * time.Second, - } - DefaultTransport := &http.Transport{ - Proxy: http.ProxyFromEnvironment, - DialContext: dialer.DialContext, - MaxIdleConns: 1024, - MaxIdleConnsPerHost: 1024, - IdleConnTimeout: 90 * time.Second, - TLSHandshakeTimeout: 10 * time.Second, - ExpectContinueTimeout: 10 * time.Second, - DisableCompression: true, - TLSClientConfig: &tls.Config{ - InsecureSkipVerify: insecure, - }, - } - return DefaultTransport -} - -// RegisterWithAPIKey registers minio instance in subnet -func RegisterWithAPIKey(admInfo madmin.InfoMessage, apiKey string) (*LicenseTokenConfig, error) { - regInfo := getClusterRegInfo(admInfo) - regURL := fmt.Sprintf("%s?api_key=%s", RegisterURL(), apiKey) - regToken, err := generateRegToken(regInfo) - if err != nil { - return nil, err - } - reqPayload := mc.ClusterRegistrationReq{Token: regToken} - resp, err := subnetPostReq(regURL, reqPayload, map[string]string{}) - if err != nil { - return nil, err - } - respJSON := gjson.Parse(resp) - subnetAPIKey := respJSON.Get("api_key").String() - licenseJwt := respJSON.Get("license").String() - - if subnetAPIKey != "" || licenseJwt != "" { - return &LicenseTokenConfig{ - APIKey: subnetAPIKey, - License: licenseJwt, - }, nil - } - return nil, errors.New("subnet api key not found") -} - -func getClusterRegInfo(admInfo madmin.InfoMessage) mc.ClusterRegistrationInfo { - noOfPools := 1 - noOfDrives := 0 - for _, srvr := range admInfo.Servers { - if srvr.PoolNumber > noOfPools { - noOfPools = srvr.PoolNumber - } - noOfDrives += len(srvr.Disks) - } - - totalSpace, usedSpace := getDriveSpaceInfo(admInfo) - - return mc.ClusterRegistrationInfo{ - DeploymentID: admInfo.DeploymentID, - ClusterName: admInfo.DeploymentID, - UsedCapacity: admInfo.Usage.Size, - Info: mc.ClusterInfo{ - MinioVersion: admInfo.Servers[0].Version, - NoOfServerPools: noOfPools, - NoOfServers: len(admInfo.Servers), - NoOfDrives: noOfDrives, - TotalDriveSpace: totalSpace, - UsedDriveSpace: usedSpace, - NoOfBuckets: admInfo.Buckets.Count, - NoOfObjects: admInfo.Objects.Count, - }, - } -} - -func getDriveSpaceInfo(admInfo madmin.InfoMessage) (uint64, uint64) { - total := uint64(0) - used := uint64(0) - for _, srvr := range admInfo.Servers { - for _, d := range srvr.Disks { - total += d.TotalSpace - used += d.UsedSpace - } - } - return total, used -} - -func generateRegToken(clusterRegInfo mc.ClusterRegistrationInfo) (string, error) { - token, e := json.Marshal(clusterRegInfo) - if e != nil { - return "", e - } - return base64.StdEncoding.EncodeToString(token), nil -} - -// GetAPIKey returns api key from subnet -func GetAPIKey(token string) (string, error) { - resp, err := subnetGetReq(KeyURL(), subnetAuthHeaders(token)) - if err != nil { - return "", err - } - respJSON := gjson.Parse(resp) - apiKey := respJSON.Get("api_key").String() - return apiKey, nil -} - -// GetSubnetKeyFromMinIOConfig return subnet config stored in minio -func GetSubnetKeyFromMinIOConfig(ctx context.Context, adminClient MinioAdmin) (*LicenseTokenConfig, error) { - buf, err := adminClient.getConfigKV(ctx, "subnet") - if err != nil { - return nil, err - } - tgt, err := madmin.ParseServerConfigOutput(string(buf)) - if err != nil { - return nil, err - } - res := LicenseTokenConfig{} - for _, t := range tgt { - for _, kv := range t.KV { - switch kv.Key { - case "api_key": - res.APIKey = kv.Value - case "license": - res.License = kv.Value - case "proxy": - res.Proxy = kv.Value - } - } - } - return &res, nil -} - -// Login helper function to login to subnet in a terminal -func Login() (string, error) { - reader := bufio.NewReader(os.Stdin) - fmt.Print("SUBNET username: ") - username, _ := reader.ReadString('\n') - username = strings.TrimSpace(username) - - if len(username) == 0 { - return "", errors.New("username cannot be empty") - } - - fmt.Print("Password: ") - bytepw, _ := terminal.ReadPassword(int(os.Stdin.Fd())) - fmt.Println() - - loginReq := map[string]string{ - "username": username, - "password": string(bytepw), - } - respStr, e := subnetPostReq(LoginURL(), loginReq, nil) - if e != nil { - return "", e - } - - mfaRequired := gjson.Get(respStr, "mfa_required").Bool() - if mfaRequired { - mfaToken := gjson.Get(respStr, "mfa_token").String() - fmt.Print("OTP received in email: ") - byteotp, _ := terminal.ReadPassword(int(os.Stdin.Fd())) - fmt.Println() - - mfaLoginReq := subnetMFAReq{Username: username, OTP: string(byteotp), Token: mfaToken} - respStr, e = subnetPostReq(MFAURL(), mfaLoginReq, nil) - if e != nil { - return "", e - } - } - - token := gjson.Get(respStr, "token_info.access_token") - if token.Exists() { - return token.String(), nil - } - return "", fmt.Errorf("access token not found in response") -} - -func subnetAuthHeaders(authToken string) map[string]string { - return map[string]string{"Authorization": "Bearer " + authToken} -} - -func subnetGetReq(reqURL string, headers map[string]string) (string, error) { - r, e := http.NewRequest(http.MethodGet, reqURL, nil) - if e != nil { - return "", e - } - return subnetReqDo(r, headers) -} - -func subnetPostReq(reqURL string, payload interface{}, headers map[string]string) (string, error) { - body, e := json.Marshal(payload) - if e != nil { - return "", e - } - r, e := http.NewRequest(http.MethodPost, reqURL, bytes.NewReader(body)) - if e != nil { - return "", e - } - return subnetReqDo(r, headers) -} - -func subnetReqDo(r *http.Request, headers map[string]string) (string, error) { - for k, v := range headers { - r.Header.Add(k, v) - } - - ct := r.Header.Get("Content-Type") - if len(ct) == 0 { - r.Header.Add("Content-Type", "application/json") - } - - resp, e := GetHTTPClient().Do(r) - if e != nil { - return "", e - } - - defer resp.Body.Close() - respBytes, e := io.ReadAll(io.LimitReader(resp.Body, subnetRespBodyLimit)) - if e != nil { - return "", e - } - respStr := string(respBytes) - - if resp.StatusCode == http.StatusOK { - return respStr, nil - } - return respStr, fmt.Errorf("request failed with code %d and error: %s", resp.StatusCode, respStr) -} diff --git a/api/tenant-add-handlers.go b/api/tenant-add-handlers.go deleted file mode 100644 index 5d12e0b50df..00000000000 --- a/api/tenant-add-handlers.go +++ /dev/null @@ -1,493 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2022 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "encoding/base64" - "fmt" - - "github.com/minio/operator/api/operations/operator_api" - "github.com/minio/operator/pkg/auth/utils" - - corev1 "k8s.io/api/core/v1" - - "github.com/minio/operator/models" - miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -func getTenantCreatedResponse(session *models.Principal, params operator_api.CreateTenantParams) (response *models.CreateTenantResponse, mError *models.Error) { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - // get Kubernetes Client - clientSet, err := K8sClient(session.STSSessionToken) - k8sClient := &k8sClient{ - client: clientSet, - } - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - - return createTenant(ctx, params, k8sClient, session) -} - -func createTenant(ctx context.Context, params operator_api.CreateTenantParams, clientSet K8sClientI, session *models.Principal) (response *models.CreateTenantResponse, mError *models.Error) { - tenantReq := params.Body - minioImage := getTenantMinIOImage(tenantReq.Image) - - ns := *tenantReq.Namespace - - accessKey, secretKey := getTenantCredentials(tenantReq.AccessKey, tenantReq.SecretKey) - tenantName := *tenantReq.Name - var users []corev1.LocalObjectReference - - // delete secrets created if an errors occurred during tenant creation, - defer func() { - deleteSecretsIfTenantCreationFails(ctx, mError, tenantName, ns, clientSet) - }() - - err := createTenantCredentialsSecret(ctx, ns, tenantName, clientSet) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - - tenantConfigurationENV := map[string]string{} - tenantConfigurationENV["MINIO_BROWSER"] = isTenantConsoleEnabled(tenantReq.EnableConsole) - tenantConfigurationENV["MINIO_ROOT_USER"] = accessKey - tenantConfigurationENV["MINIO_ROOT_PASSWORD"] = secretKey - - // Check the Erasure Coding Parity for validity and pass it to Tenant - if tenantReq.ErasureCodingParity > 0 { - if tenantReq.ErasureCodingParity < 2 || tenantReq.ErasureCodingParity > 8 { - return nil, ErrorWithContext(ctx, ErrInvalidErasureCodingValue) - } - tenantConfigurationENV["MINIO_STORAGE_CLASS_STANDARD"] = fmt.Sprintf("EC:%d", tenantReq.ErasureCodingParity) - } - - // Construct a MinIO Instance with everything we are getting from parameters - minInst := miniov2.Tenant{ - ObjectMeta: metav1.ObjectMeta{ - Name: tenantName, - Labels: tenantReq.Labels, - }, - Spec: miniov2.TenantSpec{ - Image: minioImage, - Mountpath: "/export", - CredsSecret: &corev1.LocalObjectReference{ - Name: fmt.Sprintf("%s-secret", tenantName), - }, - }, - } - var tenantExternalIDPConfigured bool - if tenantReq.Idp != nil { - // Enable IDP (Active Directory) for MinIO - switch { - case tenantReq.Idp.ActiveDirectory != nil: - tenantExternalIDPConfigured = true - tenantConfigurationENV, users, err = setTenantActiveDirectoryConfig(ctx, clientSet, tenantReq, tenantConfigurationENV, users) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - // attach the users to the tenant - minInst.Spec.Users = users - case tenantReq.Idp.Oidc != nil: - tenantExternalIDPConfigured = true - tenantConfigurationENV = setTenantOIDCConfig(tenantReq, tenantConfigurationENV) - case len(tenantReq.Idp.Keys) > 0: - users, err = setTenantBuiltInUsers(ctx, clientSet, tenantReq, users) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - // attach the users to the tenant - minInst.Spec.Users = users - } - } - - canEncryptionBeEnabled := false - - if tenantReq.EnableTLS != nil { - // if enableTLS is defined in the create tenant request we assign the value - // to the RequestAutoCert attribute in the tenant spec - minInst.Spec.RequestAutoCert = tenantReq.EnableTLS - if *tenantReq.EnableTLS { - // requestAutoCert is enabled, MinIO will be deployed with TLS enabled and encryption can be enabled - canEncryptionBeEnabled = true - } - } - // External server TLS certificates for MinIO - if tenantReq.TLS != nil && len(tenantReq.TLS.MinioServerCertificates) > 0 { - canEncryptionBeEnabled = true - // Certificates used by the MinIO instance - externalCertSecretName := fmt.Sprintf("%s-external-server-certificate", tenantName) - externalCertSecret, err := createOrReplaceExternalCertSecrets(ctx, clientSet, ns, tenantReq.TLS.MinioServerCertificates, externalCertSecretName, tenantName) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - minInst.Spec.ExternalCertSecret = externalCertSecret - } - // External client TLS certificates for MinIO - if tenantReq.TLS != nil && len(tenantReq.TLS.MinioClientCertificates) > 0 { - // Client certificates used by the MinIO instance - externalClientCertSecretName := fmt.Sprintf("%s-external-client-certificate", tenantName) - externalClientCertSecret, err := createOrReplaceExternalCertSecrets(ctx, clientSet, ns, tenantReq.TLS.MinioClientCertificates, externalClientCertSecretName, tenantName) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - minInst.Spec.ExternalClientCertSecrets = externalClientCertSecret - } - // If encryption configuration is present and TLS will be enabled (using AutoCert or External certificates) - if tenantReq.Encryption != nil && canEncryptionBeEnabled { - // KES client mTLSCertificates used by MinIO instance - if tenantReq.Encryption.MinioMtls != nil { - tenantExternalClientCertSecretName := fmt.Sprintf("%s-external-client-certificate-kes", tenantName) - certificates := []*models.KeyPairConfiguration{tenantReq.Encryption.MinioMtls} - certificateSecrets, err := createOrReplaceExternalCertSecrets(ctx, clientSet, ns, certificates, tenantExternalClientCertSecretName, tenantName) - if err != nil { - return nil, ErrorWithContext(ctx, ErrDefault) - } - if len(certificateSecrets) > 0 { - minInst.Spec.ExternalClientCertSecret = certificateSecrets[0] - } - } - - // KES configuration for Tenant instance - minInst.Spec.KES, err = getKESConfiguration(ctx, clientSet, ns, tenantReq.Encryption, fmt.Sprintf("%s-secret", tenantName), tenantName) - if err != nil { - return nil, ErrorWithContext(ctx, ErrDefault) - } - // Set Labels, Annotations and Node Selector for KES - minInst.Spec.KES.Labels = tenantReq.Encryption.Labels - minInst.Spec.KES.Annotations = tenantReq.Encryption.Annotations - minInst.Spec.KES.NodeSelector = tenantReq.Encryption.NodeSelector - - if tenantReq.Encryption.SecurityContext != nil { - sc, err := convertModelSCToK8sSC(tenantReq.Encryption.SecurityContext) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - minInst.Spec.KES.SecurityContext = sc - } - } - // External TLS CA certificates for MinIO - if tenantReq.TLS != nil && len(tenantReq.TLS.MinioCAsCertificates) > 0 { - var caCertificates []tenantSecret - for i, caCertificate := range tenantReq.TLS.MinioCAsCertificates { - certificateContent, err := base64.StdEncoding.DecodeString(caCertificate) - if err != nil { - return nil, ErrorWithContext(ctx, ErrDefault, nil, err) - } - caCertificates = append(caCertificates, tenantSecret{ - Name: fmt.Sprintf("%s-ca-certificate-%d", tenantName, i), - Content: map[string][]byte{ - "public.crt": certificateContent, - }, - }) - } - if len(caCertificates) > 0 { - certificateSecrets, err := createOrReplaceSecrets(ctx, clientSet, ns, caCertificates, tenantName) - if err != nil { - return nil, ErrorWithContext(ctx, ErrDefault, nil, err) - } - minInst.Spec.ExternalCaCertSecret = certificateSecrets - } - } - - // add annotations - var annotations map[string]string - - if len(tenantReq.Annotations) > 0 { - annotations = tenantReq.Annotations - minInst.Annotations = annotations - } - // set the pools if they are provided - for _, pool := range tenantReq.Pools { - pool, err := parseTenantPoolRequest(pool) - if err != nil { - LogError("parseTenantPoolRequest failed: %v", err) - return nil, ErrorWithContext(ctx, err) - } - minInst.Spec.Pools = append(minInst.Spec.Pools, *pool) - } - - // Set Mount Path if provided - if tenantReq.MountPath != "" { - minInst.Spec.Mountpath = tenantReq.MountPath - } - - // We accept either `image_pull_secret` or the individual details of the `image_registry` but not both - var imagePullSecret string - - if tenantReq.ImagePullSecret != "" { - imagePullSecret = tenantReq.ImagePullSecret - } else if imagePullSecret, err = setImageRegistry(ctx, tenantReq.ImageRegistry, clientSet, ns, tenantName); err != nil { - return nil, ErrorWithContext(ctx, err) - } - // pass the image pull secret to the Tenant - if imagePullSecret != "" { - minInst.Spec.ImagePullSecret = corev1.LocalObjectReference{ - Name: imagePullSecret, - } - } - - // expose services - minInst.Spec.ExposeServices = &miniov2.ExposeServices{ - MinIO: tenantReq.ExposeMinio, - Console: tenantReq.ExposeConsole, - } - - // set custom environment variables in configuration file - for _, envVar := range tenantReq.EnvironmentVariables { - tenantConfigurationENV[envVar.Key] = envVar.Value - } - - // write tenant configuration to secret that contains config.env - tenantConfigurationName := fmt.Sprintf("%s-env-configuration", tenantName) - _, err = createOrReplaceSecrets(ctx, clientSet, ns, []tenantSecret{ - { - Name: tenantConfigurationName, - Content: map[string][]byte{ - "config.env": []byte(GenerateTenantConfigurationFile(tenantConfigurationENV)), - }, - }, - }, tenantName) - if err != nil { - return nil, ErrorWithContext(ctx, ErrDefault, nil, err) - } - minInst.Spec.Configuration = &corev1.LocalObjectReference{Name: tenantConfigurationName} - - var features miniov2.Features - if tenantReq.Domains != nil { - var domains miniov2.TenantDomains - - // tenant domains - if tenantReq.Domains.Console != "" { - domains.Console = tenantReq.Domains.Console - } - - if tenantReq.Domains.Minio != nil { - domains.Minio = tenantReq.Domains.Minio - } - - features.Domains = &domains - } - if tenantReq.ExposeSftp { - features.EnableSFTP = &tenantReq.ExposeSftp - } - minInst.Spec.Features = &features - - opClient, err := GetOperatorClient(session.STSSessionToken) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - - _, err = opClient.MinioV2().Tenants(ns).Create(context.Background(), &minInst, metav1.CreateOptions{}) - if err != nil { - LogError("Creating new tenant failed with: %v", err) - return nil, ErrorWithContext(ctx, err) - } - - response = &models.CreateTenantResponse{ - ExternalIDP: tenantExternalIDPConfigured, - } - thisClient := &operatorClient{ - client: opClient, - } - - minTenant, _ := getTenant(ctx, thisClient, ns, tenantName) - - if tenantReq.Idp != nil && !tenantExternalIDPConfigured { - for _, credential := range tenantReq.Idp.Keys { - response.Console = append(response.Console, &models.TenantResponseItem{ - AccessKey: *credential.AccessKey, - SecretKey: *credential.SecretKey, - URL: GetTenantServiceURL(minTenant), - }) - } - } - return response, nil -} - -func getTenantMinIOImage(minioImage string) string { - if minioImage == "" { - minImg, err := GetMinioImage() - // we can live without figuring out the latest version of MinIO, Operator will use a hardcoded value - if err == nil { - minioImage = *minImg - } - } - return minioImage -} - -func getTenantCredentials(accessKey, secretKey string) (string, string) { - defaultAccessKey := utils.RandomCharString(16) - defaultSecretKey := utils.RandomCharString(32) - if accessKey != "" { - defaultAccessKey = accessKey - } - if secretKey != "" { - defaultSecretKey = secretKey - } - return defaultAccessKey, defaultSecretKey -} - -func createTenantCredentialsSecret(ctx context.Context, ns, tenantName string, clientSet K8sClientI) error { - imm := true - // Create the secret for the root credentials (deprecated) - secretName := fmt.Sprintf("%s-secret", tenantName) - instanceSecret := corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: secretName, - Labels: map[string]string{ - miniov2.TenantLabel: tenantName, - }, - }, - Immutable: &imm, - Data: map[string][]byte{ - "accesskey": []byte(""), - "secretkey": []byte(""), - }, - } - _, err := clientSet.createSecret(ctx, ns, &instanceSecret, metav1.CreateOptions{}) - return err -} - -func isTenantConsoleEnabled(enable *bool) string { - enabledConsole := "on" - if enable != nil && !*enable { - enabledConsole = "off" - } - return enabledConsole -} - -func deleteSecretsIfTenantCreationFails(ctx context.Context, mError *models.Error, tenantName, ns string, clientSet K8sClientI) { - if mError != nil { - LogError("deleting secrets created for failed tenant: %s if any: %v", tenantName, mError) - opts := metav1.ListOptions{ - LabelSelector: fmt.Sprintf("%s=%s", miniov2.TenantLabel, tenantName), - } - err := clientSet.deleteSecretsCollection(ctx, ns, metav1.DeleteOptions{}, opts) - if err != nil { - LogError("error deleting tenant's secrets: %v", err) - } - } -} - -func setTenantActiveDirectoryConfig(ctx context.Context, clientSet K8sClientI, tenantReq *models.CreateTenantRequest, tenantConfigurationENV map[string]string, users []corev1.LocalObjectReference) (map[string]string, []corev1.LocalObjectReference, error) { - imm := true - serverAddress := *tenantReq.Idp.ActiveDirectory.URL - tlsSkipVerify := tenantReq.Idp.ActiveDirectory.SkipTLSVerification - serverInsecure := tenantReq.Idp.ActiveDirectory.ServerInsecure - lookupBindDN := *tenantReq.Idp.ActiveDirectory.LookupBindDn - lookupBindPassword := tenantReq.Idp.ActiveDirectory.LookupBindPassword - userDNSearchBaseDN := tenantReq.Idp.ActiveDirectory.UserDnSearchBaseDn - userDNSearchFilter := tenantReq.Idp.ActiveDirectory.UserDnSearchFilter - groupSearchBaseDN := tenantReq.Idp.ActiveDirectory.GroupSearchBaseDn - groupSearchFilter := tenantReq.Idp.ActiveDirectory.GroupSearchFilter - serverStartTLS := tenantReq.Idp.ActiveDirectory.ServerStartTLS - - // LDAP Server - tenantConfigurationENV["MINIO_IDENTITY_LDAP_SERVER_ADDR"] = serverAddress - if tlsSkipVerify { - tenantConfigurationENV["MINIO_IDENTITY_LDAP_TLS_SKIP_VERIFY"] = "on" - } - if serverInsecure { - tenantConfigurationENV["MINIO_IDENTITY_LDAP_SERVER_INSECURE"] = "on" - } - if serverStartTLS { - tenantConfigurationENV["MINIO_IDENTITY_LDAP_SERVER_STARTTLS"] = "on" - } - - // LDAP Lookup - tenantConfigurationENV["MINIO_IDENTITY_LDAP_LOOKUP_BIND_DN"] = lookupBindDN - tenantConfigurationENV["MINIO_IDENTITY_LDAP_LOOKUP_BIND_PASSWORD"] = lookupBindPassword - - // LDAP User DN - tenantConfigurationENV["MINIO_IDENTITY_LDAP_USER_DN_SEARCH_BASE_DN"] = userDNSearchBaseDN - tenantConfigurationENV["MINIO_IDENTITY_LDAP_USER_DN_SEARCH_FILTER"] = userDNSearchFilter - - // LDAP Group - tenantConfigurationENV["MINIO_IDENTITY_LDAP_GROUP_SEARCH_BASE_DN"] = groupSearchBaseDN - tenantConfigurationENV["MINIO_IDENTITY_LDAP_GROUP_SEARCH_FILTER"] = groupSearchFilter - - // Attach the list of LDAP user DNs that will be administrator for the Tenant - for i, userDN := range tenantReq.Idp.ActiveDirectory.UserDNS { - userSecretName := fmt.Sprintf("%s-user-%d", *tenantReq.Name, i) - users = append(users, corev1.LocalObjectReference{Name: userSecretName}) - - userSecret := corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: userSecretName, - Labels: map[string]string{ - miniov2.TenantLabel: *tenantReq.Name, - }, - }, - Immutable: &imm, - Data: map[string][]byte{ - "CONSOLE_ACCESS_KEY": []byte(userDN), - }, - } - _, err := clientSet.createSecret(ctx, *tenantReq.Namespace, &userSecret, metav1.CreateOptions{}) - if err != nil { - return tenantConfigurationENV, users, err - } - } - return tenantConfigurationENV, users, nil -} - -func setTenantOIDCConfig(tenantReq *models.CreateTenantRequest, tenantConfigurationENV map[string]string) map[string]string { - configurationURL := *tenantReq.Idp.Oidc.ConfigurationURL - clientID := *tenantReq.Idp.Oidc.ClientID - secretID := *tenantReq.Idp.Oidc.SecretID - claimName := *tenantReq.Idp.Oidc.ClaimName - scopes := tenantReq.Idp.Oidc.Scopes - tenantConfigurationENV["MINIO_IDENTITY_OPENID_CONFIG_URL"] = configurationURL - tenantConfigurationENV["MINIO_IDENTITY_OPENID_CLIENT_ID"] = clientID - tenantConfigurationENV["MINIO_IDENTITY_OPENID_CLIENT_SECRET"] = secretID - tenantConfigurationENV["MINIO_IDENTITY_OPENID_CLAIM_NAME"] = claimName - if scopes == "" { - scopes = "openid,profile,email" - } - tenantConfigurationENV["MINIO_IDENTITY_OPENID_SCOPES"] = scopes - return tenantConfigurationENV -} - -func setTenantBuiltInUsers(ctx context.Context, clientSet K8sClientI, tenantReq *models.CreateTenantRequest, users []corev1.LocalObjectReference) ([]corev1.LocalObjectReference, error) { - imm := true - for i := 0; i < len(tenantReq.Idp.Keys); i++ { - userSecretName := fmt.Sprintf("%s-user-%d", *tenantReq.Name, i) - users = append(users, corev1.LocalObjectReference{Name: userSecretName}) - userSecret := corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: userSecretName, - Labels: map[string]string{ - miniov2.TenantLabel: *tenantReq.Name, - }, - }, - Immutable: &imm, - Data: map[string][]byte{ - "CONSOLE_ACCESS_KEY": []byte(*tenantReq.Idp.Keys[i].AccessKey), - "CONSOLE_SECRET_KEY": []byte(*tenantReq.Idp.Keys[i].SecretKey), - }, - } - _, err := clientSet.createSecret(ctx, *tenantReq.Namespace, &userSecret, metav1.CreateOptions{}) - if err != nil { - return users, err - } - } - return users, nil -} diff --git a/api/tenant-get-handlers.go b/api/tenant-get-handlers.go deleted file mode 100644 index 9026ceee581..00000000000 --- a/api/tenant-get-handlers.go +++ /dev/null @@ -1,172 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2022 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "fmt" - - "github.com/minio/operator/api/operations/operator_api" - "github.com/minio/operator/models" - miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -func getTenantDetailsResponse(session *models.Principal, params operator_api.TenantDetailsParams) (*models.Tenant, *models.Error) { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - opClientClientSet, err := GetOperatorClient(session.STSSessionToken) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - - opClient := &operatorClient{ - client: opClientClientSet, - } - - minTenant, err := getTenant(ctx, opClient, params.Namespace, params.Tenant) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - - info := getTenantInfo(minTenant) - - // get Kubernetes Client - clientSet, err := K8sClient(session.STSSessionToken) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - - k8sClient := k8sClient{ - client: clientSet, - } - - tenantConfiguration, err := GetTenantConfiguration(ctx, &k8sClient, minTenant) - if err != nil { - LogError("unable to fetch configuration for tenant %s: %v", minTenant.Name, err) - } - - // detect if AD/LDAP is enabled - ldapEnabled := tenantConfiguration["MINIO_IDENTITY_LDAP_SERVER_ADDR"] != "" - - // detect if OpenID is enabled - oidcEnabled := tenantConfiguration["MINIO_IDENTITY_OPENID_CONFIG_URL"] != "" - - // detect if encryption is enabled - hasKmsSecret := tenantConfiguration["MINIO_KMS_SECRET_KEY"] != "" || tenantConfiguration["MINIO_KMS_SECRET_KEY_FILE"] != "" - info.EncryptionEnabled = minTenant.HasKESEnabled() || hasKmsSecret - info.IdpAdEnabled = ldapEnabled - info.IdpOidcEnabled = oidcEnabled - info.MinioTLS = minTenant.TLS() - - // attach status information - info.Status = &models.TenantStatus{ - HealthStatus: string(minTenant.Status.HealthStatus), - DrivesHealing: minTenant.Status.DrivesHealing, - DrivesOffline: minTenant.Status.DrivesOffline, - DrivesOnline: minTenant.Status.DrivesOnline, - WriteQuorum: minTenant.Status.WriteQuorum, - Usage: &models.TenantStatusUsage{ - Raw: minTenant.Status.Usage.RawCapacity, - RawUsage: minTenant.Status.Usage.RawUsage, - Capacity: minTenant.Status.Usage.Capacity, - CapacityUsage: minTenant.Status.Usage.Usage, - }, - } - - // get tenant service - minTenant.EnsureDefaults() - // minio service - minSvc, err := k8sClient.getService(ctx, minTenant.Namespace, minTenant.MinIOCIServiceName(), metav1.GetOptions{}) - if err != nil { - // we can tolerate this errors - LogError("Unable to get MinIO service name: %v, continuing", err) - } - // console service - conSvc, err := k8sClient.getService(ctx, minTenant.Namespace, minTenant.ConsoleCIServiceName(), metav1.GetOptions{}) - if err != nil { - // we can tolerate this errors - LogError("Unable to get MinIO console service name: %v, continuing", err) - } - - schema := "http" - consoleSchema := schema - consolePort := fmt.Sprintf(":%d", miniov2.ConsolePort) - if minTenant.TLS() { - schema = "https" - consoleSchema = schema - consolePort = fmt.Sprintf(":%d", miniov2.ConsoleTLSPort) - } - - var minioEndpoint string - var consoleEndpoint string - if minSvc != nil && len(minSvc.Status.LoadBalancer.Ingress) > 0 { - if minSvc.Status.LoadBalancer.Ingress[0].IP != "" { - minioEndpoint = fmt.Sprintf("%s://%s", schema, minSvc.Status.LoadBalancer.Ingress[0].IP) - } - - if minSvc.Status.LoadBalancer.Ingress[0].Hostname != "" { - minioEndpoint = fmt.Sprintf("%s://%s", schema, minSvc.Status.LoadBalancer.Ingress[0].Hostname) - } - - } - - if conSvc != nil && len(conSvc.Status.LoadBalancer.Ingress) > 0 { - if conSvc.Status.LoadBalancer.Ingress[0].IP != "" { - consoleEndpoint = fmt.Sprintf("%s://%s%s", consoleSchema, conSvc.Status.LoadBalancer.Ingress[0].IP, consolePort) - } - if conSvc.Status.LoadBalancer.Ingress[0].Hostname != "" { - consoleEndpoint = fmt.Sprintf("%s://%s%s", consoleSchema, conSvc.Status.LoadBalancer.Ingress[0].Hostname, consolePort) - } - } - - info.Endpoints = &models.TenantEndpoints{ - Console: consoleEndpoint, - Minio: minioEndpoint, - } - - var domains models.DomainsConfiguration - - if minTenant.Spec.Features != nil { - if minTenant.Spec.Features.EnableSFTP != nil { - info.SftpExposed = *minTenant.Spec.Features.EnableSFTP - } - if minTenant.Spec.Features.Domains != nil { - domains = models.DomainsConfiguration{ - Console: minTenant.Spec.Features.Domains.Console, - Minio: minTenant.Spec.Features.Domains.Minio, - } - } - } - - info.Domains = &domains - - var tiers []*models.TenantTierElement - - for _, tier := range minTenant.Status.Usage.Tiers { - tierItem := &models.TenantTierElement{ - Name: tier.Name, - Type: tier.Type, - Size: tier.TotalSize, - } - - tiers = append(tiers, tierItem) - } - info.Tiers = tiers - - return info, nil -} diff --git a/api/tenant-handlers.go b/api/tenant-handlers.go deleted file mode 100644 index d3140098591..00000000000 --- a/api/tenant-handlers.go +++ /dev/null @@ -1,1380 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "crypto/x509" - "encoding/base64" - "encoding/json" - "encoding/pem" - "errors" - "fmt" - "net" - "strconv" - "time" - - utils2 "github.com/minio/operator/pkg/http" - - "github.com/minio/madmin-go/v3" - - "github.com/minio/operator/api/operations/operator_api" - - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/swag" - "github.com/minio/operator/api/operations" - "github.com/minio/operator/models" - miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - corev1 "k8s.io/api/core/v1" - k8sErrors "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/api/resource" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/types" - v1 "k8s.io/client-go/kubernetes/typed/core/v1" - "k8s.io/utils/ptr" -) - -type imageRegistry struct { - Auths map[string]imageRegistryCredentials `json:"auths"` -} - -type imageRegistryCredentials struct { - Username string `json:"username"` - Password string `json:"password"` - Auth string `json:"auth"` -} - -var defaultSecurityContext = models.SecurityContext{ - RunAsUser: ptr.To("1000"), - RunAsGroup: ptr.To("1000"), - FsGroup: "1000", - FsGroupChangePolicy: string(corev1.FSGroupChangeOnRootMismatch), - RunAsNonRoot: ptr.To(true), -} - -func registerTenantHandlers(api *operations.OperatorAPI) { - // Add Tenant - api.OperatorAPICreateTenantHandler = operator_api.CreateTenantHandlerFunc(func(params operator_api.CreateTenantParams, session *models.Principal) middleware.Responder { - resp, err := getTenantCreatedResponse(session, params) - if err != nil { - return operator_api.NewCreateTenantDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewCreateTenantOK().WithPayload(resp) - }) - // List All Tenants of all namespaces - api.OperatorAPIListAllTenantsHandler = operator_api.ListAllTenantsHandlerFunc(func(params operator_api.ListAllTenantsParams, session *models.Principal) middleware.Responder { - resp, err := getListAllTenantsResponse(session, params) - if err != nil { - return operator_api.NewListTenantsDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewListTenantsOK().WithPayload(resp) - }) - // List Tenants by namespace - api.OperatorAPIListTenantsHandler = operator_api.ListTenantsHandlerFunc(func(params operator_api.ListTenantsParams, session *models.Principal) middleware.Responder { - resp, err := getListTenantsResponse(session, params) - if err != nil { - return operator_api.NewListTenantsDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewListTenantsOK().WithPayload(resp) - }) - // Detail Tenant - api.OperatorAPITenantDetailsHandler = operator_api.TenantDetailsHandlerFunc(func(params operator_api.TenantDetailsParams, session *models.Principal) middleware.Responder { - resp, err := getTenantDetailsResponse(session, params) - if err != nil { - return operator_api.NewTenantDetailsDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewTenantDetailsOK().WithPayload(resp) - }) - - // Delete Tenant - api.OperatorAPIDeleteTenantHandler = operator_api.DeleteTenantHandlerFunc(func(params operator_api.DeleteTenantParams, session *models.Principal) middleware.Responder { - err := getDeleteTenantResponse(session, params) - if err != nil { - return operator_api.NewDeleteTenantDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewDeleteTenantNoContent() - }) - - // Update Tenant - api.OperatorAPIUpdateTenantHandler = operator_api.UpdateTenantHandlerFunc(func(params operator_api.UpdateTenantParams, session *models.Principal) middleware.Responder { - err := getUpdateTenantResponse(session, params) - if err != nil { - return operator_api.NewUpdateTenantDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewUpdateTenantCreated() - }) - - // Get Tenant Usage - api.OperatorAPIGetTenantUsageHandler = operator_api.GetTenantUsageHandlerFunc(func(params operator_api.GetTenantUsageParams, session *models.Principal) middleware.Responder { - payload, err := getTenantUsageResponse(session, params) - if err != nil { - return operator_api.NewGetTenantUsageDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewGetTenantUsageOK().WithPayload(payload) - }) -} - -// getDeleteTenantResponse gets the output of deleting a minio instance -func getDeleteTenantResponse(session *models.Principal, params operator_api.DeleteTenantParams) *models.Error { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - opClientClientSet, err := GetOperatorClient(session.STSSessionToken) - if err != nil { - return ErrorWithContext(ctx, err) - } - // get Kubernetes Client - clientset, err := K8sClient(session.STSSessionToken) - if err != nil { - return ErrorWithContext(ctx, err) - } - opClient := &operatorClient{ - client: opClientClientSet, - } - deleteTenantPVCs := false - if params.Body != nil { - deleteTenantPVCs = params.Body.DeletePvcs - } - - tenant, err := opClient.TenantGet(params.HTTPRequest.Context(), params.Namespace, params.Tenant, metav1.GetOptions{}) - if err != nil { - return ErrorWithContext(ctx, err) - } - tenant.EnsureDefaults() - - if err = deleteTenantAction(params.HTTPRequest.Context(), opClient, clientset.CoreV1(), tenant, deleteTenantPVCs); err != nil { - return ErrorWithContext(ctx, err) - } - return nil -} - -// deleteTenantAction performs the actions of deleting a tenant -// -// It also adds the option of deleting the tenant's underlying pvcs if deletePvcs set -func deleteTenantAction( - ctx context.Context, - operatorClient OperatorClientI, - clientset v1.CoreV1Interface, - tenant *miniov2.Tenant, - deletePvcs bool, -) error { - err := operatorClient.TenantDelete(ctx, tenant.Namespace, tenant.Name, metav1.DeleteOptions{}) - if err != nil { - // try to delete pvc even if the tenant doesn't exist anymore but only if deletePvcs is set to true, - // else, we return the errors - if (deletePvcs && !k8sErrors.IsNotFound(err)) || !deletePvcs { - return err - } - } - - if deletePvcs { - - // delete MinIO PVCs - opts := metav1.ListOptions{ - LabelSelector: fmt.Sprintf("%s=%s", miniov2.TenantLabel, tenant.Name), - } - err = clientset.PersistentVolumeClaims(tenant.Namespace).DeleteCollection(ctx, metav1.DeleteOptions{}, opts) - if err != nil { - return err - } - - // delete all tenant's secrets only if deletePvcs = true - return clientset.Secrets(tenant.Namespace).DeleteCollection(ctx, metav1.DeleteOptions{}, opts) - } - return nil -} - -// GetTenantServiceURL gets tenant's service url with the proper scheme and port -func GetTenantServiceURL(mi *miniov2.Tenant) (svcURL string) { - scheme := "http" - port := miniov2.MinIOPortLoadBalancerSVC - if mi.AutoCert() || mi.ExternalCert() { - scheme = "https" - port = miniov2.MinIOTLSPortLoadBalancerSVC - } - return fmt.Sprintf("%s://%s", scheme, net.JoinHostPort(mi.MinIOFQDNServiceName(), strconv.Itoa(port))) -} - -func getTenantAdminClient(ctx context.Context, client K8sClientI, tenant *miniov2.Tenant, svcURL string) (*madmin.AdminClient, error) { - tenantCreds, err := getTenantCreds(ctx, client, tenant) - if err != nil { - return nil, err - } - sessionToken := "" - mAdmin, pErr := NewAdminClientWithInsecure(svcURL, tenantCreds.accessKey, tenantCreds.secretKey, sessionToken, true) - if pErr != nil { - return nil, pErr.Cause - } - return mAdmin, nil -} - -type tenantKeys struct { - accessKey string - secretKey string -} - -func getTenantCreds(ctx context.Context, client K8sClientI, tenant *miniov2.Tenant) (*tenantKeys, error) { - tenantConfiguration, err := GetTenantConfiguration(ctx, client, tenant) - if err != nil { - return nil, err - } - tenantAccessKey, ok := tenantConfiguration["accesskey"] - if !ok { - LogError("tenant's secret doesn't contain accesskey") - return nil, ErrDefault - } - tenantSecretKey, ok := tenantConfiguration["secretkey"] - if !ok { - LogError("tenant's secret doesn't contain secretkey") - return nil, ErrDefault - } - return &tenantKeys{accessKey: tenantAccessKey, secretKey: tenantSecretKey}, nil -} - -func getTenant(ctx context.Context, operatorClient OperatorClientI, namespace, tenantName string) (*miniov2.Tenant, error) { - tenant, err := operatorClient.TenantGet(ctx, namespace, tenantName, metav1.GetOptions{}) - if err != nil { - return nil, err - } - return tenant, nil -} - -func getTenantInfo(tenant *miniov2.Tenant) *models.Tenant { - var pools []*models.Pool - var totalSize int64 - for _, p := range tenant.Spec.Pools { - pools = append(pools, parseTenantPool(&p)) - poolSize := int64(p.Servers) * int64(p.VolumesPerServer) * p.VolumeClaimTemplate.Spec.Resources.Requests.Storage().Value() - totalSize += poolSize - } - var deletion string - if tenant.ObjectMeta.DeletionTimestamp != nil { - deletion = tenant.ObjectMeta.DeletionTimestamp.Format(time.RFC3339) - } - - return &models.Tenant{ - CreationDate: tenant.ObjectMeta.CreationTimestamp.Format(time.RFC3339), - DeletionDate: deletion, - Name: tenant.Name, - TotalSize: totalSize, - CurrentState: tenant.Status.CurrentState, - Pools: pools, - Namespace: tenant.ObjectMeta.Namespace, - Image: tenant.Spec.Image, - } -} - -func parseCertificate(name string, rawCert []byte) (*models.CertificateInfo, error) { - block, _ := pem.Decode(rawCert) - if block == nil { - return nil, errors.New("certificate failed to decode") - } - cert, err := x509.ParseCertificate(block.Bytes) - if err != nil { - return nil, err - } - domains := []string{} - // append certificate domain names - if len(cert.DNSNames) > 0 { - domains = append(domains, cert.DNSNames...) - } - // append certificate IPs - if len(cert.IPAddresses) > 0 { - for _, ip := range cert.IPAddresses { - domains = append(domains, ip.String()) - } - } - return &models.CertificateInfo{ - SerialNumber: cert.SerialNumber.String(), - Name: name, - Domains: domains, - Expiry: cert.NotAfter.Format(time.RFC3339), - }, nil -} - -var secretTypePublicKeyNameMap = map[string]string{ - "kubernetes.io/tls": "tls.crt", - "cert-manager.io/v1": "tls.crt", - "cert-manager.io/v1alpha2": "tls.crt", - // Add newer secretTypes and their corresponding values in future -} - -// parseTenantCertificates convert public key pem certificates stored in k8s secrets for a given Tenant into x509 certificates -func parseTenantCertificates(ctx context.Context, clientSet K8sClientI, namespace string, secrets []*miniov2.LocalCertificateReference) ([]*models.CertificateInfo, error) { - var certificates []*models.CertificateInfo - publicKey := "public.crt" - // Iterate over TLS secrets and build array of CertificateInfo structure - // that will be used to display information about certs in the UI - for _, secret := range secrets { - keyPair, err := clientSet.getSecret(ctx, namespace, secret.Name, metav1.GetOptions{}) - if err != nil { - return nil, err - } - if v, ok := secretTypePublicKeyNameMap[secret.Type]; ok { - publicKey = v - } - var rawCert []byte - if _, ok := keyPair.Data[publicKey]; !ok { - return nil, fmt.Errorf("public key: %v not found inside certificate secret %v", publicKey, secret.Name) - } - rawCert = keyPair.Data[publicKey] - var blocks []byte - for { - var block *pem.Block - block, rawCert = pem.Decode(rawCert) - if block == nil { - break - } - if block.Type == "CERTIFICATE" { - blocks = append(blocks, block.Bytes...) - } - } - // parse all certificates we found on this k8s secret - certs, err := x509.ParseCertificates(blocks) - if err != nil { - return nil, err - } - for _, cert := range certs { - var domains []string - if cert.Subject.CommonName != "" { - domains = append(domains, cert.Subject.CommonName) - } - // append certificate domain names - if len(cert.DNSNames) > 0 { - domains = append(domains, cert.DNSNames...) - } - // append certificate IPs - if len(cert.IPAddresses) > 0 { - for _, ip := range cert.IPAddresses { - domains = append(domains, ip.String()) - } - } - certificates = append(certificates, &models.CertificateInfo{ - SerialNumber: cert.SerialNumber.String(), - Name: secret.Name, - Domains: domains, - Expiry: cert.NotAfter.Format(time.RFC3339), - }) - } - } - return certificates, nil -} - -func getTenantSecurity(ctx context.Context, clientSet K8sClientI, tenant *miniov2.Tenant) (response *models.TenantSecurityResponse, err error) { - var minioExternalServerCertificates []*models.CertificateInfo - var minioExternalClientCertificates []*models.CertificateInfo - var minioExternalCaCertificates []*models.CertificateInfo - var tenantSecurityContext *models.SecurityContext - // Server certificates used by MinIO - if minioExternalServerCertificates, err = parseTenantCertificates(ctx, clientSet, tenant.Namespace, tenant.Spec.ExternalCertSecret); err != nil { - return nil, err - } - // Client certificates used by MinIO - if minioExternalClientCertificates, err = parseTenantCertificates(ctx, clientSet, tenant.Namespace, tenant.Spec.ExternalClientCertSecrets); err != nil { - return nil, err - } - // CA Certificates used by MinIO - if minioExternalCaCertificates, err = parseTenantCertificates(ctx, clientSet, tenant.Namespace, tenant.Spec.ExternalCaCertSecret); err != nil { - return nil, err - } - // Security Context used by MinIO server - if len(tenant.Spec.Pools) > 0 && tenant.Spec.Pools[0].SecurityContext != nil { - tenantSecurityContext = convertK8sSCToModelSC(tenant.Spec.Pools[0].SecurityContext) - } - return &models.TenantSecurityResponse{ - AutoCert: tenant.AutoCert(), - CustomCertificates: &models.TenantSecurityResponseCustomCertificates{ - Minio: minioExternalServerCertificates, - MinioCAs: minioExternalCaCertificates, - Client: minioExternalClientCertificates, - }, - SecurityContext: tenantSecurityContext, - }, nil -} - -func getTenantIdentityProvider(ctx context.Context, clientSet K8sClientI, tenant *miniov2.Tenant) (response *models.IdpConfiguration, err error) { - tenantConfiguration, err := GetTenantConfiguration(ctx, clientSet, tenant) - if err != nil { - return nil, err - } - - var idpConfiguration *models.IdpConfiguration - - if tenantConfiguration["MINIO_IDENTITY_OPENID_CONFIG_URL"] != "" { - - claimName := tenantConfiguration["MINIO_IDENTITY_OPENID_CLAIM_NAME"] - clientID := tenantConfiguration["MINIO_IDENTITY_OPENID_CLIENT_ID"] - configurationURL := tenantConfiguration["MINIO_IDENTITY_OPENID_CONFIG_URL"] - scopes := tenantConfiguration["MINIO_IDENTITY_OPENID_SCOPES"] - secretID := tenantConfiguration["MINIO_IDENTITY_OPENID_CLIENT_SECRET"] - - idpConfiguration = &models.IdpConfiguration{ - Oidc: &models.IdpConfigurationOidc{ - ClaimName: &claimName, - ClientID: &clientID, - ConfigurationURL: &configurationURL, - Scopes: scopes, - SecretID: &secretID, - }, - } - } - if tenantConfiguration["MINIO_IDENTITY_LDAP_SERVER_ADDR"] != "" { - - groupSearchBaseDN := tenantConfiguration["MINIO_IDENTITY_LDAP_GROUP_SEARCH_BASE_DN"] - groupSearchFilter := tenantConfiguration["MINIO_IDENTITY_LDAP_GROUP_SEARCH_FILTER"] - lookupBindDN := tenantConfiguration["MINIO_IDENTITY_LDAP_LOOKUP_BIND_DN"] - lookupBindPassword := tenantConfiguration["MINIO_IDENTITY_LDAP_LOOKUP_BIND_PASSWORD"] - serverInsecure := tenantConfiguration["MINIO_IDENTITY_LDAP_SERVER_INSECURE"] == "on" - serverStartTLS := tenantConfiguration["MINIO_IDENTITY_LDAP_SERVER_STARTTLS"] == "on" - tlsSkipVerify := tenantConfiguration["MINIO_IDENTITY_LDAP_TLS_SKIP_VERIFY"] == "on" - serverAddress := tenantConfiguration["MINIO_IDENTITY_LDAP_SERVER_ADDR"] - userDNSearchBaseDN := tenantConfiguration["MINIO_IDENTITY_LDAP_USER_DN_SEARCH_BASE_DN"] - userDNSearchFilter := tenantConfiguration["MINIO_IDENTITY_LDAP_USER_DN_SEARCH_FILTER"] - - idpConfiguration = &models.IdpConfiguration{ - ActiveDirectory: &models.IdpConfigurationActiveDirectory{ - GroupSearchBaseDn: groupSearchBaseDN, - GroupSearchFilter: groupSearchFilter, - LookupBindDn: &lookupBindDN, - LookupBindPassword: lookupBindPassword, - ServerInsecure: serverInsecure, - ServerStartTLS: serverStartTLS, - SkipTLSVerification: tlsSkipVerify, - URL: &serverAddress, - UserDnSearchBaseDn: userDNSearchBaseDN, - UserDnSearchFilter: userDNSearchFilter, - }, - } - } - return idpConfiguration, nil -} - -func updateTenantIdentityProvider(ctx context.Context, operatorClient OperatorClientI, client K8sClientI, namespace string, params operator_api.UpdateTenantIdentityProviderParams) error { - tenant, err := operatorClient.TenantGet(ctx, namespace, params.Tenant, metav1.GetOptions{}) - if err != nil { - return err - } - tenantConfiguration, err := GetTenantConfiguration(ctx, client, tenant) - if err != nil { - return err - } - - delete(tenantConfiguration, "accesskey") - delete(tenantConfiguration, "secretkey") - - oidcConfig := params.Body.Oidc - // set new oidc configuration fields - if oidcConfig != nil { - configurationURL := *oidcConfig.ConfigurationURL - clientID := *oidcConfig.ClientID - secretID := *oidcConfig.SecretID - claimName := *oidcConfig.ClaimName - scopes := oidcConfig.Scopes - // oidc config - tenantConfiguration["MINIO_IDENTITY_OPENID_CONFIG_URL"] = configurationURL - tenantConfiguration["MINIO_IDENTITY_OPENID_CLIENT_ID"] = clientID - tenantConfiguration["MINIO_IDENTITY_OPENID_CLIENT_SECRET"] = secretID - tenantConfiguration["MINIO_IDENTITY_OPENID_CLAIM_NAME"] = claimName - if scopes == "" { - scopes = "openid,profile,email" - } - tenantConfiguration["MINIO_IDENTITY_OPENID_SCOPES"] = scopes - } else { - // reset oidc configuration fields - delete(tenantConfiguration, "MINIO_IDENTITY_OPENID_CLAIM_NAME") - delete(tenantConfiguration, "MINIO_IDENTITY_OPENID_CLIENT_ID") - delete(tenantConfiguration, "MINIO_IDENTITY_OPENID_CONFIG_URL") - delete(tenantConfiguration, "MINIO_IDENTITY_OPENID_SCOPES") - delete(tenantConfiguration, "MINIO_IDENTITY_OPENID_CLIENT_SECRET") - } - ldapConfig := params.Body.ActiveDirectory - // set new active directory configuration fields - if ldapConfig != nil { - // ldap config - serverAddress := *ldapConfig.URL - tlsSkipVerify := ldapConfig.SkipTLSVerification - serverInsecure := ldapConfig.ServerInsecure - lookupBindDN := *ldapConfig.LookupBindDn - lookupBindPassword := ldapConfig.LookupBindPassword - userDNSearchBaseDN := ldapConfig.UserDnSearchBaseDn - userDNSearchFilter := ldapConfig.UserDnSearchFilter - groupSearchBaseDN := ldapConfig.GroupSearchBaseDn - groupSearchFilter := ldapConfig.GroupSearchFilter - serverStartTLS := ldapConfig.ServerStartTLS - // LDAP Server - tenantConfiguration["MINIO_IDENTITY_LDAP_SERVER_ADDR"] = serverAddress - if tlsSkipVerify { - tenantConfiguration["MINIO_IDENTITY_LDAP_TLS_SKIP_VERIFY"] = "on" - } - if serverInsecure { - tenantConfiguration["MINIO_IDENTITY_LDAP_SERVER_INSECURE"] = "on" - } - if serverStartTLS { - tenantConfiguration["MINIO_IDENTITY_LDAP_SERVER_STARTTLS"] = "on" - } - // LDAP Lookup - tenantConfiguration["MINIO_IDENTITY_LDAP_LOOKUP_BIND_DN"] = lookupBindDN - tenantConfiguration["MINIO_IDENTITY_LDAP_LOOKUP_BIND_PASSWORD"] = lookupBindPassword - // LDAP User DN - tenantConfiguration["MINIO_IDENTITY_LDAP_USER_DN_SEARCH_BASE_DN"] = userDNSearchBaseDN - tenantConfiguration["MINIO_IDENTITY_LDAP_USER_DN_SEARCH_FILTER"] = userDNSearchFilter - // LDAP Group - tenantConfiguration["MINIO_IDENTITY_LDAP_GROUP_SEARCH_BASE_DN"] = groupSearchBaseDN - tenantConfiguration["MINIO_IDENTITY_LDAP_GROUP_SEARCH_FILTER"] = groupSearchFilter - } else { - // reset active directory configuration fields - delete(tenantConfiguration, "MINIO_IDENTITY_LDAP_GROUP_SEARCH_BASE_DN") - delete(tenantConfiguration, "MINIO_IDENTITY_LDAP_GROUP_SEARCH_FILTER") - delete(tenantConfiguration, "MINIO_IDENTITY_LDAP_LOOKUP_BIND_DN") - delete(tenantConfiguration, "MINIO_IDENTITY_LDAP_LOOKUP_BIND_PASSWORD") - delete(tenantConfiguration, "MINIO_IDENTITY_LDAP_SERVER_INSECURE") - delete(tenantConfiguration, "MINIO_IDENTITY_LDAP_SERVER_STARTTLS") - delete(tenantConfiguration, "MINIO_IDENTITY_LDAP_TLS_SKIP_VERIFY") - delete(tenantConfiguration, "MINIO_IDENTITY_LDAP_SERVER_ADDR") - delete(tenantConfiguration, "MINIO_IDENTITY_LDAP_USER_DN_SEARCH_BASE_DN") - delete(tenantConfiguration, "MINIO_IDENTITY_LDAP_USER_DN_SEARCH_FILTER") - } - // write tenant configuration to secret that contains config.env - tenantConfigurationName := fmt.Sprintf("%s-env-configuration", tenant.Name) - _, err = createOrReplaceSecrets(ctx, client, tenant.Namespace, []tenantSecret{ - { - Name: tenantConfigurationName, - Content: map[string][]byte{ - "config.env": []byte(GenerateTenantConfigurationFile(tenantConfiguration)), - }, - }, - }, tenant.Name) - if err != nil { - return err - } - tenant.Spec.Configuration = &corev1.LocalObjectReference{Name: tenantConfigurationName} - tenant.EnsureDefaults() - // update tenant CRD - _, err = operatorClient.TenantUpdate(ctx, tenant, metav1.UpdateOptions{}) - return err -} - -func listTenants(ctx context.Context, operatorClient OperatorClientI, namespace string, limit *int32) (*models.ListTenantsResponse, error) { - listOpts := metav1.ListOptions{} - - if limit != nil { - listOpts.Limit = int64(*limit) - } - - minTenants, err := operatorClient.TenantList(ctx, namespace, listOpts) - if err != nil { - return nil, err - } - - var tenants []*models.TenantList - - for _, tenant := range minTenants.Items { - var totalSize int64 - var instanceCount int64 - var volumeCount int64 - for _, pool := range tenant.Spec.Pools { - instanceCount += int64(pool.Servers) - volumeCount += int64(pool.Servers * pool.VolumesPerServer) - if pool.VolumeClaimTemplate != nil { - poolSize := int64(pool.VolumesPerServer) * int64(pool.Servers) * pool.VolumeClaimTemplate.Spec.Resources.Requests.Storage().Value() - totalSize += poolSize - } - } - - var deletion string - if tenant.ObjectMeta.DeletionTimestamp != nil { - deletion = tenant.ObjectMeta.DeletionTimestamp.Format(time.RFC3339) - } - - var tiers []*models.TenantTierElement - - for _, tier := range tenant.Status.Usage.Tiers { - tierItem := &models.TenantTierElement{ - Name: tier.Name, - Type: tier.Type, - Size: tier.TotalSize, - } - - tiers = append(tiers, tierItem) - } - - var domains models.DomainsConfiguration - - if tenant.Spec.Features != nil && tenant.Spec.Features.Domains != nil { - domains = models.DomainsConfiguration{ - Console: tenant.Spec.Features.Domains.Console, - Minio: tenant.Spec.Features.Domains.Minio, - } - } - - tenants = append(tenants, &models.TenantList{ - CreationDate: tenant.ObjectMeta.CreationTimestamp.Format(time.RFC3339), - DeletionDate: deletion, - Name: tenant.ObjectMeta.Name, - PoolCount: int64(len(tenant.Spec.Pools)), - InstanceCount: instanceCount, - VolumeCount: volumeCount, - CurrentState: tenant.Status.CurrentState, - Namespace: tenant.ObjectMeta.Namespace, - TotalSize: totalSize, - HealthStatus: string(tenant.Status.HealthStatus), - CapacityRaw: tenant.Status.Usage.RawCapacity, - CapacityRawUsage: tenant.Status.Usage.RawUsage, - Capacity: tenant.Status.Usage.Capacity, - CapacityUsage: tenant.Status.Usage.Usage, - Tiers: tiers, - Domains: &domains, - }) - } - - return &models.ListTenantsResponse{ - Tenants: tenants, - Total: int64(len(tenants)), - }, nil -} - -func getListAllTenantsResponse(session *models.Principal, params operator_api.ListAllTenantsParams) (*models.ListTenantsResponse, *models.Error) { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - opClientClientSet, err := GetOperatorClient(session.STSSessionToken) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - opClient := &operatorClient{ - client: opClientClientSet, - } - listT, err := listTenants(ctx, opClient, "", params.Limit) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - return listT, nil -} - -// getListTenantsResponse list tenants by namespace -func getListTenantsResponse(session *models.Principal, params operator_api.ListTenantsParams) (*models.ListTenantsResponse, *models.Error) { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - opClientClientSet, err := GetOperatorClient(session.STSSessionToken) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - opClient := &operatorClient{ - client: opClientClientSet, - } - listT, err := listTenants(ctx, opClient, params.Namespace, params.Limit) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - return listT, nil -} - -// setImageRegistry creates a secret to store the private registry credentials, if one exist it updates the existing one -// returns the name of the secret created/updated -func setImageRegistry(ctx context.Context, req *models.ImageRegistry, clientset K8sClientI, namespace, tenantName string) (string, error) { - if req == nil || req.Registry == nil || req.Username == nil || req.Password == nil { - return "", nil - } - - credentials := make(map[string]imageRegistryCredentials) - // username:password encoded - authData := []byte(fmt.Sprintf("%s:%s", *req.Username, *req.Password)) - authStr := base64.StdEncoding.EncodeToString(authData) - - credentials[*req.Registry] = imageRegistryCredentials{ - Username: *req.Username, - Password: *req.Password, - Auth: authStr, - } - imRegistry := imageRegistry{ - Auths: credentials, - } - imRegistryJSON, err := json.Marshal(imRegistry) - if err != nil { - return "", err - } - - pullSecretName := fmt.Sprintf("%s-regcred", tenantName) - secretCredentials := map[string][]byte{ - corev1.DockerConfigJsonKey: []byte(string(imRegistryJSON)), - } - // Get or Create secret if it doesn't exist - currentSecret, err := clientset.getSecret(ctx, namespace, pullSecretName, metav1.GetOptions{}) - if err != nil { - if k8sErrors.IsNotFound(err) { - instanceSecret := corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: pullSecretName, - Labels: map[string]string{ - miniov2.TenantLabel: tenantName, - }, - }, - Data: secretCredentials, - Type: corev1.SecretTypeDockerConfigJson, - } - _, err = clientset.createSecret(ctx, namespace, &instanceSecret, metav1.CreateOptions{}) - if err != nil { - return "", err - } - return pullSecretName, nil - } - return "", err - } - currentSecret.Data = secretCredentials - _, err = clientset.updateSecret(ctx, namespace, currentSecret, metav1.UpdateOptions{}) - if err != nil { - return "", err - } - return pullSecretName, nil -} - -func getUpdateTenantResponse(session *models.Principal, params operator_api.UpdateTenantParams) *models.Error { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - opClientClientSet, err := GetOperatorClient(session.STSSessionToken) - if err != nil { - return ErrorWithContext(ctx, err) - } - // get Kubernetes Client - clientSet, err := K8sClient(session.STSSessionToken) - if err != nil { - return ErrorWithContext(ctx, err) - } - k8sClient := &k8sClient{ - client: clientSet, - } - opClient := &operatorClient{ - client: opClientClientSet, - } - client := GetConsoleHTTPClient("") - client.Timeout = 4 * time.Second - httpC := &utils2.Client{ - Client: client, - } - if err := updateTenantAction(ctx, opClient, k8sClient, httpC, params.Namespace, params); err != nil { - return ErrorWithContext(ctx, err, errors.New("unable to update tenant")) - } - return nil -} - -// addTenantPool creates a pool to a defined tenant -func addTenantPool(ctx context.Context, operatorClient OperatorClientI, params operator_api.TenantAddPoolParams) error { - tenant, err := operatorClient.TenantGet(ctx, params.Namespace, params.Tenant, metav1.GetOptions{}) - if err != nil { - return err - } - - poolParams := params.Body - pool, err := parseTenantPoolRequest(poolParams) - if err != nil { - return err - } - tenant.Spec.Pools = append(tenant.Spec.Pools, *pool) - payloadBytes, err := json.Marshal(tenant) - if err != nil { - return err - } - - _, err = operatorClient.TenantPatch(ctx, tenant.Namespace, tenant.Name, types.MergePatchType, payloadBytes, metav1.PatchOptions{}) - if err != nil { - return err - } - return nil -} - -// getTenantUsageResponse returns the usage of a tenant -func getTenantUsageResponse(session *models.Principal, params operator_api.GetTenantUsageParams) (*models.TenantUsage, *models.Error) { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - - opClientClientSet, err := GetOperatorClient(session.STSSessionToken) - if err != nil { - return nil, ErrorWithContext(ctx, err, ErrUnableToGetTenantUsage) - } - clientSet, err := K8sClient(session.STSSessionToken) - if err != nil { - return nil, ErrorWithContext(ctx, err, ErrUnableToGetTenantUsage) - } - - opClient := &operatorClient{ - client: opClientClientSet, - } - k8sClient := &k8sClient{ - client: clientSet, - } - - minTenant, err := getTenant(ctx, opClient, params.Namespace, params.Tenant) - if err != nil { - return nil, ErrorWithContext(ctx, err, ErrUnableToGetTenantUsage) - } - return getTenantUsage(ctx, minTenant, k8sClient) -} - -func getTenantUsage(ctx context.Context, minTenant *miniov2.Tenant, k8sClient K8sClientI) (*models.TenantUsage, *models.Error) { - minTenant.EnsureDefaults() - - svcURL := GetTenantServiceURL(minTenant) - // getTenantAdminClient will use all certificates under ~/.console/certs/CAs to trust the TLS connections with MinIO tenants - mAdmin, err := getTenantAdminClient( - ctx, - k8sClient, - minTenant, - svcURL, - ) - if err != nil { - return nil, ErrorWithContext(ctx, err, ErrUnableToGetTenantUsage) - } - return _getTenantUsage(ctx, AdminClient{Client: mAdmin}) -} - -func _getTenantUsage(ctx context.Context, adminClient MinioAdmin) (*models.TenantUsage, *models.Error) { - adminInfo, err := GetAdminInfo(ctx, adminClient) - if err != nil { - return nil, ErrorWithContext(ctx, err, ErrUnableToGetTenantUsage) - } - return &models.TenantUsage{Used: adminInfo.Usage, DiskUsed: adminInfo.DisksUsage}, nil -} - -// parseTenantPoolRequest parse pool request and returns the equivalent -// miniov2.Pool object -func parseTenantPoolRequest(poolParams *models.Pool) (*miniov2.Pool, error) { - if poolParams.VolumeConfiguration == nil { - return nil, errors.New("a volume configuration must be specified") - } - - if poolParams.VolumeConfiguration.Size == nil || *poolParams.VolumeConfiguration.Size <= int64(0) { - return nil, errors.New("volume size must be greater than 0") - } - - if poolParams.Servers == nil || *poolParams.Servers <= 0 { - return nil, errors.New("number of servers must be greater than 0") - } - - if poolParams.VolumesPerServer == nil || *poolParams.VolumesPerServer <= 0 { - return nil, errors.New("number of volumes per server must be greater than 0") - } - - volumeSize := resource.NewQuantity(*poolParams.VolumeConfiguration.Size, resource.DecimalExponent) - volTemp := corev1.PersistentVolumeClaimSpec{ - AccessModes: []corev1.PersistentVolumeAccessMode{ - corev1.ReadWriteOnce, - }, - Resources: corev1.VolumeResourceRequirements{ - Requests: corev1.ResourceList{ - corev1.ResourceStorage: *volumeSize, - }, - }, - } - if poolParams.VolumeConfiguration.StorageClassName != "" { - volTemp.StorageClassName = &poolParams.VolumeConfiguration.StorageClassName - } - - // parse resources' requests - resourcesRequests := make(corev1.ResourceList) - resourcesLimits := make(corev1.ResourceList) - if poolParams.Resources != nil { - for key, val := range poolParams.Resources.Requests { - resourcesRequests[corev1.ResourceName(key)] = *resource.NewQuantity(val, resource.BinarySI) - } - for key, val := range poolParams.Resources.Limits { - resourcesLimits[corev1.ResourceName(key)] = *resource.NewQuantity(val, resource.BinarySI) - } - } - - // parse Node Affinity - nodeSelectorTerms := []corev1.NodeSelectorTerm{} - preferredSchedulingTerm := []corev1.PreferredSchedulingTerm{} - if poolParams.Affinity != nil && poolParams.Affinity.NodeAffinity != nil { - if poolParams.Affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution != nil { - for _, elem := range poolParams.Affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms { - term := parseModelsNodeSelectorTerm(elem) - nodeSelectorTerms = append(nodeSelectorTerms, term) - } - } - for _, elem := range poolParams.Affinity.NodeAffinity.PreferredDuringSchedulingIgnoredDuringExecution { - pst := corev1.PreferredSchedulingTerm{ - Weight: *elem.Weight, - Preference: parseModelsNodeSelectorTerm(elem.Preference), - } - preferredSchedulingTerm = append(preferredSchedulingTerm, pst) - } - } - var nodeAffinity *corev1.NodeAffinity - if len(nodeSelectorTerms) > 0 || len(preferredSchedulingTerm) > 0 { - nodeAffinity = &corev1.NodeAffinity{ - RequiredDuringSchedulingIgnoredDuringExecution: &corev1.NodeSelector{ - NodeSelectorTerms: mergeNodeSelectorTerms(nodeSelectorTerms), - }, - PreferredDuringSchedulingIgnoredDuringExecution: preferredSchedulingTerm, - } - } - - // parse Pod Affinity - podAffinityTerms := []corev1.PodAffinityTerm{} - weightedPodAffinityTerms := []corev1.WeightedPodAffinityTerm{} - if poolParams.Affinity != nil && poolParams.Affinity.PodAffinity != nil { - for _, elem := range poolParams.Affinity.PodAffinity.RequiredDuringSchedulingIgnoredDuringExecution { - podAffinityTerms = append(podAffinityTerms, parseModelPodAffinityTerm(elem)) - } - for _, elem := range poolParams.Affinity.PodAffinity.PreferredDuringSchedulingIgnoredDuringExecution { - wAffinityTerm := corev1.WeightedPodAffinityTerm{ - Weight: *elem.Weight, - PodAffinityTerm: parseModelPodAffinityTerm(elem.PodAffinityTerm), - } - weightedPodAffinityTerms = append(weightedPodAffinityTerms, wAffinityTerm) - } - } - var podAffinity *corev1.PodAffinity - if len(podAffinityTerms) > 0 || len(weightedPodAffinityTerms) > 0 { - podAffinity = &corev1.PodAffinity{ - RequiredDuringSchedulingIgnoredDuringExecution: podAffinityTerms, - PreferredDuringSchedulingIgnoredDuringExecution: weightedPodAffinityTerms, - } - } - - // parse Pod Anti Affinity - podAntiAffinityTerms := []corev1.PodAffinityTerm{} - weightedPodAntiAffinityTerms := []corev1.WeightedPodAffinityTerm{} - if poolParams.Affinity != nil && poolParams.Affinity.PodAntiAffinity != nil { - for _, elem := range poolParams.Affinity.PodAntiAffinity.RequiredDuringSchedulingIgnoredDuringExecution { - podAntiAffinityTerms = append(podAntiAffinityTerms, parseModelPodAffinityTerm(elem)) - } - for _, elem := range poolParams.Affinity.PodAntiAffinity.PreferredDuringSchedulingIgnoredDuringExecution { - wAffinityTerm := corev1.WeightedPodAffinityTerm{ - Weight: *elem.Weight, - PodAffinityTerm: parseModelPodAffinityTerm(elem.PodAffinityTerm), - } - weightedPodAntiAffinityTerms = append(weightedPodAntiAffinityTerms, wAffinityTerm) - } - } - var podAntiAffinity *corev1.PodAntiAffinity - if len(podAntiAffinityTerms) > 0 || len(weightedPodAntiAffinityTerms) > 0 { - podAntiAffinity = &corev1.PodAntiAffinity{ - RequiredDuringSchedulingIgnoredDuringExecution: podAntiAffinityTerms, - PreferredDuringSchedulingIgnoredDuringExecution: weightedPodAntiAffinityTerms, - } - } - - var affinity *corev1.Affinity - if nodeAffinity != nil || podAffinity != nil || podAntiAffinity != nil { - affinity = &corev1.Affinity{ - NodeAffinity: nodeAffinity, - PodAffinity: podAffinity, - PodAntiAffinity: podAntiAffinity, - } - } - - // parse tolerations - tolerations := []corev1.Toleration{} - for _, elem := range poolParams.Tolerations { - var tolerationSeconds *int64 - effect := corev1.TaintEffect(elem.Effect) - tolerationOperator := corev1.TolerationOperator(elem.Operator) - - // We only allow empty key if operator is exists. - // An empty key with operator Exists matches all keys, values and effects which means this will tolerate everything. - if elem.Key == "" && tolerationOperator != corev1.TolerationOpExists { - // ignore - continue - } - - if elem.TolerationSeconds != nil && elem.TolerationSeconds.Seconds != nil { - tolerationSeconds = elem.TolerationSeconds.Seconds - if effect != corev1.TaintEffectNoExecute { - return nil, fmt.Errorf(`Invalid value: "%s": effect must be 'NoExecute' when tolerationSeconds is set`, elem.Effect) - } - - } - - toleration := corev1.Toleration{ - Key: elem.Key, - Operator: tolerationOperator, - Value: elem.Value, - Effect: effect, - TolerationSeconds: tolerationSeconds, - } - tolerations = append(tolerations, toleration) - } - - // Pass annotations to the volume - vct := &corev1.PersistentVolumeClaim{ - ObjectMeta: metav1.ObjectMeta{ - Name: "data", - Labels: poolParams.VolumeConfiguration.Labels, - Annotations: poolParams.VolumeConfiguration.Annotations, - }, - Spec: volTemp, - } - - pool := &miniov2.Pool{ - Name: poolParams.Name, - Servers: int32(*poolParams.Servers), - VolumesPerServer: *poolParams.VolumesPerServer, - VolumeClaimTemplate: vct, - Resources: corev1.ResourceRequirements{ - Requests: resourcesRequests, - Limits: resourcesLimits, - }, - NodeSelector: poolParams.NodeSelector, - Affinity: affinity, - Tolerations: tolerations, - RuntimeClassName: &poolParams.RuntimeClassName, - } - // use default security context for Tenant if none is present - scp := poolParams.SecurityContext - if scp == nil { - scp = &defaultSecurityContext - } - var err error - pool.SecurityContext, err = convertModelSCToK8sSC(scp) - if err != nil { - return nil, err - } - pool.ContainerSecurityContext = &corev1.SecurityContext{ - // use security context as the base for the container security context - RunAsUser: pool.SecurityContext.RunAsUser, - RunAsGroup: pool.SecurityContext.RunAsGroup, - RunAsNonRoot: pool.SecurityContext.RunAsNonRoot, - - // allow running the tenant with restricted pod standards - // see https://kubernetes.io/docs/concepts/security/pod-security-standards - AllowPrivilegeEscalation: ptr.To(false), - Capabilities: &corev1.Capabilities{ - Drop: []corev1.Capability{"ALL"}, - }, - SeccompProfile: &corev1.SeccompProfile{ - Type: corev1.SeccompProfileTypeRuntimeDefault, - }, - } - return pool, nil -} - -// mergeNodeSelectorTerms is for matchExpressions merge, when matchExpressions/matchFields have the same Key+Operator , we merge values. -// When matchExpressions/matchFields have the same Key+Operator, Set it 'And' -func mergeNodeSelectorTerms(terms []corev1.NodeSelectorTerm) []corev1.NodeSelectorTerm { - mergedTerms := []corev1.NodeSelectorTerm{} - for _, term := range terms { - nodeSelectorTerm := corev1.NodeSelectorTerm{} - nodeSelectorMatchExpressionsMap := map[string]*corev1.NodeSelectorRequirement{} - for _, exp := range term.MatchExpressions { - if selector, ok := nodeSelectorMatchExpressionsMap[fmt.Sprintf("%s-%s", exp.Key, exp.Operator)]; ok { - selector.Values = append(selector.Values, exp.Values...) - } else { - nodeSelectorMatchExpressionsMap[fmt.Sprintf("%s-%s", exp.Key, exp.Operator)] = &corev1.NodeSelectorRequirement{ - Key: exp.Key, - Operator: exp.Operator, - Values: exp.Values, - } - } - } - nodeSelectorMatchMatchFieldsMap := map[string]*corev1.NodeSelectorRequirement{} - for _, field := range term.MatchFields { - if selector, ok := nodeSelectorMatchMatchFieldsMap[fmt.Sprintf("%s-%s", field.Key, field.Operator)]; ok { - selector.Values = append(selector.Values, field.Values...) - } else { - nodeSelectorMatchMatchFieldsMap[fmt.Sprintf("%s-%s", field.Key, field.Operator)] = &corev1.NodeSelectorRequirement{ - Key: field.Key, - Operator: field.Operator, - Values: field.Values, - } - } - } - for _, exp := range nodeSelectorMatchExpressionsMap { - nodeSelectorTerm.MatchExpressions = append(nodeSelectorTerm.MatchExpressions, *exp) - } - for _, field := range nodeSelectorMatchMatchFieldsMap { - nodeSelectorTerm.MatchExpressions = append(nodeSelectorTerm.MatchFields, *field) - } - if len(nodeSelectorMatchExpressionsMap) != 0 || len(nodeSelectorMatchMatchFieldsMap) != 0 { - mergedTerms = append(mergedTerms, nodeSelectorTerm) - } - } - return mergedTerms -} - -func parseModelPodAffinityTerm(term *models.PodAffinityTerm) corev1.PodAffinityTerm { - labelMatchExpressions := []metav1.LabelSelectorRequirement{} - for _, exp := range term.LabelSelector.MatchExpressions { - labelSelectorReq := metav1.LabelSelectorRequirement{ - Key: *exp.Key, - Operator: metav1.LabelSelectorOperator(*exp.Operator), - Values: exp.Values, - } - labelMatchExpressions = append(labelMatchExpressions, labelSelectorReq) - } - - podAffinityTerm := corev1.PodAffinityTerm{ - LabelSelector: &metav1.LabelSelector{ - MatchExpressions: labelMatchExpressions, - MatchLabels: term.LabelSelector.MatchLabels, - }, - Namespaces: term.Namespaces, - TopologyKey: *term.TopologyKey, - } - return podAffinityTerm -} - -func parseModelsNodeSelectorTerm(elem *models.NodeSelectorTerm) corev1.NodeSelectorTerm { - var term corev1.NodeSelectorTerm - for _, matchExpression := range elem.MatchExpressions { - matchExp := corev1.NodeSelectorRequirement{ - Key: *matchExpression.Key, - Operator: corev1.NodeSelectorOperator(*matchExpression.Operator), - Values: matchExpression.Values, - } - term.MatchExpressions = append(term.MatchExpressions, matchExp) - } - for _, matchField := range elem.MatchFields { - matchF := corev1.NodeSelectorRequirement{ - Key: *matchField.Key, - Operator: corev1.NodeSelectorOperator(*matchField.Operator), - Values: matchField.Values, - } - term.MatchFields = append(term.MatchFields, matchF) - } - return term -} - -// parseTenantPool miniov2 pool object and returns the equivalent -// models.Pool object -func parseTenantPool(pool *miniov2.Pool) *models.Pool { - var size *int64 - var storageClassName string - if pool.VolumeClaimTemplate != nil { - size = swag.Int64(pool.VolumeClaimTemplate.Spec.Resources.Requests.Storage().Value()) - if pool.VolumeClaimTemplate.Spec.StorageClassName != nil { - storageClassName = *pool.VolumeClaimTemplate.Spec.StorageClassName - } - } - - // parse resources' requests - var resources *models.PoolResources - resourcesRequests := make(map[string]int64) - resourcesLimits := make(map[string]int64) - for key, val := range pool.Resources.Requests { - resourcesRequests[key.String()] = val.Value() - } - for key, val := range pool.Resources.Limits { - resourcesLimits[key.String()] = val.Value() - } - if len(resourcesRequests) > 0 || len(resourcesLimits) > 0 { - resources = &models.PoolResources{ - Limits: resourcesLimits, - Requests: resourcesRequests, - } - } - - // parse Node Affinity - nodeSelectorTerms := []*models.NodeSelectorTerm{} - preferredSchedulingTerm := []*models.PoolAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0{} - - if pool.Affinity != nil && pool.Affinity.NodeAffinity != nil { - if pool.Affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution != nil { - for _, elem := range pool.Affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms { - term := parseNodeSelectorTerm(&elem) - nodeSelectorTerms = append(nodeSelectorTerms, term) - } - } - for _, elem := range pool.Affinity.NodeAffinity.PreferredDuringSchedulingIgnoredDuringExecution { - pst := &models.PoolAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0{ - Weight: swag.Int32(elem.Weight), - Preference: parseNodeSelectorTerm(&elem.Preference), - } - preferredSchedulingTerm = append(preferredSchedulingTerm, pst) - } - } - - var nodeAffinity *models.PoolAffinityNodeAffinity - if len(nodeSelectorTerms) > 0 || len(preferredSchedulingTerm) > 0 { - nodeAffinity = &models.PoolAffinityNodeAffinity{ - RequiredDuringSchedulingIgnoredDuringExecution: &models.PoolAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecution{ - NodeSelectorTerms: nodeSelectorTerms, - }, - PreferredDuringSchedulingIgnoredDuringExecution: preferredSchedulingTerm, - } - } - - // parse Pod Affinity - podAffinityTerms := []*models.PodAffinityTerm{} - weightedPodAffinityTerms := []*models.PoolAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0{} - - if pool.Affinity != nil && pool.Affinity.PodAffinity != nil { - for _, elem := range pool.Affinity.PodAffinity.RequiredDuringSchedulingIgnoredDuringExecution { - podAffinityTerms = append(podAffinityTerms, parsePodAffinityTerm(&elem)) - } - for _, elem := range pool.Affinity.PodAffinity.PreferredDuringSchedulingIgnoredDuringExecution { - wAffinityTerm := &models.PoolAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0{ - Weight: swag.Int32(elem.Weight), - PodAffinityTerm: parsePodAffinityTerm(&elem.PodAffinityTerm), - } - weightedPodAffinityTerms = append(weightedPodAffinityTerms, wAffinityTerm) - } - } - var podAffinity *models.PoolAffinityPodAffinity - if len(podAffinityTerms) > 0 || len(weightedPodAffinityTerms) > 0 { - podAffinity = &models.PoolAffinityPodAffinity{ - RequiredDuringSchedulingIgnoredDuringExecution: podAffinityTerms, - PreferredDuringSchedulingIgnoredDuringExecution: weightedPodAffinityTerms, - } - } - - // parse Pod Anti Affinity - podAntiAffinityTerms := []*models.PodAffinityTerm{} - weightedPodAntiAffinityTerms := []*models.PoolAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0{} - - if pool.Affinity != nil && pool.Affinity.PodAntiAffinity != nil { - for _, elem := range pool.Affinity.PodAntiAffinity.RequiredDuringSchedulingIgnoredDuringExecution { - podAntiAffinityTerms = append(podAntiAffinityTerms, parsePodAffinityTerm(&elem)) - } - for _, elem := range pool.Affinity.PodAntiAffinity.PreferredDuringSchedulingIgnoredDuringExecution { - wAffinityTerm := &models.PoolAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0{ - Weight: swag.Int32(elem.Weight), - PodAffinityTerm: parsePodAffinityTerm(&elem.PodAffinityTerm), - } - weightedPodAntiAffinityTerms = append(weightedPodAntiAffinityTerms, wAffinityTerm) - } - } - - var podAntiAffinity *models.PoolAffinityPodAntiAffinity - if len(podAntiAffinityTerms) > 0 || len(weightedPodAntiAffinityTerms) > 0 { - podAntiAffinity = &models.PoolAffinityPodAntiAffinity{ - RequiredDuringSchedulingIgnoredDuringExecution: podAntiAffinityTerms, - PreferredDuringSchedulingIgnoredDuringExecution: weightedPodAntiAffinityTerms, - } - } - - // build affinity object - var affinity *models.PoolAffinity - if nodeAffinity != nil || podAffinity != nil || podAntiAffinity != nil { - affinity = &models.PoolAffinity{ - NodeAffinity: nodeAffinity, - PodAffinity: podAffinity, - PodAntiAffinity: podAntiAffinity, - } - } - - // parse tolerations - var tolerations models.PoolTolerations - for _, elem := range pool.Tolerations { - var tolerationSecs *models.PoolTolerationSeconds - if elem.TolerationSeconds != nil { - tolerationSecs = &models.PoolTolerationSeconds{ - Seconds: elem.TolerationSeconds, - } - } - toleration := &models.PoolTolerationsItems0{ - Key: elem.Key, - Operator: string(elem.Operator), - Value: elem.Value, - Effect: string(elem.Effect), - TolerationSeconds: tolerationSecs, - } - tolerations = append(tolerations, toleration) - } - - var securityContext models.SecurityContext - - if pool.SecurityContext != nil { - var fsGroup string - var runAsGroup string - var runAsUser string - var fsGroupChangePolicy string - if pool.SecurityContext.FSGroup != nil { - fsGroup = strconv.Itoa(int(*pool.SecurityContext.FSGroup)) - } - if pool.SecurityContext.RunAsGroup != nil { - runAsGroup = strconv.Itoa(int(*pool.SecurityContext.RunAsGroup)) - } - if pool.SecurityContext.RunAsUser != nil { - runAsUser = strconv.Itoa(int(*pool.SecurityContext.RunAsUser)) - } - if pool.SecurityContext.FSGroupChangePolicy != nil { - fsGroupChangePolicy = string(*pool.SecurityContext.FSGroupChangePolicy) - } - securityContext = models.SecurityContext{ - FsGroup: fsGroup, - RunAsGroup: &runAsGroup, - RunAsNonRoot: pool.SecurityContext.RunAsNonRoot, - RunAsUser: &runAsUser, - FsGroupChangePolicy: fsGroupChangePolicy, - } - } - - var runtimeClassName string - if pool.RuntimeClassName != nil { - runtimeClassName = *pool.RuntimeClassName - } - - poolModel := &models.Pool{ - Name: pool.Name, - Servers: swag.Int64(int64(pool.Servers)), - VolumesPerServer: swag.Int32(pool.VolumesPerServer), - VolumeConfiguration: &models.PoolVolumeConfiguration{ - Size: size, - StorageClassName: storageClassName, - Annotations: pool.VolumeClaimTemplate.ObjectMeta.Annotations, - }, - NodeSelector: pool.NodeSelector, - Resources: resources, - Affinity: affinity, - Tolerations: tolerations, - SecurityContext: &securityContext, - RuntimeClassName: runtimeClassName, - } - return poolModel -} - -func parsePodAffinityTerm(term *corev1.PodAffinityTerm) *models.PodAffinityTerm { - labelMatchExpressions := []*models.PodAffinityTermLabelSelectorMatchExpressionsItems0{} - for _, exp := range term.LabelSelector.MatchExpressions { - labelSelectorReq := &models.PodAffinityTermLabelSelectorMatchExpressionsItems0{ - Key: swag.String(exp.Key), - Operator: swag.String(string(exp.Operator)), - Values: exp.Values, - } - labelMatchExpressions = append(labelMatchExpressions, labelSelectorReq) - } - - podAffinityTerm := &models.PodAffinityTerm{ - LabelSelector: &models.PodAffinityTermLabelSelector{ - MatchExpressions: labelMatchExpressions, - MatchLabels: term.LabelSelector.MatchLabels, - }, - Namespaces: term.Namespaces, - TopologyKey: swag.String(term.TopologyKey), - } - return podAffinityTerm -} - -func parseNodeSelectorTerm(term *corev1.NodeSelectorTerm) *models.NodeSelectorTerm { - var t models.NodeSelectorTerm - for _, matchExpression := range term.MatchExpressions { - matchExp := &models.NodeSelectorTermMatchExpressionsItems0{ - Key: swag.String(matchExpression.Key), - Operator: swag.String(string(matchExpression.Operator)), - Values: matchExpression.Values, - } - t.MatchExpressions = append(t.MatchExpressions, matchExp) - } - for _, matchField := range term.MatchFields { - matchF := &models.NodeSelectorTermMatchFieldsItems0{ - Key: swag.String(matchField.Key), - Operator: swag.String(string(matchField.Operator)), - Values: matchField.Values, - } - t.MatchFields = append(t.MatchFields, matchF) - } - return &t -} diff --git a/api/tenant-handlers_test.go b/api/tenant-handlers_test.go deleted file mode 100644 index 7021b279aa0..00000000000 --- a/api/tenant-handlers_test.go +++ /dev/null @@ -1,1739 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "bytes" - "context" - "encoding/json" - "errors" - "io" - "io/ioutil" - "net/http" - "reflect" - "testing" - "time" - - "github.com/go-openapi/swag" - "github.com/minio/operator/api/operations/operator_api" - "github.com/minio/operator/models" - miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - xhttp "github.com/minio/operator/pkg/http" - "github.com/stretchr/testify/assert" - corev1 "k8s.io/api/core/v1" - k8sErrors "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/api/resource" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apimachinery/pkg/types" - "k8s.io/client-go/kubernetes/fake" -) - -var ( - opClientTenantDeleteMock func(ctx context.Context, namespace string, tenantName string, options metav1.DeleteOptions) error - opClientTenantGetMock func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) - opClientTenantPatchMock func(ctx context.Context, namespace string, tenantName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*miniov2.Tenant, error) - opClientTenantUpdateMock func(ctx context.Context, tenant *miniov2.Tenant, opts metav1.UpdateOptions) (*miniov2.Tenant, error) -) - -var ( - opClientTenantListMock func(ctx context.Context, namespace string, opts metav1.ListOptions) (*miniov2.TenantList, error) - httpClientGetMock func(url string) (resp *http.Response, err error) - httpClientPostMock func(url, contentType string, body io.Reader) (resp *http.Response, err error) - httpClientDoMock func(req *http.Request) (*http.Response, error) -) - -// mock function of TenantDelete() -func (ac opClientMock) TenantDelete(ctx context.Context, namespace string, tenantName string, options metav1.DeleteOptions) error { - return opClientTenantDeleteMock(ctx, namespace, tenantName, options) -} - -// mock function of TenantGet() -func (ac opClientMock) TenantGet(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return opClientTenantGetMock(ctx, namespace, tenantName, options) -} - -// mock function of TenantPatch() -func (ac opClientMock) TenantPatch(ctx context.Context, namespace string, tenantName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*miniov2.Tenant, error) { - return opClientTenantPatchMock(ctx, namespace, tenantName, pt, data, options) -} - -// mock function of TenantUpdate() -func (ac opClientMock) TenantUpdate(ctx context.Context, tenant *miniov2.Tenant, opts metav1.UpdateOptions) (*miniov2.Tenant, error) { - return opClientTenantUpdateMock(ctx, tenant, opts) -} - -// mock function of TenantList() -func (ac opClientMock) TenantList(ctx context.Context, namespace string, opts metav1.ListOptions) (*miniov2.TenantList, error) { - return opClientTenantListMock(ctx, namespace, opts) -} - -// mock function of get() -func (h httpClientMock) Get(url string) (resp *http.Response, err error) { - return httpClientGetMock(url) -} - -// mock function of post() -func (h httpClientMock) Post(url, contentType string, body io.Reader) (resp *http.Response, err error) { - return httpClientPostMock(url, contentType, body) -} - -// mock function of Do() -func (h httpClientMock) Do(req *http.Request) (*http.Response, error) { - return httpClientDoMock(req) -} - -func Test_TenantInfoTenantAdminClient(t *testing.T) { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - kubernetesClient := k8sClientMock{} - type args struct { - ctx context.Context - client K8sClientI - tenant miniov2.Tenant - serviceURL string - } - tests := []struct { - name string - args args - wantErr bool - mockGetSecret func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) - mockGetService func(ctx context.Context, namespace, serviceName string, opts metav1.GetOptions) (*corev1.Service, error) - }{ - { - name: "Return Tenant Admin, no errors using legacy credentials", - args: args{ - ctx: ctx, - client: kubernetesClient, - tenant: miniov2.Tenant{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "default", - Name: "tenant-1", - }, - Spec: miniov2.TenantSpec{ - CredsSecret: &corev1.LocalObjectReference{ - Name: "secret-name", - }, - }, - }, - serviceURL: "http://service-1.default.svc.cluster.local:80", - }, - mockGetSecret: func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - vals := make(map[string][]byte) - vals["secretkey"] = []byte("secret") - vals["accesskey"] = []byte("access") - sec := &corev1.Secret{ - Data: vals, - } - return sec, nil - }, - mockGetService: func(ctx context.Context, namespace, serviceName string, opts metav1.GetOptions) (*corev1.Service, error) { - serv := &corev1.Service{ - Spec: corev1.ServiceSpec{ - ClusterIP: "10.1.1.2", - }, - } - return serv, nil - }, - wantErr: false, - }, - { - name: "Return Tenant Admin, no errors using credentials from configuration file", - args: args{ - ctx: ctx, - client: kubernetesClient, - tenant: miniov2.Tenant{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "default", - Name: "tenant-1", - }, - Spec: miniov2.TenantSpec{ - CredsSecret: &corev1.LocalObjectReference{ - Name: "secret-name", - }, - Configuration: &corev1.LocalObjectReference{ - Name: "tenant-configuration", - }, - }, - }, - serviceURL: "http://service-1.default.svc.cluster.local:80", - }, - mockGetSecret: func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - vals := make(map[string][]byte) - vals["config.env"] = []byte(` -export MINIO_ROOT_USER=minio -export MINIO_ROOT_PASSWORD=minio123 -`) - sec := &corev1.Secret{ - Data: vals, - } - return sec, nil - }, - mockGetService: func(ctx context.Context, namespace, serviceName string, opts metav1.GetOptions) (*corev1.Service, error) { - serv := &corev1.Service{ - Spec: corev1.ServiceSpec{ - ClusterIP: "10.1.1.2", - }, - } - return serv, nil - }, - wantErr: false, - }, - { - name: "Return Tenant Admin, no errors using credentials from configuration file 2", - args: args{ - ctx: ctx, - client: kubernetesClient, - tenant: miniov2.Tenant{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "default", - Name: "tenant-1", - }, - Spec: miniov2.TenantSpec{ - CredsSecret: &corev1.LocalObjectReference{ - Name: "secret-name", - }, - Configuration: &corev1.LocalObjectReference{ - Name: "tenant-configuration", - }, - }, - }, - serviceURL: "http://service-1.default.svc.cluster.local:80", - }, - mockGetSecret: func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - vals := make(map[string][]byte) - vals["config.env"] = []byte(` -export MINIO_ACCESS_KEY=minio -export MINIO_SECRET_KEY=minio123 -`) - sec := &corev1.Secret{ - Data: vals, - } - return sec, nil - }, - mockGetService: func(ctx context.Context, namespace, serviceName string, opts metav1.GetOptions) (*corev1.Service, error) { - serv := &corev1.Service{ - Spec: corev1.ServiceSpec{ - ClusterIP: "10.1.1.2", - }, - } - return serv, nil - }, - wantErr: false, - }, - { - name: "Access key not stored on secrets", - args: args{ - ctx: ctx, - client: kubernetesClient, - tenant: miniov2.Tenant{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "default", - Name: "tenant-1", - }, - }, - serviceURL: "http://service-1.default.svc.cluster.local:80", - }, - mockGetSecret: func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - vals := make(map[string][]byte) - vals["secretkey"] = []byte("secret") - sec := &corev1.Secret{ - Data: vals, - } - return sec, nil - }, - mockGetService: func(ctx context.Context, namespace, serviceName string, opts metav1.GetOptions) (*corev1.Service, error) { - serv := &corev1.Service{ - Spec: corev1.ServiceSpec{ - ClusterIP: "10.1.1.2", - }, - } - return serv, nil - }, - wantErr: true, - }, - { - name: "Secret key not stored on secrets", - args: args{ - ctx: ctx, - client: kubernetesClient, - tenant: miniov2.Tenant{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "default", - Name: "tenant-1", - }, - }, - serviceURL: "http://service-1.default.svc.cluster.local:80", - }, - mockGetSecret: func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - vals := make(map[string][]byte) - vals["accesskey"] = []byte("access") - sec := &corev1.Secret{ - Data: vals, - } - return sec, nil - }, - mockGetService: func(ctx context.Context, namespace, serviceName string, opts metav1.GetOptions) (*corev1.Service, error) { - serv := &corev1.Service{ - Spec: corev1.ServiceSpec{ - ClusterIP: "10.1.1.2", - }, - } - return serv, nil - }, - wantErr: true, - }, - { - name: "Handle error on getService", - args: args{ - ctx: ctx, - client: kubernetesClient, - tenant: miniov2.Tenant{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "default", - Name: "tenant-1", - }, - }, - serviceURL: "http://service-1.default.svc.cluster.local:80", - }, - mockGetSecret: func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - vals := make(map[string][]byte) - vals["accesskey"] = []byte("access") - vals["secretkey"] = []byte("secret") - sec := &corev1.Secret{ - Data: vals, - } - return sec, nil - }, - mockGetService: func(ctx context.Context, namespace, serviceName string, opts metav1.GetOptions) (*corev1.Service, error) { - return nil, errors.New("error") - }, - wantErr: true, - }, - { - name: "Handle error on getSecret", - args: args{ - ctx: ctx, - client: kubernetesClient, - tenant: miniov2.Tenant{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "default", - Name: "tenant-1", - }, - }, - serviceURL: "http://service-1.default.svc.cluster.local:80", - }, - mockGetSecret: func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - return nil, errors.New("error") - }, - mockGetService: func(ctx context.Context, namespace, serviceName string, opts metav1.GetOptions) (*corev1.Service, error) { - serv := &corev1.Service{ - Spec: corev1.ServiceSpec{ - ClusterIP: "10.1.1.2", - }, - } - return serv, nil - }, - wantErr: true, - }, - } - for _, tt := range tests { - k8sclientGetSecretMock = tt.mockGetSecret - k8sclientGetServiceMock = tt.mockGetService - t.Run(tt.name, func(t *testing.T) { - got, err := getTenantAdminClient(tt.args.ctx, tt.args.client, &tt.args.tenant, tt.args.serviceURL) - if err != nil { - if tt.wantErr { - return - } - t.Errorf("getTenantAdminClient() error = %v, wantErr %v", err, tt.wantErr) - } - if got == nil { - t.Errorf("getTenantAdminClient() expected type: *madmin.AdminClient, got: nil") - } - }) - } -} - -func Test_TenantInfo(t *testing.T) { - testTimeStamp := metav1.Now() - type args struct { - minioTenant *miniov2.Tenant - } - tests := []struct { - name string - args args - want *models.Tenant - }{ - { - name: "Get tenant Info", - args: args{ - minioTenant: &miniov2.Tenant{ - ObjectMeta: metav1.ObjectMeta{ - CreationTimestamp: testTimeStamp, - Name: "tenant1", - Namespace: "minio-ns", - }, - Spec: miniov2.TenantSpec{ - Pools: []miniov2.Pool{ - { - Name: "pool1", - Servers: int32(2), - VolumesPerServer: 4, - VolumeClaimTemplate: &corev1.PersistentVolumeClaim{ - Spec: corev1.PersistentVolumeClaimSpec{ - Resources: corev1.VolumeResourceRequirements{ - Requests: map[corev1.ResourceName]resource.Quantity{ - corev1.ResourceStorage: resource.MustParse("1Mi"), - }, - }, - StorageClassName: swag.String("standard"), - }, - }, - RuntimeClassName: swag.String(""), - }, - }, - - Image: "minio/minio:RELEASE.2020-06-14T18-32-17Z", - }, - Status: miniov2.TenantStatus{ - CurrentState: "ready", - }, - }, - }, - want: &models.Tenant{ - CreationDate: testTimeStamp.Format(time.RFC3339), - Name: "tenant1", - TotalSize: int64(8388608), - CurrentState: "ready", - Pools: []*models.Pool{ - { - Name: "pool1", - SecurityContext: &models.SecurityContext{ - RunAsGroup: nil, - RunAsNonRoot: nil, - RunAsUser: nil, - }, - Servers: swag.Int64(int64(2)), - VolumesPerServer: swag.Int32(4), - VolumeConfiguration: &models.PoolVolumeConfiguration{ - StorageClassName: "standard", - Size: swag.Int64(1024 * 1024), - }, - }, - }, - Namespace: "minio-ns", - Image: "minio/minio:RELEASE.2020-06-14T18-32-17Z", - }, - }, - { - // If console image is set, it should be returned on tenant info - name: "Get tenant Info, Console image set", - args: args{ - minioTenant: &miniov2.Tenant{ - ObjectMeta: metav1.ObjectMeta{ - CreationTimestamp: testTimeStamp, - Name: "tenant1", - Namespace: "minio-ns", - Annotations: map[string]string{ - prometheusPath: "some/path", - prometheusScrape: "other/path", - }, - }, - Spec: miniov2.TenantSpec{ - Pools: []miniov2.Pool{}, - Image: "minio/minio:RELEASE.2020-06-14T18-32-17Z", - }, - Status: miniov2.TenantStatus{ - CurrentState: "ready", - }, - }, - }, - want: &models.Tenant{ - CreationDate: testTimeStamp.Format(time.RFC3339), - Name: "tenant1", - CurrentState: "ready", - Namespace: "minio-ns", - Image: "minio/minio:RELEASE.2020-06-14T18-32-17Z", - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got := getTenantInfo(tt.args.minioTenant) - if !reflect.DeepEqual(got, tt.want) { - ji, _ := json.Marshal(got) - vi, _ := json.Marshal(tt.want) - t.Errorf("got %s want %s", ji, vi) - } - }) - } -} - -func Test_deleteTenantAction(t *testing.T) { - opClient := opClientMock{} - type args struct { - ctx context.Context - operatorClient OperatorClientI - tenant *miniov2.Tenant - deletePvcs bool - objs []runtime.Object - mockTenantDelete func(ctx context.Context, namespace string, tenantName string, options metav1.DeleteOptions) error - } - tests := []struct { - name string - args args - wantErr bool - }{ - { - name: "Success", - args: args{ - ctx: context.Background(), - operatorClient: opClient, - tenant: &miniov2.Tenant{ - ObjectMeta: metav1.ObjectMeta{ - Name: "default", - Namespace: "minio-tenant", - }, - }, - deletePvcs: false, - mockTenantDelete: func(ctx context.Context, namespace string, tenantName string, options metav1.DeleteOptions) error { - return nil - }, - }, - wantErr: false, - }, - { - name: "Error", - args: args{ - ctx: context.Background(), - operatorClient: opClient, - tenant: &miniov2.Tenant{ - ObjectMeta: metav1.ObjectMeta{ - Name: "default", - Namespace: "minio-tenant", - }, - }, - deletePvcs: false, - mockTenantDelete: func(ctx context.Context, namespace string, tenantName string, options metav1.DeleteOptions) error { - return errors.New("something happened") - }, - }, - wantErr: true, - }, - { - // Delete only PVCs of the defined tenant on the specific namespace - name: "Delete PVCs on Tenant Deletion", - args: args{ - ctx: context.Background(), - operatorClient: opClient, - tenant: &miniov2.Tenant{ - ObjectMeta: metav1.ObjectMeta{ - Name: "tenant1", - Namespace: "minio-tenant", - }, - }, - deletePvcs: true, - objs: []runtime.Object{ - &corev1.PersistentVolumeClaim{ - ObjectMeta: metav1.ObjectMeta{ - Name: "PVC1", - Namespace: "minio-tenant", - Labels: map[string]string{ - miniov2.TenantLabel: "tenant1", - miniov2.PoolLabel: "pool-1", - }, - }, - }, - }, - mockTenantDelete: func(ctx context.Context, namespace string, tenantName string, options metav1.DeleteOptions) error { - return nil - }, - }, - wantErr: false, - }, - { - // Do not delete underlying pvcs - name: "Don't Delete PVCs on Tenant Deletion", - args: args{ - ctx: context.Background(), - operatorClient: opClient, - tenant: &miniov2.Tenant{ - ObjectMeta: metav1.ObjectMeta{ - Name: "tenant1", - Namespace: "minio-tenant", - }, - }, - deletePvcs: false, - objs: []runtime.Object{ - &corev1.PersistentVolumeClaim{ - ObjectMeta: metav1.ObjectMeta{ - Name: "PVC1", - Namespace: "minio-tenant", - Labels: map[string]string{ - miniov2.TenantLabel: "tenant1", - miniov2.PoolLabel: "pool-1", - }, - }, - }, - }, - mockTenantDelete: func(ctx context.Context, namespace string, tenantName string, options metav1.DeleteOptions) error { - return nil - }, - }, - wantErr: false, - }, - { - // If error is different than NotFound, PVC deletion should not continue - name: "Don't delete pvcs if error Deleting Tenant, return", - args: args{ - ctx: context.Background(), - operatorClient: opClient, - tenant: &miniov2.Tenant{ - ObjectMeta: metav1.ObjectMeta{ - Name: "tenant1", - Namespace: "minio-tenant", - }, - }, - deletePvcs: true, - objs: []runtime.Object{ - &corev1.PersistentVolumeClaim{ - ObjectMeta: metav1.ObjectMeta{ - Name: "PVC1", - Namespace: "minio-tenant", - Labels: map[string]string{ - miniov2.TenantLabel: "tenant1", - miniov2.PoolLabel: "pool-1", - }, - }, - }, - }, - mockTenantDelete: func(ctx context.Context, namespace string, tenantName string, options metav1.DeleteOptions) error { - return errors.New("error returned") - }, - }, - wantErr: true, - }, - { - // If error is NotFound while trying to Delete Tenant, PVC deletion should continue - name: "Delete pvcs if tenant not found", - args: args{ - ctx: context.Background(), - operatorClient: opClient, - tenant: &miniov2.Tenant{ - ObjectMeta: metav1.ObjectMeta{ - Name: "tenant1", - Namespace: "minio-tenant", - }, - }, - deletePvcs: true, - objs: []runtime.Object{ - &corev1.PersistentVolumeClaim{ - ObjectMeta: metav1.ObjectMeta{ - Name: "PVC1", - Namespace: "minio-tenant", - Labels: map[string]string{ - miniov2.TenantLabel: "tenant1", - miniov2.PoolLabel: "pool-1", - }, - }, - }, - }, - mockTenantDelete: func(ctx context.Context, namespace string, tenantName string, options metav1.DeleteOptions) error { - return k8sErrors.NewNotFound(schema.GroupResource{}, "tenant1") - }, - }, - wantErr: false, - }, - { - // If error is NotFound while trying to Delete Tenant and pvcdeletion=false, - // error should be returned - name: "Don't delete pvcs and return error if tenant not found", - args: args{ - ctx: context.Background(), - operatorClient: opClient, - tenant: &miniov2.Tenant{ - ObjectMeta: metav1.ObjectMeta{ - Name: "tenant1", - Namespace: "minio-tenant", - }, - }, - deletePvcs: false, - objs: []runtime.Object{ - &corev1.PersistentVolumeClaim{ - ObjectMeta: metav1.ObjectMeta{ - Name: "PVC1", - Namespace: "minio-tenant", - Labels: map[string]string{ - miniov2.TenantLabel: "tenant1", - miniov2.PoolLabel: "pool-1", - }, - }, - }, - }, - mockTenantDelete: func(ctx context.Context, namespace string, tenantName string, options metav1.DeleteOptions) error { - return k8sErrors.NewNotFound(schema.GroupResource{}, "tenant1") - }, - }, - wantErr: true, - }, - } - for _, tt := range tests { - opClientTenantDeleteMock = tt.args.mockTenantDelete - kubeClient := fake.NewSimpleClientset(tt.args.objs...) - t.Run(tt.name, func(t *testing.T) { - if err := deleteTenantAction(tt.args.ctx, tt.args.operatorClient, kubeClient.CoreV1(), tt.args.tenant, tt.args.deletePvcs); (err != nil) != tt.wantErr { - t.Errorf("deleteTenantAction() error = %v, wantErr %v", err, tt.wantErr) - } - }) - } -} - -func Test_TenantAddPool(t *testing.T) { - opClient := opClientMock{} - - type args struct { - ctx context.Context - operatorClient OperatorClientI - nameSpace string - mockTenantPatch func(ctx context.Context, namespace string, tenantName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*miniov2.Tenant, error) - mockTenantGet func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) - params operator_api.TenantAddPoolParams - } - tests := []struct { - name string - args args - wantErr bool - }{ - { - name: "Add pool, no errors", - args: args{ - ctx: context.Background(), - operatorClient: opClient, - nameSpace: "default", - mockTenantPatch: func(ctx context.Context, namespace string, tenantName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{}, nil - }, - mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{}, nil - }, - params: operator_api.TenantAddPoolParams{ - Body: &models.Pool{ - Name: "pool-1", - Servers: swag.Int64(int64(4)), - VolumeConfiguration: &models.PoolVolumeConfiguration{ - Size: swag.Int64(2147483648), - StorageClassName: "standard", - }, - VolumesPerServer: swag.Int32(4), - }, - }, - }, - wantErr: false, - }, - { - name: "Add pool, error size", - args: args{ - ctx: context.Background(), - operatorClient: opClient, - nameSpace: "default", - mockTenantPatch: func(ctx context.Context, namespace string, tenantName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{}, nil - }, - mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{}, nil - }, - params: operator_api.TenantAddPoolParams{ - Body: &models.Pool{ - Name: "pool-1", - Servers: swag.Int64(int64(4)), - VolumeConfiguration: &models.PoolVolumeConfiguration{ - Size: swag.Int64(0), - StorageClassName: "standard", - }, - VolumesPerServer: swag.Int32(4), - }, - }, - }, - wantErr: true, - }, - { - name: "Add pool, error servers negative", - args: args{ - ctx: context.Background(), - operatorClient: opClient, - nameSpace: "default", - mockTenantPatch: func(ctx context.Context, namespace string, tenantName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{}, nil - }, - mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{}, nil - }, - params: operator_api.TenantAddPoolParams{ - Body: &models.Pool{ - Name: "pool-1", - Servers: swag.Int64(int64(-1)), - VolumeConfiguration: &models.PoolVolumeConfiguration{ - Size: swag.Int64(2147483648), - StorageClassName: "standard", - }, - VolumesPerServer: swag.Int32(4), - }, - }, - }, - wantErr: true, - }, - { - name: "Add pool, error volumes per server negative", - args: args{ - ctx: context.Background(), - operatorClient: opClient, - nameSpace: "default", - mockTenantPatch: func(ctx context.Context, namespace string, tenantName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{}, nil - }, - mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{}, nil - }, - params: operator_api.TenantAddPoolParams{ - Body: &models.Pool{ - Name: "pool-1", - Servers: swag.Int64(int64(4)), - VolumeConfiguration: &models.PoolVolumeConfiguration{ - Size: swag.Int64(2147483648), - StorageClassName: "standard", - }, - VolumesPerServer: swag.Int32(-1), - }, - }, - }, - wantErr: true, - }, - { - name: "Error on patch, handle error", - args: args{ - ctx: context.Background(), - operatorClient: opClient, - nameSpace: "default", - mockTenantPatch: func(ctx context.Context, namespace string, tenantName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*miniov2.Tenant, error) { - return nil, errors.New("errors") - }, - mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{}, nil - }, - params: operator_api.TenantAddPoolParams{ - Body: &models.Pool{ - Name: "pool-1", - Servers: swag.Int64(int64(4)), - }, - }, - }, - wantErr: true, - }, - { - name: "Error on get, handle error", - args: args{ - ctx: context.Background(), - operatorClient: opClient, - nameSpace: "default", - mockTenantPatch: func(ctx context.Context, namespace string, tenantName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*miniov2.Tenant, error) { - return nil, errors.New("errors") - }, - mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return nil, errors.New("errors") - }, - params: operator_api.TenantAddPoolParams{ - Body: &models.Pool{ - Name: "pool-1", - Servers: swag.Int64(int64(4)), - }, - }, - }, - wantErr: true, - }, - } - for _, tt := range tests { - opClientTenantGetMock = tt.args.mockTenantGet - opClientTenantPatchMock = tt.args.mockTenantPatch - t.Run(tt.name, func(t *testing.T) { - if err := addTenantPool(tt.args.ctx, tt.args.operatorClient, tt.args.params); (err != nil) != tt.wantErr { - t.Errorf("addTenantPool() error = %v, wantErr %v", err, tt.wantErr) - } - }) - } -} - -func Test_UpdateTenantAction(t *testing.T) { - opClient := opClientMock{} - httpClientM := httpClientMock{} - - type args struct { - ctx context.Context - operatorClient OperatorClientI - httpCl xhttp.ClientI - nameSpace string - tenantName string - mockTenantPatch func(ctx context.Context, namespace string, tenantName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*miniov2.Tenant, error) - mockTenantGet func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) - mockHTTPClientGet func(url string) (resp *http.Response, err error) - params operator_api.UpdateTenantParams - } - tests := []struct { - name string - args args - objs []runtime.Object - wantErr bool - }{ - { - name: "Update minio version no errors", - args: args{ - ctx: context.Background(), - operatorClient: opClient, - httpCl: httpClientM, - nameSpace: "default", - tenantName: "myminio", - mockTenantPatch: func(ctx context.Context, namespace string, tenantName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{}, nil - }, - mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{}, nil - }, - mockHTTPClientGet: func(url string) (resp *http.Response, err error) { - return &http.Response{}, nil - }, - params: operator_api.UpdateTenantParams{ - Body: &models.UpdateTenantRequest{ - Image: "minio/minio:RELEASE.2023-01-06T18-11-18Z", - }, - }, - }, - wantErr: false, - }, - { - name: "Error occurs getting minioTenant", - args: args{ - ctx: context.Background(), - operatorClient: opClient, - httpCl: httpClientM, - nameSpace: "default", - tenantName: "myminio", - mockTenantPatch: func(ctx context.Context, namespace string, tenantName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{}, nil - }, - mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return nil, errors.New("error-get") - }, - mockHTTPClientGet: func(url string) (resp *http.Response, err error) { - return &http.Response{}, nil - }, - params: operator_api.UpdateTenantParams{ - Body: &models.UpdateTenantRequest{ - Image: "minio/minio:RELEASE.2023-01-06T18-11-18Z", - }, - }, - }, - wantErr: true, - }, - { - name: "Error occurs patching minioTenant", - args: args{ - ctx: context.Background(), - operatorClient: opClient, - httpCl: httpClientM, - nameSpace: "default", - tenantName: "myminio", - mockTenantPatch: func(ctx context.Context, namespace string, tenantName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*miniov2.Tenant, error) { - return nil, errors.New("error-get") - }, - mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{}, nil - }, - mockHTTPClientGet: func(url string) (resp *http.Response, err error) { - return &http.Response{}, nil - }, - params: operator_api.UpdateTenantParams{ - Tenant: "myminio", - Body: &models.UpdateTenantRequest{ - Image: "minio/minio:RELEASE.2023-01-06T18-11-18Z", - }, - }, - }, - wantErr: true, - }, - { - name: "Empty image should patch correctly with latest image", - args: args{ - ctx: context.Background(), - operatorClient: opClient, - httpCl: httpClientM, - nameSpace: "default", - tenantName: "myminio", - mockTenantPatch: func(ctx context.Context, namespace string, tenantName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{}, nil - }, - mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{}, nil - }, - mockHTTPClientGet: func(url string) (resp *http.Response, err error) { - r := ioutil.NopCloser(bytes.NewReader([]byte(`./minio.RELEASE.2020-06-18T02-23-35Z"`))) - return &http.Response{ - Body: r, - }, nil - }, - params: operator_api.UpdateTenantParams{ - Tenant: "myminio", - Body: &models.UpdateTenantRequest{ - Image: "", - }, - }, - }, - wantErr: false, - }, - { - name: "Empty image input Error retrieving latest image, nothing happens", - args: args{ - ctx: context.Background(), - operatorClient: opClient, - httpCl: httpClientM, - nameSpace: "default", - tenantName: "myminio", - mockTenantPatch: func(ctx context.Context, namespace string, tenantName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{}, nil - }, - mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{}, nil - }, - mockHTTPClientGet: func(url string) (resp *http.Response, err error) { - return nil, errors.New("error") - }, - params: operator_api.UpdateTenantParams{ - Tenant: "myminio", - Body: &models.UpdateTenantRequest{ - Image: "", - }, - }, - }, - wantErr: false, - }, - { - name: "Update minio image pull secrets no errors", - args: args{ - ctx: context.Background(), - operatorClient: opClient, - httpCl: httpClientM, - nameSpace: "default", - tenantName: "myminio", - mockTenantPatch: func(ctx context.Context, namespace string, tenantName string, pt types.PatchType, data []byte, options metav1.PatchOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{}, nil - }, - mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{}, nil - }, - mockHTTPClientGet: func(url string) (resp *http.Response, err error) { - return nil, errors.New("use default minio") - }, - params: operator_api.UpdateTenantParams{ - Body: &models.UpdateTenantRequest{ - ImagePullSecret: "minio-regcred", - }, - }, - }, - wantErr: false, - }, - } - for _, tt := range tests { - opClientTenantGetMock = tt.args.mockTenantGet - opClientTenantPatchMock = tt.args.mockTenantPatch - httpClientGetMock = tt.args.mockHTTPClientGet - cnsClient := k8sClientMock{} - t.Run(tt.name, func(t *testing.T) { - if err := updateTenantAction(tt.args.ctx, tt.args.operatorClient, cnsClient, tt.args.httpCl, tt.args.nameSpace, tt.args.params); (err != nil) != tt.wantErr { - t.Errorf("updateTenantAction() error = %v, wantErr %v", err, tt.wantErr) - } - }) - } -} - -func Test_UpdateDomainsResponse(t *testing.T) { - opClient := opClientMock{} - - type args struct { - ctx context.Context - operatorClient OperatorClientI - nameSpace string - tenantName string - mockTenantUpdate func(ctx context.Context, tenant *miniov2.Tenant, options metav1.UpdateOptions) (*miniov2.Tenant, error) - mockTenantGet func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) - domains *models.DomainsConfiguration - } - tests := []struct { - name string - args args - objs []runtime.Object - wantErr bool - }{ - { - name: "Update console & minio domains OK", - args: args{ - ctx: context.Background(), - operatorClient: opClient, - nameSpace: "default", - tenantName: "myminio", - mockTenantUpdate: func(ctx context.Context, tenant *miniov2.Tenant, options metav1.UpdateOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{}, nil - }, - mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{}, nil - }, - domains: &models.DomainsConfiguration{ - Console: "http://console.min.io", - Minio: []string{"http://domain1.min.io", "http://domain2.min.io", "http://domain3.min.io"}, - }, - }, - wantErr: false, - }, - { - name: "Error occurs getting minioTenant", - args: args{ - ctx: context.Background(), - operatorClient: opClient, - nameSpace: "default", - tenantName: "myminio", - mockTenantUpdate: func(ctx context.Context, tenant *miniov2.Tenant, options metav1.UpdateOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{}, nil - }, - mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return nil, errors.New("error-getting-tenant-info") - }, - domains: &models.DomainsConfiguration{ - Console: "http://console.min.io", - Minio: []string{"http://domain1.min.io", "http://domain2.min.io", "http://domain3.min.io"}, - }, - }, - wantErr: true, - }, - { - name: "Tenant already has domains", - args: args{ - ctx: context.Background(), - operatorClient: opClient, - nameSpace: "default", - tenantName: "myminio", - mockTenantUpdate: func(ctx context.Context, tenant *miniov2.Tenant, options metav1.UpdateOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{}, nil - }, - mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - domains := miniov2.TenantDomains{ - Console: "http://onerandomdomain.min.io", - Minio: []string{ - "http://oneDomain.min.io", - "http://twoDomains.min.io", - }, - } - - features := miniov2.Features{ - Domains: &domains, - } - - return &miniov2.Tenant{ - Spec: miniov2.TenantSpec{Features: &features}, - }, nil - }, - domains: &models.DomainsConfiguration{ - Console: "http://console.min.io", - Minio: []string{"http://domain1.min.io", "http://domain2.min.io", "http://domain3.min.io"}, - }, - }, - wantErr: false, - }, - { - name: "Tenant features only have BucketDNS", - args: args{ - ctx: context.Background(), - operatorClient: opClient, - nameSpace: "default", - tenantName: "myminio", - mockTenantUpdate: func(ctx context.Context, tenant *miniov2.Tenant, options metav1.UpdateOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{}, nil - }, - mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - features := miniov2.Features{ - BucketDNS: true, - } - - return &miniov2.Tenant{ - Spec: miniov2.TenantSpec{Features: &features}, - }, nil - }, - domains: &models.DomainsConfiguration{ - Console: "http://console.min.io", - Minio: []string{"http://domain1.min.io", "http://domain2.min.io", "http://domain3.min.io"}, - }, - }, - wantErr: false, - }, - } - for _, tt := range tests { - opClientTenantGetMock = tt.args.mockTenantGet - opClientTenantUpdateMock = tt.args.mockTenantUpdate - t.Run(tt.name, func(t *testing.T) { - if err := updateTenantDomains(tt.args.ctx, tt.args.operatorClient, tt.args.nameSpace, tt.args.tenantName, tt.args.domains); (err != nil) != tt.wantErr { - t.Errorf("updateTenantDomains() error = %v, wantErr %v", err, tt.wantErr) - } - }) - } -} - -func Test_parseTenantCertificates(t *testing.T) { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - kubernetesClient := k8sClientMock{} - type args struct { - ctx context.Context - clientSet K8sClientI - namespace string - secrets []*miniov2.LocalCertificateReference - } - tests := []struct { - name string - args args - want []*models.CertificateInfo - mockGetSecret func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) - wantErr bool - }{ - { - name: "empty secrets list", - args: args{ - ctx: ctx, - clientSet: kubernetesClient, - secrets: nil, - }, - mockGetSecret: func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - return nil, nil - }, - want: nil, - wantErr: false, - }, - { - name: "error getting secret", - args: args{ - ctx: ctx, - clientSet: kubernetesClient, - secrets: []*miniov2.LocalCertificateReference{ - { - Name: "certificate-1", - }, - }, - }, - mockGetSecret: func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - return nil, errors.New("error getting secret") - }, - want: nil, - wantErr: true, - }, - { - name: "error getting certificate because of missing public key", - args: args{ - ctx: ctx, - clientSet: kubernetesClient, - secrets: []*miniov2.LocalCertificateReference{ - { - Name: "certificate-1", - Type: "Opaque", - }, - }, - }, - mockGetSecret: func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - certificateSecret := &corev1.Secret{ - Data: map[string][]byte{ - "eaeaeae": []byte(` ------BEGIN CERTIFICATE----- -MIIBUDCCAQKgAwIBAgIRALdFZh8hLU348ho9wYzlZbAwBQYDK2VwMBIxEDAOBgNV -BAoTB0FjbWUgQ28wHhcNMjIwODE4MjAxMzUzWhcNMjMwODE4MjAxMzUzWjASMRAw -DgYDVQQKEwdBY21lIENvMCowBQYDK2VwAyEAct5c3dzzbNOTi+C62w7QHoSivEWD -MYAheDXZWHC55tGjbTBrMA4GA1UdDwEB/wQEAwIChDATBgNVHSUEDDAKBggrBgEF -BQcDATAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTs0At8sTSLCjiM24AZhxFY -a2CswjAUBgNVHREEDTALgglsb2NhbGhvc3QwBQYDK2VwA0EABan+d16CeN8UD+QF -a8HBhPAiOpaZeEF6+EqTlq9VfL3eSVd7CLRI+/KtY7ptwomuTeYzuV73adKdE9N2 -ZrJuAw== ------END CERTIFICATE----- - `), - }, - Type: "Opaque", - } - return certificateSecret, nil - }, - want: nil, - wantErr: true, - }, - { - name: "return certificate from existing secret", - args: args{ - ctx: ctx, - clientSet: kubernetesClient, - secrets: []*miniov2.LocalCertificateReference{ - { - Name: "certificate-1", - Type: "Opaque", - }, - }, - }, - mockGetSecret: func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - certificateSecret := &corev1.Secret{ - Data: map[string][]byte{ - "public.crt": []byte(` ------BEGIN CERTIFICATE----- -MIIBUDCCAQKgAwIBAgIRALdFZh8hLU348ho9wYzlZbAwBQYDK2VwMBIxEDAOBgNV -BAoTB0FjbWUgQ28wHhcNMjIwODE4MjAxMzUzWhcNMjMwODE4MjAxMzUzWjASMRAw -DgYDVQQKEwdBY21lIENvMCowBQYDK2VwAyEAct5c3dzzbNOTi+C62w7QHoSivEWD -MYAheDXZWHC55tGjbTBrMA4GA1UdDwEB/wQEAwIChDATBgNVHSUEDDAKBggrBgEF -BQcDATAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTs0At8sTSLCjiM24AZhxFY -a2CswjAUBgNVHREEDTALgglsb2NhbGhvc3QwBQYDK2VwA0EABan+d16CeN8UD+QF -a8HBhPAiOpaZeEF6+EqTlq9VfL3eSVd7CLRI+/KtY7ptwomuTeYzuV73adKdE9N2 -ZrJuAw== ------END CERTIFICATE----- - `), - }, - Type: "Opaque", - } - return certificateSecret, nil - }, - want: []*models.CertificateInfo{ - { - SerialNumber: "243609062983998893460787085129017550256", - Name: "certificate-1", - Expiry: "2023-08-18T20:13:53Z", - Domains: []string{"localhost"}, - }, - }, - wantErr: false, - }, - } - for _, tt := range tests { - k8sclientGetSecretMock = tt.mockGetSecret - t.Run(tt.name, func(t *testing.T) { - got, err := parseTenantCertificates(tt.args.ctx, tt.args.clientSet, tt.args.namespace, tt.args.secrets) - if (err != nil) != tt.wantErr { - t.Errorf("parseTenantCertificates(%v, %v, %v, %v)error = %v, wantErr %v", tt.args.ctx, tt.args.clientSet, tt.args.namespace, tt.args.secrets, err, tt.wantErr) - } - assert.Equalf(t, tt.want, got, "parseTenantCertificates(%v, %v, %v, %v)", tt.args.ctx, tt.args.clientSet, tt.args.namespace, tt.args.secrets) - }) - } -} - -func Test_getTenant(t *testing.T) { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - opClient := opClientMock{} - type args struct { - ctx context.Context - operatorClient OperatorClientI - namespace string - tenantName string - mockTenantGet func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) - } - tests := []struct { - name string - args args - want *miniov2.Tenant - wantErr bool - }{ - { - name: "error getting tenant information", - args: args{ - ctx: ctx, - operatorClient: opClient, - namespace: "default", - tenantName: "test", - mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return nil, errors.New("error getting tenant information") - }, - }, - want: nil, - wantErr: true, - }, - { - name: "success getting tenant information", - args: args{ - ctx: ctx, - operatorClient: opClient, - namespace: "default", - tenantName: "test", - mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{ - ObjectMeta: metav1.ObjectMeta{ - Name: "test", - Namespace: "default", - }, - }, nil - }, - }, - want: &miniov2.Tenant{ - ObjectMeta: metav1.ObjectMeta{ - Name: "test", - Namespace: "default", - }, - }, - wantErr: false, - }, - } - for _, tt := range tests { - opClientTenantGetMock = tt.args.mockTenantGet - t.Run(tt.name, func(t *testing.T) { - got, err := getTenant(tt.args.ctx, tt.args.operatorClient, tt.args.namespace, tt.args.tenantName) - if (err != nil) != tt.wantErr { - t.Errorf("getTenant(%v, %v, %v, %v)", tt.args.ctx, tt.args.operatorClient, tt.args.namespace, tt.args.tenantName) - } - assert.Equalf(t, tt.want, got, "getTenant(%v, %v, %v, %v)", tt.args.ctx, tt.args.operatorClient, tt.args.namespace, tt.args.tenantName) - }) - } -} - -func Test_updateTenantConfigurationFile(t *testing.T) { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - opClient := opClientMock{} - kubernetesClient := k8sClientMock{} - type args struct { - ctx context.Context - operatorClient OperatorClientI - client K8sClientI - namespace string - params operator_api.UpdateTenantConfigurationParams - mockTenantGet func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) - mockGetSecret func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) - mockUpdateSecret func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.UpdateOptions) (*corev1.Secret, error) - mockDeletePodCollection func(ctx context.Context, namespace string, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error - } - tests := []struct { - name string - args args - wantErr bool - }{ - { - name: "error getting tenant information", - wantErr: true, - args: args{ - ctx: ctx, - operatorClient: opClient, - client: kubernetesClient, - namespace: "default", - params: operator_api.UpdateTenantConfigurationParams{ - Namespace: "default", - Tenant: "test", - }, - mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return nil, errors.New("error getting tenant") - }, - mockGetSecret: func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - return nil, nil - }, - mockUpdateSecret: func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.UpdateOptions) (*corev1.Secret, error) { - return nil, nil - }, - mockDeletePodCollection: func(ctx context.Context, namespace string, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { - return nil - }, - }, - }, - { - name: "error during getting tenant configuration", - wantErr: true, - args: args{ - ctx: ctx, - operatorClient: opClient, - client: kubernetesClient, - namespace: "default", - params: operator_api.UpdateTenantConfigurationParams{ - Namespace: "default", - Tenant: "test", - }, - mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "default", - Name: "test", - }, - Spec: miniov2.TenantSpec{ - Configuration: &corev1.LocalObjectReference{ - Name: "tenant-configuration-secret", - }, - }, - }, nil - }, - mockGetSecret: func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - return nil, errors.New("error getting tenant configuration") - }, - mockUpdateSecret: func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.UpdateOptions) (*corev1.Secret, error) { - return nil, nil - }, - mockDeletePodCollection: func(ctx context.Context, namespace string, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { - return nil - }, - }, - }, - { - name: "error updating tenant configuration because of missing configuration secret", - wantErr: true, - args: args{ - ctx: ctx, - operatorClient: opClient, - client: kubernetesClient, - namespace: "default", - params: operator_api.UpdateTenantConfigurationParams{ - Namespace: "default", - Tenant: "test", - Body: &models.UpdateTenantConfigurationRequest{}, - }, - mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "default", - Name: "test", - }, - }, nil - }, - mockGetSecret: func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - return &corev1.Secret{Data: map[string][]byte{ - "config.env": []byte(` - export MINIO_ROOT_USER=minio - export MINIO_ROOT_PASSWORD=minio123 - export MINIO_CONSOLE_ADDRESS=:8080 - export MINIO_IDENTITY_LDAP_SERVER_ADDR=localhost:389 - export MINIO_IDENTITY_LDAP_LOOKUP_BIND_DN="cn=admin,dc=min,dc=io" - export MINIO_IDENTITY_LDAP_LOOKUP_BIND_PASSWORD="admin" - export MINIO_IDENTITY_LDAP_USER_DN_SEARCH_BASE_DN="dc=min,dc=io" - export MINIO_IDENTITY_LDAP_USER_DN_SEARCH_FILTER="(uid=%s)" - export MINIO_IDENTITY_LDAP_GROUP_SEARCH_BASE_DN="ou=swengg,dc=min,dc=io" - export MINIO_IDENTITY_LDAP_GROUP_SEARCH_FILTER="(&(objectclass=groupOfNames)(member=%d))" - export MINIO_IDENTITY_LDAP_SERVER_INSECURE="on" - `), - }}, nil - }, - mockUpdateSecret: func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.UpdateOptions) (*corev1.Secret, error) { - return nil, nil - }, - mockDeletePodCollection: func(ctx context.Context, namespace string, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { - return nil - }, - }, - }, - { - name: "error because tenant configuration secret is nil", - wantErr: true, - args: args{ - ctx: ctx, - operatorClient: opClient, - client: kubernetesClient, - namespace: "default", - params: operator_api.UpdateTenantConfigurationParams{ - Namespace: "default", - Tenant: "test", - Body: &models.UpdateTenantConfigurationRequest{}, - }, - mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "default", - Name: "test", - }, - Spec: miniov2.TenantSpec{ - Configuration: &corev1.LocalObjectReference{ - Name: "tenant-configuration-secret", - }, - }, - }, nil - }, - mockGetSecret: func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - return nil, nil - }, - mockUpdateSecret: func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.UpdateOptions) (*corev1.Secret, error) { - return nil, nil - }, - mockDeletePodCollection: func(ctx context.Context, namespace string, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { - return nil - }, - }, - }, - { - name: "error updating tenant configuration because of k8s issue", - wantErr: true, - args: args{ - ctx: ctx, - operatorClient: opClient, - client: kubernetesClient, - namespace: "default", - params: operator_api.UpdateTenantConfigurationParams{ - Namespace: "default", - Tenant: "test", - Body: &models.UpdateTenantConfigurationRequest{}, - }, - mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "default", - Name: "test", - }, - Spec: miniov2.TenantSpec{ - Configuration: &corev1.LocalObjectReference{ - Name: "tenant-configuration-secret", - }, - }, - }, nil - }, - mockGetSecret: func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - return &corev1.Secret{Data: map[string][]byte{ - "config.env": []byte(` - export MINIO_ROOT_USER=minio - export MINIO_ROOT_PASSWORD=minio123 - export MINIO_CONSOLE_ADDRESS=:8080 - export MINIO_IDENTITY_LDAP_SERVER_ADDR=localhost:389 - export MINIO_IDENTITY_LDAP_LOOKUP_BIND_DN="cn=admin,dc=min,dc=io" - export MINIO_IDENTITY_LDAP_LOOKUP_BIND_PASSWORD="admin" - export MINIO_IDENTITY_LDAP_USER_DN_SEARCH_BASE_DN="dc=min,dc=io" - export MINIO_IDENTITY_LDAP_USER_DN_SEARCH_FILTER="(uid=%s)" - export MINIO_IDENTITY_LDAP_GROUP_SEARCH_BASE_DN="ou=swengg,dc=min,dc=io" - export MINIO_IDENTITY_LDAP_GROUP_SEARCH_FILTER="(&(objectclass=groupOfNames)(member=%d))" - export MINIO_IDENTITY_LDAP_SERVER_INSECURE="on" - `), - }}, nil - }, - mockUpdateSecret: func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.UpdateOptions) (*corev1.Secret, error) { - return nil, errors.New("error updating configuration secret") - }, - mockDeletePodCollection: func(ctx context.Context, namespace string, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { - return nil - }, - }, - }, - { - name: "error during deleting pod collection", - wantErr: true, - args: args{ - ctx: ctx, - operatorClient: opClient, - client: kubernetesClient, - namespace: "default", - params: operator_api.UpdateTenantConfigurationParams{ - Namespace: "default", - Tenant: "test", - Body: &models.UpdateTenantConfigurationRequest{}, - }, - mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "default", - Name: "test", - }, - Spec: miniov2.TenantSpec{ - Configuration: &corev1.LocalObjectReference{ - Name: "tenant-configuration-secret", - }, - }, - }, nil - }, - mockGetSecret: func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - return &corev1.Secret{Data: map[string][]byte{ - "config.env": []byte(` - export MINIO_ROOT_USER=minio - export MINIO_ROOT_PASSWORD=minio123 - export MINIO_CONSOLE_ADDRESS=:8080 - export MINIO_IDENTITY_LDAP_SERVER_ADDR=localhost:389 - export MINIO_IDENTITY_LDAP_LOOKUP_BIND_DN="cn=admin,dc=min,dc=io" - export MINIO_IDENTITY_LDAP_LOOKUP_BIND_PASSWORD="admin" - export MINIO_IDENTITY_LDAP_USER_DN_SEARCH_BASE_DN="dc=min,dc=io" - export MINIO_IDENTITY_LDAP_USER_DN_SEARCH_FILTER="(uid=%s)" - export MINIO_IDENTITY_LDAP_GROUP_SEARCH_BASE_DN="ou=swengg,dc=min,dc=io" - export MINIO_IDENTITY_LDAP_GROUP_SEARCH_FILTER="(&(objectclass=groupOfNames)(member=%d))" - export MINIO_IDENTITY_LDAP_SERVER_INSECURE="on" - `), - }}, nil - }, - mockUpdateSecret: func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.UpdateOptions) (*corev1.Secret, error) { - return nil, nil - }, - mockDeletePodCollection: func(ctx context.Context, namespace string, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { - return errors.New("error deleting minio pods") - }, - }, - }, - { - name: "success updating tenant configuration secret", - wantErr: false, - args: args{ - ctx: ctx, - operatorClient: opClient, - client: kubernetesClient, - namespace: "default", - params: operator_api.UpdateTenantConfigurationParams{ - Namespace: "default", - Tenant: "test", - Body: &models.UpdateTenantConfigurationRequest{}, - }, - mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "default", - Name: "test", - }, - Spec: miniov2.TenantSpec{ - Configuration: &corev1.LocalObjectReference{ - Name: "tenant-configuration-secret", - }, - }, - }, nil - }, - mockGetSecret: func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - return &corev1.Secret{Data: map[string][]byte{ - "config.env": []byte(` - export MINIO_ROOT_USER=minio - export MINIO_ROOT_PASSWORD=minio123 - export MINIO_CONSOLE_ADDRESS=:8080 - export MINIO_IDENTITY_LDAP_SERVER_ADDR=localhost:389 - export MINIO_IDENTITY_LDAP_LOOKUP_BIND_DN="cn=admin,dc=min,dc=io" - export MINIO_IDENTITY_LDAP_LOOKUP_BIND_PASSWORD="admin" - export MINIO_IDENTITY_LDAP_USER_DN_SEARCH_BASE_DN="dc=min,dc=io" - export MINIO_IDENTITY_LDAP_USER_DN_SEARCH_FILTER="(uid=%s)" - export MINIO_IDENTITY_LDAP_GROUP_SEARCH_BASE_DN="ou=swengg,dc=min,dc=io" - export MINIO_IDENTITY_LDAP_GROUP_SEARCH_FILTER="(&(objectclass=groupOfNames)(member=%d))" - export MINIO_IDENTITY_LDAP_SERVER_INSECURE="on" - `), - }}, nil - }, - mockUpdateSecret: func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.UpdateOptions) (*corev1.Secret, error) { - return nil, nil - }, - mockDeletePodCollection: func(ctx context.Context, namespace string, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { - return nil - }, - }, - }, - } - for _, tt := range tests { - k8sclientGetSecretMock = tt.args.mockGetSecret - opClientTenantGetMock = tt.args.mockTenantGet - k8sClientUpdateSecretMock = tt.args.mockUpdateSecret - k8sClientDeletePodCollectionMock = tt.args.mockDeletePodCollection - t.Run(tt.name, func(t *testing.T) { - err := updateTenantConfigurationFile(tt.args.ctx, tt.args.operatorClient, tt.args.client, tt.args.namespace, tt.args.params) - if (err != nil) != tt.wantErr { - t.Errorf("updateTenantConfigurationFile(%v, %v, %v, %v, %v)", tt.args.ctx, tt.args.operatorClient, tt.args.client, tt.args.namespace, tt.args.params) - } - }) - } -} diff --git a/api/tenant_update.go b/api/tenant_update.go deleted file mode 100644 index 7d63a60e879..00000000000 --- a/api/tenant_update.go +++ /dev/null @@ -1,75 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2022 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "encoding/json" - "strings" - - "github.com/minio/operator/pkg/http" - - "github.com/minio/operator/api/operations/operator_api" - utils2 "github.com/minio/operator/pkg/utils" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/types" -) - -// updateTenantAction does an update on the minioTenant by patching the desired changes -func updateTenantAction(ctx context.Context, operatorClient OperatorClientI, clientset K8sClientI, httpCl http.ClientI, namespace string, params operator_api.UpdateTenantParams) error { - imageToUpdate := params.Body.Image - imageRegistryReq := params.Body.ImageRegistry - - minInst, err := operatorClient.TenantGet(ctx, namespace, params.Tenant, metav1.GetOptions{}) - if err != nil { - return err - } - // we can take either the `image_pull_secret` of the `image_registry` but not both - if params.Body.ImagePullSecret != "" { - minInst.Spec.ImagePullSecret.Name = params.Body.ImagePullSecret - } else { - // update the image pull secret content - if _, err := setImageRegistry(ctx, imageRegistryReq, clientset, namespace, params.Tenant); err != nil { - LogError("error setting image registry secret: %v", err) - return err - } - } - - // if image to update is empty we'll use the latest image by default - if strings.TrimSpace(imageToUpdate) != "" { - minInst.Spec.Image = imageToUpdate - } else { - im, err := utils2.GetLatestMinIOImage(httpCl) - // if we can't get the MinIO image, we won't auto-update it unless it's explicit by name - if err == nil { - minInst.Spec.Image = *im - } - } - - if minInst.Spec.Features != nil { - minInst.Spec.Features.EnableSFTP = ¶ms.Body.SftpExposed - } - payloadBytes, err := json.Marshal(minInst) - if err != nil { - return err - } - _, err = operatorClient.TenantPatch(ctx, namespace, minInst.Name, types.MergePatchType, payloadBytes, metav1.PatchOptions{}) - if err != nil { - return err - } - return nil -} diff --git a/api/tenants_2_test.go b/api/tenants_2_test.go deleted file mode 100644 index abc55f6c36e..00000000000 --- a/api/tenants_2_test.go +++ /dev/null @@ -1,1033 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "errors" - "fmt" - "net/http" - "strings" - "testing" - "time" - - "github.com/minio/madmin-go/v3" - "github.com/minio/operator/api/operations" - "github.com/minio/operator/api/operations/operator_api" - "github.com/minio/operator/models" - miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/suite" - corev1 "k8s.io/api/core/v1" - k8sErrors "k8s.io/apimachinery/pkg/api/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/client-go/kubernetes/fake" -) - -type TenantTestSuite struct { - suite.Suite - assert *assert.Assertions - opClient opClientMock - k8sclient k8sClientMock - adminClient AdminClientMock -} - -func (suite *TenantTestSuite) SetupSuite() { - suite.assert = assert.New(suite.T()) - suite.opClient = opClientMock{} - suite.k8sclient = k8sClientMock{} - suite.adminClient = AdminClientMock{} - k8sClientDeleteSecretsCollectionMock = func(ctx context.Context, namespace string, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { - return nil - } -} - -func (suite *TenantTestSuite) SetupTest() { -} - -func (suite *TenantTestSuite) TearDownSuite() { -} - -func (suite *TenantTestSuite) TearDownTest() { -} - -func (suite *TenantTestSuite) TestCreateTenantHandlerWithError() { - params, api := suite.initCreateTenantRequest() - response := api.OperatorAPICreateTenantHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.CreateTenantDefault) - suite.assert.True(ok) -} - -func (suite *TenantTestSuite) TestCreateTenantWithWrongECP() { - params, _ := suite.initCreateTenantRequest() - params.Body.ErasureCodingParity = 1 - k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.CreateOptions) (*corev1.Secret, error) { - return nil, nil - } - _, err := createTenant(context.Background(), params, suite.k8sclient, &models.Principal{}) - suite.assert.NotNil(err) -} - -func (suite *TenantTestSuite) TestCreateTenantWithWrongActiveDirectoryConfig() { - params, _ := suite.initCreateTenantRequest() - params.Body.ErasureCodingParity = 2 - url := "mock-url" - lookup := "mock-lookup" - params.Body.Idp = &models.IdpConfiguration{ - ActiveDirectory: &models.IdpConfigurationActiveDirectory{ - SkipTLSVerification: true, - ServerInsecure: true, - ServerStartTLS: true, - UserDNS: []string{"mock-user"}, - URL: &url, - LookupBindDn: &lookup, - }, - } - k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.CreateOptions) (*corev1.Secret, error) { - if strings.HasPrefix(secret.Name, fmt.Sprintf("%s-user-", *params.Body.Name)) { - return nil, errors.New("mock-create-error") - } - - return nil, nil - } - _, err := createTenant(context.Background(), params, suite.k8sclient, &models.Principal{}) - suite.assert.NotNil(err) -} - -func (suite *TenantTestSuite) TestCreateTenantWithWrongBuiltInUsers() { - params, _ := suite.initCreateTenantRequest() - accessKey := "mock-access-key" - secretKey := "mock-secret-key" - params.Body.Idp = &models.IdpConfiguration{ - Keys: []*models.IdpConfigurationKeysItems0{ - { - AccessKey: &accessKey, - SecretKey: &secretKey, - }, - }, - } - k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.CreateOptions) (*corev1.Secret, error) { - if strings.HasPrefix(secret.Name, fmt.Sprintf("%s-user-", *params.Body.Name)) { - return nil, errors.New("mock-create-error") - } - return nil, nil - } - _, err := createTenant(context.Background(), params, suite.k8sclient, &models.Principal{}) - suite.assert.NotNil(err) -} - -func (suite *TenantTestSuite) TestCreateTenantWithOIDCAndWrongServerCertificates() { - params, _ := suite.initCreateTenantRequest() - url := "mock-url" - clientID := "mock-client-id" - clientSecret := "mock-client-secret" - claimName := "mock-claim-name" - crt := "mock-crt" - key := "mock-key" - params.Body.Idp = &models.IdpConfiguration{ - Oidc: &models.IdpConfigurationOidc{ - ClientID: &clientID, - SecretID: &clientSecret, - ClaimName: &claimName, - ConfigurationURL: &url, - }, - } - params.Body.TLS = &models.TLSConfiguration{ - MinioServerCertificates: []*models.KeyPairConfiguration{ - { - Crt: &crt, - Key: &key, - }, - }, - } - k8sClientDeleteSecretMock = func(ctx context.Context, namespace, name string, opts metav1.DeleteOptions) error { - return nil - } - _, err := createTenant(context.Background(), params, suite.k8sclient, &models.Principal{}) - suite.assert.NotNil(err) -} - -func (suite *TenantTestSuite) TestCreateTenantWithWrongClientCertificates() { - params, _ := suite.initCreateTenantRequest() - crt := "mock-crt" - key := "mock-key" - params.Body.TLS = &models.TLSConfiguration{ - MinioClientCertificates: []*models.KeyPairConfiguration{ - { - Crt: &crt, - Key: &key, - }, - }, - } - k8sClientDeleteSecretMock = func(ctx context.Context, namespace, name string, opts metav1.DeleteOptions) error { - return nil - } - _, err := createTenant(context.Background(), params, suite.k8sclient, &models.Principal{}) - suite.assert.NotNil(err) -} - -func (suite *TenantTestSuite) TestCreateTenantWithWrongCAsCertificates() { - params, _ := suite.initCreateTenantRequest() - params.Body.TLS = &models.TLSConfiguration{ - MinioCAsCertificates: []string{"bW9jay1jcnQ="}, - } - k8sClientDeleteSecretMock = func(ctx context.Context, namespace, name string, opts metav1.DeleteOptions) error { - return nil - } - k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.CreateOptions) (*corev1.Secret, error) { - if strings.HasPrefix(secret.Name, fmt.Sprintf("%s-ca-certificate-", *params.Body.Name)) { - return nil, errors.New("mock-create-error") - } - return nil, nil - } - _, err := createTenant(context.Background(), params, suite.k8sclient, &models.Principal{}) - suite.assert.NotNil(err) -} - -func (suite *TenantTestSuite) TestCreateTenantWithWrongMtlsCertificates() { - params, _ := suite.initCreateTenantRequest() - crt := "mock-crt" - key := "mock-key" - enableTLS := true - params.Body.EnableTLS = &enableTLS - params.Body.Encryption = &models.EncryptionConfiguration{ - MinioMtls: &models.KeyPairConfiguration{ - Crt: &crt, - Key: &key, - }, - } - k8sClientDeleteSecretMock = func(ctx context.Context, namespace, name string, opts metav1.DeleteOptions) error { - return nil - } - _, err := createTenant(context.Background(), params, suite.k8sclient, &models.Principal{}) - suite.assert.NotNil(err) -} - -func (suite *TenantTestSuite) TestCreateTenantWithWrongKESConfig() { - params, _ := suite.initCreateTenantRequest() - crt := "mock-crt" - key := "mock-key" - enableTLS := true - params.Body.EnableTLS = &enableTLS - params.Body.Encryption = &models.EncryptionConfiguration{ - ServerTLS: &models.KeyPairConfiguration{ - Crt: &crt, - Key: &key, - }, - Image: "mock-image", - Replicas: "1", - } - k8sClientDeleteSecretMock = func(ctx context.Context, namespace, name string, opts metav1.DeleteOptions) error { - return nil - } - _, err := createTenant(context.Background(), params, suite.k8sclient, &models.Principal{}) - suite.assert.NotNil(err) -} - -func (suite *TenantTestSuite) TestCreateTenantWithWrongPool() { - params, _ := suite.initCreateTenantRequest() - params.Body.Annotations = map[string]string{"mock": "mock"} - params.Body.Pools = []*models.Pool{{}} - k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.CreateOptions) (*corev1.Secret, error) { - return nil, nil - } - k8sClientDeleteSecretMock = func(ctx context.Context, namespace, name string, opts metav1.DeleteOptions) error { - return nil - } - _, err := createTenant(context.Background(), params, suite.k8sclient, &models.Principal{}) - suite.assert.NotNil(err) -} - -func (suite *TenantTestSuite) TestCreateTenantWithImageRegistryCreateError() { - params, _ := suite.initCreateTenantRequest() - params.Body.MountPath = "/mock-path" - registry := "mock-registry" - username := "mock-username" - password := "mock-password" - params.Body.ImageRegistry = &models.ImageRegistry{ - Registry: ®istry, - Username: &username, - Password: &password, - } - - k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.CreateOptions) (*corev1.Secret, error) { - if strings.HasPrefix(secret.Name, fmt.Sprintf("%s-secret", *params.Body.Name)) { - return nil, nil - } - return nil, errors.New("mock-create-error") - } - k8sclientGetSecretMock = func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - return nil, k8sErrors.NewNotFound(schema.GroupResource{}, "") - } - _, err := createTenant(context.Background(), params, suite.k8sclient, &models.Principal{}) - suite.assert.NotNil(err) -} - -func (suite *TenantTestSuite) TestCreateTenantWithImageRegistryUpdateError() { - params, _ := suite.initCreateTenantRequest() - registry := "mock-registry" - username := "mock-username" - password := "mock-password" - params.Body.ImageRegistry = &models.ImageRegistry{ - Registry: ®istry, - Username: &username, - Password: &password, - } - k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.CreateOptions) (*corev1.Secret, error) { - return nil, nil - } - k8sClientUpdateSecretMock = func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.UpdateOptions) (*corev1.Secret, error) { - return nil, errors.New("mock-update-error") - } - k8sclientGetSecretMock = func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - return &corev1.Secret{}, nil - } - _, err := createTenant(context.Background(), params, suite.k8sclient, &models.Principal{}) - suite.assert.NotNil(err) -} - -func (suite *TenantTestSuite) initCreateTenantRequest() (params operator_api.CreateTenantParams, api operations.OperatorAPI) { - registerTenantHandlers(&api) - params.HTTPRequest = &http.Request{} - ns := "mock-namespace" - name := "mock-tenant-name" - params.Body = &models.CreateTenantRequest{ - Image: "", - Namespace: &ns, - Name: &name, - } - return params, api -} - -func (suite *TenantTestSuite) TestListAllTenantsHandlerWithoutError() { - params, api := suite.initListAllTenantsRequest() - response := api.OperatorAPIListAllTenantsHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.ListTenantsDefault) - suite.assert.True(ok) -} - -func (suite *TenantTestSuite) initListAllTenantsRequest() (params operator_api.ListAllTenantsParams, api operations.OperatorAPI) { - registerTenantHandlers(&api) - params.HTTPRequest = &http.Request{} - return params, api -} - -func (suite *TenantTestSuite) TestListTenantsHandlerWithoutError() { - params, api := suite.initListTenantsRequest() - response := api.OperatorAPIListTenantsHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.ListTenantsDefault) - suite.assert.True(ok) -} - -func (suite *TenantTestSuite) initListTenantsRequest() (params operator_api.ListTenantsParams, api operations.OperatorAPI) { - registerTenantHandlers(&api) - params.HTTPRequest = &http.Request{} - params.Namespace = "mock-namespace" - return params, api -} - -func (suite *TenantTestSuite) TestTenantDetailsHandlerWithError() { - params, api := suite.initTenantDetailsRequest() - response := api.OperatorAPITenantDetailsHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.TenantDetailsDefault) - suite.assert.True(ok) -} - -func (suite *TenantTestSuite) initTenantDetailsRequest() (params operator_api.TenantDetailsParams, api operations.OperatorAPI) { - registerTenantHandlers(&api) - params.HTTPRequest = &http.Request{} - params.Namespace = "mock-namespace" - params.Tenant = "mock-tenant" - return params, api -} - -func (suite *TenantTestSuite) TestTenantConfigurationHandlerWithError() { - params, api := suite.initTenantConfigurationRequest() - response := api.OperatorAPITenantConfigurationHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.TenantConfigurationDefault) - suite.assert.True(ok) -} - -func (suite *TenantTestSuite) initTenantConfigurationRequest() (params operator_api.TenantConfigurationParams, api operations.OperatorAPI) { - registerConfigurationHandlers(&api) - params.HTTPRequest = &http.Request{} - params.Namespace = "mock-namespace" - params.Tenant = "mock-tenant" - return params, api -} - -func (suite *TenantTestSuite) TestParseTenantConfigurationWithoutError() { - tenant := &miniov2.Tenant{ - Spec: miniov2.TenantSpec{ - Env: []corev1.EnvVar{ - {Name: "mock", Value: "mock-env"}, - {Name: "mock", Value: "mock-env-2"}, - }, - }, - } - config, err := parseTenantConfiguration(context.Background(), suite.k8sclient, tenant) - suite.assert.NotNil(config) - suite.assert.Nil(err) -} - -func (suite *TenantTestSuite) TestUpdateTenantConfigurationHandlerWithError() { - params, api := suite.initUpdateTenantConfigurationRequest() - response := api.OperatorAPIUpdateTenantConfigurationHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.UpdateTenantConfigurationDefault) - suite.assert.True(ok) -} - -func (suite *TenantTestSuite) initUpdateTenantConfigurationRequest() (params operator_api.UpdateTenantConfigurationParams, api operations.OperatorAPI) { - registerConfigurationHandlers(&api) - params.HTTPRequest = &http.Request{} - params.Namespace = "mock-namespace" - params.Tenant = "mock-tenant" - return params, api -} - -func (suite *TenantTestSuite) TestTenantSecurityHandlerWithError() { - params, api := suite.initTenantSecurityRequest() - response := api.OperatorAPITenantSecurityHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.TenantSecurityDefault) - suite.assert.True(ok) -} - -func (suite *TenantTestSuite) initTenantSecurityRequest() (params operator_api.TenantSecurityParams, api operations.OperatorAPI) { - registerCertificateHandlers(&api) - params.HTTPRequest = &http.Request{} - params.Namespace = "mock-namespace" - params.Tenant = "mock-tenant" - return params, api -} - -func (suite *TenantTestSuite) TestGetTenantSecurityWithWrongServerCertificates() { - ctx := context.Background() - tenant := &miniov2.Tenant{ - ObjectMeta: metav1.ObjectMeta{ - Name: "mock-tenant", - Namespace: "mock-namespace", - }, - Spec: miniov2.TenantSpec{ - ExternalCertSecret: []*miniov2.LocalCertificateReference{{}}, - }, - } - k8sclientGetSecretMock = func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - return nil, errors.New("mock-get-error") - } - _, err := getTenantSecurity(ctx, suite.k8sclient, tenant) - suite.assert.NotNil(err) -} - -func (suite *TenantTestSuite) TestGetTenantSecurityWithWrongClientCertificates() { - ctx := context.Background() - tenant := &miniov2.Tenant{ - ObjectMeta: metav1.ObjectMeta{ - Name: "mock-tenant", - Namespace: "mock-namespace", - }, - Spec: miniov2.TenantSpec{ - ExternalClientCertSecrets: []*miniov2.LocalCertificateReference{{}}, - }, - } - k8sclientGetSecretMock = func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - return nil, errors.New("mock-get-error") - } - _, err := getTenantSecurity(ctx, suite.k8sclient, tenant) - suite.assert.NotNil(err) -} - -func (suite *TenantTestSuite) TestGetTenantSecurityWithWrongCACertificates() { - ctx := context.Background() - tenant := &miniov2.Tenant{ - ObjectMeta: metav1.ObjectMeta{ - Name: "mock-tenant", - Namespace: "mock-namespace", - }, - Spec: miniov2.TenantSpec{ - ExternalCaCertSecret: []*miniov2.LocalCertificateReference{{}}, - }, - } - k8sclientGetSecretMock = func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - return nil, errors.New("mock-get-error") - } - _, err := getTenantSecurity(ctx, suite.k8sclient, tenant) - suite.assert.NotNil(err) -} - -func (suite *TenantTestSuite) TestGetTenantSecurityWithoutError() { - ctx := context.Background() - tenant := &miniov2.Tenant{ - ObjectMeta: metav1.ObjectMeta{ - Name: "mock-tenant", - Namespace: "mock-namespace", - }, - Spec: miniov2.TenantSpec{ - ExternalCaCertSecret: []*miniov2.LocalCertificateReference{}, - }, - } - k8sclientGetSecretMock = func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - return nil, errors.New("mock-get-error") - } - sec, err := getTenantSecurity(ctx, suite.k8sclient, tenant) - suite.assert.NotNil(sec) - suite.assert.Nil(err) -} - -func (suite *TenantTestSuite) TestUpdateTenantSecurityHandlerWithError() { - params, api := suite.initUpdateTenantSecurityRequest() - response := api.OperatorAPIUpdateTenantSecurityHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.UpdateTenantSecurityDefault) - suite.assert.True(ok) -} - -func (suite *TenantTestSuite) TestUpdateTenantSecurityWrongServerCertificates() { - ctx := context.Background() - opClientTenantGetMock = func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{ - Spec: miniov2.TenantSpec{ - ExternalCertSecret: []*miniov2.LocalCertificateReference{{ - Name: "mock-crt", - }}, - }, - }, nil - } - params, _ := suite.initUpdateTenantSecurityRequest() - params.Body.CustomCertificates.MinioServerCertificates = []*models.KeyPairConfiguration{{}} - err := updateTenantSecurity(ctx, suite.opClient, suite.k8sclient, "mock-namespace", params) - suite.assert.NotNil(err) -} - -func (suite *TenantTestSuite) TestUpdateTenantSecurityWrongClientCertificates() { - ctx := context.Background() - opClientTenantGetMock = func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{ - Spec: miniov2.TenantSpec{ - ExternalClientCertSecrets: []*miniov2.LocalCertificateReference{{ - Name: "mock-crt", - }}, - }, - }, nil - } - params, _ := suite.initUpdateTenantSecurityRequest() - params.Body.CustomCertificates.MinioClientCertificates = []*models.KeyPairConfiguration{{}} - err := updateTenantSecurity(ctx, suite.opClient, suite.k8sclient, "mock-namespace", params) - suite.assert.NotNil(err) -} - -func (suite *TenantTestSuite) TestUpdateTenantSecurityWrongCACertificates() { - ctx := context.Background() - opClientTenantGetMock = func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{ - Spec: miniov2.TenantSpec{ - ExternalCaCertSecret: []*miniov2.LocalCertificateReference{{ - Name: "mock-crt", - }}, - }, - }, nil - } - params, _ := suite.initUpdateTenantSecurityRequest() - params.Body.CustomCertificates.MinioCAsCertificates = []string{"mock-ca-certificate"} - err := updateTenantSecurity(ctx, suite.opClient, suite.k8sclient, "mock-namespace", params) - suite.assert.NotNil(err) -} - -func (suite *TenantTestSuite) TestUpdateTenantSecurityWrongCASecretCertificates() { - ctx := context.Background() - opClientTenantGetMock = func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{ - Spec: miniov2.TenantSpec{ - ExternalCaCertSecret: []*miniov2.LocalCertificateReference{{ - Name: "mock-crt", - }}, - }, - }, nil - } - k8sClientCreateSecretMock = func(ctx context.Context, namespace string, secret *corev1.Secret, opts metav1.CreateOptions) (*corev1.Secret, error) { - return nil, errors.New("mock-create-error") - } - params, _ := suite.initUpdateTenantSecurityRequest() - params.Body.CustomCertificates.MinioCAsCertificates = []string{"bW9jaw=="} - err := updateTenantSecurity(ctx, suite.opClient, suite.k8sclient, "mock-namespace", params) - suite.assert.NotNil(err) -} - -func (suite *TenantTestSuite) TestUpdateTenantSecurityWrongSC() { - ctx := context.Background() - opClientTenantGetMock = func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{}, nil - } - params, _ := suite.initUpdateTenantSecurityRequest() - err := updateTenantSecurity(ctx, suite.opClient, suite.k8sclient, "mock-namespace", params) - suite.assert.NotNil(err) -} - -func (suite *TenantTestSuite) TestUpdateTenantSecurityWithoutError() { - ctx := context.Background() - opClientTenantGetMock = func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{ - Spec: miniov2.TenantSpec{ - Pools: []miniov2.Pool{{}}, - }, - }, nil - } - opClientTenantUpdateMock = func(ctx context.Context, tenant *miniov2.Tenant, opts metav1.UpdateOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{}, nil - } - params, _ := suite.initUpdateTenantSecurityRequest() - params.Body.SecurityContext = suite.createMockModelsSecurityContext() - err := updateTenantSecurity(ctx, suite.opClient, suite.k8sclient, "mock-namespace", params) - suite.assert.Nil(err) -} - -func (suite *TenantTestSuite) initUpdateTenantSecurityRequest() (params operator_api.UpdateTenantSecurityParams, api operations.OperatorAPI) { - registerCertificateHandlers(&api) - params.HTTPRequest = &http.Request{} - params.Namespace = "mock-namespace" - params.Tenant = "mock-tenant" - params.Body = &models.UpdateTenantSecurityRequest{ - CustomCertificates: &models.UpdateTenantSecurityRequestCustomCertificates{ - SecretsToBeDeleted: []string{"mock-certificate"}, - }, - } - - return params, api -} - -func (suite *TenantTestSuite) TestSetTenantAdministratorsHandlerWithError() { - params, api := suite.initSetTenantAdministratorsRequest() - response := api.OperatorAPISetTenantAdministratorsHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.SetTenantAdministratorsDefault) - suite.assert.True(ok) -} - -func (suite *TenantTestSuite) TestSetTenantAdministratorsWithUserPolicyError() { - params, _ := suite.initSetTenantAdministratorsRequest() - tenant := &miniov2.Tenant{ - Spec: miniov2.TenantSpec{ - Env: []corev1.EnvVar{ - {Name: "accesskey", Value: "mock-access"}, - {Name: "secretkey", Value: "mock-secret"}, - }, - }, - } - minioSetPolicyMock = func(policyName, entityName string, isGroup bool) error { - return errors.New("error") - } - params.Body.UserDNS = []string{"mock-user"} - err := setTenantAdministrators(context.Background(), tenant, suite.k8sclient, suite.adminClient, params) - suite.assert.NotNil(err) -} - -func (suite *TenantTestSuite) TestSetTenantAdministratorsWithGroupPolicyError() { - params, _ := suite.initSetTenantAdministratorsRequest() - tenant := &miniov2.Tenant{ - Spec: miniov2.TenantSpec{ - Env: []corev1.EnvVar{ - {Name: "accesskey", Value: "mock-access"}, - {Name: "secretkey", Value: "mock-secret"}, - }, - }, - } - minioSetPolicyMock = func(policyName, entityName string, isGroup bool) error { - return errors.New("error") - } - params.Body.GroupDNS = []string{"mock-user"} - err := setTenantAdministrators(context.Background(), tenant, suite.k8sclient, suite.adminClient, params) - suite.assert.NotNil(err) -} - -func (suite *TenantTestSuite) TestSetTenantAdministratorsGroupAndUserDnsWithoutError() { - params, _ := suite.initSetTenantAdministratorsRequest() - tenant := &miniov2.Tenant{ - Spec: miniov2.TenantSpec{ - Env: []corev1.EnvVar{ - {Name: "accesskey", Value: "mock-access"}, - {Name: "secretkey", Value: "mock-secret"}, - }, - }, - } - minioSetPolicyMock = func(policyName, entityName string, isGroup bool) error { - return nil - } - params.Body.UserDNS = []string{"mock-user"} - params.Body.GroupDNS = []string{"mock-user"} - err := setTenantAdministrators(context.Background(), tenant, suite.k8sclient, suite.adminClient, params) - suite.assert.Nil(err) -} - -func (suite *TenantTestSuite) TestSetTenantAdministratorsEmptyWithoutError() { - params, _ := suite.initSetTenantAdministratorsRequest() - tenant := &miniov2.Tenant{ - Spec: miniov2.TenantSpec{ - Env: []corev1.EnvVar{ - {Name: "accesskey", Value: "mock-access"}, - {Name: "secretkey", Value: "mock-secret"}, - }, - }, - } - err := setTenantAdministrators(context.Background(), tenant, suite.k8sclient, suite.adminClient, params) - suite.assert.Nil(err) -} - -func (suite *TenantTestSuite) initSetTenantAdministratorsRequest() (params operator_api.SetTenantAdministratorsParams, api operations.OperatorAPI) { - registerUsersHandlers(&api) - params.HTTPRequest = &http.Request{} - params.Namespace = "mock-namespace" - params.Tenant = "mock-tenant" - params.Body = &models.SetAdministratorsRequest{} - return params, api -} - -func (suite *TenantTestSuite) TestTenantIdentityProviderHandlerWithError() { - params, api := suite.initTenantIdentityProviderRequest() - response := api.OperatorAPITenantIdentityProviderHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.TenantIdentityProviderDefault) - suite.assert.True(ok) -} - -func (suite *TenantTestSuite) initTenantIdentityProviderRequest() (params operator_api.TenantIdentityProviderParams, api operations.OperatorAPI) { - registerIDPHandlers(&api) - params.HTTPRequest = &http.Request{} - params.Namespace = "mock-namespace" - params.Tenant = "mock-tenant" - return params, api -} - -func (suite *TenantTestSuite) TestGetTenantIdentityProviderWithIDPConfig() { - ctx := context.Background() - tenant := &miniov2.Tenant{ - ObjectMeta: metav1.ObjectMeta{ - Name: "mock-tenant", - Namespace: "mock-namespace", - }, - Spec: miniov2.TenantSpec{ - Env: []corev1.EnvVar{ - {Name: "MINIO_IDENTITY_OPENID_CONFIG_URL", Value: "mock"}, - {Name: "MINIO_IDENTITY_OPENID_REDIRECT_URI", Value: "mock"}, - {Name: "MINIO_IDENTITY_OPENID_CLAIM_NAME", Value: "mock"}, - {Name: "MINIO_IDENTITY_OPENID_CLIENT_ID", Value: "mock"}, - {Name: "MINIO_IDENTITY_OPENID_CLIENT_SECRET", Value: "mock"}, - }, - }, - } - res, err := getTenantIdentityProvider(ctx, suite.k8sclient, tenant) - suite.assert.NotNil(res) - suite.assert.NotNil(res.Oidc) - suite.assert.Nil(err) -} - -func (suite *TenantTestSuite) TestGetTenantIdentityProviderWithLDAPConfig() { - ctx := context.Background() - tenant := &miniov2.Tenant{ - ObjectMeta: metav1.ObjectMeta{ - Name: "mock-tenant", - Namespace: "mock-namespace", - }, - Spec: miniov2.TenantSpec{ - Env: []corev1.EnvVar{ - {Name: "MINIO_IDENTITY_LDAP_GROUP_SEARCH_BASE_DN", Value: "mock"}, - {Name: "MINIO_IDENTITY_LDAP_GROUP_SEARCH_FILTER", Value: "mock"}, - {Name: "MINIO_IDENTITY_LDAP_LOOKUP_BIND_DN", Value: "mock"}, - {Name: "MINIO_IDENTITY_LDAP_LOOKUP_BIND_PASSWORD", Value: "mock"}, - {Name: "MINIO_IDENTITY_LDAP_SERVER_INSECURE", Value: "mock"}, - {Name: "MINIO_IDENTITY_LDAP_SERVER_STARTTLS", Value: "mock"}, - {Name: "MINIO_IDENTITY_LDAP_TLS_SKIP_VERIFY", Value: "mock"}, - {Name: "MINIO_IDENTITY_LDAP_SERVER_ADDR", Value: "mock"}, - {Name: "MINIO_IDENTITY_LDAP_USER_DN_SEARCH_BASE_DN", Value: "mock"}, - {Name: "MINIO_IDENTITY_LDAP_USER_DN_SEARCH_FILTER", Value: "mock"}, - }, - }, - } - res, err := getTenantIdentityProvider(ctx, suite.k8sclient, tenant) - suite.assert.NotNil(res) - suite.assert.NotNil(res.ActiveDirectory) - suite.assert.Nil(err) -} - -func (suite *TenantTestSuite) TestDeleteTenantHandlerWithError() { - params, api := suite.initDeleteTenantRequest() - response := api.OperatorAPIDeleteTenantHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.DeleteTenantDefault) - suite.assert.True(ok) -} - -func (suite *TenantTestSuite) initDeleteTenantRequest() (params operator_api.DeleteTenantParams, api operations.OperatorAPI) { - registerTenantHandlers(&api) - params.HTTPRequest = &http.Request{} - params.Namespace = "mock-namespace" - params.Tenant = "mock-tenant" - return params, api -} - -func (suite *TenantTestSuite) TestUpdateTenantHandlerWithError() { - params, api := suite.initUpdateTenantRequest() - response := api.OperatorAPIUpdateTenantHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.UpdateTenantDefault) - suite.assert.True(ok) -} - -func (suite *TenantTestSuite) initUpdateTenantRequest() (params operator_api.UpdateTenantParams, api operations.OperatorAPI) { - registerTenantHandlers(&api) - params.HTTPRequest = &http.Request{} - params.Namespace = "mock-namespace" - params.Tenant = "mock-tenant" - params.Body = &models.UpdateTenantRequest{ - Image: "mock-image", - } - return params, api -} - -func (suite *TenantTestSuite) TestGetTenantUsageHandlerWithError() { - params, api := suite.initGetTenantUsageRequest() - response := api.OperatorAPIGetTenantUsageHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.GetTenantUsageDefault) - suite.assert.True(ok) -} - -func (suite *TenantTestSuite) initGetTenantUsageRequest() (params operator_api.GetTenantUsageParams, api operations.OperatorAPI) { - registerTenantHandlers(&api) - params.HTTPRequest = &http.Request{} - params.Namespace = "mock-namespace" - params.Tenant = "mock-tenant" - return params, api -} - -func (suite *TenantTestSuite) TestGetTenantUsageWithWrongAdminClient() { - tenant := &miniov2.Tenant{} - usage, err := getTenantUsage(context.Background(), tenant, suite.k8sclient) - suite.assert.Nil(usage) - suite.assert.NotNil(err) -} - -func (suite *TenantTestSuite) TestGetTenantUsageWithError() { - MinioServerInfoMock = func(ctx context.Context) (madmin.InfoMessage, error) { - return madmin.InfoMessage{}, errors.New("mock-server-info-error") - } - usage, err := _getTenantUsage(context.Background(), suite.adminClient) - suite.assert.Nil(usage) - suite.assert.NotNil(err) -} - -func (suite *TenantTestSuite) TestGetTenantUsageWithNoError() { - MinioServerInfoMock = func(ctx context.Context) (madmin.InfoMessage, error) { - return madmin.InfoMessage{}, nil - } - usage, err := _getTenantUsage(context.Background(), suite.adminClient) - suite.assert.NotNil(usage) - suite.assert.Nil(err) -} - -func (suite *TenantTestSuite) TestTenantUpdateCertificateHandlerWithError() { - params, api := suite.initTenantUpdateCertificateRequest() - response := api.OperatorAPITenantUpdateCertificateHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.TenantUpdateCertificateDefault) - suite.assert.True(ok) -} - -func (suite *TenantTestSuite) initTenantUpdateCertificateRequest() (params operator_api.TenantUpdateCertificateParams, api operations.OperatorAPI) { - registerCertificateHandlers(&api) - params.HTTPRequest = &http.Request{} - params.Namespace = "mock-namespace" - params.Tenant = "mock-tenant" - return params, api -} - -func (suite *TenantTestSuite) TestGetTenantYAMLHandlerWithError() { - params, api := suite.initGetTenantYAMLRequest() - response := api.OperatorAPIGetTenantYAMLHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.GetTenantYAMLDefault) - suite.assert.True(ok) -} - -func (suite *TenantTestSuite) initGetTenantYAMLRequest() (params operator_api.GetTenantYAMLParams, api operations.OperatorAPI) { - registerYAMLHandlers(&api) - params.HTTPRequest = &http.Request{} - params.Namespace = "mock-namespace" - params.Tenant = "mock-tenant" - return params, api -} - -func (suite *TenantTestSuite) TestPutTenantYAMLHandlerWithError() { - params, api := suite.initPutTenantYAMLRequest() - response := api.OperatorAPIPutTenantYAMLHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.PutTenantYAMLDefault) - suite.assert.True(ok) -} - -func (suite *TenantTestSuite) initPutTenantYAMLRequest() (params operator_api.PutTenantYAMLParams, api operations.OperatorAPI) { - registerYAMLHandlers(&api) - params.HTTPRequest = &http.Request{} - params.Namespace = "mock-namespace" - params.Tenant = "mock-tenant" - params.Body = &models.TenantYAML{ - Yaml: "", - } - return params, api -} - -func (suite *TenantTestSuite) TestGetTenantEventsHandlerWithError() { - params, api := suite.initGetTenantEventsRequest() - response := api.OperatorAPIGetTenantEventsHandler.Handle(params, &models.Principal{}) - _, ok := response.(*operator_api.GetTenantEventsDefault) - suite.assert.True(ok) -} - -func (suite *TenantTestSuite) initGetTenantEventsRequest() (params operator_api.GetTenantEventsParams, api operations.OperatorAPI) { - registerEventHandlers(&api) - params.HTTPRequest = &http.Request{} - params.Namespace = "mock-namespace" - params.Tenant = "mock-tenant" - return params, api -} - -func TestTenant(t *testing.T) { - suite.Run(t, new(TenantTestSuite)) -} - -func (suite *TenantTestSuite) createMockModelsSecurityContext() *models.SecurityContext { - runAsUser := "1000" - runAsGroup := "1000" - fsGroup := "1000" - return &models.SecurityContext{ - RunAsUser: &runAsUser, - RunAsGroup: &runAsGroup, - FsGroup: fsGroup, - } -} - -func (suite *TenantTestSuite) createTenantPodSecurityContext() *corev1.PodSecurityContext { - runAsUser := int64(1000) - runAsGroup := int64(1000) - fsGroup := int64(1000) - fscp := corev1.PodFSGroupChangePolicy("OnRootMismatch") - return &corev1.PodSecurityContext{ - RunAsUser: &runAsUser, - RunAsGroup: &runAsGroup, - FSGroup: &fsGroup, - FSGroupChangePolicy: &fscp, - } -} - -func (suite *TenantTestSuite) TestGetTenantLogReportWithError() { - objs := []runtime.Object{} - - kubeClient := fake.NewSimpleClientset(objs...) - - opClientTenantGetMock = func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return nil, nil - } - - fakeTenant, _ := opClientTenantGetMock(context.Background(), "", "", metav1.GetOptions{}) - _, err := generateTenantLogReport(context.Background(), kubeClient.CoreV1(), "", "", fakeTenant) - - suite.assert.NotNil(err) -} - -func (suite *TenantTestSuite) TestGetTenantLogReportWithoutError() { - // fakePods := []corev1.Pod{{ObjectMeta: metav1.ObjectMeta{Name: "pod1"}}, {ObjectMeta: metav1.ObjectMeta{Name: "pod2"}}, {ObjectMeta: metav1.ObjectMeta{Name: "pod3"}}} - objs := []runtime.Object{ - &corev1.PodList{Items: []corev1.Pod{ - { - Status: corev1.PodStatus{ - ContainerStatuses: []corev1.ContainerStatus{{}}, - }, - ObjectMeta: metav1.ObjectMeta{ - Name: "Pod1", - DeletionTimestamp: &metav1.Time{Time: time.Now()}, - }, - }, - }}, - &corev1.Namespace{ObjectMeta: metav1.ObjectMeta{Name: "mock-namespace"}}, - } - - kubeClient := fake.NewSimpleClientset(objs...) - - opClientTenantGetMock = func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{ - Spec: miniov2.TenantSpec{}, - }, nil - } - - params, _ := suite.initGetLogReportRequest() - fakeTenant, _ := opClientTenantGetMock(context.Background(), params.Namespace, params.Tenant, metav1.GetOptions{}) - _, err := generateTenantLogReport(context.Background(), kubeClient.CoreV1(), params.Tenant, params.Namespace, fakeTenant) - - suite.assert.Nil(err) -} - -func (suite *TenantTestSuite) initGetLogReportRequest() (params operator_api.GetTenantLogReportParams, api operations.OperatorAPI) { - registerTenantHandlers(&api) - params.HTTPRequest = &http.Request{} - params.Namespace = "mock-namespace" - params.Tenant = "mock-tenant" - - return params, api -} - -// This is what I got out of tenants_test.go which won't exist after rebase to new setup - -func Test_getTenantLogReport(t *testing.T) { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - opClient := opClientMock{} - type args struct { - ctx context.Context - operatorClient OperatorClientI - namespace string - tenantName string - objs []runtime.Object - } - tests := []struct { - name string - args args - wantErr bool - }{ - { - name: "no error getting tenant log report", - wantErr: false, - args: args{ - ctx: ctx, - operatorClient: opClient, - namespace: "default", - tenantName: "test", - objs: []runtime.Object{ - &corev1.PodList{ - Items: []corev1.Pod{}, - }, - &corev1.EventList{ - Items: []corev1.Event{}, - }, - }, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - kubeClient := fake.NewSimpleClientset() - fakeTenant, e := opClientTenantGetMock(ctx, tt.args.namespace, tt.args.tenantName, metav1.GetOptions{}) - if e != nil { - t.Errorf("error making mock tenant generateTenantLogReport(%v, %v, %v, %v)", tt.args.ctx, tt.args.operatorClient, tt.args.namespace, tt.args.tenantName) - } - _, err := generateTenantLogReport(tt.args.ctx, kubeClient.CoreV1(), tt.args.tenantName, tt.args.namespace, fakeTenant) - if (err != nil) != tt.wantErr { - t.Errorf("generateTenantLogReport(%v, %v, %v, %v) err %v", tt.args.ctx, tt.args.operatorClient, tt.args.namespace, tt.args.tenantName, err) - } - }) - } -} diff --git a/api/tenants_helper.go b/api/tenants_helper.go deleted file mode 100644 index 495e4c16828..00000000000 --- a/api/tenants_helper.go +++ /dev/null @@ -1,231 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "crypto/tls" - "encoding/base64" - "errors" - "fmt" - "strconv" - - "github.com/minio/operator/api/operations/operator_api" - - "github.com/minio/operator/models" - miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// convertModelSCToK8sSC validates and converts from models.SecurityContext to corev1.PodSecurityContext -func convertModelSCToK8sSC(sc *models.SecurityContext) (*corev1.PodSecurityContext, error) { - if sc == nil { - return nil, errors.New("invalid security context") - } - runAsUser, err := strconv.ParseInt(*sc.RunAsUser, 10, 64) - if err != nil { - return nil, err - } - runAsGroup, err := strconv.ParseInt(*sc.RunAsGroup, 10, 64) - if err != nil { - return nil, err - } - fsGroup, err := strconv.ParseInt(sc.FsGroup, 10, 64) - if err != nil { - return nil, err - } - FSGroupChangePolicy := corev1.PodFSGroupChangePolicy("Always") - if sc.FsGroupChangePolicy != "" { - FSGroupChangePolicy = corev1.PodFSGroupChangePolicy(sc.FsGroupChangePolicy) - } - return &corev1.PodSecurityContext{ - RunAsUser: &runAsUser, - RunAsGroup: &runAsGroup, - RunAsNonRoot: sc.RunAsNonRoot, - FSGroup: &fsGroup, - FSGroupChangePolicy: &FSGroupChangePolicy, - }, nil -} - -// convertK8sSCToModelSC validates and converts from corev1.PodSecurityContext to models.SecurityContext -func convertK8sSCToModelSC(sc *corev1.PodSecurityContext) *models.SecurityContext { - var runAsUser string - var runAsGroup string - var fsGroup string - fsGroupChangePolicy := "Always" - - if sc.RunAsUser != nil && *sc.RunAsUser != 0 { - runAsUser = strconv.FormatInt(*sc.RunAsUser, 10) - } - if sc.RunAsGroup != nil && *sc.RunAsGroup != 0 { - runAsGroup = strconv.FormatInt(*sc.RunAsGroup, 10) - } - if sc.FSGroup != nil && *sc.FSGroup != 0 { - fsGroup = strconv.FormatInt(*sc.FSGroup, 10) - } - if sc.FSGroupChangePolicy != nil { - fsGroupChangePolicy = string(*sc.FSGroupChangePolicy) - } - - return &models.SecurityContext{ - RunAsUser: &runAsUser, - RunAsGroup: &runAsGroup, - RunAsNonRoot: sc.RunAsNonRoot, - FsGroup: fsGroup, - FsGroupChangePolicy: fsGroupChangePolicy, - } -} - -// tenantUpdateCertificates receives the keyPair certificates (public and private keys) for Minio and Console and will try -// to replace the existing kubernetes secrets with the new values, then will restart the affected pods so the new volumes can be mounted -func tenantUpdateCertificates(ctx context.Context, operatorClient OperatorClientI, clientSet K8sClientI, namespace string, params operator_api.TenantUpdateCertificateParams) error { - tenantName := params.Tenant - tenant, err := operatorClient.TenantGet(ctx, namespace, tenantName, metav1.GetOptions{}) - if err != nil { - return err - } - body := params.Body - // check if MinIO is deployed with external certs and user provided new MinIO keypair - if tenant.ExternalCert() && body.MinioServerCertificates != nil { - minioCertSecretName := fmt.Sprintf("%s-instance-external-certificates", tenantName) - // update certificates - if _, err := createOrReplaceExternalCertSecrets(ctx, clientSet, namespace, body.MinioServerCertificates, minioCertSecretName, tenantName); err != nil { - return err - } - } - return nil -} - -// getTenantUpdateCertificatesResponse wrapper of tenantUpdateCertificates -func getTenantUpdateCertificatesResponse(session *models.Principal, params operator_api.TenantUpdateCertificateParams) *models.Error { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - // get Kubernetes Client - clientSet, err := K8sClient(session.STSSessionToken) - if err != nil { - return ErrorWithContext(ctx, err, ErrUnableToUpdateTenantCertificates) - } - k8sClient := k8sClient{ - client: clientSet, - } - opClientClientSet, err := GetOperatorClient(session.STSSessionToken) - if err != nil { - return ErrorWithContext(ctx, err, ErrUnableToUpdateTenantCertificates) - } - opClient := operatorClient{ - client: opClientClientSet, - } - if err := tenantUpdateCertificates(ctx, &opClient, &k8sClient, params.Namespace, params); err != nil { - return ErrorWithContext(ctx, err, ErrUnableToUpdateTenantCertificates) - } - return nil -} - -type tenantSecret struct { - Name string - Content map[string][]byte -} - -// createOrReplaceSecrets receives an array of Tenant Secrets to be stored as k8s secrets -func createOrReplaceSecrets(ctx context.Context, clientSet K8sClientI, ns string, secrets []tenantSecret, tenantName string) ([]*miniov2.LocalCertificateReference, error) { - var k8sSecrets []*miniov2.LocalCertificateReference - for _, secret := range secrets { - if len(secret.Content) > 0 && secret.Name != "" { - // delete secret with same name if exists - err := clientSet.deleteSecret(ctx, ns, secret.Name, metav1.DeleteOptions{}) - if err != nil { - // log the errors if any and continue - LogError("deleting secret name %s failed: %v, continuing..", secret.Name, err) - } - k8sSecret := &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: secret.Name, - Labels: map[string]string{ - miniov2.TenantLabel: tenantName, - }, - }, - Type: corev1.SecretTypeOpaque, - Data: secret.Content, - } - _, err = clientSet.createSecret(ctx, ns, k8sSecret, metav1.CreateOptions{}) - if err != nil { - return nil, err - } - k8sSecrets = append(k8sSecrets, &miniov2.LocalCertificateReference{ - Name: secret.Name, - Type: "Opaque", - }) - } - } - return k8sSecrets, nil -} - -// createOrReplaceExternalCertSecrets receives an array of KeyPairs (public and private key), encoded in base64, decode it and generate an equivalent number of kubernetes -// secrets to be used by the miniov2 for TLS encryption -func createOrReplaceExternalCertSecrets(ctx context.Context, clientSet K8sClientI, ns string, keyPairs []*models.KeyPairConfiguration, secretName, tenantName string) ([]*miniov2.LocalCertificateReference, error) { - var keyPairSecrets []*miniov2.LocalCertificateReference - for i, keyPair := range keyPairs { - keyPairSecretName := fmt.Sprintf("%s-%d", secretName, i) - if keyPair == nil || keyPair.Crt == nil || keyPair.Key == nil || *keyPair.Crt == "" || *keyPair.Key == "" { - return nil, errors.New("certificate files must not be empty") - } - // delete secret with same name if exists - err := clientSet.deleteSecret(ctx, ns, keyPairSecretName, metav1.DeleteOptions{}) - if err != nil { - // log the errors if any and continue - LogError("deleting secret name %s failed: %v, continuing..", keyPairSecretName, err) - } - imm := true - tlsCrt, err := base64.StdEncoding.DecodeString(*keyPair.Crt) - if err != nil { - return nil, err - } - tlsKey, err := base64.StdEncoding.DecodeString(*keyPair.Key) - if err != nil { - return nil, err - } - // check if the key pair is valid - if _, err = tls.X509KeyPair(tlsCrt, tlsKey); err != nil { - return nil, err - } - externalTLSCertificateSecret := &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: keyPairSecretName, - Labels: map[string]string{ - miniov2.TenantLabel: tenantName, - }, - }, - Type: corev1.SecretTypeTLS, - Immutable: &imm, - Data: map[string][]byte{ - "tls.crt": tlsCrt, - "tls.key": tlsKey, - }, - } - _, err = clientSet.createSecret(ctx, ns, externalTLSCertificateSecret, metav1.CreateOptions{}) - if err != nil { - return nil, err - } - // Certificates used by the minio instance - keyPairSecrets = append(keyPairSecrets, &miniov2.LocalCertificateReference{ - Name: keyPairSecretName, - Type: "kubernetes.io/tls", - }) - } - return keyPairSecrets, nil -} diff --git a/api/tenants_helper_test.go b/api/tenants_helper_test.go deleted file mode 100644 index e534e3eab7e..00000000000 --- a/api/tenants_helper_test.go +++ /dev/null @@ -1,494 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "errors" - "reflect" - "testing" - - "github.com/minio/operator/api/operations/operator_api" - - "github.com/minio/operator/models" - miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - v1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -func Test_tenantUpdateCertificates(t *testing.T) { - k8sClient := k8sClientMock{} - opClient := opClientMock{} - crt := "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUUzRENDQTBTZ0F3SUJBZ0lRS0pDalNyK0xaMnJrYVo5ODAvZnV5akFOQmdrcWhraUc5dzBCQVFzRkFEQ0IKdFRFZU1Cd0dBMVVFQ2hNVmJXdGpaWEowSUdSbGRtVnNiM0J0Wlc1MElFTkJNVVV3UXdZRFZRUUxERHhoYkdWMgpjMnRBVEdWdWFXNXpMVTFoWTBKdmIyc3RVSEp2TG14dlkyRnNJQ2hNWlc1cGJpQkJiR1YyYzJ0cElFaDFaWEowCllTQkJjbWxoY3lreFREQktCZ05WQkFNTVEyMXJZMlZ5ZENCaGJHVjJjMnRBVEdWdWFXNXpMVTFoWTBKdmIyc3QKVUhKdkxteHZZMkZzSUNoTVpXNXBiaUJCYkdWMmMydHBJRWgxWlhKMFlTQkJjbWxoY3lrd0hoY05NVGt3TmpBeApNREF3TURBd1doY05NekF3T0RBeU1ERTFNekEzV2pCaU1TY3dKUVlEVlFRS0V4NXRhMk5sY25RZ1pHVjJaV3h2CmNHMWxiblFnWTJWeWRHbG1hV05oZEdVeE56QTFCZ05WQkFzTUxtRnNaWFp6YTBCMGFXWmhMbXh2WTJGc0lDaE0KWlc1cGJpQkJiR1YyYzJ0cElFaDFaWEowWVNCQmNtbGhjeWt3Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQgpEd0F3Z2dFS0FvSUJBUUM2dlhLVyswWmhJQUNycmpxTU9QZ3VSdGpSemk1L0VxK2JvZTJkQ1BpT3djdXo0WFlhCm1rVlcxSkhBS3VTc0I1UHE0QnFSRXFueUhYT0ZROWQ1bEFjRGNDYmhlTFRVb2h2ZkhOWW9SdWRrYkZ3RzAyOFQKdVMxTFNtcHU5VjhFU2Q0Q3BiOGRvUkcvUW8vRTF4RGk5STFhNVhoeUdHTTNsUFlYQU1HU1ZkWUNNNzh0M2ZLTwp0NFVlcEt6d2dFQ2NKRVg4MVFoem1ZT25ELysyazNxSVppZU9nOGFkbDNFUWV2eFBISXlXQ1JkaDJZTkZsRi9rCmEwTzQyRVl2NVNUT1N0dzI2TzMwTVRrcEg0dzRRZm9VV3BnZU93MDZyYTluRHdzV3VhMUZIaHlKZmxOanR1USsKU0NlaDdqTVlVUThYV1JkbXVHbzFRT0g5cjdDKy82L1JhMlZIQWdNQkFBR2pnYmt3Z2JZd0RnWURWUjBQQVFILwpCQVFEQWdXZ01CTUdBMVVkSlFRTU1Bb0dDQ3NHQVFVRkJ3TUJNQXdHQTFVZEV3RUIvd1FDTUFBd0h3WURWUjBqCkJCZ3dGb0FVNHg4NUIyeGVlQzg0UEdvM1dZVWwxRGVvZlFNd1lBWURWUjBSQkZrd1Y0SWpLaTV0YVc1cGJ5MWgKYkdWMmMyc3Ribk11YzNaakxtTnNkWE4wWlhJdWJHOWpZV3lDTUNvdWFHOXVaWGwzWld4c0xXaHNMbTFwYm1sdgpMV0ZzWlhaemF5MXVjeTV6ZG1NdVkyeDFjM1JsY2k1c2IyTmhiREFOQmdrcWhraUc5dzBCQVFzRkFBT0NBWUVBCnZnMFlIVGtzd3Z4NEE5ZXl0b1V3eTBOSFVjQXpuNy9BVCt3WEt6d3Fqa0RiS3hVYlFTMFNQVVI4SkVDMkpuUUgKU3pTNGFCNXRURVRYZUcrbHJZVU02b0RNcXlIalpUN1NJaW83OUNxOFloWWxORU9qMkhvaXdxalczZm10UU9kVApoVG1tS01lRnZleHo2cnRxbHp0cVdKa3kvOGd1MkMrMWw5UDFFUmhFNDZZY0puVmJ5REFTSGNvV2tiZVhFUGErCjNpNFd4bU1yMDlNZXFTNkFUb2NKanFBeEtYcURYWmlFZjRUVEp1ZTRBQ2s4WmhqaEtUUEV6RnQ3WllVaHY3dVoKdlZCOXhla2FqRzdMRU5kSHZncXVMRUxUV3czWkpBaXpSTU5KUUpzZU11LzdQN1NIeXRKTVJYdlVwd2R2dWhDOApKNm54aGRmUS91QVlQY1lHdlU5NUZPZ1NjWVZqNW1WQktXM0ZHbkl2YzZuamQ1OFhBSTE3dlk0K0ZZTnY4M2UxCm9mOGlxRFdWNTFyT1FlbG9FZFdmdHkvZTI2bXVWUUQzQlVjY2Z5SWpGYy9SeGNHdm5maUEwUm1uRDNkWFcyZ0oKUHFTd01ZZ3hxQndqMm1Qck5jdkFWY3BOeWRjTWJKOTFIOHRWY0ttRHMrY1NiV0tnblpmKzUvZm5yaTdmU3FLUQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" - key := "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2Z0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktnd2dnU2tBZ0VBQW9JQkFRQzZ2WEtXKzBaaElBQ3IKcmpxTU9QZ3VSdGpSemk1L0VxK2JvZTJkQ1BpT3djdXo0WFlhbWtWVzFKSEFLdVNzQjVQcTRCcVJFcW55SFhPRgpROWQ1bEFjRGNDYmhlTFRVb2h2ZkhOWW9SdWRrYkZ3RzAyOFR1UzFMU21wdTlWOEVTZDRDcGI4ZG9SRy9Rby9FCjF4RGk5STFhNVhoeUdHTTNsUFlYQU1HU1ZkWUNNNzh0M2ZLT3Q0VWVwS3p3Z0VDY0pFWDgxUWh6bVlPbkQvKzIKazNxSVppZU9nOGFkbDNFUWV2eFBISXlXQ1JkaDJZTkZsRi9rYTBPNDJFWXY1U1RPU3R3MjZPMzBNVGtwSDR3NApRZm9VV3BnZU93MDZyYTluRHdzV3VhMUZIaHlKZmxOanR1UStTQ2VoN2pNWVVROFhXUmRtdUdvMVFPSDlyN0MrCi82L1JhMlZIQWdNQkFBRUNnZ0VCQUlyTlVFUnJSM2ZmK3IraGhJRS93ekZhbGNUMUZWaDh3aXpUWXJQcnZCMFkKYlZvcVJzZ2xUVTdxTjkvM3dmc2dzdEROZk5IQ1pySEJOR0drK0orMDZMV2tnakhycjdXeFBUaE16ZDRvUGN4RwpRdTBMOGE5ZVlBMXJwY3NOOVc5Um5JU3BRSEk4aTkxM0V6Z0RoOWk2WCt0bFQyNjNNK0JYaDhlM1Z5cDNSTmhpCjZZUTQwcWJsNlQ0TUlyLzRSMGJmcFExZWVMNVNnbHB6Z1d6ZGs4WGtmc0E5YnRiU1RoMjZKRlBPUU1tMm5adkcKbjBlZm85TDZtaktwRW9rRWpTY1hWYTRZNHJaREZFYTVIbkpUSDBHblByQzU1cDhBb3BFN1c1M2RDT3lxd29CcQo4SWtZb2grcm1qTUZrOGc5VlRVYlcwVE9YVTFSY1E1Z0gxWS9jam5uVTRrQ2dZRUE4amw5ZEQyN2JaQ2ZaTW9jCjJYRThiYkJTaFVXTjRvaklKc1lHY2xyTjJDUEtUNmExaVhvS3BrTXdGNUdsODEzQURGR1pTbWtUSUFVQXRXQU8KNzZCcEpGUlVCZ1hmUXhSU0gyS1RaRldxbE5yekZPQjNsT3h2bFJ1amw5eE9ueStyWUhJWC9BOWNqQlp3a2orSAo3MDZRTExvS1ZFL2lMYy9DMlI5VzRLRVI3R3NDZ1lFQXhWd3FyM1JnUXhHUmpueG1zbDZtUW5DQ3k2MXFoUzUxCkJicDJzWldraFNTV0w0YzFDY0NDMnZ2ektPSmJkZ2NZQU43L05sTHgzWjlCZUFjTVZMUEVoc2NPalB6YUlneEMKczJ2UkdwQUFtYnRjWi9MVlpKaERWTjIrSHowRHhnRUtCa1JzQU5XTG51cGRoUWJBdlZuTkVsY29YVlo1cC9qcwp3U1BCelFoSklaVUNnWUJqTUlHY0dTOW9SWUhRRHlmVEx4aVV2bEI4ZktnR2JRYXhRZ1FmemVsZktnRE5yekhGCnN6RXJOblk2SUkxNVpCbWhzY1I1QVNBd3kzdW55a2N6ZjFldTVjMW1qZjhJQkFsQkN1ZmFmVzRWK0xiMEJKdFQKWTZLcHg2Q3RMaTBQNk1CZ0JUaW5JazgrbW0zTXBiRnZvSmRQaVh0elhTYjhwWWhmeXdLVGg4SEVNd0tCZ1FDUwpvR0VPTFpYKy9pUjRDYkI2d0pzaExWbmZYSjJSQ096a0xwNVVYV3IzaURFVWFvMWJDMjJzcUJjRnZ2WllmL2l6ClhQbWJNSkNGS1BhSTZDT2ZJbGZXRWptYlFaZ0dSN21lZDNISkhFZDE3NTg5azBvN0RHeXB0bnl6MUs3akFvNmkKRFY5NFZ5NytCLzBuQWRkY1ZrVm5aTjJXU3RMam1xcTY2NGZtZmt0bTZRS0JnQzBsMk5OVlFWK2N0OFFRRFpINQpBRFIrSGM3Qk0wNDhURGhNTmhoR3JHc2tWNngwMCtMZTdISGdpT3h2NXJudkNlTlY2M001YUZHdFVWbllTN1VoCkE1NndaNVlZeFFnQ0xzNi9PRmZhK3NiTngrSjdnSjRjNXdMZVlJMXVPMTlzZHBHa2VHZ25vK3dXVmxDSzFCbW0KRGM0TXA2STRiUTVtdy93YVpLQnpjRTJLCi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0K" - badCrt := "ASD" - badKey := "ASD" - type args struct { - ctx context.Context - opClient OperatorClientI - clientSet K8sClientI - namespace string - params operator_api.TenantUpdateCertificateParams - mockTenantGet func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) - mockDeleteSecret func(ctx context.Context, namespace string, name string, opts metav1.DeleteOptions) error - mockCreateSecret func(ctx context.Context, namespace string, secret *v1.Secret, opts metav1.CreateOptions) (*v1.Secret, error) - mockDeletePodCollection func(ctx context.Context, namespace string, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error - } - tests := []struct { - name string - args args - wantErr bool - }{ - { - name: "error getting tenant information", - args: args{ - ctx: context.Background(), - opClient: opClient, - clientSet: k8sClient, - namespace: "", - params: operator_api.TenantUpdateCertificateParams{}, - mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return nil, errors.New("invalid tenant") - }, - }, - wantErr: true, - }, - { - name: "error replacing external certs for tenant because of empty keypair values", - args: args{ - ctx: context.Background(), - opClient: opClient, - clientSet: k8sClient, - namespace: "", - params: operator_api.TenantUpdateCertificateParams{ - Body: &models.TLSConfiguration{ - MinioServerCertificates: []*models.KeyPairConfiguration{ - { - Crt: nil, - Key: nil, - }, - }, - }, - }, - mockDeletePodCollection: func(ctx context.Context, namespace string, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { - return nil - }, - mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{ - Spec: miniov2.TenantSpec{ - ExternalCertSecret: []*miniov2.LocalCertificateReference{ - { - Name: "secret", - }, - }, - }, - }, nil - }, - }, - wantErr: true, - }, - { - name: "error replacing external certs for tenant because of malformed encoded certs", - args: args{ - ctx: context.Background(), - opClient: opClient, - clientSet: k8sClient, - namespace: "", - params: operator_api.TenantUpdateCertificateParams{ - Body: &models.TLSConfiguration{ - MinioServerCertificates: []*models.KeyPairConfiguration{ - { - Crt: &badCrt, - Key: &badKey, - }, - }, - }, - }, - mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{ - Spec: miniov2.TenantSpec{ - ExternalCertSecret: []*miniov2.LocalCertificateReference{ - { - Name: "secret", - }, - }, - }, - }, nil - }, - mockDeleteSecret: func(ctx context.Context, namespace string, name string, opts metav1.DeleteOptions) error { - return nil - }, - }, - wantErr: true, - }, - { - name: "error replacing external certs for tenant because of error during secret creation", - args: args{ - ctx: context.Background(), - opClient: opClient, - clientSet: k8sClient, - namespace: "", - params: operator_api.TenantUpdateCertificateParams{ - Body: &models.TLSConfiguration{ - MinioServerCertificates: []*models.KeyPairConfiguration{ - { - Crt: &crt, - Key: &key, - }, - }, - }, - }, - mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return &miniov2.Tenant{ - Spec: miniov2.TenantSpec{ - ExternalCertSecret: []*miniov2.LocalCertificateReference{ - { - Name: "secret", - }, - }, - }, - }, nil - }, - mockDeleteSecret: func(ctx context.Context, namespace string, name string, opts metav1.DeleteOptions) error { - return nil - }, - mockCreateSecret: func(ctx context.Context, namespace string, secret *v1.Secret, opts metav1.CreateOptions) (*v1.Secret, error) { - return nil, errors.New("error creating secret") - }, - }, - wantErr: true, - }, - } - for _, tt := range tests { - opClientTenantGetMock = tt.args.mockTenantGet - k8sClientDeleteSecretMock = tt.args.mockDeleteSecret - k8sClientCreateSecretMock = tt.args.mockCreateSecret - k8sClientDeletePodCollectionMock = tt.args.mockDeletePodCollection - t.Run(tt.name, func(t *testing.T) { - if err := tenantUpdateCertificates(tt.args.ctx, tt.args.opClient, tt.args.clientSet, tt.args.namespace, tt.args.params); (err != nil) != tt.wantErr { - t.Errorf("tenantUpdateCertificates() error = %v, wantErr %v", err, tt.wantErr) - } - }) - } -} - -func Test_tenantUpdateEncryption(t *testing.T) { - k8sClient := k8sClientMock{} - opClient := opClientMock{} - type args struct { - ctx context.Context - opClient OperatorClientI - clientSet K8sClientI - namespace string - params operator_api.TenantUpdateEncryptionParams - mockTenantGet func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) - mockDeleteSecret func(ctx context.Context, namespace string, name string, opts metav1.DeleteOptions) error - mockCreateSecret func(ctx context.Context, namespace string, secret *v1.Secret, opts metav1.CreateOptions) (*v1.Secret, error) - mockDeletePodCollection func(ctx context.Context, namespace string, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error - } - tests := []struct { - name string - args args - wantErr bool - }{ - { - name: "error updating encryption configuration because of error getting tenant", - args: args{ - ctx: context.Background(), - opClient: opClient, - clientSet: k8sClient, - namespace: "", - params: operator_api.TenantUpdateEncryptionParams{}, - mockTenantGet: func(ctx context.Context, namespace string, tenantName string, options metav1.GetOptions) (*miniov2.Tenant, error) { - return nil, errors.New("invalid tenant") - }, - }, - wantErr: true, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - opClientTenantGetMock = tt.args.mockTenantGet - k8sClientDeleteSecretMock = tt.args.mockDeleteSecret - k8sClientCreateSecretMock = tt.args.mockCreateSecret - k8sClientDeletePodCollectionMock = tt.args.mockDeletePodCollection - if err := tenantUpdateEncryption(tt.args.ctx, tt.args.opClient, tt.args.clientSet, tt.args.namespace, tt.args.params); (err != nil) != tt.wantErr { - t.Errorf("tenantUpdateEncryption() error = %v, wantErr %v", err, tt.wantErr) - } - }) - } -} - -func Test_createOrReplaceKesConfigurationSecrets(t *testing.T) { - k8sClient := k8sClientMock{} - crt := "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUUzRENDQTBTZ0F3SUJBZ0lRS0pDalNyK0xaMnJrYVo5ODAvZnV5akFOQmdrcWhraUc5dzBCQVFzRkFEQ0IKdFRFZU1Cd0dBMVVFQ2hNVmJXdGpaWEowSUdSbGRtVnNiM0J0Wlc1MElFTkJNVVV3UXdZRFZRUUxERHhoYkdWMgpjMnRBVEdWdWFXNXpMVTFoWTBKdmIyc3RVSEp2TG14dlkyRnNJQ2hNWlc1cGJpQkJiR1YyYzJ0cElFaDFaWEowCllTQkJjbWxoY3lreFREQktCZ05WQkFNTVEyMXJZMlZ5ZENCaGJHVjJjMnRBVEdWdWFXNXpMVTFoWTBKdmIyc3QKVUhKdkxteHZZMkZzSUNoTVpXNXBiaUJCYkdWMmMydHBJRWgxWlhKMFlTQkJjbWxoY3lrd0hoY05NVGt3TmpBeApNREF3TURBd1doY05NekF3T0RBeU1ERTFNekEzV2pCaU1TY3dKUVlEVlFRS0V4NXRhMk5sY25RZ1pHVjJaV3h2CmNHMWxiblFnWTJWeWRHbG1hV05oZEdVeE56QTFCZ05WQkFzTUxtRnNaWFp6YTBCMGFXWmhMbXh2WTJGc0lDaE0KWlc1cGJpQkJiR1YyYzJ0cElFaDFaWEowWVNCQmNtbGhjeWt3Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQgpEd0F3Z2dFS0FvSUJBUUM2dlhLVyswWmhJQUNycmpxTU9QZ3VSdGpSemk1L0VxK2JvZTJkQ1BpT3djdXo0WFlhCm1rVlcxSkhBS3VTc0I1UHE0QnFSRXFueUhYT0ZROWQ1bEFjRGNDYmhlTFRVb2h2ZkhOWW9SdWRrYkZ3RzAyOFQKdVMxTFNtcHU5VjhFU2Q0Q3BiOGRvUkcvUW8vRTF4RGk5STFhNVhoeUdHTTNsUFlYQU1HU1ZkWUNNNzh0M2ZLTwp0NFVlcEt6d2dFQ2NKRVg4MVFoem1ZT25ELysyazNxSVppZU9nOGFkbDNFUWV2eFBISXlXQ1JkaDJZTkZsRi9rCmEwTzQyRVl2NVNUT1N0dzI2TzMwTVRrcEg0dzRRZm9VV3BnZU93MDZyYTluRHdzV3VhMUZIaHlKZmxOanR1USsKU0NlaDdqTVlVUThYV1JkbXVHbzFRT0g5cjdDKy82L1JhMlZIQWdNQkFBR2pnYmt3Z2JZd0RnWURWUjBQQVFILwpCQVFEQWdXZ01CTUdBMVVkSlFRTU1Bb0dDQ3NHQVFVRkJ3TUJNQXdHQTFVZEV3RUIvd1FDTUFBd0h3WURWUjBqCkJCZ3dGb0FVNHg4NUIyeGVlQzg0UEdvM1dZVWwxRGVvZlFNd1lBWURWUjBSQkZrd1Y0SWpLaTV0YVc1cGJ5MWgKYkdWMmMyc3Ribk11YzNaakxtTnNkWE4wWlhJdWJHOWpZV3lDTUNvdWFHOXVaWGwzWld4c0xXaHNMbTFwYm1sdgpMV0ZzWlhaemF5MXVjeTV6ZG1NdVkyeDFjM1JsY2k1c2IyTmhiREFOQmdrcWhraUc5dzBCQVFzRkFBT0NBWUVBCnZnMFlIVGtzd3Z4NEE5ZXl0b1V3eTBOSFVjQXpuNy9BVCt3WEt6d3Fqa0RiS3hVYlFTMFNQVVI4SkVDMkpuUUgKU3pTNGFCNXRURVRYZUcrbHJZVU02b0RNcXlIalpUN1NJaW83OUNxOFloWWxORU9qMkhvaXdxalczZm10UU9kVApoVG1tS01lRnZleHo2cnRxbHp0cVdKa3kvOGd1MkMrMWw5UDFFUmhFNDZZY0puVmJ5REFTSGNvV2tiZVhFUGErCjNpNFd4bU1yMDlNZXFTNkFUb2NKanFBeEtYcURYWmlFZjRUVEp1ZTRBQ2s4WmhqaEtUUEV6RnQ3WllVaHY3dVoKdlZCOXhla2FqRzdMRU5kSHZncXVMRUxUV3czWkpBaXpSTU5KUUpzZU11LzdQN1NIeXRKTVJYdlVwd2R2dWhDOApKNm54aGRmUS91QVlQY1lHdlU5NUZPZ1NjWVZqNW1WQktXM0ZHbkl2YzZuamQ1OFhBSTE3dlk0K0ZZTnY4M2UxCm9mOGlxRFdWNTFyT1FlbG9FZFdmdHkvZTI2bXVWUUQzQlVjY2Z5SWpGYy9SeGNHdm5maUEwUm1uRDNkWFcyZ0oKUHFTd01ZZ3hxQndqMm1Qck5jdkFWY3BOeWRjTWJKOTFIOHRWY0ttRHMrY1NiV0tnblpmKzUvZm5yaTdmU3FLUQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" - key := "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2Z0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktnd2dnU2tBZ0VBQW9JQkFRQzZ2WEtXKzBaaElBQ3IKcmpxTU9QZ3VSdGpSemk1L0VxK2JvZTJkQ1BpT3djdXo0WFlhbWtWVzFKSEFLdVNzQjVQcTRCcVJFcW55SFhPRgpROWQ1bEFjRGNDYmhlTFRVb2h2ZkhOWW9SdWRrYkZ3RzAyOFR1UzFMU21wdTlWOEVTZDRDcGI4ZG9SRy9Rby9FCjF4RGk5STFhNVhoeUdHTTNsUFlYQU1HU1ZkWUNNNzh0M2ZLT3Q0VWVwS3p3Z0VDY0pFWDgxUWh6bVlPbkQvKzIKazNxSVppZU9nOGFkbDNFUWV2eFBISXlXQ1JkaDJZTkZsRi9rYTBPNDJFWXY1U1RPU3R3MjZPMzBNVGtwSDR3NApRZm9VV3BnZU93MDZyYTluRHdzV3VhMUZIaHlKZmxOanR1UStTQ2VoN2pNWVVROFhXUmRtdUdvMVFPSDlyN0MrCi82L1JhMlZIQWdNQkFBRUNnZ0VCQUlyTlVFUnJSM2ZmK3IraGhJRS93ekZhbGNUMUZWaDh3aXpUWXJQcnZCMFkKYlZvcVJzZ2xUVTdxTjkvM3dmc2dzdEROZk5IQ1pySEJOR0drK0orMDZMV2tnakhycjdXeFBUaE16ZDRvUGN4RwpRdTBMOGE5ZVlBMXJwY3NOOVc5Um5JU3BRSEk4aTkxM0V6Z0RoOWk2WCt0bFQyNjNNK0JYaDhlM1Z5cDNSTmhpCjZZUTQwcWJsNlQ0TUlyLzRSMGJmcFExZWVMNVNnbHB6Z1d6ZGs4WGtmc0E5YnRiU1RoMjZKRlBPUU1tMm5adkcKbjBlZm85TDZtaktwRW9rRWpTY1hWYTRZNHJaREZFYTVIbkpUSDBHblByQzU1cDhBb3BFN1c1M2RDT3lxd29CcQo4SWtZb2grcm1qTUZrOGc5VlRVYlcwVE9YVTFSY1E1Z0gxWS9jam5uVTRrQ2dZRUE4amw5ZEQyN2JaQ2ZaTW9jCjJYRThiYkJTaFVXTjRvaklKc1lHY2xyTjJDUEtUNmExaVhvS3BrTXdGNUdsODEzQURGR1pTbWtUSUFVQXRXQU8KNzZCcEpGUlVCZ1hmUXhSU0gyS1RaRldxbE5yekZPQjNsT3h2bFJ1amw5eE9ueStyWUhJWC9BOWNqQlp3a2orSAo3MDZRTExvS1ZFL2lMYy9DMlI5VzRLRVI3R3NDZ1lFQXhWd3FyM1JnUXhHUmpueG1zbDZtUW5DQ3k2MXFoUzUxCkJicDJzWldraFNTV0w0YzFDY0NDMnZ2ektPSmJkZ2NZQU43L05sTHgzWjlCZUFjTVZMUEVoc2NPalB6YUlneEMKczJ2UkdwQUFtYnRjWi9MVlpKaERWTjIrSHowRHhnRUtCa1JzQU5XTG51cGRoUWJBdlZuTkVsY29YVlo1cC9qcwp3U1BCelFoSklaVUNnWUJqTUlHY0dTOW9SWUhRRHlmVEx4aVV2bEI4ZktnR2JRYXhRZ1FmemVsZktnRE5yekhGCnN6RXJOblk2SUkxNVpCbWhzY1I1QVNBd3kzdW55a2N6ZjFldTVjMW1qZjhJQkFsQkN1ZmFmVzRWK0xiMEJKdFQKWTZLcHg2Q3RMaTBQNk1CZ0JUaW5JazgrbW0zTXBiRnZvSmRQaVh0elhTYjhwWWhmeXdLVGg4SEVNd0tCZ1FDUwpvR0VPTFpYKy9pUjRDYkI2d0pzaExWbmZYSjJSQ096a0xwNVVYV3IzaURFVWFvMWJDMjJzcUJjRnZ2WllmL2l6ClhQbWJNSkNGS1BhSTZDT2ZJbGZXRWptYlFaZ0dSN21lZDNISkhFZDE3NTg5azBvN0RHeXB0bnl6MUs3akFvNmkKRFY5NFZ5NytCLzBuQWRkY1ZrVm5aTjJXU3RMam1xcTY2NGZtZmt0bTZRS0JnQzBsMk5OVlFWK2N0OFFRRFpINQpBRFIrSGM3Qk0wNDhURGhNTmhoR3JHc2tWNngwMCtMZTdISGdpT3h2NXJudkNlTlY2M001YUZHdFVWbllTN1VoCkE1NndaNVlZeFFnQ0xzNi9PRmZhK3NiTngrSjdnSjRjNXdMZVlJMXVPMTlzZHBHa2VHZ25vK3dXVmxDSzFCbW0KRGM0TXA2STRiUTVtdy93YVpLQnpjRTJLCi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0K" - badCrt := "ASD" - badKey := "ASD" - appRole := "ASD" - appSecret := "ASD" - endpoint := "ASD" - type args struct { - ctx context.Context - clientSet K8sClientI - ns string - encryptionCfg *models.EncryptionConfiguration - kesConfigurationSecretName string - kesClientCertSecretName string - kesImage string - tenantName string - mockDeleteSecret func(ctx context.Context, namespace string, name string, opts metav1.DeleteOptions) error - mockCreateSecret func(ctx context.Context, namespace string, secret *v1.Secret, opts metav1.CreateOptions) (*v1.Secret, error) - } - tests := []struct { - name string - args args - want *v1.LocalObjectReference - want1 *miniov2.LocalCertificateReference - wantErr bool - }{ - { - name: "error decoding the client certificate", - args: args{ - ctx: context.Background(), - clientSet: k8sClient, - encryptionCfg: &models.EncryptionConfiguration{ - MinioMtls: &models.KeyPairConfiguration{ - Crt: &badCrt, - Key: &badKey, - }, - }, - ns: "default", - kesImage: "minio/kes:v0.22.3", - kesConfigurationSecretName: "test-secret", - kesClientCertSecretName: "test-client-secret", - tenantName: "test", - mockDeleteSecret: func(ctx context.Context, namespace string, name string, opts metav1.DeleteOptions) error { - return nil - }, - }, - want: nil, - want1: nil, - wantErr: true, - }, - { - name: "error because of malformed decoded certificate", - args: args{ - ctx: context.Background(), - clientSet: k8sClient, - encryptionCfg: &models.EncryptionConfiguration{ - MinioMtls: &models.KeyPairConfiguration{ - Crt: &key, // will cause an error because we are passing a private key as the public key - Key: &key, - }, - }, - ns: "default", - kesImage: "minio/kes:v0.22.3", - kesConfigurationSecretName: "test-secret", - kesClientCertSecretName: "test-client-secret", - tenantName: "test", - mockDeleteSecret: func(ctx context.Context, namespace string, name string, opts metav1.DeleteOptions) error { - return nil - }, - }, - want: nil, - want1: nil, - wantErr: true, - }, - { - name: "error because of malformed decoded certificate", - args: args{ - ctx: context.Background(), - clientSet: k8sClient, - encryptionCfg: &models.EncryptionConfiguration{ - MinioMtls: &models.KeyPairConfiguration{ - Crt: &crt, - Key: &key, - }, - KmsMtls: &models.EncryptionConfigurationAO1KmsMtls{ - Ca: crt, - Crt: crt, - Key: key, - }, - Vault: &models.VaultConfiguration{ - Approle: &models.VaultConfigurationApprole{ - Engine: "", - ID: &appRole, - Retry: 0, - Secret: &appSecret, - }, - Endpoint: &endpoint, - Engine: "", - Namespace: "", - Prefix: "", - Status: nil, - }, - }, - ns: "default", - kesImage: "minio/kes:v0.22.3", - kesConfigurationSecretName: "test-secret", - kesClientCertSecretName: "test-client-secret", - tenantName: "test", - mockDeleteSecret: func(ctx context.Context, namespace string, name string, opts metav1.DeleteOptions) error { - return nil - }, - mockCreateSecret: func(ctx context.Context, namespace string, secret *v1.Secret, opts metav1.CreateOptions) (*v1.Secret, error) { - return &v1.Secret{}, nil - }, - }, - want: &v1.LocalObjectReference{ - Name: "test-secret", - }, - want1: &miniov2.LocalCertificateReference{ - Name: "test-client-secret", - }, - wantErr: false, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - k8sClientDeleteSecretMock = tt.args.mockDeleteSecret - k8sClientCreateSecretMock = tt.args.mockCreateSecret - got, got1, err := createOrReplaceKesConfigurationSecrets(tt.args.ctx, tt.args.clientSet, tt.args.ns, tt.args.encryptionCfg, tt.args.kesConfigurationSecretName, tt.args.kesClientCertSecretName, tt.args.tenantName, tt.args.kesImage) - if (err != nil) != tt.wantErr { - t.Errorf("createOrReplaceKesConfigurationSecrets() error = %v, wantErr %v", err, tt.wantErr) - return - } - if !reflect.DeepEqual(got, tt.want) { - t.Errorf("createOrReplaceKesConfigurationSecrets() got = %v, want %v", got, tt.want) - } - if !reflect.DeepEqual(got1, tt.want1) { - t.Errorf("createOrReplaceKesConfigurationSecrets() got1 = %v, want %v", got1, tt.want1) - } - }) - } -} - -func Test_GetConfigVersion(t *testing.T) { - type args struct { - kesImage string - } - tests := []struct { - name string - args args - wantversion string - wantErr bool - }{ - { - name: "error unexpected KES config version", - args: args{ - kesImage: "minio/kes:v0.23.0", - }, - wantversion: KesConfigVersion3, - wantErr: false, - }, - { - name: "error unexpected KES config version", - args: args{ - kesImage: "minio/kes:v0.22.0", - }, - wantversion: KesConfigVersion2, - wantErr: false, - }, - { - name: "error unexpected KES config version", - args: args{ - kesImage: "minio/kes:v0.21.0", - }, - wantversion: KesConfigVersion1, - wantErr: false, - }, - { - name: "error unexpected KES config version", - args: args{ - kesImage: "minio/kes:2023-02-15T14-54-37Z", - }, - wantversion: KesConfigVersion1, - wantErr: false, - }, - { - name: "error unexpected KES config version", - args: args{ - kesImage: "minio/kes:2023-04-03T16-41-28Z", - }, - wantversion: KesConfigVersion2, - wantErr: false, - }, - { - name: "error unexpected KES config version", - args: args{ - kesImage: "minio/kes:2023-05-02T22-48-10Z", - }, - wantversion: KesConfigVersion2, - wantErr: false, - }, - { - name: "error unexpected KES config version", - args: args{ - kesImage: "minio/kes:2023-05-02T22-48-10Z-arm64", - }, - wantversion: KesConfigVersion2, - wantErr: false, - }, - { - name: "error unexpected KES config version", - args: args{ - kesImage: "minio/kes:2023-11-09T17-35-47Z", - }, - wantversion: KesConfigVersion3, - wantErr: false, - }, - { - name: "error unexpected KES config version", - args: args{ - kesImage: "minio/kes:2023-11-09T17-35-47Z-arm64", - }, - wantversion: KesConfigVersion3, - wantErr: false, - }, - - { - name: "error unexpected KES config version", - args: args{ - kesImage: "minio/kes:edge", - }, - wantversion: KesConfigVersion2, - wantErr: false, - }, - { - name: "error unexpected KES config version", - args: args{ - kesImage: "minio/kes:latest", - }, - wantversion: KesConfigVersion3, - wantErr: false, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got, err := GetKesConfigVersion(tt.args.kesImage) - if (err != nil) != tt.wantErr { - t.Errorf("GetKesConfigVersion() error = %v, wantErr %v", err, tt.wantErr) - return - } - if !reflect.DeepEqual(got, tt.wantversion) { - t.Errorf("GetKesConfigVersion() got = %v, want %v", got, tt.wantversion) - } - }) - } -} diff --git a/api/tls.go b/api/tls.go deleted file mode 100644 index 3f05679a278..00000000000 --- a/api/tls.go +++ /dev/null @@ -1,67 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "crypto/tls" - "net" - "net/http" - "time" -) - -// PrepareSTSClientTransport : -func PrepareSTSClientTransport(insecure bool) *http.Transport { - // This takes github.com/minio/madmin-go/v3/transport.go as an example - // - // DefaultTransport - this default transport is similar to - // http.DefaultTransport but with additional param DisableCompression - // is set to true to avoid decompressing content with 'gzip' encoding. - dialer := &net.Dialer{ - Timeout: 10 * time.Second, - KeepAlive: 15 * time.Second, - } - DefaultTransport := &http.Transport{ - Proxy: http.ProxyFromEnvironment, - DialContext: dialer.DialContext, - MaxIdleConns: 1024, - MaxIdleConnsPerHost: 1024, - IdleConnTimeout: 90 * time.Second, - TLSHandshakeTimeout: 10 * time.Second, - ExpectContinueTimeout: 10 * time.Second, - DisableCompression: true, - TLSClientConfig: &tls.Config{ - // Can't use SSLv3 because of POODLE and BEAST - // Can't use TLSv1.0 because of POODLE and BEAST using CBC cipher - // Can't use TLSv1.1 because of RC4 cipher usage - MinVersion: tls.VersionTLS12, - InsecureSkipVerify: insecure, - RootCAs: GlobalRootCAs, - }, - } - return DefaultTransport -} - -// PrepareConsoleHTTPClient returns an http.Client with custom configurations need it by *credentials.STSAssumeRole -// custom configurations include the use of CA certificates -func PrepareConsoleHTTPClient(insecure bool) *http.Client { - transport := PrepareSTSClientTransport(insecure) - // Return http client with default configuration - c := &http.Client{ - Transport: transport, - } - return c -} diff --git a/api/users-handlers.go b/api/users-handlers.go deleted file mode 100644 index 74a12416f23..00000000000 --- a/api/users-handlers.go +++ /dev/null @@ -1,95 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - - "github.com/go-openapi/runtime/middleware" - "github.com/minio/operator/api/operations" - "github.com/minio/operator/api/operations/operator_api" - "github.com/minio/operator/models" - miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" -) - -func registerUsersHandlers(api *operations.OperatorAPI) { - // Set Tenant Administrators - api.OperatorAPISetTenantAdministratorsHandler = operator_api.SetTenantAdministratorsHandlerFunc(func(params operator_api.SetTenantAdministratorsParams, session *models.Principal) middleware.Responder { - err := getSetTenantAdministratorsResponse(session, params) - if err != nil { - return operator_api.NewSetTenantAdministratorsDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewSetTenantAdministratorsNoContent() - }) -} - -func getSetTenantAdministratorsResponse(session *models.Principal, params operator_api.SetTenantAdministratorsParams) *models.Error { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - opClientClientSet, err := GetOperatorClient(session.STSSessionToken) - if err != nil { - return ErrorWithContext(ctx, err) - } - // get Kubernetes Client - clientSet, err := K8sClient(session.STSSessionToken) - if err != nil { - return ErrorWithContext(ctx, err) - } - k8sClient := &k8sClient{ - client: clientSet, - } - opClient := &operatorClient{ - client: opClientClientSet, - } - - minTenant, err := getTenant(ctx, opClient, params.Namespace, params.Tenant) - if err != nil { - return ErrorWithContext(ctx, err) - } - svcURL := GetTenantServiceURL(minTenant) - // getTenantAdminClient will use all certificates under ~/.console/certs/CAs to trust the TLS connections with MinIO tenants - mAdmin, err := getTenantAdminClient( - ctx, - k8sClient, - minTenant, - svcURL, - ) - if err != nil { - return ErrorWithContext(ctx, err) - } - - // create a minioClient interface implementation - // defining the client to be used - adminClient := AdminClient{Client: mAdmin} - return setTenantAdministrators(ctx, minTenant, k8sClient, adminClient, params) -} - -func setTenantAdministrators(ctx context.Context, minTenant *miniov2.Tenant, k8sClient K8sClientI, adminClient MinioAdmin, params operator_api.SetTenantAdministratorsParams) *models.Error { - minTenant.EnsureDefaults() - - for _, user := range params.Body.UserDNS { - if err := SetPolicy(ctx, adminClient, "consoleAdmin", user, "user"); err != nil { - return ErrorWithContext(ctx, err) - } - } - for _, group := range params.Body.GroupDNS { - if err := SetPolicy(ctx, adminClient, "consoleAdmin", group, "group"); err != nil { - return ErrorWithContext(ctx, err) - } - } - return nil -} diff --git a/api/utils.go b/api/utils.go deleted file mode 100644 index 6dc7c4686c8..00000000000 --- a/api/utils.go +++ /dev/null @@ -1,76 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "errors" - "fmt" - - miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// GetTenantConfiguration returns the config for a tenant -func GetTenantConfiguration(ctx context.Context, clientSet K8sClientI, tenant *miniov2.Tenant) (map[string]string, error) { - if tenant == nil { - return nil, errors.New("tenant cannot be nil") - } - tenantConfiguration := map[string]string{} - for _, config := range tenant.GetEnvVars() { - tenantConfiguration[config.Name] = config.Value - } - // legacy support for tenants with tenant.spec.credsSecret - if tenant.HasCredsSecret() { - minioSecret, err := clientSet.getSecret(ctx, tenant.Namespace, tenant.Spec.CredsSecret.Name, metav1.GetOptions{}) - if err != nil { - return nil, err - } - configFromCredsSecret := minioSecret.Data - for key, val := range configFromCredsSecret { - tenantConfiguration[key] = string(val) - } - } - if tenant.HasConfigurationSecret() { - minioConfigurationSecret, err := clientSet.getSecret(ctx, tenant.Namespace, tenant.Spec.Configuration.Name, metav1.GetOptions{}) - if err != nil { - return tenantConfiguration, err - } - if minioConfigurationSecret == nil { - return tenantConfiguration, errors.New("tenant configuration secret is empty") - } - configFromFile := miniov2.ParseRawConfiguration(minioConfigurationSecret.Data["config.env"]) - for key, val := range configFromFile { - tenantConfiguration[key] = string(val) - } - } - return tenantConfiguration, nil -} - -// GenerateTenantConfigurationFile generate config for tenant -func GenerateTenantConfigurationFile(configuration map[string]string) string { - var rawConfiguration string - for key, val := range configuration { - rawConfiguration += fmt.Sprintf("export %s=\"%s\"\n", key, val) - } - return rawConfiguration -} - -// Create a copy of a string and return its pointer -func stringPtr(str string) *string { - return &str -} diff --git a/api/utils_test.go b/api/utils_test.go deleted file mode 100644 index 9a101d0c9bb..00000000000 --- a/api/utils_test.go +++ /dev/null @@ -1,254 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2022 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "errors" - "testing" - - miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - "github.com/stretchr/testify/assert" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -func TestGetTenantConfiguration(t *testing.T) { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - kubernetesClient := k8sClientMock{} - type args struct { - ctx context.Context - clientSet K8sClientI - tenant *miniov2.Tenant - } - tests := []struct { - name string - args args - want map[string]string - mockGetSecret func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) - wantErr bool - }{ - { - name: "error because nil tenant", - args: args{ - ctx: ctx, - clientSet: kubernetesClient, - tenant: nil, - }, - mockGetSecret: func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - return nil, nil - }, - want: nil, - wantErr: true, - }, - { - name: "empty configuration map because no configuration secret is present", - args: args{ - ctx: ctx, - clientSet: kubernetesClient, - tenant: &miniov2.Tenant{}, - }, - mockGetSecret: func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - return nil, nil - }, - want: map[string]string{}, - wantErr: false, - }, - { - name: "empty configuration map because error while retrieving configuration secret", - args: args{ - ctx: ctx, - clientSet: kubernetesClient, - tenant: &miniov2.Tenant{ - Spec: miniov2.TenantSpec{ - Configuration: &corev1.LocalObjectReference{ - Name: "tenant-configuration-secret", - }, - }, - }, - }, - mockGetSecret: func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - return nil, errors.New("an error has occurred") - }, - want: map[string]string{}, - wantErr: true, - }, - { - name: "parsing tenant configuration from secret file", - args: args{ - ctx: ctx, - clientSet: kubernetesClient, - tenant: &miniov2.Tenant{ - Spec: miniov2.TenantSpec{ - Configuration: &corev1.LocalObjectReference{ - Name: "tenant-configuration-secret", - }, - }, - }, - }, - mockGetSecret: func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - return &corev1.Secret{Data: map[string][]byte{ - "config.env": []byte(` -export MINIO_ROOT_USER=minio -export MINIO_ROOT_PASSWORD=minio123 -export MINIO_CONSOLE_ADDRESS=:8080 -export MINIO_IDENTITY_LDAP_SERVER_ADDR=localhost:389 -export MINIO_IDENTITY_LDAP_LOOKUP_BIND_DN="cn=admin,dc=min,dc=io" -export MINIO_IDENTITY_LDAP_LOOKUP_BIND_PASSWORD="admin" -export MINIO_IDENTITY_LDAP_USER_DN_SEARCH_BASE_DN="dc=min,dc=io" -export MINIO_IDENTITY_LDAP_USER_DN_SEARCH_FILTER="(uid=%s)" -export MINIO_IDENTITY_LDAP_GROUP_SEARCH_BASE_DN="ou=swengg,dc=min,dc=io" -export MINIO_IDENTITY_LDAP_GROUP_SEARCH_FILTER="(&(objectclass=groupOfNames)(member=%d))" -export MINIO_IDENTITY_LDAP_SERVER_INSECURE="on" -`), - }}, nil - }, - want: map[string]string{ - "MINIO_ROOT_USER": "minio", - "MINIO_ROOT_PASSWORD": "minio123", - "MINIO_CONSOLE_ADDRESS": ":8080", - "accesskey": "minio", - "secretkey": "minio123", - "MINIO_IDENTITY_LDAP_SERVER_INSECURE": "on", - "MINIO_IDENTITY_LDAP_GROUP_SEARCH_FILTER": "(&(objectclass=groupOfNames)(member=%d))", - "MINIO_IDENTITY_LDAP_GROUP_SEARCH_BASE_DN": "ou=swengg,dc=min,dc=io", - "MINIO_IDENTITY_LDAP_USER_DN_SEARCH_FILTER": "(uid=%s)", - "MINIO_IDENTITY_LDAP_USER_DN_SEARCH_BASE_DN": "dc=min,dc=io", - "MINIO_IDENTITY_LDAP_LOOKUP_BIND_PASSWORD": "admin", - "MINIO_IDENTITY_LDAP_LOOKUP_BIND_DN": "cn=admin,dc=min,dc=io", - "MINIO_IDENTITY_LDAP_SERVER_ADDR": "localhost:389", - }, - wantErr: false, - }, - { - name: "parsing tenant configuration from secret file and environment variables", - args: args{ - ctx: ctx, - clientSet: kubernetesClient, - tenant: &miniov2.Tenant{ - Spec: miniov2.TenantSpec{ - Env: []corev1.EnvVar{ - { - Name: "MINIO_KMS_SECRET_KEY", - Value: "my-minio-key:OSMM+vkKUTCvQs9YL/CVMIMt43HFhkUpqJxTmGl6rYw=", - }, - }, - Configuration: &corev1.LocalObjectReference{ - Name: "tenant-configuration-secret", - }, - }, - }, - }, - mockGetSecret: func(ctx context.Context, namespace, secretName string, opts metav1.GetOptions) (*corev1.Secret, error) { - return &corev1.Secret{Data: map[string][]byte{ - "config.env": []byte(` -export MINIO_ROOT_USER=minio -export MINIO_ROOT_PASSWORD=minio123 -export MINIO_CONSOLE_ADDRESS=:8080 -export MINIO_IDENTITY_LDAP_SERVER_ADDR=localhost:389 -export MINIO_IDENTITY_LDAP_LOOKUP_BIND_DN="cn=admin,dc=min,dc=io" -export MINIO_IDENTITY_LDAP_LOOKUP_BIND_PASSWORD="admin" -export MINIO_IDENTITY_LDAP_USER_DN_SEARCH_BASE_DN="dc=min,dc=io" -export MINIO_IDENTITY_LDAP_USER_DN_SEARCH_FILTER="(uid=%s)" -export MINIO_IDENTITY_LDAP_GROUP_SEARCH_BASE_DN="ou=swengg,dc=min,dc=io" -export MINIO_IDENTITY_LDAP_GROUP_SEARCH_FILTER="(&(objectclass=groupOfNames)(member=%d))" -export MINIO_IDENTITY_LDAP_SERVER_INSECURE="on" -`), - }}, nil - }, - want: map[string]string{ - "MINIO_ROOT_USER": "minio", - "MINIO_ROOT_PASSWORD": "minio123", - "MINIO_CONSOLE_ADDRESS": ":8080", - "accesskey": "minio", - "secretkey": "minio123", - "MINIO_IDENTITY_LDAP_SERVER_INSECURE": "on", - "MINIO_IDENTITY_LDAP_GROUP_SEARCH_FILTER": "(&(objectclass=groupOfNames)(member=%d))", - "MINIO_IDENTITY_LDAP_GROUP_SEARCH_BASE_DN": "ou=swengg,dc=min,dc=io", - "MINIO_IDENTITY_LDAP_USER_DN_SEARCH_FILTER": "(uid=%s)", - "MINIO_IDENTITY_LDAP_USER_DN_SEARCH_BASE_DN": "dc=min,dc=io", - "MINIO_IDENTITY_LDAP_LOOKUP_BIND_PASSWORD": "admin", - "MINIO_IDENTITY_LDAP_LOOKUP_BIND_DN": "cn=admin,dc=min,dc=io", - "MINIO_IDENTITY_LDAP_SERVER_ADDR": "localhost:389", - "MINIO_KMS_SECRET_KEY": "my-minio-key:OSMM+vkKUTCvQs9YL/CVMIMt43HFhkUpqJxTmGl6rYw=", - }, - wantErr: false, - }, - } - for _, tt := range tests { - k8sclientGetSecretMock = tt.mockGetSecret - t.Run(tt.name, func(t *testing.T) { - got, err := GetTenantConfiguration(tt.args.ctx, tt.args.clientSet, tt.args.tenant) - if (err != nil) != tt.wantErr { - t.Errorf("GetTenantConfiguration(%v, %v, %v)", tt.args.ctx, tt.args.clientSet, tt.args.tenant) - } - assert.Equalf(t, tt.want, got, "GetTenantConfiguration(%v, %v, %v)", tt.args.ctx, tt.args.clientSet, tt.args.tenant) - }) - } -} - -func TestGenerateTenantConfigurationFile(t *testing.T) { - type args struct { - configuration map[string]string - } - tests := []struct { - name string - args args - want string - }{ - { - name: "convert configuration map into raw string", - args: args{ - configuration: map[string]string{ - "MINIO_ROOT_USER": "minio", - }, - }, - want: `export MINIO_ROOT_USER="minio" -`, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - assert.Equalf(t, tt.want, GenerateTenantConfigurationFile(tt.args.configuration), "GenerateTenantConfigurationFile(%v)", tt.args.configuration) - }) - } -} - -func Test_stringPtr(t *testing.T) { - type args struct { - str string - } - tests := []struct { - name string - args args - wantNil bool - }{ - { - name: "get a pointer", - args: args{ - str: "", - }, - wantNil: false, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - assert.NotNilf(t, stringPtr(tt.args.str), "stringPtr(%v)", tt.args.str) - }) - } -} diff --git a/api/version.go b/api/version.go deleted file mode 100644 index c51771959ec..00000000000 --- a/api/version.go +++ /dev/null @@ -1,58 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2022 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "net/http" - "time" - - xhttp "github.com/minio/operator/pkg/http" - - "github.com/go-openapi/runtime/middleware" - "github.com/minio/operator/api/operations" - "github.com/minio/operator/api/operations/user_api" - "github.com/minio/operator/models" - "github.com/minio/operator/pkg/utils" -) - -func registerVersionHandlers(api *operations.OperatorAPI) { - api.UserAPICheckMinIOVersionHandler = user_api.CheckMinIOVersionHandlerFunc(func(params user_api.CheckMinIOVersionParams) middleware.Responder { - versionResponse, err := getVersionResponse(params) - if err != nil { - return user_api.NewCheckMinIOVersionDefault(int(err.Code)).WithPayload(err) - } - return user_api.NewCheckMinIOVersionOK().WithPayload(versionResponse) - }) -} - -// getSessionResponse parse the token of the current session and returns a list of allowed actions to render in the UI -func getVersionResponse(params user_api.CheckMinIOVersionParams) (*models.CheckOperatorVersionResponse, *models.Error) { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - ver, err := utils.GetLatestMinIOImage(&xhttp.Client{ - Client: &http.Client{ - Timeout: 15 * time.Second, - }, - }) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - return &models.CheckOperatorVersionResponse{ - LatestVersion: *ver, - }, nil -} diff --git a/api/volumes.go b/api/volumes.go deleted file mode 100644 index 3cdfe7abd14..00000000000 --- a/api/volumes.go +++ /dev/null @@ -1,341 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "fmt" - "sort" - - miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - - "github.com/go-openapi/runtime/middleware" - "github.com/minio/operator/api/operations" - "github.com/minio/operator/api/operations/operator_api" - "github.com/minio/operator/models" - v1 "k8s.io/api/certificates/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -func registerVolumesHandlers(api *operations.OperatorAPI) { - api.OperatorAPIListPVCsHandler = operator_api.ListPVCsHandlerFunc(func(params operator_api.ListPVCsParams, session *models.Principal) middleware.Responder { - payload, err := getPVCsResponse(session, params) - if err != nil { - return operator_api.NewListPVCsDefault(int(err.Code)).WithPayload(err) - } - - return operator_api.NewListPVCsOK().WithPayload(payload) - }) - - api.OperatorAPIListPVCsForTenantHandler = operator_api.ListPVCsForTenantHandlerFunc(func(params operator_api.ListPVCsForTenantParams, session *models.Principal) middleware.Responder { - payload, err := getPVCsForTenantResponse(session, params) - if err != nil { - return operator_api.NewListPVCsForTenantDefault(int(err.Code)).WithPayload(err) - } - - return operator_api.NewListPVCsForTenantOK().WithPayload(payload) - }) - - api.OperatorAPIListTenantCertificateSigningRequestHandler = operator_api.ListTenantCertificateSigningRequestHandlerFunc(func(params operator_api.ListTenantCertificateSigningRequestParams, session *models.Principal) middleware.Responder { - payload, err := getTenantCSResponse(session, params) - if err != nil { - return operator_api.NewListTenantCertificateSigningRequestDefault(int(err.Code)).WithPayload(err) - } - - return operator_api.NewListTenantCertificateSigningRequestOK().WithPayload(payload) - }) - - api.OperatorAPIDeletePVCHandler = operator_api.DeletePVCHandlerFunc(func(params operator_api.DeletePVCParams, session *models.Principal) middleware.Responder { - err := getDeletePVCResponse(session, params) - if err != nil { - return operator_api.NewDeletePVCDefault(int(err.Code)).WithPayload(err) - } - return nil - }) - - api.OperatorAPIGetPVCEventsHandler = operator_api.GetPVCEventsHandlerFunc(func(params operator_api.GetPVCEventsParams, session *models.Principal) middleware.Responder { - payload, err := getPVCEventsResponse(session, params) - if err != nil { - return operator_api.NewGetPVCEventsDefault(int(err.Code)).WithPayload(err) - } - - return operator_api.NewGetPVCEventsOK().WithPayload(payload) - }) - - api.OperatorAPIGetPVCDescribeHandler = operator_api.GetPVCDescribeHandlerFunc(func(params operator_api.GetPVCDescribeParams, session *models.Principal) middleware.Responder { - payload, err := getPVCDescribeResponse(session, params) - if err != nil { - return operator_api.NewGetPVCDescribeDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewGetPVCDescribeOK().WithPayload(payload) - }) -} - -func getPVCsResponse(session *models.Principal, params operator_api.ListPVCsParams) (*models.ListPVCsResponse, *models.Error) { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - clientset, err := K8sClient(session.STSSessionToken) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - - // Filter Tenant PVCs. They keep their v1 tenant annotation - listOpts := metav1.ListOptions{ - LabelSelector: miniov2.TenantLabel, - } - - // List all PVCs - listAllPvcs, err2 := clientset.CoreV1().PersistentVolumeClaims("").List(ctx, listOpts) - - if err2 != nil { - return nil, ErrorWithContext(ctx, err2) - } - - var ListPVCs []*models.PvcsListResponse - - for _, pvc := range listAllPvcs.Items { - status := string(pvc.Status.Phase) - if pvc.DeletionTimestamp != nil { - status = "Terminating" - } - pvcResponse := models.PvcsListResponse{ - Name: pvc.Name, - Age: pvc.CreationTimestamp.String(), - Capacity: pvc.Status.Capacity.Storage().String(), - Namespace: pvc.Namespace, - Status: status, - StorageClass: *pvc.Spec.StorageClassName, - Volume: pvc.Spec.VolumeName, - Tenant: pvc.Labels[miniov2.TenantLabel], - } - ListPVCs = append(ListPVCs, &pvcResponse) - } - - PVCsResponse := models.ListPVCsResponse{ - Pvcs: ListPVCs, - } - - return &PVCsResponse, nil -} - -func getPVCsForTenantResponse(session *models.Principal, params operator_api.ListPVCsForTenantParams) (*models.ListPVCsResponse, *models.Error) { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - clientset, err := K8sClient(session.STSSessionToken) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - - // Filter Tenant PVCs. They keep their v1 tenant annotation - listOpts := metav1.ListOptions{ - LabelSelector: fmt.Sprintf("%s=%s", miniov2.TenantLabel, params.Tenant), - } - - // List all PVCs - listAllPvcs, err2 := clientset.CoreV1().PersistentVolumeClaims(params.Namespace).List(ctx, listOpts) - - if err2 != nil { - return nil, ErrorWithContext(ctx, err2) - } - - var ListPVCs []*models.PvcsListResponse - - for _, pvc := range listAllPvcs.Items { - status := string(pvc.Status.Phase) - if pvc.DeletionTimestamp != nil { - status = "Terminating" - } - pvcResponse := models.PvcsListResponse{ - Name: pvc.Name, - Age: pvc.CreationTimestamp.String(), - Capacity: pvc.Status.Capacity.Storage().String(), - Namespace: pvc.Namespace, - Status: status, - StorageClass: *pvc.Spec.StorageClassName, - Volume: pvc.Spec.VolumeName, - Tenant: pvc.Labels[miniov2.TenantLabel], - } - ListPVCs = append(ListPVCs, &pvcResponse) - } - - PVCsResponse := models.ListPVCsResponse{ - Pvcs: ListPVCs, - } - - return &PVCsResponse, nil -} - -func getDeletePVCResponse(session *models.Principal, params operator_api.DeletePVCParams) *models.Error { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - // get Kubernetes Client - clientset, err := K8sClient(session.STSSessionToken) - if err != nil { - return ErrorWithContext(ctx, err) - } - listOpts := metav1.ListOptions{ - LabelSelector: fmt.Sprintf("%s=%s", miniov2.TenantLabel, params.Tenant), - FieldSelector: fmt.Sprintf("metadata.name=%s", params.PVCName), - } - if err = clientset.CoreV1().PersistentVolumeClaims(params.Namespace).DeleteCollection(ctx, metav1.DeleteOptions{}, listOpts); err != nil { - return ErrorWithContext(ctx, err) - } - return nil -} - -func getPVCEventsResponse(session *models.Principal, params operator_api.GetPVCEventsParams) (models.EventListWrapper, *models.Error) { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - clientset, err := K8sClient(session.STSSessionToken) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - PVC, err := clientset.CoreV1().PersistentVolumeClaims(params.Namespace).Get(ctx, params.PVCName, metav1.GetOptions{}) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - events, err := clientset.CoreV1().Events(params.Namespace).List(ctx, metav1.ListOptions{FieldSelector: fmt.Sprintf("involvedObject.uid=%s", PVC.UID)}) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - retval := models.EventListWrapper{} - for i := 0; i < len(events.Items); i++ { - retval = append(retval, &models.EventListElement{ - Namespace: events.Items[i].Namespace, - LastSeen: events.Items[i].LastTimestamp.Unix(), - Message: events.Items[i].Message, - EventType: events.Items[i].Type, - Reason: events.Items[i].Reason, - }) - } - sort.SliceStable(retval, func(i int, j int) bool { - return retval[i].LastSeen < retval[j].LastSeen - }) - return retval, nil -} - -func getTenantCSResponse(session *models.Principal, params operator_api.ListTenantCertificateSigningRequestParams) (*models.CsrElements, *models.Error) { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - clientset, err := K8sClient(session.STSSessionToken) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - - // Get CSRs by Label "v1.min.io/tenant=" + params.Tenant - listByTenantLabel := metav1.ListOptions{LabelSelector: fmt.Sprintf("%s=%s", miniov2.TenantLabel, params.Tenant)} - listResult, listError := clientset.CertificatesV1().CertificateSigningRequests().List(ctx, listByTenantLabel) - if listError != nil { - return nil, ErrorWithContext(ctx, listError) - } - - // Get CSR by label "v1.min.io/kes=" + params.Tenant + "-kes" - listByKESLabel := metav1.ListOptions{LabelSelector: "v1.min.io/kes=" + params.Tenant + "-kes"} - listKESResult, listKESError := clientset.CertificatesV1().CertificateSigningRequests().List(ctx, listByKESLabel) - if listKESError != nil { - return nil, ErrorWithContext(ctx, listKESError) - } - - var listOfCSRs []v1.CertificateSigningRequest - for index := 0; index < len(listResult.Items); index++ { - listOfCSRs = append(listOfCSRs, listResult.Items[index]) - } - for index := 0; index < len(listKESResult.Items); index++ { - listOfCSRs = append(listOfCSRs, listKESResult.Items[index]) - } - - var arrayElements []*models.CsrElement - for index := 0; index < len(listOfCSRs); index++ { - csrResult := listOfCSRs[index] - annotations := []*models.Annotation{} - for k, v := range csrResult.ObjectMeta.Annotations { - annotations = append(annotations, &models.Annotation{Key: k, Value: v}) - } - var DeletionGracePeriodSeconds int64 - DeletionGracePeriodSeconds = 0 - if csrResult.ObjectMeta.DeletionGracePeriodSeconds != nil { - DeletionGracePeriodSeconds = *csrResult.ObjectMeta.DeletionGracePeriodSeconds - } - messages := "" - // A CSR.Status can contain multiple Conditions - for i := 0; i < len(csrResult.Status.Conditions); i++ { - messages = messages + " " + csrResult.Status.Conditions[i].Message - } - retval := &models.CsrElement{ - Name: csrResult.ObjectMeta.Name, - Annotations: annotations, - DeletionGracePeriodSeconds: DeletionGracePeriodSeconds, - GenerateName: csrResult.ObjectMeta.GenerateName, - Generation: csrResult.ObjectMeta.Generation, - Namespace: csrResult.ObjectMeta.Namespace, - ResourceVersion: csrResult.ObjectMeta.ResourceVersion, - Status: messages, - } - arrayElements = append(arrayElements, retval) - } - result := &models.CsrElements{CsrElement: arrayElements} - return result, nil -} - -func getPVCDescribeResponse(session *models.Principal, params operator_api.GetPVCDescribeParams) (*models.DescribePVCWrapper, *models.Error) { - clientSet, err := K8sClient(session.STSSessionToken) - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - k8sClient := k8sClient{client: clientSet} - return getPVCDescribe(ctx, params.Namespace, params.PVCName, &k8sClient) -} - -func getPVCDescribe(ctx context.Context, namespace string, pvcName string, clientSet K8sClientI) (*models.DescribePVCWrapper, *models.Error) { - pvc, err := clientSet.getPVC(ctx, namespace, pvcName, metav1.GetOptions{}) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - accessModes := []string{} - for _, a := range pvc.Status.AccessModes { - accessModes = append(accessModes, string(a)) - } - return &models.DescribePVCWrapper{ - Name: pvc.Name, - Namespace: pvc.Namespace, - StorageClass: *pvc.Spec.StorageClassName, - Status: string(pvc.Status.Phase), - Volume: pvc.Spec.VolumeName, - Labels: castLabels(pvc.Labels), - Annotations: castAnnotations(pvc.Annotations), - Finalizers: pvc.Finalizers, - Capacity: pvc.Status.Capacity.Storage().String(), - AccessModes: accessModes, - VolumeMode: string(*pvc.Spec.VolumeMode), - }, nil -} - -func castLabels(labelsToCast map[string]string) (labels []*models.Label) { - for k, v := range labelsToCast { - labels = append(labels, &models.Label{Key: k, Value: v}) - } - return labels -} - -func castAnnotations(annotationsToCast map[string]string) (annotations []*models.Annotation) { - for k, v := range annotationsToCast { - annotations = append(annotations, &models.Annotation{Key: k, Value: v}) - } - return annotations -} diff --git a/api/volumes_test.go b/api/volumes_test.go deleted file mode 100644 index d044c53993d..00000000000 --- a/api/volumes_test.go +++ /dev/null @@ -1,81 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "context" - "errors" - "testing" - - v1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -var ( - getPVCWithError = true - pvcMockName = "mockName" - pvcMockNamespace = "mockNamespace" -) - -func (c k8sClientMock) getPVC(ctx context.Context, namespace string, pvcName string, opts metav1.GetOptions) (*v1.PersistentVolumeClaim, error) { - if getPVCWithError { - return nil, errors.New("Mock error during getPVC") - } - return createMockPVC(pvcMockName, pvcMockNamespace), nil -} - -var testCasesGetPVCDescribe = []struct { - name string - errorExpected bool -}{ - { - name: "Successful getPVCDescribe", - errorExpected: false, - }, - { - name: "Error getPVCDescribe", - errorExpected: true, - }, -} - -func TestGetPVCDescribe(t *testing.T) { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - client := k8sClientMock{} - for _, tt := range testCasesGetPVCDescribe { - t.Run(tt.name, func(t *testing.T) { - getPVCWithError = tt.errorExpected - pvc, err := getPVCDescribe(ctx, pvcMockNamespace, pvcMockName, client) - if err != nil { - if tt.errorExpected { - return - } - t.Errorf("getPVCDescribe() error = %v, errorExpected %v", err, tt.errorExpected) - } - if pvc == nil { - t.Errorf("getPVCDescribe() expected type: *v1.PersistentVolumeClaim, got: nil") - return - } - if pvc.Name != pvcMockName { - t.Errorf("Expected pvc name %s got %s", pvc.Name, pvcMockName) - } - if pvc.Namespace != pvcMockNamespace { - t.Errorf("Expected pvc namespace %s got %s", pvc.Namespace, pvcMockNamespace) - } - }) - } -} diff --git a/api/yaml-handlers.go b/api/yaml-handlers.go deleted file mode 100644 index 1d9fedd7faa..00000000000 --- a/api/yaml-handlers.go +++ /dev/null @@ -1,145 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package api - -import ( - "bytes" - "context" - "encoding/json" - "fmt" - - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/swag" - "github.com/minio/operator/api/operations" - "github.com/minio/operator/api/operations/operator_api" - "github.com/minio/operator/models" - miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/serializer" - k8sJson "k8s.io/apimachinery/pkg/runtime/serializer/json" -) - -func registerYAMLHandlers(api *operations.OperatorAPI) { - // Get Tenant YAML - api.OperatorAPIGetTenantYAMLHandler = operator_api.GetTenantYAMLHandlerFunc(func(params operator_api.GetTenantYAMLParams, principal *models.Principal) middleware.Responder { - payload, err := getTenantYAML(principal, params) - if err != nil { - return operator_api.NewGetTenantYAMLDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewGetTenantYAMLOK().WithPayload(payload) - }) - // Update Tenant YAML - api.OperatorAPIPutTenantYAMLHandler = operator_api.PutTenantYAMLHandlerFunc(func(params operator_api.PutTenantYAMLParams, principal *models.Principal) middleware.Responder { - err := getUpdateTenantYAML(principal, params) - if err != nil { - return operator_api.NewPutTenantYAMLDefault(int(err.Code)).WithPayload(err) - } - return operator_api.NewPutTenantYAMLCreated() - }) -} - -func getTenantYAML(session *models.Principal, params operator_api.GetTenantYAMLParams) (*models.TenantYAML, *models.Error) { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - // get Kubernetes Client - opClient, err := GetOperatorClient(session.STSSessionToken) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - tenant, err := opClient.MinioV2().Tenants(params.Namespace).Get(params.HTTPRequest.Context(), params.Tenant, metav1.GetOptions{}) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - // remove managed fields - tenant.ManagedFields = []metav1.ManagedFieldsEntry{} - // yb, err := yaml.Marshal(tenant) - j8sJSONSerializer := k8sJson.NewSerializerWithOptions( - k8sJson.DefaultMetaFactory, nil, nil, - k8sJson.SerializerOptions{ - Yaml: true, - Pretty: true, - Strict: true, - }, - ) - buf := new(bytes.Buffer) - - err = j8sJSONSerializer.Encode(tenant, buf) - if err != nil { - return nil, ErrorWithContext(ctx, err) - } - - yb := buf.String() - - x, _ := json.Marshal(tenant) - fmt.Println(string(x)) - - return &models.TenantYAML{Yaml: yb}, nil -} - -func getUpdateTenantYAML(session *models.Principal, params operator_api.PutTenantYAMLParams) *models.Error { - ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) - defer cancel() - // https://godoc.org/k8s.io/apimachinery/pkg/runtime#Scheme - scheme := runtime.NewScheme() - - // https://godoc.org/k8s.io/apimachinery/pkg/runtime/serializer#CodecFactory - codecFactory := serializer.NewCodecFactory(scheme) - - // https://godoc.org/k8s.io/apimachinery/pkg/runtime#Decoder - deserializer := codecFactory.UniversalDeserializer() - - tenantObject, _, err := deserializer.Decode([]byte(params.Body.Yaml), nil, &miniov2.Tenant{}) - if err != nil { - return &models.Error{Code: 400, Message: swag.String(err.Error())} - } - inTenant := tenantObject.(*miniov2.Tenant) - // check the inTenant if have the same poolName - poolNameMapSet := make(map[string]struct{}) - for _, pool := range inTenant.Spec.Pools { - if _, ok := poolNameMapSet[pool.Name]; ok { - return &models.Error{Code: 400, Message: swag.String(fmt.Sprintf("Tenant %s have pool named '%s' already", inTenant.Name, pool.Name))} - } - poolNameMapSet[pool.Name] = struct{}{} - } - if len(poolNameMapSet) == 0 { - return &models.Error{Code: 400, Message: swag.String(fmt.Sprintf("Tenant %s must have one pool at least!", inTenant.Name))} - } - // get Kubernetes Client - opClient, err := GetOperatorClient(session.STSSessionToken) - if err != nil { - return ErrorWithContext(ctx, err) - } - - tenant, err := opClient.MinioV2().Tenants(params.Namespace).Get(params.HTTPRequest.Context(), params.Tenant, metav1.GetOptions{}) - if err != nil { - return ErrorWithContext(ctx, err) - } - upTenant := tenant.DeepCopy() - // only update safe fields: spec, metadata.finalizers, metadata.labels and metadata.annotations - upTenant.Labels = inTenant.Labels - upTenant.Annotations = inTenant.Annotations - upTenant.Finalizers = inTenant.Finalizers - upTenant.Spec = inTenant.Spec - - _, err = opClient.MinioV2().Tenants(upTenant.Namespace).Update(params.HTTPRequest.Context(), upTenant, metav1.UpdateOptions{}) - if err != nil { - return &models.Error{Code: 400, Message: swag.String(err.Error())} - } - - return nil -} diff --git a/cmd/operator/app_commands.go b/cmd/operator/app_commands.go index 1923f0aaefd..f1f02c02fc5 100644 --- a/cmd/operator/app_commands.go +++ b/cmd/operator/app_commands.go @@ -20,5 +20,4 @@ import ( var appCmds = []cli.Command{ controllerCmd, - uiCmd, } diff --git a/cmd/operator/main.go b/cmd/operator/main.go index 30ed36b089e..65c1b61b59b 100644 --- a/cmd/operator/main.go +++ b/cmd/operator/main.go @@ -103,7 +103,7 @@ func newApp(name string) *cli.App { app.Commands = commands app.HideHelpCommand = true // Hide `help, h` command, we already have `minio --help`. app.CustomAppHelpTemplate = operatorHelpTemplate - app.CommandNotFound = func(ctx *cli.Context, command string) { + app.CommandNotFound = func(_ *cli.Context, command string) { console.Printf("‘%s’ is not a console sub-command. See ‘console --help’.\n", command) closestCommands := findClosestCommands(command) if len(closestCommands) > 0 { diff --git a/cmd/operator/ui.go b/cmd/operator/ui.go deleted file mode 100644 index 17e034b392d..00000000000 --- a/cmd/operator/ui.go +++ /dev/null @@ -1,247 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2022 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package main - -import ( - "context" - "fmt" - "io/ioutil" - "path/filepath" - "strconv" - "syscall" - "time" - - "github.com/minio/operator/api" - - "github.com/minio/operator/pkg/logger" - - "github.com/go-openapi/loads" - "github.com/jessevdk/go-flags" - "github.com/minio/cli" - "github.com/minio/operator/api/operations" - "github.com/minio/operator/pkg/certs" -) - -// starts the server -var uiCmd = cli.Command{ - Name: "ui", - Usage: "Start MinIO Operator UI server", - Action: startOperatorServer, - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "host", - Value: api.GetHostname(), - Usage: "bind to a specific HOST, HOST can be an IP or hostname", - }, - cli.IntFlag{ - Name: "port", - Value: api.GetPort(), - Usage: "bind to specific HTTP port", - }, - // This is kept here for backward compatibility, - // hostname's do not have HTTP or HTTPs - // hostnames are opaque so using --host - // works for both HTTP and HTTPS setup. - cli.StringFlag{ - Name: "tls-host", - Value: api.GetHostname(), - Hidden: true, - }, - cli.StringFlag{ - Name: "certs-dir", - Value: certs.GlobalCertsCADir.Get(), - Usage: "path to certs directory", - }, - cli.IntFlag{ - Name: "tls-port", - Value: api.GetTLSPort(), - Usage: "bind to specific HTTPS port", - }, - cli.StringFlag{ - Name: "tls-redirect", - Value: api.GetTLSRedirect(), - Usage: "toggle HTTP->HTTPS redirect", - }, - cli.StringFlag{ - Name: "tls-certificate", - Value: "", - Usage: "path to TLS public certificate", - Hidden: true, - }, - cli.StringFlag{ - Name: "tls-key", - Value: "", - Usage: "path to TLS private key", - Hidden: true, - }, - cli.StringFlag{ - Name: "tls-ca", - Value: "", - Usage: "path to TLS Certificate Authority", - Hidden: true, - }, - }, -} - -func buildOperatorServer() (*api.Server, error) { - swaggerSpec, err := loads.Embedded(api.SwaggerJSON, api.FlatSwaggerJSON) - if err != nil { - return nil, err - } - - subPath := api.GetSubPath() - swaggerSpec.Spec().BasePath = subPath + swaggerSpec.Spec().BasePath - swaggerSpec.OrigSpec().BasePath = subPath + swaggerSpec.OrigSpec().BasePath - - operatorapi := operations.NewOperatorAPI(swaggerSpec) - operatorapi.Logger = api.LogInfo - server := api.NewServer(operatorapi) - - parser := flags.NewParser(server, flags.Default) - parser.ShortDescription = "MinIO Operator Server" - parser.LongDescription = swaggerSpec.Spec().Info.Description - - server.ConfigureFlags() - - // register all APIs - server.ConfigureAPI() - - for _, optsGroup := range operatorapi.CommandLineOptionsGroups { - _, err := parser.AddGroup(optsGroup.ShortDescription, optsGroup.LongDescription, optsGroup.Options) - if err != nil { - return nil, err - } - } - - if _, err := parser.Parse(); err != nil { - return nil, err - } - - return server, nil -} - -// StartServer starts the console service -func startOperatorServer(ctx *cli.Context) error { - if err := loadAllCerts(ctx); err != nil { - // Log this as a warning and continue running console without TLS certificates - api.LogError("Unable to load certs: %v", err) - } - - xctx := context.Background() - transport := api.PrepareSTSClientTransport(false) - if err := logger.InitializeLogger(xctx, transport); err != nil { - fmt.Println("error InitializeLogger", err) - logger.CriticalIf(xctx, err) - } - // custom error configuration - api.LogInfo = logger.Info - api.LogError = logger.Error - api.LogIf = logger.LogIf - - var rctx api.Context - if err := rctx.Load(ctx); err != nil { - api.LogError("argument validation failed: %v", err) - return err - } - - server, err := buildOperatorServer() - if err != nil { - api.LogError("Unable to initialize console server: %v", err) - return err - } - - server.Host = rctx.Host - server.Port = rctx.HTTPPort - // set conservative timesout for uploads - server.ReadTimeout = 1 * time.Hour - // no timeouts for response for downloads - server.WriteTimeout = 0 - api.Port = strconv.Itoa(server.Port) - api.Hostname = server.Host - - if len(api.GlobalPublicCerts) > 0 { - // If TLS certificates are provided enforce the HTTPS schema, meaning console will redirect - // plain HTTP connections to HTTPS server - server.EnabledListeners = []string{"http", "https"} - server.TLSPort = rctx.HTTPSPort - // Need to store tls-port, tls-host un config variables so secure.middleware can read from there - api.TLSPort = strconv.Itoa(server.TLSPort) - api.Hostname = rctx.Host - api.TLSRedirect = rctx.TLSRedirect - } - - defer server.Shutdown() - - if err = server.Serve(); err != nil { - server.Logf("error serving API: %v", err) - return err - } - - return nil -} - -func loadAllCerts(ctx *cli.Context) error { - var err error - // Set all certs and CAs directories path - certs.GlobalCertsDir, _, err = certs.NewConfigDirFromCtx(ctx, "certs-dir", certs.DefaultCertsDir.Get) - if err != nil { - return err - } - - certs.GlobalCertsCADir = &certs.ConfigDir{Path: filepath.Join(certs.GlobalCertsDir.Get(), certs.CertsCADir)} - // check if certs and CAs directories exists or can be created - if err = certs.MkdirAllIgnorePerm(certs.GlobalCertsCADir.Get()); err != nil { - return fmt.Errorf("unable to create certs CA directory at %s: failed with %w", certs.GlobalCertsCADir.Get(), err) - } - - // load the certificates and the CAs - api.GlobalRootCAs, api.GlobalPublicCerts, api.GlobalTLSCertsManager, err = certs.GetAllCertificatesAndCAs() - if err != nil { - return fmt.Errorf("unable to load certificates at %s: failed with %w", certs.GlobalCertsDir.Get(), err) - } - - { - // TLS flags from swagger server, used to support VMware vsphere operator version. - swaggerServerCertificate := ctx.String("tls-certificate") - swaggerServerCertificateKey := ctx.String("tls-key") - swaggerServerCACertificate := ctx.String("tls-ca") - // load tls cert and key from swagger server tls-certificate and tls-key flags - if swaggerServerCertificate != "" && swaggerServerCertificateKey != "" { - if err = api.GlobalTLSCertsManager.AddCertificate(swaggerServerCertificate, swaggerServerCertificateKey); err != nil { - return err - } - x509Certs, err := certs.ParsePublicCertFile(swaggerServerCertificate) - if err == nil { - api.GlobalPublicCerts = append(api.GlobalPublicCerts, x509Certs...) - } - } - - // load ca cert from swagger server tls-ca flag - if swaggerServerCACertificate != "" { - caCert, caCertErr := ioutil.ReadFile(swaggerServerCACertificate) - if caCertErr == nil { - api.GlobalRootCAs.AppendCertsFromPEM(caCert) - } - } - } - - if api.GlobalTLSCertsManager != nil { - api.GlobalTLSCertsManager.ReloadOnSignal(syscall.SIGHUP) - } - - return nil -} diff --git a/helm/operator/templates/console-clusterrole.yaml b/helm/operator/templates/console-clusterrole.yaml deleted file mode 100644 index 44f0f87355f..00000000000 --- a/helm/operator/templates/console-clusterrole.yaml +++ /dev/null @@ -1,284 +0,0 @@ -{{- if .Values.console.enabled }} -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: console-sa-role - labels: {{- include "minio-operator.console-labels" . | nindent 4 }} -rules: - - apiGroups: - - "" - resources: - - secrets - verbs: - - get - - list - - watch - {{- if not .Values.console.readOnly }} - - create - - patch - - update - - delete - - deletecollection - {{- end }} - - apiGroups: - - "" - resources: - - namespaces - - services - - events - - resourcequotas - - nodes - verbs: - - get - - list - - watch - {{- if not .Values.console.readOnly }} - - create - - patch - {{- end }} - - apiGroups: - - "" - resources: - - pods - verbs: - - get - - list - - watch - {{- if not .Values.console.readOnly }} - - create - - patch - - delete - - deletecollection - {{- end }} - - apiGroups: - - "" - resources: - - persistentvolumeclaims - verbs: - - get - - list - - watch - {{- if not .Values.console.readOnly }} - - update - - deletecollection - {{- end }} - - apiGroups: - - storage.k8s.io - resources: - - storageclasses - verbs: - - get - - list - - watch - {{- if not .Values.console.readOnly }} - - create - - patch - {{- end }} - - apiGroups: - - apps - resources: - - statefulsets - - deployments - verbs: - - get - - list - - watch - {{- if not .Values.console.readOnly }} - - create - - patch - - update - - delete - {{- end }} - - apiGroups: - - batch - resources: - - jobs - verbs: - - get - - list - - watch - {{- if not .Values.console.readOnly }} - - create - - patch - - update - - delete - {{- end }} - - apiGroups: - - certificates.k8s.io - resources: - - certificatesigningrequests - - certificatesigningrequests/approval - - certificatesigningrequests/status - verbs: - - get - - list - {{- if not .Values.console.readOnly }} - - update - - create - - delete - {{- end }} - - apiGroups: - - minio.min.io - resources: - - '*' - verbs: - {{- if not .Values.console.readOnly }} - - '*' - {{- else }} - - get - - list - - watch - {{- end}} - - apiGroups: - - min.io - resources: - - '*' - verbs: - {{- if not .Values.console.readOnly }} - - get - - list - - watch - {{- else }} - - '*' - {{- end }} - - apiGroups: - - "" - resources: - - persistentvolumes - verbs: - - get - - list - - watch - {{- if not .Values.console.readOnly }} - - create - - delete - {{- end }} - - apiGroups: - - "" - resources: - - persistentvolumeclaims - verbs: - - get - - list - - watch - {{- if not .Values.console.readOnly }} - - update - {{- end }} - - apiGroups: - - "" - resources: - - events - verbs: - - list - - watch - {{- if not .Values.console.readOnly }} - - create - - update - - patch - {{- end }} - - apiGroups: - - snapshot.storage.k8s.io - resources: - - volumesnapshots - verbs: - - get - - list - - apiGroups: - - snapshot.storage.k8s.io - resources: - - volumesnapshotcontents - verbs: - - get - - list - - apiGroups: - - storage.k8s.io - resources: - - csinodes - verbs: - - get - - list - - watch - - apiGroups: - - storage.k8s.io - resources: - - volumeattachments - verbs: - - get - - list - - watch - - apiGroups: - - "" - resources: - - endpoints - verbs: - - get - - list - - watch - {{- if not .Values.console.readOnly }} - - create - - update - - delete - {{- end }} - - apiGroups: - - coordination.k8s.io - resources: - - leases - verbs: - - get - - list - - watch - {{- if not .Values.console.readOnly }} - - create - - update - - delete - {{- end }} - - apiGroups: - - direct.csi.min.io - resources: - - volumes - verbs: - - get - - list - - watch - {{- if not .Values.console.readOnly }} - - create - - update - - delete - {{- end }} - - apiGroups: - - apiextensions.k8s.io - resources: - - customresourcedefinitions - verbs: - - get - - list - - watch - {{- if not .Values.console.readOnly }} - - create - - update - - delete - {{- end }} - - apiGroups: - - direct.csi.min.io - resources: - - directcsidrives - - directcsivolumes - verbs: - - get - - list - - watch - {{- if not .Values.console.readOnly }} - - create - - update - - delete - {{- end }} - - apiGroups: - - "" - resources: - - pod - - pods/log - verbs: - - get - - list - - watch -{{- end }} diff --git a/helm/operator/templates/console-clusterrolebinding.yaml b/helm/operator/templates/console-clusterrolebinding.yaml deleted file mode 100644 index 63877a71ff1..00000000000 --- a/helm/operator/templates/console-clusterrolebinding.yaml +++ /dev/null @@ -1,15 +0,0 @@ -{{- if .Values.console.enabled }} -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: console-sa-binding - labels: {{- include "minio-operator.console-labels" . | nindent 4 }} -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: console-sa-role -subjects: - - kind: ServiceAccount - name: console-sa - namespace: {{ .Release.Namespace }} -{{- end }} diff --git a/helm/operator/templates/console-configmap.yaml b/helm/operator/templates/console-configmap.yaml deleted file mode 100644 index 4f3c3ef221a..00000000000 --- a/helm/operator/templates/console-configmap.yaml +++ /dev/null @@ -1,11 +0,0 @@ -{{- if .Values.console.enabled }} -apiVersion: v1 -kind: ConfigMap -metadata: - name: console-env - namespace: {{ .Release.Namespace }} - labels: {{- include "minio-operator.console-labels" . | nindent 4 }} -data: - CONSOLE_PORT: "9090" - CONSOLE_TLS_PORT: "9443" -{{- end }} diff --git a/helm/operator/templates/console-deployment.yaml b/helm/operator/templates/console-deployment.yaml deleted file mode 100644 index bea49e0531c..00000000000 --- a/helm/operator/templates/console-deployment.yaml +++ /dev/null @@ -1,68 +0,0 @@ -{{- if .Values.console.enabled }} -apiVersion: apps/v1 -kind: Deployment -metadata: - name: console - namespace: {{ .Release.Namespace }} - labels: {{- include "minio-operator.console-labels" . | nindent 4 }} -spec: - replicas: {{ .Values.console.replicaCount }} - selector: - matchLabels: {{- include "minio-operator.console-selectorLabels" . | nindent 6 }} - template: - metadata: - labels: - {{- include "minio-operator.console-labels" . | nindent 8 }} - {{- include "minio-operator.console-selectorLabels" . | nindent 8 }} - spec: - {{- with .Values.console.imagePullSecrets }} - imagePullSecrets: {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.console.runtimeClassName }} - runtimeClassName: {{ . }} - {{- end }} - serviceAccountName: console-sa - {{- with .Values.console.securityContext }} - securityContext: {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.console.nodeSelector }} - nodeSelector: {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.console.affinity }} - affinity: {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.console.tolerations }} - tolerations: {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.console.topologySpreadConstraints }} - topologySpreadConstraints: {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.console.initContainers }} - initContainers: {{- toYaml . | nindent 8 }} - {{- end }} - containers: - - name: {{ .Chart.Name }} - image: "{{ .Values.console.image.repository }}:{{ .Values.console.image.digest | default .Values.console.image.tag }}" - imagePullPolicy: {{ .Values.console.image.pullPolicy }} - ports: - - containerPort: 9090 - name: http - - containerPort: 9443 - name: https - args: - - ui - - --certs-dir=/tmp/certs - {{- with .Values.console.env }} - env: {{- toYaml . | nindent 12 }} - {{- end }} - resources: {{- toYaml .Values.console.resources | nindent 12 }} - {{- with .Values.console.containerSecurityContext }} - securityContext: {{- toYaml . | nindent 12 }} - {{- end }} - {{- with .Values.console.volumeMounts }} - volumeMounts: {{- toYaml . | nindent 12 }} - {{- end }} - {{- with .Values.console.volumes }} - volumes: {{- toYaml . | nindent 8 }} - {{- end }} -{{- end }} diff --git a/helm/operator/templates/console-ingress.yaml b/helm/operator/templates/console-ingress.yaml deleted file mode 100644 index a4687151ded..00000000000 --- a/helm/operator/templates/console-ingress.yaml +++ /dev/null @@ -1,40 +0,0 @@ -{{- if .Values.console.enabled }} -{{- if .Values.console.ingress.enabled }} -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: {{ include "minio-operator.console-fullname" . }} - namespace: {{ .Release.Namespace }} - {{- with .Values.console.ingress.labels }} - labels: {{ toYaml . | nindent 4 }} - {{- end }} - {{- with .Values.console.ingress.annotations }} - annotations: {{ toYaml . | nindent 4 }} - {{- end }} -spec: - {{- with .Values.console.ingress.ingressClassName }} - ingressClassName: {{ . }} - {{- end }} - {{- if .Values.console.ingress.tls }} - tls: - {{- range .Values.console.ingress.tls }} - - hosts: - {{- range .hosts }} - - {{ . | quote }} - {{- end }} - secretName: {{ .secretName }} - {{- end }} - {{- end }} - rules: - - host: {{ .Values.console.ingress.host }} - http: - paths: - - path: {{ .Values.console.ingress.path }} - pathType: {{ .Values.console.ingress.pathType }} - backend: - service: - name: "console" - port: - number: {{ .Values.console.ingress.number }} -{{- end }} -{{- end }} diff --git a/helm/operator/templates/console-secret.yaml b/helm/operator/templates/console-secret.yaml deleted file mode 100644 index 7d1055792bb..00000000000 --- a/helm/operator/templates/console-secret.yaml +++ /dev/null @@ -1,11 +0,0 @@ -{{- if .Values.console.enabled }} -apiVersion: v1 -kind: Secret -metadata: - name: console-sa-secret - namespace: {{ .Release.Namespace }} - annotations: - kubernetes.io/service-account.name: console-sa - labels: {{- include "minio-operator.console-labels" . | nindent 4 }} -type: kubernetes.io/service-account-token -{{- end }} diff --git a/helm/operator/templates/console-service.yaml b/helm/operator/templates/console-service.yaml deleted file mode 100644 index 2a518e84d48..00000000000 --- a/helm/operator/templates/console-service.yaml +++ /dev/null @@ -1,15 +0,0 @@ -{{- if .Values.console.enabled }} -apiVersion: v1 -kind: Service -metadata: - name: console - namespace: {{ .Release.Namespace }} - labels: {{- include "minio-operator.console-labels" . | nindent 4 }} -spec: - ports: - - name: http - port: 9090 - - name: https - port: 9443 - selector: {{- include "minio-operator.console-selectorLabels" . | nindent 4 }} -{{- end }} diff --git a/helm/operator/templates/console-serviceaccount.yaml b/helm/operator/templates/console-serviceaccount.yaml deleted file mode 100644 index 638305ec879..00000000000 --- a/helm/operator/templates/console-serviceaccount.yaml +++ /dev/null @@ -1,8 +0,0 @@ -{{- if .Values.console.enabled }} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: console-sa - namespace: {{ .Release.Namespace }} - labels: {{- include "minio-operator.console-labels" . | nindent 4 }} -{{- end }} diff --git a/helm/operator/values.yaml b/helm/operator/values.yaml index eba5a5d3bfa..80fdf57fd3a 100644 --- a/helm/operator/values.yaml +++ b/helm/operator/values.yaml @@ -14,8 +14,6 @@ operator: # valueFrom: # fieldRef: # fieldPath: metadata.labels['app.kubernetes.io/name'] - # - name: MINIO_CONSOLE_TLS_ENABLE - # value: "off" # - name: CLUSTER_DOMAIN # value: "cluster.domain" # - name: WATCHED_NAMESPACE @@ -24,12 +22,9 @@ operator: # value: "OpenShift" # # See `Operator environment variables `__ for a list of all supported values. - # If MINIO_CONSOLE_TLS_ENABLE is enabled, utilize port 9443 for console.ingress.number. env: - name: OPERATOR_STS_ENABLED value: "on" - - name: MINIO_CONSOLE_TLS_ENABLE - value: "off" # An array of additional annotations to be applied to the operator service account serviceAccountAnnotations: [] # additional labels to be applied to operator resources @@ -194,174 +189,3 @@ operator: cpu: 200m memory: 256Mi ephemeral-storage: 500Mi - -### -# Root key for Operator Console -console: - ### - # Specify ``false`` to disable the Operator Console. - # - # If the Operator Console is disabled, all management of Operator Tenants must be done through the Kubernetes API. - enabled: true - # additional labels to include for console resources - additionalLabels: {} - ### - # Specify the Operator Console container image to use for the deployment. - # ``image.tag`` - # For example, the following sets the image to the ``quay.io/minio/operator`` repo and the v5.0.15 tag. - # The container pulls the image if not already present: - # - # .. code-block:: yaml - # - # image: - # repository: quay.io/minio/operator - # tag: v5.0.15 - # pullPolicy: IfNotPresent - # - # The chart also supports specifying an image based on digest value: - # - # .. code-block:: yaml - # - # image: - # repository: quay.io/minio/operator@sha256 - # digest: 28c80b379c75242c6fe793dfbf212f43c602140a0de5ebe3d9c2a3a7b9f9f983 - # pullPolicy: IfNotPresent - # - # The specified values should match that of ``operator.image`` to ensure predictable operations. - image: - repository: quay.io/minio/operator - tag: v5.0.15 - pullPolicy: IfNotPresent - ### - # An array of environment variables to pass to the Operator Console deployment. - # Pass an empty array to start Operator Console with defaults. - env: [ ] - ### - # - # An array of Kubernetes secrets to use for pulling images from a private ``image.repository``. - imagePullSecrets: [ ] - ### - # - # The name of a custom `Container Runtime `__ to use for the Operator Console pods. - runtimeClassName: ~ - ### - # An array of `initContainers `__ to start up before the Operator Console pods. - # Exercise care as ``initContainer`` failures prevent Console pods from starting. - # Pass an empty array to start the Console normally. - initContainers: [ ] - ### - # The number of Operator Console pods to deploy. - # Higher values increase availability in the event of worker node failures. - # - # The cluster must have sufficient number of available worker nodes to fulfill the request. - # Console pods deploy with pod anti-affinity by default, preventing Kubernetes from scheduling multiple pods onto a single Worker node. - replicaCount: 1 - ### - # Any `Node Selectors `__ to apply to Operator Console pods. - # - # The Kubernetes scheduler uses these selectors to determine which worker nodes onto which it can deploy Console pods. - # - # If no worker nodes match the specified selectors, the Console deployment will fail. - nodeSelector: { } - ### - # - # The `affinity `__ or anti-affinity settings to apply to Operator Console pods. - # - # These settings determine the distribution of pods across worker nodes and can help prevent or allow colocating pods onto the same worker nodes. - affinity: - podAntiAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - - labelSelector: - matchExpressions: - - key: name - operator: In - values: - - minio-operator - topologyKey: kubernetes.io/hostname - ### - # - # An array of `Toleration labels `__ to associate to Operator Console pods. - # - # These settings determine the distribution of pods across worker nodes. - tolerations: [ ] - ### - # - # An array of `Topology Spread Constraints `__ to associate to Operator Console pods. - # - # These settings determine the distribution of pods across worker nodes. - topologySpreadConstraints: [ ] - ### - # - # The `Requests or Limits `__ for resources to associate to Operator Console pods. - # - # These settings can control the minimum and maximum resources requested for each pod. - # If no worker nodes can meet the specified requests, the Console may fail to deploy. - resources: - requests: - cpu: 0.25 - memory: 512Mi - ### - # The Kubernetes `SecurityContext `__ to use for deploying Operator Console resources. - # - # You may need to modify these values to meet your cluster's security and access settings. - securityContext: - runAsUser: 1000 - runAsGroup: 1000 - runAsNonRoot: true - ### - # The Kubernetes `SecurityContext `__ to use for deploying Operator Console containers. - # You may need to modify these values to meet your cluster's security and access settings. - containerSecurityContext: - runAsUser: 1000 - runAsGroup: 1000 - runAsNonRoot: true - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL - seccompProfile: - type: RuntimeDefault - - ### - # Forbid write permissions - readOnly: false - - ### - # Configures `Ingress `__ for the Operator Console. - # - # Set the keys to conform to the Ingress controller and configuration of your choice. - # Set console.ingress.number to any port. For example: - # You may choose port number 9443 for HTTPS or 9090 for HTTP, as desired. - ingress: - enabled: false - ingressClassName: "" - labels: { } - annotations: { } - tls: [ ] - host: console.local - path: / - pathType: Prefix - number: 9090 - ### - # An array of `Volumes `__ which the Operator Console can mount to pods. - # - # The volumes must exist *and* be accessible to the Console pods. - volumes: - - name: tmp - emptyDir: {} - ### - # An array of volume mount points associated to each Operator Console container. - # - # Specify each item in the array as follows: - # - # .. code-block:: yaml - # - # volumeMounts: - # - name: volumename - # mountPath: /path/to/mount - # - # The ``name`` field must correspond to an entry in the ``volumes`` array. - volumeMounts: - - name: tmp - readOnly: false - mountPath: /tmp/certs/CAs diff --git a/models/allocatable_resources_response.go b/models/allocatable_resources_response.go deleted file mode 100644 index 9688ba3fea0..00000000000 --- a/models/allocatable_resources_response.go +++ /dev/null @@ -1,183 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// AllocatableResourcesResponse allocatable resources response -// -// swagger:model allocatableResourcesResponse -type AllocatableResourcesResponse struct { - - // cpu priority - CPUPriority *NodeMaxAllocatableResources `json:"cpu_priority,omitempty"` - - // mem priority - MemPriority *NodeMaxAllocatableResources `json:"mem_priority,omitempty"` - - // min allocatable cpu - MinAllocatableCPU int64 `json:"min_allocatable_cpu,omitempty"` - - // min allocatable mem - MinAllocatableMem int64 `json:"min_allocatable_mem,omitempty"` -} - -// Validate validates this allocatable resources response -func (m *AllocatableResourcesResponse) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateCPUPriority(formats); err != nil { - res = append(res, err) - } - - if err := m.validateMemPriority(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *AllocatableResourcesResponse) validateCPUPriority(formats strfmt.Registry) error { - if swag.IsZero(m.CPUPriority) { // not required - return nil - } - - if m.CPUPriority != nil { - if err := m.CPUPriority.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("cpu_priority") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("cpu_priority") - } - return err - } - } - - return nil -} - -func (m *AllocatableResourcesResponse) validateMemPriority(formats strfmt.Registry) error { - if swag.IsZero(m.MemPriority) { // not required - return nil - } - - if m.MemPriority != nil { - if err := m.MemPriority.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("mem_priority") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("mem_priority") - } - return err - } - } - - return nil -} - -// ContextValidate validate this allocatable resources response based on the context it is used -func (m *AllocatableResourcesResponse) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateCPUPriority(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateMemPriority(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *AllocatableResourcesResponse) contextValidateCPUPriority(ctx context.Context, formats strfmt.Registry) error { - - if m.CPUPriority != nil { - - if swag.IsZero(m.CPUPriority) { // not required - return nil - } - - if err := m.CPUPriority.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("cpu_priority") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("cpu_priority") - } - return err - } - } - - return nil -} - -func (m *AllocatableResourcesResponse) contextValidateMemPriority(ctx context.Context, formats strfmt.Registry) error { - - if m.MemPriority != nil { - - if swag.IsZero(m.MemPriority) { // not required - return nil - } - - if err := m.MemPriority.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("mem_priority") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("mem_priority") - } - return err - } - } - - return nil -} - -// MarshalBinary interface implementation -func (m *AllocatableResourcesResponse) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *AllocatableResourcesResponse) UnmarshalBinary(b []byte) error { - var res AllocatableResourcesResponse - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/annotation.go b/models/annotation.go deleted file mode 100644 index 816d6ac16a2..00000000000 --- a/models/annotation.go +++ /dev/null @@ -1,70 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// Annotation annotation -// -// swagger:model annotation -type Annotation struct { - - // key - Key string `json:"key,omitempty"` - - // value - Value string `json:"value,omitempty"` -} - -// Validate validates this annotation -func (m *Annotation) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this annotation based on context it is used -func (m *Annotation) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *Annotation) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *Annotation) UnmarshalBinary(b []byte) error { - var res Annotation - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/aws_configuration.go b/models/aws_configuration.go deleted file mode 100644 index cadd9c7bdde..00000000000 --- a/models/aws_configuration.go +++ /dev/null @@ -1,331 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" - "github.com/go-openapi/validate" -) - -// AwsConfiguration aws configuration -// -// swagger:model awsConfiguration -type AwsConfiguration struct { - - // secretsmanager - // Required: true - Secretsmanager *AwsConfigurationSecretsmanager `json:"secretsmanager"` -} - -// Validate validates this aws configuration -func (m *AwsConfiguration) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateSecretsmanager(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *AwsConfiguration) validateSecretsmanager(formats strfmt.Registry) error { - - if err := validate.Required("secretsmanager", "body", m.Secretsmanager); err != nil { - return err - } - - if m.Secretsmanager != nil { - if err := m.Secretsmanager.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("secretsmanager") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("secretsmanager") - } - return err - } - } - - return nil -} - -// ContextValidate validate this aws configuration based on the context it is used -func (m *AwsConfiguration) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateSecretsmanager(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *AwsConfiguration) contextValidateSecretsmanager(ctx context.Context, formats strfmt.Registry) error { - - if m.Secretsmanager != nil { - - if err := m.Secretsmanager.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("secretsmanager") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("secretsmanager") - } - return err - } - } - - return nil -} - -// MarshalBinary interface implementation -func (m *AwsConfiguration) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *AwsConfiguration) UnmarshalBinary(b []byte) error { - var res AwsConfiguration - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} - -// AwsConfigurationSecretsmanager aws configuration secretsmanager -// -// swagger:model AwsConfigurationSecretsmanager -type AwsConfigurationSecretsmanager struct { - - // credentials - // Required: true - Credentials *AwsConfigurationSecretsmanagerCredentials `json:"credentials"` - - // endpoint - // Required: true - Endpoint *string `json:"endpoint"` - - // kmskey - Kmskey string `json:"kmskey,omitempty"` - - // region - // Required: true - Region *string `json:"region"` -} - -// Validate validates this aws configuration secretsmanager -func (m *AwsConfigurationSecretsmanager) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateCredentials(formats); err != nil { - res = append(res, err) - } - - if err := m.validateEndpoint(formats); err != nil { - res = append(res, err) - } - - if err := m.validateRegion(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *AwsConfigurationSecretsmanager) validateCredentials(formats strfmt.Registry) error { - - if err := validate.Required("secretsmanager"+"."+"credentials", "body", m.Credentials); err != nil { - return err - } - - if m.Credentials != nil { - if err := m.Credentials.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("secretsmanager" + "." + "credentials") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("secretsmanager" + "." + "credentials") - } - return err - } - } - - return nil -} - -func (m *AwsConfigurationSecretsmanager) validateEndpoint(formats strfmt.Registry) error { - - if err := validate.Required("secretsmanager"+"."+"endpoint", "body", m.Endpoint); err != nil { - return err - } - - return nil -} - -func (m *AwsConfigurationSecretsmanager) validateRegion(formats strfmt.Registry) error { - - if err := validate.Required("secretsmanager"+"."+"region", "body", m.Region); err != nil { - return err - } - - return nil -} - -// ContextValidate validate this aws configuration secretsmanager based on the context it is used -func (m *AwsConfigurationSecretsmanager) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateCredentials(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *AwsConfigurationSecretsmanager) contextValidateCredentials(ctx context.Context, formats strfmt.Registry) error { - - if m.Credentials != nil { - - if err := m.Credentials.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("secretsmanager" + "." + "credentials") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("secretsmanager" + "." + "credentials") - } - return err - } - } - - return nil -} - -// MarshalBinary interface implementation -func (m *AwsConfigurationSecretsmanager) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *AwsConfigurationSecretsmanager) UnmarshalBinary(b []byte) error { - var res AwsConfigurationSecretsmanager - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} - -// AwsConfigurationSecretsmanagerCredentials aws configuration secretsmanager credentials -// -// swagger:model AwsConfigurationSecretsmanagerCredentials -type AwsConfigurationSecretsmanagerCredentials struct { - - // accesskey - // Required: true - Accesskey *string `json:"accesskey"` - - // secretkey - // Required: true - Secretkey *string `json:"secretkey"` - - // token - Token string `json:"token,omitempty"` -} - -// Validate validates this aws configuration secretsmanager credentials -func (m *AwsConfigurationSecretsmanagerCredentials) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateAccesskey(formats); err != nil { - res = append(res, err) - } - - if err := m.validateSecretkey(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *AwsConfigurationSecretsmanagerCredentials) validateAccesskey(formats strfmt.Registry) error { - - if err := validate.Required("secretsmanager"+"."+"credentials"+"."+"accesskey", "body", m.Accesskey); err != nil { - return err - } - - return nil -} - -func (m *AwsConfigurationSecretsmanagerCredentials) validateSecretkey(formats strfmt.Registry) error { - - if err := validate.Required("secretsmanager"+"."+"credentials"+"."+"secretkey", "body", m.Secretkey); err != nil { - return err - } - - return nil -} - -// ContextValidate validates this aws configuration secretsmanager credentials based on context it is used -func (m *AwsConfigurationSecretsmanagerCredentials) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *AwsConfigurationSecretsmanagerCredentials) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *AwsConfigurationSecretsmanagerCredentials) UnmarshalBinary(b []byte) error { - var res AwsConfigurationSecretsmanagerCredentials - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/azure_configuration.go b/models/azure_configuration.go deleted file mode 100644 index 4168f0b9b31..00000000000 --- a/models/azure_configuration.go +++ /dev/null @@ -1,327 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" - "github.com/go-openapi/validate" -) - -// AzureConfiguration azure configuration -// -// swagger:model azureConfiguration -type AzureConfiguration struct { - - // keyvault - // Required: true - Keyvault *AzureConfigurationKeyvault `json:"keyvault"` -} - -// Validate validates this azure configuration -func (m *AzureConfiguration) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateKeyvault(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *AzureConfiguration) validateKeyvault(formats strfmt.Registry) error { - - if err := validate.Required("keyvault", "body", m.Keyvault); err != nil { - return err - } - - if m.Keyvault != nil { - if err := m.Keyvault.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("keyvault") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("keyvault") - } - return err - } - } - - return nil -} - -// ContextValidate validate this azure configuration based on the context it is used -func (m *AzureConfiguration) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateKeyvault(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *AzureConfiguration) contextValidateKeyvault(ctx context.Context, formats strfmt.Registry) error { - - if m.Keyvault != nil { - - if err := m.Keyvault.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("keyvault") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("keyvault") - } - return err - } - } - - return nil -} - -// MarshalBinary interface implementation -func (m *AzureConfiguration) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *AzureConfiguration) UnmarshalBinary(b []byte) error { - var res AzureConfiguration - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} - -// AzureConfigurationKeyvault azure configuration keyvault -// -// swagger:model AzureConfigurationKeyvault -type AzureConfigurationKeyvault struct { - - // credentials - Credentials *AzureConfigurationKeyvaultCredentials `json:"credentials,omitempty"` - - // endpoint - // Required: true - Endpoint *string `json:"endpoint"` -} - -// Validate validates this azure configuration keyvault -func (m *AzureConfigurationKeyvault) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateCredentials(formats); err != nil { - res = append(res, err) - } - - if err := m.validateEndpoint(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *AzureConfigurationKeyvault) validateCredentials(formats strfmt.Registry) error { - if swag.IsZero(m.Credentials) { // not required - return nil - } - - if m.Credentials != nil { - if err := m.Credentials.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("keyvault" + "." + "credentials") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("keyvault" + "." + "credentials") - } - return err - } - } - - return nil -} - -func (m *AzureConfigurationKeyvault) validateEndpoint(formats strfmt.Registry) error { - - if err := validate.Required("keyvault"+"."+"endpoint", "body", m.Endpoint); err != nil { - return err - } - - return nil -} - -// ContextValidate validate this azure configuration keyvault based on the context it is used -func (m *AzureConfigurationKeyvault) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateCredentials(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *AzureConfigurationKeyvault) contextValidateCredentials(ctx context.Context, formats strfmt.Registry) error { - - if m.Credentials != nil { - - if swag.IsZero(m.Credentials) { // not required - return nil - } - - if err := m.Credentials.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("keyvault" + "." + "credentials") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("keyvault" + "." + "credentials") - } - return err - } - } - - return nil -} - -// MarshalBinary interface implementation -func (m *AzureConfigurationKeyvault) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *AzureConfigurationKeyvault) UnmarshalBinary(b []byte) error { - var res AzureConfigurationKeyvault - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} - -// AzureConfigurationKeyvaultCredentials azure configuration keyvault credentials -// -// swagger:model AzureConfigurationKeyvaultCredentials -type AzureConfigurationKeyvaultCredentials struct { - - // client id - // Required: true - ClientID *string `json:"client_id"` - - // client secret - // Required: true - ClientSecret *string `json:"client_secret"` - - // tenant id - // Required: true - TenantID *string `json:"tenant_id"` -} - -// Validate validates this azure configuration keyvault credentials -func (m *AzureConfigurationKeyvaultCredentials) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateClientID(formats); err != nil { - res = append(res, err) - } - - if err := m.validateClientSecret(formats); err != nil { - res = append(res, err) - } - - if err := m.validateTenantID(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *AzureConfigurationKeyvaultCredentials) validateClientID(formats strfmt.Registry) error { - - if err := validate.Required("keyvault"+"."+"credentials"+"."+"client_id", "body", m.ClientID); err != nil { - return err - } - - return nil -} - -func (m *AzureConfigurationKeyvaultCredentials) validateClientSecret(formats strfmt.Registry) error { - - if err := validate.Required("keyvault"+"."+"credentials"+"."+"client_secret", "body", m.ClientSecret); err != nil { - return err - } - - return nil -} - -func (m *AzureConfigurationKeyvaultCredentials) validateTenantID(formats strfmt.Registry) error { - - if err := validate.Required("keyvault"+"."+"credentials"+"."+"tenant_id", "body", m.TenantID); err != nil { - return err - } - - return nil -} - -// ContextValidate validates this azure configuration keyvault credentials based on context it is used -func (m *AzureConfigurationKeyvaultCredentials) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *AzureConfigurationKeyvaultCredentials) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *AzureConfigurationKeyvaultCredentials) UnmarshalBinary(b []byte) error { - var res AzureConfigurationKeyvaultCredentials - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/backend_properties.go b/models/backend_properties.go deleted file mode 100644 index fab6453511a..00000000000 --- a/models/backend_properties.go +++ /dev/null @@ -1,73 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// BackendProperties backend properties -// -// swagger:model BackendProperties -type BackendProperties struct { - - // backend type - BackendType string `json:"backendType,omitempty"` - - // rr s c parity - RrSCParity int64 `json:"rrSCParity,omitempty"` - - // standard s c parity - StandardSCParity int64 `json:"standardSCParity,omitempty"` -} - -// Validate validates this backend properties -func (m *BackendProperties) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this backend properties based on context it is used -func (m *BackendProperties) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *BackendProperties) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *BackendProperties) UnmarshalBinary(b []byte) error { - var res BackendProperties - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/certificate_info.go b/models/certificate_info.go deleted file mode 100644 index 43bb03b4722..00000000000 --- a/models/certificate_info.go +++ /dev/null @@ -1,76 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// CertificateInfo certificate info -// -// swagger:model certificateInfo -type CertificateInfo struct { - - // domains - Domains []string `json:"domains"` - - // expiry - Expiry string `json:"expiry,omitempty"` - - // name - Name string `json:"name,omitempty"` - - // serial number - SerialNumber string `json:"serialNumber,omitempty"` -} - -// Validate validates this certificate info -func (m *CertificateInfo) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this certificate info based on context it is used -func (m *CertificateInfo) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *CertificateInfo) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *CertificateInfo) UnmarshalBinary(b []byte) error { - var res CertificateInfo - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/check_operator_version_response.go b/models/check_operator_version_response.go deleted file mode 100644 index ba8bbe646c4..00000000000 --- a/models/check_operator_version_response.go +++ /dev/null @@ -1,70 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// CheckOperatorVersionResponse check operator version response -// -// swagger:model checkOperatorVersionResponse -type CheckOperatorVersionResponse struct { - - // current version - CurrentVersion string `json:"current_version,omitempty"` - - // latest version - LatestVersion string `json:"latest_version,omitempty"` -} - -// Validate validates this check operator version response -func (m *CheckOperatorVersionResponse) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this check operator version response based on context it is used -func (m *CheckOperatorVersionResponse) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *CheckOperatorVersionResponse) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *CheckOperatorVersionResponse) UnmarshalBinary(b []byte) error { - var res CheckOperatorVersionResponse - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/condition.go b/models/condition.go deleted file mode 100644 index 67068eb31aa..00000000000 --- a/models/condition.go +++ /dev/null @@ -1,70 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// Condition condition -// -// swagger:model condition -type Condition struct { - - // status - Status string `json:"status,omitempty"` - - // type - Type string `json:"type,omitempty"` -} - -// Validate validates this condition -func (m *Condition) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this condition based on context it is used -func (m *Condition) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *Condition) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *Condition) UnmarshalBinary(b []byte) error { - var res Condition - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/config_map.go b/models/config_map.go deleted file mode 100644 index fbf31f8ce5c..00000000000 --- a/models/config_map.go +++ /dev/null @@ -1,70 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// ConfigMap config map -// -// swagger:model configMap -type ConfigMap struct { - - // name - Name string `json:"name,omitempty"` - - // optional - Optional bool `json:"optional,omitempty"` -} - -// Validate validates this config map -func (m *ConfigMap) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this config map based on context it is used -func (m *ConfigMap) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *ConfigMap) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *ConfigMap) UnmarshalBinary(b []byte) error { - var res ConfigMap - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/container.go b/models/container.go deleted file mode 100644 index 4ecc9ce5bea..00000000000 --- a/models/container.go +++ /dev/null @@ -1,329 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "strconv" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// Container container -// -// swagger:model container -type Container struct { - - // args - Args []string `json:"args"` - - // container ID - ContainerID string `json:"containerID,omitempty"` - - // environment variables - EnvironmentVariables []*EnvironmentVariable `json:"environmentVariables"` - - // host ports - HostPorts []string `json:"hostPorts"` - - // image - Image string `json:"image,omitempty"` - - // image ID - ImageID string `json:"imageID,omitempty"` - - // last state - LastState *State `json:"lastState,omitempty"` - - // mounts - Mounts []*Mount `json:"mounts"` - - // name - Name string `json:"name,omitempty"` - - // ports - Ports []string `json:"ports"` - - // ready - Ready bool `json:"ready,omitempty"` - - // restart count - RestartCount int64 `json:"restartCount,omitempty"` - - // state - State *State `json:"state,omitempty"` -} - -// Validate validates this container -func (m *Container) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateEnvironmentVariables(formats); err != nil { - res = append(res, err) - } - - if err := m.validateLastState(formats); err != nil { - res = append(res, err) - } - - if err := m.validateMounts(formats); err != nil { - res = append(res, err) - } - - if err := m.validateState(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *Container) validateEnvironmentVariables(formats strfmt.Registry) error { - if swag.IsZero(m.EnvironmentVariables) { // not required - return nil - } - - for i := 0; i < len(m.EnvironmentVariables); i++ { - if swag.IsZero(m.EnvironmentVariables[i]) { // not required - continue - } - - if m.EnvironmentVariables[i] != nil { - if err := m.EnvironmentVariables[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("environmentVariables" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("environmentVariables" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *Container) validateLastState(formats strfmt.Registry) error { - if swag.IsZero(m.LastState) { // not required - return nil - } - - if m.LastState != nil { - if err := m.LastState.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("lastState") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("lastState") - } - return err - } - } - - return nil -} - -func (m *Container) validateMounts(formats strfmt.Registry) error { - if swag.IsZero(m.Mounts) { // not required - return nil - } - - for i := 0; i < len(m.Mounts); i++ { - if swag.IsZero(m.Mounts[i]) { // not required - continue - } - - if m.Mounts[i] != nil { - if err := m.Mounts[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("mounts" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("mounts" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *Container) validateState(formats strfmt.Registry) error { - if swag.IsZero(m.State) { // not required - return nil - } - - if m.State != nil { - if err := m.State.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("state") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("state") - } - return err - } - } - - return nil -} - -// ContextValidate validate this container based on the context it is used -func (m *Container) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateEnvironmentVariables(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateLastState(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateMounts(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateState(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *Container) contextValidateEnvironmentVariables(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.EnvironmentVariables); i++ { - - if m.EnvironmentVariables[i] != nil { - - if swag.IsZero(m.EnvironmentVariables[i]) { // not required - return nil - } - - if err := m.EnvironmentVariables[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("environmentVariables" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("environmentVariables" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *Container) contextValidateLastState(ctx context.Context, formats strfmt.Registry) error { - - if m.LastState != nil { - - if swag.IsZero(m.LastState) { // not required - return nil - } - - if err := m.LastState.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("lastState") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("lastState") - } - return err - } - } - - return nil -} - -func (m *Container) contextValidateMounts(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.Mounts); i++ { - - if m.Mounts[i] != nil { - - if swag.IsZero(m.Mounts[i]) { // not required - return nil - } - - if err := m.Mounts[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("mounts" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("mounts" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *Container) contextValidateState(ctx context.Context, formats strfmt.Registry) error { - - if m.State != nil { - - if swag.IsZero(m.State) { // not required - return nil - } - - if err := m.State.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("state") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("state") - } - return err - } - } - - return nil -} - -// MarshalBinary interface implementation -func (m *Container) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *Container) UnmarshalBinary(b []byte) error { - var res Container - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/create_tenant_request.go b/models/create_tenant_request.go deleted file mode 100644 index c09d588d089..00000000000 --- a/models/create_tenant_request.go +++ /dev/null @@ -1,536 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "strconv" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" - "github.com/go-openapi/validate" -) - -// CreateTenantRequest create tenant request -// -// swagger:model createTenantRequest -type CreateTenantRequest struct { - - // access key - AccessKey string `json:"access_key,omitempty"` - - // annotations - Annotations map[string]string `json:"annotations,omitempty"` - - // domains - Domains *DomainsConfiguration `json:"domains,omitempty"` - - // enable console - EnableConsole *bool `json:"enable_console,omitempty"` - - // enable tls - EnableTLS *bool `json:"enable_tls,omitempty"` - - // encryption - Encryption *EncryptionConfiguration `json:"encryption,omitempty"` - - // environment variables - EnvironmentVariables []*EnvironmentVariable `json:"environmentVariables"` - - // erasure coding parity - ErasureCodingParity int64 `json:"erasureCodingParity,omitempty"` - - // expose console - ExposeConsole bool `json:"expose_console,omitempty"` - - // expose minio - ExposeMinio bool `json:"expose_minio,omitempty"` - - // expose sftp - ExposeSftp bool `json:"expose_sftp,omitempty"` - - // idp - Idp *IdpConfiguration `json:"idp,omitempty"` - - // image - Image string `json:"image,omitempty"` - - // image pull secret - ImagePullSecret string `json:"image_pull_secret,omitempty"` - - // image registry - ImageRegistry *ImageRegistry `json:"image_registry,omitempty"` - - // labels - Labels map[string]string `json:"labels,omitempty"` - - // mount path - MountPath string `json:"mount_path,omitempty"` - - // name - // Required: true - // Pattern: ^[a-z0-9-]{3,63}$ - Name *string `json:"name"` - - // namespace - // Required: true - Namespace *string `json:"namespace"` - - // pools - // Required: true - Pools []*Pool `json:"pools"` - - // secret key - SecretKey string `json:"secret_key,omitempty"` - - // tls - TLS *TLSConfiguration `json:"tls,omitempty"` -} - -// Validate validates this create tenant request -func (m *CreateTenantRequest) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateDomains(formats); err != nil { - res = append(res, err) - } - - if err := m.validateEncryption(formats); err != nil { - res = append(res, err) - } - - if err := m.validateEnvironmentVariables(formats); err != nil { - res = append(res, err) - } - - if err := m.validateIdp(formats); err != nil { - res = append(res, err) - } - - if err := m.validateImageRegistry(formats); err != nil { - res = append(res, err) - } - - if err := m.validateName(formats); err != nil { - res = append(res, err) - } - - if err := m.validateNamespace(formats); err != nil { - res = append(res, err) - } - - if err := m.validatePools(formats); err != nil { - res = append(res, err) - } - - if err := m.validateTLS(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *CreateTenantRequest) validateDomains(formats strfmt.Registry) error { - if swag.IsZero(m.Domains) { // not required - return nil - } - - if m.Domains != nil { - if err := m.Domains.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("domains") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("domains") - } - return err - } - } - - return nil -} - -func (m *CreateTenantRequest) validateEncryption(formats strfmt.Registry) error { - if swag.IsZero(m.Encryption) { // not required - return nil - } - - if m.Encryption != nil { - if err := m.Encryption.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("encryption") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("encryption") - } - return err - } - } - - return nil -} - -func (m *CreateTenantRequest) validateEnvironmentVariables(formats strfmt.Registry) error { - if swag.IsZero(m.EnvironmentVariables) { // not required - return nil - } - - for i := 0; i < len(m.EnvironmentVariables); i++ { - if swag.IsZero(m.EnvironmentVariables[i]) { // not required - continue - } - - if m.EnvironmentVariables[i] != nil { - if err := m.EnvironmentVariables[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("environmentVariables" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("environmentVariables" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *CreateTenantRequest) validateIdp(formats strfmt.Registry) error { - if swag.IsZero(m.Idp) { // not required - return nil - } - - if m.Idp != nil { - if err := m.Idp.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("idp") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("idp") - } - return err - } - } - - return nil -} - -func (m *CreateTenantRequest) validateImageRegistry(formats strfmt.Registry) error { - if swag.IsZero(m.ImageRegistry) { // not required - return nil - } - - if m.ImageRegistry != nil { - if err := m.ImageRegistry.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("image_registry") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("image_registry") - } - return err - } - } - - return nil -} - -func (m *CreateTenantRequest) validateName(formats strfmt.Registry) error { - - if err := validate.Required("name", "body", m.Name); err != nil { - return err - } - - if err := validate.Pattern("name", "body", *m.Name, `^[a-z0-9-]{3,63}$`); err != nil { - return err - } - - return nil -} - -func (m *CreateTenantRequest) validateNamespace(formats strfmt.Registry) error { - - if err := validate.Required("namespace", "body", m.Namespace); err != nil { - return err - } - - return nil -} - -func (m *CreateTenantRequest) validatePools(formats strfmt.Registry) error { - - if err := validate.Required("pools", "body", m.Pools); err != nil { - return err - } - - for i := 0; i < len(m.Pools); i++ { - if swag.IsZero(m.Pools[i]) { // not required - continue - } - - if m.Pools[i] != nil { - if err := m.Pools[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("pools" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("pools" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *CreateTenantRequest) validateTLS(formats strfmt.Registry) error { - if swag.IsZero(m.TLS) { // not required - return nil - } - - if m.TLS != nil { - if err := m.TLS.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("tls") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("tls") - } - return err - } - } - - return nil -} - -// ContextValidate validate this create tenant request based on the context it is used -func (m *CreateTenantRequest) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateDomains(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateEncryption(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateEnvironmentVariables(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateIdp(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateImageRegistry(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidatePools(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateTLS(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *CreateTenantRequest) contextValidateDomains(ctx context.Context, formats strfmt.Registry) error { - - if m.Domains != nil { - - if swag.IsZero(m.Domains) { // not required - return nil - } - - if err := m.Domains.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("domains") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("domains") - } - return err - } - } - - return nil -} - -func (m *CreateTenantRequest) contextValidateEncryption(ctx context.Context, formats strfmt.Registry) error { - - if m.Encryption != nil { - - if swag.IsZero(m.Encryption) { // not required - return nil - } - - if err := m.Encryption.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("encryption") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("encryption") - } - return err - } - } - - return nil -} - -func (m *CreateTenantRequest) contextValidateEnvironmentVariables(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.EnvironmentVariables); i++ { - - if m.EnvironmentVariables[i] != nil { - - if swag.IsZero(m.EnvironmentVariables[i]) { // not required - return nil - } - - if err := m.EnvironmentVariables[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("environmentVariables" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("environmentVariables" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *CreateTenantRequest) contextValidateIdp(ctx context.Context, formats strfmt.Registry) error { - - if m.Idp != nil { - - if swag.IsZero(m.Idp) { // not required - return nil - } - - if err := m.Idp.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("idp") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("idp") - } - return err - } - } - - return nil -} - -func (m *CreateTenantRequest) contextValidateImageRegistry(ctx context.Context, formats strfmt.Registry) error { - - if m.ImageRegistry != nil { - - if swag.IsZero(m.ImageRegistry) { // not required - return nil - } - - if err := m.ImageRegistry.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("image_registry") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("image_registry") - } - return err - } - } - - return nil -} - -func (m *CreateTenantRequest) contextValidatePools(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.Pools); i++ { - - if m.Pools[i] != nil { - - if swag.IsZero(m.Pools[i]) { // not required - return nil - } - - if err := m.Pools[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("pools" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("pools" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *CreateTenantRequest) contextValidateTLS(ctx context.Context, formats strfmt.Registry) error { - - if m.TLS != nil { - - if swag.IsZero(m.TLS) { // not required - return nil - } - - if err := m.TLS.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("tls") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("tls") - } - return err - } - } - - return nil -} - -// MarshalBinary interface implementation -func (m *CreateTenantRequest) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *CreateTenantRequest) UnmarshalBinary(b []byte) error { - var res CreateTenantRequest - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/create_tenant_response.go b/models/create_tenant_response.go deleted file mode 100644 index 5aafcb88b24..00000000000 --- a/models/create_tenant_response.go +++ /dev/null @@ -1,141 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "strconv" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// CreateTenantResponse create tenant response -// -// swagger:model createTenantResponse -type CreateTenantResponse struct { - - // console - Console []*TenantResponseItem `json:"console"` - - // external ID p - ExternalIDP bool `json:"externalIDP,omitempty"` -} - -// Validate validates this create tenant response -func (m *CreateTenantResponse) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateConsole(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *CreateTenantResponse) validateConsole(formats strfmt.Registry) error { - if swag.IsZero(m.Console) { // not required - return nil - } - - for i := 0; i < len(m.Console); i++ { - if swag.IsZero(m.Console[i]) { // not required - continue - } - - if m.Console[i] != nil { - if err := m.Console[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("console" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("console" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// ContextValidate validate this create tenant response based on the context it is used -func (m *CreateTenantResponse) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateConsole(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *CreateTenantResponse) contextValidateConsole(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.Console); i++ { - - if m.Console[i] != nil { - - if swag.IsZero(m.Console[i]) { // not required - return nil - } - - if err := m.Console[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("console" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("console" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// MarshalBinary interface implementation -func (m *CreateTenantResponse) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *CreateTenantResponse) UnmarshalBinary(b []byte) error { - var res CreateTenantResponse - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/csr_element.go b/models/csr_element.go deleted file mode 100644 index a13a9308c06..00000000000 --- a/models/csr_element.go +++ /dev/null @@ -1,159 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "strconv" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// CsrElement csr element -// -// swagger:model csrElement -type CsrElement struct { - - // annotations - Annotations []*Annotation `json:"annotations"` - - // deletion grace period seconds - DeletionGracePeriodSeconds int64 `json:"deletion_grace_period_seconds,omitempty"` - - // generate name - GenerateName string `json:"generate_name,omitempty"` - - // generation - Generation int64 `json:"generation,omitempty"` - - // name - Name string `json:"name,omitempty"` - - // namespace - Namespace string `json:"namespace,omitempty"` - - // resource version - ResourceVersion string `json:"resource_version,omitempty"` - - // status - Status string `json:"status,omitempty"` -} - -// Validate validates this csr element -func (m *CsrElement) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateAnnotations(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *CsrElement) validateAnnotations(formats strfmt.Registry) error { - if swag.IsZero(m.Annotations) { // not required - return nil - } - - for i := 0; i < len(m.Annotations); i++ { - if swag.IsZero(m.Annotations[i]) { // not required - continue - } - - if m.Annotations[i] != nil { - if err := m.Annotations[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("annotations" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("annotations" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// ContextValidate validate this csr element based on the context it is used -func (m *CsrElement) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateAnnotations(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *CsrElement) contextValidateAnnotations(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.Annotations); i++ { - - if m.Annotations[i] != nil { - - if swag.IsZero(m.Annotations[i]) { // not required - return nil - } - - if err := m.Annotations[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("annotations" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("annotations" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// MarshalBinary interface implementation -func (m *CsrElement) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *CsrElement) UnmarshalBinary(b []byte) error { - var res CsrElement - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/csr_elements.go b/models/csr_elements.go deleted file mode 100644 index 56ef54b2208..00000000000 --- a/models/csr_elements.go +++ /dev/null @@ -1,138 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "strconv" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// CsrElements csr elements -// -// swagger:model csrElements -type CsrElements struct { - - // csr element - CsrElement []*CsrElement `json:"csrElement"` -} - -// Validate validates this csr elements -func (m *CsrElements) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateCsrElement(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *CsrElements) validateCsrElement(formats strfmt.Registry) error { - if swag.IsZero(m.CsrElement) { // not required - return nil - } - - for i := 0; i < len(m.CsrElement); i++ { - if swag.IsZero(m.CsrElement[i]) { // not required - continue - } - - if m.CsrElement[i] != nil { - if err := m.CsrElement[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("csrElement" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("csrElement" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// ContextValidate validate this csr elements based on the context it is used -func (m *CsrElements) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateCsrElement(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *CsrElements) contextValidateCsrElement(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.CsrElement); i++ { - - if m.CsrElement[i] != nil { - - if swag.IsZero(m.CsrElement[i]) { // not required - return nil - } - - if err := m.CsrElement[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("csrElement" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("csrElement" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// MarshalBinary interface implementation -func (m *CsrElements) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *CsrElements) UnmarshalBinary(b []byte) error { - var res CsrElements - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/delete_tenant_request.go b/models/delete_tenant_request.go deleted file mode 100644 index 03dadfdd1ab..00000000000 --- a/models/delete_tenant_request.go +++ /dev/null @@ -1,67 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// DeleteTenantRequest delete tenant request -// -// swagger:model deleteTenantRequest -type DeleteTenantRequest struct { - - // delete pvcs - DeletePvcs bool `json:"delete_pvcs,omitempty"` -} - -// Validate validates this delete tenant request -func (m *DeleteTenantRequest) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this delete tenant request based on context it is used -func (m *DeleteTenantRequest) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *DeleteTenantRequest) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *DeleteTenantRequest) UnmarshalBinary(b []byte) error { - var res DeleteTenantRequest - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/describe_p_v_c_wrapper.go b/models/describe_p_v_c_wrapper.go deleted file mode 100644 index 58d835e4e18..00000000000 --- a/models/describe_p_v_c_wrapper.go +++ /dev/null @@ -1,227 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "strconv" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// DescribePVCWrapper describe p v c wrapper -// -// swagger:model describePVCWrapper -type DescribePVCWrapper struct { - - // access modes - AccessModes []string `json:"accessModes"` - - // annotations - Annotations []*Annotation `json:"annotations"` - - // capacity - Capacity string `json:"capacity,omitempty"` - - // finalizers - Finalizers []string `json:"finalizers"` - - // labels - Labels []*Label `json:"labels"` - - // name - Name string `json:"name,omitempty"` - - // namespace - Namespace string `json:"namespace,omitempty"` - - // status - Status string `json:"status,omitempty"` - - // storage class - StorageClass string `json:"storageClass,omitempty"` - - // volume - Volume string `json:"volume,omitempty"` - - // volume mode - VolumeMode string `json:"volumeMode,omitempty"` -} - -// Validate validates this describe p v c wrapper -func (m *DescribePVCWrapper) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateAnnotations(formats); err != nil { - res = append(res, err) - } - - if err := m.validateLabels(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *DescribePVCWrapper) validateAnnotations(formats strfmt.Registry) error { - if swag.IsZero(m.Annotations) { // not required - return nil - } - - for i := 0; i < len(m.Annotations); i++ { - if swag.IsZero(m.Annotations[i]) { // not required - continue - } - - if m.Annotations[i] != nil { - if err := m.Annotations[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("annotations" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("annotations" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *DescribePVCWrapper) validateLabels(formats strfmt.Registry) error { - if swag.IsZero(m.Labels) { // not required - return nil - } - - for i := 0; i < len(m.Labels); i++ { - if swag.IsZero(m.Labels[i]) { // not required - continue - } - - if m.Labels[i] != nil { - if err := m.Labels[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("labels" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("labels" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// ContextValidate validate this describe p v c wrapper based on the context it is used -func (m *DescribePVCWrapper) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateAnnotations(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateLabels(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *DescribePVCWrapper) contextValidateAnnotations(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.Annotations); i++ { - - if m.Annotations[i] != nil { - - if swag.IsZero(m.Annotations[i]) { // not required - return nil - } - - if err := m.Annotations[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("annotations" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("annotations" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *DescribePVCWrapper) contextValidateLabels(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.Labels); i++ { - - if m.Labels[i] != nil { - - if swag.IsZero(m.Labels[i]) { // not required - return nil - } - - if err := m.Labels[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("labels" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("labels" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// MarshalBinary interface implementation -func (m *DescribePVCWrapper) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *DescribePVCWrapper) UnmarshalBinary(b []byte) error { - var res DescribePVCWrapper - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/describe_pod_wrapper.go b/models/describe_pod_wrapper.go deleted file mode 100644 index 0fb4b98bcb1..00000000000 --- a/models/describe_pod_wrapper.go +++ /dev/null @@ -1,552 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "strconv" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// DescribePodWrapper describe pod wrapper -// -// swagger:model describePodWrapper -type DescribePodWrapper struct { - - // annotations - Annotations []*Annotation `json:"annotations"` - - // conditions - Conditions []*Condition `json:"conditions"` - - // containers - Containers []*Container `json:"containers"` - - // controller ref - ControllerRef string `json:"controllerRef,omitempty"` - - // deletion grace period seconds - DeletionGracePeriodSeconds int64 `json:"deletionGracePeriodSeconds,omitempty"` - - // deletion timestamp - DeletionTimestamp string `json:"deletionTimestamp,omitempty"` - - // labels - Labels []*Label `json:"labels"` - - // message - Message string `json:"message,omitempty"` - - // name - Name string `json:"name,omitempty"` - - // namespace - Namespace string `json:"namespace,omitempty"` - - // node name - NodeName string `json:"nodeName,omitempty"` - - // node selector - NodeSelector []*NodeSelector `json:"nodeSelector"` - - // phase - Phase string `json:"phase,omitempty"` - - // pod IP - PodIP string `json:"podIP,omitempty"` - - // priority - Priority int64 `json:"priority,omitempty"` - - // priority class name - PriorityClassName string `json:"priorityClassName,omitempty"` - - // qos class - QosClass string `json:"qosClass,omitempty"` - - // reason - Reason string `json:"reason,omitempty"` - - // start time - StartTime string `json:"startTime,omitempty"` - - // tolerations - Tolerations []*Toleration `json:"tolerations"` - - // volumes - Volumes []*Volume `json:"volumes"` -} - -// Validate validates this describe pod wrapper -func (m *DescribePodWrapper) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateAnnotations(formats); err != nil { - res = append(res, err) - } - - if err := m.validateConditions(formats); err != nil { - res = append(res, err) - } - - if err := m.validateContainers(formats); err != nil { - res = append(res, err) - } - - if err := m.validateLabels(formats); err != nil { - res = append(res, err) - } - - if err := m.validateNodeSelector(formats); err != nil { - res = append(res, err) - } - - if err := m.validateTolerations(formats); err != nil { - res = append(res, err) - } - - if err := m.validateVolumes(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *DescribePodWrapper) validateAnnotations(formats strfmt.Registry) error { - if swag.IsZero(m.Annotations) { // not required - return nil - } - - for i := 0; i < len(m.Annotations); i++ { - if swag.IsZero(m.Annotations[i]) { // not required - continue - } - - if m.Annotations[i] != nil { - if err := m.Annotations[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("annotations" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("annotations" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *DescribePodWrapper) validateConditions(formats strfmt.Registry) error { - if swag.IsZero(m.Conditions) { // not required - return nil - } - - for i := 0; i < len(m.Conditions); i++ { - if swag.IsZero(m.Conditions[i]) { // not required - continue - } - - if m.Conditions[i] != nil { - if err := m.Conditions[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("conditions" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("conditions" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *DescribePodWrapper) validateContainers(formats strfmt.Registry) error { - if swag.IsZero(m.Containers) { // not required - return nil - } - - for i := 0; i < len(m.Containers); i++ { - if swag.IsZero(m.Containers[i]) { // not required - continue - } - - if m.Containers[i] != nil { - if err := m.Containers[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("containers" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("containers" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *DescribePodWrapper) validateLabels(formats strfmt.Registry) error { - if swag.IsZero(m.Labels) { // not required - return nil - } - - for i := 0; i < len(m.Labels); i++ { - if swag.IsZero(m.Labels[i]) { // not required - continue - } - - if m.Labels[i] != nil { - if err := m.Labels[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("labels" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("labels" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *DescribePodWrapper) validateNodeSelector(formats strfmt.Registry) error { - if swag.IsZero(m.NodeSelector) { // not required - return nil - } - - for i := 0; i < len(m.NodeSelector); i++ { - if swag.IsZero(m.NodeSelector[i]) { // not required - continue - } - - if m.NodeSelector[i] != nil { - if err := m.NodeSelector[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("nodeSelector" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("nodeSelector" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *DescribePodWrapper) validateTolerations(formats strfmt.Registry) error { - if swag.IsZero(m.Tolerations) { // not required - return nil - } - - for i := 0; i < len(m.Tolerations); i++ { - if swag.IsZero(m.Tolerations[i]) { // not required - continue - } - - if m.Tolerations[i] != nil { - if err := m.Tolerations[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("tolerations" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("tolerations" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *DescribePodWrapper) validateVolumes(formats strfmt.Registry) error { - if swag.IsZero(m.Volumes) { // not required - return nil - } - - for i := 0; i < len(m.Volumes); i++ { - if swag.IsZero(m.Volumes[i]) { // not required - continue - } - - if m.Volumes[i] != nil { - if err := m.Volumes[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("volumes" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("volumes" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// ContextValidate validate this describe pod wrapper based on the context it is used -func (m *DescribePodWrapper) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateAnnotations(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateConditions(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateContainers(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateLabels(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateNodeSelector(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateTolerations(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateVolumes(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *DescribePodWrapper) contextValidateAnnotations(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.Annotations); i++ { - - if m.Annotations[i] != nil { - - if swag.IsZero(m.Annotations[i]) { // not required - return nil - } - - if err := m.Annotations[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("annotations" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("annotations" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *DescribePodWrapper) contextValidateConditions(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.Conditions); i++ { - - if m.Conditions[i] != nil { - - if swag.IsZero(m.Conditions[i]) { // not required - return nil - } - - if err := m.Conditions[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("conditions" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("conditions" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *DescribePodWrapper) contextValidateContainers(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.Containers); i++ { - - if m.Containers[i] != nil { - - if swag.IsZero(m.Containers[i]) { // not required - return nil - } - - if err := m.Containers[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("containers" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("containers" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *DescribePodWrapper) contextValidateLabels(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.Labels); i++ { - - if m.Labels[i] != nil { - - if swag.IsZero(m.Labels[i]) { // not required - return nil - } - - if err := m.Labels[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("labels" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("labels" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *DescribePodWrapper) contextValidateNodeSelector(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.NodeSelector); i++ { - - if m.NodeSelector[i] != nil { - - if swag.IsZero(m.NodeSelector[i]) { // not required - return nil - } - - if err := m.NodeSelector[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("nodeSelector" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("nodeSelector" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *DescribePodWrapper) contextValidateTolerations(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.Tolerations); i++ { - - if m.Tolerations[i] != nil { - - if swag.IsZero(m.Tolerations[i]) { // not required - return nil - } - - if err := m.Tolerations[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("tolerations" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("tolerations" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *DescribePodWrapper) contextValidateVolumes(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.Volumes); i++ { - - if m.Volumes[i] != nil { - - if swag.IsZero(m.Volumes[i]) { // not required - return nil - } - - if err := m.Volumes[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("volumes" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("volumes" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// MarshalBinary interface implementation -func (m *DescribePodWrapper) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *DescribePodWrapper) UnmarshalBinary(b []byte) error { - var res DescribePodWrapper - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/domains_configuration.go b/models/domains_configuration.go deleted file mode 100644 index 1bb58f4f3a1..00000000000 --- a/models/domains_configuration.go +++ /dev/null @@ -1,70 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// DomainsConfiguration domains configuration -// -// swagger:model domainsConfiguration -type DomainsConfiguration struct { - - // console - Console string `json:"console,omitempty"` - - // minio - Minio []string `json:"minio"` -} - -// Validate validates this domains configuration -func (m *DomainsConfiguration) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this domains configuration based on context it is used -func (m *DomainsConfiguration) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *DomainsConfiguration) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *DomainsConfiguration) UnmarshalBinary(b []byte) error { - var res DomainsConfiguration - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/encryption_configuration.go b/models/encryption_configuration.go deleted file mode 100644 index dabfa63e7dc..00000000000 --- a/models/encryption_configuration.go +++ /dev/null @@ -1,761 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// EncryptionConfiguration encryption configuration -// -// swagger:model encryptionConfiguration -type EncryptionConfiguration struct { - MetadataFields - - // aws - Aws *AwsConfiguration `json:"aws,omitempty"` - - // azure - Azure *AzureConfiguration `json:"azure,omitempty"` - - // gcp - Gcp *GcpConfiguration `json:"gcp,omitempty"` - - // gemalto - Gemalto *GemaltoConfiguration `json:"gemalto,omitempty"` - - // image - Image string `json:"image,omitempty"` - - // kms mtls - KmsMtls *EncryptionConfigurationAO1KmsMtls `json:"kms_mtls,omitempty"` - - // minio mtls - MinioMtls *KeyPairConfiguration `json:"minio_mtls,omitempty"` - - // policies - Policies interface{} `json:"policies,omitempty"` - - // raw - Raw string `json:"raw,omitempty"` - - // replicas - Replicas string `json:"replicas,omitempty"` - - // secrets to be deleted - SecretsToBeDeleted []string `json:"secretsToBeDeleted"` - - // security context - SecurityContext *SecurityContext `json:"securityContext,omitempty"` - - // server tls - ServerTLS *KeyPairConfiguration `json:"server_tls,omitempty"` - - // vault - Vault *VaultConfiguration `json:"vault,omitempty"` -} - -// UnmarshalJSON unmarshals this object from a JSON structure -func (m *EncryptionConfiguration) UnmarshalJSON(raw []byte) error { - // AO0 - var aO0 MetadataFields - if err := swag.ReadJSON(raw, &aO0); err != nil { - return err - } - m.MetadataFields = aO0 - - // AO1 - var dataAO1 struct { - Aws *AwsConfiguration `json:"aws,omitempty"` - - Azure *AzureConfiguration `json:"azure,omitempty"` - - Gcp *GcpConfiguration `json:"gcp,omitempty"` - - Gemalto *GemaltoConfiguration `json:"gemalto,omitempty"` - - Image string `json:"image,omitempty"` - - KmsMtls *EncryptionConfigurationAO1KmsMtls `json:"kms_mtls,omitempty"` - - MinioMtls *KeyPairConfiguration `json:"minio_mtls,omitempty"` - - Policies interface{} `json:"policies,omitempty"` - - Raw string `json:"raw,omitempty"` - - Replicas string `json:"replicas,omitempty"` - - SecretsToBeDeleted []string `json:"secretsToBeDeleted"` - - SecurityContext *SecurityContext `json:"securityContext,omitempty"` - - ServerTLS *KeyPairConfiguration `json:"server_tls,omitempty"` - - Vault *VaultConfiguration `json:"vault,omitempty"` - } - if err := swag.ReadJSON(raw, &dataAO1); err != nil { - return err - } - - m.Aws = dataAO1.Aws - - m.Azure = dataAO1.Azure - - m.Gcp = dataAO1.Gcp - - m.Gemalto = dataAO1.Gemalto - - m.Image = dataAO1.Image - - m.KmsMtls = dataAO1.KmsMtls - - m.MinioMtls = dataAO1.MinioMtls - - m.Policies = dataAO1.Policies - - m.Raw = dataAO1.Raw - - m.Replicas = dataAO1.Replicas - - m.SecretsToBeDeleted = dataAO1.SecretsToBeDeleted - - m.SecurityContext = dataAO1.SecurityContext - - m.ServerTLS = dataAO1.ServerTLS - - m.Vault = dataAO1.Vault - - return nil -} - -// MarshalJSON marshals this object to a JSON structure -func (m EncryptionConfiguration) MarshalJSON() ([]byte, error) { - _parts := make([][]byte, 0, 2) - - aO0, err := swag.WriteJSON(m.MetadataFields) - if err != nil { - return nil, err - } - _parts = append(_parts, aO0) - var dataAO1 struct { - Aws *AwsConfiguration `json:"aws,omitempty"` - - Azure *AzureConfiguration `json:"azure,omitempty"` - - Gcp *GcpConfiguration `json:"gcp,omitempty"` - - Gemalto *GemaltoConfiguration `json:"gemalto,omitempty"` - - Image string `json:"image,omitempty"` - - KmsMtls *EncryptionConfigurationAO1KmsMtls `json:"kms_mtls,omitempty"` - - MinioMtls *KeyPairConfiguration `json:"minio_mtls,omitempty"` - - Policies interface{} `json:"policies,omitempty"` - - Raw string `json:"raw,omitempty"` - - Replicas string `json:"replicas,omitempty"` - - SecretsToBeDeleted []string `json:"secretsToBeDeleted"` - - SecurityContext *SecurityContext `json:"securityContext,omitempty"` - - ServerTLS *KeyPairConfiguration `json:"server_tls,omitempty"` - - Vault *VaultConfiguration `json:"vault,omitempty"` - } - - dataAO1.Aws = m.Aws - - dataAO1.Azure = m.Azure - - dataAO1.Gcp = m.Gcp - - dataAO1.Gemalto = m.Gemalto - - dataAO1.Image = m.Image - - dataAO1.KmsMtls = m.KmsMtls - - dataAO1.MinioMtls = m.MinioMtls - - dataAO1.Policies = m.Policies - - dataAO1.Raw = m.Raw - - dataAO1.Replicas = m.Replicas - - dataAO1.SecretsToBeDeleted = m.SecretsToBeDeleted - - dataAO1.SecurityContext = m.SecurityContext - - dataAO1.ServerTLS = m.ServerTLS - - dataAO1.Vault = m.Vault - - jsonDataAO1, errAO1 := swag.WriteJSON(dataAO1) - if errAO1 != nil { - return nil, errAO1 - } - _parts = append(_parts, jsonDataAO1) - return swag.ConcatJSON(_parts...), nil -} - -// Validate validates this encryption configuration -func (m *EncryptionConfiguration) Validate(formats strfmt.Registry) error { - var res []error - - // validation for a type composition with MetadataFields - if err := m.MetadataFields.Validate(formats); err != nil { - res = append(res, err) - } - - if err := m.validateAws(formats); err != nil { - res = append(res, err) - } - - if err := m.validateAzure(formats); err != nil { - res = append(res, err) - } - - if err := m.validateGcp(formats); err != nil { - res = append(res, err) - } - - if err := m.validateGemalto(formats); err != nil { - res = append(res, err) - } - - if err := m.validateKmsMtls(formats); err != nil { - res = append(res, err) - } - - if err := m.validateMinioMtls(formats); err != nil { - res = append(res, err) - } - - if err := m.validateSecurityContext(formats); err != nil { - res = append(res, err) - } - - if err := m.validateServerTLS(formats); err != nil { - res = append(res, err) - } - - if err := m.validateVault(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *EncryptionConfiguration) validateAws(formats strfmt.Registry) error { - - if swag.IsZero(m.Aws) { // not required - return nil - } - - if m.Aws != nil { - if err := m.Aws.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("aws") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("aws") - } - return err - } - } - - return nil -} - -func (m *EncryptionConfiguration) validateAzure(formats strfmt.Registry) error { - - if swag.IsZero(m.Azure) { // not required - return nil - } - - if m.Azure != nil { - if err := m.Azure.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("azure") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("azure") - } - return err - } - } - - return nil -} - -func (m *EncryptionConfiguration) validateGcp(formats strfmt.Registry) error { - - if swag.IsZero(m.Gcp) { // not required - return nil - } - - if m.Gcp != nil { - if err := m.Gcp.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("gcp") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("gcp") - } - return err - } - } - - return nil -} - -func (m *EncryptionConfiguration) validateGemalto(formats strfmt.Registry) error { - - if swag.IsZero(m.Gemalto) { // not required - return nil - } - - if m.Gemalto != nil { - if err := m.Gemalto.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("gemalto") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("gemalto") - } - return err - } - } - - return nil -} - -func (m *EncryptionConfiguration) validateKmsMtls(formats strfmt.Registry) error { - - if swag.IsZero(m.KmsMtls) { // not required - return nil - } - - if m.KmsMtls != nil { - if err := m.KmsMtls.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("kms_mtls") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("kms_mtls") - } - return err - } - } - - return nil -} - -func (m *EncryptionConfiguration) validateMinioMtls(formats strfmt.Registry) error { - - if swag.IsZero(m.MinioMtls) { // not required - return nil - } - - if m.MinioMtls != nil { - if err := m.MinioMtls.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("minio_mtls") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("minio_mtls") - } - return err - } - } - - return nil -} - -func (m *EncryptionConfiguration) validateSecurityContext(formats strfmt.Registry) error { - - if swag.IsZero(m.SecurityContext) { // not required - return nil - } - - if m.SecurityContext != nil { - if err := m.SecurityContext.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("securityContext") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("securityContext") - } - return err - } - } - - return nil -} - -func (m *EncryptionConfiguration) validateServerTLS(formats strfmt.Registry) error { - - if swag.IsZero(m.ServerTLS) { // not required - return nil - } - - if m.ServerTLS != nil { - if err := m.ServerTLS.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("server_tls") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("server_tls") - } - return err - } - } - - return nil -} - -func (m *EncryptionConfiguration) validateVault(formats strfmt.Registry) error { - - if swag.IsZero(m.Vault) { // not required - return nil - } - - if m.Vault != nil { - if err := m.Vault.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("vault") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("vault") - } - return err - } - } - - return nil -} - -// ContextValidate validate this encryption configuration based on the context it is used -func (m *EncryptionConfiguration) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - // validation for a type composition with MetadataFields - if err := m.MetadataFields.ContextValidate(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateAws(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateAzure(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateGcp(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateGemalto(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateKmsMtls(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateMinioMtls(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateSecurityContext(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateServerTLS(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateVault(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *EncryptionConfiguration) contextValidateAws(ctx context.Context, formats strfmt.Registry) error { - - if m.Aws != nil { - - if swag.IsZero(m.Aws) { // not required - return nil - } - - if err := m.Aws.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("aws") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("aws") - } - return err - } - } - - return nil -} - -func (m *EncryptionConfiguration) contextValidateAzure(ctx context.Context, formats strfmt.Registry) error { - - if m.Azure != nil { - - if swag.IsZero(m.Azure) { // not required - return nil - } - - if err := m.Azure.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("azure") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("azure") - } - return err - } - } - - return nil -} - -func (m *EncryptionConfiguration) contextValidateGcp(ctx context.Context, formats strfmt.Registry) error { - - if m.Gcp != nil { - - if swag.IsZero(m.Gcp) { // not required - return nil - } - - if err := m.Gcp.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("gcp") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("gcp") - } - return err - } - } - - return nil -} - -func (m *EncryptionConfiguration) contextValidateGemalto(ctx context.Context, formats strfmt.Registry) error { - - if m.Gemalto != nil { - - if swag.IsZero(m.Gemalto) { // not required - return nil - } - - if err := m.Gemalto.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("gemalto") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("gemalto") - } - return err - } - } - - return nil -} - -func (m *EncryptionConfiguration) contextValidateKmsMtls(ctx context.Context, formats strfmt.Registry) error { - - if m.KmsMtls != nil { - - if swag.IsZero(m.KmsMtls) { // not required - return nil - } - - if err := m.KmsMtls.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("kms_mtls") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("kms_mtls") - } - return err - } - } - - return nil -} - -func (m *EncryptionConfiguration) contextValidateMinioMtls(ctx context.Context, formats strfmt.Registry) error { - - if m.MinioMtls != nil { - - if swag.IsZero(m.MinioMtls) { // not required - return nil - } - - if err := m.MinioMtls.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("minio_mtls") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("minio_mtls") - } - return err - } - } - - return nil -} - -func (m *EncryptionConfiguration) contextValidateSecurityContext(ctx context.Context, formats strfmt.Registry) error { - - if m.SecurityContext != nil { - - if swag.IsZero(m.SecurityContext) { // not required - return nil - } - - if err := m.SecurityContext.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("securityContext") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("securityContext") - } - return err - } - } - - return nil -} - -func (m *EncryptionConfiguration) contextValidateServerTLS(ctx context.Context, formats strfmt.Registry) error { - - if m.ServerTLS != nil { - - if swag.IsZero(m.ServerTLS) { // not required - return nil - } - - if err := m.ServerTLS.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("server_tls") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("server_tls") - } - return err - } - } - - return nil -} - -func (m *EncryptionConfiguration) contextValidateVault(ctx context.Context, formats strfmt.Registry) error { - - if m.Vault != nil { - - if swag.IsZero(m.Vault) { // not required - return nil - } - - if err := m.Vault.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("vault") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("vault") - } - return err - } - } - - return nil -} - -// MarshalBinary interface implementation -func (m *EncryptionConfiguration) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *EncryptionConfiguration) UnmarshalBinary(b []byte) error { - var res EncryptionConfiguration - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} - -// EncryptionConfigurationAO1KmsMtls encryption configuration a o1 kms mtls -// -// swagger:model EncryptionConfigurationAO1KmsMtls -type EncryptionConfigurationAO1KmsMtls struct { - - // ca - Ca string `json:"ca,omitempty"` - - // crt - Crt string `json:"crt,omitempty"` - - // key - Key string `json:"key,omitempty"` -} - -// Validate validates this encryption configuration a o1 kms mtls -func (m *EncryptionConfigurationAO1KmsMtls) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this encryption configuration a o1 kms mtls based on context it is used -func (m *EncryptionConfigurationAO1KmsMtls) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *EncryptionConfigurationAO1KmsMtls) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *EncryptionConfigurationAO1KmsMtls) UnmarshalBinary(b []byte) error { - var res EncryptionConfigurationAO1KmsMtls - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/encryption_configuration_response.go b/models/encryption_configuration_response.go deleted file mode 100644 index 15daa183844..00000000000 --- a/models/encryption_configuration_response.go +++ /dev/null @@ -1,853 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// EncryptionConfigurationResponse encryption configuration response -// -// swagger:model encryptionConfigurationResponse -type EncryptionConfigurationResponse struct { - MetadataFields - - // aws - Aws *AwsConfiguration `json:"aws,omitempty"` - - // azure - Azure *AzureConfiguration `json:"azure,omitempty"` - - // gcp - Gcp *GcpConfiguration `json:"gcp,omitempty"` - - // gemalto - Gemalto *GemaltoConfigurationResponse `json:"gemalto,omitempty"` - - // image - Image string `json:"image,omitempty"` - - // kms mtls - KmsMtls *EncryptionConfigurationResponseAO1KmsMtls `json:"kms_mtls,omitempty"` - - // minio mtls - MinioMtls *CertificateInfo `json:"minio_mtls,omitempty"` - - // policies - Policies interface{} `json:"policies,omitempty"` - - // raw - Raw string `json:"raw,omitempty"` - - // replicas - Replicas string `json:"replicas,omitempty"` - - // security context - SecurityContext *SecurityContext `json:"securityContext,omitempty"` - - // server tls - ServerTLS *CertificateInfo `json:"server_tls,omitempty"` - - // vault - Vault *VaultConfigurationResponse `json:"vault,omitempty"` -} - -// UnmarshalJSON unmarshals this object from a JSON structure -func (m *EncryptionConfigurationResponse) UnmarshalJSON(raw []byte) error { - // AO0 - var aO0 MetadataFields - if err := swag.ReadJSON(raw, &aO0); err != nil { - return err - } - m.MetadataFields = aO0 - - // AO1 - var dataAO1 struct { - Aws *AwsConfiguration `json:"aws,omitempty"` - - Azure *AzureConfiguration `json:"azure,omitempty"` - - Gcp *GcpConfiguration `json:"gcp,omitempty"` - - Gemalto *GemaltoConfigurationResponse `json:"gemalto,omitempty"` - - Image string `json:"image,omitempty"` - - KmsMtls *EncryptionConfigurationResponseAO1KmsMtls `json:"kms_mtls,omitempty"` - - MinioMtls *CertificateInfo `json:"minio_mtls,omitempty"` - - Policies interface{} `json:"policies,omitempty"` - - Raw string `json:"raw,omitempty"` - - Replicas string `json:"replicas,omitempty"` - - SecurityContext *SecurityContext `json:"securityContext,omitempty"` - - ServerTLS *CertificateInfo `json:"server_tls,omitempty"` - - Vault *VaultConfigurationResponse `json:"vault,omitempty"` - } - if err := swag.ReadJSON(raw, &dataAO1); err != nil { - return err - } - - m.Aws = dataAO1.Aws - - m.Azure = dataAO1.Azure - - m.Gcp = dataAO1.Gcp - - m.Gemalto = dataAO1.Gemalto - - m.Image = dataAO1.Image - - m.KmsMtls = dataAO1.KmsMtls - - m.MinioMtls = dataAO1.MinioMtls - - m.Policies = dataAO1.Policies - - m.Raw = dataAO1.Raw - - m.Replicas = dataAO1.Replicas - - m.SecurityContext = dataAO1.SecurityContext - - m.ServerTLS = dataAO1.ServerTLS - - m.Vault = dataAO1.Vault - - return nil -} - -// MarshalJSON marshals this object to a JSON structure -func (m EncryptionConfigurationResponse) MarshalJSON() ([]byte, error) { - _parts := make([][]byte, 0, 2) - - aO0, err := swag.WriteJSON(m.MetadataFields) - if err != nil { - return nil, err - } - _parts = append(_parts, aO0) - var dataAO1 struct { - Aws *AwsConfiguration `json:"aws,omitempty"` - - Azure *AzureConfiguration `json:"azure,omitempty"` - - Gcp *GcpConfiguration `json:"gcp,omitempty"` - - Gemalto *GemaltoConfigurationResponse `json:"gemalto,omitempty"` - - Image string `json:"image,omitempty"` - - KmsMtls *EncryptionConfigurationResponseAO1KmsMtls `json:"kms_mtls,omitempty"` - - MinioMtls *CertificateInfo `json:"minio_mtls,omitempty"` - - Policies interface{} `json:"policies,omitempty"` - - Raw string `json:"raw,omitempty"` - - Replicas string `json:"replicas,omitempty"` - - SecurityContext *SecurityContext `json:"securityContext,omitempty"` - - ServerTLS *CertificateInfo `json:"server_tls,omitempty"` - - Vault *VaultConfigurationResponse `json:"vault,omitempty"` - } - - dataAO1.Aws = m.Aws - - dataAO1.Azure = m.Azure - - dataAO1.Gcp = m.Gcp - - dataAO1.Gemalto = m.Gemalto - - dataAO1.Image = m.Image - - dataAO1.KmsMtls = m.KmsMtls - - dataAO1.MinioMtls = m.MinioMtls - - dataAO1.Policies = m.Policies - - dataAO1.Raw = m.Raw - - dataAO1.Replicas = m.Replicas - - dataAO1.SecurityContext = m.SecurityContext - - dataAO1.ServerTLS = m.ServerTLS - - dataAO1.Vault = m.Vault - - jsonDataAO1, errAO1 := swag.WriteJSON(dataAO1) - if errAO1 != nil { - return nil, errAO1 - } - _parts = append(_parts, jsonDataAO1) - return swag.ConcatJSON(_parts...), nil -} - -// Validate validates this encryption configuration response -func (m *EncryptionConfigurationResponse) Validate(formats strfmt.Registry) error { - var res []error - - // validation for a type composition with MetadataFields - if err := m.MetadataFields.Validate(formats); err != nil { - res = append(res, err) - } - - if err := m.validateAws(formats); err != nil { - res = append(res, err) - } - - if err := m.validateAzure(formats); err != nil { - res = append(res, err) - } - - if err := m.validateGcp(formats); err != nil { - res = append(res, err) - } - - if err := m.validateGemalto(formats); err != nil { - res = append(res, err) - } - - if err := m.validateKmsMtls(formats); err != nil { - res = append(res, err) - } - - if err := m.validateMinioMtls(formats); err != nil { - res = append(res, err) - } - - if err := m.validateSecurityContext(formats); err != nil { - res = append(res, err) - } - - if err := m.validateServerTLS(formats); err != nil { - res = append(res, err) - } - - if err := m.validateVault(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *EncryptionConfigurationResponse) validateAws(formats strfmt.Registry) error { - - if swag.IsZero(m.Aws) { // not required - return nil - } - - if m.Aws != nil { - if err := m.Aws.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("aws") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("aws") - } - return err - } - } - - return nil -} - -func (m *EncryptionConfigurationResponse) validateAzure(formats strfmt.Registry) error { - - if swag.IsZero(m.Azure) { // not required - return nil - } - - if m.Azure != nil { - if err := m.Azure.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("azure") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("azure") - } - return err - } - } - - return nil -} - -func (m *EncryptionConfigurationResponse) validateGcp(formats strfmt.Registry) error { - - if swag.IsZero(m.Gcp) { // not required - return nil - } - - if m.Gcp != nil { - if err := m.Gcp.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("gcp") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("gcp") - } - return err - } - } - - return nil -} - -func (m *EncryptionConfigurationResponse) validateGemalto(formats strfmt.Registry) error { - - if swag.IsZero(m.Gemalto) { // not required - return nil - } - - if m.Gemalto != nil { - if err := m.Gemalto.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("gemalto") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("gemalto") - } - return err - } - } - - return nil -} - -func (m *EncryptionConfigurationResponse) validateKmsMtls(formats strfmt.Registry) error { - - if swag.IsZero(m.KmsMtls) { // not required - return nil - } - - if m.KmsMtls != nil { - if err := m.KmsMtls.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("kms_mtls") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("kms_mtls") - } - return err - } - } - - return nil -} - -func (m *EncryptionConfigurationResponse) validateMinioMtls(formats strfmt.Registry) error { - - if swag.IsZero(m.MinioMtls) { // not required - return nil - } - - if m.MinioMtls != nil { - if err := m.MinioMtls.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("minio_mtls") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("minio_mtls") - } - return err - } - } - - return nil -} - -func (m *EncryptionConfigurationResponse) validateSecurityContext(formats strfmt.Registry) error { - - if swag.IsZero(m.SecurityContext) { // not required - return nil - } - - if m.SecurityContext != nil { - if err := m.SecurityContext.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("securityContext") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("securityContext") - } - return err - } - } - - return nil -} - -func (m *EncryptionConfigurationResponse) validateServerTLS(formats strfmt.Registry) error { - - if swag.IsZero(m.ServerTLS) { // not required - return nil - } - - if m.ServerTLS != nil { - if err := m.ServerTLS.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("server_tls") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("server_tls") - } - return err - } - } - - return nil -} - -func (m *EncryptionConfigurationResponse) validateVault(formats strfmt.Registry) error { - - if swag.IsZero(m.Vault) { // not required - return nil - } - - if m.Vault != nil { - if err := m.Vault.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("vault") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("vault") - } - return err - } - } - - return nil -} - -// ContextValidate validate this encryption configuration response based on the context it is used -func (m *EncryptionConfigurationResponse) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - // validation for a type composition with MetadataFields - if err := m.MetadataFields.ContextValidate(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateAws(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateAzure(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateGcp(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateGemalto(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateKmsMtls(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateMinioMtls(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateSecurityContext(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateServerTLS(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateVault(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *EncryptionConfigurationResponse) contextValidateAws(ctx context.Context, formats strfmt.Registry) error { - - if m.Aws != nil { - - if swag.IsZero(m.Aws) { // not required - return nil - } - - if err := m.Aws.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("aws") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("aws") - } - return err - } - } - - return nil -} - -func (m *EncryptionConfigurationResponse) contextValidateAzure(ctx context.Context, formats strfmt.Registry) error { - - if m.Azure != nil { - - if swag.IsZero(m.Azure) { // not required - return nil - } - - if err := m.Azure.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("azure") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("azure") - } - return err - } - } - - return nil -} - -func (m *EncryptionConfigurationResponse) contextValidateGcp(ctx context.Context, formats strfmt.Registry) error { - - if m.Gcp != nil { - - if swag.IsZero(m.Gcp) { // not required - return nil - } - - if err := m.Gcp.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("gcp") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("gcp") - } - return err - } - } - - return nil -} - -func (m *EncryptionConfigurationResponse) contextValidateGemalto(ctx context.Context, formats strfmt.Registry) error { - - if m.Gemalto != nil { - - if swag.IsZero(m.Gemalto) { // not required - return nil - } - - if err := m.Gemalto.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("gemalto") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("gemalto") - } - return err - } - } - - return nil -} - -func (m *EncryptionConfigurationResponse) contextValidateKmsMtls(ctx context.Context, formats strfmt.Registry) error { - - if m.KmsMtls != nil { - - if swag.IsZero(m.KmsMtls) { // not required - return nil - } - - if err := m.KmsMtls.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("kms_mtls") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("kms_mtls") - } - return err - } - } - - return nil -} - -func (m *EncryptionConfigurationResponse) contextValidateMinioMtls(ctx context.Context, formats strfmt.Registry) error { - - if m.MinioMtls != nil { - - if swag.IsZero(m.MinioMtls) { // not required - return nil - } - - if err := m.MinioMtls.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("minio_mtls") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("minio_mtls") - } - return err - } - } - - return nil -} - -func (m *EncryptionConfigurationResponse) contextValidateSecurityContext(ctx context.Context, formats strfmt.Registry) error { - - if m.SecurityContext != nil { - - if swag.IsZero(m.SecurityContext) { // not required - return nil - } - - if err := m.SecurityContext.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("securityContext") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("securityContext") - } - return err - } - } - - return nil -} - -func (m *EncryptionConfigurationResponse) contextValidateServerTLS(ctx context.Context, formats strfmt.Registry) error { - - if m.ServerTLS != nil { - - if swag.IsZero(m.ServerTLS) { // not required - return nil - } - - if err := m.ServerTLS.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("server_tls") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("server_tls") - } - return err - } - } - - return nil -} - -func (m *EncryptionConfigurationResponse) contextValidateVault(ctx context.Context, formats strfmt.Registry) error { - - if m.Vault != nil { - - if swag.IsZero(m.Vault) { // not required - return nil - } - - if err := m.Vault.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("vault") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("vault") - } - return err - } - } - - return nil -} - -// MarshalBinary interface implementation -func (m *EncryptionConfigurationResponse) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *EncryptionConfigurationResponse) UnmarshalBinary(b []byte) error { - var res EncryptionConfigurationResponse - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} - -// EncryptionConfigurationResponseAO1KmsMtls encryption configuration response a o1 kms mtls -// -// swagger:model EncryptionConfigurationResponseAO1KmsMtls -type EncryptionConfigurationResponseAO1KmsMtls struct { - - // ca - Ca *CertificateInfo `json:"ca,omitempty"` - - // crt - Crt *CertificateInfo `json:"crt,omitempty"` -} - -// Validate validates this encryption configuration response a o1 kms mtls -func (m *EncryptionConfigurationResponseAO1KmsMtls) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateCa(formats); err != nil { - res = append(res, err) - } - - if err := m.validateCrt(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *EncryptionConfigurationResponseAO1KmsMtls) validateCa(formats strfmt.Registry) error { - if swag.IsZero(m.Ca) { // not required - return nil - } - - if m.Ca != nil { - if err := m.Ca.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("kms_mtls" + "." + "ca") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("kms_mtls" + "." + "ca") - } - return err - } - } - - return nil -} - -func (m *EncryptionConfigurationResponseAO1KmsMtls) validateCrt(formats strfmt.Registry) error { - if swag.IsZero(m.Crt) { // not required - return nil - } - - if m.Crt != nil { - if err := m.Crt.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("kms_mtls" + "." + "crt") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("kms_mtls" + "." + "crt") - } - return err - } - } - - return nil -} - -// ContextValidate validate this encryption configuration response a o1 kms mtls based on the context it is used -func (m *EncryptionConfigurationResponseAO1KmsMtls) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateCa(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateCrt(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *EncryptionConfigurationResponseAO1KmsMtls) contextValidateCa(ctx context.Context, formats strfmt.Registry) error { - - if m.Ca != nil { - - if swag.IsZero(m.Ca) { // not required - return nil - } - - if err := m.Ca.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("kms_mtls" + "." + "ca") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("kms_mtls" + "." + "ca") - } - return err - } - } - - return nil -} - -func (m *EncryptionConfigurationResponseAO1KmsMtls) contextValidateCrt(ctx context.Context, formats strfmt.Registry) error { - - if m.Crt != nil { - - if swag.IsZero(m.Crt) { // not required - return nil - } - - if err := m.Crt.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("kms_mtls" + "." + "crt") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("kms_mtls" + "." + "crt") - } - return err - } - } - - return nil -} - -// MarshalBinary interface implementation -func (m *EncryptionConfigurationResponseAO1KmsMtls) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *EncryptionConfigurationResponseAO1KmsMtls) UnmarshalBinary(b []byte) error { - var res EncryptionConfigurationResponseAO1KmsMtls - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/environment_variable.go b/models/environment_variable.go deleted file mode 100644 index 0f4df183a84..00000000000 --- a/models/environment_variable.go +++ /dev/null @@ -1,70 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// EnvironmentVariable environment variable -// -// swagger:model environmentVariable -type EnvironmentVariable struct { - - // key - Key string `json:"key,omitempty"` - - // value - Value string `json:"value,omitempty"` -} - -// Validate validates this environment variable -func (m *EnvironmentVariable) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this environment variable based on context it is used -func (m *EnvironmentVariable) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *EnvironmentVariable) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *EnvironmentVariable) UnmarshalBinary(b []byte) error { - var res EnvironmentVariable - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/error.go b/models/error.go deleted file mode 100644 index 2981cab7c78..00000000000 --- a/models/error.go +++ /dev/null @@ -1,108 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" - "github.com/go-openapi/validate" -) - -// Error error -// -// swagger:model error -type Error struct { - - // code - Code int32 `json:"code,omitempty"` - - // detailed message - // Required: true - DetailedMessage *string `json:"detailedMessage"` - - // message - // Required: true - Message *string `json:"message"` -} - -// Validate validates this error -func (m *Error) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateDetailedMessage(formats); err != nil { - res = append(res, err) - } - - if err := m.validateMessage(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *Error) validateDetailedMessage(formats strfmt.Registry) error { - - if err := validate.Required("detailedMessage", "body", m.DetailedMessage); err != nil { - return err - } - - return nil -} - -func (m *Error) validateMessage(formats strfmt.Registry) error { - - if err := validate.Required("message", "body", m.Message); err != nil { - return err - } - - return nil -} - -// ContextValidate validates this error based on context it is used -func (m *Error) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *Error) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *Error) UnmarshalBinary(b []byte) error { - var res Error - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/event_list_element.go b/models/event_list_element.go deleted file mode 100644 index 182ea002982..00000000000 --- a/models/event_list_element.go +++ /dev/null @@ -1,82 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// EventListElement event list element -// -// swagger:model eventListElement -type EventListElement struct { - - // event type - EventType string `json:"event_type,omitempty"` - - // last seen - LastSeen int64 `json:"last_seen,omitempty"` - - // message - Message string `json:"message,omitempty"` - - // namespace - Namespace string `json:"namespace,omitempty"` - - // object - Object string `json:"object,omitempty"` - - // reason - Reason string `json:"reason,omitempty"` -} - -// Validate validates this event list element -func (m *EventListElement) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this event list element based on context it is used -func (m *EventListElement) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *EventListElement) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *EventListElement) UnmarshalBinary(b []byte) error { - var res EventListElement - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/event_list_wrapper.go b/models/event_list_wrapper.go deleted file mode 100644 index 39a47cbfa25..00000000000 --- a/models/event_list_wrapper.go +++ /dev/null @@ -1,95 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "strconv" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// EventListWrapper event list wrapper -// -// swagger:model eventListWrapper -type EventListWrapper []*EventListElement - -// Validate validates this event list wrapper -func (m EventListWrapper) Validate(formats strfmt.Registry) error { - var res []error - - for i := 0; i < len(m); i++ { - if swag.IsZero(m[i]) { // not required - continue - } - - if m[i] != nil { - if err := m[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName(strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName(strconv.Itoa(i)) - } - return err - } - } - - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// ContextValidate validate this event list wrapper based on the context it is used -func (m EventListWrapper) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - for i := 0; i < len(m); i++ { - - if m[i] != nil { - - if swag.IsZero(m[i]) { // not required - return nil - } - - if err := m[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName(strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName(strconv.Itoa(i)) - } - return err - } - } - - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} diff --git a/models/gcp_configuration.go b/models/gcp_configuration.go deleted file mode 100644 index 6aa12039541..00000000000 --- a/models/gcp_configuration.go +++ /dev/null @@ -1,286 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" - "github.com/go-openapi/validate" -) - -// GcpConfiguration gcp configuration -// -// swagger:model gcpConfiguration -type GcpConfiguration struct { - - // secretmanager - // Required: true - Secretmanager *GcpConfigurationSecretmanager `json:"secretmanager"` -} - -// Validate validates this gcp configuration -func (m *GcpConfiguration) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateSecretmanager(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *GcpConfiguration) validateSecretmanager(formats strfmt.Registry) error { - - if err := validate.Required("secretmanager", "body", m.Secretmanager); err != nil { - return err - } - - if m.Secretmanager != nil { - if err := m.Secretmanager.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("secretmanager") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("secretmanager") - } - return err - } - } - - return nil -} - -// ContextValidate validate this gcp configuration based on the context it is used -func (m *GcpConfiguration) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateSecretmanager(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *GcpConfiguration) contextValidateSecretmanager(ctx context.Context, formats strfmt.Registry) error { - - if m.Secretmanager != nil { - - if err := m.Secretmanager.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("secretmanager") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("secretmanager") - } - return err - } - } - - return nil -} - -// MarshalBinary interface implementation -func (m *GcpConfiguration) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *GcpConfiguration) UnmarshalBinary(b []byte) error { - var res GcpConfiguration - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} - -// GcpConfigurationSecretmanager gcp configuration secretmanager -// -// swagger:model GcpConfigurationSecretmanager -type GcpConfigurationSecretmanager struct { - - // credentials - Credentials *GcpConfigurationSecretmanagerCredentials `json:"credentials,omitempty"` - - // endpoint - Endpoint string `json:"endpoint,omitempty"` - - // project id - // Required: true - ProjectID *string `json:"project_id"` -} - -// Validate validates this gcp configuration secretmanager -func (m *GcpConfigurationSecretmanager) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateCredentials(formats); err != nil { - res = append(res, err) - } - - if err := m.validateProjectID(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *GcpConfigurationSecretmanager) validateCredentials(formats strfmt.Registry) error { - if swag.IsZero(m.Credentials) { // not required - return nil - } - - if m.Credentials != nil { - if err := m.Credentials.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("secretmanager" + "." + "credentials") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("secretmanager" + "." + "credentials") - } - return err - } - } - - return nil -} - -func (m *GcpConfigurationSecretmanager) validateProjectID(formats strfmt.Registry) error { - - if err := validate.Required("secretmanager"+"."+"project_id", "body", m.ProjectID); err != nil { - return err - } - - return nil -} - -// ContextValidate validate this gcp configuration secretmanager based on the context it is used -func (m *GcpConfigurationSecretmanager) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateCredentials(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *GcpConfigurationSecretmanager) contextValidateCredentials(ctx context.Context, formats strfmt.Registry) error { - - if m.Credentials != nil { - - if swag.IsZero(m.Credentials) { // not required - return nil - } - - if err := m.Credentials.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("secretmanager" + "." + "credentials") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("secretmanager" + "." + "credentials") - } - return err - } - } - - return nil -} - -// MarshalBinary interface implementation -func (m *GcpConfigurationSecretmanager) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *GcpConfigurationSecretmanager) UnmarshalBinary(b []byte) error { - var res GcpConfigurationSecretmanager - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} - -// GcpConfigurationSecretmanagerCredentials gcp configuration secretmanager credentials -// -// swagger:model GcpConfigurationSecretmanagerCredentials -type GcpConfigurationSecretmanagerCredentials struct { - - // client email - ClientEmail string `json:"client_email,omitempty"` - - // client id - ClientID string `json:"client_id,omitempty"` - - // private key - PrivateKey string `json:"private_key,omitempty"` - - // private key id - PrivateKeyID string `json:"private_key_id,omitempty"` -} - -// Validate validates this gcp configuration secretmanager credentials -func (m *GcpConfigurationSecretmanagerCredentials) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this gcp configuration secretmanager credentials based on context it is used -func (m *GcpConfigurationSecretmanagerCredentials) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *GcpConfigurationSecretmanagerCredentials) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *GcpConfigurationSecretmanagerCredentials) UnmarshalBinary(b []byte) error { - var res GcpConfigurationSecretmanagerCredentials - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/gemalto_configuration.go b/models/gemalto_configuration.go deleted file mode 100644 index 1a567300381..00000000000 --- a/models/gemalto_configuration.go +++ /dev/null @@ -1,311 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" - "github.com/go-openapi/validate" -) - -// GemaltoConfiguration gemalto configuration -// -// swagger:model gemaltoConfiguration -type GemaltoConfiguration struct { - - // keysecure - // Required: true - Keysecure *GemaltoConfigurationKeysecure `json:"keysecure"` -} - -// Validate validates this gemalto configuration -func (m *GemaltoConfiguration) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateKeysecure(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *GemaltoConfiguration) validateKeysecure(formats strfmt.Registry) error { - - if err := validate.Required("keysecure", "body", m.Keysecure); err != nil { - return err - } - - if m.Keysecure != nil { - if err := m.Keysecure.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("keysecure") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("keysecure") - } - return err - } - } - - return nil -} - -// ContextValidate validate this gemalto configuration based on the context it is used -func (m *GemaltoConfiguration) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateKeysecure(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *GemaltoConfiguration) contextValidateKeysecure(ctx context.Context, formats strfmt.Registry) error { - - if m.Keysecure != nil { - - if err := m.Keysecure.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("keysecure") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("keysecure") - } - return err - } - } - - return nil -} - -// MarshalBinary interface implementation -func (m *GemaltoConfiguration) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *GemaltoConfiguration) UnmarshalBinary(b []byte) error { - var res GemaltoConfiguration - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} - -// GemaltoConfigurationKeysecure gemalto configuration keysecure -// -// swagger:model GemaltoConfigurationKeysecure -type GemaltoConfigurationKeysecure struct { - - // credentials - // Required: true - Credentials *GemaltoConfigurationKeysecureCredentials `json:"credentials"` - - // endpoint - // Required: true - Endpoint *string `json:"endpoint"` -} - -// Validate validates this gemalto configuration keysecure -func (m *GemaltoConfigurationKeysecure) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateCredentials(formats); err != nil { - res = append(res, err) - } - - if err := m.validateEndpoint(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *GemaltoConfigurationKeysecure) validateCredentials(formats strfmt.Registry) error { - - if err := validate.Required("keysecure"+"."+"credentials", "body", m.Credentials); err != nil { - return err - } - - if m.Credentials != nil { - if err := m.Credentials.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("keysecure" + "." + "credentials") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("keysecure" + "." + "credentials") - } - return err - } - } - - return nil -} - -func (m *GemaltoConfigurationKeysecure) validateEndpoint(formats strfmt.Registry) error { - - if err := validate.Required("keysecure"+"."+"endpoint", "body", m.Endpoint); err != nil { - return err - } - - return nil -} - -// ContextValidate validate this gemalto configuration keysecure based on the context it is used -func (m *GemaltoConfigurationKeysecure) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateCredentials(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *GemaltoConfigurationKeysecure) contextValidateCredentials(ctx context.Context, formats strfmt.Registry) error { - - if m.Credentials != nil { - - if err := m.Credentials.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("keysecure" + "." + "credentials") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("keysecure" + "." + "credentials") - } - return err - } - } - - return nil -} - -// MarshalBinary interface implementation -func (m *GemaltoConfigurationKeysecure) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *GemaltoConfigurationKeysecure) UnmarshalBinary(b []byte) error { - var res GemaltoConfigurationKeysecure - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} - -// GemaltoConfigurationKeysecureCredentials gemalto configuration keysecure credentials -// -// swagger:model GemaltoConfigurationKeysecureCredentials -type GemaltoConfigurationKeysecureCredentials struct { - - // domain - // Required: true - Domain *string `json:"domain"` - - // retry - Retry int64 `json:"retry,omitempty"` - - // token - // Required: true - Token *string `json:"token"` -} - -// Validate validates this gemalto configuration keysecure credentials -func (m *GemaltoConfigurationKeysecureCredentials) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateDomain(formats); err != nil { - res = append(res, err) - } - - if err := m.validateToken(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *GemaltoConfigurationKeysecureCredentials) validateDomain(formats strfmt.Registry) error { - - if err := validate.Required("keysecure"+"."+"credentials"+"."+"domain", "body", m.Domain); err != nil { - return err - } - - return nil -} - -func (m *GemaltoConfigurationKeysecureCredentials) validateToken(formats strfmt.Registry) error { - - if err := validate.Required("keysecure"+"."+"credentials"+"."+"token", "body", m.Token); err != nil { - return err - } - - return nil -} - -// ContextValidate validates this gemalto configuration keysecure credentials based on context it is used -func (m *GemaltoConfigurationKeysecureCredentials) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *GemaltoConfigurationKeysecureCredentials) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *GemaltoConfigurationKeysecureCredentials) UnmarshalBinary(b []byte) error { - var res GemaltoConfigurationKeysecureCredentials - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/gemalto_configuration_response.go b/models/gemalto_configuration_response.go deleted file mode 100644 index 905d2a4b74c..00000000000 --- a/models/gemalto_configuration_response.go +++ /dev/null @@ -1,311 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" - "github.com/go-openapi/validate" -) - -// GemaltoConfigurationResponse gemalto configuration response -// -// swagger:model gemaltoConfigurationResponse -type GemaltoConfigurationResponse struct { - - // keysecure - // Required: true - Keysecure *GemaltoConfigurationResponseKeysecure `json:"keysecure"` -} - -// Validate validates this gemalto configuration response -func (m *GemaltoConfigurationResponse) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateKeysecure(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *GemaltoConfigurationResponse) validateKeysecure(formats strfmt.Registry) error { - - if err := validate.Required("keysecure", "body", m.Keysecure); err != nil { - return err - } - - if m.Keysecure != nil { - if err := m.Keysecure.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("keysecure") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("keysecure") - } - return err - } - } - - return nil -} - -// ContextValidate validate this gemalto configuration response based on the context it is used -func (m *GemaltoConfigurationResponse) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateKeysecure(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *GemaltoConfigurationResponse) contextValidateKeysecure(ctx context.Context, formats strfmt.Registry) error { - - if m.Keysecure != nil { - - if err := m.Keysecure.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("keysecure") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("keysecure") - } - return err - } - } - - return nil -} - -// MarshalBinary interface implementation -func (m *GemaltoConfigurationResponse) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *GemaltoConfigurationResponse) UnmarshalBinary(b []byte) error { - var res GemaltoConfigurationResponse - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} - -// GemaltoConfigurationResponseKeysecure gemalto configuration response keysecure -// -// swagger:model GemaltoConfigurationResponseKeysecure -type GemaltoConfigurationResponseKeysecure struct { - - // credentials - // Required: true - Credentials *GemaltoConfigurationResponseKeysecureCredentials `json:"credentials"` - - // endpoint - // Required: true - Endpoint *string `json:"endpoint"` -} - -// Validate validates this gemalto configuration response keysecure -func (m *GemaltoConfigurationResponseKeysecure) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateCredentials(formats); err != nil { - res = append(res, err) - } - - if err := m.validateEndpoint(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *GemaltoConfigurationResponseKeysecure) validateCredentials(formats strfmt.Registry) error { - - if err := validate.Required("keysecure"+"."+"credentials", "body", m.Credentials); err != nil { - return err - } - - if m.Credentials != nil { - if err := m.Credentials.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("keysecure" + "." + "credentials") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("keysecure" + "." + "credentials") - } - return err - } - } - - return nil -} - -func (m *GemaltoConfigurationResponseKeysecure) validateEndpoint(formats strfmt.Registry) error { - - if err := validate.Required("keysecure"+"."+"endpoint", "body", m.Endpoint); err != nil { - return err - } - - return nil -} - -// ContextValidate validate this gemalto configuration response keysecure based on the context it is used -func (m *GemaltoConfigurationResponseKeysecure) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateCredentials(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *GemaltoConfigurationResponseKeysecure) contextValidateCredentials(ctx context.Context, formats strfmt.Registry) error { - - if m.Credentials != nil { - - if err := m.Credentials.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("keysecure" + "." + "credentials") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("keysecure" + "." + "credentials") - } - return err - } - } - - return nil -} - -// MarshalBinary interface implementation -func (m *GemaltoConfigurationResponseKeysecure) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *GemaltoConfigurationResponseKeysecure) UnmarshalBinary(b []byte) error { - var res GemaltoConfigurationResponseKeysecure - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} - -// GemaltoConfigurationResponseKeysecureCredentials gemalto configuration response keysecure credentials -// -// swagger:model GemaltoConfigurationResponseKeysecureCredentials -type GemaltoConfigurationResponseKeysecureCredentials struct { - - // domain - // Required: true - Domain *string `json:"domain"` - - // retry - Retry int64 `json:"retry,omitempty"` - - // token - // Required: true - Token *string `json:"token"` -} - -// Validate validates this gemalto configuration response keysecure credentials -func (m *GemaltoConfigurationResponseKeysecureCredentials) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateDomain(formats); err != nil { - res = append(res, err) - } - - if err := m.validateToken(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *GemaltoConfigurationResponseKeysecureCredentials) validateDomain(formats strfmt.Registry) error { - - if err := validate.Required("keysecure"+"."+"credentials"+"."+"domain", "body", m.Domain); err != nil { - return err - } - - return nil -} - -func (m *GemaltoConfigurationResponseKeysecureCredentials) validateToken(formats strfmt.Registry) error { - - if err := validate.Required("keysecure"+"."+"credentials"+"."+"token", "body", m.Token); err != nil { - return err - } - - return nil -} - -// ContextValidate validates this gemalto configuration response keysecure credentials based on context it is used -func (m *GemaltoConfigurationResponseKeysecureCredentials) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *GemaltoConfigurationResponseKeysecureCredentials) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *GemaltoConfigurationResponseKeysecureCredentials) UnmarshalBinary(b []byte) error { - var res GemaltoConfigurationResponseKeysecureCredentials - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/idp_configuration.go b/models/idp_configuration.go deleted file mode 100644 index 0b90e4a2661..00000000000 --- a/models/idp_configuration.go +++ /dev/null @@ -1,527 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "strconv" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" - "github.com/go-openapi/validate" -) - -// IdpConfiguration idp configuration -// -// swagger:model idpConfiguration -type IdpConfiguration struct { - - // active directory - ActiveDirectory *IdpConfigurationActiveDirectory `json:"active_directory,omitempty"` - - // keys - Keys []*IdpConfigurationKeysItems0 `json:"keys"` - - // oidc - Oidc *IdpConfigurationOidc `json:"oidc,omitempty"` -} - -// Validate validates this idp configuration -func (m *IdpConfiguration) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateActiveDirectory(formats); err != nil { - res = append(res, err) - } - - if err := m.validateKeys(formats); err != nil { - res = append(res, err) - } - - if err := m.validateOidc(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *IdpConfiguration) validateActiveDirectory(formats strfmt.Registry) error { - if swag.IsZero(m.ActiveDirectory) { // not required - return nil - } - - if m.ActiveDirectory != nil { - if err := m.ActiveDirectory.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("active_directory") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("active_directory") - } - return err - } - } - - return nil -} - -func (m *IdpConfiguration) validateKeys(formats strfmt.Registry) error { - if swag.IsZero(m.Keys) { // not required - return nil - } - - for i := 0; i < len(m.Keys); i++ { - if swag.IsZero(m.Keys[i]) { // not required - continue - } - - if m.Keys[i] != nil { - if err := m.Keys[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("keys" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("keys" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *IdpConfiguration) validateOidc(formats strfmt.Registry) error { - if swag.IsZero(m.Oidc) { // not required - return nil - } - - if m.Oidc != nil { - if err := m.Oidc.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("oidc") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("oidc") - } - return err - } - } - - return nil -} - -// ContextValidate validate this idp configuration based on the context it is used -func (m *IdpConfiguration) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateActiveDirectory(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateKeys(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateOidc(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *IdpConfiguration) contextValidateActiveDirectory(ctx context.Context, formats strfmt.Registry) error { - - if m.ActiveDirectory != nil { - - if swag.IsZero(m.ActiveDirectory) { // not required - return nil - } - - if err := m.ActiveDirectory.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("active_directory") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("active_directory") - } - return err - } - } - - return nil -} - -func (m *IdpConfiguration) contextValidateKeys(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.Keys); i++ { - - if m.Keys[i] != nil { - - if swag.IsZero(m.Keys[i]) { // not required - return nil - } - - if err := m.Keys[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("keys" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("keys" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *IdpConfiguration) contextValidateOidc(ctx context.Context, formats strfmt.Registry) error { - - if m.Oidc != nil { - - if swag.IsZero(m.Oidc) { // not required - return nil - } - - if err := m.Oidc.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("oidc") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("oidc") - } - return err - } - } - - return nil -} - -// MarshalBinary interface implementation -func (m *IdpConfiguration) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *IdpConfiguration) UnmarshalBinary(b []byte) error { - var res IdpConfiguration - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} - -// IdpConfigurationActiveDirectory idp configuration active directory -// -// swagger:model IdpConfigurationActiveDirectory -type IdpConfigurationActiveDirectory struct { - - // group search base dn - GroupSearchBaseDn string `json:"group_search_base_dn,omitempty"` - - // group search filter - GroupSearchFilter string `json:"group_search_filter,omitempty"` - - // lookup bind dn - // Required: true - LookupBindDn *string `json:"lookup_bind_dn"` - - // lookup bind password - LookupBindPassword string `json:"lookup_bind_password,omitempty"` - - // server insecure - ServerInsecure bool `json:"server_insecure,omitempty"` - - // server start tls - ServerStartTLS bool `json:"server_start_tls,omitempty"` - - // skip tls verification - SkipTLSVerification bool `json:"skip_tls_verification,omitempty"` - - // url - // Required: true - URL *string `json:"url"` - - // user dn search base dn - UserDnSearchBaseDn string `json:"user_dn_search_base_dn,omitempty"` - - // user dn search filter - UserDnSearchFilter string `json:"user_dn_search_filter,omitempty"` - - // user dns - UserDNS []string `json:"user_dns"` -} - -// Validate validates this idp configuration active directory -func (m *IdpConfigurationActiveDirectory) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateLookupBindDn(formats); err != nil { - res = append(res, err) - } - - if err := m.validateURL(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *IdpConfigurationActiveDirectory) validateLookupBindDn(formats strfmt.Registry) error { - - if err := validate.Required("active_directory"+"."+"lookup_bind_dn", "body", m.LookupBindDn); err != nil { - return err - } - - return nil -} - -func (m *IdpConfigurationActiveDirectory) validateURL(formats strfmt.Registry) error { - - if err := validate.Required("active_directory"+"."+"url", "body", m.URL); err != nil { - return err - } - - return nil -} - -// ContextValidate validates this idp configuration active directory based on context it is used -func (m *IdpConfigurationActiveDirectory) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *IdpConfigurationActiveDirectory) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *IdpConfigurationActiveDirectory) UnmarshalBinary(b []byte) error { - var res IdpConfigurationActiveDirectory - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} - -// IdpConfigurationKeysItems0 idp configuration keys items0 -// -// swagger:model IdpConfigurationKeysItems0 -type IdpConfigurationKeysItems0 struct { - - // access key - // Required: true - AccessKey *string `json:"access_key"` - - // secret key - // Required: true - SecretKey *string `json:"secret_key"` -} - -// Validate validates this idp configuration keys items0 -func (m *IdpConfigurationKeysItems0) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateAccessKey(formats); err != nil { - res = append(res, err) - } - - if err := m.validateSecretKey(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *IdpConfigurationKeysItems0) validateAccessKey(formats strfmt.Registry) error { - - if err := validate.Required("access_key", "body", m.AccessKey); err != nil { - return err - } - - return nil -} - -func (m *IdpConfigurationKeysItems0) validateSecretKey(formats strfmt.Registry) error { - - if err := validate.Required("secret_key", "body", m.SecretKey); err != nil { - return err - } - - return nil -} - -// ContextValidate validates this idp configuration keys items0 based on context it is used -func (m *IdpConfigurationKeysItems0) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *IdpConfigurationKeysItems0) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *IdpConfigurationKeysItems0) UnmarshalBinary(b []byte) error { - var res IdpConfigurationKeysItems0 - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} - -// IdpConfigurationOidc idp configuration oidc -// -// swagger:model IdpConfigurationOidc -type IdpConfigurationOidc struct { - - // callback url - CallbackURL string `json:"callback_url,omitempty"` - - // claim name - // Required: true - ClaimName *string `json:"claim_name"` - - // client id - // Required: true - ClientID *string `json:"client_id"` - - // configuration url - // Required: true - ConfigurationURL *string `json:"configuration_url"` - - // scopes - Scopes string `json:"scopes,omitempty"` - - // secret id - // Required: true - SecretID *string `json:"secret_id"` -} - -// Validate validates this idp configuration oidc -func (m *IdpConfigurationOidc) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateClaimName(formats); err != nil { - res = append(res, err) - } - - if err := m.validateClientID(formats); err != nil { - res = append(res, err) - } - - if err := m.validateConfigurationURL(formats); err != nil { - res = append(res, err) - } - - if err := m.validateSecretID(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *IdpConfigurationOidc) validateClaimName(formats strfmt.Registry) error { - - if err := validate.Required("oidc"+"."+"claim_name", "body", m.ClaimName); err != nil { - return err - } - - return nil -} - -func (m *IdpConfigurationOidc) validateClientID(formats strfmt.Registry) error { - - if err := validate.Required("oidc"+"."+"client_id", "body", m.ClientID); err != nil { - return err - } - - return nil -} - -func (m *IdpConfigurationOidc) validateConfigurationURL(formats strfmt.Registry) error { - - if err := validate.Required("oidc"+"."+"configuration_url", "body", m.ConfigurationURL); err != nil { - return err - } - - return nil -} - -func (m *IdpConfigurationOidc) validateSecretID(formats strfmt.Registry) error { - - if err := validate.Required("oidc"+"."+"secret_id", "body", m.SecretID); err != nil { - return err - } - - return nil -} - -// ContextValidate validates this idp configuration oidc based on context it is used -func (m *IdpConfigurationOidc) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *IdpConfigurationOidc) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *IdpConfigurationOidc) UnmarshalBinary(b []byte) error { - var res IdpConfigurationOidc - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/image_registry.go b/models/image_registry.go deleted file mode 100644 index 725dfcd918f..00000000000 --- a/models/image_registry.go +++ /dev/null @@ -1,122 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" - "github.com/go-openapi/validate" -) - -// ImageRegistry image registry -// -// swagger:model imageRegistry -type ImageRegistry struct { - - // password - // Required: true - Password *string `json:"password"` - - // registry - // Required: true - Registry *string `json:"registry"` - - // username - // Required: true - Username *string `json:"username"` -} - -// Validate validates this image registry -func (m *ImageRegistry) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validatePassword(formats); err != nil { - res = append(res, err) - } - - if err := m.validateRegistry(formats); err != nil { - res = append(res, err) - } - - if err := m.validateUsername(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *ImageRegistry) validatePassword(formats strfmt.Registry) error { - - if err := validate.Required("password", "body", m.Password); err != nil { - return err - } - - return nil -} - -func (m *ImageRegistry) validateRegistry(formats strfmt.Registry) error { - - if err := validate.Required("registry", "body", m.Registry); err != nil { - return err - } - - return nil -} - -func (m *ImageRegistry) validateUsername(formats strfmt.Registry) error { - - if err := validate.Required("username", "body", m.Username); err != nil { - return err - } - - return nil -} - -// ContextValidate validates this image registry based on context it is used -func (m *ImageRegistry) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *ImageRegistry) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *ImageRegistry) UnmarshalBinary(b []byte) error { - var res ImageRegistry - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/key_pair_configuration.go b/models/key_pair_configuration.go deleted file mode 100644 index 2beaccfa52b..00000000000 --- a/models/key_pair_configuration.go +++ /dev/null @@ -1,105 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" - "github.com/go-openapi/validate" -) - -// KeyPairConfiguration key pair configuration -// -// swagger:model keyPairConfiguration -type KeyPairConfiguration struct { - - // crt - // Required: true - Crt *string `json:"crt"` - - // key - // Required: true - Key *string `json:"key"` -} - -// Validate validates this key pair configuration -func (m *KeyPairConfiguration) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateCrt(formats); err != nil { - res = append(res, err) - } - - if err := m.validateKey(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *KeyPairConfiguration) validateCrt(formats strfmt.Registry) error { - - if err := validate.Required("crt", "body", m.Crt); err != nil { - return err - } - - return nil -} - -func (m *KeyPairConfiguration) validateKey(formats strfmt.Registry) error { - - if err := validate.Required("key", "body", m.Key); err != nil { - return err - } - - return nil -} - -// ContextValidate validates this key pair configuration based on context it is used -func (m *KeyPairConfiguration) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *KeyPairConfiguration) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *KeyPairConfiguration) UnmarshalBinary(b []byte) error { - var res KeyPairConfiguration - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/label.go b/models/label.go deleted file mode 100644 index c28d0211354..00000000000 --- a/models/label.go +++ /dev/null @@ -1,70 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// Label label -// -// swagger:model label -type Label struct { - - // key - Key string `json:"key,omitempty"` - - // value - Value string `json:"value,omitempty"` -} - -// Validate validates this label -func (m *Label) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this label based on context it is used -func (m *Label) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *Label) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *Label) UnmarshalBinary(b []byte) error { - var res Label - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/license.go b/models/license.go deleted file mode 100644 index 955dbd8e6e2..00000000000 --- a/models/license.go +++ /dev/null @@ -1,82 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// License license -// -// swagger:model license -type License struct { - - // account id - AccountID int64 `json:"account_id,omitempty"` - - // email - Email string `json:"email,omitempty"` - - // expires at - ExpiresAt string `json:"expires_at,omitempty"` - - // organization - Organization string `json:"organization,omitempty"` - - // plan - Plan string `json:"plan,omitempty"` - - // storage capacity - StorageCapacity int64 `json:"storage_capacity,omitempty"` -} - -// Validate validates this license -func (m *License) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this license based on context it is used -func (m *License) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *License) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *License) UnmarshalBinary(b []byte) error { - var res License - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/list_p_v_cs_response.go b/models/list_p_v_cs_response.go deleted file mode 100644 index faab188ecab..00000000000 --- a/models/list_p_v_cs_response.go +++ /dev/null @@ -1,138 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "strconv" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// ListPVCsResponse list p v cs response -// -// swagger:model listPVCsResponse -type ListPVCsResponse struct { - - // pvcs - Pvcs []*PvcsListResponse `json:"pvcs"` -} - -// Validate validates this list p v cs response -func (m *ListPVCsResponse) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validatePvcs(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *ListPVCsResponse) validatePvcs(formats strfmt.Registry) error { - if swag.IsZero(m.Pvcs) { // not required - return nil - } - - for i := 0; i < len(m.Pvcs); i++ { - if swag.IsZero(m.Pvcs[i]) { // not required - continue - } - - if m.Pvcs[i] != nil { - if err := m.Pvcs[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("pvcs" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("pvcs" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// ContextValidate validate this list p v cs response based on the context it is used -func (m *ListPVCsResponse) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidatePvcs(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *ListPVCsResponse) contextValidatePvcs(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.Pvcs); i++ { - - if m.Pvcs[i] != nil { - - if swag.IsZero(m.Pvcs[i]) { // not required - return nil - } - - if err := m.Pvcs[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("pvcs" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("pvcs" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// MarshalBinary interface implementation -func (m *ListPVCsResponse) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *ListPVCsResponse) UnmarshalBinary(b []byte) error { - var res ListPVCsResponse - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/list_tenants_response.go b/models/list_tenants_response.go deleted file mode 100644 index a13fecb58fc..00000000000 --- a/models/list_tenants_response.go +++ /dev/null @@ -1,141 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "strconv" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// ListTenantsResponse list tenants response -// -// swagger:model listTenantsResponse -type ListTenantsResponse struct { - - // list of resulting tenants - Tenants []*TenantList `json:"tenants"` - - // number of tenants accessible to tenant user - Total int64 `json:"total,omitempty"` -} - -// Validate validates this list tenants response -func (m *ListTenantsResponse) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateTenants(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *ListTenantsResponse) validateTenants(formats strfmt.Registry) error { - if swag.IsZero(m.Tenants) { // not required - return nil - } - - for i := 0; i < len(m.Tenants); i++ { - if swag.IsZero(m.Tenants[i]) { // not required - continue - } - - if m.Tenants[i] != nil { - if err := m.Tenants[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("tenants" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("tenants" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// ContextValidate validate this list tenants response based on the context it is used -func (m *ListTenantsResponse) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateTenants(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *ListTenantsResponse) contextValidateTenants(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.Tenants); i++ { - - if m.Tenants[i] != nil { - - if swag.IsZero(m.Tenants[i]) { // not required - return nil - } - - if err := m.Tenants[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("tenants" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("tenants" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// MarshalBinary interface implementation -func (m *ListTenantsResponse) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *ListTenantsResponse) UnmarshalBinary(b []byte) error { - var res ListTenantsResponse - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/login_details.go b/models/login_details.go deleted file mode 100644 index 6b7ea9d7a49..00000000000 --- a/models/login_details.go +++ /dev/null @@ -1,199 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "encoding/json" - "strconv" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" - "github.com/go-openapi/validate" -) - -// LoginDetails login details -// -// swagger:model loginDetails -type LoginDetails struct { - - // is k8 s - IsK8S bool `json:"isK8S,omitempty"` - - // login strategy - // Enum: [form redirect service-account redirect-service-account] - LoginStrategy string `json:"loginStrategy,omitempty"` - - // redirect rules - RedirectRules []*RedirectRule `json:"redirectRules"` -} - -// Validate validates this login details -func (m *LoginDetails) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateLoginStrategy(formats); err != nil { - res = append(res, err) - } - - if err := m.validateRedirectRules(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -var loginDetailsTypeLoginStrategyPropEnum []interface{} - -func init() { - var res []string - if err := json.Unmarshal([]byte(`["form","redirect","service-account","redirect-service-account"]`), &res); err != nil { - panic(err) - } - for _, v := range res { - loginDetailsTypeLoginStrategyPropEnum = append(loginDetailsTypeLoginStrategyPropEnum, v) - } -} - -const ( - - // LoginDetailsLoginStrategyForm captures enum value "form" - LoginDetailsLoginStrategyForm string = "form" - - // LoginDetailsLoginStrategyRedirect captures enum value "redirect" - LoginDetailsLoginStrategyRedirect string = "redirect" - - // LoginDetailsLoginStrategyServiceDashAccount captures enum value "service-account" - LoginDetailsLoginStrategyServiceDashAccount string = "service-account" - - // LoginDetailsLoginStrategyRedirectDashServiceDashAccount captures enum value "redirect-service-account" - LoginDetailsLoginStrategyRedirectDashServiceDashAccount string = "redirect-service-account" -) - -// prop value enum -func (m *LoginDetails) validateLoginStrategyEnum(path, location string, value string) error { - if err := validate.EnumCase(path, location, value, loginDetailsTypeLoginStrategyPropEnum, true); err != nil { - return err - } - return nil -} - -func (m *LoginDetails) validateLoginStrategy(formats strfmt.Registry) error { - if swag.IsZero(m.LoginStrategy) { // not required - return nil - } - - // value enum - if err := m.validateLoginStrategyEnum("loginStrategy", "body", m.LoginStrategy); err != nil { - return err - } - - return nil -} - -func (m *LoginDetails) validateRedirectRules(formats strfmt.Registry) error { - if swag.IsZero(m.RedirectRules) { // not required - return nil - } - - for i := 0; i < len(m.RedirectRules); i++ { - if swag.IsZero(m.RedirectRules[i]) { // not required - continue - } - - if m.RedirectRules[i] != nil { - if err := m.RedirectRules[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("redirectRules" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("redirectRules" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// ContextValidate validate this login details based on the context it is used -func (m *LoginDetails) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateRedirectRules(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *LoginDetails) contextValidateRedirectRules(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.RedirectRules); i++ { - - if m.RedirectRules[i] != nil { - - if swag.IsZero(m.RedirectRules[i]) { // not required - return nil - } - - if err := m.RedirectRules[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("redirectRules" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("redirectRules" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// MarshalBinary interface implementation -func (m *LoginDetails) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *LoginDetails) UnmarshalBinary(b []byte) error { - var res LoginDetails - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/login_oauth2_auth_request.go b/models/login_oauth2_auth_request.go deleted file mode 100644 index 2d0d3c0032e..00000000000 --- a/models/login_oauth2_auth_request.go +++ /dev/null @@ -1,105 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" - "github.com/go-openapi/validate" -) - -// LoginOauth2AuthRequest login oauth2 auth request -// -// swagger:model loginOauth2AuthRequest -type LoginOauth2AuthRequest struct { - - // code - // Required: true - Code *string `json:"code"` - - // state - // Required: true - State *string `json:"state"` -} - -// Validate validates this login oauth2 auth request -func (m *LoginOauth2AuthRequest) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateCode(formats); err != nil { - res = append(res, err) - } - - if err := m.validateState(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *LoginOauth2AuthRequest) validateCode(formats strfmt.Registry) error { - - if err := validate.Required("code", "body", m.Code); err != nil { - return err - } - - return nil -} - -func (m *LoginOauth2AuthRequest) validateState(formats strfmt.Registry) error { - - if err := validate.Required("state", "body", m.State); err != nil { - return err - } - - return nil -} - -// ContextValidate validates this login oauth2 auth request based on context it is used -func (m *LoginOauth2AuthRequest) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *LoginOauth2AuthRequest) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *LoginOauth2AuthRequest) UnmarshalBinary(b []byte) error { - var res LoginOauth2AuthRequest - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/login_operator_request.go b/models/login_operator_request.go deleted file mode 100644 index 5d2d8d10eb6..00000000000 --- a/models/login_operator_request.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" - "github.com/go-openapi/validate" -) - -// LoginOperatorRequest login operator request -// -// swagger:model loginOperatorRequest -type LoginOperatorRequest struct { - - // jwt - // Required: true - Jwt *string `json:"jwt"` -} - -// Validate validates this login operator request -func (m *LoginOperatorRequest) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateJwt(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *LoginOperatorRequest) validateJwt(formats strfmt.Registry) error { - - if err := validate.Required("jwt", "body", m.Jwt); err != nil { - return err - } - - return nil -} - -// ContextValidate validates this login operator request based on context it is used -func (m *LoginOperatorRequest) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *LoginOperatorRequest) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *LoginOperatorRequest) UnmarshalBinary(b []byte) error { - var res LoginOperatorRequest - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/login_request.go b/models/login_request.go deleted file mode 100644 index 54d4fdf93a1..00000000000 --- a/models/login_request.go +++ /dev/null @@ -1,172 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// LoginRequest login request -// -// swagger:model loginRequest -type LoginRequest struct { - - // access key - AccessKey string `json:"accessKey,omitempty"` - - // features - Features *LoginRequestFeatures `json:"features,omitempty"` - - // secret key - SecretKey string `json:"secretKey,omitempty"` - - // sts - Sts string `json:"sts,omitempty"` -} - -// Validate validates this login request -func (m *LoginRequest) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateFeatures(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *LoginRequest) validateFeatures(formats strfmt.Registry) error { - if swag.IsZero(m.Features) { // not required - return nil - } - - if m.Features != nil { - if err := m.Features.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("features") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("features") - } - return err - } - } - - return nil -} - -// ContextValidate validate this login request based on the context it is used -func (m *LoginRequest) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateFeatures(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *LoginRequest) contextValidateFeatures(ctx context.Context, formats strfmt.Registry) error { - - if m.Features != nil { - - if swag.IsZero(m.Features) { // not required - return nil - } - - if err := m.Features.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("features") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("features") - } - return err - } - } - - return nil -} - -// MarshalBinary interface implementation -func (m *LoginRequest) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *LoginRequest) UnmarshalBinary(b []byte) error { - var res LoginRequest - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} - -// LoginRequestFeatures login request features -// -// swagger:model LoginRequestFeatures -type LoginRequestFeatures struct { - - // hide menu - HideMenu bool `json:"hide_menu,omitempty"` -} - -// Validate validates this login request features -func (m *LoginRequestFeatures) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this login request features based on context it is used -func (m *LoginRequestFeatures) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *LoginRequestFeatures) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *LoginRequestFeatures) UnmarshalBinary(b []byte) error { - var res LoginRequestFeatures - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/login_response.go b/models/login_response.go deleted file mode 100644 index 4665779e17d..00000000000 --- a/models/login_response.go +++ /dev/null @@ -1,70 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// LoginResponse login response -// -// swagger:model loginResponse -type LoginResponse struct { - - // ID p refresh token - IDPRefreshToken string `json:"IDPRefreshToken,omitempty"` - - // session Id - SessionID string `json:"sessionId,omitempty"` -} - -// Validate validates this login response -func (m *LoginResponse) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this login response based on context it is used -func (m *LoginResponse) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *LoginResponse) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *LoginResponse) UnmarshalBinary(b []byte) error { - var res LoginResponse - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/max_allocatable_mem_response.go b/models/max_allocatable_mem_response.go deleted file mode 100644 index c2a0407a257..00000000000 --- a/models/max_allocatable_mem_response.go +++ /dev/null @@ -1,67 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// MaxAllocatableMemResponse max allocatable mem response -// -// swagger:model maxAllocatableMemResponse -type MaxAllocatableMemResponse struct { - - // max memory - MaxMemory int64 `json:"max_memory,omitempty"` -} - -// Validate validates this max allocatable mem response -func (m *MaxAllocatableMemResponse) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this max allocatable mem response based on context it is used -func (m *MaxAllocatableMemResponse) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *MaxAllocatableMemResponse) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *MaxAllocatableMemResponse) UnmarshalBinary(b []byte) error { - var res MaxAllocatableMemResponse - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/metadata_fields.go b/models/metadata_fields.go deleted file mode 100644 index b88a210dffc..00000000000 --- a/models/metadata_fields.go +++ /dev/null @@ -1,73 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// MetadataFields metadata fields -// -// swagger:model metadataFields -type MetadataFields struct { - - // annotations - Annotations map[string]string `json:"annotations,omitempty"` - - // labels - Labels map[string]string `json:"labels,omitempty"` - - // node selector - NodeSelector map[string]string `json:"node_selector,omitempty"` -} - -// Validate validates this metadata fields -func (m *MetadataFields) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this metadata fields based on context it is used -func (m *MetadataFields) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *MetadataFields) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *MetadataFields) UnmarshalBinary(b []byte) error { - var res MetadataFields - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/mount.go b/models/mount.go deleted file mode 100644 index fd63389acdf..00000000000 --- a/models/mount.go +++ /dev/null @@ -1,76 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// Mount mount -// -// swagger:model mount -type Mount struct { - - // mount path - MountPath string `json:"mountPath,omitempty"` - - // name - Name string `json:"name,omitempty"` - - // read only - ReadOnly bool `json:"readOnly,omitempty"` - - // sub path - SubPath string `json:"subPath,omitempty"` -} - -// Validate validates this mount -func (m *Mount) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this mount based on context it is used -func (m *Mount) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *Mount) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *Mount) UnmarshalBinary(b []byte) error { - var res Mount - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/mp_integration.go b/models/mp_integration.go deleted file mode 100644 index 16cf6540bfd..00000000000 --- a/models/mp_integration.go +++ /dev/null @@ -1,70 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// MpIntegration mp integration -// -// swagger:model mpIntegration -type MpIntegration struct { - - // email - Email string `json:"email,omitempty"` - - // is in e u - IsInEU bool `json:"isInEU,omitempty"` -} - -// Validate validates this mp integration -func (m *MpIntegration) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this mp integration based on context it is used -func (m *MpIntegration) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *MpIntegration) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *MpIntegration) UnmarshalBinary(b []byte) error { - var res MpIntegration - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/namespace.go b/models/namespace.go deleted file mode 100644 index 153b8dcf633..00000000000 --- a/models/namespace.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" - "github.com/go-openapi/validate" -) - -// Namespace namespace -// -// swagger:model namespace -type Namespace struct { - - // name - // Required: true - Name *string `json:"name"` -} - -// Validate validates this namespace -func (m *Namespace) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateName(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *Namespace) validateName(formats strfmt.Registry) error { - - if err := validate.Required("name", "body", m.Name); err != nil { - return err - } - - return nil -} - -// ContextValidate validates this namespace based on context it is used -func (m *Namespace) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *Namespace) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *Namespace) UnmarshalBinary(b []byte) error { - var res Namespace - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/node_labels.go b/models/node_labels.go deleted file mode 100644 index bbfc85b4769..00000000000 --- a/models/node_labels.go +++ /dev/null @@ -1,44 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" -) - -// NodeLabels node labels -// -// swagger:model nodeLabels -type NodeLabels map[string][]string - -// Validate validates this node labels -func (m NodeLabels) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this node labels based on context it is used -func (m NodeLabels) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} diff --git a/models/node_max_allocatable_resources.go b/models/node_max_allocatable_resources.go deleted file mode 100644 index fdd734e9f2c..00000000000 --- a/models/node_max_allocatable_resources.go +++ /dev/null @@ -1,70 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// NodeMaxAllocatableResources node max allocatable resources -// -// swagger:model nodeMaxAllocatableResources -type NodeMaxAllocatableResources struct { - - // max allocatable cpu - MaxAllocatableCPU int64 `json:"max_allocatable_cpu,omitempty"` - - // max allocatable mem - MaxAllocatableMem int64 `json:"max_allocatable_mem,omitempty"` -} - -// Validate validates this node max allocatable resources -func (m *NodeMaxAllocatableResources) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this node max allocatable resources based on context it is used -func (m *NodeMaxAllocatableResources) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *NodeMaxAllocatableResources) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *NodeMaxAllocatableResources) UnmarshalBinary(b []byte) error { - var res NodeMaxAllocatableResources - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/node_selector.go b/models/node_selector.go deleted file mode 100644 index 6566a9ecaae..00000000000 --- a/models/node_selector.go +++ /dev/null @@ -1,70 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// NodeSelector node selector -// -// swagger:model nodeSelector -type NodeSelector struct { - - // key - Key string `json:"key,omitempty"` - - // value - Value string `json:"value,omitempty"` -} - -// Validate validates this node selector -func (m *NodeSelector) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this node selector based on context it is used -func (m *NodeSelector) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *NodeSelector) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *NodeSelector) UnmarshalBinary(b []byte) error { - var res NodeSelector - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/node_selector_term.go b/models/node_selector_term.go deleted file mode 100644 index 64f57ad2983..00000000000 --- a/models/node_selector_term.go +++ /dev/null @@ -1,353 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "strconv" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" - "github.com/go-openapi/validate" -) - -// NodeSelectorTerm A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm. -// -// swagger:model nodeSelectorTerm -type NodeSelectorTerm struct { - - // A list of node selector requirements by node's labels. - MatchExpressions []*NodeSelectorTermMatchExpressionsItems0 `json:"matchExpressions"` - - // A list of node selector requirements by node's fields. - MatchFields []*NodeSelectorTermMatchFieldsItems0 `json:"matchFields"` -} - -// Validate validates this node selector term -func (m *NodeSelectorTerm) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateMatchExpressions(formats); err != nil { - res = append(res, err) - } - - if err := m.validateMatchFields(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *NodeSelectorTerm) validateMatchExpressions(formats strfmt.Registry) error { - if swag.IsZero(m.MatchExpressions) { // not required - return nil - } - - for i := 0; i < len(m.MatchExpressions); i++ { - if swag.IsZero(m.MatchExpressions[i]) { // not required - continue - } - - if m.MatchExpressions[i] != nil { - if err := m.MatchExpressions[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("matchExpressions" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("matchExpressions" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *NodeSelectorTerm) validateMatchFields(formats strfmt.Registry) error { - if swag.IsZero(m.MatchFields) { // not required - return nil - } - - for i := 0; i < len(m.MatchFields); i++ { - if swag.IsZero(m.MatchFields[i]) { // not required - continue - } - - if m.MatchFields[i] != nil { - if err := m.MatchFields[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("matchFields" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("matchFields" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// ContextValidate validate this node selector term based on the context it is used -func (m *NodeSelectorTerm) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateMatchExpressions(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateMatchFields(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *NodeSelectorTerm) contextValidateMatchExpressions(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.MatchExpressions); i++ { - - if m.MatchExpressions[i] != nil { - - if swag.IsZero(m.MatchExpressions[i]) { // not required - return nil - } - - if err := m.MatchExpressions[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("matchExpressions" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("matchExpressions" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *NodeSelectorTerm) contextValidateMatchFields(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.MatchFields); i++ { - - if m.MatchFields[i] != nil { - - if swag.IsZero(m.MatchFields[i]) { // not required - return nil - } - - if err := m.MatchFields[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("matchFields" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("matchFields" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// MarshalBinary interface implementation -func (m *NodeSelectorTerm) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *NodeSelectorTerm) UnmarshalBinary(b []byte) error { - var res NodeSelectorTerm - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} - -// NodeSelectorTermMatchExpressionsItems0 A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values. -// -// swagger:model NodeSelectorTermMatchExpressionsItems0 -type NodeSelectorTermMatchExpressionsItems0 struct { - - // The label key that the selector applies to. - // Required: true - Key *string `json:"key"` - - // Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt. - // Required: true - Operator *string `json:"operator"` - - // An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch. - Values []string `json:"values"` -} - -// Validate validates this node selector term match expressions items0 -func (m *NodeSelectorTermMatchExpressionsItems0) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateKey(formats); err != nil { - res = append(res, err) - } - - if err := m.validateOperator(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *NodeSelectorTermMatchExpressionsItems0) validateKey(formats strfmt.Registry) error { - - if err := validate.Required("key", "body", m.Key); err != nil { - return err - } - - return nil -} - -func (m *NodeSelectorTermMatchExpressionsItems0) validateOperator(formats strfmt.Registry) error { - - if err := validate.Required("operator", "body", m.Operator); err != nil { - return err - } - - return nil -} - -// ContextValidate validates this node selector term match expressions items0 based on context it is used -func (m *NodeSelectorTermMatchExpressionsItems0) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *NodeSelectorTermMatchExpressionsItems0) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *NodeSelectorTermMatchExpressionsItems0) UnmarshalBinary(b []byte) error { - var res NodeSelectorTermMatchExpressionsItems0 - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} - -// NodeSelectorTermMatchFieldsItems0 A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values. -// -// swagger:model NodeSelectorTermMatchFieldsItems0 -type NodeSelectorTermMatchFieldsItems0 struct { - - // The label key that the selector applies to. - // Required: true - Key *string `json:"key"` - - // Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt. - // Required: true - Operator *string `json:"operator"` - - // An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch. - Values []string `json:"values"` -} - -// Validate validates this node selector term match fields items0 -func (m *NodeSelectorTermMatchFieldsItems0) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateKey(formats); err != nil { - res = append(res, err) - } - - if err := m.validateOperator(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *NodeSelectorTermMatchFieldsItems0) validateKey(formats strfmt.Registry) error { - - if err := validate.Required("key", "body", m.Key); err != nil { - return err - } - - return nil -} - -func (m *NodeSelectorTermMatchFieldsItems0) validateOperator(formats strfmt.Registry) error { - - if err := validate.Required("operator", "body", m.Operator); err != nil { - return err - } - - return nil -} - -// ContextValidate validates this node selector term match fields items0 based on context it is used -func (m *NodeSelectorTermMatchFieldsItems0) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *NodeSelectorTermMatchFieldsItems0) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *NodeSelectorTermMatchFieldsItems0) UnmarshalBinary(b []byte) error { - var res NodeSelectorTermMatchFieldsItems0 - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/operator_session_response.go b/models/operator_session_response.go deleted file mode 100644 index ed125ad1815..00000000000 --- a/models/operator_session_response.go +++ /dev/null @@ -1,128 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "encoding/json" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" - "github.com/go-openapi/validate" -) - -// OperatorSessionResponse operator session response -// -// swagger:model operatorSessionResponse -type OperatorSessionResponse struct { - - // features - Features []string `json:"features"` - - // operator - Operator bool `json:"operator,omitempty"` - - // permissions - Permissions map[string][]string `json:"permissions,omitempty"` - - // status - // Enum: [ok] - Status string `json:"status,omitempty"` -} - -// Validate validates this operator session response -func (m *OperatorSessionResponse) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateStatus(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -var operatorSessionResponseTypeStatusPropEnum []interface{} - -func init() { - var res []string - if err := json.Unmarshal([]byte(`["ok"]`), &res); err != nil { - panic(err) - } - for _, v := range res { - operatorSessionResponseTypeStatusPropEnum = append(operatorSessionResponseTypeStatusPropEnum, v) - } -} - -const ( - - // OperatorSessionResponseStatusOk captures enum value "ok" - OperatorSessionResponseStatusOk string = "ok" -) - -// prop value enum -func (m *OperatorSessionResponse) validateStatusEnum(path, location string, value string) error { - if err := validate.EnumCase(path, location, value, operatorSessionResponseTypeStatusPropEnum, true); err != nil { - return err - } - return nil -} - -func (m *OperatorSessionResponse) validateStatus(formats strfmt.Registry) error { - if swag.IsZero(m.Status) { // not required - return nil - } - - // value enum - if err := m.validateStatusEnum("status", "body", m.Status); err != nil { - return err - } - - return nil -} - -// ContextValidate validates this operator session response based on context it is used -func (m *OperatorSessionResponse) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *OperatorSessionResponse) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *OperatorSessionResponse) UnmarshalBinary(b []byte) error { - var res OperatorSessionResponse - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/operator_subnet_api_key.go b/models/operator_subnet_api_key.go deleted file mode 100644 index d75d2af5e22..00000000000 --- a/models/operator_subnet_api_key.go +++ /dev/null @@ -1,67 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// OperatorSubnetAPIKey operator subnet API key -// -// swagger:model operatorSubnetAPIKey -type OperatorSubnetAPIKey struct { - - // api key - APIKey string `json:"apiKey,omitempty"` -} - -// Validate validates this operator subnet API key -func (m *OperatorSubnetAPIKey) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this operator subnet API key based on context it is used -func (m *OperatorSubnetAPIKey) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *OperatorSubnetAPIKey) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *OperatorSubnetAPIKey) UnmarshalBinary(b []byte) error { - var res OperatorSubnetAPIKey - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/operator_subnet_login_m_f_a_request.go b/models/operator_subnet_login_m_f_a_request.go deleted file mode 100644 index c0bb4b5b3a0..00000000000 --- a/models/operator_subnet_login_m_f_a_request.go +++ /dev/null @@ -1,122 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" - "github.com/go-openapi/validate" -) - -// OperatorSubnetLoginMFARequest operator subnet login m f a request -// -// swagger:model operatorSubnetLoginMFARequest -type OperatorSubnetLoginMFARequest struct { - - // mfa token - // Required: true - MfaToken *string `json:"mfa_token"` - - // otp - // Required: true - Otp *string `json:"otp"` - - // username - // Required: true - Username *string `json:"username"` -} - -// Validate validates this operator subnet login m f a request -func (m *OperatorSubnetLoginMFARequest) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateMfaToken(formats); err != nil { - res = append(res, err) - } - - if err := m.validateOtp(formats); err != nil { - res = append(res, err) - } - - if err := m.validateUsername(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *OperatorSubnetLoginMFARequest) validateMfaToken(formats strfmt.Registry) error { - - if err := validate.Required("mfa_token", "body", m.MfaToken); err != nil { - return err - } - - return nil -} - -func (m *OperatorSubnetLoginMFARequest) validateOtp(formats strfmt.Registry) error { - - if err := validate.Required("otp", "body", m.Otp); err != nil { - return err - } - - return nil -} - -func (m *OperatorSubnetLoginMFARequest) validateUsername(formats strfmt.Registry) error { - - if err := validate.Required("username", "body", m.Username); err != nil { - return err - } - - return nil -} - -// ContextValidate validates this operator subnet login m f a request based on context it is used -func (m *OperatorSubnetLoginMFARequest) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *OperatorSubnetLoginMFARequest) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *OperatorSubnetLoginMFARequest) UnmarshalBinary(b []byte) error { - var res OperatorSubnetLoginMFARequest - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/operator_subnet_login_request.go b/models/operator_subnet_login_request.go deleted file mode 100644 index 799b1cda47d..00000000000 --- a/models/operator_subnet_login_request.go +++ /dev/null @@ -1,70 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// OperatorSubnetLoginRequest operator subnet login request -// -// swagger:model operatorSubnetLoginRequest -type OperatorSubnetLoginRequest struct { - - // password - Password string `json:"password,omitempty"` - - // username - Username string `json:"username,omitempty"` -} - -// Validate validates this operator subnet login request -func (m *OperatorSubnetLoginRequest) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this operator subnet login request based on context it is used -func (m *OperatorSubnetLoginRequest) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *OperatorSubnetLoginRequest) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *OperatorSubnetLoginRequest) UnmarshalBinary(b []byte) error { - var res OperatorSubnetLoginRequest - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/operator_subnet_login_response.go b/models/operator_subnet_login_response.go deleted file mode 100644 index 27e854ac234..00000000000 --- a/models/operator_subnet_login_response.go +++ /dev/null @@ -1,70 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// OperatorSubnetLoginResponse operator subnet login response -// -// swagger:model operatorSubnetLoginResponse -type OperatorSubnetLoginResponse struct { - - // access token - AccessToken string `json:"access_token,omitempty"` - - // mfa token - MfaToken string `json:"mfa_token,omitempty"` -} - -// Validate validates this operator subnet login response -func (m *OperatorSubnetLoginResponse) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this operator subnet login response based on context it is used -func (m *OperatorSubnetLoginResponse) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *OperatorSubnetLoginResponse) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *OperatorSubnetLoginResponse) UnmarshalBinary(b []byte) error { - var res OperatorSubnetLoginResponse - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/operator_subnet_register_api_key_response.go b/models/operator_subnet_register_api_key_response.go deleted file mode 100644 index 9ec70197609..00000000000 --- a/models/operator_subnet_register_api_key_response.go +++ /dev/null @@ -1,67 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// OperatorSubnetRegisterAPIKeyResponse operator subnet register API key response -// -// swagger:model operatorSubnetRegisterAPIKeyResponse -type OperatorSubnetRegisterAPIKeyResponse struct { - - // registered - Registered bool `json:"registered,omitempty"` -} - -// Validate validates this operator subnet register API key response -func (m *OperatorSubnetRegisterAPIKeyResponse) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this operator subnet register API key response based on context it is used -func (m *OperatorSubnetRegisterAPIKeyResponse) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *OperatorSubnetRegisterAPIKeyResponse) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *OperatorSubnetRegisterAPIKeyResponse) UnmarshalBinary(b []byte) error { - var res OperatorSubnetRegisterAPIKeyResponse - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/parity_response.go b/models/parity_response.go deleted file mode 100644 index a2cb0a09631..00000000000 --- a/models/parity_response.go +++ /dev/null @@ -1,44 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" -) - -// ParityResponse parity response -// -// swagger:model parityResponse -type ParityResponse []string - -// Validate validates this parity response -func (m ParityResponse) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this parity response based on context it is used -func (m ParityResponse) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} diff --git a/models/pod_affinity_term.go b/models/pod_affinity_term.go deleted file mode 100644 index 5261687b2db..00000000000 --- a/models/pod_affinity_term.go +++ /dev/null @@ -1,333 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "strconv" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" - "github.com/go-openapi/validate" -) - -// PodAffinityTerm Required. A pod affinity term, associated with the corresponding weight. -// -// swagger:model podAffinityTerm -type PodAffinityTerm struct { - - // label selector - LabelSelector *PodAffinityTermLabelSelector `json:"labelSelector,omitempty"` - - // namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means "this pod's namespace" - Namespaces []string `json:"namespaces"` - - // This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed. - // Required: true - TopologyKey *string `json:"topologyKey"` -} - -// Validate validates this pod affinity term -func (m *PodAffinityTerm) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateLabelSelector(formats); err != nil { - res = append(res, err) - } - - if err := m.validateTopologyKey(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *PodAffinityTerm) validateLabelSelector(formats strfmt.Registry) error { - if swag.IsZero(m.LabelSelector) { // not required - return nil - } - - if m.LabelSelector != nil { - if err := m.LabelSelector.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("labelSelector") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("labelSelector") - } - return err - } - } - - return nil -} - -func (m *PodAffinityTerm) validateTopologyKey(formats strfmt.Registry) error { - - if err := validate.Required("topologyKey", "body", m.TopologyKey); err != nil { - return err - } - - return nil -} - -// ContextValidate validate this pod affinity term based on the context it is used -func (m *PodAffinityTerm) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateLabelSelector(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *PodAffinityTerm) contextValidateLabelSelector(ctx context.Context, formats strfmt.Registry) error { - - if m.LabelSelector != nil { - - if swag.IsZero(m.LabelSelector) { // not required - return nil - } - - if err := m.LabelSelector.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("labelSelector") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("labelSelector") - } - return err - } - } - - return nil -} - -// MarshalBinary interface implementation -func (m *PodAffinityTerm) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *PodAffinityTerm) UnmarshalBinary(b []byte) error { - var res PodAffinityTerm - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} - -// PodAffinityTermLabelSelector A label query over a set of resources, in this case pods. -// -// swagger:model PodAffinityTermLabelSelector -type PodAffinityTermLabelSelector struct { - - // matchExpressions is a list of label selector requirements. The requirements are ANDed. - MatchExpressions []*PodAffinityTermLabelSelectorMatchExpressionsItems0 `json:"matchExpressions"` - - // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - MatchLabels map[string]string `json:"matchLabels,omitempty"` -} - -// Validate validates this pod affinity term label selector -func (m *PodAffinityTermLabelSelector) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateMatchExpressions(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *PodAffinityTermLabelSelector) validateMatchExpressions(formats strfmt.Registry) error { - if swag.IsZero(m.MatchExpressions) { // not required - return nil - } - - for i := 0; i < len(m.MatchExpressions); i++ { - if swag.IsZero(m.MatchExpressions[i]) { // not required - continue - } - - if m.MatchExpressions[i] != nil { - if err := m.MatchExpressions[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("labelSelector" + "." + "matchExpressions" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("labelSelector" + "." + "matchExpressions" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// ContextValidate validate this pod affinity term label selector based on the context it is used -func (m *PodAffinityTermLabelSelector) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateMatchExpressions(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *PodAffinityTermLabelSelector) contextValidateMatchExpressions(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.MatchExpressions); i++ { - - if m.MatchExpressions[i] != nil { - - if swag.IsZero(m.MatchExpressions[i]) { // not required - return nil - } - - if err := m.MatchExpressions[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("labelSelector" + "." + "matchExpressions" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("labelSelector" + "." + "matchExpressions" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// MarshalBinary interface implementation -func (m *PodAffinityTermLabelSelector) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *PodAffinityTermLabelSelector) UnmarshalBinary(b []byte) error { - var res PodAffinityTermLabelSelector - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} - -// PodAffinityTermLabelSelectorMatchExpressionsItems0 A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values. -// -// swagger:model PodAffinityTermLabelSelectorMatchExpressionsItems0 -type PodAffinityTermLabelSelectorMatchExpressionsItems0 struct { - - // key is the label key that the selector applies to. - // Required: true - Key *string `json:"key"` - - // operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist. - // Required: true - Operator *string `json:"operator"` - - // values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch. - Values []string `json:"values"` -} - -// Validate validates this pod affinity term label selector match expressions items0 -func (m *PodAffinityTermLabelSelectorMatchExpressionsItems0) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateKey(formats); err != nil { - res = append(res, err) - } - - if err := m.validateOperator(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *PodAffinityTermLabelSelectorMatchExpressionsItems0) validateKey(formats strfmt.Registry) error { - - if err := validate.Required("key", "body", m.Key); err != nil { - return err - } - - return nil -} - -func (m *PodAffinityTermLabelSelectorMatchExpressionsItems0) validateOperator(formats strfmt.Registry) error { - - if err := validate.Required("operator", "body", m.Operator); err != nil { - return err - } - - return nil -} - -// ContextValidate validates this pod affinity term label selector match expressions items0 based on context it is used -func (m *PodAffinityTermLabelSelectorMatchExpressionsItems0) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *PodAffinityTermLabelSelectorMatchExpressionsItems0) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *PodAffinityTermLabelSelectorMatchExpressionsItems0) UnmarshalBinary(b []byte) error { - var res PodAffinityTermLabelSelectorMatchExpressionsItems0 - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/policy_entity.go b/models/policy_entity.go deleted file mode 100644 index a99b262bce1..00000000000 --- a/models/policy_entity.go +++ /dev/null @@ -1,95 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "encoding/json" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/validate" -) - -// PolicyEntity policy entity -// -// swagger:model policyEntity -type PolicyEntity string - -func NewPolicyEntity(value PolicyEntity) *PolicyEntity { - return &value -} - -// Pointer returns a pointer to a freshly-allocated PolicyEntity. -func (m PolicyEntity) Pointer() *PolicyEntity { - return &m -} - -const ( - - // PolicyEntityUser captures enum value "user" - PolicyEntityUser PolicyEntity = "user" - - // PolicyEntityGroup captures enum value "group" - PolicyEntityGroup PolicyEntity = "group" -) - -// for schema -var policyEntityEnum []interface{} - -func init() { - var res []PolicyEntity - if err := json.Unmarshal([]byte(`["user","group"]`), &res); err != nil { - panic(err) - } - for _, v := range res { - policyEntityEnum = append(policyEntityEnum, v) - } -} - -func (m PolicyEntity) validatePolicyEntityEnum(path, location string, value PolicyEntity) error { - if err := validate.EnumCase(path, location, value, policyEntityEnum, true); err != nil { - return err - } - return nil -} - -// Validate validates this policy entity -func (m PolicyEntity) Validate(formats strfmt.Registry) error { - var res []error - - // value enum - if err := m.validatePolicyEntityEnum("", "body", m); err != nil { - return err - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// ContextValidate validates this policy entity based on context it is used -func (m PolicyEntity) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} diff --git a/models/pool.go b/models/pool.go deleted file mode 100644 index e2202d87f35..00000000000 --- a/models/pool.go +++ /dev/null @@ -1,428 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" - "github.com/go-openapi/validate" -) - -// Pool pool -// -// swagger:model pool -type Pool struct { - - // affinity - Affinity *PoolAffinity `json:"affinity,omitempty"` - - // name - Name string `json:"name,omitempty"` - - // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ - NodeSelector map[string]string `json:"node_selector,omitempty"` - - // resources - Resources *PoolResources `json:"resources,omitempty"` - - // runtime class name - RuntimeClassName string `json:"runtimeClassName,omitempty"` - - // security context - SecurityContext *SecurityContext `json:"securityContext,omitempty"` - - // servers - // Required: true - Servers *int64 `json:"servers"` - - // tolerations - Tolerations PoolTolerations `json:"tolerations,omitempty"` - - // volume configuration - // Required: true - VolumeConfiguration *PoolVolumeConfiguration `json:"volume_configuration"` - - // volumes per server - // Required: true - VolumesPerServer *int32 `json:"volumes_per_server"` -} - -// Validate validates this pool -func (m *Pool) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateAffinity(formats); err != nil { - res = append(res, err) - } - - if err := m.validateResources(formats); err != nil { - res = append(res, err) - } - - if err := m.validateSecurityContext(formats); err != nil { - res = append(res, err) - } - - if err := m.validateServers(formats); err != nil { - res = append(res, err) - } - - if err := m.validateTolerations(formats); err != nil { - res = append(res, err) - } - - if err := m.validateVolumeConfiguration(formats); err != nil { - res = append(res, err) - } - - if err := m.validateVolumesPerServer(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *Pool) validateAffinity(formats strfmt.Registry) error { - if swag.IsZero(m.Affinity) { // not required - return nil - } - - if m.Affinity != nil { - if err := m.Affinity.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("affinity") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("affinity") - } - return err - } - } - - return nil -} - -func (m *Pool) validateResources(formats strfmt.Registry) error { - if swag.IsZero(m.Resources) { // not required - return nil - } - - if m.Resources != nil { - if err := m.Resources.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("resources") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("resources") - } - return err - } - } - - return nil -} - -func (m *Pool) validateSecurityContext(formats strfmt.Registry) error { - if swag.IsZero(m.SecurityContext) { // not required - return nil - } - - if m.SecurityContext != nil { - if err := m.SecurityContext.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("securityContext") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("securityContext") - } - return err - } - } - - return nil -} - -func (m *Pool) validateServers(formats strfmt.Registry) error { - - if err := validate.Required("servers", "body", m.Servers); err != nil { - return err - } - - return nil -} - -func (m *Pool) validateTolerations(formats strfmt.Registry) error { - if swag.IsZero(m.Tolerations) { // not required - return nil - } - - if err := m.Tolerations.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("tolerations") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("tolerations") - } - return err - } - - return nil -} - -func (m *Pool) validateVolumeConfiguration(formats strfmt.Registry) error { - - if err := validate.Required("volume_configuration", "body", m.VolumeConfiguration); err != nil { - return err - } - - if m.VolumeConfiguration != nil { - if err := m.VolumeConfiguration.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("volume_configuration") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("volume_configuration") - } - return err - } - } - - return nil -} - -func (m *Pool) validateVolumesPerServer(formats strfmt.Registry) error { - - if err := validate.Required("volumes_per_server", "body", m.VolumesPerServer); err != nil { - return err - } - - return nil -} - -// ContextValidate validate this pool based on the context it is used -func (m *Pool) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateAffinity(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateResources(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateSecurityContext(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateTolerations(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateVolumeConfiguration(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *Pool) contextValidateAffinity(ctx context.Context, formats strfmt.Registry) error { - - if m.Affinity != nil { - - if swag.IsZero(m.Affinity) { // not required - return nil - } - - if err := m.Affinity.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("affinity") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("affinity") - } - return err - } - } - - return nil -} - -func (m *Pool) contextValidateResources(ctx context.Context, formats strfmt.Registry) error { - - if m.Resources != nil { - - if swag.IsZero(m.Resources) { // not required - return nil - } - - if err := m.Resources.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("resources") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("resources") - } - return err - } - } - - return nil -} - -func (m *Pool) contextValidateSecurityContext(ctx context.Context, formats strfmt.Registry) error { - - if m.SecurityContext != nil { - - if swag.IsZero(m.SecurityContext) { // not required - return nil - } - - if err := m.SecurityContext.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("securityContext") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("securityContext") - } - return err - } - } - - return nil -} - -func (m *Pool) contextValidateTolerations(ctx context.Context, formats strfmt.Registry) error { - - if err := m.Tolerations.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("tolerations") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("tolerations") - } - return err - } - - return nil -} - -func (m *Pool) contextValidateVolumeConfiguration(ctx context.Context, formats strfmt.Registry) error { - - if m.VolumeConfiguration != nil { - - if err := m.VolumeConfiguration.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("volume_configuration") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("volume_configuration") - } - return err - } - } - - return nil -} - -// MarshalBinary interface implementation -func (m *Pool) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *Pool) UnmarshalBinary(b []byte) error { - var res Pool - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} - -// PoolVolumeConfiguration pool volume configuration -// -// swagger:model PoolVolumeConfiguration -type PoolVolumeConfiguration struct { - - // annotations - Annotations map[string]string `json:"annotations,omitempty"` - - // labels - Labels map[string]string `json:"labels,omitempty"` - - // size - // Required: true - Size *int64 `json:"size"` - - // storage class name - StorageClassName string `json:"storage_class_name,omitempty"` -} - -// Validate validates this pool volume configuration -func (m *PoolVolumeConfiguration) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateSize(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *PoolVolumeConfiguration) validateSize(formats strfmt.Registry) error { - - if err := validate.Required("volume_configuration"+"."+"size", "body", m.Size); err != nil { - return err - } - - return nil -} - -// ContextValidate validates this pool volume configuration based on context it is used -func (m *PoolVolumeConfiguration) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *PoolVolumeConfiguration) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *PoolVolumeConfiguration) UnmarshalBinary(b []byte) error { - var res PoolVolumeConfiguration - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/pool_affinity.go b/models/pool_affinity.go deleted file mode 100644 index 7b02ddf260e..00000000000 --- a/models/pool_affinity.go +++ /dev/null @@ -1,1161 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "strconv" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" - "github.com/go-openapi/validate" -) - -// PoolAffinity If specified, affinity will define the pod's scheduling constraints -// -// swagger:model poolAffinity -type PoolAffinity struct { - - // node affinity - NodeAffinity *PoolAffinityNodeAffinity `json:"nodeAffinity,omitempty"` - - // pod affinity - PodAffinity *PoolAffinityPodAffinity `json:"podAffinity,omitempty"` - - // pod anti affinity - PodAntiAffinity *PoolAffinityPodAntiAffinity `json:"podAntiAffinity,omitempty"` -} - -// Validate validates this pool affinity -func (m *PoolAffinity) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateNodeAffinity(formats); err != nil { - res = append(res, err) - } - - if err := m.validatePodAffinity(formats); err != nil { - res = append(res, err) - } - - if err := m.validatePodAntiAffinity(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *PoolAffinity) validateNodeAffinity(formats strfmt.Registry) error { - if swag.IsZero(m.NodeAffinity) { // not required - return nil - } - - if m.NodeAffinity != nil { - if err := m.NodeAffinity.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("nodeAffinity") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("nodeAffinity") - } - return err - } - } - - return nil -} - -func (m *PoolAffinity) validatePodAffinity(formats strfmt.Registry) error { - if swag.IsZero(m.PodAffinity) { // not required - return nil - } - - if m.PodAffinity != nil { - if err := m.PodAffinity.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("podAffinity") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("podAffinity") - } - return err - } - } - - return nil -} - -func (m *PoolAffinity) validatePodAntiAffinity(formats strfmt.Registry) error { - if swag.IsZero(m.PodAntiAffinity) { // not required - return nil - } - - if m.PodAntiAffinity != nil { - if err := m.PodAntiAffinity.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("podAntiAffinity") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("podAntiAffinity") - } - return err - } - } - - return nil -} - -// ContextValidate validate this pool affinity based on the context it is used -func (m *PoolAffinity) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateNodeAffinity(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidatePodAffinity(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidatePodAntiAffinity(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *PoolAffinity) contextValidateNodeAffinity(ctx context.Context, formats strfmt.Registry) error { - - if m.NodeAffinity != nil { - - if swag.IsZero(m.NodeAffinity) { // not required - return nil - } - - if err := m.NodeAffinity.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("nodeAffinity") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("nodeAffinity") - } - return err - } - } - - return nil -} - -func (m *PoolAffinity) contextValidatePodAffinity(ctx context.Context, formats strfmt.Registry) error { - - if m.PodAffinity != nil { - - if swag.IsZero(m.PodAffinity) { // not required - return nil - } - - if err := m.PodAffinity.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("podAffinity") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("podAffinity") - } - return err - } - } - - return nil -} - -func (m *PoolAffinity) contextValidatePodAntiAffinity(ctx context.Context, formats strfmt.Registry) error { - - if m.PodAntiAffinity != nil { - - if swag.IsZero(m.PodAntiAffinity) { // not required - return nil - } - - if err := m.PodAntiAffinity.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("podAntiAffinity") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("podAntiAffinity") - } - return err - } - } - - return nil -} - -// MarshalBinary interface implementation -func (m *PoolAffinity) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *PoolAffinity) UnmarshalBinary(b []byte) error { - var res PoolAffinity - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} - -// PoolAffinityNodeAffinity Describes node affinity scheduling rules for the pod. -// -// swagger:model PoolAffinityNodeAffinity -type PoolAffinityNodeAffinity struct { - - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - PreferredDuringSchedulingIgnoredDuringExecution []*PoolAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0 `json:"preferredDuringSchedulingIgnoredDuringExecution"` - - // required during scheduling ignored during execution - RequiredDuringSchedulingIgnoredDuringExecution *PoolAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecution `json:"requiredDuringSchedulingIgnoredDuringExecution,omitempty"` -} - -// Validate validates this pool affinity node affinity -func (m *PoolAffinityNodeAffinity) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validatePreferredDuringSchedulingIgnoredDuringExecution(formats); err != nil { - res = append(res, err) - } - - if err := m.validateRequiredDuringSchedulingIgnoredDuringExecution(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *PoolAffinityNodeAffinity) validatePreferredDuringSchedulingIgnoredDuringExecution(formats strfmt.Registry) error { - if swag.IsZero(m.PreferredDuringSchedulingIgnoredDuringExecution) { // not required - return nil - } - - for i := 0; i < len(m.PreferredDuringSchedulingIgnoredDuringExecution); i++ { - if swag.IsZero(m.PreferredDuringSchedulingIgnoredDuringExecution[i]) { // not required - continue - } - - if m.PreferredDuringSchedulingIgnoredDuringExecution[i] != nil { - if err := m.PreferredDuringSchedulingIgnoredDuringExecution[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("nodeAffinity" + "." + "preferredDuringSchedulingIgnoredDuringExecution" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("nodeAffinity" + "." + "preferredDuringSchedulingIgnoredDuringExecution" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *PoolAffinityNodeAffinity) validateRequiredDuringSchedulingIgnoredDuringExecution(formats strfmt.Registry) error { - if swag.IsZero(m.RequiredDuringSchedulingIgnoredDuringExecution) { // not required - return nil - } - - if m.RequiredDuringSchedulingIgnoredDuringExecution != nil { - if err := m.RequiredDuringSchedulingIgnoredDuringExecution.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("nodeAffinity" + "." + "requiredDuringSchedulingIgnoredDuringExecution") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("nodeAffinity" + "." + "requiredDuringSchedulingIgnoredDuringExecution") - } - return err - } - } - - return nil -} - -// ContextValidate validate this pool affinity node affinity based on the context it is used -func (m *PoolAffinityNodeAffinity) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidatePreferredDuringSchedulingIgnoredDuringExecution(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateRequiredDuringSchedulingIgnoredDuringExecution(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *PoolAffinityNodeAffinity) contextValidatePreferredDuringSchedulingIgnoredDuringExecution(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.PreferredDuringSchedulingIgnoredDuringExecution); i++ { - - if m.PreferredDuringSchedulingIgnoredDuringExecution[i] != nil { - - if swag.IsZero(m.PreferredDuringSchedulingIgnoredDuringExecution[i]) { // not required - return nil - } - - if err := m.PreferredDuringSchedulingIgnoredDuringExecution[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("nodeAffinity" + "." + "preferredDuringSchedulingIgnoredDuringExecution" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("nodeAffinity" + "." + "preferredDuringSchedulingIgnoredDuringExecution" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *PoolAffinityNodeAffinity) contextValidateRequiredDuringSchedulingIgnoredDuringExecution(ctx context.Context, formats strfmt.Registry) error { - - if m.RequiredDuringSchedulingIgnoredDuringExecution != nil { - - if swag.IsZero(m.RequiredDuringSchedulingIgnoredDuringExecution) { // not required - return nil - } - - if err := m.RequiredDuringSchedulingIgnoredDuringExecution.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("nodeAffinity" + "." + "requiredDuringSchedulingIgnoredDuringExecution") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("nodeAffinity" + "." + "requiredDuringSchedulingIgnoredDuringExecution") - } - return err - } - } - - return nil -} - -// MarshalBinary interface implementation -func (m *PoolAffinityNodeAffinity) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *PoolAffinityNodeAffinity) UnmarshalBinary(b []byte) error { - var res PoolAffinityNodeAffinity - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} - -// PoolAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0 An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op). -// -// swagger:model PoolAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0 -type PoolAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0 struct { - - // A node selector term, associated with the corresponding weight. - // Required: true - Preference *NodeSelectorTerm `json:"preference"` - - // Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100. - // Required: true - Weight *int32 `json:"weight"` -} - -// Validate validates this pool affinity node affinity preferred during scheduling ignored during execution items0 -func (m *PoolAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validatePreference(formats); err != nil { - res = append(res, err) - } - - if err := m.validateWeight(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *PoolAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0) validatePreference(formats strfmt.Registry) error { - - if err := validate.Required("preference", "body", m.Preference); err != nil { - return err - } - - if m.Preference != nil { - if err := m.Preference.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("preference") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("preference") - } - return err - } - } - - return nil -} - -func (m *PoolAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0) validateWeight(formats strfmt.Registry) error { - - if err := validate.Required("weight", "body", m.Weight); err != nil { - return err - } - - return nil -} - -// ContextValidate validate this pool affinity node affinity preferred during scheduling ignored during execution items0 based on the context it is used -func (m *PoolAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidatePreference(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *PoolAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0) contextValidatePreference(ctx context.Context, formats strfmt.Registry) error { - - if m.Preference != nil { - - if err := m.Preference.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("preference") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("preference") - } - return err - } - } - - return nil -} - -// MarshalBinary interface implementation -func (m *PoolAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *PoolAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0) UnmarshalBinary(b []byte) error { - var res PoolAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0 - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} - -// PoolAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecution If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node. -// -// swagger:model PoolAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecution -type PoolAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecution struct { - - // Required. A list of node selector terms. The terms are ORed. - // Required: true - NodeSelectorTerms []*NodeSelectorTerm `json:"nodeSelectorTerms"` -} - -// Validate validates this pool affinity node affinity required during scheduling ignored during execution -func (m *PoolAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecution) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateNodeSelectorTerms(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *PoolAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecution) validateNodeSelectorTerms(formats strfmt.Registry) error { - - if err := validate.Required("nodeAffinity"+"."+"requiredDuringSchedulingIgnoredDuringExecution"+"."+"nodeSelectorTerms", "body", m.NodeSelectorTerms); err != nil { - return err - } - - for i := 0; i < len(m.NodeSelectorTerms); i++ { - if swag.IsZero(m.NodeSelectorTerms[i]) { // not required - continue - } - - if m.NodeSelectorTerms[i] != nil { - if err := m.NodeSelectorTerms[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("nodeAffinity" + "." + "requiredDuringSchedulingIgnoredDuringExecution" + "." + "nodeSelectorTerms" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("nodeAffinity" + "." + "requiredDuringSchedulingIgnoredDuringExecution" + "." + "nodeSelectorTerms" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// ContextValidate validate this pool affinity node affinity required during scheduling ignored during execution based on the context it is used -func (m *PoolAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecution) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateNodeSelectorTerms(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *PoolAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecution) contextValidateNodeSelectorTerms(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.NodeSelectorTerms); i++ { - - if m.NodeSelectorTerms[i] != nil { - - if swag.IsZero(m.NodeSelectorTerms[i]) { // not required - return nil - } - - if err := m.NodeSelectorTerms[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("nodeAffinity" + "." + "requiredDuringSchedulingIgnoredDuringExecution" + "." + "nodeSelectorTerms" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("nodeAffinity" + "." + "requiredDuringSchedulingIgnoredDuringExecution" + "." + "nodeSelectorTerms" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// MarshalBinary interface implementation -func (m *PoolAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecution) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *PoolAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecution) UnmarshalBinary(b []byte) error { - var res PoolAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecution - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} - -// PoolAffinityPodAffinity Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, pool, etc. as some other pod(s)). -// -// swagger:model PoolAffinityPodAffinity -type PoolAffinityPodAffinity struct { - - // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - PreferredDuringSchedulingIgnoredDuringExecution []*PoolAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0 `json:"preferredDuringSchedulingIgnoredDuringExecution"` - - // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - RequiredDuringSchedulingIgnoredDuringExecution []*PodAffinityTerm `json:"requiredDuringSchedulingIgnoredDuringExecution"` -} - -// Validate validates this pool affinity pod affinity -func (m *PoolAffinityPodAffinity) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validatePreferredDuringSchedulingIgnoredDuringExecution(formats); err != nil { - res = append(res, err) - } - - if err := m.validateRequiredDuringSchedulingIgnoredDuringExecution(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *PoolAffinityPodAffinity) validatePreferredDuringSchedulingIgnoredDuringExecution(formats strfmt.Registry) error { - if swag.IsZero(m.PreferredDuringSchedulingIgnoredDuringExecution) { // not required - return nil - } - - for i := 0; i < len(m.PreferredDuringSchedulingIgnoredDuringExecution); i++ { - if swag.IsZero(m.PreferredDuringSchedulingIgnoredDuringExecution[i]) { // not required - continue - } - - if m.PreferredDuringSchedulingIgnoredDuringExecution[i] != nil { - if err := m.PreferredDuringSchedulingIgnoredDuringExecution[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("podAffinity" + "." + "preferredDuringSchedulingIgnoredDuringExecution" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("podAffinity" + "." + "preferredDuringSchedulingIgnoredDuringExecution" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *PoolAffinityPodAffinity) validateRequiredDuringSchedulingIgnoredDuringExecution(formats strfmt.Registry) error { - if swag.IsZero(m.RequiredDuringSchedulingIgnoredDuringExecution) { // not required - return nil - } - - for i := 0; i < len(m.RequiredDuringSchedulingIgnoredDuringExecution); i++ { - if swag.IsZero(m.RequiredDuringSchedulingIgnoredDuringExecution[i]) { // not required - continue - } - - if m.RequiredDuringSchedulingIgnoredDuringExecution[i] != nil { - if err := m.RequiredDuringSchedulingIgnoredDuringExecution[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("podAffinity" + "." + "requiredDuringSchedulingIgnoredDuringExecution" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("podAffinity" + "." + "requiredDuringSchedulingIgnoredDuringExecution" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// ContextValidate validate this pool affinity pod affinity based on the context it is used -func (m *PoolAffinityPodAffinity) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidatePreferredDuringSchedulingIgnoredDuringExecution(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateRequiredDuringSchedulingIgnoredDuringExecution(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *PoolAffinityPodAffinity) contextValidatePreferredDuringSchedulingIgnoredDuringExecution(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.PreferredDuringSchedulingIgnoredDuringExecution); i++ { - - if m.PreferredDuringSchedulingIgnoredDuringExecution[i] != nil { - - if swag.IsZero(m.PreferredDuringSchedulingIgnoredDuringExecution[i]) { // not required - return nil - } - - if err := m.PreferredDuringSchedulingIgnoredDuringExecution[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("podAffinity" + "." + "preferredDuringSchedulingIgnoredDuringExecution" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("podAffinity" + "." + "preferredDuringSchedulingIgnoredDuringExecution" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *PoolAffinityPodAffinity) contextValidateRequiredDuringSchedulingIgnoredDuringExecution(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.RequiredDuringSchedulingIgnoredDuringExecution); i++ { - - if m.RequiredDuringSchedulingIgnoredDuringExecution[i] != nil { - - if swag.IsZero(m.RequiredDuringSchedulingIgnoredDuringExecution[i]) { // not required - return nil - } - - if err := m.RequiredDuringSchedulingIgnoredDuringExecution[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("podAffinity" + "." + "requiredDuringSchedulingIgnoredDuringExecution" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("podAffinity" + "." + "requiredDuringSchedulingIgnoredDuringExecution" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// MarshalBinary interface implementation -func (m *PoolAffinityPodAffinity) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *PoolAffinityPodAffinity) UnmarshalBinary(b []byte) error { - var res PoolAffinityPodAffinity - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} - -// PoolAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0 The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s) -// -// swagger:model PoolAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0 -type PoolAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0 struct { - - // pod affinity term - // Required: true - PodAffinityTerm *PodAffinityTerm `json:"podAffinityTerm"` - - // weight associated with matching the corresponding podAffinityTerm, in the range 1-100. - // Required: true - Weight *int32 `json:"weight"` -} - -// Validate validates this pool affinity pod affinity preferred during scheduling ignored during execution items0 -func (m *PoolAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validatePodAffinityTerm(formats); err != nil { - res = append(res, err) - } - - if err := m.validateWeight(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *PoolAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0) validatePodAffinityTerm(formats strfmt.Registry) error { - - if err := validate.Required("podAffinityTerm", "body", m.PodAffinityTerm); err != nil { - return err - } - - if m.PodAffinityTerm != nil { - if err := m.PodAffinityTerm.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("podAffinityTerm") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("podAffinityTerm") - } - return err - } - } - - return nil -} - -func (m *PoolAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0) validateWeight(formats strfmt.Registry) error { - - if err := validate.Required("weight", "body", m.Weight); err != nil { - return err - } - - return nil -} - -// ContextValidate validate this pool affinity pod affinity preferred during scheduling ignored during execution items0 based on the context it is used -func (m *PoolAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidatePodAffinityTerm(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *PoolAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0) contextValidatePodAffinityTerm(ctx context.Context, formats strfmt.Registry) error { - - if m.PodAffinityTerm != nil { - - if err := m.PodAffinityTerm.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("podAffinityTerm") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("podAffinityTerm") - } - return err - } - } - - return nil -} - -// MarshalBinary interface implementation -func (m *PoolAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *PoolAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0) UnmarshalBinary(b []byte) error { - var res PoolAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0 - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} - -// PoolAffinityPodAntiAffinity Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, pool, etc. as some other pod(s)). -// -// swagger:model PoolAffinityPodAntiAffinity -type PoolAffinityPodAntiAffinity struct { - - // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - PreferredDuringSchedulingIgnoredDuringExecution []*PoolAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0 `json:"preferredDuringSchedulingIgnoredDuringExecution"` - - // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - RequiredDuringSchedulingIgnoredDuringExecution []*PodAffinityTerm `json:"requiredDuringSchedulingIgnoredDuringExecution"` -} - -// Validate validates this pool affinity pod anti affinity -func (m *PoolAffinityPodAntiAffinity) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validatePreferredDuringSchedulingIgnoredDuringExecution(formats); err != nil { - res = append(res, err) - } - - if err := m.validateRequiredDuringSchedulingIgnoredDuringExecution(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *PoolAffinityPodAntiAffinity) validatePreferredDuringSchedulingIgnoredDuringExecution(formats strfmt.Registry) error { - if swag.IsZero(m.PreferredDuringSchedulingIgnoredDuringExecution) { // not required - return nil - } - - for i := 0; i < len(m.PreferredDuringSchedulingIgnoredDuringExecution); i++ { - if swag.IsZero(m.PreferredDuringSchedulingIgnoredDuringExecution[i]) { // not required - continue - } - - if m.PreferredDuringSchedulingIgnoredDuringExecution[i] != nil { - if err := m.PreferredDuringSchedulingIgnoredDuringExecution[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("podAntiAffinity" + "." + "preferredDuringSchedulingIgnoredDuringExecution" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("podAntiAffinity" + "." + "preferredDuringSchedulingIgnoredDuringExecution" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *PoolAffinityPodAntiAffinity) validateRequiredDuringSchedulingIgnoredDuringExecution(formats strfmt.Registry) error { - if swag.IsZero(m.RequiredDuringSchedulingIgnoredDuringExecution) { // not required - return nil - } - - for i := 0; i < len(m.RequiredDuringSchedulingIgnoredDuringExecution); i++ { - if swag.IsZero(m.RequiredDuringSchedulingIgnoredDuringExecution[i]) { // not required - continue - } - - if m.RequiredDuringSchedulingIgnoredDuringExecution[i] != nil { - if err := m.RequiredDuringSchedulingIgnoredDuringExecution[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("podAntiAffinity" + "." + "requiredDuringSchedulingIgnoredDuringExecution" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("podAntiAffinity" + "." + "requiredDuringSchedulingIgnoredDuringExecution" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// ContextValidate validate this pool affinity pod anti affinity based on the context it is used -func (m *PoolAffinityPodAntiAffinity) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidatePreferredDuringSchedulingIgnoredDuringExecution(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateRequiredDuringSchedulingIgnoredDuringExecution(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *PoolAffinityPodAntiAffinity) contextValidatePreferredDuringSchedulingIgnoredDuringExecution(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.PreferredDuringSchedulingIgnoredDuringExecution); i++ { - - if m.PreferredDuringSchedulingIgnoredDuringExecution[i] != nil { - - if swag.IsZero(m.PreferredDuringSchedulingIgnoredDuringExecution[i]) { // not required - return nil - } - - if err := m.PreferredDuringSchedulingIgnoredDuringExecution[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("podAntiAffinity" + "." + "preferredDuringSchedulingIgnoredDuringExecution" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("podAntiAffinity" + "." + "preferredDuringSchedulingIgnoredDuringExecution" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *PoolAffinityPodAntiAffinity) contextValidateRequiredDuringSchedulingIgnoredDuringExecution(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.RequiredDuringSchedulingIgnoredDuringExecution); i++ { - - if m.RequiredDuringSchedulingIgnoredDuringExecution[i] != nil { - - if swag.IsZero(m.RequiredDuringSchedulingIgnoredDuringExecution[i]) { // not required - return nil - } - - if err := m.RequiredDuringSchedulingIgnoredDuringExecution[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("podAntiAffinity" + "." + "requiredDuringSchedulingIgnoredDuringExecution" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("podAntiAffinity" + "." + "requiredDuringSchedulingIgnoredDuringExecution" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// MarshalBinary interface implementation -func (m *PoolAffinityPodAntiAffinity) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *PoolAffinityPodAntiAffinity) UnmarshalBinary(b []byte) error { - var res PoolAffinityPodAntiAffinity - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} - -// PoolAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0 The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s) -// -// swagger:model PoolAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0 -type PoolAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0 struct { - - // pod affinity term - // Required: true - PodAffinityTerm *PodAffinityTerm `json:"podAffinityTerm"` - - // weight associated with matching the corresponding podAffinityTerm, in the range 1-100. - // Required: true - Weight *int32 `json:"weight"` -} - -// Validate validates this pool affinity pod anti affinity preferred during scheduling ignored during execution items0 -func (m *PoolAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validatePodAffinityTerm(formats); err != nil { - res = append(res, err) - } - - if err := m.validateWeight(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *PoolAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0) validatePodAffinityTerm(formats strfmt.Registry) error { - - if err := validate.Required("podAffinityTerm", "body", m.PodAffinityTerm); err != nil { - return err - } - - if m.PodAffinityTerm != nil { - if err := m.PodAffinityTerm.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("podAffinityTerm") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("podAffinityTerm") - } - return err - } - } - - return nil -} - -func (m *PoolAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0) validateWeight(formats strfmt.Registry) error { - - if err := validate.Required("weight", "body", m.Weight); err != nil { - return err - } - - return nil -} - -// ContextValidate validate this pool affinity pod anti affinity preferred during scheduling ignored during execution items0 based on the context it is used -func (m *PoolAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidatePodAffinityTerm(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *PoolAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0) contextValidatePodAffinityTerm(ctx context.Context, formats strfmt.Registry) error { - - if m.PodAffinityTerm != nil { - - if err := m.PodAffinityTerm.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("podAffinityTerm") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("podAffinityTerm") - } - return err - } - } - - return nil -} - -// MarshalBinary interface implementation -func (m *PoolAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *PoolAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0) UnmarshalBinary(b []byte) error { - var res PoolAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionItems0 - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/pool_resources.go b/models/pool_resources.go deleted file mode 100644 index 247f37e5191..00000000000 --- a/models/pool_resources.go +++ /dev/null @@ -1,70 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// PoolResources If provided, use these requests and limit for cpu/memory resource allocation -// -// swagger:model poolResources -type PoolResources struct { - - // Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ - Limits map[string]int64 `json:"limits,omitempty"` - - // Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ - Requests map[string]int64 `json:"requests,omitempty"` -} - -// Validate validates this pool resources -func (m *PoolResources) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this pool resources based on context it is used -func (m *PoolResources) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *PoolResources) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *PoolResources) UnmarshalBinary(b []byte) error { - var res PoolResources - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/pool_toleration_seconds.go b/models/pool_toleration_seconds.go deleted file mode 100644 index 53d4cb5761b..00000000000 --- a/models/pool_toleration_seconds.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" - "github.com/go-openapi/validate" -) - -// PoolTolerationSeconds TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system. -// -// swagger:model poolTolerationSeconds -type PoolTolerationSeconds struct { - - // seconds - // Required: true - Seconds *int64 `json:"seconds"` -} - -// Validate validates this pool toleration seconds -func (m *PoolTolerationSeconds) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateSeconds(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *PoolTolerationSeconds) validateSeconds(formats strfmt.Registry) error { - - if err := validate.Required("seconds", "body", m.Seconds); err != nil { - return err - } - - return nil -} - -// ContextValidate validates this pool toleration seconds based on context it is used -func (m *PoolTolerationSeconds) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *PoolTolerationSeconds) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *PoolTolerationSeconds) UnmarshalBinary(b []byte) error { - var res PoolTolerationSeconds - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/pool_tolerations.go b/models/pool_tolerations.go deleted file mode 100644 index 0e5e775bc27..00000000000 --- a/models/pool_tolerations.go +++ /dev/null @@ -1,202 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "strconv" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// PoolTolerations Tolerations allows users to set entries like effect, key, operator, value. -// -// swagger:model poolTolerations -type PoolTolerations []*PoolTolerationsItems0 - -// Validate validates this pool tolerations -func (m PoolTolerations) Validate(formats strfmt.Registry) error { - var res []error - - for i := 0; i < len(m); i++ { - if swag.IsZero(m[i]) { // not required - continue - } - - if m[i] != nil { - if err := m[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName(strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName(strconv.Itoa(i)) - } - return err - } - } - - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// ContextValidate validate this pool tolerations based on the context it is used -func (m PoolTolerations) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - for i := 0; i < len(m); i++ { - - if m[i] != nil { - - if swag.IsZero(m[i]) { // not required - return nil - } - - if err := m[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName(strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName(strconv.Itoa(i)) - } - return err - } - } - - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// PoolTolerationsItems0 The pod this Toleration is attached to tolerates any taint that matches the triple using the matching operator . -// -// swagger:model PoolTolerationsItems0 -type PoolTolerationsItems0 struct { - - // Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute. - Effect string `json:"effect,omitempty"` - - // Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys. - Key string `json:"key,omitempty"` - - // Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category. - Operator string `json:"operator,omitempty"` - - // toleration seconds - TolerationSeconds *PoolTolerationSeconds `json:"tolerationSeconds,omitempty"` - - // Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string. - Value string `json:"value,omitempty"` -} - -// Validate validates this pool tolerations items0 -func (m *PoolTolerationsItems0) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateTolerationSeconds(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *PoolTolerationsItems0) validateTolerationSeconds(formats strfmt.Registry) error { - if swag.IsZero(m.TolerationSeconds) { // not required - return nil - } - - if m.TolerationSeconds != nil { - if err := m.TolerationSeconds.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("tolerationSeconds") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("tolerationSeconds") - } - return err - } - } - - return nil -} - -// ContextValidate validate this pool tolerations items0 based on the context it is used -func (m *PoolTolerationsItems0) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateTolerationSeconds(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *PoolTolerationsItems0) contextValidateTolerationSeconds(ctx context.Context, formats strfmt.Registry) error { - - if m.TolerationSeconds != nil { - - if swag.IsZero(m.TolerationSeconds) { // not required - return nil - } - - if err := m.TolerationSeconds.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("tolerationSeconds") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("tolerationSeconds") - } - return err - } - } - - return nil -} - -// MarshalBinary interface implementation -func (m *PoolTolerationsItems0) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *PoolTolerationsItems0) UnmarshalBinary(b []byte) error { - var res PoolTolerationsItems0 - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/pool_update_request.go b/models/pool_update_request.go deleted file mode 100644 index 36327ac4b82..00000000000 --- a/models/pool_update_request.go +++ /dev/null @@ -1,141 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "strconv" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" - "github.com/go-openapi/validate" -) - -// PoolUpdateRequest pool update request -// -// swagger:model poolUpdateRequest -type PoolUpdateRequest struct { - - // pools - // Required: true - Pools []*Pool `json:"pools"` -} - -// Validate validates this pool update request -func (m *PoolUpdateRequest) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validatePools(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *PoolUpdateRequest) validatePools(formats strfmt.Registry) error { - - if err := validate.Required("pools", "body", m.Pools); err != nil { - return err - } - - for i := 0; i < len(m.Pools); i++ { - if swag.IsZero(m.Pools[i]) { // not required - continue - } - - if m.Pools[i] != nil { - if err := m.Pools[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("pools" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("pools" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// ContextValidate validate this pool update request based on the context it is used -func (m *PoolUpdateRequest) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidatePools(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *PoolUpdateRequest) contextValidatePools(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.Pools); i++ { - - if m.Pools[i] != nil { - - if swag.IsZero(m.Pools[i]) { // not required - return nil - } - - if err := m.Pools[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("pools" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("pools" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// MarshalBinary interface implementation -func (m *PoolUpdateRequest) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *PoolUpdateRequest) UnmarshalBinary(b []byte) error { - var res PoolUpdateRequest - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/principal.go b/models/principal.go deleted file mode 100644 index 92d6d01c42f..00000000000 --- a/models/principal.go +++ /dev/null @@ -1,85 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// Principal principal -// -// swagger:model principal -type Principal struct { - - // s t s access key ID - STSAccessKeyID string `json:"STSAccessKeyID,omitempty"` - - // s t s secret access key - STSSecretAccessKey string `json:"STSSecretAccessKey,omitempty"` - - // s t s session token - STSSessionToken string `json:"STSSessionToken,omitempty"` - - // account access key - AccountAccessKey string `json:"accountAccessKey,omitempty"` - - // custom style ob - CustomStyleOb string `json:"customStyleOb,omitempty"` - - // hm - Hm bool `json:"hm,omitempty"` - - // ob - Ob bool `json:"ob,omitempty"` -} - -// Validate validates this principal -func (m *Principal) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this principal based on context it is used -func (m *Principal) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *Principal) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *Principal) UnmarshalBinary(b []byte) error { - var res Principal - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/projected_volume.go b/models/projected_volume.go deleted file mode 100644 index a7c28922964..00000000000 --- a/models/projected_volume.go +++ /dev/null @@ -1,138 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "strconv" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// ProjectedVolume projected volume -// -// swagger:model projectedVolume -type ProjectedVolume struct { - - // sources - Sources []*ProjectedVolumeSource `json:"sources"` -} - -// Validate validates this projected volume -func (m *ProjectedVolume) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateSources(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *ProjectedVolume) validateSources(formats strfmt.Registry) error { - if swag.IsZero(m.Sources) { // not required - return nil - } - - for i := 0; i < len(m.Sources); i++ { - if swag.IsZero(m.Sources[i]) { // not required - continue - } - - if m.Sources[i] != nil { - if err := m.Sources[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("sources" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("sources" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// ContextValidate validate this projected volume based on the context it is used -func (m *ProjectedVolume) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateSources(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *ProjectedVolume) contextValidateSources(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.Sources); i++ { - - if m.Sources[i] != nil { - - if swag.IsZero(m.Sources[i]) { // not required - return nil - } - - if err := m.Sources[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("sources" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("sources" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// MarshalBinary interface implementation -func (m *ProjectedVolume) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *ProjectedVolume) UnmarshalBinary(b []byte) error { - var res ProjectedVolume - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/projected_volume_source.go b/models/projected_volume_source.go deleted file mode 100644 index 79aaec2d99f..00000000000 --- a/models/projected_volume_source.go +++ /dev/null @@ -1,231 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// ProjectedVolumeSource projected volume source -// -// swagger:model projectedVolumeSource -type ProjectedVolumeSource struct { - - // config map - ConfigMap *ConfigMap `json:"configMap,omitempty"` - - // downward Api - DownwardAPI bool `json:"downwardApi,omitempty"` - - // secret - Secret *Secret `json:"secret,omitempty"` - - // service account token - ServiceAccountToken *ServiceAccountToken `json:"serviceAccountToken,omitempty"` -} - -// Validate validates this projected volume source -func (m *ProjectedVolumeSource) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateConfigMap(formats); err != nil { - res = append(res, err) - } - - if err := m.validateSecret(formats); err != nil { - res = append(res, err) - } - - if err := m.validateServiceAccountToken(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *ProjectedVolumeSource) validateConfigMap(formats strfmt.Registry) error { - if swag.IsZero(m.ConfigMap) { // not required - return nil - } - - if m.ConfigMap != nil { - if err := m.ConfigMap.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("configMap") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("configMap") - } - return err - } - } - - return nil -} - -func (m *ProjectedVolumeSource) validateSecret(formats strfmt.Registry) error { - if swag.IsZero(m.Secret) { // not required - return nil - } - - if m.Secret != nil { - if err := m.Secret.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("secret") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("secret") - } - return err - } - } - - return nil -} - -func (m *ProjectedVolumeSource) validateServiceAccountToken(formats strfmt.Registry) error { - if swag.IsZero(m.ServiceAccountToken) { // not required - return nil - } - - if m.ServiceAccountToken != nil { - if err := m.ServiceAccountToken.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("serviceAccountToken") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("serviceAccountToken") - } - return err - } - } - - return nil -} - -// ContextValidate validate this projected volume source based on the context it is used -func (m *ProjectedVolumeSource) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateConfigMap(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateSecret(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateServiceAccountToken(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *ProjectedVolumeSource) contextValidateConfigMap(ctx context.Context, formats strfmt.Registry) error { - - if m.ConfigMap != nil { - - if swag.IsZero(m.ConfigMap) { // not required - return nil - } - - if err := m.ConfigMap.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("configMap") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("configMap") - } - return err - } - } - - return nil -} - -func (m *ProjectedVolumeSource) contextValidateSecret(ctx context.Context, formats strfmt.Registry) error { - - if m.Secret != nil { - - if swag.IsZero(m.Secret) { // not required - return nil - } - - if err := m.Secret.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("secret") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("secret") - } - return err - } - } - - return nil -} - -func (m *ProjectedVolumeSource) contextValidateServiceAccountToken(ctx context.Context, formats strfmt.Registry) error { - - if m.ServiceAccountToken != nil { - - if swag.IsZero(m.ServiceAccountToken) { // not required - return nil - } - - if err := m.ServiceAccountToken.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("serviceAccountToken") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("serviceAccountToken") - } - return err - } - } - - return nil -} - -// MarshalBinary interface implementation -func (m *ProjectedVolumeSource) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *ProjectedVolumeSource) UnmarshalBinary(b []byte) error { - var res ProjectedVolumeSource - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/pvc.go b/models/pvc.go deleted file mode 100644 index 9dfe2063a4a..00000000000 --- a/models/pvc.go +++ /dev/null @@ -1,70 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// Pvc pvc -// -// swagger:model pvc -type Pvc struct { - - // claim name - ClaimName string `json:"claimName,omitempty"` - - // read only - ReadOnly bool `json:"readOnly,omitempty"` -} - -// Validate validates this pvc -func (m *Pvc) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this pvc based on context it is used -func (m *Pvc) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *Pvc) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *Pvc) UnmarshalBinary(b []byte) error { - var res Pvc - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/pvcs_list_response.go b/models/pvcs_list_response.go deleted file mode 100644 index c9286f2e4fd..00000000000 --- a/models/pvcs_list_response.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// PvcsListResponse pvcs list response -// -// swagger:model pvcsListResponse -type PvcsListResponse struct { - - // age - Age string `json:"age,omitempty"` - - // capacity - Capacity string `json:"capacity,omitempty"` - - // name - Name string `json:"name,omitempty"` - - // namespace - Namespace string `json:"namespace,omitempty"` - - // status - Status string `json:"status,omitempty"` - - // storage class - StorageClass string `json:"storageClass,omitempty"` - - // tenant - Tenant string `json:"tenant,omitempty"` - - // volume - Volume string `json:"volume,omitempty"` -} - -// Validate validates this pvcs list response -func (m *PvcsListResponse) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this pvcs list response based on context it is used -func (m *PvcsListResponse) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *PvcsListResponse) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *PvcsListResponse) UnmarshalBinary(b []byte) error { - var res PvcsListResponse - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/redirect_rule.go b/models/redirect_rule.go deleted file mode 100644 index 0be3344d616..00000000000 --- a/models/redirect_rule.go +++ /dev/null @@ -1,70 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// RedirectRule redirect rule -// -// swagger:model redirectRule -type RedirectRule struct { - - // display name - DisplayName string `json:"displayName,omitempty"` - - // redirect - Redirect string `json:"redirect,omitempty"` -} - -// Validate validates this redirect rule -func (m *RedirectRule) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this redirect rule based on context it is used -func (m *RedirectRule) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *RedirectRule) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *RedirectRule) UnmarshalBinary(b []byte) error { - var res RedirectRule - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/resource_quota.go b/models/resource_quota.go deleted file mode 100644 index 536c79f0f62..00000000000 --- a/models/resource_quota.go +++ /dev/null @@ -1,141 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "strconv" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// ResourceQuota resource quota -// -// swagger:model resourceQuota -type ResourceQuota struct { - - // elements - Elements []*ResourceQuotaElement `json:"elements"` - - // name - Name string `json:"name,omitempty"` -} - -// Validate validates this resource quota -func (m *ResourceQuota) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateElements(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *ResourceQuota) validateElements(formats strfmt.Registry) error { - if swag.IsZero(m.Elements) { // not required - return nil - } - - for i := 0; i < len(m.Elements); i++ { - if swag.IsZero(m.Elements[i]) { // not required - continue - } - - if m.Elements[i] != nil { - if err := m.Elements[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("elements" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("elements" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// ContextValidate validate this resource quota based on the context it is used -func (m *ResourceQuota) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateElements(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *ResourceQuota) contextValidateElements(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.Elements); i++ { - - if m.Elements[i] != nil { - - if swag.IsZero(m.Elements[i]) { // not required - return nil - } - - if err := m.Elements[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("elements" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("elements" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// MarshalBinary interface implementation -func (m *ResourceQuota) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *ResourceQuota) UnmarshalBinary(b []byte) error { - var res ResourceQuota - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/resource_quota_element.go b/models/resource_quota_element.go deleted file mode 100644 index 9d8874cbe3c..00000000000 --- a/models/resource_quota_element.go +++ /dev/null @@ -1,73 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// ResourceQuotaElement resource quota element -// -// swagger:model resourceQuotaElement -type ResourceQuotaElement struct { - - // hard - Hard int64 `json:"hard,omitempty"` - - // name - Name string `json:"name,omitempty"` - - // used - Used int64 `json:"used,omitempty"` -} - -// Validate validates this resource quota element -func (m *ResourceQuotaElement) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this resource quota element based on context it is used -func (m *ResourceQuotaElement) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *ResourceQuotaElement) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *ResourceQuotaElement) UnmarshalBinary(b []byte) error { - var res ResourceQuotaElement - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/secret.go b/models/secret.go deleted file mode 100644 index 97901f08b93..00000000000 --- a/models/secret.go +++ /dev/null @@ -1,70 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// Secret secret -// -// swagger:model secret -type Secret struct { - - // name - Name string `json:"name,omitempty"` - - // optional - Optional bool `json:"optional,omitempty"` -} - -// Validate validates this secret -func (m *Secret) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this secret based on context it is used -func (m *Secret) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *Secret) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *Secret) UnmarshalBinary(b []byte) error { - var res Secret - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/security_context.go b/models/security_context.go deleted file mode 100644 index 35ae186c68a..00000000000 --- a/models/security_context.go +++ /dev/null @@ -1,128 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" - "github.com/go-openapi/validate" -) - -// SecurityContext security context -// -// swagger:model securityContext -type SecurityContext struct { - - // fs group - FsGroup string `json:"fsGroup,omitempty"` - - // fs group change policy - FsGroupChangePolicy string `json:"fsGroupChangePolicy,omitempty"` - - // run as group - // Required: true - RunAsGroup *string `json:"runAsGroup"` - - // run as non root - // Required: true - RunAsNonRoot *bool `json:"runAsNonRoot"` - - // run as user - // Required: true - RunAsUser *string `json:"runAsUser"` -} - -// Validate validates this security context -func (m *SecurityContext) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateRunAsGroup(formats); err != nil { - res = append(res, err) - } - - if err := m.validateRunAsNonRoot(formats); err != nil { - res = append(res, err) - } - - if err := m.validateRunAsUser(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *SecurityContext) validateRunAsGroup(formats strfmt.Registry) error { - - if err := validate.Required("runAsGroup", "body", m.RunAsGroup); err != nil { - return err - } - - return nil -} - -func (m *SecurityContext) validateRunAsNonRoot(formats strfmt.Registry) error { - - if err := validate.Required("runAsNonRoot", "body", m.RunAsNonRoot); err != nil { - return err - } - - return nil -} - -func (m *SecurityContext) validateRunAsUser(formats strfmt.Registry) error { - - if err := validate.Required("runAsUser", "body", m.RunAsUser); err != nil { - return err - } - - return nil -} - -// ContextValidate validates this security context based on context it is used -func (m *SecurityContext) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *SecurityContext) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *SecurityContext) UnmarshalBinary(b []byte) error { - var res SecurityContext - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/server_drives.go b/models/server_drives.go deleted file mode 100644 index 03739366343..00000000000 --- a/models/server_drives.go +++ /dev/null @@ -1,94 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// ServerDrives server drives -// -// swagger:model serverDrives -type ServerDrives struct { - - // available space - AvailableSpace int64 `json:"availableSpace,omitempty"` - - // drive path - DrivePath string `json:"drivePath,omitempty"` - - // endpoint - Endpoint string `json:"endpoint,omitempty"` - - // healing - Healing bool `json:"healing,omitempty"` - - // model - Model string `json:"model,omitempty"` - - // root disk - RootDisk bool `json:"rootDisk,omitempty"` - - // state - State string `json:"state,omitempty"` - - // total space - TotalSpace int64 `json:"totalSpace,omitempty"` - - // used space - UsedSpace int64 `json:"usedSpace,omitempty"` - - // uuid - UUID string `json:"uuid,omitempty"` -} - -// Validate validates this server drives -func (m *ServerDrives) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this server drives based on context it is used -func (m *ServerDrives) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *ServerDrives) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *ServerDrives) UnmarshalBinary(b []byte) error { - var res ServerDrives - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/server_properties.go b/models/server_properties.go deleted file mode 100644 index d220fbf9be1..00000000000 --- a/models/server_properties.go +++ /dev/null @@ -1,159 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "strconv" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// ServerProperties server properties -// -// swagger:model serverProperties -type ServerProperties struct { - - // commit ID - CommitID string `json:"commitID,omitempty"` - - // drives - Drives []*ServerDrives `json:"drives"` - - // endpoint - Endpoint string `json:"endpoint,omitempty"` - - // network - Network map[string]string `json:"network,omitempty"` - - // pool number - PoolNumber int64 `json:"poolNumber,omitempty"` - - // state - State string `json:"state,omitempty"` - - // uptime - Uptime int64 `json:"uptime,omitempty"` - - // version - Version string `json:"version,omitempty"` -} - -// Validate validates this server properties -func (m *ServerProperties) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateDrives(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *ServerProperties) validateDrives(formats strfmt.Registry) error { - if swag.IsZero(m.Drives) { // not required - return nil - } - - for i := 0; i < len(m.Drives); i++ { - if swag.IsZero(m.Drives[i]) { // not required - continue - } - - if m.Drives[i] != nil { - if err := m.Drives[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("drives" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("drives" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// ContextValidate validate this server properties based on the context it is used -func (m *ServerProperties) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateDrives(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *ServerProperties) contextValidateDrives(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.Drives); i++ { - - if m.Drives[i] != nil { - - if swag.IsZero(m.Drives[i]) { // not required - return nil - } - - if err := m.Drives[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("drives" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("drives" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// MarshalBinary interface implementation -func (m *ServerProperties) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *ServerProperties) UnmarshalBinary(b []byte) error { - var res ServerProperties - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/service_account_token.go b/models/service_account_token.go deleted file mode 100644 index 725f7744816..00000000000 --- a/models/service_account_token.go +++ /dev/null @@ -1,67 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// ServiceAccountToken service account token -// -// swagger:model serviceAccountToken -type ServiceAccountToken struct { - - // expiration seconds - ExpirationSeconds int64 `json:"expirationSeconds,omitempty"` -} - -// Validate validates this service account token -func (m *ServiceAccountToken) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this service account token based on context it is used -func (m *ServiceAccountToken) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *ServiceAccountToken) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *ServiceAccountToken) UnmarshalBinary(b []byte) error { - var res ServiceAccountToken - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/set_administrators_request.go b/models/set_administrators_request.go deleted file mode 100644 index 33390dbe589..00000000000 --- a/models/set_administrators_request.go +++ /dev/null @@ -1,70 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// SetAdministratorsRequest set administrators request -// -// swagger:model setAdministratorsRequest -type SetAdministratorsRequest struct { - - // group dns - GroupDNS []string `json:"group_dns"` - - // user dns - UserDNS []string `json:"user_dns"` -} - -// Validate validates this set administrators request -func (m *SetAdministratorsRequest) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this set administrators request based on context it is used -func (m *SetAdministratorsRequest) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *SetAdministratorsRequest) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *SetAdministratorsRequest) UnmarshalBinary(b []byte) error { - var res SetAdministratorsRequest - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/state.go b/models/state.go deleted file mode 100644 index 44a2a18458f..00000000000 --- a/models/state.go +++ /dev/null @@ -1,85 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// State state -// -// swagger:model state -type State struct { - - // exit code - ExitCode int64 `json:"exitCode,omitempty"` - - // finished - Finished string `json:"finished,omitempty"` - - // message - Message string `json:"message,omitempty"` - - // reason - Reason string `json:"reason,omitempty"` - - // signal - Signal int64 `json:"signal,omitempty"` - - // started - Started string `json:"started,omitempty"` - - // state - State string `json:"state,omitempty"` -} - -// Validate validates this state -func (m *State) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this state based on context it is used -func (m *State) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *State) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *State) UnmarshalBinary(b []byte) error { - var res State - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/subscription_validate_request.go b/models/subscription_validate_request.go deleted file mode 100644 index 737f08b9545..00000000000 --- a/models/subscription_validate_request.go +++ /dev/null @@ -1,73 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// SubscriptionValidateRequest subscription validate request -// -// swagger:model subscriptionValidateRequest -type SubscriptionValidateRequest struct { - - // email - Email string `json:"email,omitempty"` - - // license - License string `json:"license,omitempty"` - - // password - Password string `json:"password,omitempty"` -} - -// Validate validates this subscription validate request -func (m *SubscriptionValidateRequest) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this subscription validate request based on context it is used -func (m *SubscriptionValidateRequest) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *SubscriptionValidateRequest) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *SubscriptionValidateRequest) UnmarshalBinary(b []byte) error { - var res SubscriptionValidateRequest - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/tenant.go b/models/tenant.go deleted file mode 100644 index dd265101b92..00000000000 --- a/models/tenant.go +++ /dev/null @@ -1,480 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "strconv" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// Tenant tenant -// -// swagger:model tenant -type Tenant struct { - - // creation date - CreationDate string `json:"creation_date,omitempty"` - - // current state - CurrentState string `json:"currentState,omitempty"` - - // deletion date - DeletionDate string `json:"deletion_date,omitempty"` - - // domains - Domains *DomainsConfiguration `json:"domains,omitempty"` - - // encryption enabled - EncryptionEnabled bool `json:"encryptionEnabled,omitempty"` - - // endpoints - Endpoints *TenantEndpoints `json:"endpoints,omitempty"` - - // idp ad enabled - IdpAdEnabled bool `json:"idpAdEnabled,omitempty"` - - // idp oidc enabled - IdpOidcEnabled bool `json:"idpOidcEnabled,omitempty"` - - // image - Image string `json:"image,omitempty"` - - // minio TLS - MinioTLS bool `json:"minioTLS,omitempty"` - - // name - Name string `json:"name,omitempty"` - - // namespace - Namespace string `json:"namespace,omitempty"` - - // pools - Pools []*Pool `json:"pools"` - - // sftp exposed - SftpExposed bool `json:"sftpExposed,omitempty"` - - // status - Status *TenantStatus `json:"status,omitempty"` - - // subnet license - SubnetLicense *License `json:"subnet_license,omitempty"` - - // tiers - Tiers []*TenantTierElement `json:"tiers"` - - // total size - TotalSize int64 `json:"total_size,omitempty"` -} - -// Validate validates this tenant -func (m *Tenant) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateDomains(formats); err != nil { - res = append(res, err) - } - - if err := m.validateEndpoints(formats); err != nil { - res = append(res, err) - } - - if err := m.validatePools(formats); err != nil { - res = append(res, err) - } - - if err := m.validateStatus(formats); err != nil { - res = append(res, err) - } - - if err := m.validateSubnetLicense(formats); err != nil { - res = append(res, err) - } - - if err := m.validateTiers(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *Tenant) validateDomains(formats strfmt.Registry) error { - if swag.IsZero(m.Domains) { // not required - return nil - } - - if m.Domains != nil { - if err := m.Domains.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("domains") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("domains") - } - return err - } - } - - return nil -} - -func (m *Tenant) validateEndpoints(formats strfmt.Registry) error { - if swag.IsZero(m.Endpoints) { // not required - return nil - } - - if m.Endpoints != nil { - if err := m.Endpoints.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("endpoints") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("endpoints") - } - return err - } - } - - return nil -} - -func (m *Tenant) validatePools(formats strfmt.Registry) error { - if swag.IsZero(m.Pools) { // not required - return nil - } - - for i := 0; i < len(m.Pools); i++ { - if swag.IsZero(m.Pools[i]) { // not required - continue - } - - if m.Pools[i] != nil { - if err := m.Pools[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("pools" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("pools" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *Tenant) validateStatus(formats strfmt.Registry) error { - if swag.IsZero(m.Status) { // not required - return nil - } - - if m.Status != nil { - if err := m.Status.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("status") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("status") - } - return err - } - } - - return nil -} - -func (m *Tenant) validateSubnetLicense(formats strfmt.Registry) error { - if swag.IsZero(m.SubnetLicense) { // not required - return nil - } - - if m.SubnetLicense != nil { - if err := m.SubnetLicense.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("subnet_license") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("subnet_license") - } - return err - } - } - - return nil -} - -func (m *Tenant) validateTiers(formats strfmt.Registry) error { - if swag.IsZero(m.Tiers) { // not required - return nil - } - - for i := 0; i < len(m.Tiers); i++ { - if swag.IsZero(m.Tiers[i]) { // not required - continue - } - - if m.Tiers[i] != nil { - if err := m.Tiers[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("tiers" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("tiers" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// ContextValidate validate this tenant based on the context it is used -func (m *Tenant) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateDomains(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateEndpoints(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidatePools(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateStatus(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateSubnetLicense(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateTiers(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *Tenant) contextValidateDomains(ctx context.Context, formats strfmt.Registry) error { - - if m.Domains != nil { - - if swag.IsZero(m.Domains) { // not required - return nil - } - - if err := m.Domains.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("domains") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("domains") - } - return err - } - } - - return nil -} - -func (m *Tenant) contextValidateEndpoints(ctx context.Context, formats strfmt.Registry) error { - - if m.Endpoints != nil { - - if swag.IsZero(m.Endpoints) { // not required - return nil - } - - if err := m.Endpoints.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("endpoints") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("endpoints") - } - return err - } - } - - return nil -} - -func (m *Tenant) contextValidatePools(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.Pools); i++ { - - if m.Pools[i] != nil { - - if swag.IsZero(m.Pools[i]) { // not required - return nil - } - - if err := m.Pools[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("pools" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("pools" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *Tenant) contextValidateStatus(ctx context.Context, formats strfmt.Registry) error { - - if m.Status != nil { - - if swag.IsZero(m.Status) { // not required - return nil - } - - if err := m.Status.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("status") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("status") - } - return err - } - } - - return nil -} - -func (m *Tenant) contextValidateSubnetLicense(ctx context.Context, formats strfmt.Registry) error { - - if m.SubnetLicense != nil { - - if swag.IsZero(m.SubnetLicense) { // not required - return nil - } - - if err := m.SubnetLicense.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("subnet_license") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("subnet_license") - } - return err - } - } - - return nil -} - -func (m *Tenant) contextValidateTiers(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.Tiers); i++ { - - if m.Tiers[i] != nil { - - if swag.IsZero(m.Tiers[i]) { // not required - return nil - } - - if err := m.Tiers[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("tiers" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("tiers" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// MarshalBinary interface implementation -func (m *Tenant) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *Tenant) UnmarshalBinary(b []byte) error { - var res Tenant - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} - -// TenantEndpoints tenant endpoints -// -// swagger:model TenantEndpoints -type TenantEndpoints struct { - - // console - Console string `json:"console,omitempty"` - - // minio - Minio string `json:"minio,omitempty"` -} - -// Validate validates this tenant endpoints -func (m *TenantEndpoints) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this tenant endpoints based on context it is used -func (m *TenantEndpoints) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *TenantEndpoints) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *TenantEndpoints) UnmarshalBinary(b []byte) error { - var res TenantEndpoints - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/tenant_configuration_response.go b/models/tenant_configuration_response.go deleted file mode 100644 index 25363745a0a..00000000000 --- a/models/tenant_configuration_response.go +++ /dev/null @@ -1,141 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "strconv" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// TenantConfigurationResponse tenant configuration response -// -// swagger:model tenantConfigurationResponse -type TenantConfigurationResponse struct { - - // environment variables - EnvironmentVariables []*EnvironmentVariable `json:"environmentVariables"` - - // sftp exposed - SftpExposed bool `json:"sftpExposed,omitempty"` -} - -// Validate validates this tenant configuration response -func (m *TenantConfigurationResponse) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateEnvironmentVariables(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *TenantConfigurationResponse) validateEnvironmentVariables(formats strfmt.Registry) error { - if swag.IsZero(m.EnvironmentVariables) { // not required - return nil - } - - for i := 0; i < len(m.EnvironmentVariables); i++ { - if swag.IsZero(m.EnvironmentVariables[i]) { // not required - continue - } - - if m.EnvironmentVariables[i] != nil { - if err := m.EnvironmentVariables[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("environmentVariables" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("environmentVariables" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// ContextValidate validate this tenant configuration response based on the context it is used -func (m *TenantConfigurationResponse) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateEnvironmentVariables(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *TenantConfigurationResponse) contextValidateEnvironmentVariables(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.EnvironmentVariables); i++ { - - if m.EnvironmentVariables[i] != nil { - - if swag.IsZero(m.EnvironmentVariables[i]) { // not required - return nil - } - - if err := m.EnvironmentVariables[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("environmentVariables" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("environmentVariables" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// MarshalBinary interface implementation -func (m *TenantConfigurationResponse) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *TenantConfigurationResponse) UnmarshalBinary(b []byte) error { - var res TenantConfigurationResponse - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/tenant_list.go b/models/tenant_list.go deleted file mode 100644 index 47ed46ac33c..00000000000 --- a/models/tenant_list.go +++ /dev/null @@ -1,231 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "strconv" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// TenantList tenant list -// -// swagger:model tenantList -type TenantList struct { - - // capacity - Capacity int64 `json:"capacity,omitempty"` - - // capacity raw - CapacityRaw int64 `json:"capacity_raw,omitempty"` - - // capacity raw usage - CapacityRawUsage int64 `json:"capacity_raw_usage,omitempty"` - - // capacity usage - CapacityUsage int64 `json:"capacity_usage,omitempty"` - - // creation date - CreationDate string `json:"creation_date,omitempty"` - - // current state - CurrentState string `json:"currentState,omitempty"` - - // deletion date - DeletionDate string `json:"deletion_date,omitempty"` - - // domains - Domains *DomainsConfiguration `json:"domains,omitempty"` - - // health status - HealthStatus string `json:"health_status,omitempty"` - - // instance count - InstanceCount int64 `json:"instance_count,omitempty"` - - // name - Name string `json:"name,omitempty"` - - // namespace - Namespace string `json:"namespace,omitempty"` - - // pool count - PoolCount int64 `json:"pool_count,omitempty"` - - // tiers - Tiers []*TenantTierElement `json:"tiers"` - - // total size - TotalSize int64 `json:"total_size,omitempty"` - - // volume count - VolumeCount int64 `json:"volume_count,omitempty"` -} - -// Validate validates this tenant list -func (m *TenantList) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateDomains(formats); err != nil { - res = append(res, err) - } - - if err := m.validateTiers(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *TenantList) validateDomains(formats strfmt.Registry) error { - if swag.IsZero(m.Domains) { // not required - return nil - } - - if m.Domains != nil { - if err := m.Domains.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("domains") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("domains") - } - return err - } - } - - return nil -} - -func (m *TenantList) validateTiers(formats strfmt.Registry) error { - if swag.IsZero(m.Tiers) { // not required - return nil - } - - for i := 0; i < len(m.Tiers); i++ { - if swag.IsZero(m.Tiers[i]) { // not required - continue - } - - if m.Tiers[i] != nil { - if err := m.Tiers[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("tiers" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("tiers" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// ContextValidate validate this tenant list based on the context it is used -func (m *TenantList) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateDomains(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateTiers(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *TenantList) contextValidateDomains(ctx context.Context, formats strfmt.Registry) error { - - if m.Domains != nil { - - if swag.IsZero(m.Domains) { // not required - return nil - } - - if err := m.Domains.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("domains") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("domains") - } - return err - } - } - - return nil -} - -func (m *TenantList) contextValidateTiers(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.Tiers); i++ { - - if m.Tiers[i] != nil { - - if swag.IsZero(m.Tiers[i]) { // not required - return nil - } - - if err := m.Tiers[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("tiers" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("tiers" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// MarshalBinary interface implementation -func (m *TenantList) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *TenantList) UnmarshalBinary(b []byte) error { - var res TenantList - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/tenant_log_report.go b/models/tenant_log_report.go deleted file mode 100644 index fc94821fda2..00000000000 --- a/models/tenant_log_report.go +++ /dev/null @@ -1,70 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// TenantLogReport tenant log report -// -// swagger:model tenantLogReport -type TenantLogReport struct { - - // blob - Blob string `json:"blob,omitempty"` - - // filename - Filename string `json:"filename,omitempty"` -} - -// Validate validates this tenant log report -func (m *TenantLogReport) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this tenant log report based on context it is used -func (m *TenantLogReport) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *TenantLogReport) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *TenantLogReport) UnmarshalBinary(b []byte) error { - var res TenantLogReport - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/tenant_pod.go b/models/tenant_pod.go deleted file mode 100644 index b42ce303a92..00000000000 --- a/models/tenant_pod.go +++ /dev/null @@ -1,103 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" - "github.com/go-openapi/validate" -) - -// TenantPod tenant pod -// -// swagger:model tenantPod -type TenantPod struct { - - // name - // Required: true - Name *string `json:"name"` - - // node - Node string `json:"node,omitempty"` - - // pod IP - PodIP string `json:"podIP,omitempty"` - - // restarts - Restarts int64 `json:"restarts,omitempty"` - - // status - Status string `json:"status,omitempty"` - - // time created - TimeCreated int64 `json:"timeCreated,omitempty"` -} - -// Validate validates this tenant pod -func (m *TenantPod) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateName(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *TenantPod) validateName(formats strfmt.Registry) error { - - if err := validate.Required("name", "body", m.Name); err != nil { - return err - } - - return nil -} - -// ContextValidate validates this tenant pod based on context it is used -func (m *TenantPod) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *TenantPod) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *TenantPod) UnmarshalBinary(b []byte) error { - var res TenantPod - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/tenant_response_item.go b/models/tenant_response_item.go deleted file mode 100644 index 9e5795f35bd..00000000000 --- a/models/tenant_response_item.go +++ /dev/null @@ -1,73 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// TenantResponseItem tenant response item -// -// swagger:model tenantResponseItem -type TenantResponseItem struct { - - // access key - AccessKey string `json:"access_key,omitempty"` - - // secret key - SecretKey string `json:"secret_key,omitempty"` - - // url - URL string `json:"url,omitempty"` -} - -// Validate validates this tenant response item -func (m *TenantResponseItem) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this tenant response item based on context it is used -func (m *TenantResponseItem) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *TenantResponseItem) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *TenantResponseItem) UnmarshalBinary(b []byte) error { - var res TenantResponseItem - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/tenant_security_response.go b/models/tenant_security_response.go deleted file mode 100644 index 3b47bc1350e..00000000000 --- a/models/tenant_security_response.go +++ /dev/null @@ -1,411 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "strconv" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// TenantSecurityResponse tenant security response -// -// swagger:model tenantSecurityResponse -type TenantSecurityResponse struct { - - // auto cert - AutoCert bool `json:"autoCert,omitempty"` - - // custom certificates - CustomCertificates *TenantSecurityResponseCustomCertificates `json:"customCertificates,omitempty"` - - // security context - SecurityContext *SecurityContext `json:"securityContext,omitempty"` -} - -// Validate validates this tenant security response -func (m *TenantSecurityResponse) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateCustomCertificates(formats); err != nil { - res = append(res, err) - } - - if err := m.validateSecurityContext(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *TenantSecurityResponse) validateCustomCertificates(formats strfmt.Registry) error { - if swag.IsZero(m.CustomCertificates) { // not required - return nil - } - - if m.CustomCertificates != nil { - if err := m.CustomCertificates.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("customCertificates") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("customCertificates") - } - return err - } - } - - return nil -} - -func (m *TenantSecurityResponse) validateSecurityContext(formats strfmt.Registry) error { - if swag.IsZero(m.SecurityContext) { // not required - return nil - } - - if m.SecurityContext != nil { - if err := m.SecurityContext.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("securityContext") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("securityContext") - } - return err - } - } - - return nil -} - -// ContextValidate validate this tenant security response based on the context it is used -func (m *TenantSecurityResponse) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateCustomCertificates(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateSecurityContext(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *TenantSecurityResponse) contextValidateCustomCertificates(ctx context.Context, formats strfmt.Registry) error { - - if m.CustomCertificates != nil { - - if swag.IsZero(m.CustomCertificates) { // not required - return nil - } - - if err := m.CustomCertificates.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("customCertificates") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("customCertificates") - } - return err - } - } - - return nil -} - -func (m *TenantSecurityResponse) contextValidateSecurityContext(ctx context.Context, formats strfmt.Registry) error { - - if m.SecurityContext != nil { - - if swag.IsZero(m.SecurityContext) { // not required - return nil - } - - if err := m.SecurityContext.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("securityContext") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("securityContext") - } - return err - } - } - - return nil -} - -// MarshalBinary interface implementation -func (m *TenantSecurityResponse) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *TenantSecurityResponse) UnmarshalBinary(b []byte) error { - var res TenantSecurityResponse - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} - -// TenantSecurityResponseCustomCertificates tenant security response custom certificates -// -// swagger:model TenantSecurityResponseCustomCertificates -type TenantSecurityResponseCustomCertificates struct { - - // client - Client []*CertificateInfo `json:"client"` - - // minio - Minio []*CertificateInfo `json:"minio"` - - // minio c as - MinioCAs []*CertificateInfo `json:"minioCAs"` -} - -// Validate validates this tenant security response custom certificates -func (m *TenantSecurityResponseCustomCertificates) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateClient(formats); err != nil { - res = append(res, err) - } - - if err := m.validateMinio(formats); err != nil { - res = append(res, err) - } - - if err := m.validateMinioCAs(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *TenantSecurityResponseCustomCertificates) validateClient(formats strfmt.Registry) error { - if swag.IsZero(m.Client) { // not required - return nil - } - - for i := 0; i < len(m.Client); i++ { - if swag.IsZero(m.Client[i]) { // not required - continue - } - - if m.Client[i] != nil { - if err := m.Client[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("customCertificates" + "." + "client" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("customCertificates" + "." + "client" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *TenantSecurityResponseCustomCertificates) validateMinio(formats strfmt.Registry) error { - if swag.IsZero(m.Minio) { // not required - return nil - } - - for i := 0; i < len(m.Minio); i++ { - if swag.IsZero(m.Minio[i]) { // not required - continue - } - - if m.Minio[i] != nil { - if err := m.Minio[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("customCertificates" + "." + "minio" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("customCertificates" + "." + "minio" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *TenantSecurityResponseCustomCertificates) validateMinioCAs(formats strfmt.Registry) error { - if swag.IsZero(m.MinioCAs) { // not required - return nil - } - - for i := 0; i < len(m.MinioCAs); i++ { - if swag.IsZero(m.MinioCAs[i]) { // not required - continue - } - - if m.MinioCAs[i] != nil { - if err := m.MinioCAs[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("customCertificates" + "." + "minioCAs" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("customCertificates" + "." + "minioCAs" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// ContextValidate validate this tenant security response custom certificates based on the context it is used -func (m *TenantSecurityResponseCustomCertificates) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateClient(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateMinio(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateMinioCAs(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *TenantSecurityResponseCustomCertificates) contextValidateClient(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.Client); i++ { - - if m.Client[i] != nil { - - if swag.IsZero(m.Client[i]) { // not required - return nil - } - - if err := m.Client[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("customCertificates" + "." + "client" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("customCertificates" + "." + "client" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *TenantSecurityResponseCustomCertificates) contextValidateMinio(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.Minio); i++ { - - if m.Minio[i] != nil { - - if swag.IsZero(m.Minio[i]) { // not required - return nil - } - - if err := m.Minio[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("customCertificates" + "." + "minio" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("customCertificates" + "." + "minio" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *TenantSecurityResponseCustomCertificates) contextValidateMinioCAs(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.MinioCAs); i++ { - - if m.MinioCAs[i] != nil { - - if swag.IsZero(m.MinioCAs[i]) { // not required - return nil - } - - if err := m.MinioCAs[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("customCertificates" + "." + "minioCAs" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("customCertificates" + "." + "minioCAs" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// MarshalBinary interface implementation -func (m *TenantSecurityResponseCustomCertificates) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *TenantSecurityResponseCustomCertificates) UnmarshalBinary(b []byte) error { - var res TenantSecurityResponseCustomCertificates - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/tenant_status.go b/models/tenant_status.go deleted file mode 100644 index b6361c4568e..00000000000 --- a/models/tenant_status.go +++ /dev/null @@ -1,187 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// TenantStatus tenant status -// -// swagger:model tenantStatus -type TenantStatus struct { - - // drives healing - DrivesHealing int32 `json:"drives_healing,omitempty"` - - // drives offline - DrivesOffline int32 `json:"drives_offline,omitempty"` - - // drives online - DrivesOnline int32 `json:"drives_online,omitempty"` - - // health status - HealthStatus string `json:"health_status,omitempty"` - - // usage - Usage *TenantStatusUsage `json:"usage,omitempty"` - - // write quorum - WriteQuorum int32 `json:"write_quorum,omitempty"` -} - -// Validate validates this tenant status -func (m *TenantStatus) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateUsage(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *TenantStatus) validateUsage(formats strfmt.Registry) error { - if swag.IsZero(m.Usage) { // not required - return nil - } - - if m.Usage != nil { - if err := m.Usage.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("usage") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("usage") - } - return err - } - } - - return nil -} - -// ContextValidate validate this tenant status based on the context it is used -func (m *TenantStatus) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateUsage(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *TenantStatus) contextValidateUsage(ctx context.Context, formats strfmt.Registry) error { - - if m.Usage != nil { - - if swag.IsZero(m.Usage) { // not required - return nil - } - - if err := m.Usage.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("usage") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("usage") - } - return err - } - } - - return nil -} - -// MarshalBinary interface implementation -func (m *TenantStatus) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *TenantStatus) UnmarshalBinary(b []byte) error { - var res TenantStatus - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} - -// TenantStatusUsage tenant status usage -// -// swagger:model TenantStatusUsage -type TenantStatusUsage struct { - - // capacity - Capacity int64 `json:"capacity,omitempty"` - - // capacity usage - CapacityUsage int64 `json:"capacity_usage,omitempty"` - - // raw - Raw int64 `json:"raw,omitempty"` - - // raw usage - RawUsage int64 `json:"raw_usage,omitempty"` -} - -// Validate validates this tenant status usage -func (m *TenantStatusUsage) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this tenant status usage based on context it is used -func (m *TenantStatusUsage) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *TenantStatusUsage) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *TenantStatusUsage) UnmarshalBinary(b []byte) error { - var res TenantStatusUsage - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/tenant_tier_element.go b/models/tenant_tier_element.go deleted file mode 100644 index 465fad1089e..00000000000 --- a/models/tenant_tier_element.go +++ /dev/null @@ -1,73 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// TenantTierElement tenant tier element -// -// swagger:model tenantTierElement -type TenantTierElement struct { - - // name - Name string `json:"name,omitempty"` - - // size - Size int64 `json:"size,omitempty"` - - // type - Type string `json:"type,omitempty"` -} - -// Validate validates this tenant tier element -func (m *TenantTierElement) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this tenant tier element based on context it is used -func (m *TenantTierElement) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *TenantTierElement) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *TenantTierElement) UnmarshalBinary(b []byte) error { - var res TenantTierElement - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/tenant_usage.go b/models/tenant_usage.go deleted file mode 100644 index fc929cfefeb..00000000000 --- a/models/tenant_usage.go +++ /dev/null @@ -1,70 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// TenantUsage tenant usage -// -// swagger:model tenantUsage -type TenantUsage struct { - - // disk used - DiskUsed int64 `json:"disk_used,omitempty"` - - // used - Used int64 `json:"used,omitempty"` -} - -// Validate validates this tenant usage -func (m *TenantUsage) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this tenant usage based on context it is used -func (m *TenantUsage) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *TenantUsage) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *TenantUsage) UnmarshalBinary(b []byte) error { - var res TenantUsage - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/tenant_y_a_m_l.go b/models/tenant_y_a_m_l.go deleted file mode 100644 index c7abce03d0c..00000000000 --- a/models/tenant_y_a_m_l.go +++ /dev/null @@ -1,67 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// TenantYAML tenant y a m l -// -// swagger:model tenantYAML -type TenantYAML struct { - - // yaml - Yaml string `json:"yaml,omitempty"` -} - -// Validate validates this tenant y a m l -func (m *TenantYAML) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this tenant y a m l based on context it is used -func (m *TenantYAML) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *TenantYAML) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *TenantYAML) UnmarshalBinary(b []byte) error { - var res TenantYAML - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/tls_configuration.go b/models/tls_configuration.go deleted file mode 100644 index 3f0355215db..00000000000 --- a/models/tls_configuration.go +++ /dev/null @@ -1,203 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "strconv" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// TLSConfiguration tls configuration -// -// swagger:model tlsConfiguration -type TLSConfiguration struct { - - // minio c as certificates - MinioCAsCertificates []string `json:"minioCAsCertificates"` - - // minio client certificates - MinioClientCertificates []*KeyPairConfiguration `json:"minioClientCertificates"` - - // minio server certificates - MinioServerCertificates []*KeyPairConfiguration `json:"minioServerCertificates"` -} - -// Validate validates this tls configuration -func (m *TLSConfiguration) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateMinioClientCertificates(formats); err != nil { - res = append(res, err) - } - - if err := m.validateMinioServerCertificates(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *TLSConfiguration) validateMinioClientCertificates(formats strfmt.Registry) error { - if swag.IsZero(m.MinioClientCertificates) { // not required - return nil - } - - for i := 0; i < len(m.MinioClientCertificates); i++ { - if swag.IsZero(m.MinioClientCertificates[i]) { // not required - continue - } - - if m.MinioClientCertificates[i] != nil { - if err := m.MinioClientCertificates[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("minioClientCertificates" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("minioClientCertificates" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *TLSConfiguration) validateMinioServerCertificates(formats strfmt.Registry) error { - if swag.IsZero(m.MinioServerCertificates) { // not required - return nil - } - - for i := 0; i < len(m.MinioServerCertificates); i++ { - if swag.IsZero(m.MinioServerCertificates[i]) { // not required - continue - } - - if m.MinioServerCertificates[i] != nil { - if err := m.MinioServerCertificates[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("minioServerCertificates" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("minioServerCertificates" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// ContextValidate validate this tls configuration based on the context it is used -func (m *TLSConfiguration) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateMinioClientCertificates(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateMinioServerCertificates(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *TLSConfiguration) contextValidateMinioClientCertificates(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.MinioClientCertificates); i++ { - - if m.MinioClientCertificates[i] != nil { - - if swag.IsZero(m.MinioClientCertificates[i]) { // not required - return nil - } - - if err := m.MinioClientCertificates[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("minioClientCertificates" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("minioClientCertificates" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *TLSConfiguration) contextValidateMinioServerCertificates(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.MinioServerCertificates); i++ { - - if m.MinioServerCertificates[i] != nil { - - if swag.IsZero(m.MinioServerCertificates[i]) { // not required - return nil - } - - if err := m.MinioServerCertificates[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("minioServerCertificates" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("minioServerCertificates" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// MarshalBinary interface implementation -func (m *TLSConfiguration) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *TLSConfiguration) UnmarshalBinary(b []byte) error { - var res TLSConfiguration - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/toleration.go b/models/toleration.go deleted file mode 100644 index 7fd83c9c337..00000000000 --- a/models/toleration.go +++ /dev/null @@ -1,79 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// Toleration toleration -// -// swagger:model toleration -type Toleration struct { - - // effect - Effect string `json:"effect,omitempty"` - - // key - Key string `json:"key,omitempty"` - - // operator - Operator string `json:"operator,omitempty"` - - // toleration seconds - TolerationSeconds int64 `json:"tolerationSeconds,omitempty"` - - // value - Value string `json:"value,omitempty"` -} - -// Validate validates this toleration -func (m *Toleration) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this toleration based on context it is used -func (m *Toleration) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *Toleration) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *Toleration) UnmarshalBinary(b []byte) error { - var res Toleration - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/update_domains_request.go b/models/update_domains_request.go deleted file mode 100644 index 97539d02f57..00000000000 --- a/models/update_domains_request.go +++ /dev/null @@ -1,126 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// UpdateDomainsRequest update domains request -// -// swagger:model updateDomainsRequest -type UpdateDomainsRequest struct { - - // domains - Domains *DomainsConfiguration `json:"domains,omitempty"` -} - -// Validate validates this update domains request -func (m *UpdateDomainsRequest) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateDomains(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *UpdateDomainsRequest) validateDomains(formats strfmt.Registry) error { - if swag.IsZero(m.Domains) { // not required - return nil - } - - if m.Domains != nil { - if err := m.Domains.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("domains") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("domains") - } - return err - } - } - - return nil -} - -// ContextValidate validate this update domains request based on the context it is used -func (m *UpdateDomainsRequest) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateDomains(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *UpdateDomainsRequest) contextValidateDomains(ctx context.Context, formats strfmt.Registry) error { - - if m.Domains != nil { - - if swag.IsZero(m.Domains) { // not required - return nil - } - - if err := m.Domains.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("domains") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("domains") - } - return err - } - } - - return nil -} - -// MarshalBinary interface implementation -func (m *UpdateDomainsRequest) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *UpdateDomainsRequest) UnmarshalBinary(b []byte) error { - var res UpdateDomainsRequest - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/update_tenant_configuration_request.go b/models/update_tenant_configuration_request.go deleted file mode 100644 index 39a72b4b2e7..00000000000 --- a/models/update_tenant_configuration_request.go +++ /dev/null @@ -1,144 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "strconv" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// UpdateTenantConfigurationRequest update tenant configuration request -// -// swagger:model updateTenantConfigurationRequest -type UpdateTenantConfigurationRequest struct { - - // environment variables - EnvironmentVariables []*EnvironmentVariable `json:"environmentVariables"` - - // keys to be deleted - KeysToBeDeleted []string `json:"keysToBeDeleted"` - - // sftp exposed - SftpExposed bool `json:"sftpExposed,omitempty"` -} - -// Validate validates this update tenant configuration request -func (m *UpdateTenantConfigurationRequest) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateEnvironmentVariables(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *UpdateTenantConfigurationRequest) validateEnvironmentVariables(formats strfmt.Registry) error { - if swag.IsZero(m.EnvironmentVariables) { // not required - return nil - } - - for i := 0; i < len(m.EnvironmentVariables); i++ { - if swag.IsZero(m.EnvironmentVariables[i]) { // not required - continue - } - - if m.EnvironmentVariables[i] != nil { - if err := m.EnvironmentVariables[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("environmentVariables" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("environmentVariables" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// ContextValidate validate this update tenant configuration request based on the context it is used -func (m *UpdateTenantConfigurationRequest) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateEnvironmentVariables(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *UpdateTenantConfigurationRequest) contextValidateEnvironmentVariables(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.EnvironmentVariables); i++ { - - if m.EnvironmentVariables[i] != nil { - - if swag.IsZero(m.EnvironmentVariables[i]) { // not required - return nil - } - - if err := m.EnvironmentVariables[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("environmentVariables" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("environmentVariables" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// MarshalBinary interface implementation -func (m *UpdateTenantConfigurationRequest) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *UpdateTenantConfigurationRequest) UnmarshalBinary(b []byte) error { - var res UpdateTenantConfigurationRequest - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/update_tenant_request.go b/models/update_tenant_request.go deleted file mode 100644 index 8e28128eb83..00000000000 --- a/models/update_tenant_request.go +++ /dev/null @@ -1,153 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" - "github.com/go-openapi/validate" -) - -// UpdateTenantRequest update tenant request -// -// swagger:model updateTenantRequest -type UpdateTenantRequest struct { - - // image - // Pattern: ^((.*?)/(.*?):(.+))$ - Image string `json:"image,omitempty"` - - // image pull secret - ImagePullSecret string `json:"image_pull_secret,omitempty"` - - // image registry - ImageRegistry *ImageRegistry `json:"image_registry,omitempty"` - - // sftp exposed - SftpExposed bool `json:"sftpExposed,omitempty"` -} - -// Validate validates this update tenant request -func (m *UpdateTenantRequest) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateImage(formats); err != nil { - res = append(res, err) - } - - if err := m.validateImageRegistry(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *UpdateTenantRequest) validateImage(formats strfmt.Registry) error { - if swag.IsZero(m.Image) { // not required - return nil - } - - if err := validate.Pattern("image", "body", m.Image, `^((.*?)/(.*?):(.+))$`); err != nil { - return err - } - - return nil -} - -func (m *UpdateTenantRequest) validateImageRegistry(formats strfmt.Registry) error { - if swag.IsZero(m.ImageRegistry) { // not required - return nil - } - - if m.ImageRegistry != nil { - if err := m.ImageRegistry.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("image_registry") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("image_registry") - } - return err - } - } - - return nil -} - -// ContextValidate validate this update tenant request based on the context it is used -func (m *UpdateTenantRequest) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateImageRegistry(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *UpdateTenantRequest) contextValidateImageRegistry(ctx context.Context, formats strfmt.Registry) error { - - if m.ImageRegistry != nil { - - if swag.IsZero(m.ImageRegistry) { // not required - return nil - } - - if err := m.ImageRegistry.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("image_registry") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("image_registry") - } - return err - } - } - - return nil -} - -// MarshalBinary interface implementation -func (m *UpdateTenantRequest) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *UpdateTenantRequest) UnmarshalBinary(b []byte) error { - var res UpdateTenantRequest - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/update_tenant_security_request.go b/models/update_tenant_security_request.go deleted file mode 100644 index 42f6bfe35f4..00000000000 --- a/models/update_tenant_security_request.go +++ /dev/null @@ -1,355 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "strconv" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// UpdateTenantSecurityRequest update tenant security request -// -// swagger:model updateTenantSecurityRequest -type UpdateTenantSecurityRequest struct { - - // auto cert - AutoCert bool `json:"autoCert,omitempty"` - - // custom certificates - CustomCertificates *UpdateTenantSecurityRequestCustomCertificates `json:"customCertificates,omitempty"` - - // security context - SecurityContext *SecurityContext `json:"securityContext,omitempty"` -} - -// Validate validates this update tenant security request -func (m *UpdateTenantSecurityRequest) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateCustomCertificates(formats); err != nil { - res = append(res, err) - } - - if err := m.validateSecurityContext(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *UpdateTenantSecurityRequest) validateCustomCertificates(formats strfmt.Registry) error { - if swag.IsZero(m.CustomCertificates) { // not required - return nil - } - - if m.CustomCertificates != nil { - if err := m.CustomCertificates.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("customCertificates") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("customCertificates") - } - return err - } - } - - return nil -} - -func (m *UpdateTenantSecurityRequest) validateSecurityContext(formats strfmt.Registry) error { - if swag.IsZero(m.SecurityContext) { // not required - return nil - } - - if m.SecurityContext != nil { - if err := m.SecurityContext.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("securityContext") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("securityContext") - } - return err - } - } - - return nil -} - -// ContextValidate validate this update tenant security request based on the context it is used -func (m *UpdateTenantSecurityRequest) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateCustomCertificates(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateSecurityContext(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *UpdateTenantSecurityRequest) contextValidateCustomCertificates(ctx context.Context, formats strfmt.Registry) error { - - if m.CustomCertificates != nil { - - if swag.IsZero(m.CustomCertificates) { // not required - return nil - } - - if err := m.CustomCertificates.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("customCertificates") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("customCertificates") - } - return err - } - } - - return nil -} - -func (m *UpdateTenantSecurityRequest) contextValidateSecurityContext(ctx context.Context, formats strfmt.Registry) error { - - if m.SecurityContext != nil { - - if swag.IsZero(m.SecurityContext) { // not required - return nil - } - - if err := m.SecurityContext.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("securityContext") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("securityContext") - } - return err - } - } - - return nil -} - -// MarshalBinary interface implementation -func (m *UpdateTenantSecurityRequest) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *UpdateTenantSecurityRequest) UnmarshalBinary(b []byte) error { - var res UpdateTenantSecurityRequest - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} - -// UpdateTenantSecurityRequestCustomCertificates update tenant security request custom certificates -// -// swagger:model UpdateTenantSecurityRequestCustomCertificates -type UpdateTenantSecurityRequestCustomCertificates struct { - - // minio c as certificates - MinioCAsCertificates []string `json:"minioCAsCertificates"` - - // minio client certificates - MinioClientCertificates []*KeyPairConfiguration `json:"minioClientCertificates"` - - // minio server certificates - MinioServerCertificates []*KeyPairConfiguration `json:"minioServerCertificates"` - - // secrets to be deleted - SecretsToBeDeleted []string `json:"secretsToBeDeleted"` -} - -// Validate validates this update tenant security request custom certificates -func (m *UpdateTenantSecurityRequestCustomCertificates) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateMinioClientCertificates(formats); err != nil { - res = append(res, err) - } - - if err := m.validateMinioServerCertificates(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *UpdateTenantSecurityRequestCustomCertificates) validateMinioClientCertificates(formats strfmt.Registry) error { - if swag.IsZero(m.MinioClientCertificates) { // not required - return nil - } - - for i := 0; i < len(m.MinioClientCertificates); i++ { - if swag.IsZero(m.MinioClientCertificates[i]) { // not required - continue - } - - if m.MinioClientCertificates[i] != nil { - if err := m.MinioClientCertificates[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("customCertificates" + "." + "minioClientCertificates" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("customCertificates" + "." + "minioClientCertificates" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *UpdateTenantSecurityRequestCustomCertificates) validateMinioServerCertificates(formats strfmt.Registry) error { - if swag.IsZero(m.MinioServerCertificates) { // not required - return nil - } - - for i := 0; i < len(m.MinioServerCertificates); i++ { - if swag.IsZero(m.MinioServerCertificates[i]) { // not required - continue - } - - if m.MinioServerCertificates[i] != nil { - if err := m.MinioServerCertificates[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("customCertificates" + "." + "minioServerCertificates" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("customCertificates" + "." + "minioServerCertificates" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// ContextValidate validate this update tenant security request custom certificates based on the context it is used -func (m *UpdateTenantSecurityRequestCustomCertificates) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateMinioClientCertificates(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateMinioServerCertificates(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *UpdateTenantSecurityRequestCustomCertificates) contextValidateMinioClientCertificates(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.MinioClientCertificates); i++ { - - if m.MinioClientCertificates[i] != nil { - - if swag.IsZero(m.MinioClientCertificates[i]) { // not required - return nil - } - - if err := m.MinioClientCertificates[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("customCertificates" + "." + "minioClientCertificates" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("customCertificates" + "." + "minioClientCertificates" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -func (m *UpdateTenantSecurityRequestCustomCertificates) contextValidateMinioServerCertificates(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(m.MinioServerCertificates); i++ { - - if m.MinioServerCertificates[i] != nil { - - if swag.IsZero(m.MinioServerCertificates[i]) { // not required - return nil - } - - if err := m.MinioServerCertificates[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("customCertificates" + "." + "minioServerCertificates" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("customCertificates" + "." + "minioServerCertificates" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// MarshalBinary interface implementation -func (m *UpdateTenantSecurityRequestCustomCertificates) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *UpdateTenantSecurityRequestCustomCertificates) UnmarshalBinary(b []byte) error { - var res UpdateTenantSecurityRequestCustomCertificates - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/vault_configuration.go b/models/vault_configuration.go deleted file mode 100644 index 99a99560aa5..00000000000 --- a/models/vault_configuration.go +++ /dev/null @@ -1,318 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" - "github.com/go-openapi/validate" -) - -// VaultConfiguration vault configuration -// -// swagger:model vaultConfiguration -type VaultConfiguration struct { - - // approle - // Required: true - Approle *VaultConfigurationApprole `json:"approle"` - - // endpoint - // Required: true - Endpoint *string `json:"endpoint"` - - // engine - Engine string `json:"engine,omitempty"` - - // namespace - Namespace string `json:"namespace,omitempty"` - - // prefix - Prefix string `json:"prefix,omitempty"` - - // status - Status *VaultConfigurationStatus `json:"status,omitempty"` -} - -// Validate validates this vault configuration -func (m *VaultConfiguration) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateApprole(formats); err != nil { - res = append(res, err) - } - - if err := m.validateEndpoint(formats); err != nil { - res = append(res, err) - } - - if err := m.validateStatus(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *VaultConfiguration) validateApprole(formats strfmt.Registry) error { - - if err := validate.Required("approle", "body", m.Approle); err != nil { - return err - } - - if m.Approle != nil { - if err := m.Approle.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("approle") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("approle") - } - return err - } - } - - return nil -} - -func (m *VaultConfiguration) validateEndpoint(formats strfmt.Registry) error { - - if err := validate.Required("endpoint", "body", m.Endpoint); err != nil { - return err - } - - return nil -} - -func (m *VaultConfiguration) validateStatus(formats strfmt.Registry) error { - if swag.IsZero(m.Status) { // not required - return nil - } - - if m.Status != nil { - if err := m.Status.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("status") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("status") - } - return err - } - } - - return nil -} - -// ContextValidate validate this vault configuration based on the context it is used -func (m *VaultConfiguration) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateApprole(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateStatus(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *VaultConfiguration) contextValidateApprole(ctx context.Context, formats strfmt.Registry) error { - - if m.Approle != nil { - - if err := m.Approle.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("approle") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("approle") - } - return err - } - } - - return nil -} - -func (m *VaultConfiguration) contextValidateStatus(ctx context.Context, formats strfmt.Registry) error { - - if m.Status != nil { - - if swag.IsZero(m.Status) { // not required - return nil - } - - if err := m.Status.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("status") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("status") - } - return err - } - } - - return nil -} - -// MarshalBinary interface implementation -func (m *VaultConfiguration) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *VaultConfiguration) UnmarshalBinary(b []byte) error { - var res VaultConfiguration - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} - -// VaultConfigurationApprole vault configuration approle -// -// swagger:model VaultConfigurationApprole -type VaultConfigurationApprole struct { - - // engine - Engine string `json:"engine,omitempty"` - - // id - // Required: true - ID *string `json:"id"` - - // retry - Retry int64 `json:"retry,omitempty"` - - // secret - // Required: true - Secret *string `json:"secret"` -} - -// Validate validates this vault configuration approle -func (m *VaultConfigurationApprole) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateID(formats); err != nil { - res = append(res, err) - } - - if err := m.validateSecret(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *VaultConfigurationApprole) validateID(formats strfmt.Registry) error { - - if err := validate.Required("approle"+"."+"id", "body", m.ID); err != nil { - return err - } - - return nil -} - -func (m *VaultConfigurationApprole) validateSecret(formats strfmt.Registry) error { - - if err := validate.Required("approle"+"."+"secret", "body", m.Secret); err != nil { - return err - } - - return nil -} - -// ContextValidate validates this vault configuration approle based on context it is used -func (m *VaultConfigurationApprole) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *VaultConfigurationApprole) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *VaultConfigurationApprole) UnmarshalBinary(b []byte) error { - var res VaultConfigurationApprole - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} - -// VaultConfigurationStatus vault configuration status -// -// swagger:model VaultConfigurationStatus -type VaultConfigurationStatus struct { - - // ping - Ping int64 `json:"ping,omitempty"` -} - -// Validate validates this vault configuration status -func (m *VaultConfigurationStatus) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this vault configuration status based on context it is used -func (m *VaultConfigurationStatus) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *VaultConfigurationStatus) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *VaultConfigurationStatus) UnmarshalBinary(b []byte) error { - var res VaultConfigurationStatus - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/vault_configuration_response.go b/models/vault_configuration_response.go deleted file mode 100644 index 5a6d9cf0b00..00000000000 --- a/models/vault_configuration_response.go +++ /dev/null @@ -1,318 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" - "github.com/go-openapi/validate" -) - -// VaultConfigurationResponse vault configuration response -// -// swagger:model vaultConfigurationResponse -type VaultConfigurationResponse struct { - - // approle - // Required: true - Approle *VaultConfigurationResponseApprole `json:"approle"` - - // endpoint - // Required: true - Endpoint *string `json:"endpoint"` - - // engine - Engine string `json:"engine,omitempty"` - - // namespace - Namespace string `json:"namespace,omitempty"` - - // prefix - Prefix string `json:"prefix,omitempty"` - - // status - Status *VaultConfigurationResponseStatus `json:"status,omitempty"` -} - -// Validate validates this vault configuration response -func (m *VaultConfigurationResponse) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateApprole(formats); err != nil { - res = append(res, err) - } - - if err := m.validateEndpoint(formats); err != nil { - res = append(res, err) - } - - if err := m.validateStatus(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *VaultConfigurationResponse) validateApprole(formats strfmt.Registry) error { - - if err := validate.Required("approle", "body", m.Approle); err != nil { - return err - } - - if m.Approle != nil { - if err := m.Approle.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("approle") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("approle") - } - return err - } - } - - return nil -} - -func (m *VaultConfigurationResponse) validateEndpoint(formats strfmt.Registry) error { - - if err := validate.Required("endpoint", "body", m.Endpoint); err != nil { - return err - } - - return nil -} - -func (m *VaultConfigurationResponse) validateStatus(formats strfmt.Registry) error { - if swag.IsZero(m.Status) { // not required - return nil - } - - if m.Status != nil { - if err := m.Status.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("status") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("status") - } - return err - } - } - - return nil -} - -// ContextValidate validate this vault configuration response based on the context it is used -func (m *VaultConfigurationResponse) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateApprole(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateStatus(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *VaultConfigurationResponse) contextValidateApprole(ctx context.Context, formats strfmt.Registry) error { - - if m.Approle != nil { - - if err := m.Approle.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("approle") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("approle") - } - return err - } - } - - return nil -} - -func (m *VaultConfigurationResponse) contextValidateStatus(ctx context.Context, formats strfmt.Registry) error { - - if m.Status != nil { - - if swag.IsZero(m.Status) { // not required - return nil - } - - if err := m.Status.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("status") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("status") - } - return err - } - } - - return nil -} - -// MarshalBinary interface implementation -func (m *VaultConfigurationResponse) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *VaultConfigurationResponse) UnmarshalBinary(b []byte) error { - var res VaultConfigurationResponse - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} - -// VaultConfigurationResponseApprole vault configuration response approle -// -// swagger:model VaultConfigurationResponseApprole -type VaultConfigurationResponseApprole struct { - - // engine - Engine string `json:"engine,omitempty"` - - // id - // Required: true - ID *string `json:"id"` - - // retry - Retry int64 `json:"retry,omitempty"` - - // secret - // Required: true - Secret *string `json:"secret"` -} - -// Validate validates this vault configuration response approle -func (m *VaultConfigurationResponseApprole) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateID(formats); err != nil { - res = append(res, err) - } - - if err := m.validateSecret(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *VaultConfigurationResponseApprole) validateID(formats strfmt.Registry) error { - - if err := validate.Required("approle"+"."+"id", "body", m.ID); err != nil { - return err - } - - return nil -} - -func (m *VaultConfigurationResponseApprole) validateSecret(formats strfmt.Registry) error { - - if err := validate.Required("approle"+"."+"secret", "body", m.Secret); err != nil { - return err - } - - return nil -} - -// ContextValidate validates this vault configuration response approle based on context it is used -func (m *VaultConfigurationResponseApprole) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *VaultConfigurationResponseApprole) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *VaultConfigurationResponseApprole) UnmarshalBinary(b []byte) error { - var res VaultConfigurationResponseApprole - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} - -// VaultConfigurationResponseStatus vault configuration response status -// -// swagger:model VaultConfigurationResponseStatus -type VaultConfigurationResponseStatus struct { - - // ping - Ping int64 `json:"ping,omitempty"` -} - -// Validate validates this vault configuration response status -func (m *VaultConfigurationResponseStatus) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this vault configuration response status based on context it is used -func (m *VaultConfigurationResponseStatus) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *VaultConfigurationResponseStatus) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *VaultConfigurationResponseStatus) UnmarshalBinary(b []byte) error { - var res VaultConfigurationResponseStatus - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/models/volume.go b/models/volume.go deleted file mode 100644 index b1b11fcae8e..00000000000 --- a/models/volume.go +++ /dev/null @@ -1,180 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -// This file is part of MinIO Operator -// Copyright (c) 2023 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . -// - -package models - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// Volume volume -// -// swagger:model volume -type Volume struct { - - // name - Name string `json:"name,omitempty"` - - // projected - Projected *ProjectedVolume `json:"projected,omitempty"` - - // pvc - Pvc *Pvc `json:"pvc,omitempty"` -} - -// Validate validates this volume -func (m *Volume) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateProjected(formats); err != nil { - res = append(res, err) - } - - if err := m.validatePvc(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *Volume) validateProjected(formats strfmt.Registry) error { - if swag.IsZero(m.Projected) { // not required - return nil - } - - if m.Projected != nil { - if err := m.Projected.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("projected") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("projected") - } - return err - } - } - - return nil -} - -func (m *Volume) validatePvc(formats strfmt.Registry) error { - if swag.IsZero(m.Pvc) { // not required - return nil - } - - if m.Pvc != nil { - if err := m.Pvc.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("pvc") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("pvc") - } - return err - } - } - - return nil -} - -// ContextValidate validate this volume based on the context it is used -func (m *Volume) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateProjected(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidatePvc(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *Volume) contextValidateProjected(ctx context.Context, formats strfmt.Registry) error { - - if m.Projected != nil { - - if swag.IsZero(m.Projected) { // not required - return nil - } - - if err := m.Projected.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("projected") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("projected") - } - return err - } - } - - return nil -} - -func (m *Volume) contextValidatePvc(ctx context.Context, formats strfmt.Registry) error { - - if m.Pvc != nil { - - if swag.IsZero(m.Pvc) { // not required - return nil - } - - if err := m.Pvc.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("pvc") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("pvc") - } - return err - } - } - - return nil -} - -// MarshalBinary interface implementation -func (m *Volume) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *Volume) UnmarshalBinary(b []byte) error { - var res Volume - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/operator-integration/tenant_test.go b/operator-integration/tenant_test.go deleted file mode 100644 index 2fac994748c..00000000000 --- a/operator-integration/tenant_test.go +++ /dev/null @@ -1,1136 +0,0 @@ -// This file is part of MinIO Console Server -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package operatorintegration - -import ( - "bytes" - b64 "encoding/base64" - "encoding/json" - "fmt" - "io" - "io/ioutil" - "log" - "net/http" - "os" - "os/exec" - "strconv" - "strings" - "testing" - "time" - - "github.com/minio/operator/api" - - "github.com/go-openapi/loads" - "github.com/minio/operator/api/operations" - "github.com/minio/operator/models" - miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" - "github.com/stretchr/testify/assert" -) - -var ( - token string - jwt string -) - -func inspectHTTPResponse(httpResponse *http.Response) string { - /* - Helper function to inspect the content of a HTTP response. - */ - b, err := io.ReadAll(httpResponse.Body) - if err != nil { - log.Fatalln(err) - } - return "Http Response: " + string(b) -} - -func decodeBase64(value string) string { - /* - Helper function to decode in base64 - */ - result, err := b64.StdEncoding.DecodeString(value) - if err != nil { - log.Fatal("error:", err) - } - return string(result) -} - -func printLoggingMessage(message string, functionName string) { - /* - Helper function to have standard output across the tests. - */ - finalString := "......................." + functionName + "(): " + message - fmt.Println(finalString) -} - -func printStartFunc(functionName string) { - /* - Common function for all tests to tell that test has started - */ - fmt.Println("") - printLoggingMessage("started", functionName) -} - -func printEndFunc(functionName string) { - /* - Helper function for all tests to tell that test has ended, is completed - */ - printLoggingMessage("completed", functionName) - fmt.Println("") -} - -func initConsoleServer() (*api.Server, error) { - // os.Setenv("CONSOLE_MINIO_SERVER", "localhost:9000") - - swaggerSpec, err := loads.Embedded(api.SwaggerJSON, api.FlatSwaggerJSON) - if err != nil { - return nil, err - } - - noLog := func(string, ...interface{}) { - // nothing to log - } - - // Initialize MinIO loggers - api.LogInfo = noLog - api.LogError = noLog - - xapi := operations.NewOperatorAPI(swaggerSpec) - xapi.Logger = noLog - - server := api.NewServer(xapi) - // register all APIs - server.ConfigureAPI() - - consolePort, _ := strconv.Atoi("9090") - - server.Host = "0.0.0.0" - server.Port = consolePort - api.Port = "9090" - api.Hostname = "0.0.0.0" - - return server, nil -} - -func TestMain(m *testing.M) { - printStartFunc("TestMain") - // start console server - go func() { - fmt.Println("start server") - srv, err := initConsoleServer() - fmt.Println("Server has been started at this point") - if err != nil { - fmt.Println("There is an error in console server: ", err) - log.Println(err) - log.Println("init fail") - return - } - fmt.Println("Start serving with Serve() function") - srv.Serve() - fmt.Println("After Serve() function") - }() - - fmt.Println("sleeping") - time.Sleep(2 * time.Second) - fmt.Println("after 2 seconds sleep") - - fmt.Println("creating the client") - - // SA_TOKEN=$(kubectl -n minio-operator get secret console-sa-secret -o jsonpath="{.data.token}" | base64 --decode) - fmt.Println("Where we have the secret already: ") - app2 := "kubectl" - argu0 := "--namespace" - argu1 := "minio-operator" - argu2 := "get" - argu3 := "secret" - argu4 := "console-sa-secret" - argu5 := "-o" - argu6 := "jsonpath=\"{.data.token}\"" - fmt.Println("Prior executing second command to get the token") - cmd2 := exec.Command(app2, argu0, argu1, argu2, argu3, argu4, argu5, argu6) - fmt.Println("after executing second command to get the token") - var out2 bytes.Buffer - var stderr2 bytes.Buffer - cmd2.Stdout = &out2 - cmd2.Stderr = &stderr2 - err2 := cmd2.Run() - if err2 != nil { - fmt.Println(fmt.Sprint(err2) + ": -> " + stderr2.String()) - return - } - secret2 := out2.String() - jwt = decodeBase64(secret2[1 : len(secret2)-1]) - if jwt == "" { - fmt.Println("jwt cannot be empty string") - os.Exit(-1) - } - response, err := LoginOperator() - if err != nil { - log.Println(err) - return - } - - if response != nil { - for _, cookie := range response.Cookies() { - if cookie.Name == "token" { - token = cookie.Value - break - } - } - } - - if token == "" { - log.Println("authentication token not found in cookies response") - return - } - - code := m.Run() - printEndFunc("TestMain") - os.Exit(code) -} - -func ListTenants() (*http.Response, error) { - /* - Helper function to list buckets - HTTP Verb: GET - URL: http://localhost:9090/api/v1/tenants - */ - request, err := http.NewRequest( - "GET", "http://localhost:9090/api/v1/tenants", nil) - if err != nil { - log.Println(err) - } - request.Header.Add("Cookie", fmt.Sprintf("token=%s", token)) - request.Header.Add("Content-Type", "application/json") - client := &http.Client{ - Timeout: 2 * time.Second, - } - response, err := client.Do(request) - return response, err -} - -func TestListTenants(t *testing.T) { - // Tenants can be listed via API: https://github.com/miniohq/engineering/issues/591 - printStartFunc("TestListTenants") - assert := assert.New(t) - resp, err := ListTenants() - assert.Nil(err) - if err != nil { - log.Println(err) - return - } - if resp != nil { - assert.Equal( - 200, resp.StatusCode, "Status Code is incorrect") - } - bodyBytes, _ := ioutil.ReadAll(resp.Body) - result := models.ListTenantsResponse{} - err = json.Unmarshal(bodyBytes, &result) - if err != nil { - log.Println(err) - assert.Nil(err) - } - TenantName := &result.Tenants[0].Name // The array has to be empty, no index accessible - fmt.Println(*TenantName) - assert.Equal("myminio", *TenantName, *TenantName) - printEndFunc("TestListTenants") -} - -func CreateTenant(tenantName string, namespace string, accessKey string, secretKey string, accessKeys []string, idp map[string]interface{}, tls map[string]interface{}, prometheusConfiguration map[string]interface{}, logSearchConfiguration map[string]interface{}, erasureCodingParity int, pools []map[string]interface{}, exposeConsole bool, exposeMinIO bool, image string, serviceName string, enablePrometheus bool, enableConsole bool, enableTLS bool, secretKeys []string) (*http.Response, error) { - /* - Helper function to create a tenant - HTTP Verb: POST - API: /api/v1/tenants - */ - requestDataAdd := map[string]interface{}{ - "name": tenantName, - "namespace": namespace, - "access_key": accessKey, - "secret_key": secretKey, - "access_keys": accessKeys, - "secret_keys": secretKeys, - "enable_tls": enableTLS, - "enable_console": enableConsole, - "service_name": serviceName, - "image": image, - "expose_minio": exposeMinIO, - "expose_console": exposeConsole, - "pools": pools, - "erasureCodingParity": erasureCodingParity, - "logSearchConfiguration": logSearchConfiguration, - "prometheusConfiguration": prometheusConfiguration, - "tls": tls, - "idp": idp, - } - requestDataJSON, _ := json.Marshal(requestDataAdd) - requestDataBody := bytes.NewReader(requestDataJSON) - request, err := http.NewRequest( - "POST", - "http://localhost:9090/api/v1/tenants", - requestDataBody, - ) - if err != nil { - log.Println(err) - } - request.Header.Add("Cookie", fmt.Sprintf("token=%s", token)) - request.Header.Add("Content-Type", "application/json") - client := &http.Client{ - Timeout: 2 * time.Second, - } - response, err := client.Do(request) - return response, err -} - -func DeleteTenant(nameSpace, tenant string) (*http.Response, error) { - /* - URL: /namespaces/{namespace}/tenants/{tenant}: - HTTP Verb: DELETE - Summary: Delete tenant and underlying pvcs - */ - request, err := http.NewRequest( - "DELETE", - "http://localhost:9090/api/v1/namespaces/"+nameSpace+"/tenants/"+tenant, - nil, - ) - if err != nil { - log.Println(err) - } - request.Header.Add("Cookie", fmt.Sprintf("token=%s", token)) - request.Header.Add("Content-Type", "application/json") - client := &http.Client{ - Timeout: 2 * time.Second, - } - response, err := client.Do(request) - return response, err -} - -func TestCreateTenant(t *testing.T) { - printStartFunc("TestCreateTenant") - - // Variables - assert := assert.New(t) - erasureCodingParity := 2 - tenantName := "new-tenant" - namespace := "default" - accessKey := "" - secretKey := "" - var accessKeys []string - var secretKeys []string - var minio []string - var caCertificates []string - var consoleCAcertificates []string - enableTLS := true - enableConsole := true - enablePrometheus := true - serviceName := "" - image := "" - exposeMinIO := true - exposeConsole := true - values := make([]string, 1) - values[0] = "new-tenant" - values2 := make([]string, 1) - values2[0] = "pool-0" - keys := make([]map[string]interface{}, 1) - keys[0] = map[string]interface{}{ - "access_key": "IGLksSXdiU3fjcRI", - "secret_key": "EqeCPZ1xBYdnygizxxRWnkH09N2350nO", - } - pools := make([]map[string]interface{}, 1) - matchExpressions := make([]map[string]interface{}, 2) - matchExpressions[0] = map[string]interface{}{ - "key": miniov2.TenantLabel, - "operator": "In", - "values": values, - } - matchExpressions[1] = map[string]interface{}{ - "key": "v1.min.io/pool", - "operator": "In", - "values": values2, - } - requiredDuringSchedulingIgnoredDuringExecution := make([]map[string]interface{}, 1) - requiredDuringSchedulingIgnoredDuringExecution[0] = map[string]interface{}{ - "labelSelector": map[string]interface{}{ - "matchExpressions": matchExpressions, - }, - "topologyKey": "kubernetes.io/hostname", - } - pools0 := map[string]interface{}{ - "name": "pool-0", - "servers": 4, - "volumes_per_server": 1, - "volume_configuration": map[string]interface{}{ - "size": 26843545600, - "storage_class_name": "standard", - }, - "securityContext": nil, - "affinity": map[string]interface{}{ - "podAntiAffinity": map[string]interface{}{ - "requiredDuringSchedulingIgnoredDuringExecution": requiredDuringSchedulingIgnoredDuringExecution, - }, - }, - "resources": map[string]interface{}{ - "requests": map[string]interface{}{ - "cpu": 2, - "memory": 2, - }, - }, - } - logSearchConfiguration := map[string]interface{}{ - "image": "", - "postgres_image": "", - "postgres_init_image": "", - } - prometheusConfiguration := map[string]interface{}{ - "image": "", - "sidecar_image": "", - "init_image": "", - } - tls := map[string]interface{}{ - "minio": minio, - "ca_certificates": caCertificates, - "console_ca_certificates": consoleCAcertificates, - } - idp := map[string]interface{}{ - "keys": keys, - } - pools[0] = pools0 - - // 1. Create Tenant - resp, err := CreateTenant( - tenantName, - namespace, - accessKey, - secretKey, - accessKeys, - idp, - tls, - prometheusConfiguration, - logSearchConfiguration, - erasureCodingParity, - pools, - exposeConsole, - exposeMinIO, - image, - serviceName, - enablePrometheus, - enableConsole, - enableTLS, - secretKeys, - ) - assert.Nil(err) - if err != nil { - log.Println(err) - return - } - if resp != nil { - assert.Equal( - 200, resp.StatusCode, "Status Code is incorrect") - } - - printEndFunc("TestCreateTenant") -} - -func TestDeleteTenant(t *testing.T) { - printStartFunc("TestCreateTenant") - - // Variables - assert := assert.New(t) - erasureCodingParity := 2 - tenantName := "new-tenant-3" - namespace := "new-namespace-3" - - // 0. Create the namespace - resp, err := CreateNamespace(namespace) - assert.Nil(err) - if err != nil { - log.Println(err) - return - } - if resp != nil { - assert.Equal( - 201, resp.StatusCode, inspectHTTPResponse(resp)) - } - - accessKey := "" - secretKey := "" - var accessKeys []string - var secretKeys []string - var minio []string - var caCertificates []string - var consoleCAcertificates []string - enableTLS := true - enableConsole := true - enablePrometheus := true - serviceName := "" - image := "" - exposeMinIO := true - exposeConsole := true - values := make([]string, 1) - values[0] = "new-tenant" - values2 := make([]string, 1) - values2[0] = "pool-0" - keys := make([]map[string]interface{}, 1) - keys[0] = map[string]interface{}{ - "access_key": "IGLksSXdiU3fjcRI", - "secret_key": "EqeCPZ1xBYdnygizxxRWnkH09N2350nO", - } - pools := make([]map[string]interface{}, 1) - matchExpressions := make([]map[string]interface{}, 2) - matchExpressions[0] = map[string]interface{}{ - "key": miniov2.TenantLabel, - "operator": "In", - "values": values, - } - matchExpressions[1] = map[string]interface{}{ - "key": "v1.min.io/pool", - "operator": "In", - "values": values2, - } - requiredDuringSchedulingIgnoredDuringExecution := make([]map[string]interface{}, 1) - requiredDuringSchedulingIgnoredDuringExecution[0] = map[string]interface{}{ - "labelSelector": map[string]interface{}{ - "matchExpressions": matchExpressions, - }, - "topologyKey": "kubernetes.io/hostname", - } - pools0 := map[string]interface{}{ - "name": "pool-0", - "servers": 4, - "volumes_per_server": 1, - "volume_configuration": map[string]interface{}{ - "size": 26843545600, - "storage_class_name": "standard", - }, - "securityContext": nil, - "affinity": map[string]interface{}{ - "podAntiAffinity": map[string]interface{}{ - "requiredDuringSchedulingIgnoredDuringExecution": requiredDuringSchedulingIgnoredDuringExecution, - }, - }, - "resources": map[string]interface{}{ - "requests": map[string]interface{}{ - "cpu": 2, - "memory": 2, - }, - }, - } - logSearchConfiguration := map[string]interface{}{ - "image": "", - "postgres_image": "", - "postgres_init_image": "", - } - prometheusConfiguration := map[string]interface{}{ - "image": "", - "sidecar_image": "", - "init_image": "", - } - tls := map[string]interface{}{ - "minio": minio, - "ca_certificates": caCertificates, - "console_ca_certificates": consoleCAcertificates, - } - idp := map[string]interface{}{ - "keys": keys, - } - pools[0] = pools0 - - // 1. Create Tenant - resp, err = CreateTenant( - tenantName, - namespace, - accessKey, - secretKey, - accessKeys, - idp, - tls, - prometheusConfiguration, - logSearchConfiguration, - erasureCodingParity, - pools, - exposeConsole, - exposeMinIO, - image, - serviceName, - enablePrometheus, - enableConsole, - enableTLS, - secretKeys, - ) - assert.Nil(err) - if err != nil { - log.Println(err) - return - } - if resp != nil { - assert.Equal( - 200, resp.StatusCode, "Status Code is incorrect") - } - - // 2. Delete tenant - resp, err = DeleteTenant(namespace, tenantName) - if err != nil { - log.Println(err) - return - } - if resp != nil { - assert.Equal( - 204, - resp.StatusCode, - inspectHTTPResponse(resp), - ) - } - - printEndFunc("TestCreateTenant") -} - -func ListTenantsByNameSpace(namespace string) (*http.Response, error) { - /* - Helper function to list buckets - HTTP Verb: GET - URL: http://localhost:9090/api/v1/namespaces/{namespace}/tenants - */ - request, err := http.NewRequest( - "GET", "http://localhost:9090/api/v1/namespaces/"+namespace+"/tenants", nil) - if err != nil { - log.Println(err) - } - request.Header.Add("Cookie", fmt.Sprintf("token=%s", token)) - request.Header.Add("Content-Type", "application/json") - client := &http.Client{ - Timeout: 2 * time.Second, - } - response, err := client.Do(request) - return response, err -} - -func TestListTenantsByNameSpace(t *testing.T) { - assert := assert.New(t) - namespace := "default" - resp, err := ListTenantsByNameSpace(namespace) - assert.Nil(err) - if err != nil { - log.Println(err) - return - } - if resp != nil { - assert.Equal( - 200, resp.StatusCode, "Status Code is incorrect") - } - bodyBytes, _ := ioutil.ReadAll(resp.Body) - result := models.ListTenantsResponse{} - err = json.Unmarshal(bodyBytes, &result) - if err != nil { - log.Println(err) - assert.Nil(err) - } - if len(result.Tenants) == 0 { - assert.Fail("FAIL: There are no tenants in the array") - } - TenantName := &result.Tenants[0].Name - fmt.Println(*TenantName) - assert.Equal("new-tenant", *TenantName, *TenantName) -} - -func ListNodeLabels() (*http.Response, error) { - /* - Helper function to list buckets - HTTP Verb: GET - URL: http://localhost:9090/api/v1/nodes/labels - */ - request, err := http.NewRequest( - "GET", "http://localhost:9090/api/v1/nodes/labels", nil) - if err != nil { - log.Println(err) - } - request.Header.Add("Cookie", fmt.Sprintf("token=%s", token)) - request.Header.Add("Content-Type", "application/json") - client := &http.Client{ - Timeout: 2 * time.Second, - } - response, err := client.Do(request) - return response, err -} - -func TestListNodeLabels(t *testing.T) { - assert := assert.New(t) - resp, err := ListNodeLabels() - assert.Nil(err) - if err != nil { - log.Println(err) - return - } - finalResponse := inspectHTTPResponse(resp) - if resp != nil { - assert.Equal( - 200, resp.StatusCode, finalResponse) - } - // "beta.kubernetes.io/arch" is a label of our nodes and is expected - assert.True( - strings.Contains(finalResponse, "beta.kubernetes.io/arch"), - finalResponse) -} - -func GetPodEvents(nameSpace string, tenant string, podName string) (*http.Response, error) { - /* - Helper function to get events for pod - URL: /namespaces/{namespace}/tenants/{tenant}/pods/{podName}/events - HTTP Verb: GET - */ - request, err := http.NewRequest( - "GET", "http://localhost:9090/api/v1/namespaces/"+nameSpace+"/tenants/"+tenant+"/pods/"+podName+"/events", nil) - if err != nil { - log.Println(err) - } - request.Header.Add("Cookie", fmt.Sprintf("token=%s", token)) - request.Header.Add("Content-Type", "application/json") - client := &http.Client{ - Timeout: 2 * time.Second, - } - response, err := client.Do(request) - return response, err -} - -func TestGetPodEvents(t *testing.T) { - assert := assert.New(t) - namespace := "tenant-lite" - tenant := "myminio" - podName := "myminio-pool-0-0" - resp, err := GetPodEvents(namespace, tenant, podName) - assert.Nil(err) - if err != nil { - log.Println(err) - return - } - if resp != nil { - assert.Equal( - 200, resp.StatusCode, "Status Code is incorrect") - } -} - -func GetPodDescribe(nameSpace string, tenant string, podName string) (*http.Response, error) { - /* - Helper function to get events for pod - URL: /namespaces/{namespace}/tenants/{tenant}/pods/{podName}/events - HTTP Verb: GET - */ - fmt.Println(nameSpace) - fmt.Println(tenant) - fmt.Println(podName) - request, err := http.NewRequest( - "GET", "http://localhost:9090/api/v1/namespaces/"+nameSpace+"/tenants/"+tenant+"/pods/"+podName+"/describe", nil) - if err != nil { - log.Println(err) - } - request.Header.Add("Cookie", fmt.Sprintf("token=%s", token)) - request.Header.Add("Content-Type", "application/json") - client := &http.Client{ - Timeout: 2 * time.Second, - } - response, err := client.Do(request) - return response, err -} - -func TestGetPodDescribe(t *testing.T) { - assert := assert.New(t) - namespace := "tenant-lite" - tenant := "myminio" - podName := "myminio-pool-0-0" - resp, err := GetPodDescribe(namespace, tenant, podName) - assert.Nil(err) - if err != nil { - log.Println(err) - return - } - finalResponse := inspectHTTPResponse(resp) - if resp != nil { - assert.Equal( - 200, resp.StatusCode, finalResponse) - } - /*if resp != nil { - assert.Equal( - 200, resp.StatusCode, "Status Code is incorrect") - }*/ -} - -func GetCSR(nameSpace string, tenant string) (*http.Response, error) { - /* - Helper function to get events for pod - URL: /namespaces/{namespace}/tenants/{tenant}/csr - HTTP Verb: GET - */ - request, err := http.NewRequest( - "GET", "http://localhost:9090/api/v1/namespaces/"+nameSpace+"/tenants/"+tenant+"/csr/", nil) - if err != nil { - log.Println(err) - } - request.Header.Add("Cookie", fmt.Sprintf("token=%s", token)) - request.Header.Add("Content-Type", "application/json") - client := &http.Client{ - Timeout: 2 * time.Second, - } - response, err := client.Do(request) - return response, err -} - -func TestGetCSR(t *testing.T) { - assert := assert.New(t) - namespace := "tenant-lite" - tenant := "myminio" - resp, err := GetCSR(namespace, tenant) - assert.Nil(err) - if err != nil { - log.Println(err) - return - } - finalResponse := inspectHTTPResponse(resp) - if resp != nil { - assert.Equal( - 200, resp.StatusCode, finalResponse) - } - assert.Equal(strings.Contains(finalResponse, "Automatically approved by MinIO Operator"), true, finalResponse) -} - -func TestGetMultipleCSRs(t *testing.T) { - /* - We can have multiple CSRs per tenant, the idea is to support them in our API and test them here, making sure we - can retrieve them all, as an example I found this tenant: - myminio -client -tenant-kms-encrypted-csr - myminio -kes -tenant-kms-encrypted-csr - myminio -tenant-kms-encrypted-csr - Notice the nomenclature of it: - -<*>--csr - where * is anything either nothing or something, anything. - */ - assert := assert.New(t) - namespace := "tenant-kms-encrypted" - tenant := "myminio" - resp, err := GetCSR(namespace, tenant) - assert.Nil(err) - if err != nil { - log.Println(err) - return - } - finalResponse := inspectHTTPResponse(resp) - if resp != nil { - assert.Equal( - 200, resp.StatusCode, finalResponse) - } - var expectedMessages [3]string - expectedMessages[0] = "myminio-tenant-kms-encrypted-csr" - expectedMessages[1] = "myminio-kes-tenant-kms-encrypted-csr" - expectedMessages[2] = "Automatically approved by MinIO Operator" - for _, element := range expectedMessages { - assert.Equal(strings.Contains(finalResponse, element), true) - } -} - -func ListPVCsForTenant(nameSpace string, tenant string) (*http.Response, error) { - /* - URL: /namespaces/{namespace}/tenants/{tenant}/pvcs - HTTP Verb: GET - */ - request, err := http.NewRequest( - "GET", "http://localhost:9090/api/v1/namespaces/"+nameSpace+"/tenants/"+tenant+"/pvcs/", nil) - if err != nil { - log.Println(err) - } - request.Header.Add("Cookie", fmt.Sprintf("token=%s", token)) - request.Header.Add("Content-Type", "application/json") - client := &http.Client{ - Timeout: 2 * time.Second, - } - response, err := client.Do(request) - return response, err -} - -func TestListPVCsForTenant(t *testing.T) { - /* - Function to list and verify the Tenant's Persistent Volume Claims - */ - assert := assert.New(t) - namespace := "tenant-lite" - tenant := "myminio" - resp, err := ListPVCsForTenant(namespace, tenant) - bodyResponse := resp.Body - assert.Nil(err) - if err != nil { - log.Println(err) - return - } - if resp != nil { - assert.Equal( - 200, resp.StatusCode, "failed") - } - bodyBytes, _ := ioutil.ReadAll(bodyResponse) - listObjs := models.ListPVCsResponse{} - err = json.Unmarshal(bodyBytes, &listObjs) - if err != nil { - log.Println(err) - assert.Nil(err) - } - var pvcArray [4]string - pvcArray[0] = "data0-myminio-pool-0-0" - pvcArray[1] = "data0-myminio-pool-0-1" - pvcArray[2] = "data0-myminio-pool-0-2" - pvcArray[3] = "data0-myminio-pool-0-3" - for i := 0; i < len(pvcArray); i++ { - assert.Equal(strings.Contains(listObjs.Pvcs[i].Name, pvcArray[i]), true) - } -} - -func CreateNamespace(nameSpace string) (*http.Response, error) { - /* - Description: Creates a new Namespace with given information - URL: /namespace - HTTP Verb: POST - */ - requestDataAdd := map[string]interface{}{ - "name": nameSpace, - } - requestDataJSON, _ := json.Marshal(requestDataAdd) - requestDataBody := bytes.NewReader(requestDataJSON) - request, err := http.NewRequest( - "POST", - "http://localhost:9090/api/v1/namespace/", - requestDataBody, - ) - if err != nil { - log.Println(err) - } - request.Header.Add("Cookie", fmt.Sprintf("token=%s", token)) - request.Header.Add("Content-Type", "application/json") - client := &http.Client{ - Timeout: 2 * time.Second, - } - response, err := client.Do(request) - return response, err -} - -func TestCreateNamespace(t *testing.T) { - /* - Function to Create a Namespace only once. - */ - assert := assert.New(t) - namespace := "new-namespace-thujun2208pm" - tests := []struct { - name string - nameSpace string - expectedStatus int - }{ - { - name: "Create Namespace for the first time", - expectedStatus: 201, - nameSpace: namespace, - }, - { - name: "Create repeated namespace for second time", - expectedStatus: 500, - nameSpace: namespace, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - resp, err := CreateNamespace(tt.nameSpace) - assert.Nil(err) - if err != nil { - log.Println(err) - return - } - if resp != nil { - assert.Equal( - tt.expectedStatus, resp.StatusCode, "failed") - } else { - assert.Fail("resp cannot be nil") - } - }) - } -} - -func LoginOperator() (*http.Response, error) { - /* - Description: Login to Operator Console. - URL: /login/operator - Params in the Body: jwt - */ - requestData := map[string]string{ - "jwt": jwt, - } - fmt.Println("requestData: ", requestData) - - requestDataJSON, _ := json.Marshal(requestData) - - requestDataBody := bytes.NewReader(requestDataJSON) - - request, err := http.NewRequest("POST", "http://localhost:9090/api/v1/login/operator", requestDataBody) - if err != nil { - log.Println(err) - } - - request.Header.Add("Content-Type", "application/json") - client := &http.Client{ - Timeout: 2 * time.Second, - } - response, err := client.Do(request) - return response, err -} - -func LogoutOperator() (*http.Response, error) { - /* - Description: Logout from Operator. - URL: /logout - */ - request, err := http.NewRequest( - "POST", - "http://localhost:9090/api/v1/logout", - nil, - ) - request.Header.Add("Cookie", fmt.Sprintf("token=%s", token)) - request.Header.Add("Content-Type", "application/json") - if err != nil { - log.Println(err) - } - request.Header.Add("Content-Type", "application/json") - client := &http.Client{ - Timeout: 2 * time.Second, - } - response, err := client.Do(request) - return response, err -} - -func TestLogout(t *testing.T) { - // Vars - assert := assert.New(t) - - // 1. Logout - response, err := LogoutOperator() - if err != nil { - log.Println(err) - return - } - if response != nil { - assert.Equal( - 200, - response.StatusCode, - inspectHTTPResponse(response), - ) - } - - // 2. Login to recover token - response, err = LoginOperator() - if err != nil { - log.Println(err) - return - } - if response != nil { - for _, cookie := range response.Cookies() { - if cookie.Name == "token" { - token = cookie.Value - break - } - } - } - - // Verify token - if token == "" { - assert.Fail("authentication token not found in cookies response") - } -} - -func TenantDetails(nameSpace, tenant string) (*http.Response, error) { - /* - url: /namespaces/{namespace}/tenants/{tenant} - summary: Tenant Details - operationId: TenantDetails - HTTP Verb: GET - */ - request, err := http.NewRequest( - "GET", - "http://localhost:9090/api/v1/namespaces/"+nameSpace+"/tenants/"+tenant, - nil, - ) - if err != nil { - log.Println(err) - } - request.Header.Add("Cookie", fmt.Sprintf("token=%s", token)) - request.Header.Add("Content-Type", "application/json") - client := &http.Client{ - Timeout: 2 * time.Second, - } - response, err := client.Do(request) - return response, err -} - -func TestTenantDetails(t *testing.T) { - // Vars - assert := assert.New(t) - nameSpace := "tenant-lite" - tenant := "myminio" - resp, err := TenantDetails(nameSpace, tenant) - if err != nil { - log.Println(err) - return - } - if resp != nil { - assert.Equal( - 200, - resp.StatusCode, - inspectHTTPResponse(resp), - ) - } -} - -func TenantLogReport(nameSpace, tenant string) (*http.Response, error) { - /* - url: /namespaces/{namespace}/tenants/{tenant}/log-report: - summary: Tenant Log Report - operationId: GetTenantLogReport - HTTP Verb: GET - */ - request, err := http.NewRequest( - "GET", - "http://localhost:9090/api/v1/namespaces/"+nameSpace+"/tenants/"+tenant+"/log-report", - nil, - ) - if err != nil { - log.Println(err) - } - request.Header.Add("Cookie", fmt.Sprintf("token=%s", token)) - request.Header.Add("Content-Type", "application/json") - client := &http.Client{ - Timeout: 2 * time.Second, - } - response, err := client.Do(request) - return response, err -} - -func TestTenantLogReport(t *testing.T) { - // Vars - assert := assert.New(t) - nameSpace := "tenant-lite" - tenant := "myminio" - resp, err := TenantLogReport(nameSpace, tenant) - if err != nil { - log.Println(err) - return - } - if resp != nil { - assert.Equal( - 200, - resp.StatusCode, - inspectHTTPResponse(resp), - ) - } -} diff --git a/pkg/apis/minio.min.io/v2/utils.go b/pkg/apis/minio.min.io/v2/utils.go index f6690cb2037..2e84d74c4f6 100644 --- a/pkg/apis/minio.min.io/v2/utils.go +++ b/pkg/apis/minio.min.io/v2/utils.go @@ -16,73 +16,11 @@ package v2 import ( "bytes" - "crypto/rand" "encoding/json" "fmt" - "io" "strings" ) -const ( - // Maximum length for MinIO access key. - // There is no max length enforcement for access keys - accessKeyMaxLen = 20 - - // Maximum secret key length for MinIO, this - // is used when auto generating new credentials. - // There is no max length enforcement for secret keys - secretKeyMaxLen = 40 - - // Alpha numeric table used for generating access keys. - alphaNumericTable = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" - - // Alpha numeric table used for generating secret keys. - alphaNumericTableFull = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" - - // Total length of the alphanumeric table. - alphaNumericTableLen = byte(len(alphaNumericTable)) - - // Total length of the full alphanumeric table. - alphaNumericTableFullLen = byte(len(alphaNumericTableFull)) -) - -// GenerateCredentials - creates randomly generated credentials of maximum allowed length. -func GenerateCredentials() (accessKey, secretKey string, err error) { - readBytes := func(size int) (data []byte, err error) { - data = make([]byte, size) - var n int - if n, err = io.ReadFull(rand.Reader, data); err != nil { - return nil, err - } else if n != size { - return nil, fmt.Errorf("Not enough data. Expected to read: %v bytes, got: %v bytes", size, n) - } - return data, nil - } - - // Generate access key. - keyBytes, err := readBytes(accessKeyMaxLen) - if err != nil { - return "", "", err - } - for i := 0; i < accessKeyMaxLen; i++ { - keyBytes[i] = alphaNumericTable[keyBytes[i]%alphaNumericTableLen] - } - accessKey = string(keyBytes) - - // Generate secret key. - keyBytes, err = readBytes(secretKeyMaxLen) - if err != nil { - return "", "", err - } - - for i := 0; i < secretKeyMaxLen; i++ { - keyBytes[i] = alphaNumericTableFull[keyBytes[i]%alphaNumericTableFullLen] - } - secretKey = string(keyBytes) - - return accessKey, secretKey, nil -} - // GenerateTenantConfigurationFile : func GenerateTenantConfigurationFile(configuration map[string]string) string { var rawConfiguration strings.Builder diff --git a/pkg/auth/idp/oauth2/config.go b/pkg/auth/idp/oauth2/config.go index 106f74349c9..4be86a4af49 100644 --- a/pkg/auth/idp/oauth2/config.go +++ b/pkg/auth/idp/oauth2/config.go @@ -22,7 +22,6 @@ import ( "crypto/sha1" "strings" - "github.com/minio/operator/pkg/auth/token" "github.com/minio/pkg/env" "golang.org/x/crypto/pbkdf2" ) @@ -62,58 +61,11 @@ func GetSTSEndpoint() string { return strings.TrimSpace(env.Get(ConsoleMinIOServer, "http://localhost:9000")) } -// GetIDPURL returns the URL of the IDP -func GetIDPURL() string { - return env.Get(ConsoleIDPURL, "") -} - -// GetIDPClientID returns environment variable -func GetIDPClientID() string { - return env.Get(ConsoleIDPClientID, "") -} - -// GetIDPUserInfo returns environment variable -func GetIDPUserInfo() bool { - return env.Get(ConsoleIDPUserInfo, "") == "on" -} - // GetIDPSecret returns environment variable func GetIDPSecret() string { return env.Get(ConsoleIDPSecret, "") } -// GetIDPCallbackURL is the public endpoint used by the identity oidcProvider when redirecting -// the user after identity verification -func GetIDPCallbackURL() string { - return env.Get(ConsoleIDPCallbackURL, "") -} - -// GetIDPCallbackURLDynamic returns environment variable -func GetIDPCallbackURLDynamic() bool { - return env.Get(ConsoleIDPCallbackURLDynamic, "") == "on" -} - -// IsIDPEnabled returns boolean value for env var -func IsIDPEnabled() bool { - return GetIDPURL() != "" && - GetIDPClientID() != "" -} - -// GetPassphraseForIDPHmac returns passphrase for the pbkdf2 function used to sign the oauth2 state parameter -func getPassphraseForIDPHmac() string { - return env.Get(ConsoleIDPHmacPassphrase, token.GetPBKDFPassphrase()) -} - -// GetSaltForIDPHmac returns salt for the pbkdf2 function used to sign the oauth2 state parameter -func getSaltForIDPHmac() string { - return env.Get(ConsoleIDPHmacSalt, token.GetPBKDFSalt()) -} - -// getIDPScopes return default scopes during the IDP login request -func getIDPScopes() string { - return env.Get(ConsoleIDPScopes, "openid,profile,email") -} - // getIDPTokenExpiration return default token expiration for access token (in seconds) func getIDPTokenExpiration() string { return env.Get(ConsoleIDPTokenExpiration, "3600") diff --git a/pkg/auth/idp/oauth2/const.go b/pkg/auth/idp/oauth2/const.go index 865020f367d..8549e849b3c 100644 --- a/pkg/auth/idp/oauth2/const.go +++ b/pkg/auth/idp/oauth2/const.go @@ -18,15 +18,9 @@ package oauth2 // Environment constants for console IDP/SSO configuration const ( - ConsoleMinIOServer = "CONSOLE_MINIO_SERVER" - ConsoleIDPURL = "CONSOLE_IDP_URL" - ConsoleIDPClientID = "CONSOLE_IDP_CLIENT_ID" - ConsoleIDPSecret = "CONSOLE_IDP_SECRET" - ConsoleIDPCallbackURL = "CONSOLE_IDP_CALLBACK" - ConsoleIDPCallbackURLDynamic = "CONSOLE_IDP_CALLBACK_DYNAMIC" - ConsoleIDPHmacPassphrase = "CONSOLE_IDP_HMAC_PASSPHRASE" - ConsoleIDPHmacSalt = "CONSOLE_IDP_HMAC_SALT" - ConsoleIDPScopes = "CONSOLE_IDP_SCOPES" - ConsoleIDPUserInfo = "CONSOLE_IDP_USERINFO" - ConsoleIDPTokenExpiration = "CONSOLE_IDP_TOKEN_EXPIRATION" + ConsoleMinIOServer = "CONSOLE_MINIO_SERVER" + ConsoleIDPSecret = "CONSOLE_IDP_SECRET" + ConsoleIDPHmacPassphrase = "CONSOLE_IDP_HMAC_PASSPHRASE" + ConsoleIDPHmacSalt = "CONSOLE_IDP_HMAC_SALT" + ConsoleIDPTokenExpiration = "CONSOLE_IDP_TOKEN_EXPIRATION" ) diff --git a/pkg/auth/idp/oauth2/provider.go b/pkg/auth/idp/oauth2/provider.go index bcc5631c54a..d1f1f5f34c8 100644 --- a/pkg/auth/idp/oauth2/provider.go +++ b/pkg/auth/idp/oauth2/provider.go @@ -18,7 +18,6 @@ package oauth2 import ( "context" - "crypto/sha1" "encoding/base64" "encoding/json" "errors" @@ -33,7 +32,6 @@ import ( "github.com/minio/minio-go/v7/pkg/set" "github.com/minio/operator/pkg/auth/utils" - "golang.org/x/crypto/pbkdf2" xoauth2 "golang.org/x/oauth2" ) @@ -129,12 +127,6 @@ type Provider struct { stsHTTPClient *http.Client } -// DefaultDerivedKey is the key used to compute the HMAC for signing the oauth state parameter -// its derived using pbkdf on CONSOLE_IDP_HMAC_PASSPHRASE with CONSOLE_IDP_HMAC_SALT -var DefaultDerivedKey = func() []byte { - return pbkdf2.Key([]byte(getPassphraseForIDPHmac()), []byte(getSaltForIDPHmac()), 4096, 32, sha1.New) -} - const ( schemeHTTP = "http" schemeHTTPS = "https" @@ -160,69 +152,6 @@ func getLoginCallbackURL(r *http.Request) string { var requiredResponseTypes = set.CreateStringSet("code") -// NewOauth2ProviderClient instantiates a new oauth2 client using the configured credentials -// it returns a *Provider object that contains the necessary configuration to initiate an -// oauth2 authentication flow. -// -// We only support Authentication with the Authorization Code Flow - spec: -// https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowAuth -func NewOauth2ProviderClient(scopes []string, r *http.Request, httpClient *http.Client) (*Provider, error) { - ddoc, err := parseDiscoveryDoc(GetIDPURL(), httpClient) - if err != nil { - return nil, err - } - - supportedResponseTypes := set.NewStringSet() - for _, responseType := range ddoc.ResponseTypesSupported { - // FIXME: ResponseTypesSupported is a JSON array of strings - it - // may not actually have strings with spaces inside them - - // making the following code unnecessary. - for _, s := range strings.Fields(responseType) { - supportedResponseTypes.Add(s) - } - } - isSupported := requiredResponseTypes.Difference(supportedResponseTypes).IsEmpty() - - if !isSupported { - return nil, fmt.Errorf("expected 'code' response type - got %s, login not allowed", ddoc.ResponseTypesSupported) - } - - // If provided scopes are empty we use a default list or the user configured list - if len(scopes) == 0 { - scopes = strings.Split(getIDPScopes(), ",") - } - - redirectURL := GetIDPCallbackURL() - - if GetIDPCallbackURLDynamic() { - // dynamic redirect if set, will generate redirect URLs - // dynamically based on incoming requests. - redirectURL = getLoginCallbackURL(r) - } - - // add "openid" scope always. - scopes = append(scopes, "openid") - - client := new(Provider) - client.oauth2Config = &xoauth2.Config{ - ClientID: GetIDPClientID(), - ClientSecret: GetIDPSecret(), - RedirectURL: redirectURL, - Endpoint: xoauth2.Endpoint{ - AuthURL: ddoc.AuthEndpoint, - TokenURL: ddoc.TokenEndpoint, - }, - Scopes: scopes, - } - - client.IDPName = GetIDPClientID() - client.UserInfo = GetIDPUserInfo() - client.provHTTPClient = httpClient - client.endSessionEndpoint = ddoc.EndSessionEndpoint - - return client, nil -} - var defaultScopes = []string{"openid", "profile", "email"} // NewOauth2ProviderClient instantiates a new oauth2 client using the diff --git a/pkg/auth/idp/oauth2/provider_test.go b/pkg/auth/idp/oauth2/provider_test.go deleted file mode 100644 index 19534ba5322..00000000000 --- a/pkg/auth/idp/oauth2/provider_test.go +++ /dev/null @@ -1,71 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package oauth2 - -import ( - "context" - "net/http" - "testing" - - "github.com/stretchr/testify/assert" - "golang.org/x/oauth2" -) - -type Oauth2configMock struct{} - -var ( - oauth2ConfigExchangeMock func(ctx context.Context, code string, opts ...oauth2.AuthCodeOption) (*oauth2.Token, error) - oauth2ConfigAuthCodeURLMock func(state string, opts ...oauth2.AuthCodeOption) string - oauth2ConfigPasswordCredentialsTokenMock func(ctx context.Context, username, password string) (*oauth2.Token, error) - oauth2ConfigClientMock func(ctx context.Context, t *oauth2.Token) *http.Client - oauth2ConfigokenSourceMock func(ctx context.Context, t *oauth2.Token) oauth2.TokenSource -) - -func (ac Oauth2configMock) Exchange(ctx context.Context, code string, opts ...oauth2.AuthCodeOption) (*oauth2.Token, error) { - return oauth2ConfigExchangeMock(ctx, code, opts...) -} - -func (ac Oauth2configMock) AuthCodeURL(state string, opts ...oauth2.AuthCodeOption) string { - return oauth2ConfigAuthCodeURLMock(state, opts...) -} - -func (ac Oauth2configMock) PasswordCredentialsToken(ctx context.Context, username, password string) (*oauth2.Token, error) { - return oauth2ConfigPasswordCredentialsTokenMock(ctx, username, password) -} - -func (ac Oauth2configMock) Client(ctx context.Context, t *oauth2.Token) *http.Client { - return oauth2ConfigClientMock(ctx, t) -} - -func (ac Oauth2configMock) TokenSource(ctx context.Context, t *oauth2.Token) oauth2.TokenSource { - return oauth2ConfigokenSourceMock(ctx, t) -} - -func TestGenerateLoginURL(t *testing.T) { - funcAssert := assert.New(t) - oauth2Provider := Provider{ - oauth2Config: Oauth2configMock{}, - } - // Test-1 : GenerateLoginURL() generates URL correctly with provided state - oauth2ConfigAuthCodeURLMock = func(state string, opts ...oauth2.AuthCodeOption) string { - // Internally we are testing the private method getRandomStateWithHMAC, this function should always returns - // a non-empty string - return state - } - url := oauth2Provider.GenerateLoginURL(DefaultDerivedKey, "testIDP") - funcAssert.NotEqual("", url) -} diff --git a/pkg/auth/ldap.go b/pkg/auth/ldap.go deleted file mode 100644 index b726a23f2cf..00000000000 --- a/pkg/auth/ldap.go +++ /dev/null @@ -1,35 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package auth - -import ( - "net/http" - - "github.com/minio/minio-go/v7/pkg/credentials" -) - -// GetCredentialsFromLDAP authenticates the user against MinIO when the LDAP integration is enabled -// if the authentication succeed *credentials.Login object is returned and we continue with the normal STSAssumeRole flow -func GetCredentialsFromLDAP(client *http.Client, endpoint, ldapUser, ldapPassword string) (*credentials.Credentials, error) { - creds := credentials.New(&credentials.LDAPIdentity{ - Client: client, - STSEndpoint: endpoint, - LDAPUsername: ldapUser, - LDAPPassword: ldapPassword, - }) - return creds, nil -} diff --git a/pkg/auth/token.go b/pkg/auth/token.go deleted file mode 100644 index 49dd836fe78..00000000000 --- a/pkg/auth/token.go +++ /dev/null @@ -1,326 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package auth - -import ( - "bytes" - "crypto/aes" - "crypto/cipher" - "crypto/hmac" - "crypto/sha1" - "crypto/sha256" - "encoding/base64" - "encoding/json" - "errors" - "fmt" - "io" - "io/ioutil" - "net/http" - "strings" - "time" - - "github.com/minio/minio-go/v7/pkg/credentials" - "github.com/minio/operator/pkg/auth/token" - "github.com/secure-io/sio-go/sioutil" - "golang.org/x/crypto/chacha20" - "golang.org/x/crypto/chacha20poly1305" - "golang.org/x/crypto/pbkdf2" -) - -// Session token errors -var ( - ErrNoAuthToken = errors.New("session token missing") - ErrTokenExpired = errors.New("session token has expired") - ErrReadingToken = errors.New("session token internal data is malformed") -) - -// derivedKey is the key used to encrypt the session token claims, its derived using pbkdf on CONSOLE_PBKDF_PASSPHRASE with CONSOLE_PBKDF_SALT -var derivedKey = func() []byte { - return pbkdf2.Key([]byte(token.GetPBKDFPassphrase()), []byte(token.GetPBKDFSalt()), 4096, 32, sha1.New) -} - -// IsSessionTokenValid returns true or false depending upon the provided session if the token is valid or not -func IsSessionTokenValid(token string) bool { - _, err := SessionTokenAuthenticate(token) - return err == nil -} - -// TokenClaims claims struct for decrypted credentials -type TokenClaims struct { - STSAccessKeyID string `json:"stsAccessKeyID,omitempty"` - STSSecretAccessKey string `json:"stsSecretAccessKey,omitempty"` - STSSessionToken string `json:"stsSessionToken,omitempty"` - AccountAccessKey string `json:"accountAccessKey,omitempty"` - HideMenu bool `json:"hm,omitempty"` - ObjectBrowser bool `json:"ob,omitempty"` - CustomStyleOB string `json:"customStyleOb,omitempty"` -} - -// STSClaims claims struct for STS Token -type STSClaims struct { - AccessKey string `json:"accessKey,omitempty"` -} - -// SessionFeatures represents features stored in the session -type SessionFeatures struct { - HideMenu bool - ObjectBrowser bool - CustomStyleOB string -} - -// SessionTokenAuthenticate takes a session token, decode it, extract claims and validate the signature -// if the session token claims are valid we proceed to decrypt the information inside -// -// returns claims after validation in the following format: -// -// type TokenClaims struct { -// STSAccessKeyID -// STSSecretAccessKey -// STSSessionToken -// AccountAccessKey -// } -func SessionTokenAuthenticate(token string) (*TokenClaims, error) { - if token == "" { - return nil, ErrNoAuthToken - } - decryptedToken, err := DecryptToken(token) - if err != nil { - // fail decrypting token - return nil, ErrReadingToken - } - claimTokens, err := ParseClaimsFromToken(string(decryptedToken)) - if err != nil { - // fail unmarshalling token into data structure - return nil, ErrReadingToken - } - // claimsTokens contains the decrypted JWT for Console - return claimTokens, nil -} - -// NewEncryptedTokenForClient generates a new session token with claims based on the provided STS credentials, first -// encrypts the claims and the sign them -func NewEncryptedTokenForClient(credentials *credentials.Value, accountAccessKey string, features *SessionFeatures) (string, error) { - if credentials != nil { - tokenClaims := &TokenClaims{ - STSAccessKeyID: credentials.AccessKeyID, - STSSecretAccessKey: credentials.SecretAccessKey, - STSSessionToken: credentials.SessionToken, - AccountAccessKey: accountAccessKey, - } - if features != nil { - tokenClaims.HideMenu = features.HideMenu - tokenClaims.ObjectBrowser = features.ObjectBrowser - tokenClaims.CustomStyleOB = features.CustomStyleOB - } - - encryptedClaims, err := encryptClaims(tokenClaims) - if err != nil { - return "", err - } - return encryptedClaims, nil - } - return "", errors.New("provided credentials are empty") -} - -// encryptClaims() receives the STS claims, concatenate them and encrypt them using AES-GCM -// returns a base64 encoded ciphertext -func encryptClaims(credentials *TokenClaims) (string, error) { - payload, err := json.Marshal(credentials) - if err != nil { - return "", err - } - ciphertext, err := encrypt(payload, []byte{}) - if err != nil { - return "", err - } - return base64.StdEncoding.EncodeToString(ciphertext), nil -} - -// ParseClaimsFromToken receive token claims in string format, then unmarshal them to produce a *TokenClaims object -func ParseClaimsFromToken(claims string) (*TokenClaims, error) { - tokenClaims := &TokenClaims{} - if err := json.Unmarshal([]byte(claims), tokenClaims); err != nil { - return nil, err - } - return tokenClaims, nil -} - -// DecryptToken receives base64 encoded ciphertext, decode it, decrypt it (AES-GCM) and produces []byte -func DecryptToken(ciphertext string) (plaintext []byte, err error) { - decoded, err := base64.StdEncoding.DecodeString(ciphertext) - if err != nil { - return nil, err - } - plaintext, err = decrypt(decoded, []byte{}) - if err != nil { - return nil, err - } - return plaintext, nil -} - -const ( - aesGcm = 0x00 - c20p1305 = 0x01 -) - -// Encrypt a blob of data using AEAD scheme, AES-GCM if the executing CPU -// provides AES hardware support, otherwise will use ChaCha20-Poly1305 -// with a pbkdf2 derived key, this function should be used to encrypt a session -// or data key provided as plaintext. -// -// The returned ciphertext data consists of: -// -// AEAD ID | iv | nonce | encrypted data -// 1 16 12 ~ len(data) -func encrypt(plaintext, associatedData []byte) ([]byte, error) { - iv, err := sioutil.Random(16) // 16 bytes IV - if err != nil { - return nil, err - } - var algorithm byte - if sioutil.NativeAES() { - algorithm = aesGcm - } else { - algorithm = c20p1305 - } - var aead cipher.AEAD - switch algorithm { - case aesGcm: - mac := hmac.New(sha256.New, derivedKey()) - mac.Write(iv) - sealingKey := mac.Sum(nil) - - var block cipher.Block - block, err = aes.NewCipher(sealingKey) - if err != nil { - return nil, err - } - aead, err = cipher.NewGCM(block) - if err != nil { - return nil, err - } - case c20p1305: - var sealingKey []byte - sealingKey, err = chacha20.HChaCha20(derivedKey(), iv) // HChaCha20 expects nonce of 16 bytes - if err != nil { - return nil, err - } - aead, err = chacha20poly1305.New(sealingKey) - if err != nil { - return nil, err - } - } - nonce, err := sioutil.Random(aead.NonceSize()) - if err != nil { - return nil, err - } - - sealedBytes := aead.Seal(nil, nonce, plaintext, associatedData) - - // ciphertext = AEAD ID | iv | nonce | sealed bytes - - var buf bytes.Buffer - buf.WriteByte(algorithm) - buf.Write(iv) - buf.Write(nonce) - buf.Write(sealedBytes) - - return buf.Bytes(), nil -} - -// Decrypts a blob of data using AEAD scheme AES-GCM if the executing CPU -// provides AES hardware support, otherwise will use ChaCha20-Poly1305with -// and a pbkdf2 derived key -func decrypt(ciphertext, associatedData []byte) ([]byte, error) { - var ( - algorithm [1]byte - iv [16]byte - nonce [12]byte // This depends on the AEAD but both used ciphers have the same nonce length. - ) - - r := bytes.NewReader(ciphertext) - if _, err := io.ReadFull(r, algorithm[:]); err != nil { - return nil, err - } - if _, err := io.ReadFull(r, iv[:]); err != nil { - return nil, err - } - if _, err := io.ReadFull(r, nonce[:]); err != nil { - return nil, err - } - - var aead cipher.AEAD - switch algorithm[0] { - case aesGcm: - mac := hmac.New(sha256.New, derivedKey()) - mac.Write(iv[:]) - sealingKey := mac.Sum(nil) - block, err := aes.NewCipher(sealingKey) - if err != nil { - return nil, err - } - aead, err = cipher.NewGCM(block) - if err != nil { - return nil, err - } - case c20p1305: - sealingKey, err := chacha20.HChaCha20(derivedKey(), iv[:]) // HChaCha20 expects nonce of 16 bytes - if err != nil { - return nil, err - } - aead, err = chacha20poly1305.New(sealingKey) - if err != nil { - return nil, err - } - default: - return nil, fmt.Errorf("invalid algorithm: %v", algorithm) - } - - if len(nonce) != aead.NonceSize() { - return nil, fmt.Errorf("invalid nonce size %d, expected %d", len(nonce), aead.NonceSize()) - } - - sealedBytes, err := ioutil.ReadAll(r) - if err != nil { - return nil, err - } - - plaintext, err := aead.Open(nil, nonce[:], sealedBytes, associatedData) - if err != nil { - return nil, err - } - - return plaintext, nil -} - -// GetTokenFromRequest returns a token from a http Request -// either defined on a cookie `token` or on Authorization header. -// -// Authorization Header needs to be like "Authorization Bearer " -func GetTokenFromRequest(r *http.Request) (string, error) { - // Token might come either as a Cookie or as a Header - // if not set in cookie, check if it is set on Header. - tokenCookie, err := r.Cookie("token") - if err != nil { - return "", ErrNoAuthToken - } - currentTime := time.Now() - if tokenCookie.Expires.After(currentTime) { - return "", ErrTokenExpired - } - return strings.TrimSpace(tokenCookie.Value), nil -} diff --git a/pkg/auth/token/config.go b/pkg/auth/token/config.go index c441e8d8290..4ce20ea5c3a 100644 --- a/pkg/auth/token/config.go +++ b/pkg/auth/token/config.go @@ -17,21 +17,10 @@ package token import ( - "time" - "github.com/minio/operator/pkg/auth/utils" "github.com/minio/pkg/env" ) -// GetConsoleSTSDuration returns the default session duration for the STS requested tokens (defaults to 12h) -func GetConsoleSTSDuration() time.Duration { - duration, err := time.ParseDuration(env.Get(STSDuration, "12h")) - if err != nil { - duration = 12 * time.Hour - } - return duration -} - var defaultPBKDFPassphrase = utils.RandomCharString(64) // GetPBKDFPassphrase returns passphrase for the pbkdf2 function used to encrypt JWT payload diff --git a/pkg/auth/token/const.go b/pkg/auth/token/const.go index 5907594be6e..bb99be747f4 100644 --- a/pkg/auth/token/const.go +++ b/pkg/auth/token/const.go @@ -17,8 +17,6 @@ package token const ( - // STSDuration session duration - STSDuration = "OPERATOR_STS_DURATION" // time.Duration format, ie: 3600s, 2h45m, 1h, etc // PBKDFPassphrase passphrase for session encryption PBKDFPassphrase = "OPERATOR_PBKDF_PASSPHRASE" // PBKDFSalt salt for hashes diff --git a/pkg/auth/token_test.go b/pkg/auth/token_test.go deleted file mode 100644 index 1d23a32031b..00000000000 --- a/pkg/auth/token_test.go +++ /dev/null @@ -1,82 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package auth - -import ( - "testing" - - "github.com/minio/minio-go/v7/pkg/credentials" - "github.com/stretchr/testify/assert" -) - -var creds = &credentials.Value{ - AccessKeyID: "fakeAccessKeyID", - SecretAccessKey: "fakeSecretAccessKey", - SessionToken: "fakeSessionToken", - SignerType: 0, -} - -var ( - goodToken = "" - badToken = "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjoiRDMwYWE0ekQ1bWtFaFRyWm5yOWM3NWh0Yko0MkROOWNDZVQ5RHVHUkg1U25SR3RyTXZNOXBMdnlFSVJAAAE5eWxxekhYMXllck8xUXpzMlZzRVFKeUF2ZmpOaDkrTVdoUURWZ2FhK2R5emxzSjNpK0k1dUdoeW5DNWswUW83WEY0UWszY0RtUTdUQUVROVFEbWRKdjBkdVB5L25hQk5vM3dIdlRDZHFNRDJZN3kycktJbmVUbUlFNmVveW9EWmprcW5tckVoYmMrTlhTRU81WjZqa1kwZ1E2eXZLaWhUZGxBRS9zS1lBNlc4Q1R1cm1MU0E0b0dIcGtldFZWU0VXMHEzNU9TU1VaczRXNkxHdGMxSTFWVFZLWUo3ZTlHR2REQ3hMWGtiZHQwcjl0RDNMWUhWRndra0dSZit5ZHBzS1Y3L1Jtbkp3SHNqNVVGV0w5WGVHUkZVUjJQclJTN2plVzFXeGZuYitVeXoxNVpOMzZsZ01GNnBlWFd1LzJGcEtrb2Z2QzNpY2x5Rmp0SE45ZkxYTVpVSFhnV2lsQWVSa3oiLCJhdWQiOiJodHRwOi8vbG9jYWxob3N0OjkwMDAiLCJleHAiOjE1ODc1MTY1NzEsInN1YiI6ImZmYmY4YzljLTJlMjYtNGMwYS1iMmI0LTYyMmVhM2I1YjZhYiJ9.P392RUwzsrBeJOO3fS1xMZcF-lWiDvWZ5hM7LZOyFMmoG5QLccDU5eAPSm8obzPoznX1b7eCFLeEmKK-vKgjiQ" -) - -func TestNewJWTWithClaimsForClient(t *testing.T) { - funcAssert := assert.New(t) - // Test-1 : NewEncryptedTokenForClient() is generated correctly without errors - function := "NewEncryptedTokenForClient()" - token, err := NewEncryptedTokenForClient(creds, "", nil) - if err != nil || token == "" { - t.Errorf("Failed on %s:, error occurred: %s", function, err) - } - // saving token for future tests - goodToken = token - // Test-2 : NewEncryptedTokenForClient() throws error because of empty credentials - if _, err = NewEncryptedTokenForClient(nil, "", nil); err != nil { - funcAssert.Equal("provided credentials are empty", err.Error()) - } -} - -func TestJWTAuthenticate(t *testing.T) { - funcAssert := assert.New(t) - // Test-1 : SessionTokenAuthenticate() should correctly return the claims - function := "SessionTokenAuthenticate()" - claims, err := SessionTokenAuthenticate(goodToken) - if err != nil || claims == nil { - t.Errorf("Failed on %s:, error occurred: %s", function, err) - } else { - funcAssert.Equal(claims.STSAccessKeyID, creds.AccessKeyID) - funcAssert.Equal(claims.STSSecretAccessKey, creds.SecretAccessKey) - funcAssert.Equal(claims.STSSessionToken, creds.SessionToken) - } - // Test-2 : SessionTokenAuthenticate() return an error because of a tampered token - if _, err := SessionTokenAuthenticate(badToken); err != nil { - funcAssert.Equal("session token internal data is malformed", err.Error()) - } - // Test-3 : SessionTokenAuthenticate() return an error because of an empty token - if _, err := SessionTokenAuthenticate(""); err != nil { - funcAssert.Equal("session token missing", err.Error()) - } -} - -func TestSessionTokenValid(t *testing.T) { - funcAssert := assert.New(t) - // Test-1 : SessionTokenAuthenticate() provided token is valid - funcAssert.Equal(true, IsSessionTokenValid(goodToken)) - // Test-2 : SessionTokenAuthenticate() provided token is invalid - funcAssert.Equal(false, IsSessionTokenValid(badToken)) -} diff --git a/pkg/certs/certs.go b/pkg/certs/certs.go index a4c27be8420..64d88e3ec2f 100644 --- a/pkg/certs/certs.go +++ b/pkg/certs/certs.go @@ -16,25 +16,6 @@ package certs -import ( - "bytes" - "context" - "crypto/tls" - "crypto/x509" - "encoding/pem" - "errors" - "fmt" - "io/ioutil" - "os" - "path/filepath" - "strings" - - "github.com/minio/cli" - xcerts "github.com/minio/pkg/certs" - "github.com/minio/pkg/env" - "github.com/mitchellh/go-homedir" -) - // ConfigDir - points to a user set directory. type ConfigDir struct { Path string @@ -44,294 +25,3 @@ type ConfigDir struct { func (dir *ConfigDir) Get() string { return dir.Path } - -func getDefaultConfigDir() string { - homeDir, err := homedir.Dir() - if err != nil { - return "" - } - return filepath.Join(homeDir, DefaultConsoleConfigDir) -} - -func getDefaultCertsDir() string { - return filepath.Join(getDefaultConfigDir(), CertsDir) -} - -func getDefaultCertsCADir() string { - return filepath.Join(getDefaultCertsDir(), CertsCADir) -} - -// isFile - returns whether given Path is a file or not. -func isFile(path string) bool { - if fi, err := os.Stat(path); err == nil { - return fi.Mode().IsRegular() - } - - return false -} - -var ( - // DefaultCertsDir certs directory. - DefaultCertsDir = &ConfigDir{Path: getDefaultCertsDir()} - // DefaultCertsCADir CA directory. - DefaultCertsCADir = &ConfigDir{Path: getDefaultCertsCADir()} - // GlobalCertsDir points to current certs directory set by user with --certs-dir - GlobalCertsDir = DefaultCertsDir - // GlobalCertsCADir points to relative Path to certs directory and is /CAs - GlobalCertsCADir = DefaultCertsCADir -) - -// ParsePublicCertFile - parses public cert into its *x509.Certificate equivalent. -func ParsePublicCertFile(certFile string) (x509Certs []*x509.Certificate, err error) { - // Read certificate file. - var data []byte - if data, err = ioutil.ReadFile(certFile); err != nil { - return nil, err - } - - // Trimming leading and tailing white spaces. - data = bytes.TrimSpace(data) - - // Parse all certs in the chain. - current := data - for len(current) > 0 { - var pemBlock *pem.Block - if pemBlock, current = pem.Decode(current); pemBlock == nil { - return nil, fmt.Errorf("could not read PEM block from file %s", certFile) - } - - var x509Cert *x509.Certificate - if x509Cert, err = x509.ParseCertificate(pemBlock.Bytes); err != nil { - return nil, err - } - - x509Certs = append(x509Certs, x509Cert) - } - - if len(x509Certs) == 0 { - return nil, fmt.Errorf("empty public certificate file %s", certFile) - } - - return x509Certs, nil -} - -// MkdirAllIgnorePerm attempts to create all directories, ignores any permission denied errors. -func MkdirAllIgnorePerm(path string) error { - err := os.MkdirAll(path, 0o700) - if err != nil { - // It is possible in kubernetes like deployments this directory - // is already mounted and is not writable, ignore any write errors. - if os.IsPermission(err) { - err = nil - } - } - return err -} - -// NewConfigDirFromCtx configuration for dir of certs -func NewConfigDirFromCtx(ctx *cli.Context, option string, getDefaultDir func() string) (*ConfigDir, bool, error) { - var dir string - var dirSet bool - - switch { - case ctx.IsSet(option): - dir = ctx.String(option) - dirSet = true - case ctx.GlobalIsSet(option): - dir = ctx.GlobalString(option) - dirSet = true - // cli package does not expose parent's option option. Below code is workaround. - if dir == "" || dir == getDefaultDir() { - dirSet = false // Unset to false since GlobalIsSet() true is a false positive. - if ctx.Parent().GlobalIsSet(option) { - dir = ctx.Parent().GlobalString(option) - dirSet = true - } - } - default: - // Neither local nor global option is provided. In this case, try to use - // default directory. - dir = getDefaultDir() - if dir == "" { - return nil, false, fmt.Errorf("invalid arguments specified, %s option must be provided", option) - } - } - - if dir == "" { - return nil, false, fmt.Errorf("empty directory, %s directory cannot be empty", option) - } - - // Disallow relative paths, figure out absolute paths. - dirAbs, err := filepath.Abs(dir) - if err != nil { - return nil, false, fmt.Errorf("%w: Unable to fetch absolute path for %s=%s", err, option, dir) - } - if err = MkdirAllIgnorePerm(dirAbs); err != nil { - return nil, false, fmt.Errorf("%w: Unable to create directory specified %s=%s", err, option, dir) - } - return &ConfigDir{Path: dirAbs}, dirSet, nil -} - -func getPublicCertFile() string { - publicCertFile := filepath.Join(GlobalCertsDir.Get(), PublicCertFile) - TLSCertFile := filepath.Join(GlobalCertsDir.Get(), TLSCertFile) - if isFile(publicCertFile) { - return publicCertFile - } - return TLSCertFile -} - -func getPrivateKeyFile() string { - privateKeyFile := filepath.Join(GlobalCertsDir.Get(), PrivateKeyFile) - TLSPrivateKey := filepath.Join(GlobalCertsDir.Get(), TLSKeyFile) - if isFile(privateKeyFile) { - return privateKeyFile - } - return TLSPrivateKey -} - -// EnvCertPassword is the environment variable which contains the password used -// to decrypt the TLS private key. It must be set if the TLS private key is -// password protected. -const EnvCertPassword = "CONSOLE_CERT_PASSWD" - -// LoadX509KeyPair - load an X509 key pair (private key , certificate) -// from the provided paths. The private key may be encrypted and is -// decrypted using the ENV_VAR: MINIO_CERT_PASSWD. -func LoadX509KeyPair(certFile, keyFile string) (tls.Certificate, error) { - certPEMBlock, err := ioutil.ReadFile(certFile) - if err != nil { - return tls.Certificate{}, err - } - keyPEMBlock, err := ioutil.ReadFile(keyFile) - if err != nil { - return tls.Certificate{}, err - } - key, rest := pem.Decode(keyPEMBlock) - if len(rest) > 0 { - return tls.Certificate{}, errors.New("the private key contains additional data") - } - if x509.IsEncryptedPEMBlock(key) { - password := env.Get(EnvCertPassword, "") - if len(password) == 0 { - return tls.Certificate{}, errors.New("no password") - } - decryptedKey, decErr := x509.DecryptPEMBlock(key, []byte(password)) - if decErr != nil { - return tls.Certificate{}, decErr - } - keyPEMBlock = pem.EncodeToMemory(&pem.Block{Type: key.Type, Bytes: decryptedKey}) - } - return tls.X509KeyPair(certPEMBlock, keyPEMBlock) -} - -// GetTLSConfig returns the TLS config for the server -func GetTLSConfig() (x509Certs []*x509.Certificate, manager *xcerts.Manager, err error) { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - if !(isFile(getPublicCertFile()) && isFile(getPrivateKeyFile())) { - return nil, nil, nil - } - - if x509Certs, err = ParsePublicCertFile(getPublicCertFile()); err != nil { - return nil, nil, err - } - - manager, err = xcerts.NewManager(ctx, getPublicCertFile(), getPrivateKeyFile(), LoadX509KeyPair) - if err != nil { - return nil, nil, err - } - - // Console has support for multiple certificates. It expects the following structure: - // certs/ - // │ - // ├─ public.crt - // ├─ private.key - // │ - // ├─ example.com/ - // │ │ - // │ ├─ public.crt - // │ └─ private.key - // └─ foobar.org/ - // │ - // ├─ public.crt - // └─ private.key - // ... - // - // Therefore, we read all filenames in the cert directory and check - // for each directory whether it contains a public.crt and private.key. - // If so, we try to add it to certificate manager. - root, err := os.Open(GlobalCertsDir.Get()) - if err != nil { - return nil, nil, err - } - defer root.Close() - - files, err := root.Readdir(-1) - if err != nil { - return nil, nil, err - } - for _, file := range files { - // Ignore all - // - regular files - // - "CAs" directory - // - any directory which starts with ".." - if file.Mode().IsRegular() || file.Name() == "CAs" || strings.HasPrefix(file.Name(), "..") { - continue - } - if file.Mode()&os.ModeSymlink == os.ModeSymlink { - file, err = os.Stat(filepath.Join(root.Name(), file.Name())) - if err != nil { - // not accessible ignore - continue - } - if !file.IsDir() { - continue - } - } - - var ( - certFile = filepath.Join(root.Name(), file.Name(), PublicCertFile) - keyFile = filepath.Join(root.Name(), file.Name(), PrivateKeyFile) - ) - if !isFile(certFile) || !isFile(keyFile) { - continue - } - if err = manager.AddCertificate(certFile, keyFile); err != nil { - return nil, nil, fmt.Errorf("unable to load TLS certificate '%s,%s': %w", certFile, keyFile, err) - } - } - return x509Certs, manager, nil -} - -// GetAllCertificatesAndCAs returns all certs and cas -func GetAllCertificatesAndCAs() (*x509.CertPool, []*x509.Certificate, *xcerts.Manager, error) { - // load all CAs from ~/.console/certs/CAs - rootCAs, err := xcerts.GetRootCAs(GlobalCertsCADir.Get()) - if err != nil { - return nil, nil, nil, err - } - // load all certs from ~/.console/certs - publicCerts, certsManager, err := GetTLSConfig() - if err != nil { - return nil, nil, nil, err - } - if rootCAs == nil { - rootCAs = &x509.CertPool{} - } - // Add the public crts as part of root CAs to trust self. - for _, publicCrt := range publicCerts { - rootCAs.AddCert(publicCrt) - } - return rootCAs, publicCerts, certsManager, nil -} - -// EnsureCertAndKey checks if both client certificate and key paths are provided -func EnsureCertAndKey(clientCert, clientKey string) error { - if (clientCert != "" && clientKey == "") || - (clientCert == "" && clientKey != "") { - return errors.New("cert and key must be specified as a pair") - } - return nil -} diff --git a/pkg/certs/const.go b/pkg/certs/const.go index 8ee995ad464..50872925934 100644 --- a/pkg/certs/const.go +++ b/pkg/certs/const.go @@ -17,11 +17,6 @@ package certs const ( - // DefaultConsoleConfigDir minio configuration directory where below configuration files/directories are stored. - DefaultConsoleConfigDir = ".console" - - // CertsDir Directory contains below files/directories for HTTPS configuration. - CertsDir = "certs" // CertsCADir Directory contains all CA certificates other than system defaults for HTTPS. CertsCADir = "CAs" diff --git a/pkg/controller/job-controller.go b/pkg/controller/job-controller.go index d0bb57e9f39..a2fd63364cf 100644 --- a/pkg/controller/job-controller.go +++ b/pkg/controller/job-controller.go @@ -93,7 +93,7 @@ func NewJobController( minioJobInformer jobinformers.MinIOJobInformer, jobInformer batchv1.JobInformer, namespacesToWatch set.StringSet, - kubeClientSet kubernetes.Interface, + _ kubernetes.Interface, recorder record.EventRecorder, workqueue workqueue.RateLimitingInterface, k8sClient client.Client, @@ -124,7 +124,7 @@ func NewJobController( }) jobInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{ - UpdateFunc: func(old, new interface{}) { + UpdateFunc: func(_, new interface{}) { newJob := new.(*batchjobv1.Job) jobName, ok := newJob.Labels[miniojob.MinioJobName] if !ok { diff --git a/pkg/controller/operator.go b/pkg/controller/operator.go index eaaa0e0278d..9b3746956a1 100644 --- a/pkg/controller/operator.go +++ b/pkg/controller/operator.go @@ -55,8 +55,6 @@ const ( OperatorDeploymentNameEnv = "MINIO_OPERATOR_DEPLOYMENT_NAME" // OperatorCATLSSecretName is the name of the secret for the operator CA OperatorCATLSSecretName = "operator-ca-tls" - // OperatorCATLSSecretPrefix is the name of the multi tenant secret for the operator CA - OperatorCATLSSecretPrefix = OperatorCATLSSecretName + "-" // OperatorCSRSignerCASecretName is the name of the secret for the signer-ca certificate // this is a copy of the secret signer-ca in namespace OperatorCSRSignerCASecretName = "openshift-csr-signer-ca" @@ -66,10 +64,6 @@ const ( OpenshiftCATLSSecretName = "csr-signer" // DefaultDeploymentName is the default name of the operator deployment DefaultDeploymentName = "minio-operator" - // DefaultOperatorImage is the version fo the operator being used - DefaultOperatorImage = "minio/operator:v5.0.15" - // DefaultOperatorImageEnv is the default image to minio instance - DefaultOperatorImageEnv = "MINIO_OPERATOR_IMAGE" ) var serverCertsManager *xcerts.Manager diff --git a/pkg/http/headers.go b/pkg/http/headers.go deleted file mode 100644 index 39584253a19..00000000000 --- a/pkg/http/headers.go +++ /dev/null @@ -1,23 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2022 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package http - -// Standard S3 HTTP response constants -const ( - ETag = "ETag" - ContentType = "Content-Type" -) diff --git a/pkg/http/http.go b/pkg/http/http.go deleted file mode 100644 index fb00a4797cf..00000000000 --- a/pkg/http/http.go +++ /dev/null @@ -1,74 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2022 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package http - -import ( - "io" - "io/ioutil" - "net/http" -) - -// ClientI interface with all functions to be implemented -// by mock when testing, it should include all HttpClient respective api calls -// that are used within this project. -type ClientI interface { - Get(url string) (resp *http.Response, err error) - Post(url, contentType string, body io.Reader) (resp *http.Response, err error) - Do(req *http.Request) (*http.Response, error) -} - -// Client is an HTTP Interface implementation -// -// Define the structure of a http client and define the functions that are actually used -type Client struct { - Client *http.Client -} - -// Get implements http.Client.Get() -func (c *Client) Get(url string) (resp *http.Response, err error) { - return c.Client.Get(url) -} - -// Post implements http.Client.Post() -func (c *Client) Post(url, contentType string, body io.Reader) (resp *http.Response, err error) { - return c.Client.Post(url, contentType, body) -} - -// Do implement http.Client.Do() -func (c *Client) Do(req *http.Request) (*http.Response, error) { - return c.Client.Do(req) -} - -// DrainBody close non nil response with any response Body. -// convenient wrapper to drain any remaining data on response body. -// -// Subsequently this allows golang http RoundTripper -// to re-use the same connection for future requests. -func DrainBody(respBody io.ReadCloser) { - // Callers should close resp.Body when done reading from it. - // If resp.Body is not closed, the Client's underlying RoundTripper - // (typically Transport) may not be able to re-use a persistent TCP - // connection to the server for a subsequent "keep-alive" request. - if respBody != nil { - // Drain any remaining Body and then close the connection. - // Without this closing connection would disallow re-using - // the same connection for future uses. - // - http://stackoverflow.com/a/17961593/4465767 - defer respBody.Close() - io.Copy(ioutil.Discard, respBody) - } -} diff --git a/pkg/kes/kes.go b/pkg/kes/kes.go index 2757ee98f72..c3ae0ce7507 100644 --- a/pkg/kes/kes.go +++ b/pkg/kes/kes.go @@ -17,9 +17,6 @@ package kes import ( - "crypto/x509" - "encoding/pem" - "errors" "time" "gopkg.in/yaml.v2" @@ -247,22 +244,6 @@ type ServerConfigV2 struct { Keystore Keys `yaml:"keystore,omitempty" json:"keystore,omitempty"` } -// ParseCertificate parses a certificate -func ParseCertificate(cert []byte) (*x509.Certificate, error) { - for { - var certDERBlock *pem.Block - certDERBlock, cert = pem.Decode(cert) - if certDERBlock == nil { - break - } - - if certDERBlock.Type == "CERTIFICATE" { - return x509.ParseCertificate(certDERBlock.Bytes) - } - } - return nil, errors.New("found no (non-CA) certificate in any PEM block") -} - // Marshal ServerConfigV1 func (c ServerConfigV1) Marshal() ([]byte, error) { return yaml.Marshal(c) diff --git a/pkg/logger/audit.go b/pkg/logger/audit.go deleted file mode 100644 index b07def3d6f0..00000000000 --- a/pkg/logger/audit.go +++ /dev/null @@ -1,228 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2022 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package logger - -import ( - "bytes" - "context" - "fmt" - "io" - "net/http" - "strconv" - "sync/atomic" - "time" - - "github.com/minio/operator/pkg/utils" - - "github.com/minio/operator/pkg/logger/message/audit" -) - -// ResponseWriter - is a wrapper to trap the http response status code. -type ResponseWriter struct { - http.ResponseWriter - StatusCode int - // Log body of 4xx or 5xx responses - LogErrBody bool - // Log body of all responses - LogAllBody bool - - TimeToFirstByte time.Duration - StartTime time.Time - // number of bytes written - bytesWritten int - // Internal recording buffer - headers bytes.Buffer - body bytes.Buffer - // Indicate if headers are written in the log - headersLogged bool -} - -// NewResponseWriter - returns a wrapped response writer to trap -// http status codes for auditing purposes. -func NewResponseWriter(w http.ResponseWriter) *ResponseWriter { - return &ResponseWriter{ - ResponseWriter: w, - StatusCode: http.StatusOK, - StartTime: time.Now().UTC(), - } -} - -func (lrw *ResponseWriter) Write(p []byte) (int, error) { - if !lrw.headersLogged { - // We assume the response code to be '200 OK' when WriteHeader() is not called, - // that way following Golang HTTP response behavior. - lrw.WriteHeader(http.StatusOK) - } - n, err := lrw.ResponseWriter.Write(p) - lrw.bytesWritten += n - if lrw.TimeToFirstByte == 0 { - lrw.TimeToFirstByte = time.Now().UTC().Sub(lrw.StartTime) - } - if (lrw.LogErrBody && lrw.StatusCode >= http.StatusBadRequest) || lrw.LogAllBody { - // Always logging error responses. - lrw.body.Write(p) - } - if err != nil { - return n, err - } - return n, err -} - -// Write the headers into the given buffer -func (lrw *ResponseWriter) writeHeaders(w io.Writer, statusCode int, headers http.Header) { - n, _ := fmt.Fprintf(w, "%d %s\n", statusCode, http.StatusText(statusCode)) - lrw.bytesWritten += n - for k, v := range headers { - n, _ := fmt.Fprintf(w, "%s: %s\n", k, v[0]) - lrw.bytesWritten += n - } -} - -// BodyPlaceHolder returns a dummy body placeholder -var BodyPlaceHolder = []byte("") - -// Body - Return response body. -func (lrw *ResponseWriter) Body() []byte { - // If there was an error response or body logging is enabled - // then we return the body contents - if (lrw.LogErrBody && lrw.StatusCode >= http.StatusBadRequest) || lrw.LogAllBody { - return lrw.body.Bytes() - } - // ... otherwise we return the place holder - return BodyPlaceHolder -} - -// WriteHeader - writes http status code -func (lrw *ResponseWriter) WriteHeader(code int) { - if !lrw.headersLogged { - lrw.StatusCode = code - lrw.writeHeaders(&lrw.headers, code, lrw.ResponseWriter.Header()) - lrw.headersLogged = true - lrw.ResponseWriter.WriteHeader(code) - } -} - -// Flush - Calls the underlying Flush. -func (lrw *ResponseWriter) Flush() { - lrw.ResponseWriter.(http.Flusher).Flush() -} - -// Size - reutrns the number of bytes written -func (lrw *ResponseWriter) Size() int { - return lrw.bytesWritten -} - -// SetAuditEntry sets Audit info in the context. -func SetAuditEntry(ctx context.Context, audit *audit.Entry) context.Context { - if ctx == nil { - LogIf(context.Background(), fmt.Errorf("context is nil")) - return nil - } - return context.WithValue(ctx, utils.ContextAuditKey, audit) -} - -// GetAuditEntry returns Audit entry if set. -func GetAuditEntry(ctx context.Context) *audit.Entry { - if ctx != nil { - r, ok := ctx.Value(utils.ContextAuditKey).(*audit.Entry) - if ok { - return r - } - r = &audit.Entry{ - Version: audit.Version, - // DeploymentID: globalDeploymentID, - Time: time.Now().UTC(), - } - SetAuditEntry(ctx, r) - return r - } - return nil -} - -// AuditLog - logs audit logs to all audit targets. -func AuditLog(ctx context.Context, w *ResponseWriter, r *http.Request, reqClaims map[string]interface{}, filterKeys ...string) { - // Fast exit if there is not audit target configured - if atomic.LoadInt32(&nAuditTargets) == 0 { - return - } - - var entry audit.Entry - - if w != nil && r != nil { - reqInfo := GetReqInfo(ctx) - if reqInfo == nil { - return - } - entry = audit.ToEntry(w, r, reqClaims, GetGlobalDeploymentID()) - // indicates all requests for this API call are inbound - entry.Trigger = "incoming" - - for _, filterKey := range filterKeys { - delete(entry.ReqClaims, filterKey) - delete(entry.ReqQuery, filterKey) - delete(entry.ReqHeader, filterKey) - delete(entry.RespHeader, filterKey) - } - - var ( - statusCode int - timeToResponse time.Duration - timeToFirstByte time.Duration - outputBytes int64 = -1 // -1: unknown output bytes - ) - - if w != nil { - statusCode = w.StatusCode - timeToResponse = time.Now().UTC().Sub(w.StartTime) - timeToFirstByte = w.TimeToFirstByte - outputBytes = int64(w.Size()) - } - - entry.API.Path = r.URL.Path - - entry.API.Status = http.StatusText(statusCode) - entry.API.StatusCode = statusCode - entry.API.Method = r.Method - entry.API.InputBytes = r.ContentLength - entry.API.OutputBytes = outputBytes - entry.RequestID = reqInfo.RequestID - - entry.API.TimeToResponse = strconv.FormatInt(timeToResponse.Nanoseconds(), 10) + "ns" - entry.Tags = reqInfo.GetTagsMap() - // ttfb will be recorded only for GET requests, Ignore such cases where ttfb will be empty. - if timeToFirstByte != 0 { - entry.API.TimeToFirstByte = strconv.FormatInt(timeToFirstByte.Nanoseconds(), 10) + "ns" - } - } else { - auditEntry := GetAuditEntry(ctx) - if auditEntry != nil { - entry = *auditEntry - } - } - - if anonFlag { - entry.SessionID = hashString(entry.SessionID) - entry.RemoteHost = hashString(entry.RemoteHost) - } - - // Send audit logs only to http targets. - for _, t := range AuditTargets() { - if err := t.Send(entry, string(All)); err != nil { - LogAlwaysIf(context.Background(), fmt.Errorf("event(%v) was not sent to Audit target (%v): %v", entry, t, err), All) - } - } -} diff --git a/pkg/logger/color/color.go b/pkg/logger/color/color.go deleted file mode 100644 index 8c7edd135d0..00000000000 --- a/pkg/logger/color/color.go +++ /dev/null @@ -1,60 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2022 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package color - -import ( - "fmt" - - "github.com/fatih/color" -) - -// global colors. -var ( - // Check if we stderr, stdout are dumb terminals, we do not apply - // ansi coloring on dumb terminals. - IsTerminal = func() bool { - return !color.NoColor - } - - Bold = func() func(a ...interface{}) string { - if IsTerminal() { - return color.New(color.Bold).SprintFunc() - } - return fmt.Sprint - }() - - FgRed = func() func(a ...interface{}) string { - if IsTerminal() { - return color.New(color.FgRed).SprintFunc() - } - return fmt.Sprint - }() - - BgRed = func() func(format string, a ...interface{}) string { - if IsTerminal() { - return color.New(color.BgRed).SprintfFunc() - } - return fmt.Sprintf - }() - - FgWhite = func() func(format string, a ...interface{}) string { - if IsTerminal() { - return color.New(color.FgWhite).SprintfFunc() - } - return fmt.Sprintf - }() -) diff --git a/pkg/logger/config.go b/pkg/logger/config.go deleted file mode 100644 index de6e9f7eabf..00000000000 --- a/pkg/logger/config.go +++ /dev/null @@ -1,213 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2022 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package logger - -import ( - "errors" - "strconv" - "strings" - - "github.com/google/uuid" - - "github.com/minio/operator/pkg/logger/config" - "github.com/minio/operator/pkg/logger/target/http" - "github.com/minio/pkg/env" -) - -// NewConfig - initialize new logger config. -func NewConfig() Config { - cfg := Config{ - HTTP: make(map[string]http.Config), - AuditWebhook: make(map[string]http.Config), - } - - return cfg -} - -func lookupLoggerWebhookConfig() (Config, error) { - cfg := NewConfig() - envs := env.List(EnvLoggerWebhookEndpoint) - var loggerTargets []string - for _, k := range envs { - target := strings.TrimPrefix(k, EnvLoggerWebhookEndpoint+config.Default) - if target == EnvLoggerWebhookEndpoint { - target = config.Default - } - loggerTargets = append(loggerTargets, target) - } - - // Load HTTP logger from the environment if found - for _, target := range loggerTargets { - if v, ok := cfg.HTTP[target]; ok && v.Enabled { - // This target is already enabled using the - // legacy environment variables, ignore. - continue - } - enableEnv := EnvLoggerWebhookEnable - if target != config.Default { - enableEnv = EnvLoggerWebhookEnable + config.Default + target - } - enable, err := config.ParseBool(env.Get(enableEnv, "")) - if err != nil || !enable { - continue - } - endpointEnv := EnvLoggerWebhookEndpoint - if target != config.Default { - endpointEnv = EnvLoggerWebhookEndpoint + config.Default + target - } - authTokenEnv := EnvLoggerWebhookAuthToken - if target != config.Default { - authTokenEnv = EnvLoggerWebhookAuthToken + config.Default + target - } - clientCertEnv := EnvLoggerWebhookClientCert - if target != config.Default { - clientCertEnv = EnvLoggerWebhookClientCert + config.Default + target - } - clientKeyEnv := EnvLoggerWebhookClientKey - if target != config.Default { - clientKeyEnv = EnvLoggerWebhookClientKey + config.Default + target - } - err = config.EnsureCertAndKey(env.Get(clientCertEnv, ""), env.Get(clientKeyEnv, "")) - if err != nil { - return cfg, err - } - queueSizeEnv := EnvLoggerWebhookQueueSize - if target != config.Default { - queueSizeEnv = EnvLoggerWebhookQueueSize + config.Default + target - } - queueSize, err := strconv.Atoi(env.Get(queueSizeEnv, "100000")) - if err != nil { - return cfg, err - } - if queueSize <= 0 { - return cfg, errors.New("invalid queue_size value") - } - cfg.HTTP[target] = http.Config{ - Enabled: true, - Endpoint: env.Get(endpointEnv, ""), - AuthToken: env.Get(authTokenEnv, ""), - ClientCert: env.Get(clientCertEnv, ""), - ClientKey: env.Get(clientKeyEnv, ""), - QueueSize: queueSize, - } - } - - return cfg, nil -} - -func lookupAuditWebhookConfig() (Config, error) { - cfg := NewConfig() - var loggerAuditTargets []string - envs := env.List(EnvAuditWebhookEndpoint) - for _, k := range envs { - target := strings.TrimPrefix(k, EnvAuditWebhookEndpoint+config.Default) - if target == EnvAuditWebhookEndpoint { - target = config.Default - } - loggerAuditTargets = append(loggerAuditTargets, target) - } - - for _, target := range loggerAuditTargets { - if v, ok := cfg.AuditWebhook[target]; ok && v.Enabled { - // This target is already enabled using the - // legacy environment variables, ignore. - continue - } - enableEnv := EnvAuditWebhookEnable - if target != config.Default { - enableEnv = EnvAuditWebhookEnable + config.Default + target - } - enable, err := config.ParseBool(env.Get(enableEnv, "")) - if err != nil || !enable { - continue - } - endpointEnv := EnvAuditWebhookEndpoint - if target != config.Default { - endpointEnv = EnvAuditWebhookEndpoint + config.Default + target - } - authTokenEnv := EnvAuditWebhookAuthToken - if target != config.Default { - authTokenEnv = EnvAuditWebhookAuthToken + config.Default + target - } - clientCertEnv := EnvAuditWebhookClientCert - if target != config.Default { - clientCertEnv = EnvAuditWebhookClientCert + config.Default + target - } - clientKeyEnv := EnvAuditWebhookClientKey - if target != config.Default { - clientKeyEnv = EnvAuditWebhookClientKey + config.Default + target - } - err = config.EnsureCertAndKey(env.Get(clientCertEnv, ""), env.Get(clientKeyEnv, "")) - if err != nil { - return cfg, err - } - queueSizeEnv := EnvAuditWebhookQueueSize - if target != config.Default { - queueSizeEnv = EnvAuditWebhookQueueSize + config.Default + target - } - queueSize, err := strconv.Atoi(env.Get(queueSizeEnv, "100000")) - if err != nil { - return cfg, err - } - if queueSize <= 0 { - return cfg, errors.New("invalid queue_size value") - } - cfg.AuditWebhook[target] = http.Config{ - Enabled: true, - Endpoint: env.Get(endpointEnv, ""), - AuthToken: env.Get(authTokenEnv, ""), - ClientCert: env.Get(clientCertEnv, ""), - ClientKey: env.Get(clientKeyEnv, ""), - QueueSize: queueSize, - } - } - - return cfg, nil -} - -// LookupConfigForSubSys - lookup logger config, override with ENVs if set, for the given sub-system -func LookupConfigForSubSys(subSys string) (cfg Config, err error) { - switch subSys { - case config.LoggerWebhookSubSys: - if cfg, err = lookupLoggerWebhookConfig(); err != nil { - return cfg, err - } - case config.AuditWebhookSubSys: - if cfg, err = lookupAuditWebhookConfig(); err != nil { - return cfg, err - } - } - return cfg, nil -} - -// GetGlobalDeploymentID : -func GetGlobalDeploymentID() string { - if globalDeploymentID != "" { - return globalDeploymentID - } - globalDeploymentID = env.Get(EnvGlobalDeploymentID, mustGetUUID()) - return globalDeploymentID -} - -// mustGetUUID - get a random UUID. -func mustGetUUID() string { - u, err := uuid.NewRandom() - if err != nil { - CriticalIf(GlobalContext, err) - } - return u.String() -} diff --git a/pkg/logger/config/bool-flag.go b/pkg/logger/config/bool-flag.go deleted file mode 100644 index 9b35989ad95..00000000000 --- a/pkg/logger/config/bool-flag.go +++ /dev/null @@ -1,80 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2022 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package config - -import ( - "encoding/json" - "fmt" - "strconv" - "strings" -) - -// BoolFlag - wrapper bool type. -type BoolFlag bool - -// String - returns string of BoolFlag. -func (bf BoolFlag) String() string { - if bf { - return "on" - } - - return "off" -} - -// MarshalJSON - converts BoolFlag into JSON data. -func (bf BoolFlag) MarshalJSON() ([]byte, error) { - return json.Marshal(bf.String()) -} - -// UnmarshalJSON - parses given data into BoolFlag. -func (bf *BoolFlag) UnmarshalJSON(data []byte) (err error) { - var s string - if err = json.Unmarshal(data, &s); err == nil { - b := BoolFlag(true) - if s == "" { - // Empty string is treated as valid. - *bf = b - } else if b, err = ParseBoolFlag(s); err == nil { - *bf = b - } - } - - return err -} - -// ParseBool returns the boolean value represented by the string. -func ParseBool(str string) (bool, error) { - switch str { - case "1", "t", "T", "true", "TRUE", "True", "on", "ON", "On": - return true, nil - case "0", "f", "F", "false", "FALSE", "False", "off", "OFF", "Off": - return false, nil - } - if strings.EqualFold(str, "enabled") { - return true, nil - } - if strings.EqualFold(str, "disabled") { - return false, nil - } - return false, fmt.Errorf("ParseBool: parsing '%s': %w", str, strconv.ErrSyntax) -} - -// ParseBoolFlag - parses string into BoolFlag. -func ParseBoolFlag(s string) (bf BoolFlag, err error) { - b, err := ParseBool(s) - return BoolFlag(b), err -} diff --git a/pkg/logger/config/bool-flag_test.go b/pkg/logger/config/bool-flag_test.go deleted file mode 100644 index 242a583610e..00000000000 --- a/pkg/logger/config/bool-flag_test.go +++ /dev/null @@ -1,126 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2022 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package config - -import "testing" - -// Test BoolFlag.String() -func TestBoolFlagString(t *testing.T) { - var bf BoolFlag - - testCases := []struct { - flag BoolFlag - expectedResult string - }{ - {bf, "off"}, - {BoolFlag(true), "on"}, - {BoolFlag(false), "off"}, - } - - for _, testCase := range testCases { - str := testCase.flag.String() - if testCase.expectedResult != str { - t.Fatalf("expected: %v, got: %v", testCase.expectedResult, str) - } - } -} - -// Test BoolFlag.MarshalJSON() -func TestBoolFlagMarshalJSON(t *testing.T) { - var bf BoolFlag - - testCases := []struct { - flag BoolFlag - expectedResult string - }{ - {bf, `"off"`}, - {BoolFlag(true), `"on"`}, - {BoolFlag(false), `"off"`}, - } - - for _, testCase := range testCases { - data, _ := testCase.flag.MarshalJSON() - if testCase.expectedResult != string(data) { - t.Fatalf("expected: %v, got: %v", testCase.expectedResult, string(data)) - } - } -} - -// Test BoolFlag.UnmarshalJSON() -func TestBoolFlagUnmarshalJSON(t *testing.T) { - testCases := []struct { - data []byte - expectedResult BoolFlag - expectedErr bool - }{ - {[]byte(`{}`), BoolFlag(false), true}, - {[]byte(`["on"]`), BoolFlag(false), true}, - {[]byte(`"junk"`), BoolFlag(false), true}, - {[]byte(`""`), BoolFlag(true), false}, - {[]byte(`"on"`), BoolFlag(true), false}, - {[]byte(`"off"`), BoolFlag(false), false}, - {[]byte(`"true"`), BoolFlag(true), false}, - {[]byte(`"false"`), BoolFlag(false), false}, - {[]byte(`"ON"`), BoolFlag(true), false}, - {[]byte(`"OFF"`), BoolFlag(false), false}, - } - - for _, testCase := range testCases { - var flag BoolFlag - err := (&flag).UnmarshalJSON(testCase.data) - if !testCase.expectedErr && err != nil { - t.Fatalf("error: expected = , got = %v", err) - } - if testCase.expectedErr && err == nil { - t.Fatalf("error: expected error, got = ") - } - if err == nil && testCase.expectedResult != flag { - t.Fatalf("result: expected: %v, got: %v", testCase.expectedResult, flag) - } - } -} - -// Test ParseBoolFlag() -func TestParseBoolFlag(t *testing.T) { - testCases := []struct { - flagStr string - expectedResult BoolFlag - expectedErr bool - }{ - {"", BoolFlag(false), true}, - {"junk", BoolFlag(false), true}, - {"true", BoolFlag(true), false}, - {"false", BoolFlag(false), false}, - {"ON", BoolFlag(true), false}, - {"OFF", BoolFlag(false), false}, - {"on", BoolFlag(true), false}, - {"off", BoolFlag(false), false}, - } - - for _, testCase := range testCases { - bf, err := ParseBoolFlag(testCase.flagStr) - if !testCase.expectedErr && err != nil { - t.Fatalf("error: expected = , got = %v", err) - } - if testCase.expectedErr && err == nil { - t.Fatalf("error: expected error, got = ") - } - if err == nil && testCase.expectedResult != bf { - t.Fatalf("result: expected: %v, got: %v", testCase.expectedResult, bf) - } - } -} diff --git a/pkg/logger/config/certs.go b/pkg/logger/config/certs.go deleted file mode 100644 index bbaf6f2e711..00000000000 --- a/pkg/logger/config/certs.go +++ /dev/null @@ -1,30 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2022 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package config - -import ( - "errors" -) - -// EnsureCertAndKey checks if both client certificate and key paths are provided -func EnsureCertAndKey(clientCert, clientKey string) error { - if (clientCert != "" && clientKey == "") || - (clientCert == "" && clientKey != "") { - return errors.New("cert and key must be specified as a pair") - } - return nil -} diff --git a/pkg/logger/config/config.go b/pkg/logger/config/config.go deleted file mode 100644 index 7b3149aef4d..00000000000 --- a/pkg/logger/config/config.go +++ /dev/null @@ -1,32 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2022 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package config - -import ( - "github.com/minio/madmin-go/v3" -) - -// Default keys -const ( - Default = madmin.Default -) - -// Top level config constants. -const ( - LoggerWebhookSubSys = "logger_webhook" - AuditWebhookSubSys = "audit_webhook" -) diff --git a/pkg/logger/console.go b/pkg/logger/console.go deleted file mode 100644 index 211ccc4f5b5..00000000000 --- a/pkg/logger/console.go +++ /dev/null @@ -1,220 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2022 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package logger - -import ( - "encoding/json" - "fmt" - "os" - "strings" - "time" - - "github.com/minio/operator/pkg/logger/color" - "github.com/minio/operator/pkg/logger/message/log" - c "github.com/minio/pkg/console" -) - -// Logger interface describes the methods that need to be implemented to satisfy the interface requirements. -type Logger interface { - json(msg string, args ...interface{}) - quiet(msg string, args ...interface{}) - pretty(msg string, args ...interface{}) -} - -func consoleLog(console Logger, msg string, args ...interface{}) { - switch { - case jsonFlag: - // Strip escape control characters from json message - msg = ansiRE.ReplaceAllLiteralString(msg, "") - console.json(msg, args...) - case quietFlag: - console.quiet(msg+"\n", args...) - default: - console.pretty(msg+"\n", args...) - } -} - -// Fatal prints only fatal errors message with no stack trace -// it will be called for input validation failures -func Fatal(err error, msg string, data ...interface{}) { - fatal(err, msg, data...) -} - -func fatal(err error, msg string, data ...interface{}) { - var errMsg string - if msg != "" { - errMsg = errorFmtFunc(fmt.Sprintf(msg, data...), err, jsonFlag) - } else { - errMsg = err.Error() - } - consoleLog(fatalMessage, errMsg) -} - -var fatalMessage fatalMsg - -type fatalMsg struct{} - -func (f fatalMsg) json(msg string, args ...interface{}) { - var message string - if msg != "" { - message = fmt.Sprintf(msg, args...) - } else { - message = fmt.Sprint(args...) - } - logJSON, err := json.Marshal(&log.Entry{ - Level: FatalLvl.String(), - Message: message, - Time: time.Now().UTC(), - Trace: &log.Trace{Message: message, Source: []string{getSource(6)}}, - }) - if err != nil { - panic(err) - } - fmt.Println(string(logJSON)) - - os.Exit(1) -} - -func (f fatalMsg) quiet(msg string, args ...interface{}) { - f.pretty(msg, args...) -} - -var ( - logTag = "ERROR" - logBanner = color.BgRed(color.FgWhite(color.Bold(logTag))) + " " - emptyBanner = color.BgRed(strings.Repeat(" ", len(logTag))) + " " - bannerWidth = len(logTag) + 1 -) - -func (f fatalMsg) pretty(msg string, args ...interface{}) { - // Build the passed errors message - errMsg := fmt.Sprintf(msg, args...) - - tagPrinted := false - - // Print the errors message: the following code takes care - // of splitting errors text and always pretty printing the - // red banner along with the errors message. Since the errors - // message itself contains some colored text, we needed - // to use some ANSI control escapes to cursor color state - // and freely move in the screen. - for _, line := range strings.Split(errMsg, "\n") { - if len(line) == 0 { - // No more text to print, just quit. - break - } - - for { - // Save the attributes of the current cursor helps - // us save the text color of the passed errors message - ansiSaveAttributes() - // Print banner with or without the log tag - if !tagPrinted { - c.Print(logBanner) - tagPrinted = true - } else { - c.Print(emptyBanner) - } - // Restore the text color of the errors message - ansiRestoreAttributes() - ansiMoveRight(bannerWidth) - // Continue errors message printing - c.Println(line) - break - } - } - - // Exit because this is a fatal errors message - os.Exit(1) -} - -type infoMsg struct{} - -var info infoMsg - -func (i infoMsg) json(msg string, args ...interface{}) { - var message string - if msg != "" { - message = fmt.Sprintf(msg, args...) - } else { - message = fmt.Sprint(args...) - } - logJSON, err := json.Marshal(&log.Entry{ - Level: InformationLvl.String(), - Message: message, - Time: time.Now().UTC(), - }) - if err != nil { - panic(err) - } - fmt.Println(string(logJSON)) -} - -func (i infoMsg) quiet(msg string, args ...interface{}) { -} - -func (i infoMsg) pretty(msg string, args ...interface{}) { - if msg == "" { - c.Println(args...) - } - c.Printf(msg, args...) -} - -type errorMsg struct{} - -var errorm errorMsg - -func (i errorMsg) json(msg string, args ...interface{}) { - var message string - if msg != "" { - message = fmt.Sprintf(msg, args...) - } else { - message = fmt.Sprint(args...) - } - logJSON, err := json.Marshal(&log.Entry{ - Level: ErrorLvl.String(), - Message: message, - Time: time.Now().UTC(), - Trace: &log.Trace{Message: message, Source: []string{getSource(6)}}, - }) - if err != nil { - panic(err) - } - fmt.Println(string(logJSON)) -} - -func (i errorMsg) quiet(msg string, args ...interface{}) { - i.pretty(msg, args...) -} - -func (i errorMsg) pretty(msg string, args ...interface{}) { - if msg == "" { - c.Println(args...) - } - c.Printf(msg, args...) - c.Printf("\n") -} - -// Error : -func Error(msg string, data ...interface{}) { - consoleLog(errorm, msg, data...) -} - -// Info : -func Info(msg string, data ...interface{}) { - consoleLog(info, msg, data...) -} diff --git a/pkg/logger/const.go b/pkg/logger/const.go deleted file mode 100644 index 8ec3d8104b1..00000000000 --- a/pkg/logger/const.go +++ /dev/null @@ -1,57 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2022 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package logger - -import ( - "context" - - "github.com/minio/operator/pkg/logger/target/http" -) - -// Audit/Logger constants -const ( - EnvLoggerJSONEnable = "CONSOLE_LOGGER_JSON_ENABLE" - EnvLoggerAnonymousEnable = "CONSOLE_LOGGER_ANONYMOUS_ENABLE" - EnvLoggerQuietEnable = "CONSOLE_LOGGER_QUIET_ENABLE" - - EnvGlobalDeploymentID = "CONSOLE_GLOBAL_DEPLOYMENT_ID" - EnvLoggerWebhookEnable = "CONSOLE_LOGGER_WEBHOOK_ENABLE" - EnvLoggerWebhookEndpoint = "CONSOLE_LOGGER_WEBHOOK_ENDPOINT" - EnvLoggerWebhookAuthToken = "CONSOLE_LOGGER_WEBHOOK_AUTH_TOKEN" - EnvLoggerWebhookClientCert = "CONSOLE_LOGGER_WEBHOOK_CLIENT_CERT" - EnvLoggerWebhookClientKey = "CONSOLE_LOGGER_WEBHOOK_CLIENT_KEY" - EnvLoggerWebhookQueueSize = "CONSOLE_LOGGER_WEBHOOK_QUEUE_SIZE" - - EnvAuditWebhookEnable = "CONSOLE_AUDIT_WEBHOOK_ENABLE" - EnvAuditWebhookEndpoint = "CONSOLE_AUDIT_WEBHOOK_ENDPOINT" - EnvAuditWebhookAuthToken = "CONSOLE_AUDIT_WEBHOOK_AUTH_TOKEN" - EnvAuditWebhookClientCert = "CONSOLE_AUDIT_WEBHOOK_CLIENT_CERT" - EnvAuditWebhookClientKey = "CONSOLE_AUDIT_WEBHOOK_CLIENT_KEY" - EnvAuditWebhookQueueSize = "CONSOLE_AUDIT_WEBHOOK_QUEUE_SIZE" -) - -// Config console and http logger targets -type Config struct { - HTTP map[string]http.Config `json:"http"` - AuditWebhook map[string]http.Config `json:"audit"` -} - -var ( - globalDeploymentID string - // GlobalContext context - GlobalContext context.Context -) diff --git a/pkg/logger/logger.go b/pkg/logger/logger.go deleted file mode 100644 index c6c7fb6ec4d..00000000000 --- a/pkg/logger/logger.go +++ /dev/null @@ -1,474 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2022 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package logger - -import ( - "context" - "crypto/tls" - "encoding/hex" - "errors" - "fmt" - "go/build" - "net/http" - "path/filepath" - "reflect" - "runtime" - "strings" - "syscall" - "time" - - "github.com/minio/pkg/env" - - "github.com/minio/operator/pkg" - "github.com/minio/pkg/certs" - - "github.com/minio/highwayhash" - "github.com/minio/minio-go/v7/pkg/set" - "github.com/minio/operator/pkg/logger/config" - "github.com/minio/operator/pkg/logger/message/log" -) - -// HighwayHash key for logging in anonymous mode -var magicHighwayHash256Key = []byte("\x4b\xe7\x34\xfa\x8e\x23\x8a\xcd\x26\x3e\x83\xe6\xbb\x96\x85\x52\x04\x0f\x93\x5d\xa3\x9f\x44\x14\x97\xe0\x9d\x13\x22\xde\x36\xa0") - -// Disable disables all logging, false by default. (used for "go test") -var Disable = false - -// Level type -type Level int8 - -// Enumerated level types -const ( - InformationLvl Level = iota + 1 - ErrorLvl - FatalLvl -) - -var trimStrings []string - -var matchingFuncNames = [...]string{ - "http.HandlerFunc.ServeHTTP", - "cmd.serverMain", - "cmd.StartGateway", - // add more here .. -} - -func (level Level) String() string { - var lvlStr string - switch level { - case InformationLvl: - lvlStr = "INFO" - case ErrorLvl: - lvlStr = "ERROR" - case FatalLvl: - lvlStr = "FATAL" - } - return lvlStr -} - -// quietFlag: Hide startup messages if enabled -// jsonFlag: Display in JSON format, if enabled -var ( - quietFlag, jsonFlag, anonFlag bool - // Custom function to format errors - errorFmtFunc func(string, error, bool) string -) - -// EnableQuiet - turns quiet option on. -func EnableQuiet() { - quietFlag = true -} - -// EnableJSON - outputs logs in json format. -func EnableJSON() { - jsonFlag = true - quietFlag = true -} - -// EnableAnonymous - turns anonymous flag -// to avoid printing sensitive information. -func EnableAnonymous() { - anonFlag = true -} - -// IsAnonymous - returns true if anonFlag is true -func IsAnonymous() bool { - return anonFlag -} - -// IsJSON - returns true if jsonFlag is true -func IsJSON() bool { - return jsonFlag -} - -// IsQuiet - returns true if quietFlag is true -func IsQuiet() bool { - return quietFlag -} - -// RegisterError registers the specified rendering function. This latter -// will be called for a pretty rendering of fatal errors. -func RegisterError(f func(string, error, bool) string) { - errorFmtFunc = f -} - -// Remove any duplicates and return unique entries. -func uniqueEntries(paths []string) []string { - m := make(set.StringSet) - for _, p := range paths { - if !m.Contains(p) { - m.Add(p) - } - } - return m.ToSlice() -} - -// Init sets the trimStrings to possible GOPATHs -// and GOROOT directories. Also append github.com/minio/minio -// This is done to clean up the filename, when stack trace is -// displayed when an errors happens. -func Init(goPath, goRoot string) { - var goPathList []string - var goRootList []string - var defaultgoPathList []string - var defaultgoRootList []string - pathSeperator := ":" - // Add all possible GOPATH paths into trimStrings - // Split GOPATH depending on the OS type - if runtime.GOOS == "windows" { - pathSeperator = ";" - } - - goPathList = strings.Split(goPath, pathSeperator) - goRootList = strings.Split(goRoot, pathSeperator) - defaultgoPathList = strings.Split(build.Default.GOPATH, pathSeperator) - defaultgoRootList = strings.Split(build.Default.GOROOT, pathSeperator) - - // Add trim string "{GOROOT}/src/" into trimStrings - trimStrings = []string{filepath.Join(runtime.GOROOT(), "src") + string(filepath.Separator)} - - // Add all possible path from GOPATH=path1:path2...:pathN - // as "{path#}/src/" into trimStrings - for _, goPathString := range goPathList { - trimStrings = append(trimStrings, filepath.Join(goPathString, "src")+string(filepath.Separator)) - } - - for _, goRootString := range goRootList { - trimStrings = append(trimStrings, filepath.Join(goRootString, "src")+string(filepath.Separator)) - } - - for _, defaultgoPathString := range defaultgoPathList { - trimStrings = append(trimStrings, filepath.Join(defaultgoPathString, "src")+string(filepath.Separator)) - } - - for _, defaultgoRootString := range defaultgoRootList { - trimStrings = append(trimStrings, filepath.Join(defaultgoRootString, "src")+string(filepath.Separator)) - } - - // Remove duplicate entries. - trimStrings = uniqueEntries(trimStrings) - - // Add "github.com/minio/minio" as the last to cover - // paths like "{GOROOT}/src/github.com/minio/minio" - // and "{GOPATH}/src/github.com/minio/minio" - trimStrings = append(trimStrings, filepath.Join("github.com", "minio", "minio")+string(filepath.Separator)) -} - -func trimTrace(f string) string { - for _, trimString := range trimStrings { - f = strings.TrimPrefix(filepath.ToSlash(f), filepath.ToSlash(trimString)) - } - return filepath.FromSlash(f) -} - -func getSource(level int) string { - pc, file, lineNumber, ok := runtime.Caller(level) - if ok { - // Clean up the common prefixes - file = trimTrace(file) - _, funcName := filepath.Split(runtime.FuncForPC(pc).Name()) - return fmt.Sprintf("%v:%v:%v()", file, lineNumber, funcName) - } - return "" -} - -// getTrace method - creates and returns stack trace -func getTrace(traceLevel int) []string { - var trace []string - pc, file, lineNumber, ok := runtime.Caller(traceLevel) - - for ok && file != "" { - // Clean up the common prefixes - file = trimTrace(file) - // Get the function name - _, funcName := filepath.Split(runtime.FuncForPC(pc).Name()) - // Skip duplicate traces that start with file name, "" - // and also skip traces with function name that starts with "runtime." - if !strings.HasPrefix(file, "") && - !strings.HasPrefix(funcName, "runtime.") { - // Form and append a line of stack trace into a - // collection, 'trace', to build full stack trace - trace = append(trace, fmt.Sprintf("%v:%v:%v()", file, lineNumber, funcName)) - - // Ignore trace logs beyond the following conditions - for _, name := range matchingFuncNames { - if funcName == name { - return trace - } - } - } - traceLevel++ - // Read stack trace information from PC - pc, file, lineNumber, ok = runtime.Caller(traceLevel) - } - return trace -} - -// Return the highway hash of the passed string -func hashString(input string) string { - hh, _ := highwayhash.New(magicHighwayHash256Key) - hh.Write([]byte(input)) - return hex.EncodeToString(hh.Sum(nil)) -} - -// Kind specifies the kind of errors log -type Kind string - -const ( - // Minio errors - Minio Kind = "CONSOLE" - // All errors - All Kind = "ALL" -) - -// LogAlwaysIf prints a detailed errors message during -// the execution of the server. -func LogAlwaysIf(ctx context.Context, err error, errKind ...interface{}) { - if err == nil { - return - } - - logIf(ctx, err, errKind...) -} - -// LogIf prints a detailed errors message during -// the execution of the server -func LogIf(ctx context.Context, err error, errKind ...interface{}) { - if err == nil { - return - } - - if errors.Is(err, context.Canceled) { - return - } - logIf(ctx, err, errKind...) -} - -// logIf prints a detailed errors message during -// the execution of the server. -func logIf(ctx context.Context, err error, errKind ...interface{}) { - if Disable { - return - } - logKind := string(Minio) - if len(errKind) > 0 { - if ek, ok := errKind[0].(Kind); ok { - logKind = string(ek) - } - } - req := GetReqInfo(ctx) - - if req == nil { - req = &ReqInfo{API: "SYSTEM"} - } - - kv := req.GetTags() - tags := make(map[string]interface{}, len(kv)) - for _, entry := range kv { - tags[entry.Key] = entry.Val - } - - // Get full stack trace - trace := getTrace(3) - - // Get the cause for the Error - message := fmt.Sprintf("%v (%T)", err, err) - if req.DeploymentID == "" { - req.DeploymentID = GetGlobalDeploymentID() - } - - entry := log.Entry{ - DeploymentID: req.DeploymentID, - Level: ErrorLvl.String(), - LogKind: logKind, - RemoteHost: req.RemoteHost, - Host: req.Host, - RequestID: req.RequestID, - SessionID: req.SessionID, - UserAgent: req.UserAgent, - Time: time.Now().UTC(), - Trace: &log.Trace{ - Message: message, - Source: trace, - Variables: tags, - }, - } - - if anonFlag { - entry.SessionID = hashString(entry.SessionID) - entry.RemoteHost = hashString(entry.RemoteHost) - entry.Trace.Message = reflect.TypeOf(err).String() - entry.Trace.Variables = make(map[string]interface{}) - } - - // Iterate over all logger targets to send the log entry - for _, t := range SystemTargets() { - if err := t.Send(entry, entry.LogKind); err != nil { - if consoleTgt != nil { - entry.Trace.Message = fmt.Sprintf("event(%#v) was not sent to Logger target (%#v): %#v", entry, t, err) - consoleTgt.Send(entry, entry.LogKind) - } - } - } -} - -// ErrCritical is the value panic'd whenever CriticalIf is called. -var ErrCritical struct{} - -// CriticalIf logs the provided errors on the console. It fails the -// current go-routine by causing a `panic(ErrCritical)`. -func CriticalIf(ctx context.Context, err error, errKind ...interface{}) { - if err != nil { - LogIf(ctx, err, errKind...) - panic(ErrCritical) - } -} - -// FatalIf is similar to Fatal() but it ignores passed nil errors -func FatalIf(err error, msg string, data ...interface{}) { - if err == nil { - return - } - fatal(err, msg, data...) -} - -func applyDynamicConfigForSubSys(ctx context.Context, transport *http.Transport, subSys string) error { - switch subSys { - case config.LoggerWebhookSubSys: - loggerCfg, err := LookupConfigForSubSys(config.LoggerWebhookSubSys) - if err != nil { - LogIf(ctx, fmt.Errorf("unable to load logger webhook config: %w", err)) - return err - } - userAgent := getUserAgent() - for n, l := range loggerCfg.HTTP { - if l.Enabled { - l.LogOnce = LogOnceIf - l.UserAgent = userAgent - l.Transport = NewHTTPTransportWithClientCerts(transport, l.ClientCert, l.ClientKey) - loggerCfg.HTTP[n] = l - } - } - err = UpdateSystemTargets(loggerCfg) - if err != nil { - LogIf(ctx, fmt.Errorf("unable to update logger webhook config: %w", err)) - return err - } - case config.AuditWebhookSubSys: - loggerCfg, err := LookupConfigForSubSys(config.AuditWebhookSubSys) - if err != nil { - LogIf(ctx, fmt.Errorf("unable to load audit webhook config: %w", err)) - return err - } - userAgent := getUserAgent() - for n, l := range loggerCfg.AuditWebhook { - if l.Enabled { - l.LogOnce = LogOnceIf - l.UserAgent = userAgent - l.Transport = NewHTTPTransportWithClientCerts(transport, l.ClientCert, l.ClientKey) - loggerCfg.AuditWebhook[n] = l - } - } - - err = UpdateAuditWebhookTargets(loggerCfg) - if err != nil { - LogIf(ctx, fmt.Errorf("Unable to update audit webhook targets: %w", err)) - return err - } - } - return nil -} - -// InitializeLogger : -func InitializeLogger(ctx context.Context, transport *http.Transport) error { - err := applyDynamicConfigForSubSys(ctx, transport, config.LoggerWebhookSubSys) - if err != nil { - return err - } - err = applyDynamicConfigForSubSys(ctx, transport, config.AuditWebhookSubSys) - if err != nil { - return err - } - - if enable, _ := config.ParseBool(env.Get(EnvLoggerJSONEnable, "")); enable { - EnableJSON() - } - if enable, _ := config.ParseBool(env.Get(EnvLoggerAnonymousEnable, "")); enable { - EnableAnonymous() - } - if enable, _ := config.ParseBool(env.Get(EnvLoggerQuietEnable, "")); enable { - EnableQuiet() - } - - return nil -} - -func getUserAgent() string { - userAgentParts := []string{} - // Helper function to concisely append a pair of strings to a - // the user-agent slice. - uaAppend := func(p, q string) { - userAgentParts = append(userAgentParts, p, q) - } - uaAppend("Operator Console (", runtime.GOOS) - uaAppend("; ", runtime.GOARCH) - uaAppend(") Operator Console/", pkg.Version) - uaAppend(" Operator Console/", pkg.ShortCommitID) - - return strings.Join(userAgentParts, "") -} - -// NewHTTPTransportWithClientCerts returns a new http configuration -// used while communicating with the cloud backends. -func NewHTTPTransportWithClientCerts(parentTransport *http.Transport, clientCert, clientKey string) *http.Transport { - transport := parentTransport.Clone() - if clientCert != "" && clientKey != "" { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - c, err := certs.NewManager(ctx, clientCert, clientKey, tls.LoadX509KeyPair) - if err != nil { - LogIf(ctx, fmt.Errorf("failed to load client key and cert, please check your endpoint configuration: %s", - err.Error())) - } - if c != nil { - c.UpdateReloadDuration(10 * time.Second) - c.ReloadOnSignal(syscall.SIGHUP) // allow reloads upon SIGHUP - transport.TLSClientConfig.GetClientCertificate = c.GetClientCertificate - } - } - return transport -} diff --git a/pkg/logger/logonce.go b/pkg/logger/logonce.go deleted file mode 100644 index 8393df7e11f..00000000000 --- a/pkg/logger/logonce.go +++ /dev/null @@ -1,92 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2022 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package logger - -import ( - "context" - "errors" - "net/http" - "sync" - "time" -) - -// Holds a map of recently logged errors. -type logOnceType struct { - IDMap map[interface{}]error - sync.Mutex -} - -// One log message per errors. -func (l *logOnceType) logOnceIf(ctx context.Context, err error, id interface{}, errKind ...interface{}) { - if err == nil { - return - } - l.Lock() - shouldLog := false - prevErr := l.IDMap[id] - if prevErr == nil { - l.IDMap[id] = err - shouldLog = true - } else if prevErr.Error() != err.Error() { - l.IDMap[id] = err - shouldLog = true - } - l.Unlock() - - if shouldLog { - LogIf(ctx, err, errKind...) - } -} - -// Cleanup the map every 30 minutes so that the log message is printed again for the user to notice. -func (l *logOnceType) cleanupRoutine() { - for { - l.Lock() - l.IDMap = make(map[interface{}]error) - l.Unlock() - - time.Sleep(30 * time.Minute) - } -} - -// Returns logOnceType -func newLogOnceType() *logOnceType { - l := &logOnceType{IDMap: make(map[interface{}]error)} - go l.cleanupRoutine() - return l -} - -var logOnce = newLogOnceType() - -// LogOnceIf - Logs notification errors - once per errors. -// id is a unique identifier for related log messages, refer to cmd/notification.go -// on how it is used. -func LogOnceIf(ctx context.Context, err error, id interface{}, errKind ...interface{}) { - if err == nil { - return - } - - if errors.Is(err, context.Canceled) { - return - } - - if err.Error() == http.ErrServerClosed.Error() || err.Error() == "disk not found" { - return - } - - logOnce.logOnceIf(ctx, err, id, errKind...) -} diff --git a/pkg/logger/message/audit/entry.go b/pkg/logger/message/audit/entry.go deleted file mode 100644 index 4d8564f3198..00000000000 --- a/pkg/logger/message/audit/entry.go +++ /dev/null @@ -1,127 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2022 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package audit - -import ( - "net/http" - "strings" - "time" - - "github.com/golang-jwt/jwt/v4" - - "github.com/minio/operator/pkg/utils" - - xhttp "github.com/minio/operator/pkg/http" -) - -// Version - represents the current version of audit log structure. -const Version = "1" - -// ObjectVersion object version key/versionId -type ObjectVersion struct { - ObjectName string `json:"objectName"` - VersionID string `json:"versionId,omitempty"` -} - -// Entry - audit entry logs. -type Entry struct { - Version string `json:"version"` - DeploymentID string `json:"deploymentid,omitempty"` - Time time.Time `json:"time"` - Trigger string `json:"trigger"` - API struct { - Path string `json:"path,omitempty"` - Status string `json:"status,omitempty"` - Method string `json:"method"` - StatusCode int `json:"statusCode,omitempty"` - InputBytes int64 `json:"rx"` - OutputBytes int64 `json:"tx"` - TimeToFirstByte string `json:"timeToFirstByte,omitempty"` - TimeToResponse string `json:"timeToResponse,omitempty"` - } `json:"api"` - RemoteHost string `json:"remotehost,omitempty"` - RequestID string `json:"requestID,omitempty"` - SessionID string `json:"sessionID,omitempty"` - UserAgent string `json:"userAgent,omitempty"` - ReqClaims map[string]interface{} `json:"requestClaims,omitempty"` - ReqQuery map[string]string `json:"requestQuery,omitempty"` - ReqHeader map[string]string `json:"requestHeader,omitempty"` - RespHeader map[string]string `json:"responseHeader,omitempty"` - Tags map[string]interface{} `json:"tags,omitempty"` -} - -// NewEntry - constructs an audit entry object with some fields filled -func NewEntry(deploymentID string) Entry { - return Entry{ - Version: Version, - DeploymentID: deploymentID, - Time: time.Now().UTC(), - } -} - -// ToEntry - constructs an audit entry from a http request -func ToEntry(w http.ResponseWriter, r *http.Request, reqClaims map[string]interface{}, deploymentID string) Entry { - entry := NewEntry(deploymentID) - - entry.RemoteHost = r.RemoteAddr - entry.UserAgent = r.UserAgent() - entry.ReqClaims = reqClaims - - q := r.URL.Query() - reqQuery := make(map[string]string, len(q)) - for k, v := range q { - reqQuery[k] = strings.Join(v, ",") - } - entry.ReqQuery = reqQuery - - reqHeader := make(map[string]string, len(r.Header)) - for k, v := range r.Header { - reqHeader[k] = strings.Join(v, ",") - } - entry.ReqHeader = reqHeader - - wh := w.Header() - - var requestID interface{} - requestID = r.Context().Value(utils.ContextRequestID) - if requestID == nil { - requestID, _ = utils.NewUUID() - } - entry.RequestID = requestID.(string) - - if val := r.Context().Value(utils.ContextRequestUserID); val != nil { - sessionID := val.(string) - claims := jwt.MapClaims{} - _, _ = jwt.ParseWithClaims(sessionID, claims, nil) - if sub, ok := claims["sub"]; ok { - sessionID = sub.(string) - } - entry.SessionID = sessionID - } - - respHeader := make(map[string]string, len(wh)) - for k, v := range wh { - respHeader[k] = strings.Join(v, ",") - } - entry.RespHeader = respHeader - - if etag := respHeader[xhttp.ETag]; etag != "" { - respHeader[xhttp.ETag] = strings.Trim(etag, `"`) - } - - return entry -} diff --git a/pkg/logger/message/log/entry.go b/pkg/logger/message/log/entry.go deleted file mode 100644 index 555e2097116..00000000000 --- a/pkg/logger/message/log/entry.go +++ /dev/null @@ -1,64 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2022 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package log - -import ( - "time" -) - -// ObjectVersion object version key/versionId -type ObjectVersion struct { - ObjectName string `json:"objectName"` - VersionID string `json:"versionId,omitempty"` -} - -// Args - defines the arguments for the API. -type Args struct { - Bucket string `json:"bucket,omitempty"` - Object string `json:"object,omitempty"` - VersionID string `json:"versionId,omitempty"` - Objects []ObjectVersion `json:"objects,omitempty"` - Metadata map[string]string `json:"metadata,omitempty"` -} - -// Trace - defines the trace. -type Trace struct { - Message string `json:"message,omitempty"` - Source []string `json:"source,omitempty"` - Variables map[string]interface{} `json:"variables,omitempty"` -} - -// API - defines the api type and its args. -type API struct { - Name string `json:"name,omitempty"` -} - -// Entry - defines fields and values of each log entry. -type Entry struct { - DeploymentID string `json:"deploymentid,omitempty"` - Level string `json:"level"` - LogKind string `json:"errKind"` - Time time.Time `json:"time"` - API *API `json:"api,omitempty"` - RemoteHost string `json:"remotehost,omitempty"` - Host string `json:"host,omitempty"` - RequestID string `json:"requestID,omitempty"` - SessionID string `json:"sessionID,omitempty"` - UserAgent string `json:"userAgent,omitempty"` - Message string `json:"message,omitempty"` - Trace *Trace `json:"errors,omitempty"` -} diff --git a/pkg/logger/reqinfo.go b/pkg/logger/reqinfo.go deleted file mode 100644 index bac737a7ef8..00000000000 --- a/pkg/logger/reqinfo.go +++ /dev/null @@ -1,117 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2022 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package logger - -import ( - "context" - "fmt" - "sync" - - "github.com/minio/operator/pkg/utils" -) - -// KeyVal - appended to ReqInfo.Tags -type KeyVal struct { - Key string - Val interface{} -} - -// ObjectVersion object version key/versionId -type ObjectVersion struct { - ObjectName string - VersionID string `json:"VersionId,omitempty"` -} - -// ReqInfo stores the request info. -type ReqInfo struct { - RemoteHost string // Client Host/IP - Host string // Node Host/IP - UserAgent string // User Agent - DeploymentID string // x-minio-deployment-id - RequestID string // x-amz-request-id - SessionID string // custom session id - API string // API name - GetObject PutObject NewMultipartUpload etc. - BucketName string `json:",omitempty"` // Bucket name - ObjectName string `json:",omitempty"` // Object name - VersionID string `json:",omitempty"` // corresponding versionID for the object - Objects []ObjectVersion `json:",omitempty"` // Only set during MultiObject delete handler. - AccessKey string // Access Key - tags []KeyVal // Any additional info not accommodated by above fields - sync.RWMutex -} - -// GetTags - returns the user defined tags -func (r *ReqInfo) GetTags() []KeyVal { - if r == nil { - return nil - } - r.RLock() - defer r.RUnlock() - return append([]KeyVal(nil), r.tags...) -} - -// GetTagsMap - returns the user defined tags in a map structure -func (r *ReqInfo) GetTagsMap() map[string]interface{} { - if r == nil { - return nil - } - r.RLock() - defer r.RUnlock() - m := make(map[string]interface{}, len(r.tags)) - for _, t := range r.tags { - m[t.Key] = t.Val - } - return m -} - -// SetReqInfo sets ReqInfo in the context. -func SetReqInfo(ctx context.Context, req *ReqInfo) context.Context { - if ctx == nil { - LogIf(context.Background(), fmt.Errorf("context is nil")) - return nil - } - return context.WithValue(ctx, utils.ContextLogKey, req) -} - -// GetReqInfo returns ReqInfo if set. -func GetReqInfo(ctx context.Context) *ReqInfo { - if ctx != nil { - r, ok := ctx.Value(utils.ContextLogKey).(*ReqInfo) - if ok { - return r - } - r = &ReqInfo{} - if val, o := ctx.Value(utils.ContextRequestID).(string); o { - r.RequestID = val - } - if val, o := ctx.Value(utils.ContextRequestUserID).(string); o { - r.SessionID = val - } - if val, o := ctx.Value(utils.ContextRequestUserAgent).(string); o { - r.UserAgent = val - } - if val, o := ctx.Value(utils.ContextRequestHost).(string); o { - r.Host = val - } - if val, o := ctx.Value(utils.ContextRequestRemoteAddr).(string); o { - r.RemoteHost = val - } - SetReqInfo(ctx, r) - return r - } - return nil -} diff --git a/pkg/logger/target/http/http.go b/pkg/logger/target/http/http.go deleted file mode 100644 index fdfea9146cc..00000000000 --- a/pkg/logger/target/http/http.go +++ /dev/null @@ -1,225 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2022 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package http - -import ( - "bytes" - "context" - "encoding/json" - "errors" - "fmt" - "net/http" - "strings" - "sync" - "sync/atomic" - "time" - - xhttp "github.com/minio/operator/pkg/http" - "github.com/minio/operator/pkg/logger/target/types" -) - -// Timeout for the webhook http call -const webhookCallTimeout = 5 * time.Second - -// Config http logger target -type Config struct { - Enabled bool `json:"enabled"` - Name string `json:"name"` - UserAgent string `json:"userAgent"` - Endpoint string `json:"endpoint"` - AuthToken string `json:"authToken"` - ClientCert string `json:"clientCert"` - ClientKey string `json:"clientKey"` - QueueSize int `json:"queueSize"` - Transport http.RoundTripper `json:"-"` - - // Custom logger - LogOnce func(ctx context.Context, err error, id interface{}, errKind ...interface{}) `json:"-"` -} - -// Target implements logger.Target and sends the json -// format of a log entry to the configured http endpoint. -// An internal buffer of logs is maintained but when the -// buffer is full, new logs are just ignored and an errors -// is returned to the caller. -type Target struct { - status int32 - wg sync.WaitGroup - - // Channel of log entries - logCh chan interface{} - - config Config -} - -// Endpoint returns the backend endpoint -func (h *Target) Endpoint() string { - return h.config.Endpoint -} - -func (h *Target) String() string { - return h.config.Name -} - -// Init validate and initialize the http target -func (h *Target) Init() error { - ctx, cancel := context.WithTimeout(context.Background(), 2*webhookCallTimeout) - defer cancel() - - req, err := http.NewRequestWithContext(ctx, http.MethodPost, h.config.Endpoint, strings.NewReader(`{}`)) - if err != nil { - return err - } - - req.Header.Set(xhttp.ContentType, "application/json") - - // Set user-agent to indicate MinIO release - // version to the configured log endpoint - req.Header.Set("User-Agent", h.config.UserAgent) - - if h.config.AuthToken != "" { - req.Header.Set("Authorization", h.config.AuthToken) - } - - client := http.Client{Transport: h.config.Transport} - resp, err := client.Do(req) - if err != nil { - return err - } - - // Drain any response. - xhttp.DrainBody(resp.Body) - - if !acceptedResponseStatusCode(resp.StatusCode) { - if resp.StatusCode == http.StatusForbidden { - return fmt.Errorf("%s returned '%s', please check if your auth token is correctly set", - h.config.Endpoint, resp.Status) - } - return fmt.Errorf("%s returned '%s', please check your endpoint configuration", - h.config.Endpoint, resp.Status) - } - - h.status = 1 - go h.startHTTPLogger() - return nil -} - -// Accepted HTTP Status Codes -var acceptedStatusCodeMap = map[int]bool{http.StatusOK: true, http.StatusCreated: true, http.StatusAccepted: true, http.StatusNoContent: true} - -func acceptedResponseStatusCode(code int) bool { - return acceptedStatusCodeMap[code] -} - -func (h *Target) logEntry(entry interface{}) { - logJSON, err := json.Marshal(&entry) - if err != nil { - return - } - - ctx, cancel := context.WithTimeout(context.Background(), webhookCallTimeout) - req, err := http.NewRequestWithContext(ctx, http.MethodPost, - h.config.Endpoint, bytes.NewReader(logJSON)) - if err != nil { - h.config.LogOnce(ctx, fmt.Errorf("%s returned '%w', please check your endpoint configuration", h.config.Endpoint, err), h.config.Endpoint) - cancel() - return - } - req.Header.Set(xhttp.ContentType, "application/json") - - // Set user-agent to indicate MinIO release - // version to the configured log endpoint - req.Header.Set("User-Agent", h.config.UserAgent) - - if h.config.AuthToken != "" { - req.Header.Set("Authorization", h.config.AuthToken) - } - - client := http.Client{Transport: h.config.Transport} - resp, err := client.Do(req) - cancel() - if err != nil { - h.config.LogOnce(ctx, fmt.Errorf("%s returned '%w', please check your endpoint configuration", h.config.Endpoint, err), h.config.Endpoint) - return - } - - // Drain any response. - xhttp.DrainBody(resp.Body) - - if !acceptedResponseStatusCode(resp.StatusCode) { - switch resp.StatusCode { - case http.StatusForbidden: - h.config.LogOnce(ctx, fmt.Errorf("%s returned '%s', please check if your auth token is correctly set", h.config.Endpoint, resp.Status), h.config.Endpoint) - default: - h.config.LogOnce(ctx, fmt.Errorf("%s returned '%s', please check your endpoint configuration", h.config.Endpoint, resp.Status), h.config.Endpoint) - } - } -} - -func (h *Target) startHTTPLogger() { - // Create a routine which sends json logs received - // from an internal channel. - go func() { - h.wg.Add(1) - defer h.wg.Done() - for entry := range h.logCh { - h.logEntry(entry) - } - }() -} - -// New initializes a new logger target which -// sends log over http to the specified endpoint -func New(config Config) *Target { - h := &Target{ - logCh: make(chan interface{}, config.QueueSize), - config: config, - } - - return h -} - -// Send log message 'e' to http target. -func (h *Target) Send(entry interface{}, errKind string) error { - if atomic.LoadInt32(&h.status) == 0 { - // Channel was closed or used before init. - return nil - } - - select { - case h.logCh <- entry: - default: - // log channel is full, do not wait and return - // an errors immediately to the caller - return errors.New("log buffer full") - } - - return nil -} - -// Cancel - cancels the target -func (h *Target) Cancel() { - if atomic.CompareAndSwapInt32(&h.status, 1, 0) { - close(h.logCh) - } - h.wg.Wait() -} - -// Type - returns type of the target -func (h *Target) Type() types.TargetType { - return types.TargetHTTP -} diff --git a/pkg/logger/target/types/types.go b/pkg/logger/target/types/types.go deleted file mode 100644 index e4fdda38435..00000000000 --- a/pkg/logger/target/types/types.go +++ /dev/null @@ -1,27 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2022 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package types - -// TargetType indicates type of the target e.g. console, http, kafka -type TargetType uint8 - -// Constants for target types -const ( - _ TargetType = iota - TargetConsole - TargetHTTP -) diff --git a/pkg/logger/targets.go b/pkg/logger/targets.go deleted file mode 100644 index 9d5fdee5cdc..00000000000 --- a/pkg/logger/targets.go +++ /dev/null @@ -1,151 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2022 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package logger - -import ( - "sync" - "sync/atomic" - - "github.com/minio/operator/pkg/logger/target/http" - "github.com/minio/operator/pkg/logger/target/types" -) - -// Target is the entity that we will receive -// a single log entry and Send it to the log target -// e.g. Send the log to a http server -type Target interface { - String() string - Endpoint() string - Init() error - Cancel() - Send(entry interface{}, errKind string) error - Type() types.TargetType -} - -var ( - // swapMu must be held while reading slice info or swapping targets or auditTargets. - swapMu sync.Mutex - - // systemTargets is the set of enabled loggers. - // Must be immutable at all times. - // Can be swapped to another while holding swapMu - systemTargets = []Target{} - - // This is always set represent /dev/console target - consoleTgt Target - - nTargets int32 // atomic count of len(targets) -) - -// SystemTargets returns active targets. -// Returned slice may not be modified in any way. -func SystemTargets() []Target { - if atomic.LoadInt32(&nTargets) == 0 { - // Lock free if none... - return nil - } - swapMu.Lock() - res := systemTargets - swapMu.Unlock() - return res -} - -// AuditTargets returns active audit targets. -// Returned slice may not be modified in any way. -func AuditTargets() []Target { - if atomic.LoadInt32(&nAuditTargets) == 0 { - // Lock free if none... - return nil - } - swapMu.Lock() - res := auditTargets - swapMu.Unlock() - return res -} - -// auditTargets is the list of enabled audit loggers -// Must be immutable at all times. -// Can be swapped to another while holding swapMu -var ( - auditTargets = []Target{} - nAuditTargets int32 // atomic count of len(auditTargets) -) - -func cancelAllSystemTargets() { - for _, tgt := range systemTargets { - tgt.Cancel() - } -} - -func initSystemTargets(cfgMap map[string]http.Config) (tgts []Target, err error) { - for _, l := range cfgMap { - if l.Enabled { - t := http.New(l) - if err = t.Init(); err != nil { - return tgts, err - } - tgts = append(tgts, t) - } - } - return tgts, err -} - -// UpdateSystemTargets swaps targets with newly loaded ones from the cfg -func UpdateSystemTargets(cfg Config) error { - updated, err := initSystemTargets(cfg.HTTP) - if err != nil { - return err - } - - swapMu.Lock() - for _, tgt := range systemTargets { - // Preserve console target when dynamically updating - // other HTTP targets, console target is always present. - if tgt.Type() == types.TargetConsole { - updated = append(updated, tgt) - break - } - } - atomic.StoreInt32(&nTargets, int32(len(updated))) - cancelAllSystemTargets() // cancel running targets - systemTargets = updated - swapMu.Unlock() - return nil -} - -func cancelAuditTargetType(t types.TargetType) { - for _, tgt := range auditTargets { - if tgt.Type() == t { - tgt.Cancel() - } - } -} - -// UpdateAuditWebhookTargets swaps audit webhook targets with newly loaded ones from the cfg -func UpdateAuditWebhookTargets(cfg Config) error { - updated, err := initSystemTargets(cfg.AuditWebhook) - if err != nil { - return err - } - - swapMu.Lock() - atomic.StoreInt32(&nAuditTargets, int32(len(updated))) - cancelAuditTargetType(types.TargetHTTP) // cancel running targets - auditTargets = updated - swapMu.Unlock() - return nil -} diff --git a/pkg/logger/utils.go b/pkg/logger/utils.go deleted file mode 100644 index 766ae6c0a26..00000000000 --- a/pkg/logger/utils.go +++ /dev/null @@ -1,60 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2022 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package logger - -import ( - "fmt" - "regexp" - "runtime" - - "github.com/minio/operator/pkg/logger/color" -) - -var ansiRE = regexp.MustCompile("(\x1b[^m]*m)") - -// Print ANSI Control escape -func ansiEscape(format string, args ...interface{}) { - Esc := "\x1b" - fmt.Printf("%s%s", Esc, fmt.Sprintf(format, args...)) -} - -func ansiMoveRight(n int) { - if runtime.GOOS == "windows" { - return - } - if color.IsTerminal() { - ansiEscape("[%dC", n) - } -} - -func ansiSaveAttributes() { - if runtime.GOOS == "windows" { - return - } - if color.IsTerminal() { - ansiEscape("7") - } -} - -func ansiRestoreAttributes() { - if runtime.GOOS == "windows" { - return - } - if color.IsTerminal() { - ansiEscape("8") - } -} diff --git a/pkg/resources/configmaps/prometheus.go b/pkg/resources/configmaps/prometheus.go index df7f8455cc3..82b1c5c6171 100644 --- a/pkg/resources/configmaps/prometheus.go +++ b/pkg/resources/configmaps/prometheus.go @@ -16,15 +16,10 @@ package configmaps import ( "fmt" - "reflect" "time" - "github.com/golang-jwt/jwt" - "gopkg.in/yaml.v2" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" + "gopkg.in/yaml.v2" ) type globalConfig struct { @@ -104,81 +99,3 @@ func GetPrometheusConfig(t *miniov2.Tenant, accessKey, secretKey string) *Promet } return promConfig } - -const prometheusYml = "prometheus.yml" - -// fromPrometheusConfigMap parses prometheus config file from the given -// configmap and returns *prometheusConfig on success. Otherwise, returns error. -func fromPrometheusConfigMap(configMap *corev1.ConfigMap) (*PrometheusConfig, error) { - configFile := configMap.Data[prometheusYml] - var config PrometheusConfig - err := yaml.Unmarshal([]byte(configFile), &config) - if err != nil { - return nil, err - } - return &config, nil -} - -// getConfigMap returns k8s config map for the given tenant -func (p *PrometheusConfig) getConfigMap(tenant *miniov2.Tenant) *corev1.ConfigMap { - return &corev1.ConfigMap{ - ObjectMeta: metav1.ObjectMeta{ - Name: tenant.PrometheusConfigMapName(), - Namespace: tenant.Namespace, - OwnerReferences: tenant.OwnerRef(), - }, - Data: map[string]string{ - prometheusYml: p.ConfigFile(), - }, - } -} - -// bearerTokenNeedsUpdate returns true if the prometheusConfig's bearer token -// can't be verified using the given secretKey -func (p *PrometheusConfig) bearerTokenNeedsUpdate(secretKey string) bool { - tokenStr := p.ScrapeConfigs[0].BearerToken - _, err := jwt.Parse(tokenStr, func(token *jwt.Token) (interface{}, error) { - if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { - return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"]) - } - // TODO: add checks on token.Claims like issuer etc. - return []byte(secretKey), nil - }) - return err != nil -} - -// PrometheusConfigMap returns k8s configmap containing Prometheus configuration. -func PrometheusConfigMap(tenant *miniov2.Tenant, accessKey, secretKey string) *corev1.ConfigMap { - config := GetPrometheusConfig(tenant, accessKey, secretKey) - return config.getConfigMap(tenant) -} - -// UpdatePrometheusConfigMap checks if the prometheus config map needs update -// and if so returns the updated map. Otherwise it returns nil. -func UpdatePrometheusConfigMap(t *miniov2.Tenant, accessKey, secretKey string, existing *corev1.ConfigMap) *corev1.ConfigMap { - config := GetPrometheusConfig(t, accessKey, secretKey) - existingConfig, err := fromPrometheusConfigMap(existing) - if err != nil { - // needs update to recover possibly corrupt current config file - return config.getConfigMap(t) - } - - // Validate existing config bearer token with the secret key from - // 'desired' tenant spec. Success indicates that the secret key hasn't - // changed, so 'mask' the bearer token before performing equality check - // to determine if the prometheus config requires update. - needsUpdate := existingConfig.bearerTokenNeedsUpdate(secretKey) - if !needsUpdate { - config.ScrapeConfigs[0].BearerToken = "" - existingConfig.ScrapeConfigs[0].BearerToken = "" - if !reflect.DeepEqual(existingConfig, config) { - needsUpdate = true - } - } - - if needsUpdate { - return config.getConfigMap(t) - } - - return nil -} diff --git a/pkg/resources/statefulsets/kes-statefulset.go b/pkg/resources/statefulsets/kes-statefulset.go index 54b4c3fa6cd..c13159ba186 100644 --- a/pkg/resources/statefulsets/kes-statefulset.go +++ b/pkg/resources/statefulsets/kes-statefulset.go @@ -15,11 +15,15 @@ package statefulsets import ( + "fmt" + "regexp" "sort" + "strings" + + "golang.org/x/mod/semver" "github.com/minio/operator/pkg/certs" - operatorApi "github.com/minio/operator/api" miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2" appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" @@ -99,11 +103,11 @@ func KESServerContainer(t *miniov2.Tenant) corev1.Container { // Args to start KES with config mounted at miniov2.KESConfigMountPath and require but don't verify mTLS authentication args := []string{"server", "--config=" + miniov2.KESConfigMountPath + "/server-config.yaml"} - kesVersion, _ := operatorApi.GetKesConfigVersion(t.Spec.KES.Image) + kesVersion, _ := getKesConfigVersion(t.Spec.KES.Image) // Add `--auth` flag only on config versions that are still compatible with it (v1 and v2). // Starting KES 2023-11-09T17-35-47Z (v3) is no longer supported. switch kesVersion { - case operatorApi.KesConfigVersion1, operatorApi.KesConfigVersion2: + case KesConfigVersion1, KesConfigVersion2: args = append(args, "--auth=off") } @@ -347,3 +351,69 @@ func NewForKES(t *miniov2.Tenant, serviceName string) *appsv1.StatefulSet { return ss } + +const ( + // imageTagWithArchRegex is a regular expression to identify if a KES tag + // includes the arch as suffix, ie: 2023-05-02T22-48-10Z-arm64 + kesImageTagWithArchRegexPattern = `(\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2}Z)(-.*)` +) + +const ( + // KesConfigVersion1 identifier v1 + KesConfigVersion1 = "v1" + // KesConfigVersion2 identifier v2 + KesConfigVersion2 = "v2" +) + +func getKesConfigVersion(image string) (string, error) { + version := KesConfigVersion2 + + imageStrings := strings.Split(image, ":") + var imageTag string + if len(imageStrings) > 1 { + imageTag = imageStrings[1] + } else { + return "", fmt.Errorf("%s not a valid KES release tag", image) + } + + if imageTag == "edge" { + return KesConfigVersion2, nil + } + + if imageTag == "latest" { + return KesConfigVersion2, nil + } + + // When the image tag is semantic version is config v1 + if semver.IsValid(imageTag) { + // Admin is required starting version v0.22.0 + if semver.Compare(imageTag, "v0.22.0") < 0 { + return KesConfigVersion1, nil + } + return KesConfigVersion2, nil + } + + releaseTagNoArch := imageTag + + re := regexp.MustCompile(kesImageTagWithArchRegexPattern) + // if pattern matches, that means we have a tag with arch + if matched := re.Match([]byte(imageTag)); matched { + slicesOfTag := re.FindStringSubmatch(imageTag) + // here we will remove the arch suffix by assigning the first group in the regex + releaseTagNoArch = slicesOfTag[1] + } + + // v0.22.0 is the initial image version for Kes config v2, any time format came after and is v2 + _, err := miniov2.ReleaseTagToReleaseTime(releaseTagNoArch) + if err != nil { + // could not parse semversion either, returning error + return "", fmt.Errorf("could not identify KES version from image TAG: %s", releaseTagNoArch) + } + + // Leaving this snippet as comment as this will helpful to compare in future config versions + // kesv2ReleaseTime, _ := miniov2.ReleaseTagToReleaseTime("2023-04-03T16-41-28Z") + // if imageVersionTime.Before(kesv2ReleaseTime) { + // version = kesConfigVersion2 + // } + return version, nil +} diff --git a/pkg/resources/statefulsets/minio-statefulset.go b/pkg/resources/statefulsets/minio-statefulset.go index 263d6794613..71de5f959d4 100644 --- a/pkg/resources/statefulsets/minio-statefulset.go +++ b/pkg/resources/statefulsets/minio-statefulset.go @@ -40,7 +40,7 @@ const ( // Returns the MinIO environment variables set in configuration. // If a user specifies a secret in the spec (for MinIO credentials) we use // that to set MINIO_ROOT_USER & MINIO_ROOT_PASSWORD. -func minioEnvironmentVars(t *miniov2.Tenant, skipEnvVars map[string][]byte, opVersion string) []corev1.EnvVar { +func minioEnvironmentVars(t *miniov2.Tenant, skipEnvVars map[string][]byte) []corev1.EnvVar { var envVars []corev1.EnvVar // Enable `mc admin update` style updates to MinIO binaries // within the container, only operator is supposed to perform @@ -289,7 +289,7 @@ func volumeMounts(t *miniov2.Tenant, pool *miniov2.Pool, certVolumeSources []cor } // Builds the MinIO container for a Tenant. -func poolMinioServerContainer(t *miniov2.Tenant, skipEnvVars map[string][]byte, pool *miniov2.Pool, hostsTemplate string, opVersion string, certVolumeSources []corev1.VolumeProjection) corev1.Container { +func poolMinioServerContainer(t *miniov2.Tenant, skipEnvVars map[string][]byte, pool *miniov2.Pool, certVolumeSources []corev1.VolumeProjection) corev1.Container { consolePort := miniov2.ConsolePort if t.TLS() { consolePort = miniov2.ConsoleTLSPort @@ -342,7 +342,7 @@ func poolMinioServerContainer(t *miniov2.Tenant, skipEnvVars map[string][]byte, ImagePullPolicy: t.Spec.ImagePullPolicy, VolumeMounts: volumeMounts(t, pool, certVolumeSources), Args: args, - Env: minioEnvironmentVars(t, skipEnvVars, opVersion), + Env: minioEnvironmentVars(t, skipEnvVars), Resources: pool.Resources, LivenessProbe: t.Spec.Liveness, ReadinessProbe: t.Spec.Readiness, @@ -473,8 +473,6 @@ func NewPool(args *NewPoolArgs) *appsv1.StatefulSet { pool := args.Pool poolStatus := args.PoolStatus serviceName := args.ServiceName - hostsTemplate := args.HostsTemplate - operatorVersion := args.OperatorVersion var podVolumes []corev1.Volume replicas := pool.Servers @@ -789,7 +787,7 @@ func NewPool(args *NewPoolArgs) *appsv1.StatefulSet { } containers := []corev1.Container{ - poolMinioServerContainer(t, skipEnvVars, pool, hostsTemplate, operatorVersion, certVolumeSources), + poolMinioServerContainer(t, skipEnvVars, pool, certVolumeSources), getSideCarContainer(t, pool), } diff --git a/pkg/runtime/sync_test.go b/pkg/runtime/sync_test.go index 04cdef9c5bb..da8311c0d5d 100644 --- a/pkg/runtime/sync_test.go +++ b/pkg/runtime/sync_test.go @@ -172,7 +172,7 @@ type wrapK8sClientCanceledTest struct { client.Client } -func (w *wrapK8sClientCanceledTest) Create(ctx context.Context, obj client.Object, opts ...client.CreateOption) error { +func (w *wrapK8sClientCanceledTest) Create(_ context.Context, _ client.Object, _ ...client.CreateOption) error { return context.Canceled } diff --git a/pkg/subnet/const.go b/pkg/subnet/const.go index ebac9cb36fb..486333a9079 100644 --- a/pkg/subnet/const.go +++ b/pkg/subnet/const.go @@ -24,8 +24,3 @@ qkltaKyTLRENd4w3IRktYYCRgzpDLPn/nrf7snV/ERO5qcI7fkEES34IVEr+2Uff JkO2PfyyAYEO/5dBlPh1Undu9WQl6J7B -----END PUBLIC KEY-----`, // https://subnet.min.io/downloads/license-pubkey.pem } - -const ( - // SubnetURL url - SubnetURL = "CONSOLE_SUBNET_URL" -) diff --git a/pkg/subnet/subnet.go b/pkg/subnet/subnet.go index 931508e3ce8..4c649082b9e 100644 --- a/pkg/subnet/subnet.go +++ b/pkg/subnet/subnet.go @@ -17,106 +17,9 @@ package subnet -import ( - "errors" - - "github.com/minio/madmin-go/v3" - mc "github.com/minio/mc/cmd" - - "github.com/minio/operator/pkg/http" - - "github.com/tidwall/gjson" -) - -// LoginWithMFA starts a login request with MFA -func LoginWithMFA(client http.ClientI, username, mfaToken, otp string) (*LoginResp, error) { - mfaLoginReq := MfaReq{Username: username, OTP: otp, Token: mfaToken} - resp, err := subnetPostReq(client, subnetMFAURL(), mfaLoginReq, nil) - if err != nil { - return nil, err - } - token := gjson.Get(resp, "token_info.access_token") - if token.Exists() { - return &LoginResp{AccessToken: token.String(), MfaToken: ""}, nil - } - return nil, errors.New("access token not found in response") -} - -// Login starts a login request -func Login(client http.ClientI, username, password string) (*LoginResp, error) { - loginReq := map[string]string{ - "username": username, - "password": password, - } - respStr, err := subnetPostReq(client, subnetLoginURL(), loginReq, nil) - if err != nil { - return nil, err - } - mfaRequired := gjson.Get(respStr, "mfa_required").Bool() - if mfaRequired { - mfaToken := gjson.Get(respStr, "mfa_token").String() - if mfaToken == "" { - return nil, errors.New("missing mfa token") - } - return &LoginResp{AccessToken: "", MfaToken: mfaToken}, nil - } - token := gjson.Get(respStr, "token_info.access_token") - if token.Exists() { - return &LoginResp{AccessToken: token.String(), MfaToken: ""}, nil - } - return nil, errors.New("access token not found in response") -} - // LicenseTokenConfig holds registration cfg type LicenseTokenConfig struct { APIKey string License string Proxy string } - -// Register starts a registration flow -func Register(client http.ClientI, admInfo madmin.InfoMessage, apiKey, token, accountID string) (*LicenseTokenConfig, error) { - var headers map[string]string - regInfo := GetClusterRegInfo(admInfo) - regURL := subnetRegisterURL() - if apiKey != "" { - regURL += "?api_key=" + apiKey - } else { - if accountID == "" || token == "" { - return nil, errors.New("missing accountID or authentication token") - } - headers = subnetAuthHeaders(token) - regURL += "?aid=" + accountID - } - regToken, err := GenerateRegToken(regInfo) - if err != nil { - return nil, err - } - reqPayload := mc.ClusterRegistrationReq{Token: regToken} - resp, err := subnetPostReq(client, regURL, reqPayload, headers) - if err != nil { - return nil, err - } - respJSON := gjson.Parse(resp) - subnetAPIKey := respJSON.Get("api_key").String() - licenseJwt := respJSON.Get("license").String() - - if subnetAPIKey != "" || licenseJwt != "" { - return &LicenseTokenConfig{ - APIKey: subnetAPIKey, - License: licenseJwt, - }, nil - } - return nil, errors.New("subnet api key not found") -} - -// GetAPIKey returns the API for a token -func GetAPIKey(client http.ClientI, token string) (string, error) { - resp, err := subnetGetReq(client, subnetAPIKeyURL(), subnetAuthHeaders(token)) - if err != nil { - return "", err - } - respJSON := gjson.Parse(resp) - apiKey := respJSON.Get("api_key").String() - return apiKey, nil -} diff --git a/pkg/subnet/utils.go b/pkg/subnet/utils.go deleted file mode 100644 index e32b9e76aae..00000000000 --- a/pkg/subnet/utils.go +++ /dev/null @@ -1,165 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package subnet - -import ( - "bytes" - "encoding/base64" - "encoding/json" - "fmt" - "io" - "io/ioutil" - "net/http" - - xhttp "github.com/minio/operator/pkg/http" - - "github.com/minio/madmin-go/v3" - mc "github.com/minio/mc/cmd" - "github.com/minio/pkg/env" -) - -const ( - subnetRespBodyLimit = 1 << 20 // 1 MiB -) - -func subnetBaseURL() string { - return env.Get(SubnetURL, "https://subnet.min.io") -} - -func subnetRegisterURL() string { - return subnetBaseURL() + "/api/cluster/register" -} - -func subnetLoginURL() string { - return subnetBaseURL() + "/api/auth/login" -} - -func subnetMFAURL() string { - return subnetBaseURL() + "/api/auth/mfa-login" -} - -func subnetAPIKeyURL() string { - return subnetBaseURL() + "/api/auth/api-key" -} - -// GenerateRegToken generate a token -func GenerateRegToken(clusterRegInfo mc.ClusterRegistrationInfo) (string, error) { - token, e := json.Marshal(clusterRegInfo) - if e != nil { - return "", e - } - - return base64.StdEncoding.EncodeToString(token), nil -} - -func subnetAuthHeaders(authToken string) map[string]string { - return map[string]string{"Authorization": "Bearer " + authToken} -} - -func httpDo(client xhttp.ClientI, req *http.Request) (*http.Response, error) { - return client.Do(req) -} - -func subnetReqDo(client xhttp.ClientI, r *http.Request, headers map[string]string) (string, error) { - for k, v := range headers { - r.Header.Add(k, v) - } - - ct := r.Header.Get("Content-Type") - if len(ct) == 0 { - r.Header.Add("Content-Type", "application/json") - } - - resp, e := httpDo(client, r) - if e != nil { - return "", e - } - - defer resp.Body.Close() - respBytes, e := ioutil.ReadAll(io.LimitReader(resp.Body, subnetRespBodyLimit)) - if e != nil { - return "", e - } - respStr := string(respBytes) - - if resp.StatusCode == http.StatusOK { - return respStr, nil - } - return respStr, fmt.Errorf("Request failed with code %d and errors: %s", resp.StatusCode, respStr) -} - -func subnetGetReq(client xhttp.ClientI, reqURL string, headers map[string]string) (string, error) { - r, e := http.NewRequest(http.MethodGet, reqURL, nil) - if e != nil { - return "", e - } - return subnetReqDo(client, r, headers) -} - -func subnetPostReq(client xhttp.ClientI, reqURL string, payload interface{}, headers map[string]string) (string, error) { - body, e := json.Marshal(payload) - if e != nil { - return "", e - } - r, e := http.NewRequest(http.MethodPost, reqURL, bytes.NewReader(body)) - if e != nil { - return "", e - } - return subnetReqDo(client, r, headers) -} - -// GetClusterRegInfo returns cluster info -func GetClusterRegInfo(admInfo madmin.InfoMessage) mc.ClusterRegistrationInfo { - noOfPools := 1 - noOfDrives := 0 - for _, srvr := range admInfo.Servers { - if srvr.PoolNumber > noOfPools { - noOfPools = srvr.PoolNumber - } - noOfDrives += len(srvr.Disks) - } - - totalSpace, usedSpace := getDriveSpaceInfo(admInfo) - - return mc.ClusterRegistrationInfo{ - DeploymentID: admInfo.DeploymentID, - ClusterName: admInfo.DeploymentID, - UsedCapacity: admInfo.Usage.Size, - Info: mc.ClusterInfo{ - MinioVersion: admInfo.Servers[0].Version, - NoOfServerPools: noOfPools, - NoOfServers: len(admInfo.Servers), - NoOfDrives: noOfDrives, - TotalDriveSpace: totalSpace, - UsedDriveSpace: usedSpace, - NoOfBuckets: admInfo.Buckets.Count, - NoOfObjects: admInfo.Objects.Count, - }, - } -} - -func getDriveSpaceInfo(admInfo madmin.InfoMessage) (uint64, uint64) { - total := uint64(0) - used := uint64(0) - for _, srvr := range admInfo.Servers { - for _, d := range srvr.Disks { - total += d.TotalSpace - used += d.UsedSpace - } - } - return total, used -} diff --git a/pkg/utils/miniojob/minioJob.go b/pkg/utils/miniojob/minioJob.go index 70b2b56ff6a..ed89120fcf3 100644 --- a/pkg/utils/miniojob/minioJob.go +++ b/pkg/utils/miniojob/minioJob.go @@ -47,7 +47,7 @@ func ALIAS() FieldsFunc { // Static - some static value func Static(val string) FieldsFunc { - return func(args map[string]string) (Arg, error) { + return func(_ map[string]string) (Arg, error) { return Arg{Command: val}, nil } } @@ -100,7 +100,7 @@ func KeyFormat(key string, format string) FieldsFunc { } // OthersKeyValues - get all the key values -func OthersKeyValues(ignoreFileKeys ...string) FieldsFunc { +func OthersKeyValues(_ ...string) FieldsFunc { return func(args map[string]string) (out Arg, err error) { if args == nil { return out, fmt.Errorf("args is nil") diff --git a/pkg/utils/miniojob/types.go b/pkg/utils/miniojob/types.go index 7f3fd709dcb..d541a7d9d2e 100644 --- a/pkg/utils/miniojob/types.go +++ b/pkg/utils/miniojob/types.go @@ -38,8 +38,6 @@ const ( MinioJobName = "job.min.io/job-name" // MinioJobCRName - job cr name MinioJobCRName = "job.min.io/job-cr-name" - // CommandFilePath - command file path - CommandFilePath = "/temp" // MinioJobPhaseError - error MinioJobPhaseError = "Error" // MinioJobPhaseSuccess - Success @@ -120,7 +118,7 @@ func (jobCommand *MinIOIntervalJobCommand) Success() bool { } // createJob - create job -func (jobCommand *MinIOIntervalJobCommand) createJob(ctx context.Context, k8sClient client.Client, jobCR *v1alpha1.MinIOJob, stsPort int) (objs []client.Object) { +func (jobCommand *MinIOIntervalJobCommand) createJob(_ context.Context, _ client.Client, jobCR *v1alpha1.MinIOJob, stsPort int) (objs []client.Object) { if jobCommand == nil { return nil } @@ -264,7 +262,7 @@ type MinIOIntervalJob struct { } // GetMinioJobStatus - get job status -func (intervalJob *MinIOIntervalJob) GetMinioJobStatus(ctx context.Context) v1alpha1.MinIOJobStatus { +func (intervalJob *MinIOIntervalJob) GetMinioJobStatus(_ context.Context) v1alpha1.MinIOJobStatus { status := v1alpha1.MinIOJobStatus{} failed := false running := false diff --git a/pkg/utils/parity.go b/pkg/utils/parity.go deleted file mode 100644 index a5ddc5888fa..00000000000 --- a/pkg/utils/parity.go +++ /dev/null @@ -1,219 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package utils - -import ( - "errors" - "fmt" - "sort" - - "github.com/minio/pkg/ellipses" -) - -// This file implements and supports ellipses pattern for -// `minio server` command line arguments. - -// Supported set sizes this is used to find the optimal -// single set size. -var setSizes = []uint64{4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16} - -// getDivisibleSize - returns a greatest common divisor of -// all the ellipses sizes. -func getDivisibleSize(totalSizes []uint64) (result uint64) { - gcd := func(x, y uint64) uint64 { - for y != 0 { - x, y = y, x%y - } - return x - } - result = totalSizes[0] - for i := 1; i < len(totalSizes); i++ { - result = gcd(result, totalSizes[i]) - } - return result -} - -// isValidSetSize - checks whether given count is a valid set size for erasure coding. -var isValidSetSize = func(count uint64) bool { - return (count >= setSizes[0] && count <= setSizes[len(setSizes)-1]) -} - -// possibleSetCountsWithSymmetry returns symmetrical setCounts based on the -// input argument patterns, the symmetry calculation is to ensure that -// we also use uniform number of drives common across all ellipses patterns. -func possibleSetCountsWithSymmetry(setCounts []uint64, argPatterns []ellipses.ArgPattern) []uint64 { - newSetCounts := make(map[uint64]struct{}) - for _, ss := range setCounts { - var symmetry bool - for _, argPattern := range argPatterns { - for _, p := range argPattern { - if uint64(len(p.Seq)) > ss { - symmetry = uint64(len(p.Seq))%ss == 0 - } else { - symmetry = ss%uint64(len(p.Seq)) == 0 - } - } - } - // With no arg patterns, it is expected that user knows - // the right symmetry, so either ellipses patterns are - // provided (recommended) or no ellipses patterns. - if _, ok := newSetCounts[ss]; !ok && (symmetry || argPatterns == nil) { - newSetCounts[ss] = struct{}{} - } - } - - setCounts = []uint64{} - for setCount := range newSetCounts { - setCounts = append(setCounts, setCount) - } - - // Not necessarily needed but it ensures to the readers - // eyes that we prefer a sorted setCount slice for the - // subsequent function to figure out the right common - // divisor, it avoids loops. - sort.Slice(setCounts, func(i, j int) bool { - return setCounts[i] < setCounts[j] - }) - - return setCounts -} - -func commonSetDriveCount(divisibleSize uint64, setCounts []uint64) (setSize uint64) { - // prefers setCounts to be sorted for optimal behavior. - if divisibleSize < setCounts[len(setCounts)-1] { - return divisibleSize - } - - // Figure out largest value of total_drives_in_erasure_set which results - // in least number of total_drives/total_drives_erasure_set ratio. - prevD := divisibleSize / setCounts[0] - for _, cnt := range setCounts { - if divisibleSize%cnt == 0 { - d := divisibleSize / cnt - if d <= prevD { - prevD = d - setSize = cnt - } - } - } - return setSize -} - -// getSetIndexes returns list of indexes which provides the set size -// on each index, this function also determines the final set size -// The final set size has the affinity towards choosing smaller -// indexes (total sets) -func getSetIndexes(args []string, totalSizes []uint64, argPatterns []ellipses.ArgPattern) (setIndexes [][]uint64, err error) { - if len(totalSizes) == 0 || len(args) == 0 { - return nil, errors.New("invalid argument") - } - - setIndexes = make([][]uint64, len(totalSizes)) - for _, totalSize := range totalSizes { - // Check if totalSize has minimum range upto setSize - if totalSize < setSizes[0] { - return nil, fmt.Errorf("incorrect number of endpoints provided %s", args) - } - } - - commonSize := getDivisibleSize(totalSizes) - possibleSetCounts := func(setSize uint64) (ss []uint64) { - for _, s := range setSizes { - if setSize%s == 0 { - ss = append(ss, s) - } - } - return ss - } - - setCounts := possibleSetCounts(commonSize) - if len(setCounts) == 0 { - err = fmt.Errorf("incorrect number of endpoints provided %s, number of disks %d is not divisible by any supported erasure set sizes %d", args, commonSize, setSizes) - return nil, err - } - - // Returns possible set counts with symmetry. - setCounts = possibleSetCountsWithSymmetry(setCounts, argPatterns) - if len(setCounts) == 0 { - err = fmt.Errorf("no symmetric distribution detected with input endpoints provided %s, disks %d cannot be spread symmetrically by any supported erasure set sizes %d", args, commonSize, setSizes) - return nil, err - } - - // Final set size with all the symmetry accounted for. - setSize := commonSetDriveCount(commonSize, setCounts) - - // Check whether setSize is with the supported range. - if !isValidSetSize(setSize) { - err = fmt.Errorf("incorrect number of endpoints provided %s, number of disks %d is not divisible by any supported erasure set sizes %d", args, commonSize, setSizes) - return nil, err - } - - for i := range totalSizes { - for j := uint64(0); j < totalSizes[i]/setSize; j++ { - setIndexes[i] = append(setIndexes[i], setSize) - } - } - - return setIndexes, nil -} - -// Return the total size for each argument patterns. -func getTotalSizes(argPatterns []ellipses.ArgPattern) []uint64 { - var totalSizes []uint64 - for _, argPattern := range argPatterns { - var totalSize uint64 = 1 - for _, p := range argPattern { - totalSize *= uint64(len(p.Seq)) - } - totalSizes = append(totalSizes, totalSize) - } - return totalSizes -} - -// PossibleParityValues returns possible parities for input args, -// parties are calculated in uniform manner for one pool or -// multiple pools, ensuring that parities returned are common -// and applicable across all pools. -func PossibleParityValues(args ...string) ([]string, error) { - setIndexes, err := parseEndpointSet(args...) - if err != nil { - return nil, err - } - maximumParity := setIndexes[0][0] / 2 - var parities []string - for maximumParity >= 2 { - parities = append(parities, fmt.Sprintf("EC:%d", maximumParity)) - maximumParity-- - } - return parities, nil -} - -// Parses all arguments and returns an endpointSet which is a collection -// of endpoints following the ellipses pattern, this is what is used -// by the object layer for initializing itself. -func parseEndpointSet(args ...string) (setIndexes [][]uint64, err error) { - argPatterns := make([]ellipses.ArgPattern, len(args)) - for i, arg := range args { - patterns, err := ellipses.FindEllipsesPatterns(arg) - if err != nil { - return nil, err - } - argPatterns[i] = patterns - } - - return getSetIndexes(args, getTotalSizes(argPatterns), argPatterns) -} diff --git a/pkg/utils/parity_test.go b/pkg/utils/parity_test.go deleted file mode 100644 index 9d5539c9866..00000000000 --- a/pkg/utils/parity_test.go +++ /dev/null @@ -1,293 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package utils - -import ( - "reflect" - "testing" - - "github.com/minio/pkg/ellipses" -) - -func TestGetDivisibleSize(t *testing.T) { - testCases := []struct { - totalSizes []uint64 - result uint64 - }{ - {[]uint64{24, 32, 16}, 8}, - {[]uint64{32, 8, 4}, 4}, - {[]uint64{8, 8, 8}, 8}, - {[]uint64{24}, 24}, - } - - for _, testCase := range testCases { - testCase := testCase - t.Run("", func(t *testing.T) { - gotGCD := getDivisibleSize(testCase.totalSizes) - if testCase.result != gotGCD { - t.Errorf("Expected %v, got %v", testCase.result, gotGCD) - } - }) - } -} - -// Test tests calculating set indexes. -func TestGetSetIndexes(t *testing.T) { - testCases := []struct { - args []string - totalSizes []uint64 - indexes [][]uint64 - success bool - }{ - // Invalid inputs. - { - []string{"data{1...3}"}, - []uint64{3}, - nil, - false, - }, - { - []string{"data/controller1/export{1...2}, data/controller2/export{1...4}, data/controller3/export{1...8}"}, - []uint64{2, 4, 8}, - nil, - false, - }, - { - []string{"data{1...17}/export{1...52}"}, - []uint64{14144}, - nil, - false, - }, - // Valid inputs. - { - []string{"data{1...27}"}, - []uint64{27}, - [][]uint64{{9, 9, 9}}, - true, - }, - { - []string{"http://host{1...3}/data{1...180}"}, - []uint64{540}, - [][]uint64{{15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15}}, - true, - }, - { - []string{"http://host{1...2}.rack{1...4}/data{1...180}"}, - []uint64{1440}, - [][]uint64{{16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16}}, - true, - }, - { - []string{"http://host{1...2}/data{1...180}"}, - []uint64{360}, - [][]uint64{{12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}}, - true, - }, - { - []string{"data/controller1/export{1...4}, data/controller2/export{1...8}, data/controller3/export{1...12}"}, - []uint64{4, 8, 12}, - [][]uint64{{4}, {4, 4}, {4, 4, 4}}, - true, - }, - { - []string{"data{1...64}"}, - []uint64{64}, - [][]uint64{{16, 16, 16, 16}}, - true, - }, - { - []string{"data{1...24}"}, - []uint64{24}, - [][]uint64{{12, 12}}, - true, - }, - { - []string{"data/controller{1...11}/export{1...8}"}, - []uint64{88}, - [][]uint64{{11, 11, 11, 11, 11, 11, 11, 11}}, - true, - }, - { - []string{"data{1...4}"}, - []uint64{4}, - [][]uint64{{4}}, - true, - }, - { - []string{"data/controller1/export{1...10}, data/controller2/export{1...10}, data/controller3/export{1...10}"}, - []uint64{10, 10, 10}, - [][]uint64{{10}, {10}, {10}}, - true, - }, - { - []string{"data{1...16}/export{1...52}"}, - []uint64{832}, - [][]uint64{{16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16}}, - true, - }, - } - - for _, testCase := range testCases { - testCase := testCase - t.Run("", func(t *testing.T) { - argPatterns := make([]ellipses.ArgPattern, len(testCase.args)) - for i, arg := range testCase.args { - patterns, err := ellipses.FindEllipsesPatterns(arg) - if err != nil { - t.Fatalf("Unexpected failure %s", err) - } - argPatterns[i] = patterns - } - gotIndexes, err := getSetIndexes(testCase.args, testCase.totalSizes, argPatterns) - if err != nil && testCase.success { - t.Errorf("Expected success but failed instead %s", err) - } - if err == nil && !testCase.success { - t.Errorf("Expected failure but passed instead") - } - if !reflect.DeepEqual(testCase.indexes, gotIndexes) { - t.Errorf("Expected %v, got %v", testCase.indexes, gotIndexes) - } - }) - } -} - -// Test tests possible parities returned for any input args -func TestPossibleParities(t *testing.T) { - testCases := []struct { - arg string - parities []string - success bool - }{ - // Tests invalid inputs. - { - "...", - nil, - false, - }, - // No range specified. - { - "{...}", - nil, - false, - }, - // Invalid range. - { - "http://minio{2...3}/export/set{1...0}", - nil, - false, - }, - // Range cannot be smaller than 4 minimum. - { - "/export{1..2}", - nil, - false, - }, - // Unsupported characters. - { - "/export/test{1...2O}", - nil, - false, - }, - // Tests valid inputs. - { - "{1...27}", - []string{"EC:4", "EC:3", "EC:2"}, - true, - }, - { - "/export/set{1...64}", - []string{"EC:8", "EC:7", "EC:6", "EC:5", "EC:4", "EC:3", "EC:2"}, - true, - }, - // Valid input for distributed setup. - { - "http://minio{2...3}/export/set{1...64}", - []string{"EC:8", "EC:7", "EC:6", "EC:5", "EC:4", "EC:3", "EC:2"}, - true, - }, - // Supporting some advanced cases. - { - "http://minio{1...64}.mydomain.net/data", - []string{"EC:8", "EC:7", "EC:6", "EC:5", "EC:4", "EC:3", "EC:2"}, - true, - }, - { - "http://rack{1...4}.mydomain.minio{1...16}/data", - []string{"EC:8", "EC:7", "EC:6", "EC:5", "EC:4", "EC:3", "EC:2"}, - true, - }, - // Supporting kubernetes cases. - { - "http://minio{0...15}.mydomain.net/data{0...1}", - []string{"EC:8", "EC:7", "EC:6", "EC:5", "EC:4", "EC:3", "EC:2"}, - true, - }, - // No host regex, just disks. - { - "http://server1/data{1...32}", - []string{"EC:8", "EC:7", "EC:6", "EC:5", "EC:4", "EC:3", "EC:2"}, - true, - }, - // No host regex, just disks with two position numerics. - { - "http://server1/data{01...32}", - []string{"EC:8", "EC:7", "EC:6", "EC:5", "EC:4", "EC:3", "EC:2"}, - true, - }, - // More than 2 ellipses are supported as well. - { - "http://minio{2...3}/export/set{1...64}/test{1...2}", - []string{"EC:8", "EC:7", "EC:6", "EC:5", "EC:4", "EC:3", "EC:2"}, - true, - }, - // More than 1 ellipses per argument for standalone setup. - { - "/export{1...10}/disk{1...10}", - []string{"EC:5", "EC:4", "EC:3", "EC:2"}, - true, - }, - // IPv6 ellipses with hexadecimal expansion - { - "http://[2001:3984:3989::{1...a}]/disk{1...10}", - []string{"EC:5", "EC:4", "EC:3", "EC:2"}, - true, - }, - // IPv6 ellipses with hexadecimal expansion with 3 position numerics. - { - "http://[2001:3984:3989::{001...00a}]/disk{1...10}", - []string{"EC:5", "EC:4", "EC:3", "EC:2"}, - true, - }, - } - - for _, testCase := range testCases { - testCase := testCase - t.Run("", func(t *testing.T) { - gotPs, err := PossibleParityValues(testCase.arg) - if err != nil && testCase.success { - t.Errorf("Expected success but failed instead %s", err) - } - if err == nil && !testCase.success { - t.Errorf("Expected failure but passed instead") - } - if !reflect.DeepEqual(testCase.parities, gotPs) { - t.Errorf("Expected %v, got %v", testCase.parities, gotPs) - } - }) - } -} diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go index c2e287634d1..0f54705c1a6 100644 --- a/pkg/utils/utils.go +++ b/pkg/utils/utils.go @@ -18,7 +18,6 @@ package utils import ( "context" - "encoding/base64" "fmt" "os" "strings" @@ -26,7 +25,6 @@ import ( "github.com/minio/operator/pkg/common" - "github.com/google/uuid" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" @@ -36,38 +34,6 @@ import ( "k8s.io/klog/v2" ) -// NewUUID - get a random UUID. -func NewUUID() (string, error) { - u, err := uuid.NewRandom() - if err != nil { - return "", err - } - return u.String(), nil -} - -// DecodeBase64 : decoded base64 input into utf-8 text -func DecodeBase64(s string) (string, error) { - decodedInput, err := base64.StdEncoding.DecodeString(s) - if err != nil { - return "", err - } - return string(decodedInput), nil -} - -// Key used for Get/SetReqInfo -type key string - -// context keys -const ( - ContextLogKey = key("console-log") - ContextRequestID = key("request-id") - ContextRequestUserID = key("request-user-id") - ContextRequestUserAgent = key("request-user-agent") - ContextRequestHost = key("request-host") - ContextRequestRemoteAddr = key("request-remote-addr") - ContextAuditKey = key("request-audit-entry") -) - // GetOperatorRuntime Retrieves the runtime from env variable func GetOperatorRuntime() common.Runtime { envString := os.Getenv(common.OperatorRuntimeEnv) @@ -86,12 +52,12 @@ func GetOperatorRuntime() common.Runtime { func NewPodInformer(kubeClientSet kubernetes.Interface, labelSelectorString string) cache.SharedIndexInformer { return cache.NewSharedIndexInformer( &cache.ListWatch{ - ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { + ListFunc: func(_ metav1.ListOptions) (runtime.Object, error) { return kubeClientSet.CoreV1().Pods("").List(context.Background(), metav1.ListOptions{ LabelSelector: labelSelectorString, }) }, - WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { + WatchFunc: func(_ metav1.ListOptions) (watch.Interface, error) { return kubeClientSet.CoreV1().Pods("").Watch(context.Background(), metav1.ListOptions{ LabelSelector: labelSelectorString, }) diff --git a/pkg/utils/utils_test.go b/pkg/utils/utils_test.go deleted file mode 100644 index e5d02eb6d38..00000000000 --- a/pkg/utils/utils_test.go +++ /dev/null @@ -1,92 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2022 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package utils - -import "testing" - -func TestDecodeInput(t *testing.T) { - type args struct { - s string - } - tests := []struct { - name string - args args - want string - wantErr bool - }{ - { - name: "chinese characters", - args: args{ - s: "5bCP6aO85by+5bCP6aO85by+5bCP6aO85by+L+Wwj+mjvOW8vuWwj+mjvOW8vuWwj+mjvOW8vg==", - }, - want: "小飼弾小飼弾小飼弾/小飼弾小飼弾小飼弾", - wantErr: false, - }, - { - name: "spaces and & symbol", - args: args{ - s: "YSBhIC0gYSBhICYgYSBhIC0gYSBhIGE=", - }, - want: "a a - a a & a a - a a a", - wantErr: false, - }, - { - name: "the infamous fly me to the moon", - args: args{ - s: "MDIlMjAtJTIwRkxZJTIwTUUlMjBUTyUyMFRIRSUyME1PT04lMjA=", - }, - want: "02%20-%20FLY%20ME%20TO%20THE%20MOON%20", - wantErr: false, - }, - { - name: "random symbols", - args: args{ - s: "IUAjJCVeJiooKV8r", - }, - want: "!@#$%^&*()_+", - wantErr: false, - }, - { - name: "name with / symbols", - args: args{ - s: "dGVzdC90ZXN0Mi/lsI/po7zlvL7lsI/po7zlvL7lsI/po7zlvL4uanBn", - }, - want: "test/test2/小飼弾小飼弾小飼弾.jpg", - wantErr: false, - }, - { - name: "decoding fails", - args: args{ - s: "this should fail", - }, - want: "", - wantErr: true, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got, err := DecodeBase64(tt.args.s) - if (err != nil) != tt.wantErr { - t.Errorf("DecodeBase64() error = %v, wantErr %v", err, tt.wantErr) - return - } - if got != tt.want { - t.Errorf("DecodeBase64() got = %v, want %v", got, tt.want) - } - }) - } -} diff --git a/pkg/utils/version.go b/pkg/utils/version.go deleted file mode 100644 index 2772b1aa1d5..00000000000 --- a/pkg/utils/version.go +++ /dev/null @@ -1,52 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2022 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package utils - -import ( - "errors" - "fmt" - "io/ioutil" - "regexp" - - "github.com/minio/operator/pkg/http" -) - -// ErrCantDetermineMinIOImage when not able to find MinIO version -var ErrCantDetermineMinIOImage = errors.New("can't determine MinIO Image") - -// GetLatestMinIOImage returns the latest docker image for MinIO if found on the internet -func GetLatestMinIOImage(client http.ClientI) (*string, error) { - resp, err := client.Get("https://dl.min.io/server/minio/release/linux-amd64/") - if err != nil { - return nil, err - } - defer resp.Body.Close() - - body, err := ioutil.ReadAll(resp.Body) - if err != nil { - return nil, err - } - re := regexp.MustCompile(`minio\.(RELEASE.*?Z)"`) - // look for a single match - matches := re.FindAllStringSubmatch(string(body), 1) - for i := range matches { - release := matches[i][1] - dockerImage := fmt.Sprintf("minio/minio:%s", release) - return &dockerImage, nil - } - return nil, ErrCantDetermineMinIOImage -} diff --git a/resources/assets.go b/resources/assets.go deleted file mode 100644 index 9fa8f0fef3f..00000000000 --- a/resources/assets.go +++ /dev/null @@ -1,27 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package resources - -import "embed" - -//go:embed * -var fs embed.FS - -// GetStaticResources returns the fs with the embedded assets -func GetStaticResources() embed.FS { - return fs -} diff --git a/resources/base/console-ui.yaml b/resources/base/console-ui.yaml deleted file mode 100644 index 22e2ac41b92..00000000000 --- a/resources/base/console-ui.yaml +++ /dev/null @@ -1,337 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - name: console-sa - namespace: default ---- -apiVersion: v1 -kind: Secret -metadata: - name: console-sa-secret - namespace: minio-operator - annotations: - kubernetes.io/service-account.name: console-sa -type: kubernetes.io/service-account-token ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: console-sa-role -rules: - - apiGroups: - - "" - resources: - - secrets - verbs: - - get - - watch - - create - - list - - patch - - update - - delete - - deletecollection - - apiGroups: - - "" - resources: - - namespaces - - services - - events - - resourcequotas - - nodes - verbs: - - get - - watch - - create - - list - - patch - - apiGroups: - - "" - resources: - - pods - verbs: - - get - - watch - - create - - list - - patch - - delete - - deletecollection - - apiGroups: - - "" - resources: - - persistentvolumeclaims - verbs: - - deletecollection - - list - - get - - watch - - update - - apiGroups: - - storage.k8s.io - resources: - - storageclasses - verbs: - - get - - watch - - create - - list - - patch - - apiGroups: - - apps - resources: - - statefulsets - - deployments - verbs: - - get - - create - - list - - patch - - watch - - update - - delete - - apiGroups: - - batch - resources: - - jobs - verbs: - - get - - create - - list - - patch - - watch - - update - - delete - - apiGroups: - - certificates.k8s.io - resources: - - certificatesigningrequests - - certificatesigningrequests/approval - - certificatesigningrequests/status - verbs: - - update - - create - - get - - delete - - list - - apiGroups: - - minio.min.io - resources: - - '*' - verbs: - - '*' - - apiGroups: - - min.io - resources: - - '*' - verbs: - - '*' - - apiGroups: - - "" - resources: - - persistentvolumes - verbs: - - get - - list - - watch - - create - - delete - - apiGroups: - - "" - resources: - - persistentvolumeclaims - verbs: - - get - - list - - watch - - update - - apiGroups: - - "" - resources: - - events - verbs: - - create - - list - - watch - - update - - patch - - apiGroups: - - snapshot.storage.k8s.io - resources: - - volumesnapshots - verbs: - - get - - list - - apiGroups: - - snapshot.storage.k8s.io - resources: - - volumesnapshotcontents - verbs: - - get - - list - - apiGroups: - - storage.k8s.io - resources: - - csinodes - verbs: - - get - - list - - watch - - apiGroups: - - storage.k8s.io - resources: - - volumeattachments - verbs: - - get - - list - - watch - - apiGroups: - - "" - resources: - - endpoints - verbs: - - get - - list - - watch - - create - - update - - delete - - apiGroups: - - coordination.k8s.io - resources: - - leases - verbs: - - get - - list - - watch - - create - - update - - delete - - apiGroups: - - apiextensions.k8s.io - resources: - - customresourcedefinitions - verbs: - - get - - list - - watch - - create - - update - - delete - - apiGroups: - - "" - resources: - - pod - - pods/log - verbs: - - get - - list - - watch ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: console-sa-binding -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: console-sa-role -subjects: - - kind: ServiceAccount - name: console-sa - namespace: default ---- -apiVersion: v1 -data: - CONSOLE_PORT: "9090" - CONSOLE_TLS_PORT: "9443" -kind: ConfigMap -metadata: - name: console-env ---- -apiVersion: v1 -kind: Service -metadata: - labels: - name: console - app.kubernetes.io/instance: minio-operator - app.kubernetes.io/name: operator - name: console -spec: - ports: - - name: http - port: 9090 - - name: https - port: 9443 - selector: - app: console ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: console - labels: - app.kubernetes.io/instance: minio-operator - app.kubernetes.io/name: operator -spec: - replicas: 1 - selector: - matchLabels: - app: console - template: - metadata: - labels: - app: console - app.kubernetes.io/instance: minio-operator-console - app.kubernetes.io/name: operator - spec: - containers: - - args: - - ui - - --certs-dir=/tmp/certs - image: minio/operator:v5.0.15 - imagePullPolicy: IfNotPresent - name: console - securityContext: - runAsUser: 1000 - runAsGroup: 1000 - runAsNonRoot: true - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL - seccompProfile: - type: RuntimeDefault - ports: - - containerPort: 9090 - name: http - - containerPort: 9443 - name: https - volumeMounts: - - mountPath: /tmp/certs - name: tls-certificates - - mountPath: /tmp/certs/CAs - name: tmp - volumes: - - name: tls-certificates - projected: - sources: - - secret: - items: - - key: public.crt - path: public.crt - - key: public.crt - path: CAs/public.crt - - key: private.key - path: private.key - - key: tls.crt - path: tls.crt - - key: tls.crt - path: CAs/tls.crt - - key: tls.key - path: tls.key - name: console-tls - optional: true - - name: tmp - emptyDir: { } - serviceAccountName: console-sa diff --git a/swagger.yml b/swagger.yml deleted file mode 100644 index 2cc2cc5dc3c..00000000000 --- a/swagger.yml +++ /dev/null @@ -1,3426 +0,0 @@ -swagger: "2.0" -info: - title: MinIO Operator - version: 0.1.0 -consumes: - - application/json -produces: - - application/json -schemes: - - http - - ws -basePath: /api/v1 -# We are going to be taking `Authorization: Bearer TOKEN` header for our authentication -securityDefinitions: - key: - type: oauth2 - flow: accessCode - authorizationUrl: http://min.io - tokenUrl: http://min.io -# Apply the key security definition to all APIs -security: - - key: [ ] -paths: - /login: - get: - summary: Returns login strategy, form or sso. - operationId: LoginDetail - responses: - 200: - description: A successful response. - schema: - $ref: "#/definitions/loginDetails" - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - # Exclude this API from the authentication requirement - security: [ ] - tags: - - Auth - /login/operator: - post: - summary: Login to Operator Console. - operationId: LoginOperator - parameters: - - name: body - in: body - required: true - schema: - $ref: "#/definitions/loginOperatorRequest" - responses: - 204: - description: A successful login. - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - security: [ ] - tags: - - Auth - - /login/oauth2/auth: - post: - summary: Identity Provider oauth2 callback endpoint. - operationId: LoginOauth2Auth - parameters: - - name: body - in: body - required: true - schema: - $ref: "#/definitions/loginOauth2AuthRequest" - responses: - 204: - description: A successful login. - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - security: [ ] - tags: - - Auth - - /logout: - post: - summary: Logout from Operator. - operationId: Logout - responses: - 200: - description: A successful response. - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - Auth - - /session: - get: - summary: Endpoint to check if your session is still valid - operationId: SessionCheck - responses: - 200: - description: A successful response. - schema: - $ref: "#/definitions/operatorSessionResponse" - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - Auth - - /check-version: - get: - summary: Checks the current Operator version against the latest - operationId: CheckMinIOVersion” - responses: - 200: - description: A successful response. - schema: - $ref: "#/definitions/checkOperatorVersionResponse" - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - security: [ ] - tags: - - UserAPI - - /subscription/info: - get: - summary: Subscription info - operationId: SubscriptionInfo - responses: - 200: - description: A successful response. - schema: - $ref: "#/definitions/license" - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - - /subscription/validate: - post: - summary: Validates subscription license - operationId: SubscriptionValidate - parameters: - - name: body - in: body - required: true - schema: - $ref: "#/definitions/subscriptionValidateRequest" - responses: - 200: - description: A successful response. - schema: - $ref: "#/definitions/license" - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - - /subscription/refresh: - post: - summary: Refresh existing subscription license - operationId: SubscriptionRefresh - responses: - 200: - description: A successful response. - schema: - $ref: "#/definitions/license" - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - - /subscription/namespaces/{namespace}/tenants/{tenant}/activate: - post: - summary: Activate a particular tenant using the existing subscription license - operationId: SubscriptionActivate - parameters: - - name: namespace - in: path - required: true - type: string - - name: tenant - in: path - required: true - type: string - responses: - 204: - description: A successful response. - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - - /tenants: - get: - summary: List Tenant of All Namespaces - operationId: ListAllTenants - parameters: - - name: sort_by - in: query - required: false - type: string - - name: offset - in: query - required: false - type: integer - format: int32 - - name: limit - in: query - required: false - type: integer - format: int32 - responses: - 200: - description: A successful response. - schema: - $ref: "#/definitions/listTenantsResponse" - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - post: - summary: Create Tenant - operationId: CreateTenant - parameters: - - name: body - in: body - required: true - schema: - $ref: "#/definitions/createTenantRequest" - responses: - 200: - description: A successful response. - schema: - $ref: "#/definitions/createTenantResponse" - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - - /namespace: - post: - summary: Creates a new Namespace with given information - operationId: CreateNamespace - parameters: - - name: body - in: body - required: true - schema: - $ref: "#/definitions/namespace" - responses: - 201: - description: A successful response. - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - - /namespaces/{namespace}/tenants: - get: - summary: List Tenants by Namespace - operationId: ListTenants - parameters: - - name: namespace - in: path - required: true - type: string - - name: sort_by - in: query - required: false - type: string - - name: offset - in: query - required: false - type: integer - format: int32 - - name: limit - in: query - required: false - type: integer - format: int32 - responses: - 200: - description: A successful response. - schema: - $ref: "#/definitions/listTenantsResponse" - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - - /namespaces/{namespace}/tenants/{tenant}/csr: - get: - summary: List Tenant Certificate Signing Request - operationId: ListTenantCertificateSigningRequest - parameters: - - name: namespace - in: path - required: true - type: string - - name: tenant - in: path - required: true - type: string - responses: - 200: - description: A successful response. - schema: - $ref: "#/definitions/csrElements" - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - - /namespaces/{namespace}/tenants/{tenant}/identity-provider: - get: - summary: Tenant Identity Provider - operationId: TenantIdentityProvider - parameters: - - name: namespace - in: path - required: true - type: string - - name: tenant - in: path - required: true - type: string - responses: - 200: - description: A successful response. - schema: - $ref: "#/definitions/idpConfiguration" - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - post: - summary: Update Tenant Identity Provider - operationId: UpdateTenantIdentityProvider - parameters: - - name: namespace - in: path - required: true - type: string - - name: tenant - in: path - required: true - type: string - - name: body - in: body - required: true - schema: - $ref: "#/definitions/idpConfiguration" - responses: - 204: - description: A successful response. - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - - /namespaces/{namespace}/tenants/{tenant}/set-administrators: - post: - summary: Set the consoleAdmin policy to the specified users and groups - operationId: SetTenantAdministrators - parameters: - - name: namespace - in: path - required: true - type: string - - name: tenant - in: path - required: true - type: string - - name: body - in: body - required: true - schema: - $ref: "#/definitions/setAdministratorsRequest" - responses: - 204: - description: A successful response. - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - - /namespaces/{namespace}/tenants/{tenant}/configuration: - get: - summary: Tenant Configuration - operationId: TenantConfiguration - parameters: - - name: namespace - in: path - required: true - type: string - - name: tenant - in: path - required: true - type: string - responses: - 200: - description: A successful response. - schema: - $ref: "#/definitions/tenantConfigurationResponse" - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - patch: - summary: Update Tenant Configuration - operationId: UpdateTenantConfiguration - parameters: - - name: namespace - in: path - required: true - type: string - - name: tenant - in: path - required: true - type: string - - name: body - in: body - required: true - schema: - $ref: "#/definitions/updateTenantConfigurationRequest" - responses: - 204: - description: A successful response. - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - - /namespaces/{namespace}/tenants/{tenant}/security: - get: - summary: Tenant Security - operationId: TenantSecurity - parameters: - - name: namespace - in: path - required: true - type: string - - name: tenant - in: path - required: true - type: string - responses: - 200: - description: A successful response. - schema: - $ref: "#/definitions/tenantSecurityResponse" - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - post: - summary: Update Tenant Security - operationId: UpdateTenantSecurity - parameters: - - name: namespace - in: path - required: true - type: string - - name: tenant - in: path - required: true - type: string - - name: body - in: body - required: true - schema: - $ref: "#/definitions/updateTenantSecurityRequest" - responses: - 204: - description: A successful response. - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - - - /namespaces/{namespace}/tenants/{tenant}: - get: - summary: Tenant Details - operationId: TenantDetails - parameters: - - name: namespace - in: path - required: true - type: string - - name: tenant - in: path - required: true - type: string - responses: - 200: - description: A successful response. - schema: - $ref: "#/definitions/tenant" - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - delete: - summary: Delete tenant and underlying pvcs - operationId: DeleteTenant - parameters: - - name: namespace - in: path - required: true - type: string - - name: tenant - in: path - required: true - type: string - - name: body - in: body - required: false - schema: - $ref: "#/definitions/deleteTenantRequest" - responses: - 204: - description: A successful response. - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - put: - summary: Update Tenant - operationId: UpdateTenant - parameters: - - name: namespace - in: path - required: true - type: string - - name: tenant - in: path - required: true - type: string - - name: body - in: body - required: true - schema: - $ref: "#/definitions/updateTenantRequest" - responses: - 201: - description: A successful response. - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - - /namespaces/{namespace}/tenants/{tenant}/pools: - post: - summary: Tenant Add Pool - operationId: TenantAddPool - parameters: - - name: namespace - in: path - required: true - type: string - - name: tenant - in: path - required: true - type: string - - name: body - in: body - required: true - schema: - $ref: "#/definitions/pool" - responses: - 201: - description: A successful response. - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - put: - summary: Tenant Update Pools - operationId: TenantUpdatePools - parameters: - - name: namespace - in: path - required: true - type: string - - name: tenant - in: path - required: true - type: string - - name: body - in: body - required: true - schema: - $ref: "#/definitions/poolUpdateRequest" - responses: - 200: - description: A successful response. - schema: - $ref: "#/definitions/tenant" - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - - /namespaces/{namespace}/tenants/{tenant}/pvcs: - get: - summary: List all PVCs from given Tenant - operationId: ListPVCsForTenant - parameters: - - name: namespace - in: path - required: true - type: string - - name: tenant - in: path - required: true - type: string - responses: - 200: - description: A successful response. - schema: - $ref: "#/definitions/listPVCsResponse" - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - - /namespaces/{namespace}/tenants/{tenant}/usage: - get: - summary: Get Usage For The Tenant - operationId: GetTenantUsage - parameters: - - name: namespace - in: path - required: true - type: string - - name: tenant - in: path - required: true - type: string - responses: - 200: - description: A successful response. - schema: - $ref: "#/definitions/tenantUsage" - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - - /namespaces/{namespace}/tenants/{tenant}/pods: - get: - summary: Get Pods For The Tenant - operationId: GetTenantPods - parameters: - - name: namespace - in: path - required: true - type: string - - name: tenant - in: path - required: true - type: string - responses: - 200: - description: A successful response. - schema: - type: array - items: - $ref: "#/definitions/tenantPod" - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - - /namespaces/{namespace}/tenants/{tenant}/events: - get: - summary: Get Events for given Tenant - operationId: GetTenantEvents - parameters: - - name: namespace - in: path - required: true - type: string - - name: tenant - in: path - required: true - type: string - responses: - 200: - description: A successful response. - schema: - $ref: "#/definitions/eventListWrapper" - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - - /namespaces/{namespace}/tenants/{tenant}/log-report: - get: - summary: Get Tenant Log Report - operationId: GetTenantLogReport - parameters: - - name: namespace - in: path - required: true - type: string - - name: tenant - in: path - required: true - type: string - responses: - 200: - description: A successful response. - schema: - $ref: "#/definitions/tenantLogReport" - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - - /namespaces/{namespace}/tenants/{tenant}/pods/{podName}: - get: - summary: Get Logs for Pod - operationId: GetPodLogs - parameters: - - name: namespace - in: path - required: true - type: string - - name: tenant - in: path - required: true - type: string - - name: podName - in: path - required: true - type: string - responses: - 200: - description: A successful response. - schema: - type: string - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - delete: - summary: Delete pod - operationId: DeletePod - parameters: - - name: namespace - in: path - required: true - type: string - - name: tenant - in: path - required: true - type: string - - name: podName - in: path - required: true - type: string - responses: - 204: - description: A successful response. - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - - /namespaces/{namespace}/tenants/{tenant}/pods/{podName}/events: - get: - summary: Get Events for Pod - operationId: GetPodEvents - parameters: - - name: namespace - in: path - required: true - type: string - - name: tenant - in: path - required: true - type: string - - name: podName - in: path - required: true - type: string - responses: - 200: - description: A successful response. - schema: - $ref: "#/definitions/eventListWrapper" - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - - /namespaces/{namespace}/tenants/{tenant}/pods/{podName}/describe: - get: - summary: Describe Pod - operationId: DescribePod - parameters: - - name: namespace - in: path - required: true - type: string - - name: tenant - in: path - required: true - type: string - - name: podName - in: path - required: true - type: string - responses: - 200: - description: A successful response. - schema: - $ref: "#/definitions/describePodWrapper" - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - - - /namespaces/{namespace}/tenants/{tenant}/certificates: - put: - summary: Tenant Update Certificates - operationId: TenantUpdateCertificate - parameters: - - name: namespace - in: path - required: true - type: string - - name: tenant - in: path - required: true - type: string - - name: body - in: body - required: true - schema: - $ref: "#/definitions/tlsConfiguration" - responses: - 201: - description: A successful response. - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - - /namespaces/{namespace}/tenants/{tenant}/encryption: - delete: - summary: Tenant Delete Encryption - operationId: TenantDeleteEncryption - parameters: - - name: namespace - in: path - required: true - type: string - - name: tenant - in: path - required: true - type: string - responses: - 204: - description: A successful response. - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - put: - summary: Tenant Update Encryption - operationId: TenantUpdateEncryption - parameters: - - name: namespace - in: path - required: true - type: string - - name: tenant - in: path - required: true - type: string - - name: body - in: body - required: true - schema: - $ref: "#/definitions/encryptionConfiguration" - responses: - 201: - description: A successful response. - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - - get: - summary: Tenant Encryption Info - operationId: TenantEncryptionInfo - parameters: - - name: namespace - in: path - required: true - type: string - - name: tenant - in: path - required: true - type: string - responses: - 200: - description: A successful response. - schema: - $ref: "#/definitions/encryptionConfigurationResponse" - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - - /namespaces/{namespace}/tenants/{tenant}/yaml: - get: - summary: Get the Tenant YAML - operationId: GetTenantYAML - parameters: - - name: namespace - in: path - required: true - type: string - - name: tenant - in: path - required: true - type: string - responses: - 200: - description: A successful response. - schema: - $ref: "#/definitions/tenantYAML" - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - put: - summary: Put the Tenant YAML - operationId: PutTenantYAML - parameters: - - name: namespace - in: path - required: true - type: string - - name: tenant - in: path - required: true - type: string - - name: body - in: body - required: true - schema: - $ref: "#/definitions/tenantYAML" - responses: - 201: - description: A successful response. - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - - /namespaces/{namespace}/tenants/{tenant}/domains: - put: - summary: Update Domains for a Tenant - operationId: UpdateTenantDomains - parameters: - - name: namespace - in: path - required: true - type: string - - name: tenant - in: path - required: true - type: string - - name: body - in: body - required: true - schema: - $ref: "#/definitions/updateDomainsRequest" - responses: - 204: - description: A successful response. - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - - /namespaces/{namespace}/resourcequotas/{resource-quota-name}: - get: - summary: Get Resource Quota - operationId: GetResourceQuota - parameters: - - name: namespace - in: path - required: true - type: string - - name: resource-quota-name - in: path - required: true - type: string - responses: - 200: - description: A successful response. - schema: - $ref: "#/definitions/resourceQuota" - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - - /cluster/max-allocatable-memory: - get: - summary: Get maximum allocatable memory for given number of nodes - operationId: GetMaxAllocatableMem - parameters: - - name: num_nodes - in: query - required: true - type: integer - format: int32 - minimum: 1 - responses: - 200: - description: A successful response. - schema: - $ref: "#/definitions/maxAllocatableMemResponse" - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - - /cluster/allocatable-resources: - get: - summary: Get allocatable cpu and memory for given number of nodes - operationId: GetAllocatableResources - parameters: - - name: num_nodes - in: query - required: true - type: integer - format: int32 - minimum: 1 - responses: - 200: - description: A successful response. - schema: - $ref: "#/definitions/allocatableResourcesResponse" - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - - /get-parity/{nodes}/{disksPerNode}: - get: - summary: Gets parity by sending number of nodes & number of disks - operationId: GetParity - parameters: - - name: nodes - in: path - required: true - type: integer - minimum: 2 - - name: disksPerNode - in: path - required: true - type: integer - minimum: 1 - responses: - 200: - description: A successful response. - schema: - $ref: "#/definitions/parityResponse" - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - - /list-pvcs: - get: - summary: List all PVCs from namespaces that the user has access to - operationId: ListPVCs - responses: - 200: - description: A successful response. - schema: - $ref: "#/definitions/listPVCsResponse" - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - - /mp-integration: - get: - summary: Returns email registered for marketplace integration - operationId: GetMPIntegration - responses: - 200: - description: A successful response. - schema: - type: object - properties: - isEmailSet: - type: boolean - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - post: - summary: Set email to register for marketplace integration - operationId: PostMPIntegration - parameters: - - name: body - in: body - required: true - schema: - $ref: "#/definitions/mpIntegration" - responses: - 201: - description: A successful response. - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - - /namespaces/{namespace}/tenants/{tenant}/pvc/{PVCName}: - delete: - summary: Delete PVC - operationId: DeletePVC - parameters: - - name: namespace - in: path - required: true - type: string - - name: tenant - in: path - required: true - type: string - - name: PVCName - in: path - required: true - type: string - responses: - 204: - description: A successful response. - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - - /namespaces/{namespace}/tenants/{tenant}/pvcs/{PVCName}/events: - get: - summary: Get Events for PVC - operationId: GetPVCEvents - parameters: - - name: namespace - in: path - required: true - type: string - - name: tenant - in: path - required: true - type: string - - name: PVCName - in: path - required: true - type: string - responses: - 200: - description: A successful response. - schema: - $ref: "#/definitions/eventListWrapper" - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - - /namespaces/{namespace}/tenants/{tenant}/pvcs/{PVCName}/describe: - get: - summary: Get Describe output for PVC - operationId: GetPVCDescribe - parameters: - - name: namespace - in: path - required: true - type: string - - name: tenant - in: path - required: true - type: string - - name: PVCName - in: path - required: true - type: string - responses: - 200: - description: A successful response. - schema: - $ref: "#/definitions/describePVCWrapper" - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - - /nodes/labels: - get: - summary: List node labels - operationId: ListNodeLabels - responses: - 200: - description: A successful response. - schema: - $ref: "#/definitions/nodeLabels" - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - /subnet/login: - post: - summary: Login to subnet - operationId: OperatorSubnetLogin - parameters: - - name: body - in: body - required: true - schema: - $ref: "#/definitions/operatorSubnetLoginRequest" - responses: - 200: - description: A successful response. - schema: - $ref: "#/definitions/operatorSubnetLoginResponse" - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - /subnet/login/mfa: - post: - summary: Login to subnet using mfa - operationId: OperatorSubnetLoginMFA - parameters: - - name: body - in: body - required: true - schema: - $ref: "#/definitions/operatorSubnetLoginMFARequest" - responses: - 200: - description: A successful response. - schema: - $ref: "#/definitions/operatorSubnetLoginResponse" - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - /subnet/apikey: - get: - summary: Subnet api key - operationId: OperatorSubnetApiKey - parameters: - - name: token - in: query - required: true - type: string - responses: - 200: - description: A successful response. - schema: - $ref: "#/definitions/operatorSubnetAPIKey" - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - /subnet/apikey/register: - post: - summary: Register Operator with Subnet - operationId: OperatorSubnetRegisterAPIKey - parameters: - - name: body - in: body - required: true - schema: - $ref: "#/definitions/operatorSubnetAPIKey" - responses: - 200: - description: A successful response. - schema: - $ref: "#/definitions/operatorSubnetRegisterAPIKeyResponse" - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - /subnet/apikey/info: - get: - summary: Subnet API key info - operationId: OperatorSubnetAPIKeyInfo - responses: - 200: - description: A successful response. - schema: - $ref: "#/definitions/operatorSubnetRegisterAPIKeyResponse" - default: - description: Generic error response. - schema: - $ref: "#/definitions/error" - tags: - - OperatorAPI - -definitions: - error: - type: object - required: - - message - - detailedMessage - properties: - code: - type: integer - format: int32 - message: - type: string - detailedMessage: - type: string - loginDetails: - type: object - properties: - loginStrategy: - type: string - enum: [ form, redirect, service-account, redirect-service-account ] - redirectRules: - type: array - items: - $ref: "#/definitions/redirectRule" - isK8S: - type: boolean - loginRequest: - type: object - properties: - accessKey: - type: string - secretKey: - type: string - sts: - type: string - features: - type: object - properties: - hide_menu: - type: boolean - loginOauth2AuthRequest: - type: object - required: - - state - - code - properties: - state: - type: string - code: - type: string - loginOperatorRequest: - type: object - required: - - jwt - properties: - jwt: - type: string - principal: - type: object - properties: - STSAccessKeyID: - type: string - STSSecretAccessKey: - type: string - STSSessionToken: - type: string - accountAccessKey: - type: string - hm: - type: boolean - ob: - type: boolean - customStyleOb: - type: string - loginResponse: - type: object - properties: - sessionId: - type: string - IDPRefreshToken: - type: string - operatorSessionResponse: - type: object - properties: - features: - type: array - items: - type: string - status: - type: string - enum: [ ok ] - operator: - type: boolean - permissions: - type: object - additionalProperties: - type: array - items: - type: string - - tenantStatus: - type: object - properties: - write_quorum: - type: integer - format: int32 - drives_online: - type: integer - format: int32 - drives_offline: - type: integer - format: int32 - drives_healing: - type: integer - format: int32 - health_status: - type: string - usage: - type: object - properties: - raw: - type: integer - format: int64 - raw_usage: - type: integer - format: int64 - capacity: - type: integer - format: int64 - capacity_usage: - type: integer - format: int64 - - tenantConfigurationResponse: - type: object - properties: - environmentVariables: - type: array - items: - $ref: "#/definitions/environmentVariable" - sftpExposed: - type: boolean - - updateTenantConfigurationRequest: - type: object - properties: - keysToBeDeleted: - type: array - items: - type: string - environmentVariables: - type: array - items: - $ref: "#/definitions/environmentVariable" - sftpExposed: - type: boolean - - tenantSecurityResponse: - type: object - properties: - autoCert: - type: boolean - customCertificates: - type: object - properties: - minio: - type: array - items: - $ref: "#/definitions/certificateInfo" - client: - type: array - items: - $ref: "#/definitions/certificateInfo" - minioCAs: - type: array - items: - $ref: "#/definitions/certificateInfo" - securityContext: - type: object - $ref: "#/definitions/securityContext" - - updateTenantSecurityRequest: - type: object - properties: - autoCert: - type: boolean - customCertificates: - type: object - properties: - secretsToBeDeleted: - type: array - items: - type: string - minioServerCertificates: - type: array - items: - $ref: "#/definitions/keyPairConfiguration" - minioClientCertificates: - type: array - items: - $ref: "#/definitions/keyPairConfiguration" - minioCAsCertificates: - type: array - items: - type: string - securityContext: - type: object - $ref: "#/definitions/securityContext" - - certificateInfo: - type: object - properties: - serialNumber: - type: string - name: - type: string - domains: - type: array - items: - type: string - expiry: - type: string - - tenant: - type: object - properties: - name: - type: string - creation_date: - type: string - deletion_date: - type: string - currentState: - type: string - pools: - type: array - items: - $ref: "#/definitions/pool" - image: - type: string - namespace: - type: string - total_size: - type: integer - format: int64 - subnet_license: - $ref: "#/definitions/license" - endpoints: - type: object - properties: - minio: - type: string - console: - type: string - idpAdEnabled: - type: boolean - idpOidcEnabled: - type: boolean - encryptionEnabled: - type: boolean - status: - $ref: "#/definitions/tenantStatus" - minioTLS: - type: boolean - domains: - $ref: "#/definitions/domainsConfiguration" - tiers: - type: array - items: - $ref: "#/definitions/tenantTierElement" - sftpExposed: - type: boolean - - tenantUsage: - type: object - properties: - used: - type: integer - format: int64 - disk_used: - type: integer - format: int64 - - tenantList: - type: object - properties: - name: - type: string - pool_count: - type: integer - instance_count: - type: integer - total_size: - type: integer - volume_count: - type: integer - creation_date: - type: string - deletion_date: - type: string - currentState: - type: string - namespace: - type: string - health_status: - type: string - capacity_raw: - type: integer - format: int64 - capacity_raw_usage: - type: integer - format: int64 - capacity: - type: integer - format: int64 - capacity_usage: - type: integer - format: int64 - tiers: - type: array - items: - $ref: "#/definitions/tenantTierElement" - domains: - type: object - $ref: "#/definitions/domainsConfiguration" - - listTenantsResponse: - type: object - properties: - tenants: - type: array - items: - $ref: "#/definitions/tenantList" - title: list of resulting tenants - total: - type: integer - format: int64 - title: number of tenants accessible to tenant user - - updateTenantRequest: - type: object - properties: - image: - type: string - pattern: "^((.*?)/(.*?):(.+))$" - image_registry: - $ref: "#/definitions/imageRegistry" - image_pull_secret: - type: string - sftpExposed: - type: boolean - - imageRegistry: - type: object - required: - - registry - - username - - password - properties: - registry: - type: string - username: - type: string - password: - type: string - - csrElements: - type: object - properties: - csrElement: - type: array - items: - $ref: "#/definitions/csrElement" - - csrElement: - type: object - properties: - status: - type: string - name: - type: string - generate_name: - type: string - namespace: - type: string - resource_version: - type: string - generation: - type: integer - format: int64 - deletion_grace_period_seconds: - type: integer - format: int64 - annotations: - type: array - items: - $ref: "#/definitions/annotation" - - createTenantRequest: - type: object - required: - - name - - namespace - - pools - properties: - name: - type: string - pattern: "^[a-z0-9-]{3,63}$" - image: - type: string - pools: - type: array - items: - $ref: "#/definitions/pool" - mount_path: - type: string - access_key: - type: string - secret_key: - type: string - enable_console: - type: boolean - default: true - enable_tls: - type: boolean - default: true - namespace: - type: string - erasureCodingParity: - type: integer - annotations: - type: object - additionalProperties: - type: string - labels: - type: object - additionalProperties: - type: string - image_registry: - $ref: "#/definitions/imageRegistry" - image_pull_secret: - type: string - idp: - type: object - $ref: "#/definitions/idpConfiguration" - tls: - type: object - $ref: "#/definitions/tlsConfiguration" - encryption: - type: object - $ref: "#/definitions/encryptionConfiguration" - expose_minio: - type: boolean - expose_console: - type: boolean - expose_sftp: - type: boolean - domains: - type: object - $ref: "#/definitions/domainsConfiguration" - environmentVariables: - type: array - items: - $ref: "#/definitions/environmentVariable" - - metadataFields: - type: object - properties: - annotations: - type: object - additionalProperties: - type: string - labels: - type: object - additionalProperties: - type: string - node_selector: - type: object - additionalProperties: - type: string - - keyPairConfiguration: - type: object - required: - - crt - - key - properties: - crt: - type: string - key: - type: string - - tlsConfiguration: - type: object - properties: - minioServerCertificates: - type: array - items: - $ref: "#/definitions/keyPairConfiguration" - minioClientCertificates: - type: array - items: - $ref: "#/definitions/keyPairConfiguration" - minioCAsCertificates: - type: array - items: - type: string - - - setAdministratorsRequest: - type: object - properties: - user_dns: - type: array - items: - type: string - group_dns: - type: array - items: - type: string - - idpConfiguration: - type: object - properties: - oidc: - type: object - required: - - configuration_url - - client_id - - secret_id - - claim_name - properties: - configuration_url: - type: string - client_id: - type: string - secret_id: - type: string - callback_url: - type: string - claim_name: - type: string - scopes: - type: string - keys: - type: array - items: - type: object - required: - - access_key - - secret_key - properties: - access_key: - type: string - secret_key: - type: string - active_directory: - type: object - required: - - url - - lookup_bind_dn - properties: - url: - type: string - group_search_base_dn: - type: string - group_search_filter: - type: string - skip_tls_verification: - type: boolean - server_insecure: - type: boolean - server_start_tls: - type: boolean - lookup_bind_dn: - type: string - lookup_bind_password: - type: string - user_dn_search_base_dn: - type: string - user_dn_search_filter: - type: string - user_dns: - type: array - items: - type: string - - encryptionConfiguration: - allOf: - - $ref: "#/definitions/metadataFields" - - type: object - properties: - raw: - type: string - image: - type: string - replicas: - type: string - secretsToBeDeleted: - type: array - items: - type: string - server_tls: - type: object - $ref: "#/definitions/keyPairConfiguration" - minio_mtls: - type: object - $ref: "#/definitions/keyPairConfiguration" - kms_mtls: - type: object - properties: - key: - type: string - crt: - type: string - ca: - type: string - policies: - type: object - gemalto: - type: object - $ref: "#/definitions/gemaltoConfiguration" - aws: - type: object - $ref: "#/definitions/awsConfiguration" - vault: - type: object - $ref: "#/definitions/vaultConfiguration" - gcp: - type: object - $ref: "#/definitions/gcpConfiguration" - azure: - type: object - $ref: "#/definitions/azureConfiguration" - securityContext: - type: object - $ref: "#/definitions/securityContext" - - encryptionConfigurationResponse: - allOf: - - $ref: "#/definitions/metadataFields" - - type: object - properties: - raw: - type: string - policies: - type: object - image: - type: string - replicas: - type: string - server_tls: - type: object - $ref: "#/definitions/certificateInfo" - minio_mtls: - type: object - $ref: "#/definitions/certificateInfo" - kms_mtls: - type: object - properties: - crt: - type: object - $ref: "#/definitions/certificateInfo" - ca: - type: object - $ref: "#/definitions/certificateInfo" - gemalto: - type: object - $ref: "#/definitions/gemaltoConfigurationResponse" - aws: - type: object - $ref: "#/definitions/awsConfiguration" - vault: - type: object - $ref: "#/definitions/vaultConfigurationResponse" - gcp: - type: object - $ref: "#/definitions/gcpConfiguration" - azure: - type: object - $ref: "#/definitions/azureConfiguration" - securityContext: - type: object - $ref: "#/definitions/securityContext" - - vaultConfiguration: - type: object - required: - - endpoint - - approle - properties: - endpoint: - type: string - engine: - type: string - namespace: - type: string - prefix: - type: string - approle: - type: object - required: - - id - - secret - properties: - engine: - type: string - id: - type: string - secret: - type: string - retry: - type: integer - format: int64 - status: - type: object - properties: - ping: - type: integer - format: int64 - - vaultConfigurationResponse: - type: object - required: - - endpoint - - approle - properties: - endpoint: - type: string - engine: - type: string - namespace: - type: string - prefix: - type: string - approle: - type: object - required: - - id - - secret - properties: - engine: - type: string - id: - type: string - secret: - type: string - retry: - type: integer - format: int64 - status: - type: object - properties: - ping: - type: integer - format: int64 - - awsConfiguration: - type: object - required: - - secretsmanager - properties: - secretsmanager: - type: object - required: - - endpoint - - region - - credentials - properties: - endpoint: - type: string - region: - type: string - kmskey: - type: string - credentials: - type: object - required: - - accesskey - - secretkey - properties: - accesskey: - type: string - secretkey: - type: string - token: - type: string - - gemaltoConfiguration: - type: object - required: - - keysecure - properties: - keysecure: - type: object - required: - - endpoint - - credentials - properties: - endpoint: - type: string - credentials: - type: object - required: - - token - - domain - properties: - token: - type: string - domain: - type: string - retry: - type: integer - format: int64 - - gemaltoConfigurationResponse: - type: object - required: - - keysecure - properties: - keysecure: - type: object - required: - - endpoint - - credentials - properties: - endpoint: - type: string - credentials: - type: object - required: - - token - - domain - properties: - token: - type: string - domain: - type: string - retry: - type: integer - format: int64 - - gcpConfiguration: - type: object - required: - - secretmanager - properties: - secretmanager: - type: object - required: - - project_id - properties: - project_id: - type: string - endpoint: - type: string - credentials: - type: object - properties: - client_email: - type: string - client_id: - type: string - private_key_id: - type: string - private_key: - type: string - - azureConfiguration: - type: object - required: - - keyvault - properties: - keyvault: - type: object - required: - - endpoint - properties: - endpoint: - type: string - credentials: - type: object - required: - - tenant_id - - client_id - - client_secret - properties: - tenant_id: - type: string - client_id: - type: string - client_secret: - type: string - - createTenantResponse: - type: object - properties: - externalIDP: - type: boolean - console: - type: array - items: - $ref: "#/definitions/tenantResponseItem" - - tenantResponseItem: - type: object - properties: - access_key: - type: string - secret_key: - type: string - url: - type: string - - tenantPod: - type: object - required: - - name - properties: - name: - type: string - status: - type: string - timeCreated: - type: integer - podIP: - type: string - restarts: - type: integer - node: - type: string - - pool: - type: object - required: - - servers - - volumes_per_server - - volume_configuration - properties: - name: - type: string - servers: - type: integer - volumes_per_server: - type: integer - format: int32 - volume_configuration: - type: object - required: - - size - properties: - size: - type: integer - storage_class_name: - type: string - labels: - type: object - additionalProperties: - type: string - annotations: - type: object - additionalProperties: - type: string - resources: - $ref: "#/definitions/poolResources" - node_selector: - type: object - additionalProperties: - type: string - description: "NodeSelector is a selector which must be true for - the pod to fit on a node. Selector which must match a node's - labels for the pod to be scheduled on that node. More info: - https://kubernetes.io/docs/concepts/configuration/assign-pod-node/" - affinity: - $ref: "#/definitions/poolAffinity" - runtimeClassName: - type: string - tolerations: - $ref: "#/definitions/poolTolerations" - securityContext: - type: object - $ref: "#/definitions/securityContext" - - poolTolerations: - description: Tolerations allows users to set entries like effect, - key, operator, value. - items: - description: The pod this Toleration is attached to tolerates - any taint that matches the triple using - the matching operator . - properties: - effect: - description: Effect indicates the taint effect to match. - Empty means match all taint effects. When specified, allowed - values are NoSchedule, PreferNoSchedule and NoExecute. - type: string - key: - description: Key is the taint key that the toleration applies - to. Empty means match all taint keys. If the key is empty, - operator must be Exists; this combination means to match - all values and all keys. - type: string - operator: - description: Operator represents a key's relationship to - the value. Valid operators are Exists and Equal. Defaults - to Equal. Exists is equivalent to wildcard for value, - so that a pod can tolerate all taints of a particular - category. - type: string - tolerationSeconds: - $ref: "#/definitions/poolTolerationSeconds" - value: - description: Value is the taint value the toleration matches - to. If the operator is Exists, the value should be empty, - otherwise just a regular string. - type: string - type: object - type: array - - poolTolerationSeconds: - description: TolerationSeconds represents the period of - time the toleration (which must be of effect NoExecute, - otherwise this field is ignored) tolerates the taint. - By default, it is not set, which means tolerate the taint - forever (do not evict). Zero and negative values will - be treated as 0 (evict immediately) by the system. - type: object - required: - - seconds - properties: - seconds: - type: integer - format: int64 - - poolResources: - description: If provided, use these requests and limit for cpu/memory - resource allocation - properties: - limits: - additionalProperties: - type: integer - format: int64 - description: "Limits describes the maximum amount of compute - resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/" - type: object - requests: - additionalProperties: - type: integer - format: int64 - description: "Requests describes the minimum amount of compute - resources required. If Requests is omitted for a container, - it defaults to Limits if that is explicitly specified, otherwise - to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/" - type: object - type: object - - poolAffinity: - description: If specified, affinity will define the pod's scheduling - constraints - properties: - nodeAffinity: - description: Describes node affinity scheduling rules for - the pod. - properties: - preferredDuringSchedulingIgnoredDuringExecution: - description: The scheduler will prefer to schedule pods - to nodes that satisfy the affinity expressions specified - by this field, but it may choose a node that violates - one or more of the expressions. The node that is most - preferred is the one with the greatest sum of weights, - i.e. for each node that meets all of the scheduling - requirements (resource request, requiredDuringScheduling - affinity expressions, etc.), compute a sum by iterating - through the elements of this field and adding "weight" - to the sum if the node matches the corresponding matchExpressions; - the node(s) with the highest sum are the most preferred. - items: - description: An empty preferred scheduling term matches - all objects with implicit weight 0 (i.e. it's a no-op). - A null preferred scheduling term matches no objects - (i.e. is also a no-op). - properties: - preference: - description: A node selector term, associated with - the corresponding weight. - $ref: "#/definitions/nodeSelectorTerm" - type: object - weight: - description: Weight associated with matching the - corresponding nodeSelectorTerm, in the range 1-100. - format: int32 - type: integer - required: - - preference - - weight - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - description: If the affinity requirements specified by - this field are not met at scheduling time, the pod will - not be scheduled onto the node. If the affinity requirements - specified by this field cease to be met at some point - during pod execution (e.g. due to an update), the system - may or may not try to eventually evict the pod from - its node. - properties: - nodeSelectorTerms: - description: Required. A list of node selector terms. - The terms are ORed. - items: - $ref: "#/definitions/nodeSelectorTerm" - type: array - required: - - nodeSelectorTerms - type: object - type: object - podAffinity: - description: Describes pod affinity scheduling rules (e.g. - co-locate this pod in the same node, pool, etc. as some - other pod(s)). - properties: - preferredDuringSchedulingIgnoredDuringExecution: - description: The scheduler will prefer to schedule pods - to nodes that satisfy the affinity expressions specified - by this field, but it may choose a node that violates - one or more of the expressions. The node that is most - preferred is the one with the greatest sum of weights, - i.e. for each node that meets all of the scheduling - requirements (resource request, requiredDuringScheduling - affinity expressions, etc.), compute a sum by iterating - through the elements of this field and adding "weight" - to the sum if the node has pods which matches the corresponding - podAffinityTerm; the node(s) with the highest sum are - the most preferred. - items: - description: - The weights of all of the matched WeightedPodAffinityTerm - fields are added per-node to find the most preferred - node(s) - properties: - podAffinityTerm: - $ref: "#/definitions/podAffinityTerm" - weight: - description: weight associated with matching the - corresponding podAffinityTerm, in the range 1-100. - format: int32 - type: integer - required: - - podAffinityTerm - - weight - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - description: If the affinity requirements specified by - this field are not met at scheduling time, the pod will - not be scheduled onto the node. If the affinity requirements - specified by this field cease to be met at some point - during pod execution (e.g. due to a pod label update), - the system may or may not try to eventually evict the - pod from its node. When there are multiple elements, - the lists of nodes corresponding to each podAffinityTerm - are intersected, i.e. all terms must be satisfied. - items: - $ref: "#/definitions/podAffinityTerm" - type: array - type: object - podAntiAffinity: - description: Describes pod anti-affinity scheduling rules - (e.g. avoid putting this pod in the same node, pool, etc. - as some other pod(s)). - properties: - preferredDuringSchedulingIgnoredDuringExecution: - description: The scheduler will prefer to schedule pods - to nodes that satisfy the anti-affinity expressions - specified by this field, but it may choose a node that - violates one or more of the expressions. The node that - is most preferred is the one with the greatest sum of - weights, i.e. for each node that meets all of the scheduling - requirements (resource request, requiredDuringScheduling - anti-affinity expressions, etc.), compute a sum by iterating - through the elements of this field and adding "weight" - to the sum if the node has pods which matches the corresponding - podAffinityTerm; the node(s) with the highest sum are - the most preferred. - items: - description: - The weights of all of the matched WeightedPodAffinityTerm - fields are added per-node to find the most preferred - node(s) - properties: - podAffinityTerm: - $ref: "#/definitions/podAffinityTerm" - weight: - description: weight associated with matching the - corresponding podAffinityTerm, in the range 1-100. - format: int32 - type: integer - required: - - podAffinityTerm - - weight - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - description: If the anti-affinity requirements specified - by this field are not met at scheduling time, the pod - will not be scheduled onto the node. If the anti-affinity - requirements specified by this field cease to be met - at some point during pod execution (e.g. due to a pod - label update), the system may or may not try to eventually - evict the pod from its node. When there are multiple - elements, the lists of nodes corresponding to each podAffinityTerm - are intersected, i.e. all terms must be satisfied. - items: - $ref: "#/definitions/podAffinityTerm" - type: array - type: object - type: object - - nodeSelectorTerm: - type: object - description: A null or empty node selector term - matches no objects. The requirements of them are - ANDed. The TopologySelectorTerm type implements - a subset of the NodeSelectorTerm. - properties: - matchExpressions: - description: A list of node selector requirements - by node's labels. - items: - description: A node selector requirement is - a selector that contains values, a key, - and an operator that relates the key and - values. - properties: - key: - description: The label key that the selector - applies to. - type: string - operator: - description: Represents a key's relationship - to a set of values. Valid operators - are In, NotIn, Exists, DoesNotExist. - Gt, and Lt. - type: string - values: - description: An array of string values. - If the operator is In or NotIn, the - values array must be non-empty. If the - operator is Exists or DoesNotExist, - the values array must be empty. If the - operator is Gt or Lt, the values array - must have a single element, which will - be interpreted as an integer. This array - is replaced during a strategic merge - patch. - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchFields: - description: A list of node selector requirements - by node's fields. - items: - description: A node selector requirement is - a selector that contains values, a key, - and an operator that relates the key and - values. - properties: - key: - description: The label key that the selector - applies to. - type: string - operator: - description: Represents a key's relationship - to a set of values. Valid operators - are In, NotIn, Exists, DoesNotExist. - Gt, and Lt. - type: string - values: - description: An array of string values. - If the operator is In or NotIn, the - values array must be non-empty. If the - operator is Exists or DoesNotExist, - the values array must be empty. If the - operator is Gt or Lt, the values array - must have a single element, which will - be interpreted as an integer. This array - is replaced during a strategic merge - patch. - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - - podAffinityTerm: - description: Required. A pod affinity term, associated - with the corresponding weight. - properties: - labelSelector: - description: A label query over a set of resources, - in this case pods. - properties: - matchExpressions: - description: matchExpressions is a list - of label selector requirements. The requirements - are ANDed. - items: - description: A label selector requirement - is a selector that contains values, - a key, and an operator that relates - the key and values. - properties: - key: - description: key is the label key - that the selector applies to. - type: string - operator: - description: operator represents a - key's relationship to a set of values. - Valid operators are In, NotIn, Exists - and DoesNotExist. - type: string - values: - description: values is an array of - string values. If the operator is - In or NotIn, the values array must - be non-empty. If the operator is - Exists or DoesNotExist, the values - array must be empty. This array - is replaced during a strategic merge - patch. - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - description: matchLabels is a map of {key,value} - pairs. A single {key,value} in the matchLabels - map is equivalent to an element of matchExpressions, - whose key field is "key", the operator - is "In", and the values array contains - only "value". The requirements are ANDed. - type: object - type: object - namespaces: - description: namespaces specifies which namespaces - the labelSelector applies to (matches against); - null or empty list means "this pod's namespace" - items: - type: string - type: array - topologyKey: - description: This pod should be co-located (affinity) - or not co-located (anti-affinity) with the - pods matching the labelSelector in the specified - namespaces, where co-located is defined as - running on a node whose value of the label - with key topologyKey matches that of any node - on which any of the selected pods is running. - Empty topologyKey is not allowed. - type: string - required: - - topologyKey - type: object - - resourceQuota: - type: object - properties: - name: - type: string - elements: - type: array - items: - $ref: "#/definitions/resourceQuotaElement" - - resourceQuotaElement: - type: object - properties: - name: - type: string - hard: - type: integer - format: int64 - used: - type: integer - format: int64 - - deleteTenantRequest: - type: object - properties: - delete_pvcs: - type: boolean - - poolUpdateRequest: - type: object - required: - - pools - properties: - pools: - type: array - items: - $ref: "#/definitions/pool" - - maxAllocatableMemResponse: - type: object - properties: - max_memory: - type: integer - format: int64 - - parityResponse: - type: array - items: - type: string - - subscriptionValidateRequest: - type: object - properties: - license: - type: string - email: - type: string - password: - type: string - license: - type: object - properties: - email: - type: string - organization: - type: string - account_id: - type: integer - storage_capacity: - type: integer - plan: - type: string - expires_at: - type: string - - tenantYAML: - type: object - properties: - yaml: - type: string - - - listPVCsResponse: - type: object - properties: - pvcs: - type: array - items: - $ref: "#/definitions/pvcsListResponse" - - pvcsListResponse: - type: object - properties: - namespace: - type: string - name: - type: string - status: - type: string - volume: - type: string - tenant: - type: string - capacity: - type: string - storageClass: - type: string - age: - type: string - - nodeLabels: - type: object - additionalProperties: - type: array - items: - type: string - - namespace: - type: object - required: - - name - properties: - name: - type: string - - eventListWrapper: - type: array - items: - $ref: "#/definitions/eventListElement" - - eventListElement: - type: object - properties: - namespace: - type: string - last_seen: - type: integer - format: int64 - event_type: - type: string - reason: - type: string - object: - type: string - message: - type: string - - describePodWrapper: - type: object - properties: - name: - type: string - namespace: - type: string - priority: - type: integer - priorityClassName: - type: string - nodeName: - type: string - startTime: - type: string - labels: - type: array - items: - $ref: "#/definitions/label" - annotations: - type: array - items: - $ref: "#/definitions/annotation" - deletionTimestamp: - type: string - deletionGracePeriodSeconds: - type: integer - phase: - type: string - reason: - type: string - message: - type: string - podIP: - type: string - controllerRef: - type: string - containers: - type: array - items: - $ref: "#/definitions/container" - conditions: - type: array - items: - $ref: "#/definitions/condition" - volumes: - type: array - items: - $ref: "#/definitions/volume" - qosClass: - type: string - nodeSelector: - type: array - items: - $ref: "#/definitions/nodeSelector" - tolerations: - type: array - items: - $ref: "#/definitions/toleration" - - describePVCWrapper: - type: object - properties: - name: - type: string - namespace: - type: string - storageClass: - type: string - status: - type: string - volume: - type: string - labels: - type: array - items: - $ref: "#/definitions/label" - annotations: - type: array - items: - $ref: "#/definitions/annotation" - finalizers: - type: array - items: - type: string - capacity: - type: string - accessModes: - type: array - items: - type: string - volumeMode: - type: string - - container: - type: object - properties: - name: - type: string - containerID: - type: string - image: - type: string - imageID: - type: string - ports: - type: array - items: - type: string - hostPorts: - type: array - items: - type: string - args: - type: array - items: - type: string - state: - $ref: "#/definitions/state" - lastState: - $ref: "#/definitions/state" - ready: - type: boolean - restartCount: - type: integer - environmentVariables: - type: array - items: - $ref: "#/definitions/environmentVariable" - mounts: - type: array - items: - $ref: "#/definitions/mount" - - state: - type: object - properties: - state: - type: string - reason: - type: string - message: - type: string - exitCode: - type: integer - started: - type: string - finished: - type: string - signal: - type: integer - - environmentVariable: - type: object - properties: - key: - type: string - value: - type: string - - mount: - type: object - properties: - mountPath: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - - condition: - type: object - properties: - type: - type: string - status: - type: string - - volume: - type: object - properties: - name: - type: string - pvc: - $ref: "#/definitions/pvc" - projected: - $ref: "#/definitions/projectedVolume" - - pvc: - type: object - properties: - claimName: - type: string - readOnly: - type: boolean - - projectedVolume: - type: object - properties: - sources: - type: array - items: - $ref: "#/definitions/projectedVolumeSource" - - projectedVolumeSource: - type: object - properties: - secret: - $ref: "#/definitions/secret" - downwardApi: - type: boolean - configMap: - $ref: "#/definitions/configMap" - serviceAccountToken: - $ref: "#/definitions/serviceAccountToken" - - secret: - type: object - properties: - name: - type: string - optional: - type: boolean - - configMap: - type: object - properties: - name: - type: string - optional: - type: boolean - - serviceAccountToken: - type: object - properties: - expirationSeconds: - type: integer - - toleration: - type: object - properties: - tolerationSeconds: - type: integer - key: - type: string - value: - type: string - effect: - type: string - operator: - type: string - - - label: - type: object - properties: - key: - type: string - value: - type: string - - annotation: - type: object - properties: - key: - type: string - value: - type: string - nodeSelector: - type: object - properties: - key: - type: string - value: - type: string - securityContext: - type: object - required: - - runAsUser - - runAsGroup - - runAsNonRoot - properties: - runAsUser: - type: string - runAsGroup: - type: string - runAsNonRoot: - type: boolean - fsGroup: - type: string - fsGroupChangePolicy: - type: string - - allocatableResourcesResponse: - type: object - properties: - min_allocatable_mem: - type: integer - format: int64 - min_allocatable_cpu: - type: integer - format: int64 - cpu_priority: - $ref: "#/definitions/nodeMaxAllocatableResources" - mem_priority: - $ref: "#/definitions/nodeMaxAllocatableResources" - - nodeMaxAllocatableResources: - type: object - properties: - max_allocatable_cpu: - type: integer - format: int64 - max_allocatable_mem: - type: integer - format: int64 - - checkOperatorVersionResponse: - type: object - properties: - current_version: - type: string - latest_version: - type: string - - tenantTierElement: - type: object - properties: - name: - type: string - type: - type: string - size: - type: integer - format: int64 - domainsConfiguration: - type: object - properties: - minio: - type: array - items: - type: string - console: - type: string - - updateDomainsRequest: - type: object - properties: - domains: - $ref: "#/definitions/domainsConfiguration" - - mpIntegration: - type: object - properties: - email: - type: string - isInEU: - type: boolean - - operatorSubnetLoginRequest: - type: object - properties: - username: - type: string - password: - type: string - - operatorSubnetLoginResponse: - type: object - properties: - access_token: - type: string - mfa_token: - type: string - - operatorSubnetLoginMFARequest: - type: object - required: - - username - - otp - - mfa_token - properties: - username: - type: string - otp: - type: string - mfa_token: - type: string - - operatorSubnetAPIKey: - type: object - properties: - apiKey: - type: string - - operatorSubnetRegisterAPIKeyResponse: - type: object - properties: - registered: - type: boolean - - redirectRule: - type: object - properties: - redirect: - type: string - displayName: - type: string - policyEntity: - type: string - enum: - - user - - group - default: user - serverDrives: - type: object - properties: - uuid: - type: string - state: - type: string - endpoint: - type: string - drivePath: - type: string - rootDisk: - type: boolean - healing: - type: boolean - model: - type: string - totalSpace: - type: integer - usedSpace: - type: integer - availableSpace: - type: integer - serverProperties: - type: object - properties: - state: - type: string - endpoint: - type: string - uptime: - type: integer - version: - type: string - commitID: - type: string - poolNumber: - type: integer - network: - type: object - additionalProperties: - type: string - drives: - type: array - items: - $ref: "#/definitions/serverDrives" - BackendProperties: - type: object - properties: - backendType: - type: string - rrSCParity: - type: integer - standardSCParity: - type: integer - tenantLogReport: - type: object - properties: - filename: - type: string - blob: - type: string diff --git a/web-app/.dockerignore b/web-app/.dockerignore deleted file mode 100644 index c2658d7d1b3..00000000000 --- a/web-app/.dockerignore +++ /dev/null @@ -1 +0,0 @@ -node_modules/ diff --git a/web-app/.gitignore b/web-app/.gitignore deleted file mode 100644 index 14fe04e360a..00000000000 --- a/web-app/.gitignore +++ /dev/null @@ -1,30 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -node_modules/ -/.pnp -.pnp.js - -# testing -/coverage - - -# misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# Yarn (see https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored) -.yarn/* -!.yarn/cache -!.yarn/patches -!.yarn/plugins -!.yarn/releases -!.yarn/sdks -!.yarn/versions \ No newline at end of file diff --git a/web-app/.prettierignore b/web-app/.prettierignore deleted file mode 100644 index 97edd36c2b9..00000000000 --- a/web-app/.prettierignore +++ /dev/null @@ -1,2 +0,0 @@ -build -coverage diff --git a/web-app/.prettierrc.json b/web-app/.prettierrc.json deleted file mode 100644 index 0967ef424bc..00000000000 --- a/web-app/.prettierrc.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/web-app/.yarnrc.yml b/web-app/.yarnrc.yml deleted file mode 100644 index b094f5e9aaa..00000000000 --- a/web-app/.yarnrc.yml +++ /dev/null @@ -1,3 +0,0 @@ -checksumBehavior: reset - -nodeLinker: node-modules diff --git a/web-app/Makefile b/web-app/Makefile deleted file mode 100644 index e79e87f4c70..00000000000 --- a/web-app/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -default: build-static - -build-static: - @echo "Building frontend static assets to 'build'" - @if [ -f "${NVM_DIR}/nvm.sh" ]; then \. "${NVM_DIR}/nvm.sh" && nvm install && nvm use; fi && \ - NODE_OPTIONS=--openssl-legacy-provider yarn build - -test-warnings: - ./check-warnings.sh - -test-prettier: - ./check-prettier.sh - -prettify: - yarn prettier --write . --loglevel warn - -pretty: prettify - -find-deadcode: - ./check-deadcode.sh diff --git a/web-app/README.md b/web-app/README.md deleted file mode 100644 index 2fa78e71b5a..00000000000 --- a/web-app/README.md +++ /dev/null @@ -1,44 +0,0 @@ -This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). - -## Available Scripts - -In the project directory, you can run: - -### `yarn start` - -Runs the app in the development mode.
-Open [http://localhost:3000](http://localhost:3000) to view it in the browser. - -The page will reload if you make edits.
-You will also see any lint errors in the console. - -### `yarn test` - -Launches the test runner in the interactive watch mode.
-See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. - -### `yarn build` - -Builds the app for production to the `build` folder.
-It correctly bundles React in production mode and optimizes the build for the best performance. - -The build is minified and the filenames include the hashes.
-Your app is ready to be deployed! - -See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. - -### `yarn eject` - -**Note: this is a one-way operation. Once you `eject`, you can’t go back!** - -If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. - -Instead, it will copy all the configuration files and the transitive dependencies (Webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. - -You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. - -## Learn More - -You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). - -To learn React, check out the [React documentation](https://reactjs.org/). diff --git a/web-app/assets.go b/web-app/assets.go deleted file mode 100644 index d6abc4ac7af..00000000000 --- a/web-app/assets.go +++ /dev/null @@ -1,27 +0,0 @@ -// This file is part of MinIO Operator -// Copyright (c) 2021 MinIO, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package portalui - -import "embed" - -//go:embed build/* -var fs embed.FS - -// GetStaticAssets returns the embedded files as a file system -func GetStaticAssets() embed.FS { - return fs -} diff --git a/web-app/build/Loader.svg b/web-app/build/Loader.svg deleted file mode 100644 index 85076a0f80d..00000000000 --- a/web-app/build/Loader.svg +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/web-app/build/agpl-logo.svg b/web-app/build/agpl-logo.svg deleted file mode 100644 index 64d745ce28f..00000000000 --- a/web-app/build/agpl-logo.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - diff --git a/web-app/build/agpl.svg b/web-app/build/agpl.svg deleted file mode 100644 index 149816dc0e8..00000000000 --- a/web-app/build/agpl.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/web-app/build/amazon.png b/web-app/build/amazon.png deleted file mode 100644 index 80296722b616eae8128c023b1b02f13b0f6a7a5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9185 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 diff --git a/web-app/build/amqp-logo.svg b/web-app/build/amqp-logo.svg deleted file mode 100644 index 5b2cfec44d5..00000000000 --- a/web-app/build/amqp-logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/web-app/build/amqp.png b/web-app/build/amqp.png deleted file mode 100644 index 1636373cd57a4a23ab6a1a0171d9b6c65999f6a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30271 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 diff --git a/web-app/build/android-icon-144x144.png b/web-app/build/android-icon-144x144.png deleted file mode 100644 index 4884c6d740df26d5f9cb3b8d1065905cd6805502..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19639 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 ee!^k1ntbhr=z diff --git a/web-app/build/android-icon-36x36.png b/web-app/build/android-icon-36x36.png deleted file mode 100644 index 7aa0b50691177765806e7810ce3d19866e871eae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16139 zcmeI3e{d6J8ppSGgu4oKIFBEKmJnM8l+ErYo20u3Nkpz@1PO4ure22ntwES}cr1M^5>1fR)M(;tg=`CT)_wZFiW{ zo144YOq=9+pZEJb`+nZ{ecsI}U8F0J1Iom_1wk-lK|v9}pqys}{Um#eEzH6IJ|J_tu+QrcvEgie zBrXfTE6s#n7wICGXX_^`33bJ;>AD;#2y|wH1?MS~QDz`@DD4%G}! znsACKqRcEsvu5UD(#)F3gdowLNDP-Gh@R>`Vi;i~!*cDr$gq>MOiHIoeK;YkLVBM@D#M0u~!4vDW+b_@(1EiQt@ z!|?IT%A|lmnyoaR$-x{HW##cqi^YR;f`?%|W{#qHt~*geuwIF#1w~l}8hYmHKAql`R4U8_}aRepxYPmrU$E zop**H8b3kae~zj$;8)vT(NK|I{Rat29=VDOg2|rdvx6m|4XxXXLa$1ZKNJ&%>T*kMR#P+`q*98d)HH&a+{&lVptcrNDZWH zM6b5^x{3BLR%)uZGSVNGboe4D<-JRq=tiY;)TN1TR2o;#^oz3H*p&@wPEaZLLeWEd z2E1(tc8l3;f@dk(j4Gy!Vc;!xi10KGDW`(T(xpKieG2FFCrog338Pb$aDyGGqS01( z`wo9O5V4;Qy$WpXEc!9O#7FdFMnz(2Nf03FriM$M58~BuAwbkk4VO9}#H-;#fT)`q zE_FVLSHpz>Q8zVQ>UZXQEoe$#Ga3Mg{O%0biAH=KSLV&278ZLD{h*!gf08uwJTv|)J+YSIv>QV;X;6@n;I^4K8RPtg#b}ERdJ=nAI1fK_yleheAIU6o3(oQ zn68e`D|BJlf(#5>_6&yIxD7uqVpt`KVSk^8VJv*~cZ9U&se_MU*j>#|$K;~$>C3er z<=0ekBr3Yf2wRmp=xofr3(Sl@YM`Pc8+vI5VqI4Tzg z&t2W^9sSfVM}L?$ea#f=@Yea4#vPXTWH^syeJp2D`P_-Db%EDvmp^wiX;)26!$bBb z_LmYF&S_JxZvnG!G-1xdrfUsc$^N(N8d8>~y^?MocDd!BFO>gwz^D;34js$mez9|7 zOP$T%+L4}JINq9$v4`-=sa^2a$-a)(`5 z{QKj3m$Wjbmc}KAnyL@q{^RVIU&y~U{=k>B&+qyCZT*}x^&?I$JiN8xt%~Zgn?E1Or*12_Ka?a?u10$A6SFWreou3@paR@P`{dPfS8CRc ztNS*7c=^%4EG|je@Gwxf20$i zyyN-x`d!y&y4LK&ea7;ROC@KFt&CB&`j)@eVIN-p!Atv(oGIDe^kvPdeQa>UxlIe5 za~oHj-Tv0mwjD41rup7)TgI$iIbd_+*@kUGXUm|Ud5#IKd#2V)C8>|Jod<1W{xE#Y z?UN69*7@gsv3}>9+n?-Qcrj<_>fPZ>%hIXyOyO`f`9@{wdoAtuEG`QR`%$Zx@*#79er~d^Y4hU)h diff --git a/web-app/build/android-icon-48x48.png b/web-app/build/android-icon-48x48.png deleted file mode 100644 index c1a301f7a64bc01223264fe4dc3ce625f45c3045..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16403 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 XwTJ%M<-%^}vHggV(P2ABB+mLb#O#Xh diff --git a/web-app/build/android-icon-72x72.png b/web-app/build/android-icon-72x72.png deleted file mode 100644 index 3b784b7a39cd1d927405f2648f0d0c52b7e19ab6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17295 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 diff --git a/web-app/build/android-icon-96x96.png b/web-app/build/android-icon-96x96.png deleted file mode 100644 index e2b06203a167799e1aab2b928720f71e1c4de1fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18154 zcmeI4c{tQ-`@n}Nk&uye!ZfI)F*D3!CQCBb?0YL?=8Fk4)6Cda$RV_xbUKu+$Vm%z zBvFd2Ii*eNWY@xxc8Q_*eTPEdYOZtr-uHL?uJ^rWF0*KUg1MqDw+iE=*29r?~JjGx~G8VyLt4kQJo;*)G zTQZFmq)Vl_J1kgxyq=~V#VHg>75Crh3h_IkQCYKy$gq-k820sg$(MZHZ7hZr7(o_%- z;c4fHFk^851YVbbqG9#*5JZwL7EjVMz^y{)VXy==28YIyP*{C3_=m$FK0lDg(%>gU z4&9gROtJVJ4wQ_L{yZL=j7EoshU$ju>#{h0pgDP`2{e;t6H8$- zLx$j7$z~jY%42a{S*$?g$yMg~1tG%BOt7l(x_HD2J1ULA6p+<6L_^J{b3W}6pip^$ zF=$OfVf0a0k}DQZ#^T6$k`4w>*2m0nGT9U2!;VE~_=bPShaQfsN1W+nMo*{@a1YU` zJnBF4GPCatKXe+|m&FO9@{AclR6hXCX8IYTryFPVoLX6AGgcsr0}cx?);C0duX%>m z#A+j3Gr2q}lLlB*jKKz727^x4_W`JQeIFvq0EhQM;jrLVqykt_r2As%L>!ier_v`N z+S$!C|Hd_iMGF?}7|``(aiOzlp!?}z5eP&gfX7l%22>v(6c$UQp$rHFFdE&LMDoQ` zu{av_OQ0Ffz6s>OVSu%d8aShmU@mkp7)Dka1I0>i;(t)2o^0Pi6W6bYt|F*?npF zPs-jutBe2IM*8ZE`7g=d`2TMBmKw|~3pG{|~p{DDFo6b~2O{Xp0m<*n=-sfnL<{4IkyU^qz?E+rg0b>Fl zua7rGLz|%%j*KuM(38RdPgAboR3H&P+dviHHC+EA!x@UthLfq9alxLbqLZ!Q^&R}? zfS&s5@J)f8I*b0DAEsyY@AL}sB?~p8E(j3eq6n98J`k-47X*lKQG`o4ABa|j3j##AD8eP2 z4@4`%1py*l6yXxi2ci|>f&dXNif{?%1JR0bL4XJsMYx3XfoMgzAV7qRLUBn?{}>lw zg1^8G1%GNQzRp7h{FyF-X60-LgGFe;V9~o^F#b6B-UovPV_>l7-Y^(B4F*$YrFhj^ zz+lpa))Z6Mu$C7Y;cT~N)#!@LSBy02OJ%GPGIM{Sx^3y;~jZMa}-UYk?^R}IbFT6^lkQTSTyTun{-^8On)T3=rtdcWVZPO7w6 zr8BaRKlZ0)MS5B9P$u`)qgQTm@}tpxYv2th5@r5&j+0+nsWET>UbV6-HQZ|P4kbsr zT1tG*pG!2Awbw}hBChEi4M!XhKMqTTzZp-+dL=3Uhe7q(3cKRmIqgrXHWGh&oguB= z)pRs+fN+V((r9^*sJb`De{svN^NQ?8R{_K*xuG+MwY_GWOWl=)|Gx2E`q_%ilHj54 zwBHgAWG3eHOSRVRt4j-orz-axA$}j#&OG2YW#P9@M6`ak(C;IwH^dZ+&-gnbHmPAwH}+I zmG-r@piga$VPN1Fw35OKp;2Y46Goh7IMo zQCcp)y}44uwbQD;ZqDKG>Sslgwh}!@)y@>-ev?Yvo4w(_r4 zD_z_yMpe`2mS3=xPLo<9Sw^dNXsWs1P&Iz>B6c*suJ&ovC*IbQwiu;(DT`#OhnLOq zIGZZIOq^w>l(inHi5O)+?Oo9S;@FP9Lp6~j^|jBkf@kC9Iun)VQHRSVLSE%P$x1jL zJVntmovP1J{FUc-4#~hJW9Q7jQ$Av^?TuVf zHiEP{d+8Ueb*n>g@u5tu>eV6pF2r3Q*0AUIW;JGvvdr`i-y2@dyyh2bC8lWFyxAl- za1e<5NsgM3GyMG2qK-cfj%an(FL}2=IkO~60iXUb7vcZ0+X0&}%ej)`xZ}qDv>knA zap`ijdb@J2j!Fbywqx^K+6(`vO@Y_=y^cd&7V$?qbNC~zF1fI^yP4Rz{#SQo4kx>7 zcVt{yQ;r`Gd|Q;e;Ul-(hB`8TKXJ*(AZQ`@YDdg|Za zJV|NB#}4j&syiaRJg9Z|WA>h8BVN<&2(`9by&)#M4rCrK1`4dTU`P2aUiYqci?yA< z;iNkI*r&#)8H2#q@pEF0y{gKs?{}qxgTMcA2P&!BDk<9fqJ}&FbTfR@xj43q4wCw$ z;3U1P&m(MT^=bLJ0hifu0aYxM8yr?-NsJ`+k#9+rX3*6H@%K*UKL~ zTGyHFRk^PYmfv0!(`N3sfN8wv6*o7ceaWRkqNarz2T8a)&+wDpDGa*H&M>n=_^KkDsskjjfclgck^NXB z>fGL%H@o3)Iu``Jq<7xaVT^R6c2mSz!IDW-#H#+%w;j(pV5ZMiQQ_5yZaH}-!y&Qg zczYJx-%D|P!&{BmQMt#5H}BiJ2sHXtZfDb<*BjN+=j5-fvh|jXEs~6Kj<{%CyIRIw z{^j#p;?DWVh08mL(K$PKSW26Oxv7G|8jH4Kc>>&uca`r`_zhBH>Z^wE9+13<$_LxH*d(`hc9~Ml2{ya zG<@^@G3u=KCocPNW;~G95_f_#8y2!6HYc-GP1bO9rP0Q$O1BNRNKDeH{-@cYB^h&~ z;4ztzj7vVU79k5GZn+|ZG8ctEx^G<6?f&)*g9&|z8EfM34juNJ}v-@3cZ6JzPA z2c#snDJjbb^;eN{cPF(L+MO)=ovwVJ*NBRfQ(czJB>XXE>MFVQV%xU&_XiT$Pi?h2 znr~Fxs))a)>}57kx@}>PLeOg@cJXoF8)w<6hpfcZFO{=zo4q&TFSvSS}9WTQ%37yr7)JIZcM{chx%~K6W3>A)rcRit7qp1G`YtP${HlUGnImG zu9uGA9jt!M!^7@b&_n0a$4kOGpXbBb;_+FX*Sgl7?JmqPtx{i8W9M7owYMjDr?)3x zI&&zfc6_AOyVW3B#t|;LRKgvzCx_wM#>4-tjIO?Z%Z6|5Ya?|oR$;@#j)bg3iO)F- z)HZZb#08_mSY2B1;d?Tb8bo$zFXj0jp#6mQ%wYq zw_I=!E#63^%~Bt&0=`58gg?m7$Pw_#5q%!915Y?x~7Q(w>~HjEC~~ zwnY2cOJ;}nQKN$0;zl>RjA*_;zFq3FO>%zZ3$-?qR-9b1jaWkp`}yhp2ZCGtu%BXz z%U)X#HRw^7ool3A%Fup(m^X(FH?!2gcfyl{TsCt=6v1uJS{^}PoD%OCv+8id@dJ6Y m62P0HYtIvxT1nogNSK->;DZXhnIQOYG}h+!l)|;%vHt^+wD4pA diff --git a/web-app/build/apple-icon-180x180.png b/web-app/build/apple-icon-180x180.png deleted file mode 100644 index e12ac6d077d10a95894b959f2e4b11b134622681..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21356 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 S`{w_{R9DefevG - - - - - - - - - - - diff --git a/web-app/build/azure-logo.svg b/web-app/build/azure-logo.svg deleted file mode 100644 index 52c32ac3bbd..00000000000 --- a/web-app/build/azure-logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/web-app/build/azure.png b/web-app/build/azure.png deleted file mode 100644 index b9ecbae6725edaa1b81e824e65ba74c03a4a21d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8888 zcmeHtS5Omb&^7^Sp-UG9kpoDR-b;|GAXS7&fKa4K2Px7*??pxFMLJ4=(2*KJK&1-O z3B5z;BoGq#IJf`IfBAh^=iuy0ItO&(GTJpxv73pRTBhqPa3k!xm36nvsn;jd&CTc#h4@*CW0dH(On z3ReQcC89$r(}f(rqKdxwuj52IBEC*aG7B05!#?rvwy+s=WAW za#qdA{MJ|hz?o=_@L_nKp0;%F6+75}u4NTl81_!pFMK_EG@BP_Qt@)U+_XM@;XA|7 zvnyVq?tx1yq8M*hyB%iY6st2`g*2P%EW^q@DshB&^n1m^upMH)TT>L6D$^SG@VK(n zplB^A8Da;24{9tjibbj;sbYdoYX0i1?BL))Pj|J-wRRIRK*ueQtUXV|u4bIeP z*lYtSGyy1vIIdo8KkQDr63cR58serR$~>tS+@FaKqqCa30&v3b+Gj#gCqu82f{yLK ze&P4Tl9_sXK8})dUK{1@g4I)Lr{=TneBH3jR{YrJiIEGP4?r#xN*Z#A+TA-~jN-ji z6cfMHY>8=#Tx_O)=jl@&%*oIk8S(t^!*l6MJ1?@SV7GjJl;t=CUo1>rd(~W&oufFw zpEz#Wjg`aXPS;BR7W`=prb!KI2@Vi=Hs?KCIKQwK&Bj3}S|;r1b&H3hM`EyA+R@8X zZb8b`8Kk#v{bo@c%O7||wJ?m-(eY6lOA)9h1-Bwuhx|2lQq)lU_ z=jqnOAog{Wa3rdrz|+b6TlV9CKvl?Ku)BV~lp?NICcu5nJT~ND`cSa!NAmA9g@d}h zjS(bH#Y?WNLktz!Da9=?^cE>kCG6I3K$omm{+?3I@s;&Vh0Juzt9tS?ukq^#)=Kxt zZC^W7GrnmZxD>pwnd~bt`~mvs{I4B$_9d+}cK1&_KIxItTQ~ap>1>fH$^KFYtU70~i}%)V+`cDN zWd)*NmCdgUedid?97y-UZ>#X_@z1%3mYtQ23(HlU-S6+g)(d}I*6!jN!61*Us5tF2 zA@$V);CE5Tz0H>e87FV9isUWcsJ~iBzJoQ>p9MKmn$040fJ4UkeN3|z+ z>(^p)5!9_;AXYK+!cR)%`qm^KATsK|pJBRo;^CFP9x$+rh1G<@>H1QTB z8I=_b4P4?s&q(+w>?28#Gu01fLGkT;-`x4=iJKBS>y*k7hhNmoW6+Gs5N^LMDJG$p z%&L>QG3-;13Vv)vZ3p-uWZ2{_aOq634dlbgh@T!<%IPx6*DnGa;h1 zb#g9ao?*k015k(E6sx5;VV61UfLYLjzEr5GJ~ZF!ggRw^<`v-pc6~v?7v9=4XjNq;&Q{?diw2p~WG)U>{x8i^XV8XU`kr$(+aG;?FL!=& zH0ZsmlAZXVHvxhbhtK#BHN>*WbqY=hM{?GenSFy1vaNVAgjE!K022G9*Zjr_OVuzs8RsN1 zo&3EZ+}YA)<+8D>W!`TgwV?3Xh3U-xuI~Dm)GEZV=T#q&uxQtc+gf__J8cM_3nnCy+{h@I! znZxl zw64BJ@EdsHm7w11cz~+#}M~{PZRG#RJSI6yYr(S-Lmx5M9`W9>8B zf!~<#+lH5lm`|p3i)ag6^CB?(U8&-K&_2}gV`=lkr4BmwrnzP}s+Hnw^F^114o=+g z`9g1t7e4k9RyDA)gju~1Ma0x(hv8CFYt=gN8uEAy%BUQ~Ht^@udSN6eM46SbfHSi) zoOyyDIAS1^PnL}{{g)VktZ#!V~s;)<4JFN-VBklOIp>&6K*)JL5 z^A5s~2S+)x4oFqN)FSy487&rV!4yyH&#v{myqR}5=5iN;n5tC!jYjVKO}9-Nd-V5P zqm>909gFSDPAugGe&|^#nluGDX!N2~6B#il&}W9YAn2JBXwR)@lZO*VAKPV6+nF&H z?t3+_eb`mw<`80btsJAS*s1#En7gICf)W)e68@sem3y!jGTr92Tn|>#@lUxo1GuLR zZ)%!z?M(0kM9<4dVGyzV?}pH3t&aC>oB^+bvNHm`S*X_YJ4Q}4RU4}26zV&p$%p2w6&%{G1E$1X*GUDglcZg6<|jIfimTpz9O zvYc4jR9Fnl^~5N(Q!&+ddOfli3XI-1tK+MNk-y;ZZwkHIk!(C%Eg#0N!ym_gF|(Fn zZU}vYnN~PW2^e#p>+b+D*u3u>=Qd0Go1dGqc~%z_C3%gUE3e>$XXy&Nnzdct7Z~#U z)OPM>A#|+}*NrtrOg1`S&=5gu7ZBUcL}Vgf+t!BZCsnn%Ol{gccX&{cc6$g%c@j@Ig#o_KiHO za(8Xex>jN5Tb;Di@&u>A;qAo!{1BA+qn=>OS^(}5-x+p)X(L;Y(8} z(>KQf+a#B{ar+ncm890g%`gs?W}0})-893hqw&d+MYd6dTcgu4@^4Lw_TipX_L6>sZb(|ABb+!nVszMuOx zuYL*fLy)kf_7+cWQ!TB0>)0~=e&qB_%Q~dBfi<1FQTcbH+c(hPUO$=ydlfG!R?IrwV9?)-JQ7vrBwSPxSuoXY(V87s|4XlkbnN5@Ti|^&>QxyzA^;6Pta6ZM<;QR*lgoc*jd0Ax%1tY_uek#u6(r1*gWJR>r) zCDtxEdu?!C?U9_)jk_pl!B@wB*%m{!-gcLP4#RxFlaKSV-7Rl_9^z=E8m(#S$d#jO zG=F6oFTvTkW@9n4YHS{|OLOL3nxUg1VF zEiFM?-H)ErczyY9Z#;STM0j{c&kJ2_f265tj>`nr4dlTqiFgD(C$WqWcH|qjdfqi3 zHfmnwhBH)*@F#5Xii*xbvIZ|?5jbJCsGs_{67=Xzv8+zow4hbzj(Sa=#ou!#9nM4E zrlPw9EV;gn92jm6iU^+xrbN%nk>2ZCmNxMysVR7xIm_x&<}`w>Yfp$}>iLl8=r)tuP7=FwF>D=NYgs`*!D@C5nWBDNG-+vq_!<_TJ6H5^jD z6BU?VaOzhLzNQCdch$c?m`#8zja{g3nGd&E33w3eLXevmN=4e*U<3&5 zdGOJ5*#KfBSP}2LHMlj&HV0bR@J4D%RmMElU3mP5sNXT=rMp_w-K!dfw`859XIyKa zH|UmXP${XwwN(|tC~|SPaq(S9##l*~!aYHhjL)SjBCP(jY;7Hv9}1`%`akWwSx_Bw8#?+zOSC|~dl>E!890rx*@&{s+d zf^1#xK9|JmSIWG96+Y{r#{$-=2-u?!A&D#livIYPnU(qAeuwO zs>IydOKWG}J7$rN*y&Gj(Y(ySAq3|@o`m_!0cHs|%ZyGj{|Oy}}!;rw7*TGUL!{$G!@GaZY?X%y#8n4i_@Xd0JmdQx;WX<6LDE252 z8gh(!5kO;A_is)#OBGde;sx%-D$H0wvWxRt1Byyf;jj-s;v^l?B@tP1nV#qaO{JEVpGi4u%F zeO=ol=!?bWW5;Xo>O2rm3JOj_0&&^JyW9Mu;)ei#Mg4~e7Ov@(Fk>3H?_E#>Ey<2N z6kFoPgz=>4t5Pg#zS)UL_Ba+1Zpzdly3nC^*c^n7(f(rDG_>UbUsb)ORQ3r&0b!{7 zI#D=2QgK8+lTeP-LB+eT?*{y(!*Fz6W4jKI$2KP|swC?~vEb(ZKR%dp84pG1&U;Us zTzkk_aY@Z0d(713h-c-{cyqP(lT1uf(7^5qGtXh4D%xb>s1bL{ety2A{rwvQ*nWV_ zdYCh(RHCdh?r19G>)IhN8`#onJEAE>M7Ddjvk4|eE1A!6a2V=NnvPj&(Ok3?+q*t5 zY-BSWxfrUN9qI+}CfqR<2?~s2UZ`N|a~D(DkayO)yO2{-^J9{uM8xSY%aJ0@oouWa)psbBx}F_0ATQZDeKJM;~uw@Q~d z_A>QQRTITW`0e~g(5Gws2>sMr`B0T|5LFqQPhhrdHby!WFImF|=kpvMZv5KrBuuOt zrA99y>2P-M`af{i$B!xXR75RGfnfKUtibJ!J%oa z)(yyRBe$*^*I>pMJ9AtrP;Kw-063%$$Z9NF=#A2e<4|M-V5fSgD-8EgWn4!AcfjU( z^_@@E41Ggt%P|Y_yZlnbC+KAjC5KG0 zd9gMk1TFPXQdWXpe*#g#0StR>66ZrI%rFsT_u_?VU1f zwmT|sgbwh~s(EVRs(ohIKgDrft5B>LhU!-`@;Cfs%iy8$;PKD9{#NX=BRm)tH{PbB zSQ|=VET=+79gLk!W`Ez%@{$4l$EF0mGM)>OD)rIZJ743^;0R;^t9EDk9AdmIMoM3J zil0ffe)13fXA=&C0TN#NLMeFt+27Pqfqt1+Zb)QZVI3%mi(sOOZ+!s^ zeP8w3ojkqifOV5bGqEMNKpey;L2>E7Lt?N-A++0e8WO^k?VtZ~HSA(HgPHBL;_4xE zj+k*0mi#*TO!3eXy;tc^ZWjugQ>09S#DI)xkGRm1^M0$YP}!P-z6vd7uj$_RFHG4D zNCvzEt3_IT+l_ahT1$tv0<6qiQKN4R^vTaK9HJ@kKxr~7E50{u?=$US@^eTPM1vd4 zb$U{ms@b(+ws@nDy~WcL2_-8Bm^X1BzW=HJ9HtTWjZuMmqMXeF_ALjjB0;vx5)zE% zv~iXNn#KQ3&89ujZCWs1q2`l#MCKqm5JvEh-VJBCW5x1V`ZRtQHq7Z2*yEAtcoy5e z-e916v%HLN3N-9XQv*sXiLyq%wIQDAB1vZF-^*OQrGXVF#d$DpEO$Ju^v3V1Ee{DUXECTBS~osnYSC8IIU*a( z@Kms8Rmqp6f>wJ5|C3x9{_=~J{2O+T)X`ZHo8#jVxS}#anAT0Vd+hv++*Qs|r7^-3>F%k%WUR~wv_qhE8KUtSht(r|h7&gECgYQ21vZ5ctjup*y_ z!B8vc*?XD&n&s|q&*jd0_@CrTjeQ&67fmxk7u!6_4oHSj*+f{({;eE@naNfLJ<{JgG=tjddl20!tA}yg3LzJY|tKEnL zCO5EPzcv7+`uL&|8n`; zH&JY_!QcH$@>^TS|E|6JUy%Q0^8ZtlIq~!(L`1|s|K0-pSD*hi(f`#rTDk_bm@4j- Us1+RET%-^^)zsIhR \ No newline at end of file diff --git a/web-app/build/elasticsearch.png b/web-app/build/elasticsearch.png deleted file mode 100644 index 92f3fcc53cb369dc9f05e3fbda5303a2123054dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8003 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 B#d81v diff --git a/web-app/build/favicon-16x16.png b/web-app/build/favicon-16x16.png deleted file mode 100644 index 1ef69e7772e25162924bb58eeadf8e97deba8686..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14906 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 diff --git a/web-app/build/favicon-96x96.png b/web-app/build/favicon-96x96.png deleted file mode 100644 index 7410eca4c36214dfed9d7c02ce984bf268d3f44f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17029 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 A5&!@I diff --git a/web-app/build/favicon.ico b/web-app/build/favicon.ico deleted file mode 100644 index 9742f9159513bc87c7b101373bb39e05229380c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1525 zcmVt>#{E)=WiV+ub@3AjsT*k>&N|({KT<(L7#| z3FWrZl-JWh)^vYAHFiY3_%vJqV0?ycSLEF|&?%r-%N>HWDQv43nIZ(Zm0=qS5PA2f z!V8MtD0d1nCoy(rJ;*d%0D+Sk=B25zs{vx~jsvq5ty~T}Qe*E6&8Oi4MBbfI^jNt~ z5ES_^F?I<+?A;N8`HJ2uiy5P^J~W>qmH+~)sG8<90beA>z6=m~_YJTZxLp?ZdTQ*W zA-NPHK;+#ig$3m!3?N7ous1b!7C`LXSBiE}Iv62Hv%=1^W@<1lg$Mu;d-ol%OwsZY zMv$S397v3v-WB&buvU9Sc>~=B0o{na`vh25X&0mgIG7qc2_W|FT}9vP@{Lf~7^3~c1ptV>+oEVy zhXiR=IGh+e0pNZ*-&Aya$;ax{*f?+71400R*t@quw^Z5%F~CoWv5!CEk1+&&P0`&T zLlt)9ZFj&30MJV3y6zD!hakg&!>O^ux^9NAD!LDtoESSSPn!cufU*((veGBW=~lpkhyn8DGC!~@BRwa?p^QX^~PB{g3g0u;e^`_7-G+cnhOlwMveG53)wY%4Z!Y>)Nv7z`h zbPq_3Z2|TRGUr~)2wbeTRlg+n7Y!32HMSKv2r{)Vq988Ug^DD%ZQhvBLQg3AyJ_F`vJd&IM{XQhmx(JXMI~>?g#SByQ5-_7y=b@AmtF$S4 zL*SLjAFVtY=0d$@z)nFPywjwe0xw41o$G65U5}>=BkxXyq1S`p0wl)H%pO73#oqnV z6W87btN|Tf`%`oqpS^|sjB}mbK1U3u0JMu?60aDW*h(iC6TY$85 z)$R3Js|3BMut{Kdgv!y$pN+d>ngM z=q7hJ`hnfY`eqfY}rzLg4}c#NHhO<`p5rfDiy6D*cCOzM_{K bxg`DrU25xri6;_^00000NkvXXu0mjf4oR^O diff --git a/web-app/build/gcs-logo.svg b/web-app/build/gcs-logo.svg deleted file mode 100644 index 81b7d245478..00000000000 --- a/web-app/build/gcs-logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/web-app/build/gcs.png b/web-app/build/gcs.png deleted file mode 100644 index 2322a143b57d63db0a6042ef4f2a5a364b091f68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7804 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 diff --git a/web-app/build/images/BG_Illustration.svg b/web-app/build/images/BG_Illustration.svg deleted file mode 100644 index 4c170a3009e..00000000000 --- a/web-app/build/images/BG_Illustration.svg +++ /dev/null @@ -1 +0,0 @@ -BG_Illustration \ No newline at end of file diff --git a/web-app/build/images/BG_IllustrationDarker.svg b/web-app/build/images/BG_IllustrationDarker.svg deleted file mode 100644 index e7beb09c752..00000000000 --- a/web-app/build/images/BG_IllustrationDarker.svg +++ /dev/null @@ -1,67 +0,0 @@ - - - - - BG_Illustration - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/web-app/build/images/background-wave-orig.svg b/web-app/build/images/background-wave-orig.svg deleted file mode 100644 index 24c8f695ffa..00000000000 --- a/web-app/build/images/background-wave-orig.svg +++ /dev/null @@ -1,1385 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/web-app/build/images/background-wave-orig2.svg b/web-app/build/images/background-wave-orig2.svg deleted file mode 100644 index faf39855cd4..00000000000 --- a/web-app/build/images/background-wave-orig2.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/web-app/build/images/background.svg b/web-app/build/images/background.svg deleted file mode 100644 index 3c75f0f3ac9..00000000000 --- a/web-app/build/images/background.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/web-app/build/images/ob_bucket_clear.svg b/web-app/build/images/ob_bucket_clear.svg deleted file mode 100644 index 630261d0a1b..00000000000 --- a/web-app/build/images/ob_bucket_clear.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/web-app/build/images/ob_bucket_filled.svg b/web-app/build/images/ob_bucket_filled.svg deleted file mode 100644 index afd4910a2ee..00000000000 --- a/web-app/build/images/ob_bucket_filled.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/web-app/build/images/ob_file_clear.svg b/web-app/build/images/ob_file_clear.svg deleted file mode 100644 index 992b9a141ad..00000000000 --- a/web-app/build/images/ob_file_clear.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - diff --git a/web-app/build/images/ob_file_filled.svg b/web-app/build/images/ob_file_filled.svg deleted file mode 100644 index bcdf1e54c0a..00000000000 --- a/web-app/build/images/ob_file_filled.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - diff --git a/web-app/build/images/ob_folder_clear.svg b/web-app/build/images/ob_folder_clear.svg deleted file mode 100644 index 0c67aa07654..00000000000 --- a/web-app/build/images/ob_folder_clear.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - diff --git a/web-app/build/images/ob_folder_filled.svg b/web-app/build/images/ob_folder_filled.svg deleted file mode 100644 index 1c23c4551e1..00000000000 --- a/web-app/build/images/ob_folder_filled.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - diff --git a/web-app/build/images/object-browser-folder-icn.svg b/web-app/build/images/object-browser-folder-icn.svg deleted file mode 100644 index fb4a28b952d..00000000000 --- a/web-app/build/images/object-browser-folder-icn.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/web-app/build/images/object-browser-icn.svg b/web-app/build/images/object-browser-icn.svg deleted file mode 100644 index 111e0bbd158..00000000000 --- a/web-app/build/images/object-browser-icn.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/web-app/build/images/search-icn.svg b/web-app/build/images/search-icn.svg deleted file mode 100644 index b75ed005b9b..00000000000 --- a/web-app/build/images/search-icn.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/web-app/build/images/trash-icn.svg b/web-app/build/images/trash-icn.svg deleted file mode 100644 index 349d5d4aeac..00000000000 --- a/web-app/build/images/trash-icn.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/web-app/build/index.html b/web-app/build/index.html deleted file mode 100644 index 43ecfc6ea9f..00000000000 --- a/web-app/build/index.html +++ /dev/null @@ -1 +0,0 @@ -MinIO Operator
\ No newline at end of file diff --git a/web-app/build/kafka-logo.svg b/web-app/build/kafka-logo.svg deleted file mode 100644 index 43cfd553496..00000000000 --- a/web-app/build/kafka-logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/web-app/build/kafka.png b/web-app/build/kafka.png deleted file mode 100644 index 8e878373cd5a9db43f1d54d1936e8153fd05d72b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10782 zcmbVycTkhvw=PHr=>e49Yv>SaKzc_yp+jOQ5+L*rf=CZdiqbox0TU3EBAuupA}SE1 zBTYbxf^@yn?|kRpKYnxO&dE$B@4K?r-fQnw^6ckLnuWOmEj2qe5fKrsk)f^?5fL%) z&zq8*Ac>643MG7857C2!SO<89gnI*Ni}Vzq%25PMnP3p ziTA%={Dj$pZh5L&>FWR2T!cF?zjsIoQdL?yJUm<~TwW?5$V*yQMMXtgMowBzPLiM@ z864>!;t?U~A1v_i2)giKSdb4g#3#U?_s@tP(16eoFh9Z5f0p2fG&B3}f&GL3YoiET zCLQ5{l$Mo}k@oZZv#!6|!68=g|Lewo)DE_ZM8c)5;K2c*K`=r*JO%zWChXn+JkcLT zf;Xx+gM0`<@j&PXz(W1t{vk%XV1B|kQn!3=smjA|fuK+on53tI5=>G-&J!jHRgsaE zgoEHPStaFL3bOKY|BmyY?3J~&wmj_(gdfZ|K!U5lRN*4 z2nqS;^1myAaP!}_1otNtP!OR~(3zXfL`1@xM!H%y5ubO;DDbSqlgaeey!_PE)s>0W zqIMX@VRqjgePE>}VrVxYL#SP|eMoZ(f~~BygaJ%2mHe!T3A_ZU4+sDNu=xB|f4Dp% z61O%lFW=R=cRn{A+I;PDeSW5F#;c)JrD5jc^v690?U6qI7}6vLYF54^3k)S60H{q_ z<<6*0NtVH21p~5gr<5rA;u@UPO*ouz5GR<)^=&Ak9h-*hQ3MU*y>LAnHT-;OYf^2Z zJbsfCAMxh6DaEN#{0PobY5zGx6Fuss#|{`ahp1} zyGhs$ zBE4sJlSy*5AC ztlC3jLNZR1wMvRdeCyyYeqLMKWjP;1-Z#47Y`I%V8QNiFSzm`;!)GR04}4}sqx+7( zex(eJ96}Yhd_avEibC47IP|V7C&dwlxIY)*1vdf-RJl)*2eZI&`j2VkHZPnk{eAw( za&bvQTl*|D5()lyrq|U3aEkmdpuSRu>3>QP$I$NV2+$_ZGl1ikb z0t?!>E7*Nsc?uqeJf&S=<5&@rFeC|c?2EcE61x*%e3Dw9gfxC2b5m@zOvq!Pi!%V- z+p;5%&=?T&@WYmEezA<*9`QX$8zyU*=0<2RS=(Rx2nIX8Xq;pp`Hno%eX*k172izC zNu}y^k!O^t(C(KoPODa&YMX6F`63Fq?#b|=Iu00Swi`TACd^CSze4#W?BwOi22IQe z>VczD5SOlL2l zJ9`XE&yn2wez2!$C_&Zf%UyD4Y?CU*3-ZKYO%k1(bPoM=>pi%$v@xkq+NWv^82hq2 z;H{x7WRhM!r}S5^SXcMxRlyaubTd4A=Px{Pb5zRyic6Kd(Ac&R!xM_&2)dNiP(xI# zbaq!RKcPjev5$2p4d1?9DF)X8!gqE{_oxJ3!0<<+5ZzaONn{e9j!#{23zGW_t-#Z#9+YFL?)1c5#zsY$`vmEMirm$j*##GweIl9@q{Q!ERe(QnSi} zU322*nOuMnq&|Yu58vRvh4Ve>rZ$2wg@1pOZ zxMY~Si|Pm(=dok_Mp|s^wITFeCutG3-8nAAiZK|{{=bx3V zUM0%_%p5=a`i23C3>Xis-9UYN3e0H3&f}8+Kr1!$Ed)$YMfd5o&H9iY_e(@h%Z@NY zo0?EpAi(_R8A+V$RS10&q`Y1<<-Mj!%XKkGE$BV@2nXj2?)~Xb14}wz2-i#|VI&T8 zwI~VCBYS~QYYCit2^JVbDhDk~@~oy-{!e5^sy(*(zGI%X?u;K8U;>xBSFsBR4h|2^ zwEOwn5^!B78L6QYpBiXOaufA#lZ<(Mgrs1d#2dmZ{!A!%)y?iCeBZa&Dvxo>ICm>? zUSo{0LTtzLv_+Ih%Qis(Y&Ri96SQG)k!l?y=4qc_fiJ zWpN+vvlEq8!gv}BV>2q9$9yXYjnY7ZLAFz0R6Iaj)T};vikU9HI|gs0750yDQnc#T zkO92c$QdUWhWqmnn-WIC3S&6ves`4<+xRIX-6!koN*eLrS3Wq{(+g7Ln@OWyt`{F> zMA&a0ASgROBv00T?3D;NAnd$3OhCzx3zy->TJjOxjA|SBxl;%Leh+3ah8NZrX_2QS zwRH4pZ-2uQc%e z@JB;O^b#YRBYl6Q4{=h!Q!uaAP^T>(#ISTUXLBE*AXMvKN21) zbx^AK{d-i#?!6BND_qX{?_LU^F12@5`i4tGW!vvzzYMEtnHNIYT65d#4a&Seyu;tO z;^vXhD{8jDQ1dMJu$~AFZj$mrT2|lcIGz(jFN?kdNOfJk-%|ZZPfVhgU5FpsHR|Wr zTvH-;YiV5J8FmkZiDWEZ?=`-v=HJ_dF;^}=gl9pI@=wYv1p(;CYZVEuEw2O-Zy&d1 zzU0=riu_4WSI;FkMR6RK;uM~7J#9tsPrTE*!a|Fjil}MTCo5<~DUUg3@vY`g9g9?A zHas1TA~h+5yb+iKEWx8igSc|d*6WClx`mK0mmW}y%!UsO-= z8KT;bru4aMbNp0=@z;ZSnP&F_-%WjX*dkF);aCuQ?-%h_muuFMp9DySf)q{G<#d#Z z*;IDC+5^2ywz(0E-gEH>kEW>CaK?Pow>7l?DL~M;(J!7%3mzE|xahvJ6_e$4Dmk;0 zlxVAg>G?2Nb0Lb|c8etWU2CsCat!^*Ol@}xvD`UJFYIN399MC}mrdF@ODZfdBT54w z55ul#(XCoB8~t9*(3?mWqXGugjVc| zJutzZQjtAz4ml7#hhI7R-Cwg~{Et?X`iPX{cMbWXzhkXz=S{~Gem)40A>|D>d{)Hb zw-9*59QuRcQ^&r8!roW0Ydw7_=qCoJ5C5_MqCV0r9C+VWfs9VZcMyByk*3#Q`L18TQ<8YI4-!DC0n7>}}YOkkouSJ{4=F*>KES^o8 zAfgBh5P2F=sHwDZ#vikDy}b8;v!pB{TsPTJij;JpSUb;y)9;|kldvA1!om@3H`XNyKC!>j_+2rKIf1IEKhV&0&G=p5i<$k7a z1k6c--UfN+WM09}DTPeULwrwtAh$x0s}8z5(ZI7_UeFdPe|y}UW{6Zj)bw~o+2rC& z?Vuj?UTUbb+kl`gmvEdx-qsb(XEm8%KF|fW-5d$kd-PRu&M-4y%U%?65BoUD=;~Pu z)|UTM00~wty6XFHK83L=?jx<*lrN=*DdyFx#)x-1gm#ZY-mGM!Yeb)sqo*06HF86* zF&EFUT=G*C4#_y<3x%V>xfH_b!w`&MIl0$mcTpYXzdBX2zTrM?%S#8z?i6b{1Ij4> zq;sFHb_<;eo0AWk($9=w5{NtrvmJ z2?5I|=g-VHlPbLN;X|D_ySIjjC$t%zUY6nU-@)^uPo4V5iL#z~jm9%0ZlLv3-7d~8 zc=H2`^w~bj=^}6I z>Y^Y$>vDS>fch30Hl7%IFR?(-t6(3#>oy+SxBR0?oVn>G9-P4plP;h-}=)DLCqB@(*it2Fe}*h^T!RscG+pW z??VIZLAqS!Eb}v(nUr3U&f%n8LSz{VrcN+>L4F%NvARefmHIB%d(xc}l;Gk1+W zXS`$Dd|sj+yO$GI%~mgMQo!GlCEa5rD)RvFgluR10GQ<&P6%Or!rt66&UMuC(bB!% z@TGHz)?q(!I3It&2q{ZxzLCmxbNpy($m?Yc1Ud%N(k01Na z0_2Wsb`>xCpr|y}A$Y7H^IZi%7vN&RzNF`p3DcG>SL7NxVs{{>Q}7WrDNW!IWX zDZ~v@@Bag?x|@OF=1WnB4BIJnjhY4!0^kz3_=vx%*FlTo0${l9MHfjp#~%JcSh=6w zA7e!d;7=JjlopDZ_2P4)03|tzdIPf02YO2?mIHKtylCOfVgP$1%(8uX#Lq$wmERpw zc0q{uz0D^-n2D>oe(zX~PR2-$cKKBO#QbE#g}sR|E7emsxZrn~8{M_dAvBuDR*#T4 zzf>D;t;5@}*$k9rfs)R!CV);(KH$SpXd!b6`sWeR^la8V`Y+1ZBB~)L#p^t7YSP<# zk~A@8jq@*xpg^&a%Wf~y9XizvlY@r#Vs9hFuy_5g>dc=r;vWDL)P;QGJBi*;8(LT1k(;Zu5r&D>A&)whN}C8 zVH6fJbk12&3E>+5a~>%miLZOk6qQhsD(bjT#gY5|rR(c|<>!hY@CM%(hv=K;6qh7>TTjmI_?|A_#`TPRJ>@n1 zZf@SEkS3P%VH*w$XOF%SvRrJ$oXDa_=-Y3ynzQKlIgmpL@l#PInNt2=mg?B4kkEJI zR6RbFtIr#;3(y*~XTiU@la<{l0VgQt$pdIOkAWJo*UnHK`v40BkpQriQEi_a2B3Z9L{Z$-ywd|DH*fYes7@E2g9&Z`%h630RzH_`JZU zx`v>rW3hi^2kCMqskDsD#cmRRvX&6pf$i^$4{RNj`H@ZoiXQQLDhQ&Ow|}Q4;&arn z&UYHc8xe0OSoE`3V4f=r{qcu*gVI2B)D?jkB??u>Ik)#obdr)U{sEc@GfUP9}mf&_Or-oUC>nB5?>YY7APb5(*rbsLztk+y}ROxd&_-C z&tsAZEMq#UY&(N7IU~Dg8tq`F&ti6r0zul(pOnZ#TrMP-lu!PLPEFMNhfXChsoJ8D zBnAQy`b)9?@4ql)!HDt@ixCNi_`%TkWmoT(h=69cNnru|2RZztG`;g5@TJth!n7Ln z>{d<@g^#OCu%W}ARj%WBW8CL-vz^Xo=Ow4jz0RMK+&%Q)SDQbq_m%=V>~Mle$exIq z%eOzpn+_J3n)S+uRbtZ!_U@Xn=cz*r&uXAcupizklstj;&tZ3a8 zfCmy-X4dsE7{$J9&V%<&2}$k@!|8-#yT0kWL#aVd*r>+VTCBv$H3AErPy9kEgzhBT zw^Xe*amDS?UG;caI>caNd`LAiYaJ#805aWe#sBMKq^fTz)o+ z;0fc~(UW6k3Dtyu?rx!+l679+KgFlg6A&dGDc1K}ynm5TXtZM8Q8}u$myVBH1nw{@)_W|)m`#Z{GIIJe~<=3Rl#DYGB zW5GuC5xC2~ZRa$eCSmJ42lib-?0kTdzJ%8bsUHdKa_)EhTf7XG&zYUQuFv{{_f7jX zx`~cAp<8F0euyseUryn}tzZN8?8u+bup3O@?0Z92a#)fQlQ|3?$rmxy$GUVKHZJWI z1(HvJ+H0__C{%dt)*h}rp!VVn7d8fYl}o%>b&r*QeLNeQ%uzOAfBOMb6ZcY~|LchP z&g9&;x67vuHk2pv(cDMguW{Gas)%KA83zwnl`J9hv$dri`H7YY)&^o$ZS*Pi^hH zUyo`+>unrVrtp&GvFz4QeyKF2xgd6U@{s=bZZo0>#UGd}44vb`7`t>DJlLiif4(~{ z$1a2hmpxs{)>bOW0j}xWxfHD3lnq0*?6lx^17lV9a@01*$3Ho+8*S-8Xt_8WYstk% z_kO@1KIjLXj<2`yO1#r}IW^Mq+iNF$q{UYSyOq}`f1|jE zMi6T{2WJH$CbBHvJ@@LYdfG1g&fE}vgGLElYTk4}-Ze{-4^N3moow-cwjfmHmEhxN zrEv$&0#t@BNP_Ak?ABi_|CAW<6|mgoVTuu!P!)*U=TmidV6}dvQvk;JeU#}7VVI$qr!*0;!w*dA)Aq3*zh{q1m|cr`38(I!hN)}l;`x5HZ88(PNvbw{ zDy~5YpzU@|rmP*f%fB2)Hv0jupOi1joadI*uaI2ny@qHAH(iR%M!NkzQ|A4WN@t+s z@4ZsTZTUX-XJ~cRGTFiCn^d!k1jb#TJnZ=J?)R}ko{Gu3)m>>gGY~Dk^9UH7cg}QM zMSRJg!8|Iviw&^Rg>h0D4XxL6-f(<};y+khc#Ho|roQJ@HfiuQGx45Tf;IDw^=$eA z$1fo)htlVHhi5$>Ef2ut33`+BfN2AfLFg`kDjG=QHD_n1aorp=ftR-vJ5GrO~USwmc- zl%tYXGo0s&nag{&y`p^sw0TCogb*V-Se<)8h&bd@e4PA3^*x41pjZol=1sgOpZ_I) z+%NAW02vZiV_xyI%WPovo^I)7wiv{N)VK20-7dKsu=dbx>CdX}5eowQeJ6(0g+=as z7wJEds@3()%$2m`KM-B-{S{qMFAF=}>v~Km>36pYM~MQNhSl>(;4>JiCOcY1JLu(x zc7P;Fh2jeaZ@Pvr7SaQq-QOH2DA%jF*BJFT6Z^*D-S|g<@!GivF&fsyJX)6dX7Vtm zY$_Z2CO0~L>GO^WhpWHX-Tj(b`%`@-^g13kgI|$8B7yog)dHidhJu^4Dm8Z;%}v`5 zteDa3yYblQgn7C#DdBf_?y077*0NvV1%#n0R+9gX?qh_g8kjK==j$CFPU%-ffo6|;JIOCD$Wq%?eSdkXD!)xfZo zu<$Z@fU*JMiPbLO8_lxGP^*EYD=OHO=ov-MZ0UWqGF^ILN~CpYsUE@uK!H?QnKq;%)KL zG4n*-XX;@=YCB~NNxs$VJpShifyuu03~o!^nbxEx2DfX_Jlg1w@5J^a-`2Y;s@F|) z@2BE&jGy6DsJaoW4c_`95*cn9{nguUho&{cq%>Z;S%ErB=sCXAlpjsm?PRVTPRFBG z6>;S6=oTtPQ~J_g8F<&ArC7P@@S;_I*0vJ1DLOZN8nO47(Q!T)(7`<`G#&; zzpQcP^qBy1yYYbx++K?=K z8G5HPrv6$F>MuNSx!lq4^Y=C4|JWlejjU7G=YjY7Mfrq+>)VQ6po`hVHo;$!07X)J{b-o_ky_ z(5|&6zRu}kG?0z?{k)n}KUp$3&YZHM1<>|rg?<8?9`wLppg1+ab>uk!j-h)VKsYO2 znaNHppjB?V)DQ81{bE|mIH|5S6`^7)?_k34MknR~`zE!RZAm`HE+XZ}Go%3TA2MmA z1z6v`*WRe;d|iEBc0|R}l1@#1fBg2Bz;E%Qqh*pHlnuAD=iYV^Zbo&>tTtG0y#lPguXwiYU??5m&;sO4%2kum*G=07H*^8e_pS+nlzY}QQkhSR zzkp!*T%FC{VE(hKqckMhe(0u91}196qOTl%zn=CsE~v>MR;^P*k@x*&cwq1G?5fja z(#EarFOd^<@27B1i-s2;!@oQlf5@%f`f%Ik2Z>`-{o|+EvH9c3!dHN;ej>jU%w|mi zaQkePE#chunavTL1wA2v@_OLXC^tS1c(%D`7@W=Xg)HLh%RABrPonHU#2; zc8Is(>f1ft+d%ik=v>XPZT7KwllkFGuB1pRzR18#Ck{suSV!obs?U^e!+uonTm0UY zPq8<>7CVl=$WQn3rUuU|Fiq&%<;(HpNq?pEC4Mf^OB5i^hNe$D)Ds^eJlqaOk<|y@ z@9UUWdW?3{weFzRx2SZA{vX-K_|F~)E4(|IzGu7H`m#?GyVZnSqeKioPp?j_KISW(XvbnCpoOtI_czoc;K_2R!a5ViFHVIrFw&4iH-|9hFX4X~9sUpNSDr$hrX886=2u@dgg~$}KEa{svWN zl&y_&DycdncSIX8vl%uH8v_ZSv{d35`y+86*`Lnl$7yEdLr)F5zg^dce!qMEzy}lt z3jJ2QtT)}TFMA=}5IyYqp%C}0-NMZzB{dEbZXEU-#c)uAl~S||`6cjRJ@l~qmsayK z?DU1Y#E}R&WR7;Z^_Q#tTCC?0S7JrkQyx2>;Y(Wj!^fpN6P_v2t{i*AZRYB*Los08 z(xG0gmtVHk#X=5)V~ME(oOBQ^`20>ofv;z9is7hF~wA}(bQ \ No newline at end of file diff --git a/web-app/build/logo192.png b/web-app/build/logo192.png deleted file mode 100644 index 69bf9d7710ac6469d335583de06ee5a4f6d490ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9284 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 MN=dRz+$7-t04UbDlmGw# diff --git a/web-app/build/logo512.png b/web-app/build/logo512.png deleted file mode 100644 index 407c51380410459aab7179a1577715edaeda7377..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15302 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 Z)X}_-aWC} \ No newline at end of file diff --git a/web-app/build/minioTier.png b/web-app/build/minioTier.png deleted file mode 100644 index a94d8a42ec6aecf5aee01b97411aede73d4e0bc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7679 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 \ No newline at end of file diff --git a/web-app/build/mqtt.png b/web-app/build/mqtt.png deleted file mode 100644 index 54c66969cbdec2e205f299f1e2ddceb2d6a6fed7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24598 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 Yg?e-UMri>$=--o76g1?kWi7(~3*FPqR{#J2 diff --git a/web-app/build/mysql-logo.svg b/web-app/build/mysql-logo.svg deleted file mode 100644 index c87a4e325a3..00000000000 --- a/web-app/build/mysql-logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/web-app/build/mysql.png b/web-app/build/mysql.png deleted file mode 100644 index 2610494104d3aa832d2e7744948e825cc6518be5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19940 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 N4riS0YHa \ No newline at end of file diff --git a/web-app/build/nats.png b/web-app/build/nats.png deleted file mode 100644 index 621848ec134342b57496be7c4e4c64a72c71f217..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25129 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 Bb5j5S diff --git a/web-app/build/nsq-logo.svg b/web-app/build/nsq-logo.svg deleted file mode 100644 index e5fe58ac66f..00000000000 --- a/web-app/build/nsq-logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/web-app/build/postgres-logo.svg b/web-app/build/postgres-logo.svg deleted file mode 100644 index fdca8d8b4bd..00000000000 --- a/web-app/build/postgres-logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/web-app/build/postgres.png b/web-app/build/postgres.png deleted file mode 100644 index 42ebd81643d3a89cdb57a77103980d89bf387be0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46793 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
pwYKN9WHCKzT_6xecnD=bGdK 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 diff --git a/web-app/build/redis-logo.svg b/web-app/build/redis-logo.svg deleted file mode 100644 index d2eb2304dec..00000000000 --- a/web-app/build/redis-logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/web-app/build/redis.png b/web-app/build/redis.png deleted file mode 100644 index efdf9651a21a68055f705c8e38104da412e77283..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48048 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�-*Hi>VJD>v4s)v?0l?R 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 - - - -Created by potrace 1.11, written by Peter Selinger 2001-2013 - - - - - diff --git a/web-app/build/static/css/main.110caa22.css b/web-app/build/static/css/main.110caa22.css deleted file mode 100644 index 892c61abf80..00000000000 --- a/web-app/build/static/css/main.110caa22.css +++ /dev/null @@ -1,2 +0,0 @@ -body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Inter,sans-serif;margin:0}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}input.removeArrows::-webkit-inner-spin-button,input.removeArrows::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input.removeArrows[type=number]{-moz-appearance:textfield}.ReactVirtualized__Table__headerRow{font-weight:700;text-transform:uppercase}.ReactVirtualized__Table__headerRow,.ReactVirtualized__Table__row{align-items:center;display:flex;flex-direction:row}.ReactVirtualized__Table__headerTruncatedText{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ReactVirtualized__Table__headerColumn,.ReactVirtualized__Table__rowColumn{margin-right:10px;min-width:0}.ReactVirtualized__Table__rowColumn{text-overflow:ellipsis;white-space:nowrap}.ReactVirtualized__Table__headerColumn:first-of-type,.ReactVirtualized__Table__rowColumn:first-of-type{margin-left:10px}.ReactVirtualized__Table__sortableHeaderColumn{cursor:pointer}.ReactVirtualized__Table__sortableHeaderIconContainer{align-items:center;display:flex}.ReactVirtualized__Table__sortableHeaderIcon{fill:currentColor;flex:0 0 24px;height:1em;width:1em} -/*# sourceMappingURL=main.110caa22.css.map*/ \ No newline at end of file diff --git a/web-app/build/static/css/main.110caa22.css.map b/web-app/build/static/css/main.110caa22.css.map deleted file mode 100644 index 91d4d2e84ca..00000000000 --- a/web-app/build/static/css/main.110caa22.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/css/main.110caa22.css","mappings":"AAAA,KAGE,kCAAmC,CACnC,iCAAkC,CAFlC,4BAAgC,CADhC,QAIF,CAEA,KACE,uEAEF,CAGA,4FAEE,uBAAwB,CACxB,QACF,CAGA,gCACE,yBACF,CCEA,oCACE,eAAgB,CAChB,wBAIF,CACA,kEAFE,kBAAmB,CAFnB,YAAa,CACb,kBAOF,CAEA,8CACE,oBAAqB,CACrB,cAAe,CAGf,eAAgB,CADhB,sBAAuB,CADvB,kBAGF,CAEA,2EAEE,iBAAkB,CAClB,WACF,CACA,oCACE,sBAAuB,CACvB,kBACF,CAEA,uGAEE,gBACF,CACA,+CACE,cACF,CAEA,sDAEE,kBAAmB,CADnB,YAEF,CACA,6CAIE,iBAAkB,CAHlB,aAAc,CACd,UAAW,CACX,SAEF","sources":["index.css","../node_modules/react-virtualized/source/styles.css"],"sourcesContent":["body {\n margin: 0;\n font-family: \"Inter\", sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\ncode {\n font-family: source-code-pro, Menlo, Monaco, Consolas, \"Courier New\",\n monospace;\n}\n\n/* Chrome, Safari, Edge, Opera */\ninput.removeArrows::-webkit-outer-spin-button,\ninput.removeArrows::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n}\n\n/* Firefox */\ninput.removeArrows[type=\"number\"] {\n -moz-appearance: textfield;\n}\n","/* Collection default theme */\n\n.ReactVirtualized__Collection {\n}\n\n.ReactVirtualized__Collection__innerScrollContainer {\n}\n\n/* Grid default theme */\n\n.ReactVirtualized__Grid {\n}\n\n.ReactVirtualized__Grid__innerScrollContainer {\n}\n\n/* Table default theme */\n\n.ReactVirtualized__Table {\n}\n\n.ReactVirtualized__Table__Grid {\n}\n\n.ReactVirtualized__Table__headerRow {\n font-weight: 700;\n text-transform: uppercase;\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n.ReactVirtualized__Table__row {\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n\n.ReactVirtualized__Table__headerTruncatedText {\n display: inline-block;\n max-width: 100%;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.ReactVirtualized__Table__headerColumn,\n.ReactVirtualized__Table__rowColumn {\n margin-right: 10px;\n min-width: 0px;\n}\n.ReactVirtualized__Table__rowColumn {\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.ReactVirtualized__Table__headerColumn:first-of-type,\n.ReactVirtualized__Table__rowColumn:first-of-type {\n margin-left: 10px;\n}\n.ReactVirtualized__Table__sortableHeaderColumn {\n cursor: pointer;\n}\n\n.ReactVirtualized__Table__sortableHeaderIconContainer {\n display: flex;\n align-items: center;\n}\n.ReactVirtualized__Table__sortableHeaderIcon {\n flex: 0 0 24px;\n height: 1em;\n width: 1em;\n fill: currentColor;\n}\n\n/* List default theme */\n\n.ReactVirtualized__List {\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/104.478cfff7.chunk.js b/web-app/build/static/js/104.478cfff7.chunk.js deleted file mode 100644 index 97fc2fee6d3..00000000000 --- a/web-app/build/static/js/104.478cfff7.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[104],{104:(e,t,a)=>{a.r(t),a.d(t,{default:()=>x});var s=a(5043),n=a(3216),r=a(9923),c=a(4574),p=a(9161),i=a(579);const o=c.Ay.iframe((()=>({border:"0px",flex:"1 1 auto",minHeight:"800px",width:"100%"}))),x=()=>{const{tenantName:e,tenantNamespace:t}=(0,n.g)(),[a,c]=(0,s.useState)(!0);return(0,i.jsxs)(s.Fragment,{children:[(0,i.jsx)(r._xt,{separator:!0,sx:{marginBottom:15},children:"Metrics"}),a&&(0,i.jsx)("div",{style:{marginTop:"80px"},children:(0,i.jsx)(r.z21,{})}),(0,i.jsx)(o,{title:"metrics",src:"/api/proxy/".concat(t||"","/").concat(e||"").concat(p.zZ.TOOLS_TRACE,"?cp=y"),onLoad:()=>{c(!1)}})]})}}}]); -//# sourceMappingURL=104.478cfff7.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/104.478cfff7.chunk.js.map b/web-app/build/static/js/104.478cfff7.chunk.js.map deleted file mode 100644 index 2007e7da6c2..00000000000 --- a/web-app/build/static/js/104.478cfff7.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/104.478cfff7.chunk.js","mappings":"6LAsBA,MAAMA,EAAkBC,EAAAA,GAAOC,QAAO,MACpCC,OAAQ,MACRC,KAAM,WACNC,UAAW,QACXC,MAAO,WA+BT,EA5BoBC,KAClB,MAAM,WAAEC,EAAU,gBAAEC,IAAoBC,EAAAA,EAAAA,MAEjCC,EAASC,IAAcC,EAAAA,EAAAA,WAAkB,GAEhD,OACEC,EAAAA,EAAAA,MAACC,EAAAA,SAAQ,CAAAC,SAAA,EACPC,EAAAA,EAAAA,KAACC,EAAAA,IAAY,CAACC,WAAS,EAACC,GAAI,CAAEC,aAAc,IAAKL,SAAC,YAGjDL,IACCM,EAAAA,EAAAA,KAAA,OAAKK,MAAO,CAAEC,UAAW,QAASP,UAChCC,EAAAA,EAAAA,KAACO,EAAAA,IAAW,OAGhBP,EAAAA,EAAAA,KAACjB,EAAe,CACdyB,MAAO,UACPC,IAAG,cAAAC,OAAgBlB,GAAmB,GAAE,KAAAkB,OAAInB,GAAc,IAAEmB,OAC1DC,EAAAA,GAAUC,YAAW,SAEvBC,OAAQA,KACNlB,GAAW,EAAM,MAGZ,C","sources":["screens/Console/Tenants/TenantDetails/TenantTrace.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState, Fragment } from \"react\";\nimport { useParams } from \"react-router-dom\";\nimport { ProgressBar, SectionTitle } from \"mds\";\nimport styled from \"styled-components\";\nimport { IAM_PAGES } from \"../../../../common/SecureComponent/permissions\";\n\nconst IFrameContainer = styled.iframe(() => ({\n border: \"0px\",\n flex: \"1 1 auto\",\n minHeight: \"800px\",\n width: \"100%\",\n}));\n\nconst TenantTrace = () => {\n const { tenantName, tenantNamespace } = useParams();\n\n const [loading, setLoading] = useState(true);\n\n return (\n \n \n Metrics\n \n {loading && (\n
\n \n
\n )}\n {\n setLoading(false);\n }}\n />\n
\n );\n};\n\nexport default TenantTrace;\n"],"names":["IFrameContainer","styled","iframe","border","flex","minHeight","width","TenantTrace","tenantName","tenantNamespace","useParams","loading","setLoading","useState","_jsxs","Fragment","children","_jsx","SectionTitle","separator","sx","marginBottom","style","marginTop","ProgressBar","title","src","concat","IAM_PAGES","TOOLS_TRACE","onLoad"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/112.1ea6a792.chunk.js b/web-app/build/static/js/112.1ea6a792.chunk.js deleted file mode 100644 index 7c435cc823f..00000000000 --- a/web-app/build/static/js/112.1ea6a792.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[112],{112:(e,n,s)=>{s.r(n),s.d(n,{default:()=>h});var t=s(5043),r=s(9456),a=s(9923),c=s(3216),o=s(6483),l=s(2961),d=s(4159),i=s(649),x=s(6746),j=s(579);const h=()=>{const e=(0,l.jL)(),n=(0,c.g)(),s=(0,r.d4)((e=>e.tenants.loadingTenant)),[h,g]=(0,t.useState)([]),[p,m]=(0,t.useState)(!0),u=n.tenantName||"",A=n.tenantNamespace||"";return(0,t.useEffect)((()=>{s&&m(!0)}),[s]),(0,t.useEffect)((()=>{p&&i.A.invoke("GET","/api/v1/namespaces/".concat(A,"/tenants/").concat(u,"/events")).then((e=>{for(let n=0;n{e((0,d.C9)(n)),m(!1)}))}),[p,A,u,e]),(0,j.jsxs)(t.Fragment,{children:[(0,j.jsx)(a._xt,{separator:!0,sx:{marginBottom:15},children:"Events"}),(0,j.jsx)(a.xA9,{item:!0,xs:12,children:(0,j.jsx)(x.A,{events:h,loading:p})})]})}},6746:(e,n,s)=>{s.d(n,{A:()=>o});var t=s(5043),r=s(9923),a=s(579);const c=e=>{const{event:n}=e,[s,c]=t.useState(!1);return(0,a.jsxs)(t.Fragment,{children:[(0,a.jsxs)(r.Hjg,{sx:{cursor:"pointer"},children:[(0,a.jsx)(r.TlP,{scope:"row",onClick:()=>c(!s),sx:{borderBottom:0},children:n.event_type}),(0,a.jsx)(r.nA6,{onClick:()=>c(!s),sx:{borderBottom:0},children:n.reason}),(0,a.jsx)(r.nA6,{onClick:()=>c(!s),sx:{borderBottom:0},children:n.seen}),(0,a.jsx)(r.nA6,{onClick:()=>c(!s),sx:{borderBottom:0},children:n.message.length>=30?"".concat(n.message.slice(0,30),"..."):n.message}),(0,a.jsx)(r.nA6,{onClick:()=>c(!s),sx:{borderBottom:0},children:s?(0,a.jsx)(r.FUY,{}):(0,a.jsx)(r.QpL,{})})]}),(0,a.jsx)(r.Hjg,{children:(0,a.jsx)(r.nA6,{style:{paddingBottom:0,paddingTop:0},colSpan:5,children:s&&(0,a.jsx)(r.azJ,{useBackground:!0,sx:{padding:10,marginBottom:10},children:n.message})})})]})},o=e=>{let{events:n,loading:s}=e;return s?(0,a.jsx)(r.z21,{}):(0,a.jsx)(r.azJ,{withBorders:!0,customBorderPadding:"0px",children:(0,a.jsxs)(r.XIK,{"aria-label":"collapsible table",children:[(0,a.jsx)(r.ndF,{children:(0,a.jsxs)(r.Hjg,{children:[(0,a.jsx)(r.nA6,{children:"Type"}),(0,a.jsx)(r.nA6,{children:"Reason"}),(0,a.jsx)(r.nA6,{children:"Age"}),(0,a.jsx)(r.nA6,{children:"Message"}),(0,a.jsx)(r.nA6,{})]})}),(0,a.jsx)(r.BFY,{children:n.map((e=>(0,a.jsx)(c,{event:e},"".concat(e.event_type,"-").concat(e.seen))))})]})})}}}]); -//# sourceMappingURL=112.1ea6a792.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/112.1ea6a792.chunk.js.map b/web-app/build/static/js/112.1ea6a792.chunk.js.map deleted file mode 100644 index 76fba7db3ea..00000000000 --- a/web-app/build/static/js/112.1ea6a792.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/112.1ea6a792.chunk.js","mappings":"oOA4BA,MAsDA,EAtDqBA,KACnB,MAAMC,GAAWC,EAAAA,EAAAA,MACXC,GAASC,EAAAA,EAAAA,KAETC,GAAgBC,EAAAA,EAAAA,KACnBC,GAAoBA,EAAMC,QAAQH,iBAG9BI,EAAQC,IAAaC,EAAAA,EAAAA,UAAmB,KACxCC,EAASC,IAAcF,EAAAA,EAAAA,WAAkB,GAC1CG,EAAaX,EAAOW,YAAc,GAClCC,EAAkBZ,EAAOY,iBAAmB,GA+BlD,OA7BAC,EAAAA,EAAAA,YAAU,KACJX,GACFQ,GAAW,EACb,GACC,CAACR,KAEJW,EAAAA,EAAAA,YAAU,KACJJ,GACFK,EAAAA,EACGC,OACC,MAAM,sBAADC,OACiBJ,EAAe,aAAAI,OAAYL,EAAU,YAE5DM,MAAMC,IACL,IAAK,IAAIC,EAAI,EAAGA,EAAID,EAAIE,OAAQD,IAAK,CACnC,IAAIE,EAAeC,KAAKC,MAAQ,IAAQ,EAExCL,EAAIC,GAAGK,MAAOC,EAAAA,EAAAA,KAAUJ,EAAcH,EAAIC,GAAGO,WAAWC,WAC1D,CACApB,EAAUW,GACVR,GAAW,EAAM,IAElBkB,OAAOC,IACN/B,GAASgC,EAAAA,EAAAA,IAAqBD,IAC9BnB,GAAW,EAAM,GAEvB,GACC,CAACD,EAASG,EAAiBD,EAAYb,KAGxCiC,EAAAA,EAAAA,MAACC,EAAAA,SAAQ,CAAAC,SAAA,EACPC,EAAAA,EAAAA,KAACC,EAAAA,IAAY,CAACC,WAAS,EAACC,GAAI,CAAEC,aAAc,IAAKL,SAAC,YAGlDC,EAAAA,EAAAA,KAACK,EAAAA,IAAI,CAACC,MAAI,EAACC,GAAI,GAAGR,UAChBC,EAAAA,EAAAA,KAACQ,EAAAA,EAAU,CAACpC,OAAQA,EAAQG,QAASA,QAE9B,C,mEC1Cf,MAAMkC,EAASC,IACb,MAAM,MAAEC,GAAUD,GACXE,EAAMC,GAAWC,EAAAA,UAAe,GAEvC,OACEjB,EAAAA,EAAAA,MAACiB,EAAAA,SAAc,CAAAf,SAAA,EACbF,EAAAA,EAAAA,MAACkB,EAAAA,IAAQ,CAACZ,GAAI,CAAEa,OAAQ,WAAYjB,SAAA,EAClCC,EAAAA,EAAAA,KAACiB,EAAAA,IAAa,CACZC,MAAM,MACNC,QAASA,IAAMN,GAASD,GACxBT,GAAI,CAAEiB,aAAc,GAAIrB,SAEvBY,EAAMU,cAETrB,EAAAA,EAAAA,KAACsB,EAAAA,IAAS,CAACH,QAASA,IAAMN,GAASD,GAAOT,GAAI,CAAEiB,aAAc,GAAIrB,SAC/DY,EAAMY,UAETvB,EAAAA,EAAAA,KAACsB,EAAAA,IAAS,CAACH,QAASA,IAAMN,GAASD,GAAOT,GAAI,CAAEiB,aAAc,GAAIrB,SAC/DY,EAAMrB,QAETU,EAAAA,EAAAA,KAACsB,EAAAA,IAAS,CAACH,QAASA,IAAMN,GAASD,GAAOT,GAAI,CAAEiB,aAAc,GAAIrB,SAC/DY,EAAMa,QAAQtC,QAAU,GAAE,GAAAJ,OACpB6B,EAAMa,QAAQC,MAAM,EAAG,IAAG,OAC7Bd,EAAMa,WAEZxB,EAAAA,EAAAA,KAACsB,EAAAA,IAAS,CAACH,QAASA,IAAMN,GAASD,GAAOT,GAAI,CAAEiB,aAAc,GAAIrB,SAC/Da,GAAOZ,EAAAA,EAAAA,KAAC0B,EAAAA,IAAa,KAAM1B,EAAAA,EAAAA,KAAC2B,EAAAA,IAAW,UAG5C3B,EAAAA,EAAAA,KAACe,EAAAA,IAAQ,CAAAhB,UACPC,EAAAA,EAAAA,KAACsB,EAAAA,IAAS,CAACM,MAAO,CAAEC,cAAe,EAAGC,WAAY,GAAKC,QAAS,EAAEhC,SAC/Da,IACCZ,EAAAA,EAAAA,KAACgC,EAAAA,IAAG,CAACC,eAAa,EAAC9B,GAAI,CAAE+B,QAAS,GAAI9B,aAAc,IAAKL,SACtDY,EAAMa,gBAKA,EA8BrB,EA1BmBW,IAA4C,IAA3C,OAAE/D,EAAM,QAAEG,GAA2B4D,EACvD,OAAI5D,GACKyB,EAAAA,EAAAA,KAACoC,EAAAA,IAAW,KAGnBpC,EAAAA,EAAAA,KAACgC,EAAAA,IAAG,CAACK,aAAW,EAACC,oBAAqB,MAAMvC,UAC1CF,EAAAA,EAAAA,MAAC0C,EAAAA,IAAK,CAAC,aAAW,oBAAmBxC,SAAA,EACnCC,EAAAA,EAAAA,KAACwC,EAAAA,IAAS,CAAAzC,UACRF,EAAAA,EAAAA,MAACkB,EAAAA,IAAQ,CAAAhB,SAAA,EACPC,EAAAA,EAAAA,KAACsB,EAAAA,IAAS,CAAAvB,SAAC,UACXC,EAAAA,EAAAA,KAACsB,EAAAA,IAAS,CAAAvB,SAAC,YACXC,EAAAA,EAAAA,KAACsB,EAAAA,IAAS,CAAAvB,SAAC,SACXC,EAAAA,EAAAA,KAACsB,EAAAA,IAAS,CAAAvB,SAAC,aACXC,EAAAA,EAAAA,KAACsB,EAAAA,IAAS,UAGdtB,EAAAA,EAAAA,KAACyC,EAAAA,IAAS,CAAA1C,SACP3B,EAAOsE,KAAK/B,IACXX,EAAAA,EAAAA,KAACS,EAAK,CAA2CE,MAAOA,GAAM,GAAA7B,OAA/C6B,EAAMU,WAAU,KAAAvC,OAAI6B,EAAMrB,eAI3C,C","sources":["screens/Console/Tenants/TenantDetails/TenantEvents.tsx","screens/Console/Tenants/TenantDetails/events/EventsList.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { Grid, SectionTitle } from \"mds\";\nimport { useParams } from \"react-router-dom\";\nimport { IEvent } from \"../ListTenants/types\";\nimport { niceDays } from \"../../../../common/utils\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport { setErrorSnackMessage } from \"../../../../systemSlice\";\nimport api from \"../../../../common/api\";\nimport EventsList from \"./events/EventsList\";\n\nconst TenantEvents = () => {\n const dispatch = useAppDispatch();\n const params = useParams();\n\n const loadingTenant = useSelector(\n (state: AppState) => state.tenants.loadingTenant,\n );\n\n const [events, setEvents] = useState([]);\n const [loading, setLoading] = useState(true);\n const tenantName = params.tenantName || \"\";\n const tenantNamespace = params.tenantNamespace || \"\";\n\n useEffect(() => {\n if (loadingTenant) {\n setLoading(true);\n }\n }, [loadingTenant]);\n\n useEffect(() => {\n if (loading) {\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${tenantNamespace}/tenants/${tenantName}/events`,\n )\n .then((res: IEvent[]) => {\n for (let i = 0; i < res.length; i++) {\n let currentTime = (Date.now() / 1000) | 0;\n\n res[i].seen = niceDays((currentTime - res[i].last_seen).toString());\n }\n setEvents(res);\n setLoading(false);\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n setLoading(false);\n });\n }\n }, [loading, tenantNamespace, tenantName, dispatch]);\n\n return (\n \n \n Events\n \n \n \n \n \n );\n};\n\nexport default TenantEvents;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport {\n ProgressBar,\n Table,\n TableBody,\n TableHeadCell,\n TableCell,\n TableHead,\n TableRow,\n Box,\n ExpandCaret,\n CollapseCaret,\n} from \"mds\";\nimport { IEvent } from \"../../ListTenants/types\";\n\ninterface IEventsListProps {\n events: IEvent[];\n loading: boolean;\n}\n\nconst Event = (props: { event: IEvent }) => {\n const { event } = props;\n const [open, setOpen] = React.useState(false);\n\n return (\n \n \n setOpen(!open)}\n sx={{ borderBottom: 0 }}\n >\n {event.event_type}\n \n setOpen(!open)} sx={{ borderBottom: 0 }}>\n {event.reason}\n \n setOpen(!open)} sx={{ borderBottom: 0 }}>\n {event.seen}\n \n setOpen(!open)} sx={{ borderBottom: 0 }}>\n {event.message.length >= 30\n ? `${event.message.slice(0, 30)}...`\n : event.message}\n \n setOpen(!open)} sx={{ borderBottom: 0 }}>\n {open ? : }\n \n \n \n \n {open && (\n \n {event.message}\n \n )}\n \n \n \n );\n};\n\nconst EventsList = ({ events, loading }: IEventsListProps) => {\n if (loading) {\n return ;\n }\n return (\n \n \n \n \n Type\n Reason\n Age\n Message\n \n \n \n \n {events.map((event) => (\n \n ))}\n \n
\n
\n );\n};\n\nexport default EventsList;\n"],"names":["TenantEvents","dispatch","useAppDispatch","params","useParams","loadingTenant","useSelector","state","tenants","events","setEvents","useState","loading","setLoading","tenantName","tenantNamespace","useEffect","api","invoke","concat","then","res","i","length","currentTime","Date","now","seen","niceDays","last_seen","toString","catch","err","setErrorSnackMessage","_jsxs","Fragment","children","_jsx","SectionTitle","separator","sx","marginBottom","Grid","item","xs","EventsList","Event","props","event","open","setOpen","React","TableRow","cursor","TableHeadCell","scope","onClick","borderBottom","event_type","TableCell","reason","message","slice","CollapseCaret","ExpandCaret","style","paddingBottom","paddingTop","colSpan","Box","useBackground","padding","_ref","ProgressBar","withBorders","customBorderPadding","Table","TableHead","TableBody","map"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/122.c782a33a.chunk.js b/web-app/build/static/js/122.c782a33a.chunk.js deleted file mode 100644 index 28a997e5689..00000000000 --- a/web-app/build/static/js/122.c782a33a.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[122],{8122:(e,t,a)=>{a.r(t),a.d(t,{default:()=>x});var n=a(5043),s=a(9456),c=a(3216),i=a(9923),l=a(649),r=a(4159),o=a(2961),m=a(8296),d=a(579);const x=()=>{const e=(0,o.jL)(),t=(0,c.Zp)(),a=(0,s.d4)((e=>e.tenants.currentTenant)),x=(0,s.d4)((e=>e.tenants.currentNamespace)),[u,p]=(0,n.useState)(!1),[h,f]=(0,n.useState)(!1),[j,y]=(0,n.useState)(""),[v,b]=(0,n.useState)("");(0,n.useEffect)((()=>{x&&a&&l.A.invoke("GET","/api/v1/namespaces/".concat(x,"/tenants/").concat(a,"/yaml")).then((e=>{f(!1),y(e.yaml)})).catch((t=>{f(!1),e((0,r.Dy)(t))}))}),[a,x,e]),(0,n.useEffect)((()=>{}),[]);const g=""!==j.trim();return(0,d.jsxs)(n.Fragment,{children:[u||h&&(0,d.jsx)(i.xA9,{item:!0,xs:12,children:(0,d.jsx)(i.z21,{})}),!h&&(0,d.jsx)("form",{noValidate:!0,autoComplete:"off",onSubmit:n=>{n.preventDefault(),n.preventDefault(),u||(p(!0),b(""),l.A.invoke("PUT","/api/v1/namespaces/".concat(x,"/tenants/").concat(a,"/yaml"),{yaml:j}).then((()=>{p(!1),e((0,m.X)()),b(""),t("/namespaces/".concat(x,"/tenants/").concat(a,"/summary"))})).catch((e=>{p(!1);const t=(null===e||void 0===e?void 0:e.message)||e.errorMessage;b(t)})))},children:(0,d.jsxs)(i.xA9,{container:!0,children:[(0,d.jsx)(i.xA9,{item:!0,xs:12,children:(0,d.jsx)(i._xt,{children:"Tenant Specification"})}),v?(0,d.jsx)(i.xA9,{item:!0,xs:12,children:(0,d.jsx)(i.Wei,{title:"Error",message:v,variant:"error"})}):null,(0,d.jsx)(i.xA9,{item:!0,xs:12,children:(0,d.jsx)(i.BYM,{value:j,mode:"yaml",onChange:e=>{y(e)},editorHeight:"550px"})}),(0,d.jsxs)(i.xA9,{item:!0,xs:12,style:{display:"flex",justifyContent:"flex-end",paddingTop:16},children:[(0,d.jsx)(i.$nd,{id:"cancel-tenant-yaml",type:"button",variant:"regular",disabled:u,onClick:()=>{t("/namespaces/".concat(x,"/tenants/").concat(a,"/summary"))},label:"Cancel"}),(0,d.jsx)(i.$nd,{id:"save-tenant-yaml",type:"submit",variant:"callAction",disabled:u||!g,style:{marginLeft:8},label:"Save"})]})]})})]})}}}]); -//# sourceMappingURL=122.c782a33a.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/122.c782a33a.chunk.js.map b/web-app/build/static/js/122.c782a33a.chunk.js.map deleted file mode 100644 index c5a0783dcfa..00000000000 --- a/web-app/build/static/js/122.c782a33a.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/122.c782a33a.chunk.js","mappings":"2NAqCA,MAuIA,EAvImBA,KACjB,MAAMC,GAAWC,EAAAA,EAAAA,MACXC,GAAWC,EAAAA,EAAAA,MAEXC,GAASC,EAAAA,EAAAA,KAAaC,GAAoBA,EAAMC,QAAQC,gBACxDC,GAAYJ,EAAAA,EAAAA,KACfC,GAAoBA,EAAMC,QAAQG,oBAG9BC,EAAYC,IAAiBC,EAAAA,EAAAA,WAAkB,IAC/CC,EAASC,IAAcF,EAAAA,EAAAA,WAAkB,IACzCG,EAAYC,IAAiBJ,EAAAA,EAAAA,UAAiB,KAC9CK,EAAcC,IAAmBN,EAAAA,EAAAA,UAAiB,KA0BzDO,EAAAA,EAAAA,YAAU,KACJX,GAAaL,GACfiB,EAAAA,EACGC,OAAO,MAAM,sBAADC,OAAwBd,EAAS,aAAAc,OAAYnB,EAAM,UAC/DoB,MAAMC,IACLV,GAAW,GACXE,EAAcQ,EAAIC,KAAK,IAExBC,OAAOC,IACNb,GAAW,GACXf,GAAS6B,EAAAA,EAAAA,IAA0BD,GAAK,GAE9C,GACC,CAACxB,EAAQK,EAAWT,KAEvBoB,EAAAA,EAAAA,YAAU,QAAU,IAEpB,MAAMU,EAAkC,KAAtBd,EAAWe,OAE7B,OACEC,EAAAA,EAAAA,MAACC,EAAAA,SAAQ,CAAAC,SAAA,CACNvB,GACEG,IACCqB,EAAAA,EAAAA,KAACC,EAAAA,IAAI,CAACC,MAAI,EAACC,GAAI,GAAGJ,UAChBC,EAAAA,EAAAA,KAACI,EAAAA,IAAW,OAIhBzB,IACAqB,EAAAA,EAAAA,KAAA,QACEK,YAAU,EACVC,aAAa,MACbC,SAAWC,IACTA,EAAEC,iBACWD,EAzDfC,iBACFjC,IAGJC,GAAc,GACdO,EAAgB,IAChBE,EAAAA,EACGC,OAAO,MAAM,sBAADC,OAAwBd,EAAS,aAAAc,OAAYnB,EAAM,SAAS,CACvEsB,KAAMV,IAEPQ,MAAK,KACJZ,GAAc,GACdZ,GAAS6C,EAAAA,EAAAA,MACT1B,EAAgB,IAChBjB,EAAS,eAADqB,OAAgBd,EAAS,aAAAc,OAAYnB,EAAM,YAAW,IAE/DuB,OAAOC,IACNhB,GAAc,GACd,MAAMkC,GAAgB,OAAHlB,QAAG,IAAHA,OAAG,EAAHA,EAAKmB,UAAiBnB,EAAIV,aAC7CC,EAAgB2B,EAAW,IAsCR,EACfZ,UAEFF,EAAAA,EAAAA,MAACI,EAAAA,IAAI,CAACY,WAAS,EAAAd,SAAA,EACbC,EAAAA,EAAAA,KAACC,EAAAA,IAAI,CAACC,MAAI,EAACC,GAAI,GAAGJ,UAChBC,EAAAA,EAAAA,KAACc,EAAAA,IAAY,CAAAf,SAAC,2BAEfhB,GACCiB,EAAAA,EAAAA,KAACC,EAAAA,IAAI,CAACC,MAAI,EAACC,GAAI,GAAGJ,UAChBC,EAAAA,EAAAA,KAACe,EAAAA,IAAkB,CACjBC,MAAO,QACPJ,QAAS7B,EACTkC,QAAS,YAGX,MACJjB,EAAAA,EAAAA,KAACC,EAAAA,IAAI,CAACC,MAAI,EAACC,GAAI,GAAGJ,UAChBC,EAAAA,EAAAA,KAACkB,EAAAA,IAAU,CACTC,MAAOtC,EACPuC,KAAM,OACNC,SAAWF,IACTrC,EAAcqC,EAAM,EAEtBG,aAAc,aAGlBzB,EAAAA,EAAAA,MAACI,EAAAA,IAAI,CACHC,MAAI,EACJC,GAAI,GACJoB,MAAO,CACLC,QAAS,OACTC,eAAgB,WAChBC,WAAY,IACZ3B,SAAA,EAEFC,EAAAA,EAAAA,KAAC2B,EAAAA,IAAM,CACLC,GAAI,qBACJC,KAAK,SACLZ,QAAQ,UACRa,SAAUtD,EACVuD,QAASA,KACPhE,EAAS,eAADqB,OACSd,EAAS,aAAAc,OAAYnB,EAAM,YAC3C,EAEH+D,MAAO,YAEThC,EAAAA,EAAAA,KAAC2B,EAAAA,IAAM,CACLC,GAAI,mBACJC,KAAK,SACLZ,QAAQ,aACRa,SAAUtD,IAAemB,EACzB4B,MAAO,CAAEU,WAAY,GACrBD,MAAO,mBAMR,C","sources":["screens/Console/Tenants/TenantDetails/TenantYAML.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { useNavigate } from \"react-router-dom\";\nimport {\n Button,\n CodeEditor,\n Grid,\n InformativeMessage,\n ProgressBar,\n SectionTitle,\n} from \"mds\";\nimport api from \"../../../../common/api\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport { setModalErrorSnackMessage } from \"../../../../systemSlice\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport { getTenantAsync } from \"../thunks/tenantDetailsAsync\";\n\ninterface ITenantYAML {\n yaml: string;\n}\n\nconst TenantYAML = () => {\n const dispatch = useAppDispatch();\n const navigate = useNavigate();\n\n const tenant = useSelector((state: AppState) => state.tenants.currentTenant);\n const namespace = useSelector(\n (state: AppState) => state.tenants.currentNamespace,\n );\n\n const [addLoading, setAddLoading] = useState(false);\n const [loading, setLoading] = useState(false);\n const [tenantYaml, setTenantYaml] = useState(\"\");\n const [errorMessage, setErrorMessage] = useState(\"\");\n\n const updateTenant = (event: React.FormEvent) => {\n event.preventDefault();\n if (addLoading) {\n return;\n }\n setAddLoading(true);\n setErrorMessage(\"\");\n api\n .invoke(\"PUT\", `/api/v1/namespaces/${namespace}/tenants/${tenant}/yaml`, {\n yaml: tenantYaml,\n })\n .then(() => {\n setAddLoading(false);\n dispatch(getTenantAsync());\n setErrorMessage(\"\");\n navigate(`/namespaces/${namespace}/tenants/${tenant}/summary`);\n })\n .catch((err: ErrorResponseHandler) => {\n setAddLoading(false);\n const errMessage = err?.message || \"\" || err.errorMessage;\n setErrorMessage(errMessage);\n });\n };\n\n useEffect(() => {\n if (namespace && tenant) {\n api\n .invoke(\"GET\", `/api/v1/namespaces/${namespace}/tenants/${tenant}/yaml`)\n .then((res: ITenantYAML) => {\n setLoading(false);\n setTenantYaml(res.yaml);\n })\n .catch((err: ErrorResponseHandler) => {\n setLoading(false);\n dispatch(setModalErrorSnackMessage(err));\n });\n }\n }, [tenant, namespace, dispatch]);\n\n useEffect(() => {}, []);\n\n const validSave = tenantYaml.trim() !== \"\";\n\n return (\n \n {addLoading ||\n (loading && (\n \n \n \n ))}\n\n {!loading && (\n ) => {\n e.preventDefault();\n updateTenant(e);\n }}\n >\n \n \n Tenant Specification\n \n {errorMessage ? (\n \n \n \n ) : null}\n \n {\n setTenantYaml(value);\n }}\n editorHeight={\"550px\"}\n />\n \n \n {\n navigate(\n `/namespaces/${namespace}/tenants/${tenant}/summary`,\n );\n }}\n label={\"Cancel\"}\n />\n \n \n \n \n )}\n \n );\n};\n\nexport default TenantYAML;\n"],"names":["TenantYAML","dispatch","useAppDispatch","navigate","useNavigate","tenant","useSelector","state","tenants","currentTenant","namespace","currentNamespace","addLoading","setAddLoading","useState","loading","setLoading","tenantYaml","setTenantYaml","errorMessage","setErrorMessage","useEffect","api","invoke","concat","then","res","yaml","catch","err","setModalErrorSnackMessage","validSave","trim","_jsxs","Fragment","children","_jsx","Grid","item","xs","ProgressBar","noValidate","autoComplete","onSubmit","e","preventDefault","getTenantAsync","errMessage","message","container","SectionTitle","InformativeMessage","title","variant","CodeEditor","value","mode","onChange","editorHeight","style","display","justifyContent","paddingTop","Button","id","type","disabled","onClick","label","marginLeft"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/204.3a5ec564.chunk.js b/web-app/build/static/js/204.3a5ec564.chunk.js deleted file mode 100644 index 4af5b755c51..00000000000 --- a/web-app/build/static/js/204.3a5ec564.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[204],{2204:(e,t,a)=>{a.r(t),a.d(t,{default:()=>x});var s=a(5043),n=a(9923),r=a(4574),c=a(3216),p=a(9161),i=a(579);const o=r.Ay.iframe((()=>({border:"0px",flex:"1 1 auto",minHeight:"800px",width:"100%"}))),x=()=>{const{tenantName:e,tenantNamespace:t}=(0,c.g)(),[a,r]=(0,s.useState)(!0);return(0,i.jsxs)(s.Fragment,{children:[(0,i.jsx)(n._xt,{separator:!0,sx:{marginBottom:15},children:"Metrics"}),a&&(0,i.jsx)("div",{style:{marginTop:"80px"},children:(0,i.jsx)(n.z21,{})}),(0,i.jsx)(o,{title:"metrics",src:"/api/proxy/".concat(t||"","/").concat(e||"").concat(p.zZ.DASHBOARD,"?cp=y"),onLoad:()=>{r(!1)}})]})}}}]); -//# sourceMappingURL=204.3a5ec564.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/204.3a5ec564.chunk.js.map b/web-app/build/static/js/204.3a5ec564.chunk.js.map deleted file mode 100644 index ec259c17627..00000000000 --- a/web-app/build/static/js/204.3a5ec564.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/204.3a5ec564.chunk.js","mappings":"8LAsBA,MAAMA,EAAkBC,EAAAA,GAAOC,QAAO,MACpCC,OAAQ,MACRC,KAAM,WACNC,UAAW,QACXC,MAAO,WA+BT,EA5BsBC,KACpB,MAAM,WAAEC,EAAU,gBAAEC,IAAoBC,EAAAA,EAAAA,MAEjCC,EAASC,IAAcC,EAAAA,EAAAA,WAAkB,GAEhD,OACEC,EAAAA,EAAAA,MAACC,EAAAA,SAAQ,CAAAC,SAAA,EACPC,EAAAA,EAAAA,KAACC,EAAAA,IAAY,CAACC,WAAS,EAACC,GAAI,CAAEC,aAAc,IAAKL,SAAC,YAGjDL,IACCM,EAAAA,EAAAA,KAAA,OAAKK,MAAO,CAAEC,UAAW,QAASP,UAChCC,EAAAA,EAAAA,KAACO,EAAAA,IAAW,OAGhBP,EAAAA,EAAAA,KAACjB,EAAe,CACdyB,MAAO,UACPC,IAAG,cAAAC,OAAgBlB,GAAmB,GAAE,KAAAkB,OAAInB,GAAc,IAAEmB,OAC1DC,EAAAA,GAAUC,UAAS,SAErBC,OAAQA,KACNlB,GAAW,EAAM,MAGZ,C","sources":["screens/Console/Tenants/TenantDetails/TenantMetrics.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useState } from \"react\";\nimport { SectionTitle, ProgressBar } from \"mds\";\nimport styled from \"styled-components\";\nimport { useParams } from \"react-router-dom\";\nimport { IAM_PAGES } from \"../../../../common/SecureComponent/permissions\";\n\nconst IFrameContainer = styled.iframe(() => ({\n border: \"0px\",\n flex: \"1 1 auto\",\n minHeight: \"800px\",\n width: \"100%\",\n}));\n\nconst TenantMetrics = () => {\n const { tenantName, tenantNamespace } = useParams();\n\n const [loading, setLoading] = useState(true);\n\n return (\n \n \n Metrics\n \n {loading && (\n
\n \n
\n )}\n {\n setLoading(false);\n }}\n />\n
\n );\n};\n\nexport default TenantMetrics;\n"],"names":["IFrameContainer","styled","iframe","border","flex","minHeight","width","TenantMetrics","tenantName","tenantNamespace","useParams","loading","setLoading","useState","_jsxs","Fragment","children","_jsx","SectionTitle","separator","sx","marginBottom","style","marginTop","ProgressBar","title","src","concat","IAM_PAGES","DASHBOARD","onLoad"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/241.f827f4d6.chunk.js b/web-app/build/static/js/241.f827f4d6.chunk.js deleted file mode 100644 index 1e65490a654..00000000000 --- a/web-app/build/static/js/241.f827f4d6.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[241],{4241:(t,e,n)=>{n.d(e,{c9:()=>fr,dw:()=>pn});class r extends Error{}class s extends r{constructor(t){super("Invalid DateTime: ".concat(t.toMessage()))}}class i extends r{constructor(t){super("Invalid Interval: ".concat(t.toMessage()))}}class a extends r{constructor(t){super("Invalid Duration: ".concat(t.toMessage()))}}class o extends r{}class l extends r{constructor(t){super("Invalid unit ".concat(t))}}class u extends r{}class c extends r{constructor(){super("Zone is an abstract class")}}const h="numeric",d="short",m="long",f={year:h,month:h,day:h},y={year:h,month:d,day:h},g={year:h,month:d,day:h,weekday:d},w={year:h,month:m,day:h},v={year:h,month:m,day:h,weekday:m},p={hour:h,minute:h},k={hour:h,minute:h,second:h},S={hour:h,minute:h,second:h,timeZoneName:d},T={hour:h,minute:h,second:h,timeZoneName:m},b={hour:h,minute:h,hourCycle:"h23"},O={hour:h,minute:h,second:h,hourCycle:"h23"},N={hour:h,minute:h,second:h,hourCycle:"h23",timeZoneName:d},D={hour:h,minute:h,second:h,hourCycle:"h23",timeZoneName:m},M={year:h,month:h,day:h,hour:h,minute:h},I={year:h,month:h,day:h,hour:h,minute:h,second:h},V={year:h,month:d,day:h,hour:h,minute:h},E={year:h,month:d,day:h,hour:h,minute:h,second:h},x={year:h,month:d,day:h,weekday:d,hour:h,minute:h},C={year:h,month:m,day:h,hour:h,minute:h,timeZoneName:d},F={year:h,month:m,day:h,hour:h,minute:h,second:h,timeZoneName:d},W={year:h,month:m,day:h,weekday:m,hour:h,minute:h,timeZoneName:m},Z={year:h,month:m,day:h,weekday:m,hour:h,minute:h,second:h,timeZoneName:m};class L{get type(){throw new c}get name(){throw new c}get ianaName(){return this.name}get isUniversal(){throw new c}offsetName(t,e){throw new c}formatOffset(t,e){throw new c}offset(t){throw new c}equals(t){throw new c}get isValid(){throw new c}}let z=null;class A extends L{static get instance(){return null===z&&(z=new A),z}get type(){return"system"}get name(){return(new Intl.DateTimeFormat).resolvedOptions().timeZone}get isUniversal(){return!1}offsetName(t,e){let{format:n,locale:r}=e;return Qt(t,n,r)}formatOffset(t,e){return ee(this.offset(t),e)}offset(t){return-new Date(t).getTimezoneOffset()}equals(t){return"system"===t.type}get isValid(){return!0}}let j={};const q={year:0,month:1,day:2,era:3,hour:4,minute:5,second:6};let _={};class U extends L{static create(t){return _[t]||(_[t]=new U(t)),_[t]}static resetCache(){_={},j={}}static isValidSpecifier(t){return this.isValidZone(t)}static isValidZone(t){if(!t)return!1;try{return new Intl.DateTimeFormat("en-US",{timeZone:t}).format(),!0}catch(e){return!1}}constructor(t){super(),this.zoneName=t,this.valid=U.isValidZone(t)}get type(){return"iana"}get name(){return this.zoneName}get isUniversal(){return!1}offsetName(t,e){let{format:n,locale:r}=e;return Qt(t,n,r,this.name)}formatOffset(t,e){return ee(this.offset(t),e)}offset(t){const e=new Date(t);if(isNaN(e))return NaN;const n=(r=this.name,j[r]||(j[r]=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:r,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",era:"short"})),j[r]);var r;let[s,i,a,o,l,u,c]=n.formatToParts?function(t,e){const n=t.formatToParts(e),r=[];for(let s=0;s=0?d:1e3+d,(Pt({year:s,month:i,day:a,hour:24===l?0:l,minute:u,second:c,millisecond:0})-h)/6e4}equals(t){return"iana"===t.type&&t.name===this.name}get isValid(){return this.valid}}let Y={};let H={};function R(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=JSON.stringify([t,e]);let r=H[n];return r||(r=new Intl.DateTimeFormat(t,e),H[n]=r),r}let J={};let P={};let G=null;let $={};function B(t,e,n,r){const s=t.listingMode();return"error"===s?null:"en"===s?n(e):r(e)}class Q{constructor(t,e,n){this.padTo=n.padTo||0,this.floor=n.floor||!1;const{padTo:r,floor:s,...i}=n;if(!e||Object.keys(i).length>0){const e={useGrouping:!1,...n};n.padTo>0&&(e.minimumIntegerDigits=n.padTo),this.inf=function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=JSON.stringify([t,e]);let r=J[n];return r||(r=new Intl.NumberFormat(t,e),J[n]=r),r}(t,e)}}format(t){if(this.inf){const e=this.floor?Math.floor(t):t;return this.inf.format(e)}return jt(this.floor?Math.floor(t):Yt(t,3),this.padTo)}}class K{constructor(t,e,n){let r;if(this.opts=n,this.originalZone=void 0,this.opts.timeZone)this.dt=t;else if("fixed"===t.zone.type){const e=t.offset/60*-1,n=e>=0?"Etc/GMT+".concat(e):"Etc/GMT".concat(e);0!==t.offset&&U.create(n).valid?(r=n,this.dt=t):(r="UTC",this.dt=0===t.offset?t:t.setZone("UTC").plus({minutes:t.offset}),this.originalZone=t.zone)}else"system"===t.zone.type?this.dt=t:"iana"===t.zone.type?(this.dt=t,r=t.zone.name):(r="UTC",this.dt=t.setZone("UTC").plus({minutes:t.offset}),this.originalZone=t.zone);const s={...this.opts};s.timeZone=s.timeZone||r,this.dtf=R(e,s)}format(){return this.originalZone?this.formatToParts().map((t=>{let{value:e}=t;return e})).join(""):this.dtf.format(this.dt.toJSDate())}formatToParts(){const t=this.dtf.formatToParts(this.dt.toJSDate());return this.originalZone?t.map((t=>{if("timeZoneName"===t.type){const e=this.originalZone.offsetName(this.dt.ts,{locale:this.dt.locale,format:this.opts.timeZoneName});return{...t,value:e}}return t})):t}resolvedOptions(){return this.dtf.resolvedOptions()}}class X{constructor(t,e,n){this.opts={style:"long",...n},!e&&Ft()&&(this.rtf=function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{base:n,...r}=e,s=JSON.stringify([t,r]);let i=P[s];return i||(i=new Intl.RelativeTimeFormat(t,e),P[s]=i),i}(t,n))}format(t,e){return this.rtf?this.rtf.format(t,e):function(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"always",r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const s={years:["year","yr."],quarters:["quarter","qtr."],months:["month","mo."],weeks:["week","wk."],days:["day","day","days"],hours:["hour","hr."],minutes:["minute","min."],seconds:["second","sec."]},i=-1===["hours","minutes","seconds"].indexOf(t);if("auto"===n&&i){const n="days"===t;switch(e){case 1:return n?"tomorrow":"next ".concat(s[t][0]);case-1:return n?"yesterday":"last ".concat(s[t][0]);case 0:return n?"today":"this ".concat(s[t][0])}}const a=Object.is(e,-0)||e<0,o=Math.abs(e),l=1===o,u=s[t],c=r?l?u[1]:u[2]||u[1]:l?s[t][0]:t;return a?"".concat(o," ").concat(c," ago"):"in ".concat(o," ").concat(c)}(e,t,this.opts.numeric,"long"!==this.opts.style)}formatToParts(t,e){return this.rtf?this.rtf.formatToParts(t,e):[]}}const tt={firstDay:1,minimalDays:4,weekend:[6,7]};class et{static fromOpts(t){return et.create(t.locale,t.numberingSystem,t.outputCalendar,t.weekSettings,t.defaultToEN)}static create(t,e,n,r){let s=arguments.length>4&&void 0!==arguments[4]&&arguments[4];const i=t||ft.defaultLocale,a=i||(s?"en-US":G||(G=(new Intl.DateTimeFormat).resolvedOptions().locale,G)),o=e||ft.defaultNumberingSystem,l=n||ft.defaultOutputCalendar,u=zt(r)||ft.defaultWeekSettings;return new et(a,o,l,u,i)}static resetCache(){G=null,H={},J={},P={}}static fromObject(){let{locale:t,numberingSystem:e,outputCalendar:n,weekSettings:r}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return et.create(t,e,n,r)}constructor(t,e,n,r,s){const[i,a,o]=function(t){const e=t.indexOf("-x-");-1!==e&&(t=t.substring(0,e));const n=t.indexOf("-u-");if(-1===n)return[t];{let e,s;try{e=R(t).resolvedOptions(),s=t}catch(r){const i=t.substring(0,n);e=R(i).resolvedOptions(),s=i}const{numberingSystem:i,calendar:a}=e;return[s,i,a]}}(t);this.locale=i,this.numberingSystem=e||a||null,this.outputCalendar=n||o||null,this.weekSettings=r,this.intl=function(t,e,n){return n||e?(t.includes("-u-")||(t+="-u"),n&&(t+="-ca-".concat(n)),e&&(t+="-nu-".concat(e)),t):t}(this.locale,this.numberingSystem,this.outputCalendar),this.weekdaysCache={format:{},standalone:{}},this.monthsCache={format:{},standalone:{}},this.meridiemCache=null,this.eraCache={},this.specifiedLocale=s,this.fastNumbersCached=null}get fastNumbers(){var t;return null==this.fastNumbersCached&&(this.fastNumbersCached=(!(t=this).numberingSystem||"latn"===t.numberingSystem)&&("latn"===t.numberingSystem||!t.locale||t.locale.startsWith("en")||"latn"===new Intl.DateTimeFormat(t.intl).resolvedOptions().numberingSystem)),this.fastNumbersCached}listingMode(){const t=this.isEnglish(),e=(null===this.numberingSystem||"latn"===this.numberingSystem)&&(null===this.outputCalendar||"gregory"===this.outputCalendar);return t&&e?"en":"intl"}clone(t){return t&&0!==Object.getOwnPropertyNames(t).length?et.create(t.locale||this.specifiedLocale,t.numberingSystem||this.numberingSystem,t.outputCalendar||this.outputCalendar,zt(t.weekSettings)||this.weekSettings,t.defaultToEN||!1):this}redefaultToEN(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.clone({...t,defaultToEN:!0})}redefaultToSystem(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.clone({...t,defaultToEN:!1})}months(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return B(this,t,ae,(()=>{const n=e?{month:t,day:"numeric"}:{month:t},r=e?"format":"standalone";return this.monthsCache[r][t]||(this.monthsCache[r][t]=function(t){const e=[];for(let n=1;n<=12;n++){const r=fr.utc(2009,n,1);e.push(t(r))}return e}((t=>this.extract(t,n,"month")))),this.monthsCache[r][t]}))}weekdays(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return B(this,t,ce,(()=>{const n=e?{weekday:t,year:"numeric",month:"long",day:"numeric"}:{weekday:t},r=e?"format":"standalone";return this.weekdaysCache[r][t]||(this.weekdaysCache[r][t]=function(t){const e=[];for(let n=1;n<=7;n++){const r=fr.utc(2016,11,13+n);e.push(t(r))}return e}((t=>this.extract(t,n,"weekday")))),this.weekdaysCache[r][t]}))}meridiems(){return B(this,void 0,(()=>he),(()=>{if(!this.meridiemCache){const t={hour:"numeric",hourCycle:"h12"};this.meridiemCache=[fr.utc(2016,11,13,9),fr.utc(2016,11,13,19)].map((e=>this.extract(e,t,"dayperiod")))}return this.meridiemCache}))}eras(t){return B(this,t,ye,(()=>{const e={era:t};return this.eraCache[t]||(this.eraCache[t]=[fr.utc(-40,1,1),fr.utc(2017,1,1)].map((t=>this.extract(t,e,"era")))),this.eraCache[t]}))}extract(t,e,n){const r=this.dtFormatter(t,e).formatToParts().find((t=>t.type.toLowerCase()===n));return r?r.value:null}numberFormatter(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return new Q(this.intl,t.forceSimple||this.fastNumbers,t)}dtFormatter(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return new K(t,this.intl,e)}relFormatter(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return new X(this.intl,this.isEnglish(),t)}listFormatter(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=JSON.stringify([t,e]);let r=Y[n];return r||(r=new Intl.ListFormat(t,e),Y[n]=r),r}(this.intl,t)}isEnglish(){return"en"===this.locale||"en-us"===this.locale.toLowerCase()||new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith("en-us")}getWeekSettings(){return this.weekSettings?this.weekSettings:Wt()?function(t){let e=$[t];if(!e){const n=new Intl.Locale(t);e="getWeekInfo"in n?n.getWeekInfo():n.weekInfo,$[t]=e}return e}(this.locale):tt}getStartOfWeek(){return this.getWeekSettings().firstDay}getMinDaysInFirstWeek(){return this.getWeekSettings().minimalDays}getWeekendDays(){return this.getWeekSettings().weekend}equals(t){return this.locale===t.locale&&this.numberingSystem===t.numberingSystem&&this.outputCalendar===t.outputCalendar}}let nt=null;class rt extends L{static get utcInstance(){return null===nt&&(nt=new rt(0)),nt}static instance(t){return 0===t?rt.utcInstance:new rt(t)}static parseSpecifier(t){if(t){const e=t.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i);if(e)return new rt(Kt(e[1],e[2]))}return null}constructor(t){super(),this.fixed=t}get type(){return"fixed"}get name(){return 0===this.fixed?"UTC":"UTC".concat(ee(this.fixed,"narrow"))}get ianaName(){return 0===this.fixed?"Etc/UTC":"Etc/GMT".concat(ee(-this.fixed,"narrow"))}offsetName(){return this.name}formatOffset(t,e){return ee(this.fixed,e)}get isUniversal(){return!0}offset(){return this.fixed}equals(t){return"fixed"===t.type&&t.fixed===this.fixed}get isValid(){return!0}}class st extends L{constructor(t){super(),this.zoneName=t}get type(){return"invalid"}get name(){return this.zoneName}get isUniversal(){return!1}offsetName(){return null}formatOffset(){return""}offset(){return NaN}equals(){return!1}get isValid(){return!1}}function it(t,e){if(Et(t)||null===t)return e;if(t instanceof L)return t;if("string"===typeof t){const n=t.toLowerCase();return"default"===n?e:"local"===n||"system"===n?A.instance:"utc"===n||"gmt"===n?rt.utcInstance:rt.parseSpecifier(n)||U.create(t)}return xt(t)?rt.instance(t):"object"===typeof t&&"offset"in t&&"function"===typeof t.offset?t:new st(t)}let at,ot=()=>Date.now(),lt="system",ut=null,ct=null,ht=null,dt=60,mt=null;class ft{static get now(){return ot}static set now(t){ot=t}static set defaultZone(t){lt=t}static get defaultZone(){return it(lt,A.instance)}static get defaultLocale(){return ut}static set defaultLocale(t){ut=t}static get defaultNumberingSystem(){return ct}static set defaultNumberingSystem(t){ct=t}static get defaultOutputCalendar(){return ht}static set defaultOutputCalendar(t){ht=t}static get defaultWeekSettings(){return mt}static set defaultWeekSettings(t){mt=zt(t)}static get twoDigitCutoffYear(){return dt}static set twoDigitCutoffYear(t){dt=t%100}static get throwOnInvalid(){return at}static set throwOnInvalid(t){at=t}static resetCaches(){et.resetCache(),U.resetCache()}}class yt{constructor(t,e){this.reason=t,this.explanation=e}toMessage(){return this.explanation?"".concat(this.reason,": ").concat(this.explanation):this.reason}}const gt=[0,31,59,90,120,151,181,212,243,273,304,334],wt=[0,31,60,91,121,152,182,213,244,274,305,335];function vt(t,e){return new yt("unit out of range","you specified ".concat(e," (of type ").concat(typeof e,") as a ").concat(t,", which is invalid"))}function pt(t,e,n){const r=new Date(Date.UTC(t,e-1,n));t<100&&t>=0&&r.setUTCFullYear(r.getUTCFullYear()-1900);const s=r.getUTCDay();return 0===s?7:s}function kt(t,e,n){return n+(Ht(t)?wt:gt)[e-1]}function St(t,e){const n=Ht(t)?wt:gt,r=n.findIndex((t=>t1&&void 0!==arguments[1]?arguments[1]:4,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;const{year:r,month:s,day:i}=t,a=kt(r,s,i),o=Tt(pt(r,s,i),n);let l,u=Math.floor((a-o+14-e)/7);return u<1?(l=r-1,u=$t(l,e,n)):u>$t(r,e,n)?(l=r+1,u=1):l=r,{weekYear:l,weekNumber:u,weekday:o,...ne(t)}}function Ot(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:4,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;const{weekYear:r,weekNumber:s,weekday:i}=t,a=Tt(pt(r,1,e),n),o=Rt(r);let l,u=7*s+i-a-7+e;u<1?(l=r-1,u+=Rt(l)):u>o?(l=r+1,u-=Rt(r)):l=r;const{month:c,day:h}=St(l,u);return{year:l,month:c,day:h,...ne(t)}}function Nt(t){const{year:e,month:n,day:r}=t;return{year:e,ordinal:kt(e,n,r),...ne(t)}}function Dt(t){const{year:e,ordinal:n}=t,{month:r,day:s}=St(e,n);return{year:e,month:r,day:s,...ne(t)}}function Mt(t,e){if(!Et(t.localWeekday)||!Et(t.localWeekNumber)||!Et(t.localWeekYear)){if(!Et(t.weekday)||!Et(t.weekNumber)||!Et(t.weekYear))throw new o("Cannot mix locale-based week fields with ISO-based week fields");return Et(t.localWeekday)||(t.weekday=t.localWeekday),Et(t.localWeekNumber)||(t.weekNumber=t.localWeekNumber),Et(t.localWeekYear)||(t.weekYear=t.localWeekYear),delete t.localWeekday,delete t.localWeekNumber,delete t.localWeekYear,{minDaysInFirstWeek:e.getMinDaysInFirstWeek(),startOfWeek:e.getStartOfWeek()}}return{minDaysInFirstWeek:4,startOfWeek:1}}function It(t){const e=Ct(t.year),n=At(t.month,1,12),r=At(t.day,1,Jt(t.year,t.month));return e?n?!r&&vt("day",t.day):vt("month",t.month):vt("year",t.year)}function Vt(t){const{hour:e,minute:n,second:r,millisecond:s}=t,i=At(e,0,23)||24===e&&0===n&&0===r&&0===s,a=At(n,0,59),o=At(r,0,59),l=At(s,0,999);return i?a?o?!l&&vt("millisecond",s):vt("second",r):vt("minute",n):vt("hour",e)}function Et(t){return"undefined"===typeof t}function xt(t){return"number"===typeof t}function Ct(t){return"number"===typeof t&&t%1===0}function Ft(){try{return"undefined"!==typeof Intl&&!!Intl.RelativeTimeFormat}catch(t){return!1}}function Wt(){try{return"undefined"!==typeof Intl&&!!Intl.Locale&&("weekInfo"in Intl.Locale.prototype||"getWeekInfo"in Intl.Locale.prototype)}catch(t){return!1}}function Zt(t,e,n){if(0!==t.length)return t.reduce(((t,r)=>{const s=[e(r),r];return t&&n(t[0],s[0])===t[0]?t:s}),null)[1]}function Lt(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function zt(t){if(null==t)return null;if("object"!==typeof t)throw new u("Week settings must be an object");if(!At(t.firstDay,1,7)||!At(t.minimalDays,1,7)||!Array.isArray(t.weekend)||t.weekend.some((t=>!At(t,1,7))))throw new u("Invalid week settings");return{firstDay:t.firstDay,minimalDays:t.minimalDays,weekend:Array.from(t.weekend)}}function At(t,e,n){return Ct(t)&&t>=e&&t<=n}function jt(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;let n;return n=t<0?"-"+(""+-t).padStart(e,"0"):(""+t).padStart(e,"0"),n}function qt(t){return Et(t)||null===t||""===t?void 0:parseInt(t,10)}function _t(t){return Et(t)||null===t||""===t?void 0:parseFloat(t)}function Ut(t){if(!Et(t)&&null!==t&&""!==t){const e=1e3*parseFloat("0."+t);return Math.floor(e)}}function Yt(t,e){const n=10**e;return(arguments.length>2&&void 0!==arguments[2]&&arguments[2]?Math.trunc:Math.round)(t*n)/n}function Ht(t){return t%4===0&&(t%100!==0||t%400===0)}function Rt(t){return Ht(t)?366:365}function Jt(t,e){const n=function(t,e){return t-e*Math.floor(t/e)}(e-1,12)+1;return 2===n?Ht(t+(e-n)/12)?29:28:[31,null,31,30,31,30,31,31,30,31,30,31][n-1]}function Pt(t){let e=Date.UTC(t.year,t.month-1,t.day,t.hour,t.minute,t.second,t.millisecond);return t.year<100&&t.year>=0&&(e=new Date(e),e.setUTCFullYear(t.year,t.month-1,t.day)),+e}function Gt(t,e,n){return-Tt(pt(t,1,e),n)+e-1}function $t(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:4,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;const r=Gt(t,e,n),s=Gt(t+1,e,n);return(Rt(t)-r+s)/7}function Bt(t){return t>99?t:t>ft.twoDigitCutoffYear?1900+t:2e3+t}function Qt(t,e,n){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;const s=new Date(t),i={hourCycle:"h23",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"};r&&(i.timeZone=r);const a={timeZoneName:e,...i},o=new Intl.DateTimeFormat(n,a).formatToParts(s).find((t=>"timezonename"===t.type.toLowerCase()));return o?o.value:null}function Kt(t,e){let n=parseInt(t,10);Number.isNaN(n)&&(n=0);const r=parseInt(e,10)||0;return 60*n+(n<0||Object.is(n,-0)?-r:r)}function Xt(t){const e=Number(t);if("boolean"===typeof t||""===t||Number.isNaN(e))throw new u("Invalid unit value ".concat(t));return e}function te(t,e){const n={};for(const r in t)if(Lt(t,r)){const s=t[r];if(void 0===s||null===s)continue;n[e(r)]=Xt(s)}return n}function ee(t,e){const n=Math.trunc(Math.abs(t/60)),r=Math.trunc(Math.abs(t%60)),s=t>=0?"+":"-";switch(e){case"short":return"".concat(s).concat(jt(n,2),":").concat(jt(r,2));case"narrow":return"".concat(s).concat(n).concat(r>0?":".concat(r):"");case"techie":return"".concat(s).concat(jt(n,2)).concat(jt(r,2));default:throw new RangeError("Value format ".concat(e," is out of range for property format"))}}function ne(t){return function(t,e){return e.reduce(((e,n)=>(e[n]=t[n],e)),{})}(t,["hour","minute","second","millisecond"])}const re=["January","February","March","April","May","June","July","August","September","October","November","December"],se=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],ie=["J","F","M","A","M","J","J","A","S","O","N","D"];function ae(t){switch(t){case"narrow":return[...ie];case"short":return[...se];case"long":return[...re];case"numeric":return["1","2","3","4","5","6","7","8","9","10","11","12"];case"2-digit":return["01","02","03","04","05","06","07","08","09","10","11","12"];default:return null}}const oe=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],le=["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],ue=["M","T","W","T","F","S","S"];function ce(t){switch(t){case"narrow":return[...ue];case"short":return[...le];case"long":return[...oe];case"numeric":return["1","2","3","4","5","6","7"];default:return null}}const he=["AM","PM"],de=["Before Christ","Anno Domini"],me=["BC","AD"],fe=["B","A"];function ye(t){switch(t){case"narrow":return[...fe];case"short":return[...me];case"long":return[...de];default:return null}}function ge(t,e){let n="";for(const r of t)r.literal?n+=r.val:n+=e(r.val);return n}const we={D:f,DD:y,DDD:w,DDDD:v,t:p,tt:k,ttt:S,tttt:T,T:b,TT:O,TTT:N,TTTT:D,f:M,ff:V,fff:C,ffff:W,F:I,FF:E,FFF:F,FFFF:Z};class ve{static create(t){return new ve(t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:{})}static parseFormat(t){let e=null,n="",r=!1;const s=[];for(let i=0;i0&&s.push({literal:r||/^\s+$/.test(n),val:n}),e=null,n="",r=!r):r||a===e?n+=a:(n.length>0&&s.push({literal:/^\s+$/.test(n),val:n}),n=a,e=a)}return n.length>0&&s.push({literal:r||/^\s+$/.test(n),val:n}),s}static macroTokenToFormatOpts(t){return we[t]}constructor(t,e){this.opts=e,this.loc=t,this.systemLoc=null}formatWithSystemDefault(t,e){null===this.systemLoc&&(this.systemLoc=this.loc.redefaultToSystem());return this.systemLoc.dtFormatter(t,{...this.opts,...e}).format()}dtFormatter(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.loc.dtFormatter(t,{...this.opts,...e})}formatDateTime(t,e){return this.dtFormatter(t,e).format()}formatDateTimeParts(t,e){return this.dtFormatter(t,e).formatToParts()}formatInterval(t,e){return this.dtFormatter(t.start,e).dtf.formatRange(t.start.toJSDate(),t.end.toJSDate())}resolvedOptions(t,e){return this.dtFormatter(t,e).resolvedOptions()}num(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this.opts.forceSimple)return jt(t,e);const n={...this.opts};return e>0&&(n.padTo=e),this.loc.numberFormatter(n).format(t)}formatDateTimeFromString(t,e){const n="en"===this.loc.listingMode(),r=this.loc.outputCalendar&&"gregory"!==this.loc.outputCalendar,s=(e,n)=>this.loc.extract(t,e,n),i=e=>t.isOffsetFixed&&0===t.offset&&e.allowZ?"Z":t.isValid?t.zone.formatOffset(t.ts,e.format):"",a=()=>n?function(t){return he[t.hour<12?0:1]}(t):s({hour:"numeric",hourCycle:"h12"},"dayperiod"),o=(e,r)=>n?function(t,e){return ae(e)[t.month-1]}(t,e):s(r?{month:e}:{month:e,day:"numeric"},"month"),l=(e,r)=>n?function(t,e){return ce(e)[t.weekday-1]}(t,e):s(r?{weekday:e}:{weekday:e,month:"long",day:"numeric"},"weekday"),u=e=>{const n=ve.macroTokenToFormatOpts(e);return n?this.formatWithSystemDefault(t,n):e},c=e=>n?function(t,e){return ye(e)[t.year<0?0:1]}(t,e):s({era:e},"era");return ge(ve.parseFormat(e),(e=>{switch(e){case"S":return this.num(t.millisecond);case"u":case"SSS":return this.num(t.millisecond,3);case"s":return this.num(t.second);case"ss":return this.num(t.second,2);case"uu":return this.num(Math.floor(t.millisecond/10),2);case"uuu":return this.num(Math.floor(t.millisecond/100));case"m":return this.num(t.minute);case"mm":return this.num(t.minute,2);case"h":return this.num(t.hour%12===0?12:t.hour%12);case"hh":return this.num(t.hour%12===0?12:t.hour%12,2);case"H":return this.num(t.hour);case"HH":return this.num(t.hour,2);case"Z":return i({format:"narrow",allowZ:this.opts.allowZ});case"ZZ":return i({format:"short",allowZ:this.opts.allowZ});case"ZZZ":return i({format:"techie",allowZ:this.opts.allowZ});case"ZZZZ":return t.zone.offsetName(t.ts,{format:"short",locale:this.loc.locale});case"ZZZZZ":return t.zone.offsetName(t.ts,{format:"long",locale:this.loc.locale});case"z":return t.zoneName;case"a":return a();case"d":return r?s({day:"numeric"},"day"):this.num(t.day);case"dd":return r?s({day:"2-digit"},"day"):this.num(t.day,2);case"c":case"E":return this.num(t.weekday);case"ccc":return l("short",!0);case"cccc":return l("long",!0);case"ccccc":return l("narrow",!0);case"EEE":return l("short",!1);case"EEEE":return l("long",!1);case"EEEEE":return l("narrow",!1);case"L":return r?s({month:"numeric",day:"numeric"},"month"):this.num(t.month);case"LL":return r?s({month:"2-digit",day:"numeric"},"month"):this.num(t.month,2);case"LLL":return o("short",!0);case"LLLL":return o("long",!0);case"LLLLL":return o("narrow",!0);case"M":return r?s({month:"numeric"},"month"):this.num(t.month);case"MM":return r?s({month:"2-digit"},"month"):this.num(t.month,2);case"MMM":return o("short",!1);case"MMMM":return o("long",!1);case"MMMMM":return o("narrow",!1);case"y":return r?s({year:"numeric"},"year"):this.num(t.year);case"yy":return r?s({year:"2-digit"},"year"):this.num(t.year.toString().slice(-2),2);case"yyyy":return r?s({year:"numeric"},"year"):this.num(t.year,4);case"yyyyyy":return r?s({year:"numeric"},"year"):this.num(t.year,6);case"G":return c("short");case"GG":return c("long");case"GGGGG":return c("narrow");case"kk":return this.num(t.weekYear.toString().slice(-2),2);case"kkkk":return this.num(t.weekYear,4);case"W":return this.num(t.weekNumber);case"WW":return this.num(t.weekNumber,2);case"n":return this.num(t.localWeekNumber);case"nn":return this.num(t.localWeekNumber,2);case"ii":return this.num(t.localWeekYear.toString().slice(-2),2);case"iiii":return this.num(t.localWeekYear,4);case"o":return this.num(t.ordinal);case"ooo":return this.num(t.ordinal,3);case"q":return this.num(t.quarter);case"qq":return this.num(t.quarter,2);case"X":return this.num(Math.floor(t.ts/1e3));case"x":return this.num(t.ts);default:return u(e)}}))}formatDurationFromString(t,e){const n=t=>{switch(t[0]){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":return"hour";case"d":return"day";case"w":return"week";case"M":return"month";case"y":return"year";default:return null}},r=ve.parseFormat(e),s=r.reduce(((t,e)=>{let{literal:n,val:r}=e;return n?t:t.concat(r)}),[]);return ge(r,(t=>e=>{const r=n(e);return r?this.num(t.get(r),e.length):e})(t.shiftTo(...s.map(n).filter((t=>t)))))}}const pe=/[A-Za-z_+-]{1,256}(?::?\/[A-Za-z0-9_+-]{1,256}(?:\/[A-Za-z0-9_+-]{1,256})?)?/;function ke(){for(var t=arguments.length,e=new Array(t),n=0;nt+e.source),"");return RegExp("^".concat(r,"$"))}function Se(){for(var t=arguments.length,e=new Array(t),n=0;ne.reduce(((e,n)=>{let[r,s,i]=e;const[a,o,l]=n(t,i);return[{...r,...a},o||s,l]}),[{},null,1]).slice(0,2)}function Te(t){if(null==t)return[null,null];for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;r{const r={};let s;for(s=0;s1&&void 0!==arguments[1]&&arguments[1]||t&&c)?-t:t};return[{years:d(_t(n)),months:d(_t(r)),weeks:d(_t(s)),days:d(_t(i)),hours:d(_t(a)),minutes:d(_t(o)),seconds:d(_t(l),"-0"===l),milliseconds:d(Ut(u),h)}]}const qe={GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function _e(t,e,n,r,s,i,a){const o={year:2===e.length?Bt(qt(e)):qt(e),month:se.indexOf(n)+1,day:qt(r),hour:qt(s),minute:qt(i)};return a&&(o.second=qt(a)),t&&(o.weekday=t.length>3?oe.indexOf(t)+1:le.indexOf(t)+1),o}const Ue=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/;function Ye(t){const[,e,n,r,s,i,a,o,l,u,c,h]=t,d=_e(e,s,r,n,i,a,o);let m;return m=l?qe[l]:u?0:Kt(c,h),[d,new rt(m)]}const He=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d\d):(\d\d):(\d\d) GMT$/,Re=/^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/,Je=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \d|\d\d) (\d\d):(\d\d):(\d\d) (\d{4})$/;function Pe(t){const[,e,n,r,s,i,a,o]=t;return[_e(e,s,r,n,i,a,o),rt.utcInstance]}function Ge(t){const[,e,n,r,s,i,a,o]=t;return[_e(e,o,n,r,s,i,a),rt.utcInstance]}const $e=ke(/([+-]\d{6}|\d{4})(?:-?(\d\d)(?:-?(\d\d))?)?/,Ie),Be=ke(/(\d{4})-?W(\d\d)(?:-?(\d))?/,Ie),Qe=ke(/(\d{4})-?(\d{3})/,Ie),Ke=ke(Me),Xe=Se((function(t,e){return[{year:Fe(t,e),month:Fe(t,e+1,1),day:Fe(t,e+2,1)},null,e+3]}),We,Ze,Le),tn=Se(Ve,We,Ze,Le),en=Se(Ee,We,Ze,Le),nn=Se(We,Ze,Le);const rn=Se(We);const sn=ke(/(\d{4})-(\d\d)-(\d\d)/,Ce),an=ke(xe),on=Se(We,Ze,Le);const ln="Invalid Duration",un={weeks:{days:7,hours:168,minutes:10080,seconds:604800,milliseconds:6048e5},days:{hours:24,minutes:1440,seconds:86400,milliseconds:864e5},hours:{minutes:60,seconds:3600,milliseconds:36e5},minutes:{seconds:60,milliseconds:6e4},seconds:{milliseconds:1e3}},cn={years:{quarters:4,months:12,weeks:52,days:365,hours:8760,minutes:525600,seconds:31536e3,milliseconds:31536e6},quarters:{months:3,weeks:13,days:91,hours:2184,minutes:131040,seconds:7862400,milliseconds:78624e5},months:{weeks:4,days:30,hours:720,minutes:43200,seconds:2592e3,milliseconds:2592e6},...un},hn=365.2425,dn=30.436875,mn={years:{quarters:4,months:12,weeks:52.1775,days:hn,hours:8765.82,minutes:525949.2,seconds:525949.2*60,milliseconds:525949.2*60*1e3},quarters:{months:3,weeks:13.044375,days:91.310625,hours:2191.455,minutes:131487.3,seconds:525949.2*60/4,milliseconds:7889237999.999999},months:{weeks:4.3481250000000005,days:dn,hours:730.485,minutes:43829.1,seconds:2629746,milliseconds:2629746e3},...un},fn=["years","quarters","months","weeks","days","hours","minutes","seconds","milliseconds"],yn=fn.slice(0).reverse();function gn(t,e){const n={values:arguments.length>2&&void 0!==arguments[2]&&arguments[2]?e.values:{...t.values,...e.values||{}},loc:t.loc.clone(e.loc),conversionAccuracy:e.conversionAccuracy||t.conversionAccuracy,matrix:e.matrix||t.matrix};return new pn(n)}function wn(t,e){var n;let r=null!==(n=e.milliseconds)&&void 0!==n?n:0;for(const s of yn.slice(1))e[s]&&(r+=e[s]*t[s].milliseconds);return r}function vn(t,e){const n=wn(t,e)<0?-1:1;fn.reduceRight(((r,s)=>{if(Et(e[s]))return r;if(r){const i=e[r]*n,a=t[s][r],o=Math.floor(i/a);e[s]+=o*n,e[r]-=o*a*n}return s}),null),fn.reduce(((n,r)=>{if(Et(e[r]))return n;if(n){const s=e[n]%1;e[n]-=s,e[r]+=s*t[n][r]}return r}),null)}class pn{constructor(t){const e="longterm"===t.conversionAccuracy||!1;let n=e?mn:cn;t.matrix&&(n=t.matrix),this.values=t.values,this.loc=t.loc||et.create(),this.conversionAccuracy=e?"longterm":"casual",this.invalid=t.invalid||null,this.matrix=n,this.isLuxonDuration=!0}static fromMillis(t,e){return pn.fromObject({milliseconds:t},e)}static fromObject(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(null==t||"object"!==typeof t)throw new u("Duration.fromObject: argument expected to be an object, got ".concat(null===t?"null":typeof t));return new pn({values:te(t,pn.normalizeUnit),loc:et.fromObject(e),conversionAccuracy:e.conversionAccuracy,matrix:e.matrix})}static fromDurationLike(t){if(xt(t))return pn.fromMillis(t);if(pn.isDuration(t))return t;if("object"===typeof t)return pn.fromObject(t);throw new u("Unknown duration argument ".concat(t," of type ").concat(typeof t))}static fromISO(t,e){const[n]=function(t){return Te(t,[Ae,je])}(t);return n?pn.fromObject(n,e):pn.invalid("unparsable",'the input "'.concat(t,"\" can't be parsed as ISO 8601"))}static fromISOTime(t,e){const[n]=function(t){return Te(t,[ze,rn])}(t);return n?pn.fromObject(n,e):pn.invalid("unparsable",'the input "'.concat(t,"\" can't be parsed as ISO 8601"))}static invalid(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(!t)throw new u("need to specify a reason the Duration is invalid");const n=t instanceof yt?t:new yt(t,e);if(ft.throwOnInvalid)throw new a(n);return new pn({invalid:n})}static normalizeUnit(t){const e={year:"years",years:"years",quarter:"quarters",quarters:"quarters",month:"months",months:"months",week:"weeks",weeks:"weeks",day:"days",days:"days",hour:"hours",hours:"hours",minute:"minutes",minutes:"minutes",second:"seconds",seconds:"seconds",millisecond:"milliseconds",milliseconds:"milliseconds"}[t?t.toLowerCase():t];if(!e)throw new l(t);return e}static isDuration(t){return t&&t.isLuxonDuration||!1}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}toFormat(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n={...e,floor:!1!==e.round&&!1!==e.floor};return this.isValid?ve.create(this.loc,n).formatDurationFromString(this,t):ln}toHuman(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!this.isValid)return ln;const e=fn.map((e=>{const n=this.values[e];return Et(n)?null:this.loc.numberFormatter({style:"unit",unitDisplay:"long",...t,unit:e.slice(0,-1)}).format(n)})).filter((t=>t));return this.loc.listFormatter({type:"conjunction",style:t.listStyle||"narrow",...t}).format(e)}toObject(){return this.isValid?{...this.values}:{}}toISO(){if(!this.isValid)return null;let t="P";return 0!==this.years&&(t+=this.years+"Y"),0===this.months&&0===this.quarters||(t+=this.months+3*this.quarters+"M"),0!==this.weeks&&(t+=this.weeks+"W"),0!==this.days&&(t+=this.days+"D"),0===this.hours&&0===this.minutes&&0===this.seconds&&0===this.milliseconds||(t+="T"),0!==this.hours&&(t+=this.hours+"H"),0!==this.minutes&&(t+=this.minutes+"M"),0===this.seconds&&0===this.milliseconds||(t+=Yt(this.seconds+this.milliseconds/1e3,3)+"S"),"P"===t&&(t+="T0S"),t}toISOTime(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!this.isValid)return null;const e=this.toMillis();if(e<0||e>=864e5)return null;t={suppressMilliseconds:!1,suppressSeconds:!1,includePrefix:!1,format:"extended",...t,includeOffset:!1};return fr.fromMillis(e,{zone:"UTC"}).toISOTime(t)}toJSON(){return this.toISO()}toString(){return this.toISO()}[Symbol.for("nodejs.util.inspect.custom")](){return this.isValid?"Duration { values: ".concat(JSON.stringify(this.values)," }"):"Duration { Invalid, reason: ".concat(this.invalidReason," }")}toMillis(){return this.isValid?wn(this.matrix,this.values):NaN}valueOf(){return this.toMillis()}plus(t){if(!this.isValid)return this;const e=pn.fromDurationLike(t),n={};for(const r of fn)(Lt(e.values,r)||Lt(this.values,r))&&(n[r]=e.get(r)+this.get(r));return gn(this,{values:n},!0)}minus(t){if(!this.isValid)return this;const e=pn.fromDurationLike(t);return this.plus(e.negate())}mapUnits(t){if(!this.isValid)return this;const e={};for(const n of Object.keys(this.values))e[n]=Xt(t(this.values[n],n));return gn(this,{values:e},!0)}get(t){return this[pn.normalizeUnit(t)]}set(t){if(!this.isValid)return this;return gn(this,{values:{...this.values,...te(t,pn.normalizeUnit)}})}reconfigure(){let{locale:t,numberingSystem:e,conversionAccuracy:n,matrix:r}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return gn(this,{loc:this.loc.clone({locale:t,numberingSystem:e}),matrix:r,conversionAccuracy:n})}as(t){return this.isValid?this.shiftTo(t).get(t):NaN}normalize(){if(!this.isValid)return this;const t=this.toObject();return vn(this.matrix,t),gn(this,{values:t},!0)}rescale(){if(!this.isValid)return this;return gn(this,{values:function(t){const e={};for(const[n,r]of Object.entries(t))0!==r&&(e[n]=r);return e}(this.normalize().shiftToAll().toObject())},!0)}shiftTo(){for(var t=arguments.length,e=new Array(t),n=0;npn.normalizeUnit(t)));const r={},s={},i=this.toObject();let a;for(const o of fn)if(e.indexOf(o)>=0){a=o;let t=0;for(const n in s)t+=this.matrix[n][o]*s[n],s[n]=0;xt(i[o])&&(t+=i[o]);const e=Math.trunc(t);r[o]=e,s[o]=(1e3*t-1e3*e)/1e3}else xt(i[o])&&(s[o]=i[o]);for(const o in s)0!==s[o]&&(r[a]+=o===a?s[o]:s[o]/this.matrix[a][o]);return vn(this.matrix,r),gn(this,{values:r},!0)}shiftToAll(){return this.isValid?this.shiftTo("years","months","weeks","days","hours","minutes","seconds","milliseconds"):this}negate(){if(!this.isValid)return this;const t={};for(const e of Object.keys(this.values))t[e]=0===this.values[e]?0:-this.values[e];return gn(this,{values:t},!0)}get years(){return this.isValid?this.values.years||0:NaN}get quarters(){return this.isValid?this.values.quarters||0:NaN}get months(){return this.isValid?this.values.months||0:NaN}get weeks(){return this.isValid?this.values.weeks||0:NaN}get days(){return this.isValid?this.values.days||0:NaN}get hours(){return this.isValid?this.values.hours||0:NaN}get minutes(){return this.isValid?this.values.minutes||0:NaN}get seconds(){return this.isValid?this.values.seconds||0:NaN}get milliseconds(){return this.isValid?this.values.milliseconds||0:NaN}get isValid(){return null===this.invalid}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}equals(t){if(!this.isValid||!t.isValid)return!1;if(!this.loc.equals(t.loc))return!1;for(const r of fn)if(e=this.values[r],n=t.values[r],!(void 0===e||0===e?void 0===n||0===n:e===n))return!1;var e,n;return!0}}const kn="Invalid Interval";class Sn{constructor(t){this.s=t.start,this.e=t.end,this.invalid=t.invalid||null,this.isLuxonInterval=!0}static invalid(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(!t)throw new u("need to specify a reason the Interval is invalid");const n=t instanceof yt?t:new yt(t,e);if(ft.throwOnInvalid)throw new i(n);return new Sn({invalid:n})}static fromDateTimes(t,e){const n=yr(t),r=yr(e),s=function(t,e){return t&&t.isValid?e&&e.isValid?e0&&void 0!==arguments[0]?arguments[0]:"milliseconds";return this.isValid?this.toDuration(t).get(t):NaN}count(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"milliseconds",e=arguments.length>1?arguments[1]:void 0;if(!this.isValid)return NaN;const n=this.start.startOf(t,e);let r;return r=null!==e&&void 0!==e&&e.useLocaleWeeks?this.end.reconfigure({locale:n.locale}):this.end,r=r.startOf(t,e),Math.floor(r.diff(n,t).get(t))+(r.valueOf()!==this.end.valueOf())}hasSame(t){return!!this.isValid&&(this.isEmpty()||this.e.minus(1).hasSame(this.s,t))}isEmpty(){return this.s.valueOf()===this.e.valueOf()}isAfter(t){return!!this.isValid&&this.s>t}isBefore(t){return!!this.isValid&&this.e<=t}contains(t){return!!this.isValid&&(this.s<=t&&this.e>t)}set(){let{start:t,end:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.isValid?Sn.fromDateTimes(t||this.s,e||this.e):this}splitAt(){if(!this.isValid)return[];for(var t=arguments.length,e=new Array(t),n=0;nthis.contains(t))).sort(((t,e)=>t.toMillis()-e.toMillis())),s=[];let{s:i}=this,a=0;for(;i+this.e?this.e:t;s.push(Sn.fromDateTimes(i,e)),i=e,a+=1}return s}splitBy(t){const e=pn.fromDurationLike(t);if(!this.isValid||!e.isValid||0===e.as("milliseconds"))return[];let n,{s:r}=this,s=1;const i=[];for(;rt*s)));n=+t>+this.e?this.e:t,i.push(Sn.fromDateTimes(r,n)),r=n,s+=1}return i}divideEqually(t){return this.isValid?this.splitBy(this.length()/t).slice(0,t):[]}overlaps(t){return this.e>t.s&&this.s=t.e)}equals(t){return!(!this.isValid||!t.isValid)&&(this.s.equals(t.s)&&this.e.equals(t.e))}intersection(t){if(!this.isValid)return this;const e=this.s>t.s?this.s:t.s,n=this.e=n?null:Sn.fromDateTimes(e,n)}union(t){if(!this.isValid)return this;const e=this.st.e?this.e:t.e;return Sn.fromDateTimes(e,n)}static merge(t){const[e,n]=t.sort(((t,e)=>t.s-e.s)).reduce(((t,e)=>{let[n,r]=t;return r?r.overlaps(e)||r.abutsStart(e)?[n,r.union(e)]:[n.concat([r]),e]:[n,e]}),[[],null]);return n&&e.push(n),e}static xor(t){let e=null,n=0;const r=[],s=t.map((t=>[{time:t.s,type:"s"},{time:t.e,type:"e"}])),i=Array.prototype.concat(...s).sort(((t,e)=>t.time-e.time));for(const a of i)n+="s"===a.type?1:-1,1===n?e=a.time:(e&&+e!==+a.time&&r.push(Sn.fromDateTimes(e,a.time)),e=null);return Sn.merge(r)}difference(){for(var t=arguments.length,e=new Array(t),n=0;nthis.intersection(t))).filter((t=>t&&!t.isEmpty()))}toString(){return this.isValid?"[".concat(this.s.toISO()," \u2013 ").concat(this.e.toISO(),")"):kn}[Symbol.for("nodejs.util.inspect.custom")](){return this.isValid?"Interval { start: ".concat(this.s.toISO(),", end: ").concat(this.e.toISO()," }"):"Interval { Invalid, reason: ".concat(this.invalidReason," }")}toLocaleString(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:f,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.isValid?ve.create(this.s.loc.clone(e),t).formatInterval(this):kn}toISO(t){return this.isValid?"".concat(this.s.toISO(t),"/").concat(this.e.toISO(t)):kn}toISODate(){return this.isValid?"".concat(this.s.toISODate(),"/").concat(this.e.toISODate()):kn}toISOTime(t){return this.isValid?"".concat(this.s.toISOTime(t),"/").concat(this.e.toISOTime(t)):kn}toFormat(t){let{separator:e=" \u2013 "}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.isValid?"".concat(this.s.toFormat(t)).concat(e).concat(this.e.toFormat(t)):kn}toDuration(t,e){return this.isValid?this.e.diff(this.s,t,e):pn.invalid(this.invalidReason)}mapEndpoints(t){return Sn.fromDateTimes(t(this.s),t(this.e))}}class Tn{static hasDST(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ft.defaultZone;const e=fr.now().setZone(t).set({month:12});return!t.isUniversal&&e.offset!==e.set({month:6}).offset}static isValidIANAZone(t){return U.isValidZone(t)}static normalizeZone(t){return it(t,ft.defaultZone)}static getStartOfWeek(){let{locale:t=null,locObj:e=null}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(e||et.create(t)).getStartOfWeek()}static getMinimumDaysInFirstWeek(){let{locale:t=null,locObj:e=null}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(e||et.create(t)).getMinDaysInFirstWeek()}static getWeekendWeekdays(){let{locale:t=null,locObj:e=null}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(e||et.create(t)).getWeekendDays().slice()}static months(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"long",{locale:e=null,numberingSystem:n=null,locObj:r=null,outputCalendar:s="gregory"}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(r||et.create(e,n,s)).months(t)}static monthsFormat(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"long",{locale:e=null,numberingSystem:n=null,locObj:r=null,outputCalendar:s="gregory"}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(r||et.create(e,n,s)).months(t,!0)}static weekdays(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"long",{locale:e=null,numberingSystem:n=null,locObj:r=null}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(r||et.create(e,n,null)).weekdays(t)}static weekdaysFormat(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"long",{locale:e=null,numberingSystem:n=null,locObj:r=null}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(r||et.create(e,n,null)).weekdays(t,!0)}static meridiems(){let{locale:t=null}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return et.create(t).meridiems()}static eras(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"short",{locale:e=null}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return et.create(e,null,"gregory").eras(t)}static features(){return{relative:Ft(),localeWeek:Wt()}}}function bn(t,e){const n=t=>t.toUTC(0,{keepLocalTime:!0}).startOf("day").valueOf(),r=n(e)-n(t);return Math.floor(pn.fromMillis(r).as("days"))}function On(t,e,n,r){let[s,i,a,o]=function(t,e,n){const r=[["years",(t,e)=>e.year-t.year],["quarters",(t,e)=>e.quarter-t.quarter+4*(e.year-t.year)],["months",(t,e)=>e.month-t.month+12*(e.year-t.year)],["weeks",(t,e)=>{const n=bn(t,e);return(n-n%7)/7}],["days",bn]],s={},i=t;let a,o;for(const[l,u]of r)n.indexOf(l)>=0&&(a=l,s[l]=u(t,e),o=i.plus(s),o>e?(s[l]--,(t=i.plus(s))>e&&(o=t,s[l]--,t=i.plus(s))):t=o);return[t,s,o,a]}(t,e,n);const l=e-s,u=n.filter((t=>["hours","minutes","seconds","milliseconds"].indexOf(t)>=0));0===u.length&&(a0?pn.fromMillis(l,r).shiftTo(...u).plus(c):c}const Nn={arab:"[\u0660-\u0669]",arabext:"[\u06f0-\u06f9]",bali:"[\u1b50-\u1b59]",beng:"[\u09e6-\u09ef]",deva:"[\u0966-\u096f]",fullwide:"[\uff10-\uff19]",gujr:"[\u0ae6-\u0aef]",hanidec:"[\u3007|\u4e00|\u4e8c|\u4e09|\u56db|\u4e94|\u516d|\u4e03|\u516b|\u4e5d]",khmr:"[\u17e0-\u17e9]",knda:"[\u0ce6-\u0cef]",laoo:"[\u0ed0-\u0ed9]",limb:"[\u1946-\u194f]",mlym:"[\u0d66-\u0d6f]",mong:"[\u1810-\u1819]",mymr:"[\u1040-\u1049]",orya:"[\u0b66-\u0b6f]",tamldec:"[\u0be6-\u0bef]",telu:"[\u0c66-\u0c6f]",thai:"[\u0e50-\u0e59]",tibt:"[\u0f20-\u0f29]",latn:"\\d"},Dn={arab:[1632,1641],arabext:[1776,1785],bali:[6992,7001],beng:[2534,2543],deva:[2406,2415],fullwide:[65296,65303],gujr:[2790,2799],khmr:[6112,6121],knda:[3302,3311],laoo:[3792,3801],limb:[6470,6479],mlym:[3430,3439],mong:[6160,6169],mymr:[4160,4169],orya:[2918,2927],tamldec:[3046,3055],telu:[3174,3183],thai:[3664,3673],tibt:[3872,3881]},Mn=Nn.hanidec.replace(/[\[|\]]/g,"").split("");function In(t){let{numberingSystem:e}=t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return new RegExp("".concat(Nn[e||"latn"]).concat(n))}const Vn="missing Intl.DateTimeFormat.formatToParts support";function En(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t=>t;return{regex:t,deser:t=>{let[n]=t;return e(function(t){let e=parseInt(t,10);if(isNaN(e)){e="";for(let n=0;n=n&&r<=s&&(e+=r-n)}}return parseInt(e,10)}return e}(n))}}}const xn=String.fromCharCode(160),Cn="[ ".concat(xn,"]"),Fn=new RegExp(Cn,"g");function Wn(t){return t.replace(/\./g,"\\.?").replace(Fn,Cn)}function Zn(t){return t.replace(/\./g,"").replace(Fn," ").toLowerCase()}function Ln(t,e){return null===t?null:{regex:RegExp(t.map(Wn).join("|")),deser:n=>{let[r]=n;return t.findIndex((t=>Zn(r)===Zn(t)))+e}}}function zn(t,e){return{regex:t,deser:t=>{let[,e,n]=t;return Kt(e,n)},groups:e}}function An(t){return{regex:t,deser:t=>{let[e]=t;return e}}}const jn={year:{"2-digit":"yy",numeric:"yyyyy"},month:{numeric:"M","2-digit":"MM",short:"MMM",long:"MMMM"},day:{numeric:"d","2-digit":"dd"},weekday:{short:"EEE",long:"EEEE"},dayperiod:"a",dayPeriod:"a",hour12:{numeric:"h","2-digit":"hh"},hour24:{numeric:"H","2-digit":"HH"},minute:{numeric:"m","2-digit":"mm"},second:{numeric:"s","2-digit":"ss"},timeZoneName:{long:"ZZZZZ",short:"ZZZ"}};let qn=null;function _n(t,e){return Array.prototype.concat(...t.map((t=>function(t,e){if(t.literal)return t;const n=Yn(ve.macroTokenToFormatOpts(t.val),e);return null==n||n.includes(void 0)?t:n}(t,e))))}function Un(t,e,n){const r=_n(ve.parseFormat(n),t),s=r.map((e=>function(t,e){const n=In(e),r=In(e,"{2}"),s=In(e,"{3}"),i=In(e,"{4}"),a=In(e,"{6}"),o=In(e,"{1,2}"),l=In(e,"{1,3}"),u=In(e,"{1,6}"),c=In(e,"{1,9}"),h=In(e,"{2,4}"),d=In(e,"{4,6}"),m=t=>{return{regex:RegExp((e=t.val,e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&"))),deser:t=>{let[e]=t;return e},literal:!0};var e},f=(f=>{if(t.literal)return m(f);switch(f.val){case"G":return Ln(e.eras("short"),0);case"GG":return Ln(e.eras("long"),0);case"y":return En(u);case"yy":case"kk":return En(h,Bt);case"yyyy":case"kkkk":return En(i);case"yyyyy":return En(d);case"yyyyyy":return En(a);case"M":case"L":case"d":case"H":case"h":case"m":case"q":case"s":case"W":return En(o);case"MM":case"LL":case"dd":case"HH":case"hh":case"mm":case"qq":case"ss":case"WW":return En(r);case"MMM":return Ln(e.months("short",!0),1);case"MMMM":return Ln(e.months("long",!0),1);case"LLL":return Ln(e.months("short",!1),1);case"LLLL":return Ln(e.months("long",!1),1);case"o":case"S":return En(l);case"ooo":case"SSS":return En(s);case"u":return An(c);case"uu":return An(o);case"uuu":case"E":case"c":return En(n);case"a":return Ln(e.meridiems(),0);case"EEE":return Ln(e.weekdays("short",!1),1);case"EEEE":return Ln(e.weekdays("long",!1),1);case"ccc":return Ln(e.weekdays("short",!0),1);case"cccc":return Ln(e.weekdays("long",!0),1);case"Z":case"ZZ":return zn(new RegExp("([+-]".concat(o.source,")(?::(").concat(r.source,"))?")),2);case"ZZZ":return zn(new RegExp("([+-]".concat(o.source,")(").concat(r.source,")?")),2);case"z":return An(/[a-z_+-/]{1,256}?/i);case" ":return An(/[^\S\n\r]/);default:return m(f)}})(t)||{invalidReason:Vn};return f.token=t,f}(e,t))),i=s.find((t=>t.invalidReason));if(i)return{input:e,tokens:r,invalidReason:i.invalidReason};{const[t,n]=function(t){const e=t.map((t=>t.regex)).reduce(((t,e)=>"".concat(t,"(").concat(e.source,")")),"");return["^".concat(e,"$"),t]}(s),i=RegExp(t,"i"),[a,l]=function(t,e,n){const r=t.match(e);if(r){const t={};let e=1;for(const s in n)if(Lt(n,s)){const i=n[s],a=i.groups?i.groups+1:1;!i.literal&&i.token&&(t[i.token.val[0]]=i.deser(r.slice(e,e+a))),e+=a}return[r,t]}return[r,{}]}(e,i,n),[u,c,h]=l?function(t){let e,n=null;return Et(t.z)||(n=U.create(t.z)),Et(t.Z)||(n||(n=new rt(t.Z)),e=t.Z),Et(t.q)||(t.M=3*(t.q-1)+1),Et(t.h)||(t.h<12&&1===t.a?t.h+=12:12===t.h&&0===t.a&&(t.h=0)),0===t.G&&t.y&&(t.y=-t.y),Et(t.u)||(t.S=Ut(t.u)),[Object.keys(t).reduce(((e,n)=>{const r=(t=>{switch(t){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":case"H":return"hour";case"d":return"day";case"o":return"ordinal";case"L":case"M":return"month";case"y":return"year";case"E":case"c":return"weekday";case"W":return"weekNumber";case"k":return"weekYear";case"q":return"quarter";default:return null}})(n);return r&&(e[r]=t[n]),e}),{}),n,e]}(l):[null,null,void 0];if(Lt(l,"a")&&Lt(l,"H"))throw new o("Can't include meridiem when specifying 24-hour format");return{input:e,tokens:r,regex:i,rawMatches:a,matches:l,result:u,zone:c,specificOffset:h}}}function Yn(t,e){if(!t)return null;const n=ve.create(e,t).dtFormatter((qn||(qn=fr.fromMillis(1555555555555)),qn)),r=n.formatToParts(),s=n.resolvedOptions();return r.map((e=>function(t,e,n){const{type:r,value:s}=t;if("literal"===r){const t=/^\s+$/.test(s);return{literal:!t,val:t?" ":s}}const i=e[r];let a=r;"hour"===r&&(a=null!=e.hour12?e.hour12?"hour12":"hour24":null!=e.hourCycle?"h11"===e.hourCycle||"h12"===e.hourCycle?"hour12":"hour24":n.hour12?"hour12":"hour24");let o=jn[a];if("object"===typeof o&&(o=o[i]),o)return{literal:!1,val:o}}(e,t,s)))}const Hn="Invalid DateTime",Rn=864e13;function Jn(t){return new yt("unsupported zone",'the zone "'.concat(t.name,'" is not supported'))}function Pn(t){return null===t.weekData&&(t.weekData=bt(t.c)),t.weekData}function Gn(t){return null===t.localWeekData&&(t.localWeekData=bt(t.c,t.loc.getMinDaysInFirstWeek(),t.loc.getStartOfWeek())),t.localWeekData}function $n(t,e){const n={ts:t.ts,zone:t.zone,c:t.c,o:t.o,loc:t.loc,invalid:t.invalid};return new fr({...n,...e,old:n})}function Bn(t,e,n){let r=t-60*e*1e3;const s=n.offset(r);if(e===s)return[r,e];r-=60*(s-e)*1e3;const i=n.offset(r);return s===i?[r,s]:[t-60*Math.min(s,i)*1e3,Math.max(s,i)]}function Qn(t,e){const n=new Date(t+=60*e*1e3);return{year:n.getUTCFullYear(),month:n.getUTCMonth()+1,day:n.getUTCDate(),hour:n.getUTCHours(),minute:n.getUTCMinutes(),second:n.getUTCSeconds(),millisecond:n.getUTCMilliseconds()}}function Kn(t,e,n){return Bn(Pt(t),e,n)}function Xn(t,e){const n=t.o,r=t.c.year+Math.trunc(e.years),s=t.c.month+Math.trunc(e.months)+3*Math.trunc(e.quarters),i={...t.c,year:r,month:s,day:Math.min(t.c.day,Jt(r,s))+Math.trunc(e.days)+7*Math.trunc(e.weeks)},a=pn.fromObject({years:e.years-Math.trunc(e.years),quarters:e.quarters-Math.trunc(e.quarters),months:e.months-Math.trunc(e.months),weeks:e.weeks-Math.trunc(e.weeks),days:e.days-Math.trunc(e.days),hours:e.hours,minutes:e.minutes,seconds:e.seconds,milliseconds:e.milliseconds}).as("milliseconds"),o=Pt(i);let[l,u]=Bn(o,n,t.zone);return 0!==a&&(l+=a,u=t.zone.offset(l)),{ts:l,o:u}}function tr(t,e,n,r,s,i){const{setZone:a,zone:o}=n;if(t&&0!==Object.keys(t).length||e){const r=e||o,s=fr.fromObject(t,{...n,zone:r,specificOffset:i});return a?s:s.setZone(o)}return fr.invalid(new yt("unparsable",'the input "'.concat(s,"\" can't be parsed as ").concat(r)))}function er(t,e){let n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return t.isValid?ve.create(et.create("en-US"),{allowZ:n,forceSimple:!0}).formatDateTimeFromString(t,e):null}function nr(t,e){const n=t.c.year>9999||t.c.year<0;let r="";return n&&t.c.year>=0&&(r+="+"),r+=jt(t.c.year,n?6:4),e?(r+="-",r+=jt(t.c.month),r+="-",r+=jt(t.c.day)):(r+=jt(t.c.month),r+=jt(t.c.day)),r}function rr(t,e,n,r,s,i){let a=jt(t.c.hour);return e?(a+=":",a+=jt(t.c.minute),0===t.c.millisecond&&0===t.c.second&&n||(a+=":")):a+=jt(t.c.minute),0===t.c.millisecond&&0===t.c.second&&n||(a+=jt(t.c.second),0===t.c.millisecond&&r||(a+=".",a+=jt(t.c.millisecond,3))),s&&(t.isOffsetFixed&&0===t.offset&&!i?a+="Z":t.o<0?(a+="-",a+=jt(Math.trunc(-t.o/60)),a+=":",a+=jt(Math.trunc(-t.o%60))):(a+="+",a+=jt(Math.trunc(t.o/60)),a+=":",a+=jt(Math.trunc(t.o%60)))),i&&(a+="["+t.zone.ianaName+"]"),a}const sr={month:1,day:1,hour:0,minute:0,second:0,millisecond:0},ir={weekNumber:1,weekday:1,hour:0,minute:0,second:0,millisecond:0},ar={ordinal:1,hour:0,minute:0,second:0,millisecond:0},or=["year","month","day","hour","minute","second","millisecond"],lr=["weekYear","weekNumber","weekday","hour","minute","second","millisecond"],ur=["year","ordinal","hour","minute","second","millisecond"];function cr(t){switch(t.toLowerCase()){case"localweekday":case"localweekdays":return"localWeekday";case"localweeknumber":case"localweeknumbers":return"localWeekNumber";case"localweekyear":case"localweekyears":return"localWeekYear";default:return function(t){const e={year:"year",years:"year",month:"month",months:"month",day:"day",days:"day",hour:"hour",hours:"hour",minute:"minute",minutes:"minute",quarter:"quarter",quarters:"quarter",second:"second",seconds:"second",millisecond:"millisecond",milliseconds:"millisecond",weekday:"weekday",weekdays:"weekday",weeknumber:"weekNumber",weeksnumber:"weekNumber",weeknumbers:"weekNumber",weekyear:"weekYear",weekyears:"weekYear",ordinal:"ordinal"}[t.toLowerCase()];if(!e)throw new l(t);return e}(t)}}function hr(t,e){const n=it(e.zone,ft.defaultZone),r=et.fromObject(e),s=ft.now();let i,a;if(Et(t.year))i=s;else{for(const n of or)Et(t[n])&&(t[n]=sr[n]);const e=It(t)||Vt(t);if(e)return fr.invalid(e);const r=n.offset(s);[i,a]=Kn(t,r,n)}return new fr({ts:i,zone:n,loc:r,o:a})}function dr(t,e,n){const r=!!Et(n.round)||n.round,s=(t,s)=>{t=Yt(t,r||n.calendary?0:2,!0);return e.loc.clone(n).relFormatter(n).format(t,s)},i=r=>n.calendary?e.hasSame(t,r)?0:e.startOf(r).diff(t.startOf(r),r).get(r):e.diff(t,r).get(r);if(n.unit)return s(i(n.unit),n.unit);for(const a of n.units){const t=i(a);if(Math.abs(t)>=1)return s(t,a)}return s(t>e?-0:0,n.units[n.units.length-1])}function mr(t){let e,n={};return t.length>0&&"object"===typeof t[t.length-1]?(n=t[t.length-1],e=Array.from(t).slice(0,t.length-1)):e=Array.from(t),[n,e]}class fr{constructor(t){const e=t.zone||ft.defaultZone;let n=t.invalid||(Number.isNaN(t.ts)?new yt("invalid input"):null)||(e.isValid?null:Jn(e));this.ts=Et(t.ts)?ft.now():t.ts;let r=null,s=null;if(!n){if(t.old&&t.old.ts===this.ts&&t.old.zone.equals(e))[r,s]=[t.old.c,t.old.o];else{const t=e.offset(this.ts);r=Qn(this.ts,t),n=Number.isNaN(r.year)?new yt("invalid input"):null,r=n?null:r,s=n?null:t}}this._zone=e,this.loc=t.loc||et.create(),this.invalid=n,this.weekData=null,this.localWeekData=null,this.c=r,this.o=s,this.isLuxonDateTime=!0}static now(){return new fr({})}static local(){const[t,e]=mr(arguments),[n,r,s,i,a,o,l]=e;return hr({year:n,month:r,day:s,hour:i,minute:a,second:o,millisecond:l},t)}static utc(){const[t,e]=mr(arguments),[n,r,s,i,a,o,l]=e;return t.zone=rt.utcInstance,hr({year:n,month:r,day:s,hour:i,minute:a,second:o,millisecond:l},t)}static fromJSDate(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=(r=t,"[object Date]"===Object.prototype.toString.call(r)?t.valueOf():NaN);var r;if(Number.isNaN(n))return fr.invalid("invalid input");const s=it(e.zone,ft.defaultZone);return s.isValid?new fr({ts:n,zone:s,loc:et.fromObject(e)}):fr.invalid(Jn(s))}static fromMillis(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(xt(t))return t<-Rn||t>Rn?fr.invalid("Timestamp out of range"):new fr({ts:t,zone:it(e.zone,ft.defaultZone),loc:et.fromObject(e)});throw new u("fromMillis requires a numerical input, but received a ".concat(typeof t," with value ").concat(t))}static fromSeconds(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(xt(t))return new fr({ts:1e3*t,zone:it(e.zone,ft.defaultZone),loc:et.fromObject(e)});throw new u("fromSeconds requires a numerical input")}static fromObject(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};t=t||{};const n=it(e.zone,ft.defaultZone);if(!n.isValid)return fr.invalid(Jn(n));const r=et.fromObject(e),s=te(t,cr),{minDaysInFirstWeek:i,startOfWeek:a}=Mt(s,r),l=ft.now(),u=Et(e.specificOffset)?n.offset(l):e.specificOffset,c=!Et(s.ordinal),h=!Et(s.year),d=!Et(s.month)||!Et(s.day),m=h||d,f=s.weekYear||s.weekNumber;if((m||c)&&f)throw new o("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(d&&c)throw new o("Can't mix ordinal dates with month/day");const y=f||s.weekday&&!m;let g,w,v=Qn(l,u);y?(g=lr,w=ir,v=bt(v,i,a)):c?(g=ur,w=ar,v=Nt(v)):(g=or,w=sr);let p=!1;for(const o of g){Et(s[o])?s[o]=p?w[o]:v[o]:p=!0}const k=y?function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:4,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;const r=Ct(t.weekYear),s=At(t.weekNumber,1,$t(t.weekYear,e,n)),i=At(t.weekday,1,7);return r?s?!i&&vt("weekday",t.weekday):vt("week",t.weekNumber):vt("weekYear",t.weekYear)}(s,i,a):c?function(t){const e=Ct(t.year),n=At(t.ordinal,1,Rt(t.year));return e?!n&&vt("ordinal",t.ordinal):vt("year",t.year)}(s):It(s),S=k||Vt(s);if(S)return fr.invalid(S);const T=y?Ot(s,i,a):c?Dt(s):s,[b,O]=Kn(T,u,n),N=new fr({ts:b,zone:n,o:O,loc:r});return s.weekday&&m&&t.weekday!==N.weekday?fr.invalid("mismatched weekday","you can't specify both a weekday of ".concat(s.weekday," and a date of ").concat(N.toISO())):N}static fromISO(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const[n,r]=function(t){return Te(t,[$e,Xe],[Be,tn],[Qe,en],[Ke,nn])}(t);return tr(n,r,e,"ISO 8601",t)}static fromRFC2822(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const[n,r]=function(t){return Te(function(t){return t.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").trim()}(t),[Ue,Ye])}(t);return tr(n,r,e,"RFC 2822",t)}static fromHTTP(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const[n,r]=function(t){return Te(t,[He,Pe],[Re,Pe],[Je,Ge])}(t);return tr(n,r,e,"HTTP",e)}static fromFormat(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(Et(t)||Et(e))throw new u("fromFormat requires an input string and a format");const{locale:r=null,numberingSystem:s=null}=n,i=et.fromOpts({locale:r,numberingSystem:s,defaultToEN:!0}),[a,o,l,c]=function(t,e,n){const{result:r,zone:s,specificOffset:i,invalidReason:a}=Un(t,e,n);return[r,s,i,a]}(i,t,e);return c?fr.invalid(c):tr(a,o,n,"format ".concat(e),t,l)}static fromString(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return fr.fromFormat(t,e,n)}static fromSQL(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const[n,r]=function(t){return Te(t,[sn,Xe],[an,on])}(t);return tr(n,r,e,"SQL",t)}static invalid(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(!t)throw new u("need to specify a reason the DateTime is invalid");const n=t instanceof yt?t:new yt(t,e);if(ft.throwOnInvalid)throw new s(n);return new fr({invalid:n})}static isDateTime(t){return t&&t.isLuxonDateTime||!1}static parseFormatForOpts(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=Yn(t,et.fromObject(e));return n?n.map((t=>t?t.val:null)).join(""):null}static expandFormat(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return _n(ve.parseFormat(t),et.fromObject(e)).map((t=>t.val)).join("")}get(t){return this[t]}get isValid(){return null===this.invalid}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}get outputCalendar(){return this.isValid?this.loc.outputCalendar:null}get zone(){return this._zone}get zoneName(){return this.isValid?this.zone.name:null}get year(){return this.isValid?this.c.year:NaN}get quarter(){return this.isValid?Math.ceil(this.c.month/3):NaN}get month(){return this.isValid?this.c.month:NaN}get day(){return this.isValid?this.c.day:NaN}get hour(){return this.isValid?this.c.hour:NaN}get minute(){return this.isValid?this.c.minute:NaN}get second(){return this.isValid?this.c.second:NaN}get millisecond(){return this.isValid?this.c.millisecond:NaN}get weekYear(){return this.isValid?Pn(this).weekYear:NaN}get weekNumber(){return this.isValid?Pn(this).weekNumber:NaN}get weekday(){return this.isValid?Pn(this).weekday:NaN}get isWeekend(){return this.isValid&&this.loc.getWeekendDays().includes(this.weekday)}get localWeekday(){return this.isValid?Gn(this).weekday:NaN}get localWeekNumber(){return this.isValid?Gn(this).weekNumber:NaN}get localWeekYear(){return this.isValid?Gn(this).weekYear:NaN}get ordinal(){return this.isValid?Nt(this.c).ordinal:NaN}get monthShort(){return this.isValid?Tn.months("short",{locObj:this.loc})[this.month-1]:null}get monthLong(){return this.isValid?Tn.months("long",{locObj:this.loc})[this.month-1]:null}get weekdayShort(){return this.isValid?Tn.weekdays("short",{locObj:this.loc})[this.weekday-1]:null}get weekdayLong(){return this.isValid?Tn.weekdays("long",{locObj:this.loc})[this.weekday-1]:null}get offset(){return this.isValid?+this.o:NaN}get offsetNameShort(){return this.isValid?this.zone.offsetName(this.ts,{format:"short",locale:this.locale}):null}get offsetNameLong(){return this.isValid?this.zone.offsetName(this.ts,{format:"long",locale:this.locale}):null}get isOffsetFixed(){return this.isValid?this.zone.isUniversal:null}get isInDST(){return!this.isOffsetFixed&&(this.offset>this.set({month:1,day:1}).offset||this.offset>this.set({month:5}).offset)}getPossibleOffsets(){if(!this.isValid||this.isOffsetFixed)return[this];const t=864e5,e=6e4,n=Pt(this.c),r=this.zone.offset(n-t),s=this.zone.offset(n+t),i=this.zone.offset(n-r*e),a=this.zone.offset(n-s*e);if(i===a)return[this];const o=n-i*e,l=n-a*e,u=Qn(o,i),c=Qn(l,a);return u.hour===c.hour&&u.minute===c.minute&&u.second===c.second&&u.millisecond===c.millisecond?[$n(this,{ts:o}),$n(this,{ts:l})]:[this]}get isInLeapYear(){return Ht(this.year)}get daysInMonth(){return Jt(this.year,this.month)}get daysInYear(){return this.isValid?Rt(this.year):NaN}get weeksInWeekYear(){return this.isValid?$t(this.weekYear):NaN}get weeksInLocalWeekYear(){return this.isValid?$t(this.localWeekYear,this.loc.getMinDaysInFirstWeek(),this.loc.getStartOfWeek()):NaN}resolvedLocaleOptions(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{locale:e,numberingSystem:n,calendar:r}=ve.create(this.loc.clone(t),t).resolvedOptions(this);return{locale:e,numberingSystem:n,outputCalendar:r}}toUTC(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.setZone(rt.instance(t),e)}toLocal(){return this.setZone(ft.defaultZone)}setZone(t){let{keepLocalTime:e=!1,keepCalendarTime:n=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if((t=it(t,ft.defaultZone)).equals(this.zone))return this;if(t.isValid){let r=this.ts;if(e||n){const e=t.offset(this.ts),n=this.toObject();[r]=Kn(n,e,t)}return $n(this,{ts:r,zone:t})}return fr.invalid(Jn(t))}reconfigure(){let{locale:t,numberingSystem:e,outputCalendar:n}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return $n(this,{loc:this.loc.clone({locale:t,numberingSystem:e,outputCalendar:n})})}setLocale(t){return this.reconfigure({locale:t})}set(t){if(!this.isValid)return this;const e=te(t,cr),{minDaysInFirstWeek:n,startOfWeek:r}=Mt(e,this.loc),s=!Et(e.weekYear)||!Et(e.weekNumber)||!Et(e.weekday),i=!Et(e.ordinal),a=!Et(e.year),l=!Et(e.month)||!Et(e.day),u=a||l,c=e.weekYear||e.weekNumber;if((u||i)&&c)throw new o("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(l&&i)throw new o("Can't mix ordinal dates with month/day");let h;s?h=Ot({...bt(this.c,n,r),...e},n,r):Et(e.ordinal)?(h={...this.toObject(),...e},Et(e.day)&&(h.day=Math.min(Jt(h.year,h.month),h.day))):h=Dt({...Nt(this.c),...e});const[d,m]=Kn(h,this.o,this.zone);return $n(this,{ts:d,o:m})}plus(t){if(!this.isValid)return this;return $n(this,Xn(this,pn.fromDurationLike(t)))}minus(t){if(!this.isValid)return this;return $n(this,Xn(this,pn.fromDurationLike(t).negate()))}startOf(t){let{useLocaleWeeks:e=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!this.isValid)return this;const n={},r=pn.normalizeUnit(t);switch(r){case"years":n.month=1;case"quarters":case"months":n.day=1;case"weeks":case"days":n.hour=0;case"hours":n.minute=0;case"minutes":n.second=0;case"seconds":n.millisecond=0}if("weeks"===r)if(e){const t=this.loc.getStartOfWeek(),{weekday:e}=this;e1&&void 0!==arguments[1]?arguments[1]:{};return this.isValid?ve.create(this.loc.redefaultToEN(e)).formatDateTimeFromString(this,t):Hn}toLocaleString(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:f,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.isValid?ve.create(this.loc.clone(e),t).formatDateTime(this):Hn}toLocaleParts(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.isValid?ve.create(this.loc.clone(t),t).formatDateTimeParts(this):[]}toISO(){let{format:t="extended",suppressSeconds:e=!1,suppressMilliseconds:n=!1,includeOffset:r=!0,extendedZone:s=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!this.isValid)return null;const i="extended"===t;let a=nr(this,i);return a+="T",a+=rr(this,i,e,n,r,s),a}toISODate(){let{format:t="extended"}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.isValid?nr(this,"extended"===t):null}toISOWeekDate(){return er(this,"kkkk-'W'WW-c")}toISOTime(){let{suppressMilliseconds:t=!1,suppressSeconds:e=!1,includeOffset:n=!0,includePrefix:r=!1,extendedZone:s=!1,format:i="extended"}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.isValid?(r?"T":"")+rr(this,"extended"===i,e,t,n,s):null}toRFC2822(){return er(this,"EEE, dd LLL yyyy HH:mm:ss ZZZ",!1)}toHTTP(){return er(this.toUTC(),"EEE, dd LLL yyyy HH:mm:ss 'GMT'")}toSQLDate(){return this.isValid?nr(this,!0):null}toSQLTime(){let{includeOffset:t=!0,includeZone:e=!1,includeOffsetSpace:n=!0}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r="HH:mm:ss.SSS";return(e||t)&&(n&&(r+=" "),e?r+="z":t&&(r+="ZZ")),er(this,r,!0)}toSQL(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.isValid?"".concat(this.toSQLDate()," ").concat(this.toSQLTime(t)):null}toString(){return this.isValid?this.toISO():Hn}[Symbol.for("nodejs.util.inspect.custom")](){return this.isValid?"DateTime { ts: ".concat(this.toISO(),", zone: ").concat(this.zone.name,", locale: ").concat(this.locale," }"):"DateTime { Invalid, reason: ".concat(this.invalidReason," }")}valueOf(){return this.toMillis()}toMillis(){return this.isValid?this.ts:NaN}toSeconds(){return this.isValid?this.ts/1e3:NaN}toUnixInteger(){return this.isValid?Math.floor(this.ts/1e3):NaN}toJSON(){return this.toISO()}toBSON(){return this.toJSDate()}toObject(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!this.isValid)return{};const e={...this.c};return t.includeConfig&&(e.outputCalendar=this.outputCalendar,e.numberingSystem=this.loc.numberingSystem,e.locale=this.loc.locale),e}toJSDate(){return new Date(this.isValid?this.ts:NaN)}diff(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"milliseconds",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!this.isValid||!t.isValid)return pn.invalid("created by diffing an invalid DateTime");const r={locale:this.locale,numberingSystem:this.numberingSystem,...n},s=(o=e,Array.isArray(o)?o:[o]).map(pn.normalizeUnit),i=t.valueOf()>this.valueOf(),a=On(i?this:t,i?t:this,s,r);var o;return i?a.negate():a}diffNow(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"milliseconds",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.diff(fr.now(),t,e)}until(t){return this.isValid?Sn.fromDateTimes(this,t):this}hasSame(t,e,n){if(!this.isValid)return!1;const r=t.valueOf(),s=this.setZone(t.zone,{keepLocalTime:!0});return s.startOf(e,n)<=r&&r<=s.endOf(e,n)}equals(t){return this.isValid&&t.isValid&&this.valueOf()===t.valueOf()&&this.zone.equals(t.zone)&&this.loc.equals(t.loc)}toRelative(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!this.isValid)return null;const e=t.base||fr.fromObject({},{zone:this.zone}),n=t.padding?this0&&void 0!==arguments[0]?arguments[0]:{};return this.isValid?dr(t.base||fr.fromObject({},{zone:this.zone}),this,{...t,numeric:"auto",units:["years","months","days"],calendary:!0}):null}static min(){for(var t=arguments.length,e=new Array(t),n=0;nt.valueOf()),Math.min)}static max(){for(var t=arguments.length,e=new Array(t),n=0;nt.valueOf()),Math.max)}static fromFormatExplain(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{locale:r=null,numberingSystem:s=null}=n;return Un(et.fromOpts({locale:r,numberingSystem:s,defaultToEN:!0}),t,e)}static fromStringExplain(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return fr.fromFormatExplain(t,e,n)}static get DATE_SHORT(){return f}static get DATE_MED(){return y}static get DATE_MED_WITH_WEEKDAY(){return g}static get DATE_FULL(){return w}static get DATE_HUGE(){return v}static get TIME_SIMPLE(){return p}static get TIME_WITH_SECONDS(){return k}static get TIME_WITH_SHORT_OFFSET(){return S}static get TIME_WITH_LONG_OFFSET(){return T}static get TIME_24_SIMPLE(){return b}static get TIME_24_WITH_SECONDS(){return O}static get TIME_24_WITH_SHORT_OFFSET(){return N}static get TIME_24_WITH_LONG_OFFSET(){return D}static get DATETIME_SHORT(){return M}static get DATETIME_SHORT_WITH_SECONDS(){return I}static get DATETIME_MED(){return V}static get DATETIME_MED_WITH_SECONDS(){return E}static get DATETIME_MED_WITH_WEEKDAY(){return x}static get DATETIME_FULL(){return C}static get DATETIME_FULL_WITH_SECONDS(){return F}static get DATETIME_HUGE(){return W}static get DATETIME_HUGE_WITH_SECONDS(){return Z}}function yr(t){if(fr.isDateTime(t))return t;if(t&&t.valueOf&&xt(t.valueOf()))return fr.fromJSDate(t);if(t&&"object"===typeof t)return fr.fromObject(t);throw new u("Unknown datetime argument: ".concat(t,", of type ").concat(typeof t))}}}]); -//# sourceMappingURL=241.f827f4d6.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/241.f827f4d6.chunk.js.map b/web-app/build/static/js/241.f827f4d6.chunk.js.map deleted file mode 100644 index ee6e82a6527..00000000000 --- a/web-app/build/static/js/241.f827f4d6.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/241.f827f4d6.chunk.js","mappings":"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","sources":["../node_modules/luxon/src/errors.js","../node_modules/luxon/src/impl/formats.js","../node_modules/luxon/src/zone.js","../node_modules/luxon/src/zones/systemZone.js","../node_modules/luxon/src/zones/IANAZone.js","../node_modules/luxon/src/impl/locale.js","../node_modules/luxon/src/impl/english.js","../node_modules/luxon/src/zones/fixedOffsetZone.js","../node_modules/luxon/src/zones/invalidZone.js","../node_modules/luxon/src/impl/zoneUtil.js","../node_modules/luxon/src/impl/util.js","../node_modules/luxon/src/settings.js","../node_modules/luxon/src/impl/invalid.js","../node_modules/luxon/src/impl/conversions.js","../node_modules/luxon/src/impl/formatter.js","../node_modules/luxon/src/impl/regexParser.js","../node_modules/luxon/src/duration.js","../node_modules/luxon/src/interval.js","../node_modules/luxon/src/info.js","../node_modules/luxon/src/impl/diff.js","../node_modules/luxon/src/impl/digits.js","../node_modules/luxon/src/impl/tokenParser.js","../node_modules/luxon/src/datetime.js"],"sourcesContent":["// these aren't really private, but nor are they really useful to document\n\n/**\n * @private\n */\nclass LuxonError extends Error {}\n\n/**\n * @private\n */\nexport class InvalidDateTimeError extends LuxonError {\n constructor(reason) {\n super(`Invalid DateTime: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidIntervalError extends LuxonError {\n constructor(reason) {\n super(`Invalid Interval: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidDurationError extends LuxonError {\n constructor(reason) {\n super(`Invalid Duration: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class ConflictingSpecificationError extends LuxonError {}\n\n/**\n * @private\n */\nexport class InvalidUnitError extends LuxonError {\n constructor(unit) {\n super(`Invalid unit ${unit}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidArgumentError extends LuxonError {}\n\n/**\n * @private\n */\nexport class ZoneIsAbstractError extends LuxonError {\n constructor() {\n super(\"Zone is an abstract class\");\n }\n}\n","/**\n * @private\n */\n\nconst n = \"numeric\",\n s = \"short\",\n l = \"long\";\n\nexport const DATE_SHORT = {\n year: n,\n month: n,\n day: n,\n};\n\nexport const DATE_MED = {\n year: n,\n month: s,\n day: n,\n};\n\nexport const DATE_MED_WITH_WEEKDAY = {\n year: n,\n month: s,\n day: n,\n weekday: s,\n};\n\nexport const DATE_FULL = {\n year: n,\n month: l,\n day: n,\n};\n\nexport const DATE_HUGE = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n};\n\nexport const TIME_SIMPLE = {\n hour: n,\n minute: n,\n};\n\nexport const TIME_WITH_SECONDS = {\n hour: n,\n minute: n,\n second: n,\n};\n\nexport const TIME_WITH_SHORT_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n timeZoneName: s,\n};\n\nexport const TIME_WITH_LONG_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n timeZoneName: l,\n};\n\nexport const TIME_24_SIMPLE = {\n hour: n,\n minute: n,\n hourCycle: \"h23\",\n};\n\nexport const TIME_24_WITH_SECONDS = {\n hour: n,\n minute: n,\n second: n,\n hourCycle: \"h23\",\n};\n\nexport const TIME_24_WITH_SHORT_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n hourCycle: \"h23\",\n timeZoneName: s,\n};\n\nexport const TIME_24_WITH_LONG_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n hourCycle: \"h23\",\n timeZoneName: l,\n};\n\nexport const DATETIME_SHORT = {\n year: n,\n month: n,\n day: n,\n hour: n,\n minute: n,\n};\n\nexport const DATETIME_SHORT_WITH_SECONDS = {\n year: n,\n month: n,\n day: n,\n hour: n,\n minute: n,\n second: n,\n};\n\nexport const DATETIME_MED = {\n year: n,\n month: s,\n day: n,\n hour: n,\n minute: n,\n};\n\nexport const DATETIME_MED_WITH_SECONDS = {\n year: n,\n month: s,\n day: n,\n hour: n,\n minute: n,\n second: n,\n};\n\nexport const DATETIME_MED_WITH_WEEKDAY = {\n year: n,\n month: s,\n day: n,\n weekday: s,\n hour: n,\n minute: n,\n};\n\nexport const DATETIME_FULL = {\n year: n,\n month: l,\n day: n,\n hour: n,\n minute: n,\n timeZoneName: s,\n};\n\nexport const DATETIME_FULL_WITH_SECONDS = {\n year: n,\n month: l,\n day: n,\n hour: n,\n minute: n,\n second: n,\n timeZoneName: s,\n};\n\nexport const DATETIME_HUGE = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n hour: n,\n minute: n,\n timeZoneName: l,\n};\n\nexport const DATETIME_HUGE_WITH_SECONDS = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n hour: n,\n minute: n,\n second: n,\n timeZoneName: l,\n};\n","import { ZoneIsAbstractError } from \"./errors.js\";\n\n/**\n * @interface\n */\nexport default class Zone {\n /**\n * The type of zone\n * @abstract\n * @type {string}\n */\n get type() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * The name of this zone.\n * @abstract\n * @type {string}\n */\n get name() {\n throw new ZoneIsAbstractError();\n }\n\n get ianaName() {\n return this.name;\n }\n\n /**\n * Returns whether the offset is known to be fixed for the whole year.\n * @abstract\n * @type {boolean}\n */\n get isUniversal() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Returns the offset's common name (such as EST) at the specified timestamp\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to get the name\n * @param {Object} opts - Options to affect the format\n * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'.\n * @param {string} opts.locale - What locale to return the offset name in.\n * @return {string}\n */\n offsetName(ts, opts) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Returns the offset's value as a string\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\n formatOffset(ts, format) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return the offset in minutes for this zone at the specified timestamp.\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to compute the offset\n * @return {number}\n */\n offset(ts) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return whether this Zone is equal to another zone\n * @abstract\n * @param {Zone} otherZone - the zone to compare\n * @return {boolean}\n */\n equals(otherZone) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return whether this Zone is valid.\n * @abstract\n * @type {boolean}\n */\n get isValid() {\n throw new ZoneIsAbstractError();\n }\n}\n","import { formatOffset, parseZoneInfo } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * Represents the local zone for this JavaScript environment.\n * @implements {Zone}\n */\nexport default class SystemZone extends Zone {\n /**\n * Get a singleton instance of the local zone\n * @return {SystemZone}\n */\n static get instance() {\n if (singleton === null) {\n singleton = new SystemZone();\n }\n return singleton;\n }\n\n /** @override **/\n get type() {\n return \"system\";\n }\n\n /** @override **/\n get name() {\n return new Intl.DateTimeFormat().resolvedOptions().timeZone;\n }\n\n /** @override **/\n get isUniversal() {\n return false;\n }\n\n /** @override **/\n offsetName(ts, { format, locale }) {\n return parseZoneInfo(ts, format, locale);\n }\n\n /** @override **/\n formatOffset(ts, format) {\n return formatOffset(this.offset(ts), format);\n }\n\n /** @override **/\n offset(ts) {\n return -new Date(ts).getTimezoneOffset();\n }\n\n /** @override **/\n equals(otherZone) {\n return otherZone.type === \"system\";\n }\n\n /** @override **/\n get isValid() {\n return true;\n }\n}\n","import { formatOffset, parseZoneInfo, isUndefined, objToLocalTS } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet dtfCache = {};\nfunction makeDTF(zone) {\n if (!dtfCache[zone]) {\n dtfCache[zone] = new Intl.DateTimeFormat(\"en-US\", {\n hour12: false,\n timeZone: zone,\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n era: \"short\",\n });\n }\n return dtfCache[zone];\n}\n\nconst typeToPos = {\n year: 0,\n month: 1,\n day: 2,\n era: 3,\n hour: 4,\n minute: 5,\n second: 6,\n};\n\nfunction hackyOffset(dtf, date) {\n const formatted = dtf.format(date).replace(/\\u200E/g, \"\"),\n parsed = /(\\d+)\\/(\\d+)\\/(\\d+) (AD|BC),? (\\d+):(\\d+):(\\d+)/.exec(formatted),\n [, fMonth, fDay, fYear, fadOrBc, fHour, fMinute, fSecond] = parsed;\n return [fYear, fMonth, fDay, fadOrBc, fHour, fMinute, fSecond];\n}\n\nfunction partsOffset(dtf, date) {\n const formatted = dtf.formatToParts(date);\n const filled = [];\n for (let i = 0; i < formatted.length; i++) {\n const { type, value } = formatted[i];\n const pos = typeToPos[type];\n\n if (type === \"era\") {\n filled[pos] = value;\n } else if (!isUndefined(pos)) {\n filled[pos] = parseInt(value, 10);\n }\n }\n return filled;\n}\n\nlet ianaZoneCache = {};\n/**\n * A zone identified by an IANA identifier, like America/New_York\n * @implements {Zone}\n */\nexport default class IANAZone extends Zone {\n /**\n * @param {string} name - Zone name\n * @return {IANAZone}\n */\n static create(name) {\n if (!ianaZoneCache[name]) {\n ianaZoneCache[name] = new IANAZone(name);\n }\n return ianaZoneCache[name];\n }\n\n /**\n * Reset local caches. Should only be necessary in testing scenarios.\n * @return {void}\n */\n static resetCache() {\n ianaZoneCache = {};\n dtfCache = {};\n }\n\n /**\n * Returns whether the provided string is a valid specifier. This only checks the string's format, not that the specifier identifies a known zone; see isValidZone for that.\n * @param {string} s - The string to check validity on\n * @example IANAZone.isValidSpecifier(\"America/New_York\") //=> true\n * @example IANAZone.isValidSpecifier(\"Sport~~blorp\") //=> false\n * @deprecated This method returns false for some valid IANA names. Use isValidZone instead.\n * @return {boolean}\n */\n static isValidSpecifier(s) {\n return this.isValidZone(s);\n }\n\n /**\n * Returns whether the provided string identifies a real zone\n * @param {string} zone - The string to check\n * @example IANAZone.isValidZone(\"America/New_York\") //=> true\n * @example IANAZone.isValidZone(\"Fantasia/Castle\") //=> false\n * @example IANAZone.isValidZone(\"Sport~~blorp\") //=> false\n * @return {boolean}\n */\n static isValidZone(zone) {\n if (!zone) {\n return false;\n }\n try {\n new Intl.DateTimeFormat(\"en-US\", { timeZone: zone }).format();\n return true;\n } catch (e) {\n return false;\n }\n }\n\n constructor(name) {\n super();\n /** @private **/\n this.zoneName = name;\n /** @private **/\n this.valid = IANAZone.isValidZone(name);\n }\n\n /** @override **/\n get type() {\n return \"iana\";\n }\n\n /** @override **/\n get name() {\n return this.zoneName;\n }\n\n /** @override **/\n get isUniversal() {\n return false;\n }\n\n /** @override **/\n offsetName(ts, { format, locale }) {\n return parseZoneInfo(ts, format, locale, this.name);\n }\n\n /** @override **/\n formatOffset(ts, format) {\n return formatOffset(this.offset(ts), format);\n }\n\n /** @override **/\n offset(ts) {\n const date = new Date(ts);\n\n if (isNaN(date)) return NaN;\n\n const dtf = makeDTF(this.name);\n let [year, month, day, adOrBc, hour, minute, second] = dtf.formatToParts\n ? partsOffset(dtf, date)\n : hackyOffset(dtf, date);\n\n if (adOrBc === \"BC\") {\n year = -Math.abs(year) + 1;\n }\n\n // because we're using hour12 and https://bugs.chromium.org/p/chromium/issues/detail?id=1025564&can=2&q=%2224%3A00%22%20datetimeformat\n const adjustedHour = hour === 24 ? 0 : hour;\n\n const asUTC = objToLocalTS({\n year,\n month,\n day,\n hour: adjustedHour,\n minute,\n second,\n millisecond: 0,\n });\n\n let asTS = +date;\n const over = asTS % 1000;\n asTS -= over >= 0 ? over : 1000 + over;\n return (asUTC - asTS) / (60 * 1000);\n }\n\n /** @override **/\n equals(otherZone) {\n return otherZone.type === \"iana\" && otherZone.name === this.name;\n }\n\n /** @override **/\n get isValid() {\n return this.valid;\n }\n}\n","import { hasLocaleWeekInfo, hasRelative, padStart, roundTo, validateWeekSettings } from \"./util.js\";\nimport * as English from \"./english.js\";\nimport Settings from \"../settings.js\";\nimport DateTime from \"../datetime.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n// todo - remap caching\n\nlet intlLFCache = {};\nfunction getCachedLF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let dtf = intlLFCache[key];\n if (!dtf) {\n dtf = new Intl.ListFormat(locString, opts);\n intlLFCache[key] = dtf;\n }\n return dtf;\n}\n\nlet intlDTCache = {};\nfunction getCachedDTF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let dtf = intlDTCache[key];\n if (!dtf) {\n dtf = new Intl.DateTimeFormat(locString, opts);\n intlDTCache[key] = dtf;\n }\n return dtf;\n}\n\nlet intlNumCache = {};\nfunction getCachedINF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let inf = intlNumCache[key];\n if (!inf) {\n inf = new Intl.NumberFormat(locString, opts);\n intlNumCache[key] = inf;\n }\n return inf;\n}\n\nlet intlRelCache = {};\nfunction getCachedRTF(locString, opts = {}) {\n const { base, ...cacheKeyOpts } = opts; // exclude `base` from the options\n const key = JSON.stringify([locString, cacheKeyOpts]);\n let inf = intlRelCache[key];\n if (!inf) {\n inf = new Intl.RelativeTimeFormat(locString, opts);\n intlRelCache[key] = inf;\n }\n return inf;\n}\n\nlet sysLocaleCache = null;\nfunction systemLocale() {\n if (sysLocaleCache) {\n return sysLocaleCache;\n } else {\n sysLocaleCache = new Intl.DateTimeFormat().resolvedOptions().locale;\n return sysLocaleCache;\n }\n}\n\nlet weekInfoCache = {};\nfunction getCachedWeekInfo(locString) {\n let data = weekInfoCache[locString];\n if (!data) {\n const locale = new Intl.Locale(locString);\n // browsers currently implement this as a property, but spec says it should be a getter function\n data = \"getWeekInfo\" in locale ? locale.getWeekInfo() : locale.weekInfo;\n weekInfoCache[locString] = data;\n }\n return data;\n}\n\nfunction parseLocaleString(localeStr) {\n // I really want to avoid writing a BCP 47 parser\n // see, e.g. https://github.com/wooorm/bcp-47\n // Instead, we'll do this:\n\n // a) if the string has no -u extensions, just leave it alone\n // b) if it does, use Intl to resolve everything\n // c) if Intl fails, try again without the -u\n\n // private subtags and unicode subtags have ordering requirements,\n // and we're not properly parsing this, so just strip out the\n // private ones if they exist.\n const xIndex = localeStr.indexOf(\"-x-\");\n if (xIndex !== -1) {\n localeStr = localeStr.substring(0, xIndex);\n }\n\n const uIndex = localeStr.indexOf(\"-u-\");\n if (uIndex === -1) {\n return [localeStr];\n } else {\n let options;\n let selectedStr;\n try {\n options = getCachedDTF(localeStr).resolvedOptions();\n selectedStr = localeStr;\n } catch (e) {\n const smaller = localeStr.substring(0, uIndex);\n options = getCachedDTF(smaller).resolvedOptions();\n selectedStr = smaller;\n }\n\n const { numberingSystem, calendar } = options;\n return [selectedStr, numberingSystem, calendar];\n }\n}\n\nfunction intlConfigString(localeStr, numberingSystem, outputCalendar) {\n if (outputCalendar || numberingSystem) {\n if (!localeStr.includes(\"-u-\")) {\n localeStr += \"-u\";\n }\n\n if (outputCalendar) {\n localeStr += `-ca-${outputCalendar}`;\n }\n\n if (numberingSystem) {\n localeStr += `-nu-${numberingSystem}`;\n }\n return localeStr;\n } else {\n return localeStr;\n }\n}\n\nfunction mapMonths(f) {\n const ms = [];\n for (let i = 1; i <= 12; i++) {\n const dt = DateTime.utc(2009, i, 1);\n ms.push(f(dt));\n }\n return ms;\n}\n\nfunction mapWeekdays(f) {\n const ms = [];\n for (let i = 1; i <= 7; i++) {\n const dt = DateTime.utc(2016, 11, 13 + i);\n ms.push(f(dt));\n }\n return ms;\n}\n\nfunction listStuff(loc, length, englishFn, intlFn) {\n const mode = loc.listingMode();\n\n if (mode === \"error\") {\n return null;\n } else if (mode === \"en\") {\n return englishFn(length);\n } else {\n return intlFn(length);\n }\n}\n\nfunction supportsFastNumbers(loc) {\n if (loc.numberingSystem && loc.numberingSystem !== \"latn\") {\n return false;\n } else {\n return (\n loc.numberingSystem === \"latn\" ||\n !loc.locale ||\n loc.locale.startsWith(\"en\") ||\n new Intl.DateTimeFormat(loc.intl).resolvedOptions().numberingSystem === \"latn\"\n );\n }\n}\n\n/**\n * @private\n */\n\nclass PolyNumberFormatter {\n constructor(intl, forceSimple, opts) {\n this.padTo = opts.padTo || 0;\n this.floor = opts.floor || false;\n\n const { padTo, floor, ...otherOpts } = opts;\n\n if (!forceSimple || Object.keys(otherOpts).length > 0) {\n const intlOpts = { useGrouping: false, ...opts };\n if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo;\n this.inf = getCachedINF(intl, intlOpts);\n }\n }\n\n format(i) {\n if (this.inf) {\n const fixed = this.floor ? Math.floor(i) : i;\n return this.inf.format(fixed);\n } else {\n // to match the browser's numberformatter defaults\n const fixed = this.floor ? Math.floor(i) : roundTo(i, 3);\n return padStart(fixed, this.padTo);\n }\n }\n}\n\n/**\n * @private\n */\n\nclass PolyDateFormatter {\n constructor(dt, intl, opts) {\n this.opts = opts;\n this.originalZone = undefined;\n\n let z = undefined;\n if (this.opts.timeZone) {\n // Don't apply any workarounds if a timeZone is explicitly provided in opts\n this.dt = dt;\n } else if (dt.zone.type === \"fixed\") {\n // UTC-8 or Etc/UTC-8 are not part of tzdata, only Etc/GMT+8 and the like.\n // That is why fixed-offset TZ is set to that unless it is:\n // 1. Representing offset 0 when UTC is used to maintain previous behavior and does not become GMT.\n // 2. Unsupported by the browser:\n // - some do not support Etc/\n // - < Etc/GMT-14, > Etc/GMT+12, and 30-minute or 45-minute offsets are not part of tzdata\n const gmtOffset = -1 * (dt.offset / 60);\n const offsetZ = gmtOffset >= 0 ? `Etc/GMT+${gmtOffset}` : `Etc/GMT${gmtOffset}`;\n if (dt.offset !== 0 && IANAZone.create(offsetZ).valid) {\n z = offsetZ;\n this.dt = dt;\n } else {\n // Not all fixed-offset zones like Etc/+4:30 are present in tzdata so\n // we manually apply the offset and substitute the zone as needed.\n z = \"UTC\";\n this.dt = dt.offset === 0 ? dt : dt.setZone(\"UTC\").plus({ minutes: dt.offset });\n this.originalZone = dt.zone;\n }\n } else if (dt.zone.type === \"system\") {\n this.dt = dt;\n } else if (dt.zone.type === \"iana\") {\n this.dt = dt;\n z = dt.zone.name;\n } else {\n // Custom zones can have any offset / offsetName so we just manually\n // apply the offset and substitute the zone as needed.\n z = \"UTC\";\n this.dt = dt.setZone(\"UTC\").plus({ minutes: dt.offset });\n this.originalZone = dt.zone;\n }\n\n const intlOpts = { ...this.opts };\n intlOpts.timeZone = intlOpts.timeZone || z;\n this.dtf = getCachedDTF(intl, intlOpts);\n }\n\n format() {\n if (this.originalZone) {\n // If we have to substitute in the actual zone name, we have to use\n // formatToParts so that the timezone can be replaced.\n return this.formatToParts()\n .map(({ value }) => value)\n .join(\"\");\n }\n return this.dtf.format(this.dt.toJSDate());\n }\n\n formatToParts() {\n const parts = this.dtf.formatToParts(this.dt.toJSDate());\n if (this.originalZone) {\n return parts.map((part) => {\n if (part.type === \"timeZoneName\") {\n const offsetName = this.originalZone.offsetName(this.dt.ts, {\n locale: this.dt.locale,\n format: this.opts.timeZoneName,\n });\n return {\n ...part,\n value: offsetName,\n };\n } else {\n return part;\n }\n });\n }\n return parts;\n }\n\n resolvedOptions() {\n return this.dtf.resolvedOptions();\n }\n}\n\n/**\n * @private\n */\nclass PolyRelFormatter {\n constructor(intl, isEnglish, opts) {\n this.opts = { style: \"long\", ...opts };\n if (!isEnglish && hasRelative()) {\n this.rtf = getCachedRTF(intl, opts);\n }\n }\n\n format(count, unit) {\n if (this.rtf) {\n return this.rtf.format(count, unit);\n } else {\n return English.formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== \"long\");\n }\n }\n\n formatToParts(count, unit) {\n if (this.rtf) {\n return this.rtf.formatToParts(count, unit);\n } else {\n return [];\n }\n }\n}\n\nconst fallbackWeekSettings = {\n firstDay: 1,\n minimalDays: 4,\n weekend: [6, 7],\n};\n\n/**\n * @private\n */\n\nexport default class Locale {\n static fromOpts(opts) {\n return Locale.create(\n opts.locale,\n opts.numberingSystem,\n opts.outputCalendar,\n opts.weekSettings,\n opts.defaultToEN\n );\n }\n\n static create(locale, numberingSystem, outputCalendar, weekSettings, defaultToEN = false) {\n const specifiedLocale = locale || Settings.defaultLocale;\n // the system locale is useful for human readable strings but annoying for parsing/formatting known formats\n const localeR = specifiedLocale || (defaultToEN ? \"en-US\" : systemLocale());\n const numberingSystemR = numberingSystem || Settings.defaultNumberingSystem;\n const outputCalendarR = outputCalendar || Settings.defaultOutputCalendar;\n const weekSettingsR = validateWeekSettings(weekSettings) || Settings.defaultWeekSettings;\n return new Locale(localeR, numberingSystemR, outputCalendarR, weekSettingsR, specifiedLocale);\n }\n\n static resetCache() {\n sysLocaleCache = null;\n intlDTCache = {};\n intlNumCache = {};\n intlRelCache = {};\n }\n\n static fromObject({ locale, numberingSystem, outputCalendar, weekSettings } = {}) {\n return Locale.create(locale, numberingSystem, outputCalendar, weekSettings);\n }\n\n constructor(locale, numbering, outputCalendar, weekSettings, specifiedLocale) {\n const [parsedLocale, parsedNumberingSystem, parsedOutputCalendar] = parseLocaleString(locale);\n\n this.locale = parsedLocale;\n this.numberingSystem = numbering || parsedNumberingSystem || null;\n this.outputCalendar = outputCalendar || parsedOutputCalendar || null;\n this.weekSettings = weekSettings;\n this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar);\n\n this.weekdaysCache = { format: {}, standalone: {} };\n this.monthsCache = { format: {}, standalone: {} };\n this.meridiemCache = null;\n this.eraCache = {};\n\n this.specifiedLocale = specifiedLocale;\n this.fastNumbersCached = null;\n }\n\n get fastNumbers() {\n if (this.fastNumbersCached == null) {\n this.fastNumbersCached = supportsFastNumbers(this);\n }\n\n return this.fastNumbersCached;\n }\n\n listingMode() {\n const isActuallyEn = this.isEnglish();\n const hasNoWeirdness =\n (this.numberingSystem === null || this.numberingSystem === \"latn\") &&\n (this.outputCalendar === null || this.outputCalendar === \"gregory\");\n return isActuallyEn && hasNoWeirdness ? \"en\" : \"intl\";\n }\n\n clone(alts) {\n if (!alts || Object.getOwnPropertyNames(alts).length === 0) {\n return this;\n } else {\n return Locale.create(\n alts.locale || this.specifiedLocale,\n alts.numberingSystem || this.numberingSystem,\n alts.outputCalendar || this.outputCalendar,\n validateWeekSettings(alts.weekSettings) || this.weekSettings,\n alts.defaultToEN || false\n );\n }\n }\n\n redefaultToEN(alts = {}) {\n return this.clone({ ...alts, defaultToEN: true });\n }\n\n redefaultToSystem(alts = {}) {\n return this.clone({ ...alts, defaultToEN: false });\n }\n\n months(length, format = false) {\n return listStuff(this, length, English.months, () => {\n const intl = format ? { month: length, day: \"numeric\" } : { month: length },\n formatStr = format ? \"format\" : \"standalone\";\n if (!this.monthsCache[formatStr][length]) {\n this.monthsCache[formatStr][length] = mapMonths((dt) => this.extract(dt, intl, \"month\"));\n }\n return this.monthsCache[formatStr][length];\n });\n }\n\n weekdays(length, format = false) {\n return listStuff(this, length, English.weekdays, () => {\n const intl = format\n ? { weekday: length, year: \"numeric\", month: \"long\", day: \"numeric\" }\n : { weekday: length },\n formatStr = format ? \"format\" : \"standalone\";\n if (!this.weekdaysCache[formatStr][length]) {\n this.weekdaysCache[formatStr][length] = mapWeekdays((dt) =>\n this.extract(dt, intl, \"weekday\")\n );\n }\n return this.weekdaysCache[formatStr][length];\n });\n }\n\n meridiems() {\n return listStuff(\n this,\n undefined,\n () => English.meridiems,\n () => {\n // In theory there could be aribitrary day periods. We're gonna assume there are exactly two\n // for AM and PM. This is probably wrong, but it's makes parsing way easier.\n if (!this.meridiemCache) {\n const intl = { hour: \"numeric\", hourCycle: \"h12\" };\n this.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map(\n (dt) => this.extract(dt, intl, \"dayperiod\")\n );\n }\n\n return this.meridiemCache;\n }\n );\n }\n\n eras(length) {\n return listStuff(this, length, English.eras, () => {\n const intl = { era: length };\n\n // This is problematic. Different calendars are going to define eras totally differently. What I need is the minimum set of dates\n // to definitely enumerate them.\n if (!this.eraCache[length]) {\n this.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map((dt) =>\n this.extract(dt, intl, \"era\")\n );\n }\n\n return this.eraCache[length];\n });\n }\n\n extract(dt, intlOpts, field) {\n const df = this.dtFormatter(dt, intlOpts),\n results = df.formatToParts(),\n matching = results.find((m) => m.type.toLowerCase() === field);\n return matching ? matching.value : null;\n }\n\n numberFormatter(opts = {}) {\n // this forcesimple option is never used (the only caller short-circuits on it, but it seems safer to leave)\n // (in contrast, the rest of the condition is used heavily)\n return new PolyNumberFormatter(this.intl, opts.forceSimple || this.fastNumbers, opts);\n }\n\n dtFormatter(dt, intlOpts = {}) {\n return new PolyDateFormatter(dt, this.intl, intlOpts);\n }\n\n relFormatter(opts = {}) {\n return new PolyRelFormatter(this.intl, this.isEnglish(), opts);\n }\n\n listFormatter(opts = {}) {\n return getCachedLF(this.intl, opts);\n }\n\n isEnglish() {\n return (\n this.locale === \"en\" ||\n this.locale.toLowerCase() === \"en-us\" ||\n new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith(\"en-us\")\n );\n }\n\n getWeekSettings() {\n if (this.weekSettings) {\n return this.weekSettings;\n } else if (!hasLocaleWeekInfo()) {\n return fallbackWeekSettings;\n } else {\n return getCachedWeekInfo(this.locale);\n }\n }\n\n getStartOfWeek() {\n return this.getWeekSettings().firstDay;\n }\n\n getMinDaysInFirstWeek() {\n return this.getWeekSettings().minimalDays;\n }\n\n getWeekendDays() {\n return this.getWeekSettings().weekend;\n }\n\n equals(other) {\n return (\n this.locale === other.locale &&\n this.numberingSystem === other.numberingSystem &&\n this.outputCalendar === other.outputCalendar\n );\n }\n}\n","import * as Formats from \"./formats.js\";\nimport { pick } from \"./util.js\";\n\nfunction stringify(obj) {\n return JSON.stringify(obj, Object.keys(obj).sort());\n}\n\n/**\n * @private\n */\n\nexport const monthsLong = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n];\n\nexport const monthsShort = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n];\n\nexport const monthsNarrow = [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"];\n\nexport function months(length) {\n switch (length) {\n case \"narrow\":\n return [...monthsNarrow];\n case \"short\":\n return [...monthsShort];\n case \"long\":\n return [...monthsLong];\n case \"numeric\":\n return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"];\n case \"2-digit\":\n return [\"01\", \"02\", \"03\", \"04\", \"05\", \"06\", \"07\", \"08\", \"09\", \"10\", \"11\", \"12\"];\n default:\n return null;\n }\n}\n\nexport const weekdaysLong = [\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n \"Sunday\",\n];\n\nexport const weekdaysShort = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"];\n\nexport const weekdaysNarrow = [\"M\", \"T\", \"W\", \"T\", \"F\", \"S\", \"S\"];\n\nexport function weekdays(length) {\n switch (length) {\n case \"narrow\":\n return [...weekdaysNarrow];\n case \"short\":\n return [...weekdaysShort];\n case \"long\":\n return [...weekdaysLong];\n case \"numeric\":\n return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\"];\n default:\n return null;\n }\n}\n\nexport const meridiems = [\"AM\", \"PM\"];\n\nexport const erasLong = [\"Before Christ\", \"Anno Domini\"];\n\nexport const erasShort = [\"BC\", \"AD\"];\n\nexport const erasNarrow = [\"B\", \"A\"];\n\nexport function eras(length) {\n switch (length) {\n case \"narrow\":\n return [...erasNarrow];\n case \"short\":\n return [...erasShort];\n case \"long\":\n return [...erasLong];\n default:\n return null;\n }\n}\n\nexport function meridiemForDateTime(dt) {\n return meridiems[dt.hour < 12 ? 0 : 1];\n}\n\nexport function weekdayForDateTime(dt, length) {\n return weekdays(length)[dt.weekday - 1];\n}\n\nexport function monthForDateTime(dt, length) {\n return months(length)[dt.month - 1];\n}\n\nexport function eraForDateTime(dt, length) {\n return eras(length)[dt.year < 0 ? 0 : 1];\n}\n\nexport function formatRelativeTime(unit, count, numeric = \"always\", narrow = false) {\n const units = {\n years: [\"year\", \"yr.\"],\n quarters: [\"quarter\", \"qtr.\"],\n months: [\"month\", \"mo.\"],\n weeks: [\"week\", \"wk.\"],\n days: [\"day\", \"day\", \"days\"],\n hours: [\"hour\", \"hr.\"],\n minutes: [\"minute\", \"min.\"],\n seconds: [\"second\", \"sec.\"],\n };\n\n const lastable = [\"hours\", \"minutes\", \"seconds\"].indexOf(unit) === -1;\n\n if (numeric === \"auto\" && lastable) {\n const isDay = unit === \"days\";\n switch (count) {\n case 1:\n return isDay ? \"tomorrow\" : `next ${units[unit][0]}`;\n case -1:\n return isDay ? \"yesterday\" : `last ${units[unit][0]}`;\n case 0:\n return isDay ? \"today\" : `this ${units[unit][0]}`;\n default: // fall through\n }\n }\n\n const isInPast = Object.is(count, -0) || count < 0,\n fmtValue = Math.abs(count),\n singular = fmtValue === 1,\n lilUnits = units[unit],\n fmtUnit = narrow\n ? singular\n ? lilUnits[1]\n : lilUnits[2] || lilUnits[1]\n : singular\n ? units[unit][0]\n : unit;\n return isInPast ? `${fmtValue} ${fmtUnit} ago` : `in ${fmtValue} ${fmtUnit}`;\n}\n\nexport function formatString(knownFormat) {\n // these all have the offsets removed because we don't have access to them\n // without all the intl stuff this is backfilling\n const filtered = pick(knownFormat, [\n \"weekday\",\n \"era\",\n \"year\",\n \"month\",\n \"day\",\n \"hour\",\n \"minute\",\n \"second\",\n \"timeZoneName\",\n \"hourCycle\",\n ]),\n key = stringify(filtered),\n dateTimeHuge = \"EEEE, LLLL d, yyyy, h:mm a\";\n switch (key) {\n case stringify(Formats.DATE_SHORT):\n return \"M/d/yyyy\";\n case stringify(Formats.DATE_MED):\n return \"LLL d, yyyy\";\n case stringify(Formats.DATE_MED_WITH_WEEKDAY):\n return \"EEE, LLL d, yyyy\";\n case stringify(Formats.DATE_FULL):\n return \"LLLL d, yyyy\";\n case stringify(Formats.DATE_HUGE):\n return \"EEEE, LLLL d, yyyy\";\n case stringify(Formats.TIME_SIMPLE):\n return \"h:mm a\";\n case stringify(Formats.TIME_WITH_SECONDS):\n return \"h:mm:ss a\";\n case stringify(Formats.TIME_WITH_SHORT_OFFSET):\n return \"h:mm a\";\n case stringify(Formats.TIME_WITH_LONG_OFFSET):\n return \"h:mm a\";\n case stringify(Formats.TIME_24_SIMPLE):\n return \"HH:mm\";\n case stringify(Formats.TIME_24_WITH_SECONDS):\n return \"HH:mm:ss\";\n case stringify(Formats.TIME_24_WITH_SHORT_OFFSET):\n return \"HH:mm\";\n case stringify(Formats.TIME_24_WITH_LONG_OFFSET):\n return \"HH:mm\";\n case stringify(Formats.DATETIME_SHORT):\n return \"M/d/yyyy, h:mm a\";\n case stringify(Formats.DATETIME_MED):\n return \"LLL d, yyyy, h:mm a\";\n case stringify(Formats.DATETIME_FULL):\n return \"LLLL d, yyyy, h:mm a\";\n case stringify(Formats.DATETIME_HUGE):\n return dateTimeHuge;\n case stringify(Formats.DATETIME_SHORT_WITH_SECONDS):\n return \"M/d/yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_MED_WITH_SECONDS):\n return \"LLL d, yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_MED_WITH_WEEKDAY):\n return \"EEE, d LLL yyyy, h:mm a\";\n case stringify(Formats.DATETIME_FULL_WITH_SECONDS):\n return \"LLLL d, yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_HUGE_WITH_SECONDS):\n return \"EEEE, LLLL d, yyyy, h:mm:ss a\";\n default:\n return dateTimeHuge;\n }\n}\n","import { formatOffset, signedOffset } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * A zone with a fixed offset (meaning no DST)\n * @implements {Zone}\n */\nexport default class FixedOffsetZone extends Zone {\n /**\n * Get a singleton instance of UTC\n * @return {FixedOffsetZone}\n */\n static get utcInstance() {\n if (singleton === null) {\n singleton = new FixedOffsetZone(0);\n }\n return singleton;\n }\n\n /**\n * Get an instance with a specified offset\n * @param {number} offset - The offset in minutes\n * @return {FixedOffsetZone}\n */\n static instance(offset) {\n return offset === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset);\n }\n\n /**\n * Get an instance of FixedOffsetZone from a UTC offset string, like \"UTC+6\"\n * @param {string} s - The offset string to parse\n * @example FixedOffsetZone.parseSpecifier(\"UTC+6\")\n * @example FixedOffsetZone.parseSpecifier(\"UTC+06\")\n * @example FixedOffsetZone.parseSpecifier(\"UTC-6:00\")\n * @return {FixedOffsetZone}\n */\n static parseSpecifier(s) {\n if (s) {\n const r = s.match(/^utc(?:([+-]\\d{1,2})(?::(\\d{2}))?)?$/i);\n if (r) {\n return new FixedOffsetZone(signedOffset(r[1], r[2]));\n }\n }\n return null;\n }\n\n constructor(offset) {\n super();\n /** @private **/\n this.fixed = offset;\n }\n\n /** @override **/\n get type() {\n return \"fixed\";\n }\n\n /** @override **/\n get name() {\n return this.fixed === 0 ? \"UTC\" : `UTC${formatOffset(this.fixed, \"narrow\")}`;\n }\n\n get ianaName() {\n if (this.fixed === 0) {\n return \"Etc/UTC\";\n } else {\n return `Etc/GMT${formatOffset(-this.fixed, \"narrow\")}`;\n }\n }\n\n /** @override **/\n offsetName() {\n return this.name;\n }\n\n /** @override **/\n formatOffset(ts, format) {\n return formatOffset(this.fixed, format);\n }\n\n /** @override **/\n get isUniversal() {\n return true;\n }\n\n /** @override **/\n offset() {\n return this.fixed;\n }\n\n /** @override **/\n equals(otherZone) {\n return otherZone.type === \"fixed\" && otherZone.fixed === this.fixed;\n }\n\n /** @override **/\n get isValid() {\n return true;\n }\n}\n","import Zone from \"../zone.js\";\n\n/**\n * A zone that failed to parse. You should never need to instantiate this.\n * @implements {Zone}\n */\nexport default class InvalidZone extends Zone {\n constructor(zoneName) {\n super();\n /** @private */\n this.zoneName = zoneName;\n }\n\n /** @override **/\n get type() {\n return \"invalid\";\n }\n\n /** @override **/\n get name() {\n return this.zoneName;\n }\n\n /** @override **/\n get isUniversal() {\n return false;\n }\n\n /** @override **/\n offsetName() {\n return null;\n }\n\n /** @override **/\n formatOffset() {\n return \"\";\n }\n\n /** @override **/\n offset() {\n return NaN;\n }\n\n /** @override **/\n equals() {\n return false;\n }\n\n /** @override **/\n get isValid() {\n return false;\n }\n}\n","/**\n * @private\n */\n\nimport Zone from \"../zone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport InvalidZone from \"../zones/invalidZone.js\";\n\nimport { isUndefined, isString, isNumber } from \"./util.js\";\nimport SystemZone from \"../zones/systemZone.js\";\n\nexport function normalizeZone(input, defaultZone) {\n let offset;\n if (isUndefined(input) || input === null) {\n return defaultZone;\n } else if (input instanceof Zone) {\n return input;\n } else if (isString(input)) {\n const lowered = input.toLowerCase();\n if (lowered === \"default\") return defaultZone;\n else if (lowered === \"local\" || lowered === \"system\") return SystemZone.instance;\n else if (lowered === \"utc\" || lowered === \"gmt\") return FixedOffsetZone.utcInstance;\n else return FixedOffsetZone.parseSpecifier(lowered) || IANAZone.create(input);\n } else if (isNumber(input)) {\n return FixedOffsetZone.instance(input);\n } else if (typeof input === \"object\" && \"offset\" in input && typeof input.offset === \"function\") {\n // This is dumb, but the instanceof check above doesn't seem to really work\n // so we're duck checking it\n return input;\n } else {\n return new InvalidZone(input);\n }\n}\n","/*\n This is just a junk drawer, containing anything used across multiple classes.\n Because Luxon is small(ish), this should stay small and we won't worry about splitting\n it up into, say, parsingUtil.js and basicUtil.js and so on. But they are divided up by feature area.\n*/\n\nimport { InvalidArgumentError } from \"../errors.js\";\nimport Settings from \"../settings.js\";\nimport { dayOfWeek, isoWeekdayToLocal } from \"./conversions.js\";\n\n/**\n * @private\n */\n\n// TYPES\n\nexport function isUndefined(o) {\n return typeof o === \"undefined\";\n}\n\nexport function isNumber(o) {\n return typeof o === \"number\";\n}\n\nexport function isInteger(o) {\n return typeof o === \"number\" && o % 1 === 0;\n}\n\nexport function isString(o) {\n return typeof o === \"string\";\n}\n\nexport function isDate(o) {\n return Object.prototype.toString.call(o) === \"[object Date]\";\n}\n\n// CAPABILITIES\n\nexport function hasRelative() {\n try {\n return typeof Intl !== \"undefined\" && !!Intl.RelativeTimeFormat;\n } catch (e) {\n return false;\n }\n}\n\nexport function hasLocaleWeekInfo() {\n try {\n return (\n typeof Intl !== \"undefined\" &&\n !!Intl.Locale &&\n (\"weekInfo\" in Intl.Locale.prototype || \"getWeekInfo\" in Intl.Locale.prototype)\n );\n } catch (e) {\n return false;\n }\n}\n\n// OBJECTS AND ARRAYS\n\nexport function maybeArray(thing) {\n return Array.isArray(thing) ? thing : [thing];\n}\n\nexport function bestBy(arr, by, compare) {\n if (arr.length === 0) {\n return undefined;\n }\n return arr.reduce((best, next) => {\n const pair = [by(next), next];\n if (!best) {\n return pair;\n } else if (compare(best[0], pair[0]) === best[0]) {\n return best;\n } else {\n return pair;\n }\n }, null)[1];\n}\n\nexport function pick(obj, keys) {\n return keys.reduce((a, k) => {\n a[k] = obj[k];\n return a;\n }, {});\n}\n\nexport function hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nexport function validateWeekSettings(settings) {\n if (settings == null) {\n return null;\n } else if (typeof settings !== \"object\") {\n throw new InvalidArgumentError(\"Week settings must be an object\");\n } else {\n if (\n !integerBetween(settings.firstDay, 1, 7) ||\n !integerBetween(settings.minimalDays, 1, 7) ||\n !Array.isArray(settings.weekend) ||\n settings.weekend.some((v) => !integerBetween(v, 1, 7))\n ) {\n throw new InvalidArgumentError(\"Invalid week settings\");\n }\n return {\n firstDay: settings.firstDay,\n minimalDays: settings.minimalDays,\n weekend: Array.from(settings.weekend),\n };\n }\n}\n\n// NUMBERS AND STRINGS\n\nexport function integerBetween(thing, bottom, top) {\n return isInteger(thing) && thing >= bottom && thing <= top;\n}\n\n// x % n but takes the sign of n instead of x\nexport function floorMod(x, n) {\n return x - n * Math.floor(x / n);\n}\n\nexport function padStart(input, n = 2) {\n const isNeg = input < 0;\n let padded;\n if (isNeg) {\n padded = \"-\" + (\"\" + -input).padStart(n, \"0\");\n } else {\n padded = (\"\" + input).padStart(n, \"0\");\n }\n return padded;\n}\n\nexport function parseInteger(string) {\n if (isUndefined(string) || string === null || string === \"\") {\n return undefined;\n } else {\n return parseInt(string, 10);\n }\n}\n\nexport function parseFloating(string) {\n if (isUndefined(string) || string === null || string === \"\") {\n return undefined;\n } else {\n return parseFloat(string);\n }\n}\n\nexport function parseMillis(fraction) {\n // Return undefined (instead of 0) in these cases, where fraction is not set\n if (isUndefined(fraction) || fraction === null || fraction === \"\") {\n return undefined;\n } else {\n const f = parseFloat(\"0.\" + fraction) * 1000;\n return Math.floor(f);\n }\n}\n\nexport function roundTo(number, digits, towardZero = false) {\n const factor = 10 ** digits,\n rounder = towardZero ? Math.trunc : Math.round;\n return rounder(number * factor) / factor;\n}\n\n// DATE BASICS\n\nexport function isLeapYear(year) {\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\nexport function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n}\n\nexport function daysInMonth(year, month) {\n const modMonth = floorMod(month - 1, 12) + 1,\n modYear = year + (month - modMonth) / 12;\n\n if (modMonth === 2) {\n return isLeapYear(modYear) ? 29 : 28;\n } else {\n return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1];\n }\n}\n\n// convert a calendar object to a local timestamp (epoch, but with the offset baked in)\nexport function objToLocalTS(obj) {\n let d = Date.UTC(\n obj.year,\n obj.month - 1,\n obj.day,\n obj.hour,\n obj.minute,\n obj.second,\n obj.millisecond\n );\n\n // for legacy reasons, years between 0 and 99 are interpreted as 19XX; revert that\n if (obj.year < 100 && obj.year >= 0) {\n d = new Date(d);\n // set the month and day again, this is necessary because year 2000 is a leap year, but year 100 is not\n // so if obj.year is in 99, but obj.day makes it roll over into year 100,\n // the calculations done by Date.UTC are using year 2000 - which is incorrect\n d.setUTCFullYear(obj.year, obj.month - 1, obj.day);\n }\n return +d;\n}\n\n// adapted from moment.js: https://github.com/moment/moment/blob/000ac1800e620f770f4eb31b5ae908f6167b0ab2/src/lib/units/week-calendar-utils.js\nfunction firstWeekOffset(year, minDaysInFirstWeek, startOfWeek) {\n const fwdlw = isoWeekdayToLocal(dayOfWeek(year, 1, minDaysInFirstWeek), startOfWeek);\n return -fwdlw + minDaysInFirstWeek - 1;\n}\n\nexport function weeksInWeekYear(weekYear, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const weekOffset = firstWeekOffset(weekYear, minDaysInFirstWeek, startOfWeek);\n const weekOffsetNext = firstWeekOffset(weekYear + 1, minDaysInFirstWeek, startOfWeek);\n return (daysInYear(weekYear) - weekOffset + weekOffsetNext) / 7;\n}\n\nexport function untruncateYear(year) {\n if (year > 99) {\n return year;\n } else return year > Settings.twoDigitCutoffYear ? 1900 + year : 2000 + year;\n}\n\n// PARSING\n\nexport function parseZoneInfo(ts, offsetFormat, locale, timeZone = null) {\n const date = new Date(ts),\n intlOpts = {\n hourCycle: \"h23\",\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n };\n\n if (timeZone) {\n intlOpts.timeZone = timeZone;\n }\n\n const modified = { timeZoneName: offsetFormat, ...intlOpts };\n\n const parsed = new Intl.DateTimeFormat(locale, modified)\n .formatToParts(date)\n .find((m) => m.type.toLowerCase() === \"timezonename\");\n return parsed ? parsed.value : null;\n}\n\n// signedOffset('-5', '30') -> -330\nexport function signedOffset(offHourStr, offMinuteStr) {\n let offHour = parseInt(offHourStr, 10);\n\n // don't || this because we want to preserve -0\n if (Number.isNaN(offHour)) {\n offHour = 0;\n }\n\n const offMin = parseInt(offMinuteStr, 10) || 0,\n offMinSigned = offHour < 0 || Object.is(offHour, -0) ? -offMin : offMin;\n return offHour * 60 + offMinSigned;\n}\n\n// COERCION\n\nexport function asNumber(value) {\n const numericValue = Number(value);\n if (typeof value === \"boolean\" || value === \"\" || Number.isNaN(numericValue))\n throw new InvalidArgumentError(`Invalid unit value ${value}`);\n return numericValue;\n}\n\nexport function normalizeObject(obj, normalizer) {\n const normalized = {};\n for (const u in obj) {\n if (hasOwnProperty(obj, u)) {\n const v = obj[u];\n if (v === undefined || v === null) continue;\n normalized[normalizer(u)] = asNumber(v);\n }\n }\n return normalized;\n}\n\nexport function formatOffset(offset, format) {\n const hours = Math.trunc(Math.abs(offset / 60)),\n minutes = Math.trunc(Math.abs(offset % 60)),\n sign = offset >= 0 ? \"+\" : \"-\";\n\n switch (format) {\n case \"short\":\n return `${sign}${padStart(hours, 2)}:${padStart(minutes, 2)}`;\n case \"narrow\":\n return `${sign}${hours}${minutes > 0 ? `:${minutes}` : \"\"}`;\n case \"techie\":\n return `${sign}${padStart(hours, 2)}${padStart(minutes, 2)}`;\n default:\n throw new RangeError(`Value format ${format} is out of range for property format`);\n }\n}\n\nexport function timeObject(obj) {\n return pick(obj, [\"hour\", \"minute\", \"second\", \"millisecond\"]);\n}\n","import SystemZone from \"./zones/systemZone.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport Locale from \"./impl/locale.js\";\n\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\nimport { validateWeekSettings } from \"./impl/util.js\";\n\nlet now = () => Date.now(),\n defaultZone = \"system\",\n defaultLocale = null,\n defaultNumberingSystem = null,\n defaultOutputCalendar = null,\n twoDigitCutoffYear = 60,\n throwOnInvalid,\n defaultWeekSettings = null;\n\n/**\n * Settings contains static getters and setters that control Luxon's overall behavior. Luxon is a simple library with few options, but the ones it does have live here.\n */\nexport default class Settings {\n /**\n * Get the callback for returning the current timestamp.\n * @type {function}\n */\n static get now() {\n return now;\n }\n\n /**\n * Set the callback for returning the current timestamp.\n * The function should return a number, which will be interpreted as an Epoch millisecond count\n * @type {function}\n * @example Settings.now = () => Date.now() + 3000 // pretend it is 3 seconds in the future\n * @example Settings.now = () => 0 // always pretend it's Jan 1, 1970 at midnight in UTC time\n */\n static set now(n) {\n now = n;\n }\n\n /**\n * Set the default time zone to create DateTimes in. Does not affect existing instances.\n * Use the value \"system\" to reset this value to the system's time zone.\n * @type {string}\n */\n static set defaultZone(zone) {\n defaultZone = zone;\n }\n\n /**\n * Get the default time zone object currently used to create DateTimes. Does not affect existing instances.\n * The default value is the system's time zone (the one set on the machine that runs this code).\n * @type {Zone}\n */\n static get defaultZone() {\n return normalizeZone(defaultZone, SystemZone.instance);\n }\n\n /**\n * Get the default locale to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultLocale() {\n return defaultLocale;\n }\n\n /**\n * Set the default locale to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultLocale(locale) {\n defaultLocale = locale;\n }\n\n /**\n * Get the default numbering system to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultNumberingSystem() {\n return defaultNumberingSystem;\n }\n\n /**\n * Set the default numbering system to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultNumberingSystem(numberingSystem) {\n defaultNumberingSystem = numberingSystem;\n }\n\n /**\n * Get the default output calendar to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultOutputCalendar() {\n return defaultOutputCalendar;\n }\n\n /**\n * Set the default output calendar to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultOutputCalendar(outputCalendar) {\n defaultOutputCalendar = outputCalendar;\n }\n\n /**\n * @typedef {Object} WeekSettings\n * @property {number} firstDay\n * @property {number} minimalDays\n * @property {number[]} weekend\n */\n\n /**\n * @return {WeekSettings|null}\n */\n static get defaultWeekSettings() {\n return defaultWeekSettings;\n }\n\n /**\n * Allows overriding the default locale week settings, i.e. the start of the week, the weekend and\n * how many days are required in the first week of a year.\n * Does not affect existing instances.\n *\n * @param {WeekSettings|null} weekSettings\n */\n static set defaultWeekSettings(weekSettings) {\n defaultWeekSettings = validateWeekSettings(weekSettings);\n }\n\n /**\n * Get the cutoff year after which a string encoding a year as two digits is interpreted to occur in the current century.\n * @type {number}\n */\n static get twoDigitCutoffYear() {\n return twoDigitCutoffYear;\n }\n\n /**\n * Set the cutoff year after which a string encoding a year as two digits is interpreted to occur in the current century.\n * @type {number}\n * @example Settings.twoDigitCutoffYear = 0 // cut-off year is 0, so all 'yy' are interpreted as current century\n * @example Settings.twoDigitCutoffYear = 50 // '49' -> 1949; '50' -> 2050\n * @example Settings.twoDigitCutoffYear = 1950 // interpreted as 50\n * @example Settings.twoDigitCutoffYear = 2050 // ALSO interpreted as 50\n */\n static set twoDigitCutoffYear(cutoffYear) {\n twoDigitCutoffYear = cutoffYear % 100;\n }\n\n /**\n * Get whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n * @type {boolean}\n */\n static get throwOnInvalid() {\n return throwOnInvalid;\n }\n\n /**\n * Set whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n * @type {boolean}\n */\n static set throwOnInvalid(t) {\n throwOnInvalid = t;\n }\n\n /**\n * Reset Luxon's global caches. Should only be necessary in testing scenarios.\n * @return {void}\n */\n static resetCaches() {\n Locale.resetCache();\n IANAZone.resetCache();\n }\n}\n","export default class Invalid {\n constructor(reason, explanation) {\n this.reason = reason;\n this.explanation = explanation;\n }\n\n toMessage() {\n if (this.explanation) {\n return `${this.reason}: ${this.explanation}`;\n } else {\n return this.reason;\n }\n }\n}\n","import {\n integerBetween,\n isLeapYear,\n timeObject,\n daysInYear,\n daysInMonth,\n weeksInWeekYear,\n isInteger,\n isUndefined,\n} from \"./util.js\";\nimport Invalid from \"./invalid.js\";\nimport { ConflictingSpecificationError } from \"../errors.js\";\n\nconst nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],\n leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];\n\nfunction unitOutOfRange(unit, value) {\n return new Invalid(\n \"unit out of range\",\n `you specified ${value} (of type ${typeof value}) as a ${unit}, which is invalid`\n );\n}\n\nexport function dayOfWeek(year, month, day) {\n const d = new Date(Date.UTC(year, month - 1, day));\n\n if (year < 100 && year >= 0) {\n d.setUTCFullYear(d.getUTCFullYear() - 1900);\n }\n\n const js = d.getUTCDay();\n\n return js === 0 ? 7 : js;\n}\n\nfunction computeOrdinal(year, month, day) {\n return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1];\n}\n\nfunction uncomputeOrdinal(year, ordinal) {\n const table = isLeapYear(year) ? leapLadder : nonLeapLadder,\n month0 = table.findIndex((i) => i < ordinal),\n day = ordinal - table[month0];\n return { month: month0 + 1, day };\n}\n\nexport function isoWeekdayToLocal(isoWeekday, startOfWeek) {\n return ((isoWeekday - startOfWeek + 7) % 7) + 1;\n}\n\n/**\n * @private\n */\n\nexport function gregorianToWeek(gregObj, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const { year, month, day } = gregObj,\n ordinal = computeOrdinal(year, month, day),\n weekday = isoWeekdayToLocal(dayOfWeek(year, month, day), startOfWeek);\n\n let weekNumber = Math.floor((ordinal - weekday + 14 - minDaysInFirstWeek) / 7),\n weekYear;\n\n if (weekNumber < 1) {\n weekYear = year - 1;\n weekNumber = weeksInWeekYear(weekYear, minDaysInFirstWeek, startOfWeek);\n } else if (weekNumber > weeksInWeekYear(year, minDaysInFirstWeek, startOfWeek)) {\n weekYear = year + 1;\n weekNumber = 1;\n } else {\n weekYear = year;\n }\n\n return { weekYear, weekNumber, weekday, ...timeObject(gregObj) };\n}\n\nexport function weekToGregorian(weekData, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const { weekYear, weekNumber, weekday } = weekData,\n weekdayOfJan4 = isoWeekdayToLocal(dayOfWeek(weekYear, 1, minDaysInFirstWeek), startOfWeek),\n yearInDays = daysInYear(weekYear);\n\n let ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 7 + minDaysInFirstWeek,\n year;\n\n if (ordinal < 1) {\n year = weekYear - 1;\n ordinal += daysInYear(year);\n } else if (ordinal > yearInDays) {\n year = weekYear + 1;\n ordinal -= daysInYear(weekYear);\n } else {\n year = weekYear;\n }\n\n const { month, day } = uncomputeOrdinal(year, ordinal);\n return { year, month, day, ...timeObject(weekData) };\n}\n\nexport function gregorianToOrdinal(gregData) {\n const { year, month, day } = gregData;\n const ordinal = computeOrdinal(year, month, day);\n return { year, ordinal, ...timeObject(gregData) };\n}\n\nexport function ordinalToGregorian(ordinalData) {\n const { year, ordinal } = ordinalData;\n const { month, day } = uncomputeOrdinal(year, ordinal);\n return { year, month, day, ...timeObject(ordinalData) };\n}\n\n/**\n * Check if local week units like localWeekday are used in obj.\n * If so, validates that they are not mixed with ISO week units and then copies them to the normal week unit properties.\n * Modifies obj in-place!\n * @param obj the object values\n */\nexport function usesLocalWeekValues(obj, loc) {\n const hasLocaleWeekData =\n !isUndefined(obj.localWeekday) ||\n !isUndefined(obj.localWeekNumber) ||\n !isUndefined(obj.localWeekYear);\n if (hasLocaleWeekData) {\n const hasIsoWeekData =\n !isUndefined(obj.weekday) || !isUndefined(obj.weekNumber) || !isUndefined(obj.weekYear);\n\n if (hasIsoWeekData) {\n throw new ConflictingSpecificationError(\n \"Cannot mix locale-based week fields with ISO-based week fields\"\n );\n }\n if (!isUndefined(obj.localWeekday)) obj.weekday = obj.localWeekday;\n if (!isUndefined(obj.localWeekNumber)) obj.weekNumber = obj.localWeekNumber;\n if (!isUndefined(obj.localWeekYear)) obj.weekYear = obj.localWeekYear;\n delete obj.localWeekday;\n delete obj.localWeekNumber;\n delete obj.localWeekYear;\n return {\n minDaysInFirstWeek: loc.getMinDaysInFirstWeek(),\n startOfWeek: loc.getStartOfWeek(),\n };\n } else {\n return { minDaysInFirstWeek: 4, startOfWeek: 1 };\n }\n}\n\nexport function hasInvalidWeekData(obj, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const validYear = isInteger(obj.weekYear),\n validWeek = integerBetween(\n obj.weekNumber,\n 1,\n weeksInWeekYear(obj.weekYear, minDaysInFirstWeek, startOfWeek)\n ),\n validWeekday = integerBetween(obj.weekday, 1, 7);\n\n if (!validYear) {\n return unitOutOfRange(\"weekYear\", obj.weekYear);\n } else if (!validWeek) {\n return unitOutOfRange(\"week\", obj.weekNumber);\n } else if (!validWeekday) {\n return unitOutOfRange(\"weekday\", obj.weekday);\n } else return false;\n}\n\nexport function hasInvalidOrdinalData(obj) {\n const validYear = isInteger(obj.year),\n validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year));\n\n if (!validYear) {\n return unitOutOfRange(\"year\", obj.year);\n } else if (!validOrdinal) {\n return unitOutOfRange(\"ordinal\", obj.ordinal);\n } else return false;\n}\n\nexport function hasInvalidGregorianData(obj) {\n const validYear = isInteger(obj.year),\n validMonth = integerBetween(obj.month, 1, 12),\n validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month));\n\n if (!validYear) {\n return unitOutOfRange(\"year\", obj.year);\n } else if (!validMonth) {\n return unitOutOfRange(\"month\", obj.month);\n } else if (!validDay) {\n return unitOutOfRange(\"day\", obj.day);\n } else return false;\n}\n\nexport function hasInvalidTimeData(obj) {\n const { hour, minute, second, millisecond } = obj;\n const validHour =\n integerBetween(hour, 0, 23) ||\n (hour === 24 && minute === 0 && second === 0 && millisecond === 0),\n validMinute = integerBetween(minute, 0, 59),\n validSecond = integerBetween(second, 0, 59),\n validMillisecond = integerBetween(millisecond, 0, 999);\n\n if (!validHour) {\n return unitOutOfRange(\"hour\", hour);\n } else if (!validMinute) {\n return unitOutOfRange(\"minute\", minute);\n } else if (!validSecond) {\n return unitOutOfRange(\"second\", second);\n } else if (!validMillisecond) {\n return unitOutOfRange(\"millisecond\", millisecond);\n } else return false;\n}\n","import * as English from \"./english.js\";\nimport * as Formats from \"./formats.js\";\nimport { padStart } from \"./util.js\";\n\nfunction stringifyTokens(splits, tokenToString) {\n let s = \"\";\n for (const token of splits) {\n if (token.literal) {\n s += token.val;\n } else {\n s += tokenToString(token.val);\n }\n }\n return s;\n}\n\nconst macroTokenToFormatOpts = {\n D: Formats.DATE_SHORT,\n DD: Formats.DATE_MED,\n DDD: Formats.DATE_FULL,\n DDDD: Formats.DATE_HUGE,\n t: Formats.TIME_SIMPLE,\n tt: Formats.TIME_WITH_SECONDS,\n ttt: Formats.TIME_WITH_SHORT_OFFSET,\n tttt: Formats.TIME_WITH_LONG_OFFSET,\n T: Formats.TIME_24_SIMPLE,\n TT: Formats.TIME_24_WITH_SECONDS,\n TTT: Formats.TIME_24_WITH_SHORT_OFFSET,\n TTTT: Formats.TIME_24_WITH_LONG_OFFSET,\n f: Formats.DATETIME_SHORT,\n ff: Formats.DATETIME_MED,\n fff: Formats.DATETIME_FULL,\n ffff: Formats.DATETIME_HUGE,\n F: Formats.DATETIME_SHORT_WITH_SECONDS,\n FF: Formats.DATETIME_MED_WITH_SECONDS,\n FFF: Formats.DATETIME_FULL_WITH_SECONDS,\n FFFF: Formats.DATETIME_HUGE_WITH_SECONDS,\n};\n\n/**\n * @private\n */\n\nexport default class Formatter {\n static create(locale, opts = {}) {\n return new Formatter(locale, opts);\n }\n\n static parseFormat(fmt) {\n // white-space is always considered a literal in user-provided formats\n // the \" \" token has a special meaning (see unitForToken)\n\n let current = null,\n currentFull = \"\",\n bracketed = false;\n const splits = [];\n for (let i = 0; i < fmt.length; i++) {\n const c = fmt.charAt(i);\n if (c === \"'\") {\n if (currentFull.length > 0) {\n splits.push({ literal: bracketed || /^\\s+$/.test(currentFull), val: currentFull });\n }\n current = null;\n currentFull = \"\";\n bracketed = !bracketed;\n } else if (bracketed) {\n currentFull += c;\n } else if (c === current) {\n currentFull += c;\n } else {\n if (currentFull.length > 0) {\n splits.push({ literal: /^\\s+$/.test(currentFull), val: currentFull });\n }\n currentFull = c;\n current = c;\n }\n }\n\n if (currentFull.length > 0) {\n splits.push({ literal: bracketed || /^\\s+$/.test(currentFull), val: currentFull });\n }\n\n return splits;\n }\n\n static macroTokenToFormatOpts(token) {\n return macroTokenToFormatOpts[token];\n }\n\n constructor(locale, formatOpts) {\n this.opts = formatOpts;\n this.loc = locale;\n this.systemLoc = null;\n }\n\n formatWithSystemDefault(dt, opts) {\n if (this.systemLoc === null) {\n this.systemLoc = this.loc.redefaultToSystem();\n }\n const df = this.systemLoc.dtFormatter(dt, { ...this.opts, ...opts });\n return df.format();\n }\n\n dtFormatter(dt, opts = {}) {\n return this.loc.dtFormatter(dt, { ...this.opts, ...opts });\n }\n\n formatDateTime(dt, opts) {\n return this.dtFormatter(dt, opts).format();\n }\n\n formatDateTimeParts(dt, opts) {\n return this.dtFormatter(dt, opts).formatToParts();\n }\n\n formatInterval(interval, opts) {\n const df = this.dtFormatter(interval.start, opts);\n return df.dtf.formatRange(interval.start.toJSDate(), interval.end.toJSDate());\n }\n\n resolvedOptions(dt, opts) {\n return this.dtFormatter(dt, opts).resolvedOptions();\n }\n\n num(n, p = 0) {\n // we get some perf out of doing this here, annoyingly\n if (this.opts.forceSimple) {\n return padStart(n, p);\n }\n\n const opts = { ...this.opts };\n\n if (p > 0) {\n opts.padTo = p;\n }\n\n return this.loc.numberFormatter(opts).format(n);\n }\n\n formatDateTimeFromString(dt, fmt) {\n const knownEnglish = this.loc.listingMode() === \"en\",\n useDateTimeFormatter = this.loc.outputCalendar && this.loc.outputCalendar !== \"gregory\",\n string = (opts, extract) => this.loc.extract(dt, opts, extract),\n formatOffset = (opts) => {\n if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) {\n return \"Z\";\n }\n\n return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : \"\";\n },\n meridiem = () =>\n knownEnglish\n ? English.meridiemForDateTime(dt)\n : string({ hour: \"numeric\", hourCycle: \"h12\" }, \"dayperiod\"),\n month = (length, standalone) =>\n knownEnglish\n ? English.monthForDateTime(dt, length)\n : string(standalone ? { month: length } : { month: length, day: \"numeric\" }, \"month\"),\n weekday = (length, standalone) =>\n knownEnglish\n ? English.weekdayForDateTime(dt, length)\n : string(\n standalone ? { weekday: length } : { weekday: length, month: \"long\", day: \"numeric\" },\n \"weekday\"\n ),\n maybeMacro = (token) => {\n const formatOpts = Formatter.macroTokenToFormatOpts(token);\n if (formatOpts) {\n return this.formatWithSystemDefault(dt, formatOpts);\n } else {\n return token;\n }\n },\n era = (length) =>\n knownEnglish ? English.eraForDateTime(dt, length) : string({ era: length }, \"era\"),\n tokenToString = (token) => {\n // Where possible: https://cldr.unicode.org/translation/date-time/date-time-symbols\n switch (token) {\n // ms\n case \"S\":\n return this.num(dt.millisecond);\n case \"u\":\n // falls through\n case \"SSS\":\n return this.num(dt.millisecond, 3);\n // seconds\n case \"s\":\n return this.num(dt.second);\n case \"ss\":\n return this.num(dt.second, 2);\n // fractional seconds\n case \"uu\":\n return this.num(Math.floor(dt.millisecond / 10), 2);\n case \"uuu\":\n return this.num(Math.floor(dt.millisecond / 100));\n // minutes\n case \"m\":\n return this.num(dt.minute);\n case \"mm\":\n return this.num(dt.minute, 2);\n // hours\n case \"h\":\n return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12);\n case \"hh\":\n return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2);\n case \"H\":\n return this.num(dt.hour);\n case \"HH\":\n return this.num(dt.hour, 2);\n // offset\n case \"Z\":\n // like +6\n return formatOffset({ format: \"narrow\", allowZ: this.opts.allowZ });\n case \"ZZ\":\n // like +06:00\n return formatOffset({ format: \"short\", allowZ: this.opts.allowZ });\n case \"ZZZ\":\n // like +0600\n return formatOffset({ format: \"techie\", allowZ: this.opts.allowZ });\n case \"ZZZZ\":\n // like EST\n return dt.zone.offsetName(dt.ts, { format: \"short\", locale: this.loc.locale });\n case \"ZZZZZ\":\n // like Eastern Standard Time\n return dt.zone.offsetName(dt.ts, { format: \"long\", locale: this.loc.locale });\n // zone\n case \"z\":\n // like America/New_York\n return dt.zoneName;\n // meridiems\n case \"a\":\n return meridiem();\n // dates\n case \"d\":\n return useDateTimeFormatter ? string({ day: \"numeric\" }, \"day\") : this.num(dt.day);\n case \"dd\":\n return useDateTimeFormatter ? string({ day: \"2-digit\" }, \"day\") : this.num(dt.day, 2);\n // weekdays - standalone\n case \"c\":\n // like 1\n return this.num(dt.weekday);\n case \"ccc\":\n // like 'Tues'\n return weekday(\"short\", true);\n case \"cccc\":\n // like 'Tuesday'\n return weekday(\"long\", true);\n case \"ccccc\":\n // like 'T'\n return weekday(\"narrow\", true);\n // weekdays - format\n case \"E\":\n // like 1\n return this.num(dt.weekday);\n case \"EEE\":\n // like 'Tues'\n return weekday(\"short\", false);\n case \"EEEE\":\n // like 'Tuesday'\n return weekday(\"long\", false);\n case \"EEEEE\":\n // like 'T'\n return weekday(\"narrow\", false);\n // months - standalone\n case \"L\":\n // like 1\n return useDateTimeFormatter\n ? string({ month: \"numeric\", day: \"numeric\" }, \"month\")\n : this.num(dt.month);\n case \"LL\":\n // like 01, doesn't seem to work\n return useDateTimeFormatter\n ? string({ month: \"2-digit\", day: \"numeric\" }, \"month\")\n : this.num(dt.month, 2);\n case \"LLL\":\n // like Jan\n return month(\"short\", true);\n case \"LLLL\":\n // like January\n return month(\"long\", true);\n case \"LLLLL\":\n // like J\n return month(\"narrow\", true);\n // months - format\n case \"M\":\n // like 1\n return useDateTimeFormatter\n ? string({ month: \"numeric\" }, \"month\")\n : this.num(dt.month);\n case \"MM\":\n // like 01\n return useDateTimeFormatter\n ? string({ month: \"2-digit\" }, \"month\")\n : this.num(dt.month, 2);\n case \"MMM\":\n // like Jan\n return month(\"short\", false);\n case \"MMMM\":\n // like January\n return month(\"long\", false);\n case \"MMMMM\":\n // like J\n return month(\"narrow\", false);\n // years\n case \"y\":\n // like 2014\n return useDateTimeFormatter ? string({ year: \"numeric\" }, \"year\") : this.num(dt.year);\n case \"yy\":\n // like 14\n return useDateTimeFormatter\n ? string({ year: \"2-digit\" }, \"year\")\n : this.num(dt.year.toString().slice(-2), 2);\n case \"yyyy\":\n // like 0012\n return useDateTimeFormatter\n ? string({ year: \"numeric\" }, \"year\")\n : this.num(dt.year, 4);\n case \"yyyyyy\":\n // like 000012\n return useDateTimeFormatter\n ? string({ year: \"numeric\" }, \"year\")\n : this.num(dt.year, 6);\n // eras\n case \"G\":\n // like AD\n return era(\"short\");\n case \"GG\":\n // like Anno Domini\n return era(\"long\");\n case \"GGGGG\":\n return era(\"narrow\");\n case \"kk\":\n return this.num(dt.weekYear.toString().slice(-2), 2);\n case \"kkkk\":\n return this.num(dt.weekYear, 4);\n case \"W\":\n return this.num(dt.weekNumber);\n case \"WW\":\n return this.num(dt.weekNumber, 2);\n case \"n\":\n return this.num(dt.localWeekNumber);\n case \"nn\":\n return this.num(dt.localWeekNumber, 2);\n case \"ii\":\n return this.num(dt.localWeekYear.toString().slice(-2), 2);\n case \"iiii\":\n return this.num(dt.localWeekYear, 4);\n case \"o\":\n return this.num(dt.ordinal);\n case \"ooo\":\n return this.num(dt.ordinal, 3);\n case \"q\":\n // like 1\n return this.num(dt.quarter);\n case \"qq\":\n // like 01\n return this.num(dt.quarter, 2);\n case \"X\":\n return this.num(Math.floor(dt.ts / 1000));\n case \"x\":\n return this.num(dt.ts);\n default:\n return maybeMacro(token);\n }\n };\n\n return stringifyTokens(Formatter.parseFormat(fmt), tokenToString);\n }\n\n formatDurationFromString(dur, fmt) {\n const tokenToField = (token) => {\n switch (token[0]) {\n case \"S\":\n return \"millisecond\";\n case \"s\":\n return \"second\";\n case \"m\":\n return \"minute\";\n case \"h\":\n return \"hour\";\n case \"d\":\n return \"day\";\n case \"w\":\n return \"week\";\n case \"M\":\n return \"month\";\n case \"y\":\n return \"year\";\n default:\n return null;\n }\n },\n tokenToString = (lildur) => (token) => {\n const mapped = tokenToField(token);\n if (mapped) {\n return this.num(lildur.get(mapped), token.length);\n } else {\n return token;\n }\n },\n tokens = Formatter.parseFormat(fmt),\n realTokens = tokens.reduce(\n (found, { literal, val }) => (literal ? found : found.concat(val)),\n []\n ),\n collapsed = dur.shiftTo(...realTokens.map(tokenToField).filter((t) => t));\n return stringifyTokens(tokens, tokenToString(collapsed));\n }\n}\n","import {\n untruncateYear,\n signedOffset,\n parseInteger,\n parseMillis,\n isUndefined,\n parseFloating,\n} from \"./util.js\";\nimport * as English from \"./english.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n/*\n * This file handles parsing for well-specified formats. Here's how it works:\n * Two things go into parsing: a regex to match with and an extractor to take apart the groups in the match.\n * An extractor is just a function that takes a regex match array and returns a { year: ..., month: ... } object\n * parse() does the work of executing the regex and applying the extractor. It takes multiple regex/extractor pairs to try in sequence.\n * Extractors can take a \"cursor\" representing the offset in the match to look at. This makes it easy to combine extractors.\n * combineExtractors() does the work of combining them, keeping track of the cursor through multiple extractions.\n * Some extractions are super dumb and simpleParse and fromStrings help DRY them.\n */\n\nconst ianaRegex = /[A-Za-z_+-]{1,256}(?::?\\/[A-Za-z0-9_+-]{1,256}(?:\\/[A-Za-z0-9_+-]{1,256})?)?/;\n\nfunction combineRegexes(...regexes) {\n const full = regexes.reduce((f, r) => f + r.source, \"\");\n return RegExp(`^${full}$`);\n}\n\nfunction combineExtractors(...extractors) {\n return (m) =>\n extractors\n .reduce(\n ([mergedVals, mergedZone, cursor], ex) => {\n const [val, zone, next] = ex(m, cursor);\n return [{ ...mergedVals, ...val }, zone || mergedZone, next];\n },\n [{}, null, 1]\n )\n .slice(0, 2);\n}\n\nfunction parse(s, ...patterns) {\n if (s == null) {\n return [null, null];\n }\n\n for (const [regex, extractor] of patterns) {\n const m = regex.exec(s);\n if (m) {\n return extractor(m);\n }\n }\n return [null, null];\n}\n\nfunction simpleParse(...keys) {\n return (match, cursor) => {\n const ret = {};\n let i;\n\n for (i = 0; i < keys.length; i++) {\n ret[keys[i]] = parseInteger(match[cursor + i]);\n }\n return [ret, null, cursor + i];\n };\n}\n\n// ISO and SQL parsing\nconst offsetRegex = /(?:(Z)|([+-]\\d\\d)(?::?(\\d\\d))?)/;\nconst isoExtendedZone = `(?:${offsetRegex.source}?(?:\\\\[(${ianaRegex.source})\\\\])?)?`;\nconst isoTimeBaseRegex = /(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:[.,](\\d{1,30}))?)?)?/;\nconst isoTimeRegex = RegExp(`${isoTimeBaseRegex.source}${isoExtendedZone}`);\nconst isoTimeExtensionRegex = RegExp(`(?:T${isoTimeRegex.source})?`);\nconst isoYmdRegex = /([+-]\\d{6}|\\d{4})(?:-?(\\d\\d)(?:-?(\\d\\d))?)?/;\nconst isoWeekRegex = /(\\d{4})-?W(\\d\\d)(?:-?(\\d))?/;\nconst isoOrdinalRegex = /(\\d{4})-?(\\d{3})/;\nconst extractISOWeekData = simpleParse(\"weekYear\", \"weekNumber\", \"weekDay\");\nconst extractISOOrdinalData = simpleParse(\"year\", \"ordinal\");\nconst sqlYmdRegex = /(\\d{4})-(\\d\\d)-(\\d\\d)/; // dumbed-down version of the ISO one\nconst sqlTimeRegex = RegExp(\n `${isoTimeBaseRegex.source} ?(?:${offsetRegex.source}|(${ianaRegex.source}))?`\n);\nconst sqlTimeExtensionRegex = RegExp(`(?: ${sqlTimeRegex.source})?`);\n\nfunction int(match, pos, fallback) {\n const m = match[pos];\n return isUndefined(m) ? fallback : parseInteger(m);\n}\n\nfunction extractISOYmd(match, cursor) {\n const item = {\n year: int(match, cursor),\n month: int(match, cursor + 1, 1),\n day: int(match, cursor + 2, 1),\n };\n\n return [item, null, cursor + 3];\n}\n\nfunction extractISOTime(match, cursor) {\n const item = {\n hours: int(match, cursor, 0),\n minutes: int(match, cursor + 1, 0),\n seconds: int(match, cursor + 2, 0),\n milliseconds: parseMillis(match[cursor + 3]),\n };\n\n return [item, null, cursor + 4];\n}\n\nfunction extractISOOffset(match, cursor) {\n const local = !match[cursor] && !match[cursor + 1],\n fullOffset = signedOffset(match[cursor + 1], match[cursor + 2]),\n zone = local ? null : FixedOffsetZone.instance(fullOffset);\n return [{}, zone, cursor + 3];\n}\n\nfunction extractIANAZone(match, cursor) {\n const zone = match[cursor] ? IANAZone.create(match[cursor]) : null;\n return [{}, zone, cursor + 1];\n}\n\n// ISO time parsing\n\nconst isoTimeOnly = RegExp(`^T?${isoTimeBaseRegex.source}$`);\n\n// ISO duration parsing\n\nconst isoDuration =\n /^-?P(?:(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)Y)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)M)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)W)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)D)?(?:T(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)H)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)M)?(?:(-?\\d{1,20})(?:[.,](-?\\d{1,20}))?S)?)?)$/;\n\nfunction extractISODuration(match) {\n const [s, yearStr, monthStr, weekStr, dayStr, hourStr, minuteStr, secondStr, millisecondsStr] =\n match;\n\n const hasNegativePrefix = s[0] === \"-\";\n const negativeSeconds = secondStr && secondStr[0] === \"-\";\n\n const maybeNegate = (num, force = false) =>\n num !== undefined && (force || (num && hasNegativePrefix)) ? -num : num;\n\n return [\n {\n years: maybeNegate(parseFloating(yearStr)),\n months: maybeNegate(parseFloating(monthStr)),\n weeks: maybeNegate(parseFloating(weekStr)),\n days: maybeNegate(parseFloating(dayStr)),\n hours: maybeNegate(parseFloating(hourStr)),\n minutes: maybeNegate(parseFloating(minuteStr)),\n seconds: maybeNegate(parseFloating(secondStr), secondStr === \"-0\"),\n milliseconds: maybeNegate(parseMillis(millisecondsStr), negativeSeconds),\n },\n ];\n}\n\n// These are a little braindead. EDT *should* tell us that we're in, say, America/New_York\n// and not just that we're in -240 *right now*. But since I don't think these are used that often\n// I'm just going to ignore that\nconst obsOffsets = {\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n};\n\nfunction fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n const result = {\n year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr),\n month: English.monthsShort.indexOf(monthStr) + 1,\n day: parseInteger(dayStr),\n hour: parseInteger(hourStr),\n minute: parseInteger(minuteStr),\n };\n\n if (secondStr) result.second = parseInteger(secondStr);\n if (weekdayStr) {\n result.weekday =\n weekdayStr.length > 3\n ? English.weekdaysLong.indexOf(weekdayStr) + 1\n : English.weekdaysShort.indexOf(weekdayStr) + 1;\n }\n\n return result;\n}\n\n// RFC 2822/5322\nconst rfc2822 =\n /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\\d\\d)(\\d\\d)))$/;\n\nfunction extractRFC2822(match) {\n const [\n ,\n weekdayStr,\n dayStr,\n monthStr,\n yearStr,\n hourStr,\n minuteStr,\n secondStr,\n obsOffset,\n milOffset,\n offHourStr,\n offMinuteStr,\n ] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n\n let offset;\n if (obsOffset) {\n offset = obsOffsets[obsOffset];\n } else if (milOffset) {\n offset = 0;\n } else {\n offset = signedOffset(offHourStr, offMinuteStr);\n }\n\n return [result, new FixedOffsetZone(offset)];\n}\n\nfunction preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^()]*\\)|[\\n\\t]/g, \" \")\n .replace(/(\\s\\s+)/g, \" \")\n .trim();\n}\n\n// http date\n\nconst rfc1123 =\n /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\\d\\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\\d{4}) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n rfc850 =\n /^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\\d\\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n ascii =\n /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \\d|\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) (\\d{4})$/;\n\nfunction extractRFC1123Or850(match) {\n const [, weekdayStr, dayStr, monthStr, yearStr, hourStr, minuteStr, secondStr] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n return [result, FixedOffsetZone.utcInstance];\n}\n\nfunction extractASCII(match) {\n const [, weekdayStr, monthStr, dayStr, hourStr, minuteStr, secondStr, yearStr] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n return [result, FixedOffsetZone.utcInstance];\n}\n\nconst isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex);\nconst isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex);\nconst isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex);\nconst isoTimeCombinedRegex = combineRegexes(isoTimeRegex);\n\nconst extractISOYmdTimeAndOffset = combineExtractors(\n extractISOYmd,\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\nconst extractISOWeekTimeAndOffset = combineExtractors(\n extractISOWeekData,\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\nconst extractISOOrdinalDateAndTime = combineExtractors(\n extractISOOrdinalData,\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\nconst extractISOTimeAndOffset = combineExtractors(\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\n\n/*\n * @private\n */\n\nexport function parseISODate(s) {\n return parse(\n s,\n [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset],\n [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset],\n [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDateAndTime],\n [isoTimeCombinedRegex, extractISOTimeAndOffset]\n );\n}\n\nexport function parseRFC2822Date(s) {\n return parse(preprocessRFC2822(s), [rfc2822, extractRFC2822]);\n}\n\nexport function parseHTTPDate(s) {\n return parse(\n s,\n [rfc1123, extractRFC1123Or850],\n [rfc850, extractRFC1123Or850],\n [ascii, extractASCII]\n );\n}\n\nexport function parseISODuration(s) {\n return parse(s, [isoDuration, extractISODuration]);\n}\n\nconst extractISOTimeOnly = combineExtractors(extractISOTime);\n\nexport function parseISOTimeOnly(s) {\n return parse(s, [isoTimeOnly, extractISOTimeOnly]);\n}\n\nconst sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex);\nconst sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex);\n\nconst extractISOTimeOffsetAndIANAZone = combineExtractors(\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\n\nexport function parseSQL(s) {\n return parse(\n s,\n [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset],\n [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone]\n );\n}\n","import { InvalidArgumentError, InvalidDurationError, InvalidUnitError } from \"./errors.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport Invalid from \"./impl/invalid.js\";\nimport Locale from \"./impl/locale.js\";\nimport { parseISODuration, parseISOTimeOnly } from \"./impl/regexParser.js\";\nimport {\n asNumber,\n hasOwnProperty,\n isNumber,\n isUndefined,\n normalizeObject,\n roundTo,\n} from \"./impl/util.js\";\nimport Settings from \"./settings.js\";\nimport DateTime from \"./datetime.js\";\n\nconst INVALID = \"Invalid Duration\";\n\n// unit conversion constants\nexport const lowOrderMatrix = {\n weeks: {\n days: 7,\n hours: 7 * 24,\n minutes: 7 * 24 * 60,\n seconds: 7 * 24 * 60 * 60,\n milliseconds: 7 * 24 * 60 * 60 * 1000,\n },\n days: {\n hours: 24,\n minutes: 24 * 60,\n seconds: 24 * 60 * 60,\n milliseconds: 24 * 60 * 60 * 1000,\n },\n hours: { minutes: 60, seconds: 60 * 60, milliseconds: 60 * 60 * 1000 },\n minutes: { seconds: 60, milliseconds: 60 * 1000 },\n seconds: { milliseconds: 1000 },\n },\n casualMatrix = {\n years: {\n quarters: 4,\n months: 12,\n weeks: 52,\n days: 365,\n hours: 365 * 24,\n minutes: 365 * 24 * 60,\n seconds: 365 * 24 * 60 * 60,\n milliseconds: 365 * 24 * 60 * 60 * 1000,\n },\n quarters: {\n months: 3,\n weeks: 13,\n days: 91,\n hours: 91 * 24,\n minutes: 91 * 24 * 60,\n seconds: 91 * 24 * 60 * 60,\n milliseconds: 91 * 24 * 60 * 60 * 1000,\n },\n months: {\n weeks: 4,\n days: 30,\n hours: 30 * 24,\n minutes: 30 * 24 * 60,\n seconds: 30 * 24 * 60 * 60,\n milliseconds: 30 * 24 * 60 * 60 * 1000,\n },\n\n ...lowOrderMatrix,\n },\n daysInYearAccurate = 146097.0 / 400,\n daysInMonthAccurate = 146097.0 / 4800,\n accurateMatrix = {\n years: {\n quarters: 4,\n months: 12,\n weeks: daysInYearAccurate / 7,\n days: daysInYearAccurate,\n hours: daysInYearAccurate * 24,\n minutes: daysInYearAccurate * 24 * 60,\n seconds: daysInYearAccurate * 24 * 60 * 60,\n milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000,\n },\n quarters: {\n months: 3,\n weeks: daysInYearAccurate / 28,\n days: daysInYearAccurate / 4,\n hours: (daysInYearAccurate * 24) / 4,\n minutes: (daysInYearAccurate * 24 * 60) / 4,\n seconds: (daysInYearAccurate * 24 * 60 * 60) / 4,\n milliseconds: (daysInYearAccurate * 24 * 60 * 60 * 1000) / 4,\n },\n months: {\n weeks: daysInMonthAccurate / 7,\n days: daysInMonthAccurate,\n hours: daysInMonthAccurate * 24,\n minutes: daysInMonthAccurate * 24 * 60,\n seconds: daysInMonthAccurate * 24 * 60 * 60,\n milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1000,\n },\n ...lowOrderMatrix,\n };\n\n// units ordered by size\nconst orderedUnits = [\n \"years\",\n \"quarters\",\n \"months\",\n \"weeks\",\n \"days\",\n \"hours\",\n \"minutes\",\n \"seconds\",\n \"milliseconds\",\n];\n\nconst reverseUnits = orderedUnits.slice(0).reverse();\n\n// clone really means \"create another instance just like this one, but with these changes\"\nfunction clone(dur, alts, clear = false) {\n // deep merge for vals\n const conf = {\n values: clear ? alts.values : { ...dur.values, ...(alts.values || {}) },\n loc: dur.loc.clone(alts.loc),\n conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy,\n matrix: alts.matrix || dur.matrix,\n };\n return new Duration(conf);\n}\n\nfunction durationToMillis(matrix, vals) {\n let sum = vals.milliseconds ?? 0;\n for (const unit of reverseUnits.slice(1)) {\n if (vals[unit]) {\n sum += vals[unit] * matrix[unit][\"milliseconds\"];\n }\n }\n return sum;\n}\n\n// NB: mutates parameters\nfunction normalizeValues(matrix, vals) {\n // the logic below assumes the overall value of the duration is positive\n // if this is not the case, factor is used to make it so\n const factor = durationToMillis(matrix, vals) < 0 ? -1 : 1;\n\n orderedUnits.reduceRight((previous, current) => {\n if (!isUndefined(vals[current])) {\n if (previous) {\n const previousVal = vals[previous] * factor;\n const conv = matrix[current][previous];\n\n // if (previousVal < 0):\n // lower order unit is negative (e.g. { years: 2, days: -2 })\n // normalize this by reducing the higher order unit by the appropriate amount\n // and increasing the lower order unit\n // this can never make the higher order unit negative, because this function only operates\n // on positive durations, so the amount of time represented by the lower order unit cannot\n // be larger than the higher order unit\n // else:\n // lower order unit is positive (e.g. { years: 2, days: 450 } or { years: -2, days: 450 })\n // in this case we attempt to convert as much as possible from the lower order unit into\n // the higher order one\n //\n // Math.floor takes care of both of these cases, rounding away from 0\n // if previousVal < 0 it makes the absolute value larger\n // if previousVal >= it makes the absolute value smaller\n const rollUp = Math.floor(previousVal / conv);\n vals[current] += rollUp * factor;\n vals[previous] -= rollUp * conv * factor;\n }\n return current;\n } else {\n return previous;\n }\n }, null);\n\n // try to convert any decimals into smaller units if possible\n // for example for { years: 2.5, days: 0, seconds: 0 } we want to get { years: 2, days: 182, hours: 12 }\n orderedUnits.reduce((previous, current) => {\n if (!isUndefined(vals[current])) {\n if (previous) {\n const fraction = vals[previous] % 1;\n vals[previous] -= fraction;\n vals[current] += fraction * matrix[previous][current];\n }\n return current;\n } else {\n return previous;\n }\n }, null);\n}\n\n// Remove all properties with a value of 0 from an object\nfunction removeZeroes(vals) {\n const newVals = {};\n for (const [key, value] of Object.entries(vals)) {\n if (value !== 0) {\n newVals[key] = value;\n }\n }\n return newVals;\n}\n\n/**\n * A Duration object represents a period of time, like \"2 months\" or \"1 day, 1 hour\". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use {@link DateTime#plus} to add a Duration object to a DateTime, producing another DateTime.\n *\n * Here is a brief overview of commonly used methods and getters in Duration:\n *\n * * **Creation** To create a Duration, use {@link Duration.fromMillis}, {@link Duration.fromObject}, or {@link Duration.fromISO}.\n * * **Unit values** See the {@link Duration#years}, {@link Duration#months}, {@link Duration#weeks}, {@link Duration#days}, {@link Duration#hours}, {@link Duration#minutes}, {@link Duration#seconds}, {@link Duration#milliseconds} accessors.\n * * **Configuration** See {@link Duration#locale} and {@link Duration#numberingSystem} accessors.\n * * **Transformation** To create new Durations out of old ones use {@link Duration#plus}, {@link Duration#minus}, {@link Duration#normalize}, {@link Duration#set}, {@link Duration#reconfigure}, {@link Duration#shiftTo}, and {@link Duration#negate}.\n * * **Output** To convert the Duration into other representations, see {@link Duration#as}, {@link Duration#toISO}, {@link Duration#toFormat}, and {@link Duration#toJSON}\n *\n * There's are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation.\n */\nexport default class Duration {\n /**\n * @private\n */\n constructor(config) {\n const accurate = config.conversionAccuracy === \"longterm\" || false;\n let matrix = accurate ? accurateMatrix : casualMatrix;\n\n if (config.matrix) {\n matrix = config.matrix;\n }\n\n /**\n * @access private\n */\n this.values = config.values;\n /**\n * @access private\n */\n this.loc = config.loc || Locale.create();\n /**\n * @access private\n */\n this.conversionAccuracy = accurate ? \"longterm\" : \"casual\";\n /**\n * @access private\n */\n this.invalid = config.invalid || null;\n /**\n * @access private\n */\n this.matrix = matrix;\n /**\n * @access private\n */\n this.isLuxonDuration = true;\n }\n\n /**\n * Create Duration from a number of milliseconds.\n * @param {number} count of milliseconds\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @return {Duration}\n */\n static fromMillis(count, opts) {\n return Duration.fromObject({ milliseconds: count }, opts);\n }\n\n /**\n * Create a Duration from a JavaScript object with keys like 'years' and 'hours'.\n * If this object is empty then a zero milliseconds duration is returned.\n * @param {Object} obj - the object to create the DateTime from\n * @param {number} obj.years\n * @param {number} obj.quarters\n * @param {number} obj.months\n * @param {number} obj.weeks\n * @param {number} obj.days\n * @param {number} obj.hours\n * @param {number} obj.minutes\n * @param {number} obj.seconds\n * @param {number} obj.milliseconds\n * @param {Object} [opts=[]] - options for creating this Duration\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n * @param {string} [opts.matrix=Object] - the custom conversion system to use\n * @return {Duration}\n */\n static fromObject(obj, opts = {}) {\n if (obj == null || typeof obj !== \"object\") {\n throw new InvalidArgumentError(\n `Duration.fromObject: argument expected to be an object, got ${\n obj === null ? \"null\" : typeof obj\n }`\n );\n }\n\n return new Duration({\n values: normalizeObject(obj, Duration.normalizeUnit),\n loc: Locale.fromObject(opts),\n conversionAccuracy: opts.conversionAccuracy,\n matrix: opts.matrix,\n });\n }\n\n /**\n * Create a Duration from DurationLike.\n *\n * @param {Object | number | Duration} durationLike\n * One of:\n * - object with keys like 'years' and 'hours'.\n * - number representing milliseconds\n * - Duration instance\n * @return {Duration}\n */\n static fromDurationLike(durationLike) {\n if (isNumber(durationLike)) {\n return Duration.fromMillis(durationLike);\n } else if (Duration.isDuration(durationLike)) {\n return durationLike;\n } else if (typeof durationLike === \"object\") {\n return Duration.fromObject(durationLike);\n } else {\n throw new InvalidArgumentError(\n `Unknown duration argument ${durationLike} of type ${typeof durationLike}`\n );\n }\n }\n\n /**\n * Create a Duration from an ISO 8601 duration string.\n * @param {string} text - text to parse\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n * @param {string} [opts.matrix=Object] - the preset conversion system to use\n * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n * @example Duration.fromISO('P3Y6M1W4DT12H30M5S').toObject() //=> { years: 3, months: 6, weeks: 1, days: 4, hours: 12, minutes: 30, seconds: 5 }\n * @example Duration.fromISO('PT23H').toObject() //=> { hours: 23 }\n * @example Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 }\n * @return {Duration}\n */\n static fromISO(text, opts) {\n const [parsed] = parseISODuration(text);\n if (parsed) {\n return Duration.fromObject(parsed, opts);\n } else {\n return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n }\n\n /**\n * Create a Duration from an ISO 8601 time string.\n * @param {string} text - text to parse\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n * @param {string} [opts.matrix=Object] - the conversion system to use\n * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n * @example Duration.fromISOTime('11:22:33.444').toObject() //=> { hours: 11, minutes: 22, seconds: 33, milliseconds: 444 }\n * @example Duration.fromISOTime('11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('T11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('T1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @return {Duration}\n */\n static fromISOTime(text, opts) {\n const [parsed] = parseISOTimeOnly(text);\n if (parsed) {\n return Duration.fromObject(parsed, opts);\n } else {\n return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n }\n\n /**\n * Create an invalid Duration.\n * @param {string} reason - simple string of why this datetime is invalid. Should not contain parameters or anything else data-dependent\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {Duration}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the Duration is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidDurationError(invalid);\n } else {\n return new Duration({ invalid });\n }\n }\n\n /**\n * @private\n */\n static normalizeUnit(unit) {\n const normalized = {\n year: \"years\",\n years: \"years\",\n quarter: \"quarters\",\n quarters: \"quarters\",\n month: \"months\",\n months: \"months\",\n week: \"weeks\",\n weeks: \"weeks\",\n day: \"days\",\n days: \"days\",\n hour: \"hours\",\n hours: \"hours\",\n minute: \"minutes\",\n minutes: \"minutes\",\n second: \"seconds\",\n seconds: \"seconds\",\n millisecond: \"milliseconds\",\n milliseconds: \"milliseconds\",\n }[unit ? unit.toLowerCase() : unit];\n\n if (!normalized) throw new InvalidUnitError(unit);\n\n return normalized;\n }\n\n /**\n * Check if an object is a Duration. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isDuration(o) {\n return (o && o.isLuxonDuration) || false;\n }\n\n /**\n * Get the locale of a Duration, such 'en-GB'\n * @type {string}\n */\n get locale() {\n return this.isValid ? this.loc.locale : null;\n }\n\n /**\n * Get the numbering system of a Duration, such 'beng'. The numbering system is used when formatting the Duration\n *\n * @type {string}\n */\n get numberingSystem() {\n return this.isValid ? this.loc.numberingSystem : null;\n }\n\n /**\n * Returns a string representation of this Duration formatted according to the specified format string. You may use these tokens:\n * * `S` for milliseconds\n * * `s` for seconds\n * * `m` for minutes\n * * `h` for hours\n * * `d` for days\n * * `w` for weeks\n * * `M` for months\n * * `y` for years\n * Notes:\n * * Add padding by repeating the token, e.g. \"yy\" pads the years to two digits, \"hhhh\" pads the hours out to four digits\n * * Tokens can be escaped by wrapping with single quotes.\n * * The duration will be converted to the set of units in the format string using {@link Duration#shiftTo} and the Durations's conversion accuracy setting.\n * @param {string} fmt - the format string\n * @param {Object} opts - options\n * @param {boolean} [opts.floor=true] - floor numerical values\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"y d s\") //=> \"1 6 2\"\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"yy dd sss\") //=> \"01 06 002\"\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"M S\") //=> \"12 518402000\"\n * @return {string}\n */\n toFormat(fmt, opts = {}) {\n // reverse-compat since 1.2; we always round down now, never up, and we do it by default\n const fmtOpts = {\n ...opts,\n floor: opts.round !== false && opts.floor !== false,\n };\n return this.isValid\n ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt)\n : INVALID;\n }\n\n /**\n * Returns a string representation of a Duration with all units included.\n * To modify its behavior, use `listStyle` and any Intl.NumberFormat option, though `unitDisplay` is especially relevant.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#options\n * @param {Object} opts - Formatting options. Accepts the same keys as the options parameter of the native `Intl.NumberFormat` constructor, as well as `listStyle`.\n * @param {string} [opts.listStyle='narrow'] - How to format the merged list. Corresponds to the `style` property of the options parameter of the native `Intl.ListFormat` constructor.\n * @example\n * ```js\n * var dur = Duration.fromObject({ days: 1, hours: 5, minutes: 6 })\n * dur.toHuman() //=> '1 day, 5 hours, 6 minutes'\n * dur.toHuman({ listStyle: \"long\" }) //=> '1 day, 5 hours, and 6 minutes'\n * dur.toHuman({ unitDisplay: \"short\" }) //=> '1 day, 5 hr, 6 min'\n * ```\n */\n toHuman(opts = {}) {\n if (!this.isValid) return INVALID;\n\n const l = orderedUnits\n .map((unit) => {\n const val = this.values[unit];\n if (isUndefined(val)) {\n return null;\n }\n return this.loc\n .numberFormatter({ style: \"unit\", unitDisplay: \"long\", ...opts, unit: unit.slice(0, -1) })\n .format(val);\n })\n .filter((n) => n);\n\n return this.loc\n .listFormatter({ type: \"conjunction\", style: opts.listStyle || \"narrow\", ...opts })\n .format(l);\n }\n\n /**\n * Returns a JavaScript object with this Duration's values.\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 }\n * @return {Object}\n */\n toObject() {\n if (!this.isValid) return {};\n return { ...this.values };\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Duration.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n * @example Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S'\n * @example Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S'\n * @example Duration.fromObject({ months: 5 }).toISO() //=> 'P5M'\n * @example Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M'\n * @example Duration.fromObject({ milliseconds: 6 }).toISO() //=> 'PT0.006S'\n * @return {string}\n */\n toISO() {\n // we could use the formatter, but this is an easier way to get the minimum string\n if (!this.isValid) return null;\n\n let s = \"P\";\n if (this.years !== 0) s += this.years + \"Y\";\n if (this.months !== 0 || this.quarters !== 0) s += this.months + this.quarters * 3 + \"M\";\n if (this.weeks !== 0) s += this.weeks + \"W\";\n if (this.days !== 0) s += this.days + \"D\";\n if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0)\n s += \"T\";\n if (this.hours !== 0) s += this.hours + \"H\";\n if (this.minutes !== 0) s += this.minutes + \"M\";\n if (this.seconds !== 0 || this.milliseconds !== 0)\n // this will handle \"floating point madness\" by removing extra decimal places\n // https://stackoverflow.com/questions/588004/is-floating-point-math-broken\n s += roundTo(this.seconds + this.milliseconds / 1000, 3) + \"S\";\n if (s === \"P\") s += \"T0S\";\n return s;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Duration, formatted as a time of day.\n * Note that this will return null if the duration is invalid, negative, or equal to or greater than 24 hours.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example Duration.fromObject({ hours: 11 }).toISOTime() //=> '11:00:00.000'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressMilliseconds: true }) //=> '11:00:00'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressSeconds: true }) //=> '11:00'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ includePrefix: true }) //=> 'T11:00:00.000'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ format: 'basic' }) //=> '110000.000'\n * @return {string}\n */\n toISOTime(opts = {}) {\n if (!this.isValid) return null;\n\n const millis = this.toMillis();\n if (millis < 0 || millis >= 86400000) return null;\n\n opts = {\n suppressMilliseconds: false,\n suppressSeconds: false,\n includePrefix: false,\n format: \"extended\",\n ...opts,\n includeOffset: false,\n };\n\n const dateTime = DateTime.fromMillis(millis, { zone: \"UTC\" });\n return dateTime.toISOTime(opts);\n }\n\n /**\n * Returns an ISO 8601 representation of this Duration appropriate for use in JSON.\n * @return {string}\n */\n toJSON() {\n return this.toISO();\n }\n\n /**\n * Returns an ISO 8601 representation of this Duration appropriate for use in debugging.\n * @return {string}\n */\n toString() {\n return this.toISO();\n }\n\n /**\n * Returns a string representation of this Duration appropriate for the REPL.\n * @return {string}\n */\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n if (this.isValid) {\n return `Duration { values: ${JSON.stringify(this.values)} }`;\n } else {\n return `Duration { Invalid, reason: ${this.invalidReason} }`;\n }\n }\n\n /**\n * Returns an milliseconds value of this Duration.\n * @return {number}\n */\n toMillis() {\n if (!this.isValid) return NaN;\n\n return durationToMillis(this.matrix, this.values);\n }\n\n /**\n * Returns an milliseconds value of this Duration. Alias of {@link toMillis}\n * @return {number}\n */\n valueOf() {\n return this.toMillis();\n }\n\n /**\n * Make this Duration longer by the specified amount. Return a newly-constructed Duration.\n * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @return {Duration}\n */\n plus(duration) {\n if (!this.isValid) return this;\n\n const dur = Duration.fromDurationLike(duration),\n result = {};\n\n for (const k of orderedUnits) {\n if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) {\n result[k] = dur.get(k) + this.get(k);\n }\n }\n\n return clone(this, { values: result }, true);\n }\n\n /**\n * Make this Duration shorter by the specified amount. Return a newly-constructed Duration.\n * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @return {Duration}\n */\n minus(duration) {\n if (!this.isValid) return this;\n\n const dur = Duration.fromDurationLike(duration);\n return this.plus(dur.negate());\n }\n\n /**\n * Scale this Duration by the specified amount. Return a newly-constructed Duration.\n * @param {function} fn - The function to apply to each unit. Arity is 1 or 2: the value of the unit and, optionally, the unit name. Must return a number.\n * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits(x => x * 2) //=> { hours: 2, minutes: 60 }\n * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits((x, u) => u === \"hours\" ? x * 2 : x) //=> { hours: 2, minutes: 30 }\n * @return {Duration}\n */\n mapUnits(fn) {\n if (!this.isValid) return this;\n const result = {};\n for (const k of Object.keys(this.values)) {\n result[k] = asNumber(fn(this.values[k], k));\n }\n return clone(this, { values: result }, true);\n }\n\n /**\n * Get the value of unit.\n * @param {string} unit - a unit such as 'minute' or 'day'\n * @example Duration.fromObject({years: 2, days: 3}).get('years') //=> 2\n * @example Duration.fromObject({years: 2, days: 3}).get('months') //=> 0\n * @example Duration.fromObject({years: 2, days: 3}).get('days') //=> 3\n * @return {number}\n */\n get(unit) {\n return this[Duration.normalizeUnit(unit)];\n }\n\n /**\n * \"Set\" the values of specified units. Return a newly-constructed Duration.\n * @param {Object} values - a mapping of units to numbers\n * @example dur.set({ years: 2017 })\n * @example dur.set({ hours: 8, minutes: 30 })\n * @return {Duration}\n */\n set(values) {\n if (!this.isValid) return this;\n\n const mixed = { ...this.values, ...normalizeObject(values, Duration.normalizeUnit) };\n return clone(this, { values: mixed });\n }\n\n /**\n * \"Set\" the locale and/or numberingSystem. Returns a newly-constructed Duration.\n * @example dur.reconfigure({ locale: 'en-GB' })\n * @return {Duration}\n */\n reconfigure({ locale, numberingSystem, conversionAccuracy, matrix } = {}) {\n const loc = this.loc.clone({ locale, numberingSystem });\n const opts = { loc, matrix, conversionAccuracy };\n return clone(this, opts);\n }\n\n /**\n * Return the length of the duration in the specified unit.\n * @param {string} unit - a unit such as 'minutes' or 'days'\n * @example Duration.fromObject({years: 1}).as('days') //=> 365\n * @example Duration.fromObject({years: 1}).as('months') //=> 12\n * @example Duration.fromObject({hours: 60}).as('days') //=> 2.5\n * @return {number}\n */\n as(unit) {\n return this.isValid ? this.shiftTo(unit).get(unit) : NaN;\n }\n\n /**\n * Reduce this Duration to its canonical representation in its current units.\n * Assuming the overall value of the Duration is positive, this means:\n * - excessive values for lower-order units are converted to higher-order units (if possible, see first and second example)\n * - negative lower-order units are converted to higher order units (there must be such a higher order unit, otherwise\n * the overall value would be negative, see third example)\n * - fractional values for higher-order units are converted to lower-order units (if possible, see fourth example)\n *\n * If the overall value is negative, the result of this method is equivalent to `this.negate().normalize().negate()`.\n * @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 }\n * @example Duration.fromObject({ days: 5000 }).normalize().toObject() //=> { days: 5000 }\n * @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 }\n * @example Duration.fromObject({ years: 2.5, days: 0, hours: 0 }).normalize().toObject() //=> { years: 2, days: 182, hours: 12 }\n * @return {Duration}\n */\n normalize() {\n if (!this.isValid) return this;\n const vals = this.toObject();\n normalizeValues(this.matrix, vals);\n return clone(this, { values: vals }, true);\n }\n\n /**\n * Rescale units to its largest representation\n * @example Duration.fromObject({ milliseconds: 90000 }).rescale().toObject() //=> { minutes: 1, seconds: 30 }\n * @return {Duration}\n */\n rescale() {\n if (!this.isValid) return this;\n const vals = removeZeroes(this.normalize().shiftToAll().toObject());\n return clone(this, { values: vals }, true);\n }\n\n /**\n * Convert this Duration into its representation in a different set of units.\n * @example Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 }\n * @return {Duration}\n */\n shiftTo(...units) {\n if (!this.isValid) return this;\n\n if (units.length === 0) {\n return this;\n }\n\n units = units.map((u) => Duration.normalizeUnit(u));\n\n const built = {},\n accumulated = {},\n vals = this.toObject();\n let lastUnit;\n\n for (const k of orderedUnits) {\n if (units.indexOf(k) >= 0) {\n lastUnit = k;\n\n let own = 0;\n\n // anything we haven't boiled down yet should get boiled to this unit\n for (const ak in accumulated) {\n own += this.matrix[ak][k] * accumulated[ak];\n accumulated[ak] = 0;\n }\n\n // plus anything that's already in this unit\n if (isNumber(vals[k])) {\n own += vals[k];\n }\n\n // only keep the integer part for now in the hopes of putting any decimal part\n // into a smaller unit later\n const i = Math.trunc(own);\n built[k] = i;\n accumulated[k] = (own * 1000 - i * 1000) / 1000;\n\n // otherwise, keep it in the wings to boil it later\n } else if (isNumber(vals[k])) {\n accumulated[k] = vals[k];\n }\n }\n\n // anything leftover becomes the decimal for the last unit\n // lastUnit must be defined since units is not empty\n for (const key in accumulated) {\n if (accumulated[key] !== 0) {\n built[lastUnit] +=\n key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key];\n }\n }\n\n normalizeValues(this.matrix, built);\n return clone(this, { values: built }, true);\n }\n\n /**\n * Shift this Duration to all available units.\n * Same as shiftTo(\"years\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\")\n * @return {Duration}\n */\n shiftToAll() {\n if (!this.isValid) return this;\n return this.shiftTo(\n \"years\",\n \"months\",\n \"weeks\",\n \"days\",\n \"hours\",\n \"minutes\",\n \"seconds\",\n \"milliseconds\"\n );\n }\n\n /**\n * Return the negative of this Duration.\n * @example Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 }\n * @return {Duration}\n */\n negate() {\n if (!this.isValid) return this;\n const negated = {};\n for (const k of Object.keys(this.values)) {\n negated[k] = this.values[k] === 0 ? 0 : -this.values[k];\n }\n return clone(this, { values: negated }, true);\n }\n\n /**\n * Get the years.\n * @type {number}\n */\n get years() {\n return this.isValid ? this.values.years || 0 : NaN;\n }\n\n /**\n * Get the quarters.\n * @type {number}\n */\n get quarters() {\n return this.isValid ? this.values.quarters || 0 : NaN;\n }\n\n /**\n * Get the months.\n * @type {number}\n */\n get months() {\n return this.isValid ? this.values.months || 0 : NaN;\n }\n\n /**\n * Get the weeks\n * @type {number}\n */\n get weeks() {\n return this.isValid ? this.values.weeks || 0 : NaN;\n }\n\n /**\n * Get the days.\n * @type {number}\n */\n get days() {\n return this.isValid ? this.values.days || 0 : NaN;\n }\n\n /**\n * Get the hours.\n * @type {number}\n */\n get hours() {\n return this.isValid ? this.values.hours || 0 : NaN;\n }\n\n /**\n * Get the minutes.\n * @type {number}\n */\n get minutes() {\n return this.isValid ? this.values.minutes || 0 : NaN;\n }\n\n /**\n * Get the seconds.\n * @return {number}\n */\n get seconds() {\n return this.isValid ? this.values.seconds || 0 : NaN;\n }\n\n /**\n * Get the milliseconds.\n * @return {number}\n */\n get milliseconds() {\n return this.isValid ? this.values.milliseconds || 0 : NaN;\n }\n\n /**\n * Returns whether the Duration is invalid. Invalid durations are returned by diff operations\n * on invalid DateTimes or Intervals.\n * @return {boolean}\n */\n get isValid() {\n return this.invalid === null;\n }\n\n /**\n * Returns an error code if this Duration became invalid, or null if the Duration is valid\n * @return {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this Duration became invalid, or null if the Duration is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Equality check\n * Two Durations are equal iff they have the same units and the same values for each unit.\n * @param {Duration} other\n * @return {boolean}\n */\n equals(other) {\n if (!this.isValid || !other.isValid) {\n return false;\n }\n\n if (!this.loc.equals(other.loc)) {\n return false;\n }\n\n function eq(v1, v2) {\n // Consider 0 and undefined as equal\n if (v1 === undefined || v1 === 0) return v2 === undefined || v2 === 0;\n return v1 === v2;\n }\n\n for (const u of orderedUnits) {\n if (!eq(this.values[u], other.values[u])) {\n return false;\n }\n }\n return true;\n }\n}\n","import DateTime, { friendlyDateTime } from \"./datetime.js\";\nimport Duration from \"./duration.js\";\nimport Settings from \"./settings.js\";\nimport { InvalidArgumentError, InvalidIntervalError } from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport * as Formats from \"./impl/formats.js\";\n\nconst INVALID = \"Invalid Interval\";\n\n// checks if the start is equal to or before the end\nfunction validateStartEnd(start, end) {\n if (!start || !start.isValid) {\n return Interval.invalid(\"missing or invalid start\");\n } else if (!end || !end.isValid) {\n return Interval.invalid(\"missing or invalid end\");\n } else if (end < start) {\n return Interval.invalid(\n \"end before start\",\n `The end of an interval must be after its start, but you had start=${start.toISO()} and end=${end.toISO()}`\n );\n } else {\n return null;\n }\n}\n\n/**\n * An Interval object represents a half-open interval of time, where each endpoint is a {@link DateTime}. Conceptually, it's a container for those two endpoints, accompanied by methods for creating, parsing, interrogating, comparing, transforming, and formatting them.\n *\n * Here is a brief overview of the most commonly used methods and getters in Interval:\n *\n * * **Creation** To create an Interval, use {@link Interval.fromDateTimes}, {@link Interval.after}, {@link Interval.before}, or {@link Interval.fromISO}.\n * * **Accessors** Use {@link Interval#start} and {@link Interval#end} to get the start and end.\n * * **Interrogation** To analyze the Interval, use {@link Interval#count}, {@link Interval#length}, {@link Interval#hasSame}, {@link Interval#contains}, {@link Interval#isAfter}, or {@link Interval#isBefore}.\n * * **Transformation** To create other Intervals out of this one, use {@link Interval#set}, {@link Interval#splitAt}, {@link Interval#splitBy}, {@link Interval#divideEqually}, {@link Interval.merge}, {@link Interval.xor}, {@link Interval#union}, {@link Interval#intersection}, or {@link Interval#difference}.\n * * **Comparison** To compare this Interval to another one, use {@link Interval#equals}, {@link Interval#overlaps}, {@link Interval#abutsStart}, {@link Interval#abutsEnd}, {@link Interval#engulfs}\n * * **Output** To convert the Interval into other representations, see {@link Interval#toString}, {@link Interval#toLocaleString}, {@link Interval#toISO}, {@link Interval#toISODate}, {@link Interval#toISOTime}, {@link Interval#toFormat}, and {@link Interval#toDuration}.\n */\nexport default class Interval {\n /**\n * @private\n */\n constructor(config) {\n /**\n * @access private\n */\n this.s = config.start;\n /**\n * @access private\n */\n this.e = config.end;\n /**\n * @access private\n */\n this.invalid = config.invalid || null;\n /**\n * @access private\n */\n this.isLuxonInterval = true;\n }\n\n /**\n * Create an invalid Interval.\n * @param {string} reason - simple string of why this Interval is invalid. Should not contain parameters or anything else data-dependent\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {Interval}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the Interval is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidIntervalError(invalid);\n } else {\n return new Interval({ invalid });\n }\n }\n\n /**\n * Create an Interval from a start DateTime and an end DateTime. Inclusive of the start but not the end.\n * @param {DateTime|Date|Object} start\n * @param {DateTime|Date|Object} end\n * @return {Interval}\n */\n static fromDateTimes(start, end) {\n const builtStart = friendlyDateTime(start),\n builtEnd = friendlyDateTime(end);\n\n const validateError = validateStartEnd(builtStart, builtEnd);\n\n if (validateError == null) {\n return new Interval({\n start: builtStart,\n end: builtEnd,\n });\n } else {\n return validateError;\n }\n }\n\n /**\n * Create an Interval from a start DateTime and a Duration to extend to.\n * @param {DateTime|Date|Object} start\n * @param {Duration|Object|number} duration - the length of the Interval.\n * @return {Interval}\n */\n static after(start, duration) {\n const dur = Duration.fromDurationLike(duration),\n dt = friendlyDateTime(start);\n return Interval.fromDateTimes(dt, dt.plus(dur));\n }\n\n /**\n * Create an Interval from an end DateTime and a Duration to extend backwards to.\n * @param {DateTime|Date|Object} end\n * @param {Duration|Object|number} duration - the length of the Interval.\n * @return {Interval}\n */\n static before(end, duration) {\n const dur = Duration.fromDurationLike(duration),\n dt = friendlyDateTime(end);\n return Interval.fromDateTimes(dt.minus(dur), dt);\n }\n\n /**\n * Create an Interval from an ISO 8601 string.\n * Accepts `/`, `/`, and `/` formats.\n * @param {string} text - the ISO string to parse\n * @param {Object} [opts] - options to pass {@link DateTime#fromISO} and optionally {@link Duration#fromISO}\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @return {Interval}\n */\n static fromISO(text, opts) {\n const [s, e] = (text || \"\").split(\"/\", 2);\n if (s && e) {\n let start, startIsValid;\n try {\n start = DateTime.fromISO(s, opts);\n startIsValid = start.isValid;\n } catch (e) {\n startIsValid = false;\n }\n\n let end, endIsValid;\n try {\n end = DateTime.fromISO(e, opts);\n endIsValid = end.isValid;\n } catch (e) {\n endIsValid = false;\n }\n\n if (startIsValid && endIsValid) {\n return Interval.fromDateTimes(start, end);\n }\n\n if (startIsValid) {\n const dur = Duration.fromISO(e, opts);\n if (dur.isValid) {\n return Interval.after(start, dur);\n }\n } else if (endIsValid) {\n const dur = Duration.fromISO(s, opts);\n if (dur.isValid) {\n return Interval.before(end, dur);\n }\n }\n }\n return Interval.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n\n /**\n * Check if an object is an Interval. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isInterval(o) {\n return (o && o.isLuxonInterval) || false;\n }\n\n /**\n * Returns the start of the Interval\n * @type {DateTime}\n */\n get start() {\n return this.isValid ? this.s : null;\n }\n\n /**\n * Returns the end of the Interval\n * @type {DateTime}\n */\n get end() {\n return this.isValid ? this.e : null;\n }\n\n /**\n * Returns whether this Interval's end is at least its start, meaning that the Interval isn't 'backwards'.\n * @type {boolean}\n */\n get isValid() {\n return this.invalidReason === null;\n }\n\n /**\n * Returns an error code if this Interval is invalid, or null if the Interval is valid\n * @type {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this Interval became invalid, or null if the Interval is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Returns the length of the Interval in the specified unit.\n * @param {string} unit - the unit (such as 'hours' or 'days') to return the length in.\n * @return {number}\n */\n length(unit = \"milliseconds\") {\n return this.isValid ? this.toDuration(...[unit]).get(unit) : NaN;\n }\n\n /**\n * Returns the count of minutes, hours, days, months, or years included in the Interval, even in part.\n * Unlike {@link Interval#length} this counts sections of the calendar, not periods of time, e.g. specifying 'day'\n * asks 'what dates are included in this interval?', not 'how many days long is this interval?'\n * @param {string} [unit='milliseconds'] - the unit of time to count.\n * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; this operation will always use the locale of the start DateTime\n * @return {number}\n */\n count(unit = \"milliseconds\", opts) {\n if (!this.isValid) return NaN;\n const start = this.start.startOf(unit, opts);\n let end;\n if (opts?.useLocaleWeeks) {\n end = this.end.reconfigure({ locale: start.locale });\n } else {\n end = this.end;\n }\n end = end.startOf(unit, opts);\n return Math.floor(end.diff(start, unit).get(unit)) + (end.valueOf() !== this.end.valueOf());\n }\n\n /**\n * Returns whether this Interval's start and end are both in the same unit of time\n * @param {string} unit - the unit of time to check sameness on\n * @return {boolean}\n */\n hasSame(unit) {\n return this.isValid ? this.isEmpty() || this.e.minus(1).hasSame(this.s, unit) : false;\n }\n\n /**\n * Return whether this Interval has the same start and end DateTimes.\n * @return {boolean}\n */\n isEmpty() {\n return this.s.valueOf() === this.e.valueOf();\n }\n\n /**\n * Return whether this Interval's start is after the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n isAfter(dateTime) {\n if (!this.isValid) return false;\n return this.s > dateTime;\n }\n\n /**\n * Return whether this Interval's end is before the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n isBefore(dateTime) {\n if (!this.isValid) return false;\n return this.e <= dateTime;\n }\n\n /**\n * Return whether this Interval contains the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n contains(dateTime) {\n if (!this.isValid) return false;\n return this.s <= dateTime && this.e > dateTime;\n }\n\n /**\n * \"Sets\" the start and/or end dates. Returns a newly-constructed Interval.\n * @param {Object} values - the values to set\n * @param {DateTime} values.start - the starting DateTime\n * @param {DateTime} values.end - the ending DateTime\n * @return {Interval}\n */\n set({ start, end } = {}) {\n if (!this.isValid) return this;\n return Interval.fromDateTimes(start || this.s, end || this.e);\n }\n\n /**\n * Split this Interval at each of the specified DateTimes\n * @param {...DateTime} dateTimes - the unit of time to count.\n * @return {Array}\n */\n splitAt(...dateTimes) {\n if (!this.isValid) return [];\n const sorted = dateTimes\n .map(friendlyDateTime)\n .filter((d) => this.contains(d))\n .sort((a, b) => a.toMillis() - b.toMillis()),\n results = [];\n let { s } = this,\n i = 0;\n\n while (s < this.e) {\n const added = sorted[i] || this.e,\n next = +added > +this.e ? this.e : added;\n results.push(Interval.fromDateTimes(s, next));\n s = next;\n i += 1;\n }\n\n return results;\n }\n\n /**\n * Split this Interval into smaller Intervals, each of the specified length.\n * Left over time is grouped into a smaller interval\n * @param {Duration|Object|number} duration - The length of each resulting interval.\n * @return {Array}\n */\n splitBy(duration) {\n const dur = Duration.fromDurationLike(duration);\n\n if (!this.isValid || !dur.isValid || dur.as(\"milliseconds\") === 0) {\n return [];\n }\n\n let { s } = this,\n idx = 1,\n next;\n\n const results = [];\n while (s < this.e) {\n const added = this.start.plus(dur.mapUnits((x) => x * idx));\n next = +added > +this.e ? this.e : added;\n results.push(Interval.fromDateTimes(s, next));\n s = next;\n idx += 1;\n }\n\n return results;\n }\n\n /**\n * Split this Interval into the specified number of smaller intervals.\n * @param {number} numberOfParts - The number of Intervals to divide the Interval into.\n * @return {Array}\n */\n divideEqually(numberOfParts) {\n if (!this.isValid) return [];\n return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts);\n }\n\n /**\n * Return whether this Interval overlaps with the specified Interval\n * @param {Interval} other\n * @return {boolean}\n */\n overlaps(other) {\n return this.e > other.s && this.s < other.e;\n }\n\n /**\n * Return whether this Interval's end is adjacent to the specified Interval's start.\n * @param {Interval} other\n * @return {boolean}\n */\n abutsStart(other) {\n if (!this.isValid) return false;\n return +this.e === +other.s;\n }\n\n /**\n * Return whether this Interval's start is adjacent to the specified Interval's end.\n * @param {Interval} other\n * @return {boolean}\n */\n abutsEnd(other) {\n if (!this.isValid) return false;\n return +other.e === +this.s;\n }\n\n /**\n * Return whether this Interval engulfs the start and end of the specified Interval.\n * @param {Interval} other\n * @return {boolean}\n */\n engulfs(other) {\n if (!this.isValid) return false;\n return this.s <= other.s && this.e >= other.e;\n }\n\n /**\n * Return whether this Interval has the same start and end as the specified Interval.\n * @param {Interval} other\n * @return {boolean}\n */\n equals(other) {\n if (!this.isValid || !other.isValid) {\n return false;\n }\n\n return this.s.equals(other.s) && this.e.equals(other.e);\n }\n\n /**\n * Return an Interval representing the intersection of this Interval and the specified Interval.\n * Specifically, the resulting Interval has the maximum start time and the minimum end time of the two Intervals.\n * Returns null if the intersection is empty, meaning, the intervals don't intersect.\n * @param {Interval} other\n * @return {Interval}\n */\n intersection(other) {\n if (!this.isValid) return this;\n const s = this.s > other.s ? this.s : other.s,\n e = this.e < other.e ? this.e : other.e;\n\n if (s >= e) {\n return null;\n } else {\n return Interval.fromDateTimes(s, e);\n }\n }\n\n /**\n * Return an Interval representing the union of this Interval and the specified Interval.\n * Specifically, the resulting Interval has the minimum start time and the maximum end time of the two Intervals.\n * @param {Interval} other\n * @return {Interval}\n */\n union(other) {\n if (!this.isValid) return this;\n const s = this.s < other.s ? this.s : other.s,\n e = this.e > other.e ? this.e : other.e;\n return Interval.fromDateTimes(s, e);\n }\n\n /**\n * Merge an array of Intervals into a equivalent minimal set of Intervals.\n * Combines overlapping and adjacent Intervals.\n * @param {Array} intervals\n * @return {Array}\n */\n static merge(intervals) {\n const [found, final] = intervals\n .sort((a, b) => a.s - b.s)\n .reduce(\n ([sofar, current], item) => {\n if (!current) {\n return [sofar, item];\n } else if (current.overlaps(item) || current.abutsStart(item)) {\n return [sofar, current.union(item)];\n } else {\n return [sofar.concat([current]), item];\n }\n },\n [[], null]\n );\n if (final) {\n found.push(final);\n }\n return found;\n }\n\n /**\n * Return an array of Intervals representing the spans of time that only appear in one of the specified Intervals.\n * @param {Array} intervals\n * @return {Array}\n */\n static xor(intervals) {\n let start = null,\n currentCount = 0;\n const results = [],\n ends = intervals.map((i) => [\n { time: i.s, type: \"s\" },\n { time: i.e, type: \"e\" },\n ]),\n flattened = Array.prototype.concat(...ends),\n arr = flattened.sort((a, b) => a.time - b.time);\n\n for (const i of arr) {\n currentCount += i.type === \"s\" ? 1 : -1;\n\n if (currentCount === 1) {\n start = i.time;\n } else {\n if (start && +start !== +i.time) {\n results.push(Interval.fromDateTimes(start, i.time));\n }\n\n start = null;\n }\n }\n\n return Interval.merge(results);\n }\n\n /**\n * Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals.\n * @param {...Interval} intervals\n * @return {Array}\n */\n difference(...intervals) {\n return Interval.xor([this].concat(intervals))\n .map((i) => this.intersection(i))\n .filter((i) => i && !i.isEmpty());\n }\n\n /**\n * Returns a string representation of this Interval appropriate for debugging.\n * @return {string}\n */\n toString() {\n if (!this.isValid) return INVALID;\n return `[${this.s.toISO()} – ${this.e.toISO()})`;\n }\n\n /**\n * Returns a string representation of this Interval appropriate for the REPL.\n * @return {string}\n */\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n if (this.isValid) {\n return `Interval { start: ${this.s.toISO()}, end: ${this.e.toISO()} }`;\n } else {\n return `Interval { Invalid, reason: ${this.invalidReason} }`;\n }\n }\n\n /**\n * Returns a localized string representing this Interval. Accepts the same options as the\n * Intl.DateTimeFormat constructor and any presets defined by Luxon, such as\n * {@link DateTime.DATE_FULL} or {@link DateTime.TIME_SIMPLE}. The exact behavior of this method\n * is browser-specific, but in general it will return an appropriate representation of the\n * Interval in the assigned locale. Defaults to the system's locale if no locale has been\n * specified.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {Object} [formatOpts=DateTime.DATE_SHORT] - Either a DateTime preset or\n * Intl.DateTimeFormat constructor options.\n * @param {Object} opts - Options to override the configuration of the start DateTime.\n * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(); //=> 11/7/2022 – 11/8/2022\n * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL); //=> November 7 – 8, 2022\n * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL, { locale: 'fr-FR' }); //=> 7–8 novembre 2022\n * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString(DateTime.TIME_SIMPLE); //=> 6:00 – 8:00 PM\n * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> Mon, Nov 07, 6:00 – 8:00 p\n * @return {string}\n */\n toLocaleString(formatOpts = Formats.DATE_SHORT, opts = {}) {\n return this.isValid\n ? Formatter.create(this.s.loc.clone(opts), formatOpts).formatInterval(this)\n : INVALID;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Interval.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @param {Object} opts - The same options as {@link DateTime#toISO}\n * @return {string}\n */\n toISO(opts) {\n if (!this.isValid) return INVALID;\n return `${this.s.toISO(opts)}/${this.e.toISO(opts)}`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of date of this Interval.\n * The time components are ignored.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @return {string}\n */\n toISODate() {\n if (!this.isValid) return INVALID;\n return `${this.s.toISODate()}/${this.e.toISODate()}`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of time of this Interval.\n * The date components are ignored.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @param {Object} opts - The same options as {@link DateTime#toISO}\n * @return {string}\n */\n toISOTime(opts) {\n if (!this.isValid) return INVALID;\n return `${this.s.toISOTime(opts)}/${this.e.toISOTime(opts)}`;\n }\n\n /**\n * Returns a string representation of this Interval formatted according to the specified format\n * string. **You may not want this.** See {@link Interval#toLocaleString} for a more flexible\n * formatting tool.\n * @param {string} dateFormat - The format string. This string formats the start and end time.\n * See {@link DateTime#toFormat} for details.\n * @param {Object} opts - Options.\n * @param {string} [opts.separator = ' – '] - A separator to place between the start and end\n * representations.\n * @return {string}\n */\n toFormat(dateFormat, { separator = \" – \" } = {}) {\n if (!this.isValid) return INVALID;\n return `${this.s.toFormat(dateFormat)}${separator}${this.e.toFormat(dateFormat)}`;\n }\n\n /**\n * Return a Duration representing the time spanned by this interval.\n * @param {string|string[]} [unit=['milliseconds']] - the unit or units (such as 'hours' or 'days') to include in the duration.\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @example Interval.fromDateTimes(dt1, dt2).toDuration().toObject() //=> { milliseconds: 88489257 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration('days').toObject() //=> { days: 1.0241812152777778 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes']).toObject() //=> { hours: 24, minutes: 34.82095 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes', 'seconds']).toObject() //=> { hours: 24, minutes: 34, seconds: 49.257 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration('seconds').toObject() //=> { seconds: 88489.257 }\n * @return {Duration}\n */\n toDuration(unit, opts) {\n if (!this.isValid) {\n return Duration.invalid(this.invalidReason);\n }\n return this.e.diff(this.s, unit, opts);\n }\n\n /**\n * Run mapFn on the interval start and end, returning a new Interval from the resulting DateTimes\n * @param {function} mapFn\n * @return {Interval}\n * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.toUTC())\n * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.plus({ hours: 2 }))\n */\n mapEndpoints(mapFn) {\n return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e));\n }\n}\n","import DateTime from \"./datetime.js\";\nimport Settings from \"./settings.js\";\nimport Locale from \"./impl/locale.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\n\nimport { hasLocaleWeekInfo, hasRelative } from \"./impl/util.js\";\n\n/**\n * The Info class contains static methods for retrieving general time and date related data. For example, it has methods for finding out if a time zone has a DST, for listing the months in any supported locale, and for discovering which of Luxon features are available in the current environment.\n */\nexport default class Info {\n /**\n * Return whether the specified zone contains a DST.\n * @param {string|Zone} [zone='local'] - Zone to check. Defaults to the environment's local zone.\n * @return {boolean}\n */\n static hasDST(zone = Settings.defaultZone) {\n const proto = DateTime.now().setZone(zone).set({ month: 12 });\n\n return !zone.isUniversal && proto.offset !== proto.set({ month: 6 }).offset;\n }\n\n /**\n * Return whether the specified zone is a valid IANA specifier.\n * @param {string} zone - Zone to check\n * @return {boolean}\n */\n static isValidIANAZone(zone) {\n return IANAZone.isValidZone(zone);\n }\n\n /**\n * Converts the input into a {@link Zone} instance.\n *\n * * If `input` is already a Zone instance, it is returned unchanged.\n * * If `input` is a string containing a valid time zone name, a Zone instance\n * with that name is returned.\n * * If `input` is a string that doesn't refer to a known time zone, a Zone\n * instance with {@link Zone#isValid} == false is returned.\n * * If `input is a number, a Zone instance with the specified fixed offset\n * in minutes is returned.\n * * If `input` is `null` or `undefined`, the default zone is returned.\n * @param {string|Zone|number} [input] - the value to be converted\n * @return {Zone}\n */\n static normalizeZone(input) {\n return normalizeZone(input, Settings.defaultZone);\n }\n\n /**\n * Get the weekday on which the week starts according to the given locale.\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @returns {number} the start of the week, 1 for Monday through 7 for Sunday\n */\n static getStartOfWeek({ locale = null, locObj = null } = {}) {\n return (locObj || Locale.create(locale)).getStartOfWeek();\n }\n\n /**\n * Get the minimum number of days necessary in a week before it is considered part of the next year according\n * to the given locale.\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @returns {number}\n */\n static getMinimumDaysInFirstWeek({ locale = null, locObj = null } = {}) {\n return (locObj || Locale.create(locale)).getMinDaysInFirstWeek();\n }\n\n /**\n * Get the weekdays, which are considered the weekend according to the given locale\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @returns {number[]} an array of weekdays, 1 for Monday through 7 for Sunday\n */\n static getWeekendWeekdays({ locale = null, locObj = null } = {}) {\n // copy the array, because we cache it internally\n return (locObj || Locale.create(locale)).getWeekendDays().slice();\n }\n\n /**\n * Return an array of standalone month names.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @param {string} [opts.outputCalendar='gregory'] - the calendar\n * @example Info.months()[0] //=> 'January'\n * @example Info.months('short')[0] //=> 'Jan'\n * @example Info.months('numeric')[0] //=> '1'\n * @example Info.months('short', { locale: 'fr-CA' } )[0] //=> 'janv.'\n * @example Info.months('numeric', { locale: 'ar' })[0] //=> '١'\n * @example Info.months('long', { outputCalendar: 'islamic' })[0] //=> 'Rabiʻ I'\n * @return {Array}\n */\n static months(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length);\n }\n\n /**\n * Return an array of format month names.\n * Format months differ from standalone months in that they're meant to appear next to the day of the month. In some languages, that\n * changes the string.\n * See {@link Info#months}\n * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @param {string} [opts.outputCalendar='gregory'] - the calendar\n * @return {Array}\n */\n static monthsFormat(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length, true);\n }\n\n /**\n * Return an array of standalone week names.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {string} [length='long'] - the length of the weekday representation, such as \"narrow\", \"short\", \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @example Info.weekdays()[0] //=> 'Monday'\n * @example Info.weekdays('short')[0] //=> 'Mon'\n * @example Info.weekdays('short', { locale: 'fr-CA' })[0] //=> 'lun.'\n * @example Info.weekdays('short', { locale: 'ar' })[0] //=> 'الاثنين'\n * @return {Array}\n */\n static weekdays(length = \"long\", { locale = null, numberingSystem = null, locObj = null } = {}) {\n return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length);\n }\n\n /**\n * Return an array of format week names.\n * Format weekdays differ from standalone weekdays in that they're meant to appear next to more date information. In some languages, that\n * changes the string.\n * See {@link Info#weekdays}\n * @param {string} [length='long'] - the length of the month representation, such as \"narrow\", \"short\", \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale=null] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @return {Array}\n */\n static weekdaysFormat(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length, true);\n }\n\n /**\n * Return an array of meridiems.\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @example Info.meridiems() //=> [ 'AM', 'PM' ]\n * @example Info.meridiems({ locale: 'my' }) //=> [ 'နံနက်', 'ညနေ' ]\n * @return {Array}\n */\n static meridiems({ locale = null } = {}) {\n return Locale.create(locale).meridiems();\n }\n\n /**\n * Return an array of eras, such as ['BC', 'AD']. The locale can be specified, but the calendar system is always Gregorian.\n * @param {string} [length='short'] - the length of the era representation, such as \"short\" or \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @example Info.eras() //=> [ 'BC', 'AD' ]\n * @example Info.eras('long') //=> [ 'Before Christ', 'Anno Domini' ]\n * @example Info.eras('long', { locale: 'fr' }) //=> [ 'avant Jésus-Christ', 'après Jésus-Christ' ]\n * @return {Array}\n */\n static eras(length = \"short\", { locale = null } = {}) {\n return Locale.create(locale, null, \"gregory\").eras(length);\n }\n\n /**\n * Return the set of available features in this environment.\n * Some features of Luxon are not available in all environments. For example, on older browsers, relative time formatting support is not available. Use this function to figure out if that's the case.\n * Keys:\n * * `relative`: whether this environment supports relative time formatting\n * * `localeWeek`: whether this environment supports different weekdays for the start of the week based on the locale\n * @example Info.features() //=> { relative: false, localeWeek: true }\n * @return {Object}\n */\n static features() {\n return { relative: hasRelative(), localeWeek: hasLocaleWeekInfo() };\n }\n}\n","import Duration from \"../duration.js\";\n\nfunction dayDiff(earlier, later) {\n const utcDayStart = (dt) => dt.toUTC(0, { keepLocalTime: true }).startOf(\"day\").valueOf(),\n ms = utcDayStart(later) - utcDayStart(earlier);\n return Math.floor(Duration.fromMillis(ms).as(\"days\"));\n}\n\nfunction highOrderDiffs(cursor, later, units) {\n const differs = [\n [\"years\", (a, b) => b.year - a.year],\n [\"quarters\", (a, b) => b.quarter - a.quarter + (b.year - a.year) * 4],\n [\"months\", (a, b) => b.month - a.month + (b.year - a.year) * 12],\n [\n \"weeks\",\n (a, b) => {\n const days = dayDiff(a, b);\n return (days - (days % 7)) / 7;\n },\n ],\n [\"days\", dayDiff],\n ];\n\n const results = {};\n const earlier = cursor;\n let lowestOrder, highWater;\n\n /* This loop tries to diff using larger units first.\n If we overshoot, we backtrack and try the next smaller unit.\n \"cursor\" starts out at the earlier timestamp and moves closer and closer to \"later\"\n as we use smaller and smaller units.\n highWater keeps track of where we would be if we added one more of the smallest unit,\n this is used later to potentially convert any difference smaller than the smallest higher order unit\n into a fraction of that smallest higher order unit\n */\n for (const [unit, differ] of differs) {\n if (units.indexOf(unit) >= 0) {\n lowestOrder = unit;\n\n results[unit] = differ(cursor, later);\n highWater = earlier.plus(results);\n\n if (highWater > later) {\n // we overshot the end point, backtrack cursor by 1\n results[unit]--;\n cursor = earlier.plus(results);\n\n // if we are still overshooting now, we need to backtrack again\n // this happens in certain situations when diffing times in different zones,\n // because this calculation ignores time zones\n if (cursor > later) {\n // keep the \"overshot by 1\" around as highWater\n highWater = cursor;\n // backtrack cursor by 1\n results[unit]--;\n cursor = earlier.plus(results);\n }\n } else {\n cursor = highWater;\n }\n }\n }\n\n return [cursor, results, highWater, lowestOrder];\n}\n\nexport default function (earlier, later, units, opts) {\n let [cursor, results, highWater, lowestOrder] = highOrderDiffs(earlier, later, units);\n\n const remainingMillis = later - cursor;\n\n const lowerOrderUnits = units.filter(\n (u) => [\"hours\", \"minutes\", \"seconds\", \"milliseconds\"].indexOf(u) >= 0\n );\n\n if (lowerOrderUnits.length === 0) {\n if (highWater < later) {\n highWater = cursor.plus({ [lowestOrder]: 1 });\n }\n\n if (highWater !== cursor) {\n results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor);\n }\n }\n\n const duration = Duration.fromObject(results, opts);\n\n if (lowerOrderUnits.length > 0) {\n return Duration.fromMillis(remainingMillis, opts)\n .shiftTo(...lowerOrderUnits)\n .plus(duration);\n } else {\n return duration;\n }\n}\n","const numberingSystems = {\n arab: \"[\\u0660-\\u0669]\",\n arabext: \"[\\u06F0-\\u06F9]\",\n bali: \"[\\u1B50-\\u1B59]\",\n beng: \"[\\u09E6-\\u09EF]\",\n deva: \"[\\u0966-\\u096F]\",\n fullwide: \"[\\uFF10-\\uFF19]\",\n gujr: \"[\\u0AE6-\\u0AEF]\",\n hanidec: \"[〇|一|二|三|四|五|六|七|八|九]\",\n khmr: \"[\\u17E0-\\u17E9]\",\n knda: \"[\\u0CE6-\\u0CEF]\",\n laoo: \"[\\u0ED0-\\u0ED9]\",\n limb: \"[\\u1946-\\u194F]\",\n mlym: \"[\\u0D66-\\u0D6F]\",\n mong: \"[\\u1810-\\u1819]\",\n mymr: \"[\\u1040-\\u1049]\",\n orya: \"[\\u0B66-\\u0B6F]\",\n tamldec: \"[\\u0BE6-\\u0BEF]\",\n telu: \"[\\u0C66-\\u0C6F]\",\n thai: \"[\\u0E50-\\u0E59]\",\n tibt: \"[\\u0F20-\\u0F29]\",\n latn: \"\\\\d\",\n};\n\nconst numberingSystemsUTF16 = {\n arab: [1632, 1641],\n arabext: [1776, 1785],\n bali: [6992, 7001],\n beng: [2534, 2543],\n deva: [2406, 2415],\n fullwide: [65296, 65303],\n gujr: [2790, 2799],\n khmr: [6112, 6121],\n knda: [3302, 3311],\n laoo: [3792, 3801],\n limb: [6470, 6479],\n mlym: [3430, 3439],\n mong: [6160, 6169],\n mymr: [4160, 4169],\n orya: [2918, 2927],\n tamldec: [3046, 3055],\n telu: [3174, 3183],\n thai: [3664, 3673],\n tibt: [3872, 3881],\n};\n\nconst hanidecChars = numberingSystems.hanidec.replace(/[\\[|\\]]/g, \"\").split(\"\");\n\nexport function parseDigits(str) {\n let value = parseInt(str, 10);\n if (isNaN(value)) {\n value = \"\";\n for (let i = 0; i < str.length; i++) {\n const code = str.charCodeAt(i);\n\n if (str[i].search(numberingSystems.hanidec) !== -1) {\n value += hanidecChars.indexOf(str[i]);\n } else {\n for (const key in numberingSystemsUTF16) {\n const [min, max] = numberingSystemsUTF16[key];\n if (code >= min && code <= max) {\n value += code - min;\n }\n }\n }\n }\n return parseInt(value, 10);\n } else {\n return value;\n }\n}\n\nexport function digitRegex({ numberingSystem }, append = \"\") {\n return new RegExp(`${numberingSystems[numberingSystem || \"latn\"]}${append}`);\n}\n","import { parseMillis, isUndefined, untruncateYear, signedOffset, hasOwnProperty } from \"./util.js\";\nimport Formatter from \"./formatter.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport DateTime from \"../datetime.js\";\nimport { digitRegex, parseDigits } from \"./digits.js\";\nimport { ConflictingSpecificationError } from \"../errors.js\";\n\nconst MISSING_FTP = \"missing Intl.DateTimeFormat.formatToParts support\";\n\nfunction intUnit(regex, post = (i) => i) {\n return { regex, deser: ([s]) => post(parseDigits(s)) };\n}\n\nconst NBSP = String.fromCharCode(160);\nconst spaceOrNBSP = `[ ${NBSP}]`;\nconst spaceOrNBSPRegExp = new RegExp(spaceOrNBSP, \"g\");\n\nfunction fixListRegex(s) {\n // make dots optional and also make them literal\n // make space and non breakable space characters interchangeable\n return s.replace(/\\./g, \"\\\\.?\").replace(spaceOrNBSPRegExp, spaceOrNBSP);\n}\n\nfunction stripInsensitivities(s) {\n return s\n .replace(/\\./g, \"\") // ignore dots that were made optional\n .replace(spaceOrNBSPRegExp, \" \") // interchange space and nbsp\n .toLowerCase();\n}\n\nfunction oneOf(strings, startIndex) {\n if (strings === null) {\n return null;\n } else {\n return {\n regex: RegExp(strings.map(fixListRegex).join(\"|\")),\n deser: ([s]) =>\n strings.findIndex((i) => stripInsensitivities(s) === stripInsensitivities(i)) + startIndex,\n };\n }\n}\n\nfunction offset(regex, groups) {\n return { regex, deser: ([, h, m]) => signedOffset(h, m), groups };\n}\n\nfunction simple(regex) {\n return { regex, deser: ([s]) => s };\n}\n\nfunction escapeToken(value) {\n return value.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\");\n}\n\n/**\n * @param token\n * @param {Locale} loc\n */\nfunction unitForToken(token, loc) {\n const one = digitRegex(loc),\n two = digitRegex(loc, \"{2}\"),\n three = digitRegex(loc, \"{3}\"),\n four = digitRegex(loc, \"{4}\"),\n six = digitRegex(loc, \"{6}\"),\n oneOrTwo = digitRegex(loc, \"{1,2}\"),\n oneToThree = digitRegex(loc, \"{1,3}\"),\n oneToSix = digitRegex(loc, \"{1,6}\"),\n oneToNine = digitRegex(loc, \"{1,9}\"),\n twoToFour = digitRegex(loc, \"{2,4}\"),\n fourToSix = digitRegex(loc, \"{4,6}\"),\n literal = (t) => ({ regex: RegExp(escapeToken(t.val)), deser: ([s]) => s, literal: true }),\n unitate = (t) => {\n if (token.literal) {\n return literal(t);\n }\n switch (t.val) {\n // era\n case \"G\":\n return oneOf(loc.eras(\"short\"), 0);\n case \"GG\":\n return oneOf(loc.eras(\"long\"), 0);\n // years\n case \"y\":\n return intUnit(oneToSix);\n case \"yy\":\n return intUnit(twoToFour, untruncateYear);\n case \"yyyy\":\n return intUnit(four);\n case \"yyyyy\":\n return intUnit(fourToSix);\n case \"yyyyyy\":\n return intUnit(six);\n // months\n case \"M\":\n return intUnit(oneOrTwo);\n case \"MM\":\n return intUnit(two);\n case \"MMM\":\n return oneOf(loc.months(\"short\", true), 1);\n case \"MMMM\":\n return oneOf(loc.months(\"long\", true), 1);\n case \"L\":\n return intUnit(oneOrTwo);\n case \"LL\":\n return intUnit(two);\n case \"LLL\":\n return oneOf(loc.months(\"short\", false), 1);\n case \"LLLL\":\n return oneOf(loc.months(\"long\", false), 1);\n // dates\n case \"d\":\n return intUnit(oneOrTwo);\n case \"dd\":\n return intUnit(two);\n // ordinals\n case \"o\":\n return intUnit(oneToThree);\n case \"ooo\":\n return intUnit(three);\n // time\n case \"HH\":\n return intUnit(two);\n case \"H\":\n return intUnit(oneOrTwo);\n case \"hh\":\n return intUnit(two);\n case \"h\":\n return intUnit(oneOrTwo);\n case \"mm\":\n return intUnit(two);\n case \"m\":\n return intUnit(oneOrTwo);\n case \"q\":\n return intUnit(oneOrTwo);\n case \"qq\":\n return intUnit(two);\n case \"s\":\n return intUnit(oneOrTwo);\n case \"ss\":\n return intUnit(two);\n case \"S\":\n return intUnit(oneToThree);\n case \"SSS\":\n return intUnit(three);\n case \"u\":\n return simple(oneToNine);\n case \"uu\":\n return simple(oneOrTwo);\n case \"uuu\":\n return intUnit(one);\n // meridiem\n case \"a\":\n return oneOf(loc.meridiems(), 0);\n // weekYear (k)\n case \"kkkk\":\n return intUnit(four);\n case \"kk\":\n return intUnit(twoToFour, untruncateYear);\n // weekNumber (W)\n case \"W\":\n return intUnit(oneOrTwo);\n case \"WW\":\n return intUnit(two);\n // weekdays\n case \"E\":\n case \"c\":\n return intUnit(one);\n case \"EEE\":\n return oneOf(loc.weekdays(\"short\", false), 1);\n case \"EEEE\":\n return oneOf(loc.weekdays(\"long\", false), 1);\n case \"ccc\":\n return oneOf(loc.weekdays(\"short\", true), 1);\n case \"cccc\":\n return oneOf(loc.weekdays(\"long\", true), 1);\n // offset/zone\n case \"Z\":\n case \"ZZ\":\n return offset(new RegExp(`([+-]${oneOrTwo.source})(?::(${two.source}))?`), 2);\n case \"ZZZ\":\n return offset(new RegExp(`([+-]${oneOrTwo.source})(${two.source})?`), 2);\n // we don't support ZZZZ (PST) or ZZZZZ (Pacific Standard Time) in parsing\n // because we don't have any way to figure out what they are\n case \"z\":\n return simple(/[a-z_+-/]{1,256}?/i);\n // this special-case \"token\" represents a place where a macro-token expanded into a white-space literal\n // in this case we accept any non-newline white-space\n case \" \":\n return simple(/[^\\S\\n\\r]/);\n default:\n return literal(t);\n }\n };\n\n const unit = unitate(token) || {\n invalidReason: MISSING_FTP,\n };\n\n unit.token = token;\n\n return unit;\n}\n\nconst partTypeStyleToTokenVal = {\n year: {\n \"2-digit\": \"yy\",\n numeric: \"yyyyy\",\n },\n month: {\n numeric: \"M\",\n \"2-digit\": \"MM\",\n short: \"MMM\",\n long: \"MMMM\",\n },\n day: {\n numeric: \"d\",\n \"2-digit\": \"dd\",\n },\n weekday: {\n short: \"EEE\",\n long: \"EEEE\",\n },\n dayperiod: \"a\",\n dayPeriod: \"a\",\n hour12: {\n numeric: \"h\",\n \"2-digit\": \"hh\",\n },\n hour24: {\n numeric: \"H\",\n \"2-digit\": \"HH\",\n },\n minute: {\n numeric: \"m\",\n \"2-digit\": \"mm\",\n },\n second: {\n numeric: \"s\",\n \"2-digit\": \"ss\",\n },\n timeZoneName: {\n long: \"ZZZZZ\",\n short: \"ZZZ\",\n },\n};\n\nfunction tokenForPart(part, formatOpts, resolvedOpts) {\n const { type, value } = part;\n\n if (type === \"literal\") {\n const isSpace = /^\\s+$/.test(value);\n return {\n literal: !isSpace,\n val: isSpace ? \" \" : value,\n };\n }\n\n const style = formatOpts[type];\n\n // The user might have explicitly specified hour12 or hourCycle\n // if so, respect their decision\n // if not, refer back to the resolvedOpts, which are based on the locale\n let actualType = type;\n if (type === \"hour\") {\n if (formatOpts.hour12 != null) {\n actualType = formatOpts.hour12 ? \"hour12\" : \"hour24\";\n } else if (formatOpts.hourCycle != null) {\n if (formatOpts.hourCycle === \"h11\" || formatOpts.hourCycle === \"h12\") {\n actualType = \"hour12\";\n } else {\n actualType = \"hour24\";\n }\n } else {\n // tokens only differentiate between 24 hours or not,\n // so we do not need to check hourCycle here, which is less supported anyways\n actualType = resolvedOpts.hour12 ? \"hour12\" : \"hour24\";\n }\n }\n let val = partTypeStyleToTokenVal[actualType];\n if (typeof val === \"object\") {\n val = val[style];\n }\n\n if (val) {\n return {\n literal: false,\n val,\n };\n }\n\n return undefined;\n}\n\nfunction buildRegex(units) {\n const re = units.map((u) => u.regex).reduce((f, r) => `${f}(${r.source})`, \"\");\n return [`^${re}$`, units];\n}\n\nfunction match(input, regex, handlers) {\n const matches = input.match(regex);\n\n if (matches) {\n const all = {};\n let matchIndex = 1;\n for (const i in handlers) {\n if (hasOwnProperty(handlers, i)) {\n const h = handlers[i],\n groups = h.groups ? h.groups + 1 : 1;\n if (!h.literal && h.token) {\n all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups));\n }\n matchIndex += groups;\n }\n }\n return [matches, all];\n } else {\n return [matches, {}];\n }\n}\n\nfunction dateTimeFromMatches(matches) {\n const toField = (token) => {\n switch (token) {\n case \"S\":\n return \"millisecond\";\n case \"s\":\n return \"second\";\n case \"m\":\n return \"minute\";\n case \"h\":\n case \"H\":\n return \"hour\";\n case \"d\":\n return \"day\";\n case \"o\":\n return \"ordinal\";\n case \"L\":\n case \"M\":\n return \"month\";\n case \"y\":\n return \"year\";\n case \"E\":\n case \"c\":\n return \"weekday\";\n case \"W\":\n return \"weekNumber\";\n case \"k\":\n return \"weekYear\";\n case \"q\":\n return \"quarter\";\n default:\n return null;\n }\n };\n\n let zone = null;\n let specificOffset;\n if (!isUndefined(matches.z)) {\n zone = IANAZone.create(matches.z);\n }\n\n if (!isUndefined(matches.Z)) {\n if (!zone) {\n zone = new FixedOffsetZone(matches.Z);\n }\n specificOffset = matches.Z;\n }\n\n if (!isUndefined(matches.q)) {\n matches.M = (matches.q - 1) * 3 + 1;\n }\n\n if (!isUndefined(matches.h)) {\n if (matches.h < 12 && matches.a === 1) {\n matches.h += 12;\n } else if (matches.h === 12 && matches.a === 0) {\n matches.h = 0;\n }\n }\n\n if (matches.G === 0 && matches.y) {\n matches.y = -matches.y;\n }\n\n if (!isUndefined(matches.u)) {\n matches.S = parseMillis(matches.u);\n }\n\n const vals = Object.keys(matches).reduce((r, k) => {\n const f = toField(k);\n if (f) {\n r[f] = matches[k];\n }\n\n return r;\n }, {});\n\n return [vals, zone, specificOffset];\n}\n\nlet dummyDateTimeCache = null;\n\nfunction getDummyDateTime() {\n if (!dummyDateTimeCache) {\n dummyDateTimeCache = DateTime.fromMillis(1555555555555);\n }\n\n return dummyDateTimeCache;\n}\n\nfunction maybeExpandMacroToken(token, locale) {\n if (token.literal) {\n return token;\n }\n\n const formatOpts = Formatter.macroTokenToFormatOpts(token.val);\n const tokens = formatOptsToTokens(formatOpts, locale);\n\n if (tokens == null || tokens.includes(undefined)) {\n return token;\n }\n\n return tokens;\n}\n\nexport function expandMacroTokens(tokens, locale) {\n return Array.prototype.concat(...tokens.map((t) => maybeExpandMacroToken(t, locale)));\n}\n\n/**\n * @private\n */\n\nexport function explainFromTokens(locale, input, format) {\n const tokens = expandMacroTokens(Formatter.parseFormat(format), locale),\n units = tokens.map((t) => unitForToken(t, locale)),\n disqualifyingUnit = units.find((t) => t.invalidReason);\n\n if (disqualifyingUnit) {\n return { input, tokens, invalidReason: disqualifyingUnit.invalidReason };\n } else {\n const [regexString, handlers] = buildRegex(units),\n regex = RegExp(regexString, \"i\"),\n [rawMatches, matches] = match(input, regex, handlers),\n [result, zone, specificOffset] = matches\n ? dateTimeFromMatches(matches)\n : [null, null, undefined];\n if (hasOwnProperty(matches, \"a\") && hasOwnProperty(matches, \"H\")) {\n throw new ConflictingSpecificationError(\n \"Can't include meridiem when specifying 24-hour format\"\n );\n }\n return { input, tokens, regex, rawMatches, matches, result, zone, specificOffset };\n }\n}\n\nexport function parseFromTokens(locale, input, format) {\n const { result, zone, specificOffset, invalidReason } = explainFromTokens(locale, input, format);\n return [result, zone, specificOffset, invalidReason];\n}\n\nexport function formatOptsToTokens(formatOpts, locale) {\n if (!formatOpts) {\n return null;\n }\n\n const formatter = Formatter.create(locale, formatOpts);\n const df = formatter.dtFormatter(getDummyDateTime());\n const parts = df.formatToParts();\n const resolvedOpts = df.resolvedOptions();\n return parts.map((p) => tokenForPart(p, formatOpts, resolvedOpts));\n}\n","import Duration from \"./duration.js\";\nimport Interval from \"./interval.js\";\nimport Settings from \"./settings.js\";\nimport Info from \"./info.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport FixedOffsetZone from \"./zones/fixedOffsetZone.js\";\nimport Locale from \"./impl/locale.js\";\nimport {\n isUndefined,\n maybeArray,\n isDate,\n isNumber,\n bestBy,\n daysInMonth,\n daysInYear,\n isLeapYear,\n weeksInWeekYear,\n normalizeObject,\n roundTo,\n objToLocalTS,\n padStart,\n} from \"./impl/util.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\nimport diff from \"./impl/diff.js\";\nimport { parseRFC2822Date, parseISODate, parseHTTPDate, parseSQL } from \"./impl/regexParser.js\";\nimport {\n parseFromTokens,\n explainFromTokens,\n formatOptsToTokens,\n expandMacroTokens,\n} from \"./impl/tokenParser.js\";\nimport {\n gregorianToWeek,\n weekToGregorian,\n gregorianToOrdinal,\n ordinalToGregorian,\n hasInvalidGregorianData,\n hasInvalidWeekData,\n hasInvalidOrdinalData,\n hasInvalidTimeData,\n usesLocalWeekValues,\n isoWeekdayToLocal,\n} from \"./impl/conversions.js\";\nimport * as Formats from \"./impl/formats.js\";\nimport {\n InvalidArgumentError,\n ConflictingSpecificationError,\n InvalidUnitError,\n InvalidDateTimeError,\n} from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\n\nconst INVALID = \"Invalid DateTime\";\nconst MAX_DATE = 8.64e15;\n\nfunction unsupportedZone(zone) {\n return new Invalid(\"unsupported zone\", `the zone \"${zone.name}\" is not supported`);\n}\n\n// we cache week data on the DT object and this intermediates the cache\n/**\n * @param {DateTime} dt\n */\nfunction possiblyCachedWeekData(dt) {\n if (dt.weekData === null) {\n dt.weekData = gregorianToWeek(dt.c);\n }\n return dt.weekData;\n}\n\n/**\n * @param {DateTime} dt\n */\nfunction possiblyCachedLocalWeekData(dt) {\n if (dt.localWeekData === null) {\n dt.localWeekData = gregorianToWeek(\n dt.c,\n dt.loc.getMinDaysInFirstWeek(),\n dt.loc.getStartOfWeek()\n );\n }\n return dt.localWeekData;\n}\n\n// clone really means, \"make a new object with these modifications\". all \"setters\" really use this\n// to create a new object while only changing some of the properties\nfunction clone(inst, alts) {\n const current = {\n ts: inst.ts,\n zone: inst.zone,\n c: inst.c,\n o: inst.o,\n loc: inst.loc,\n invalid: inst.invalid,\n };\n return new DateTime({ ...current, ...alts, old: current });\n}\n\n// find the right offset a given local time. The o input is our guess, which determines which\n// offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST)\nfunction fixOffset(localTS, o, tz) {\n // Our UTC time is just a guess because our offset is just a guess\n let utcGuess = localTS - o * 60 * 1000;\n\n // Test whether the zone matches the offset for this ts\n const o2 = tz.offset(utcGuess);\n\n // If so, offset didn't change and we're done\n if (o === o2) {\n return [utcGuess, o];\n }\n\n // If not, change the ts by the difference in the offset\n utcGuess -= (o2 - o) * 60 * 1000;\n\n // If that gives us the local time we want, we're done\n const o3 = tz.offset(utcGuess);\n if (o2 === o3) {\n return [utcGuess, o2];\n }\n\n // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time\n return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)];\n}\n\n// convert an epoch timestamp into a calendar object with the given offset\nfunction tsToObj(ts, offset) {\n ts += offset * 60 * 1000;\n\n const d = new Date(ts);\n\n return {\n year: d.getUTCFullYear(),\n month: d.getUTCMonth() + 1,\n day: d.getUTCDate(),\n hour: d.getUTCHours(),\n minute: d.getUTCMinutes(),\n second: d.getUTCSeconds(),\n millisecond: d.getUTCMilliseconds(),\n };\n}\n\n// convert a calendar object to a epoch timestamp\nfunction objToTS(obj, offset, zone) {\n return fixOffset(objToLocalTS(obj), offset, zone);\n}\n\n// create a new DT instance by adding a duration, adjusting for DSTs\nfunction adjustTime(inst, dur) {\n const oPre = inst.o,\n year = inst.c.year + Math.trunc(dur.years),\n month = inst.c.month + Math.trunc(dur.months) + Math.trunc(dur.quarters) * 3,\n c = {\n ...inst.c,\n year,\n month,\n day:\n Math.min(inst.c.day, daysInMonth(year, month)) +\n Math.trunc(dur.days) +\n Math.trunc(dur.weeks) * 7,\n },\n millisToAdd = Duration.fromObject({\n years: dur.years - Math.trunc(dur.years),\n quarters: dur.quarters - Math.trunc(dur.quarters),\n months: dur.months - Math.trunc(dur.months),\n weeks: dur.weeks - Math.trunc(dur.weeks),\n days: dur.days - Math.trunc(dur.days),\n hours: dur.hours,\n minutes: dur.minutes,\n seconds: dur.seconds,\n milliseconds: dur.milliseconds,\n }).as(\"milliseconds\"),\n localTS = objToLocalTS(c);\n\n let [ts, o] = fixOffset(localTS, oPre, inst.zone);\n\n if (millisToAdd !== 0) {\n ts += millisToAdd;\n // that could have changed the offset by going over a DST, but we want to keep the ts the same\n o = inst.zone.offset(ts);\n }\n\n return { ts, o };\n}\n\n// helper useful in turning the results of parsing into real dates\n// by handling the zone options\nfunction parseDataToDateTime(parsed, parsedZone, opts, format, text, specificOffset) {\n const { setZone, zone } = opts;\n if ((parsed && Object.keys(parsed).length !== 0) || parsedZone) {\n const interpretationZone = parsedZone || zone,\n inst = DateTime.fromObject(parsed, {\n ...opts,\n zone: interpretationZone,\n specificOffset,\n });\n return setZone ? inst : inst.setZone(zone);\n } else {\n return DateTime.invalid(\n new Invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ${format}`)\n );\n }\n}\n\n// if you want to output a technical format (e.g. RFC 2822), this helper\n// helps handle the details\nfunction toTechFormat(dt, format, allowZ = true) {\n return dt.isValid\n ? Formatter.create(Locale.create(\"en-US\"), {\n allowZ,\n forceSimple: true,\n }).formatDateTimeFromString(dt, format)\n : null;\n}\n\nfunction toISODate(o, extended) {\n const longFormat = o.c.year > 9999 || o.c.year < 0;\n let c = \"\";\n if (longFormat && o.c.year >= 0) c += \"+\";\n c += padStart(o.c.year, longFormat ? 6 : 4);\n\n if (extended) {\n c += \"-\";\n c += padStart(o.c.month);\n c += \"-\";\n c += padStart(o.c.day);\n } else {\n c += padStart(o.c.month);\n c += padStart(o.c.day);\n }\n return c;\n}\n\nfunction toISOTime(\n o,\n extended,\n suppressSeconds,\n suppressMilliseconds,\n includeOffset,\n extendedZone\n) {\n let c = padStart(o.c.hour);\n if (extended) {\n c += \":\";\n c += padStart(o.c.minute);\n if (o.c.millisecond !== 0 || o.c.second !== 0 || !suppressSeconds) {\n c += \":\";\n }\n } else {\n c += padStart(o.c.minute);\n }\n\n if (o.c.millisecond !== 0 || o.c.second !== 0 || !suppressSeconds) {\n c += padStart(o.c.second);\n\n if (o.c.millisecond !== 0 || !suppressMilliseconds) {\n c += \".\";\n c += padStart(o.c.millisecond, 3);\n }\n }\n\n if (includeOffset) {\n if (o.isOffsetFixed && o.offset === 0 && !extendedZone) {\n c += \"Z\";\n } else if (o.o < 0) {\n c += \"-\";\n c += padStart(Math.trunc(-o.o / 60));\n c += \":\";\n c += padStart(Math.trunc(-o.o % 60));\n } else {\n c += \"+\";\n c += padStart(Math.trunc(o.o / 60));\n c += \":\";\n c += padStart(Math.trunc(o.o % 60));\n }\n }\n\n if (extendedZone) {\n c += \"[\" + o.zone.ianaName + \"]\";\n }\n return c;\n}\n\n// defaults for unspecified units in the supported calendars\nconst defaultUnitValues = {\n month: 1,\n day: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n },\n defaultWeekUnitValues = {\n weekNumber: 1,\n weekday: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n },\n defaultOrdinalUnitValues = {\n ordinal: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n };\n\n// Units in the supported calendars, sorted by bigness\nconst orderedUnits = [\"year\", \"month\", \"day\", \"hour\", \"minute\", \"second\", \"millisecond\"],\n orderedWeekUnits = [\n \"weekYear\",\n \"weekNumber\",\n \"weekday\",\n \"hour\",\n \"minute\",\n \"second\",\n \"millisecond\",\n ],\n orderedOrdinalUnits = [\"year\", \"ordinal\", \"hour\", \"minute\", \"second\", \"millisecond\"];\n\n// standardize case and plurality in units\nfunction normalizeUnit(unit) {\n const normalized = {\n year: \"year\",\n years: \"year\",\n month: \"month\",\n months: \"month\",\n day: \"day\",\n days: \"day\",\n hour: \"hour\",\n hours: \"hour\",\n minute: \"minute\",\n minutes: \"minute\",\n quarter: \"quarter\",\n quarters: \"quarter\",\n second: \"second\",\n seconds: \"second\",\n millisecond: \"millisecond\",\n milliseconds: \"millisecond\",\n weekday: \"weekday\",\n weekdays: \"weekday\",\n weeknumber: \"weekNumber\",\n weeksnumber: \"weekNumber\",\n weeknumbers: \"weekNumber\",\n weekyear: \"weekYear\",\n weekyears: \"weekYear\",\n ordinal: \"ordinal\",\n }[unit.toLowerCase()];\n\n if (!normalized) throw new InvalidUnitError(unit);\n\n return normalized;\n}\n\nfunction normalizeUnitWithLocalWeeks(unit) {\n switch (unit.toLowerCase()) {\n case \"localweekday\":\n case \"localweekdays\":\n return \"localWeekday\";\n case \"localweeknumber\":\n case \"localweeknumbers\":\n return \"localWeekNumber\";\n case \"localweekyear\":\n case \"localweekyears\":\n return \"localWeekYear\";\n default:\n return normalizeUnit(unit);\n }\n}\n\n// this is a dumbed down version of fromObject() that runs about 60% faster\n// but doesn't do any validation, makes a bunch of assumptions about what units\n// are present, and so on.\nfunction quickDT(obj, opts) {\n const zone = normalizeZone(opts.zone, Settings.defaultZone),\n loc = Locale.fromObject(opts),\n tsNow = Settings.now();\n\n let ts, o;\n\n // assume we have the higher-order units\n if (!isUndefined(obj.year)) {\n for (const u of orderedUnits) {\n if (isUndefined(obj[u])) {\n obj[u] = defaultUnitValues[u];\n }\n }\n\n const invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj);\n if (invalid) {\n return DateTime.invalid(invalid);\n }\n\n const offsetProvis = zone.offset(tsNow);\n [ts, o] = objToTS(obj, offsetProvis, zone);\n } else {\n ts = tsNow;\n }\n\n return new DateTime({ ts, zone, loc, o });\n}\n\nfunction diffRelative(start, end, opts) {\n const round = isUndefined(opts.round) ? true : opts.round,\n format = (c, unit) => {\n c = roundTo(c, round || opts.calendary ? 0 : 2, true);\n const formatter = end.loc.clone(opts).relFormatter(opts);\n return formatter.format(c, unit);\n },\n differ = (unit) => {\n if (opts.calendary) {\n if (!end.hasSame(start, unit)) {\n return end.startOf(unit).diff(start.startOf(unit), unit).get(unit);\n } else return 0;\n } else {\n return end.diff(start, unit).get(unit);\n }\n };\n\n if (opts.unit) {\n return format(differ(opts.unit), opts.unit);\n }\n\n for (const unit of opts.units) {\n const count = differ(unit);\n if (Math.abs(count) >= 1) {\n return format(count, unit);\n }\n }\n return format(start > end ? -0 : 0, opts.units[opts.units.length - 1]);\n}\n\nfunction lastOpts(argList) {\n let opts = {},\n args;\n if (argList.length > 0 && typeof argList[argList.length - 1] === \"object\") {\n opts = argList[argList.length - 1];\n args = Array.from(argList).slice(0, argList.length - 1);\n } else {\n args = Array.from(argList);\n }\n return [opts, args];\n}\n\n/**\n * A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them.\n *\n * A DateTime comprises of:\n * * A timestamp. Each DateTime instance refers to a specific millisecond of the Unix epoch.\n * * A time zone. Each instance is considered in the context of a specific zone (by default the local system's zone).\n * * Configuration properties that effect how output strings are formatted, such as `locale`, `numberingSystem`, and `outputCalendar`.\n *\n * Here is a brief overview of the most commonly used functionality it provides:\n *\n * * **Creation**: To create a DateTime from its components, use one of its factory class methods: {@link DateTime.local}, {@link DateTime.utc}, and (most flexibly) {@link DateTime.fromObject}. To create one from a standard string format, use {@link DateTime.fromISO}, {@link DateTime.fromHTTP}, and {@link DateTime.fromRFC2822}. To create one from a custom string format, use {@link DateTime.fromFormat}. To create one from a native JS date, use {@link DateTime.fromJSDate}.\n * * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e as opposed to collectively through {@link DateTime#toObject}), use the {@link DateTime#year}, {@link DateTime#month},\n * {@link DateTime#day}, {@link DateTime#hour}, {@link DateTime#minute}, {@link DateTime#second}, {@link DateTime#millisecond} accessors.\n * * **Week calendar**: For ISO week calendar attributes, see the {@link DateTime#weekYear}, {@link DateTime#weekNumber}, and {@link DateTime#weekday} accessors.\n * * **Configuration** See the {@link DateTime#locale} and {@link DateTime#numberingSystem} accessors.\n * * **Transformation**: To transform the DateTime into other DateTimes, use {@link DateTime#set}, {@link DateTime#reconfigure}, {@link DateTime#setZone}, {@link DateTime#setLocale}, {@link DateTime.plus}, {@link DateTime#minus}, {@link DateTime#endOf}, {@link DateTime#startOf}, {@link DateTime#toUTC}, and {@link DateTime#toLocal}.\n * * **Output**: To convert the DateTime to other representations, use the {@link DateTime#toRelative}, {@link DateTime#toRelativeCalendar}, {@link DateTime#toJSON}, {@link DateTime#toISO}, {@link DateTime#toHTTP}, {@link DateTime#toObject}, {@link DateTime#toRFC2822}, {@link DateTime#toString}, {@link DateTime#toLocaleString}, {@link DateTime#toFormat}, {@link DateTime#toMillis} and {@link DateTime#toJSDate}.\n *\n * There's plenty others documented below. In addition, for more information on subtler topics like internationalization, time zones, alternative calendars, validity, and so on, see the external documentation.\n */\nexport default class DateTime {\n /**\n * @access private\n */\n constructor(config) {\n const zone = config.zone || Settings.defaultZone;\n\n let invalid =\n config.invalid ||\n (Number.isNaN(config.ts) ? new Invalid(\"invalid input\") : null) ||\n (!zone.isValid ? unsupportedZone(zone) : null);\n /**\n * @access private\n */\n this.ts = isUndefined(config.ts) ? Settings.now() : config.ts;\n\n let c = null,\n o = null;\n if (!invalid) {\n const unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone);\n\n if (unchanged) {\n [c, o] = [config.old.c, config.old.o];\n } else {\n const ot = zone.offset(this.ts);\n c = tsToObj(this.ts, ot);\n invalid = Number.isNaN(c.year) ? new Invalid(\"invalid input\") : null;\n c = invalid ? null : c;\n o = invalid ? null : ot;\n }\n }\n\n /**\n * @access private\n */\n this._zone = zone;\n /**\n * @access private\n */\n this.loc = config.loc || Locale.create();\n /**\n * @access private\n */\n this.invalid = invalid;\n /**\n * @access private\n */\n this.weekData = null;\n /**\n * @access private\n */\n this.localWeekData = null;\n /**\n * @access private\n */\n this.c = c;\n /**\n * @access private\n */\n this.o = o;\n /**\n * @access private\n */\n this.isLuxonDateTime = true;\n }\n\n // CONSTRUCT\n\n /**\n * Create a DateTime for the current instant, in the system's time zone.\n *\n * Use Settings to override these default values if needed.\n * @example DateTime.now().toISO() //~> now in the ISO format\n * @return {DateTime}\n */\n static now() {\n return new DateTime({});\n }\n\n /**\n * Create a local DateTime\n * @param {number} [year] - The calendar year. If omitted (as in, call `local()` with no arguments), the current time will be used\n * @param {number} [month=1] - The month, 1-indexed\n * @param {number} [day=1] - The day of the month, 1-indexed\n * @param {number} [hour=0] - The hour of the day, in 24-hour time\n * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n * @example DateTime.local() //~> now\n * @example DateTime.local({ zone: \"America/New_York\" }) //~> now, in US east coast time\n * @example DateTime.local(2017) //~> 2017-01-01T00:00:00\n * @example DateTime.local(2017, 3) //~> 2017-03-01T00:00:00\n * @example DateTime.local(2017, 3, 12, { locale: \"fr\" }) //~> 2017-03-12T00:00:00, with a French locale\n * @example DateTime.local(2017, 3, 12, 5) //~> 2017-03-12T05:00:00\n * @example DateTime.local(2017, 3, 12, 5, { zone: \"utc\" }) //~> 2017-03-12T05:00:00, in UTC\n * @example DateTime.local(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00\n * @example DateTime.local(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10\n * @example DateTime.local(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765\n * @return {DateTime}\n */\n static local() {\n const [opts, args] = lastOpts(arguments),\n [year, month, day, hour, minute, second, millisecond] = args;\n return quickDT({ year, month, day, hour, minute, second, millisecond }, opts);\n }\n\n /**\n * Create a DateTime in UTC\n * @param {number} [year] - The calendar year. If omitted (as in, call `utc()` with no arguments), the current time will be used\n * @param {number} [month=1] - The month, 1-indexed\n * @param {number} [day=1] - The day of the month\n * @param {number} [hour=0] - The hour of the day, in 24-hour time\n * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n * @param {Object} options - configuration options for the DateTime\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} [options.outputCalendar] - the output calendar to set on the resulting DateTime instance\n * @param {string} [options.numberingSystem] - the numbering system to set on the resulting DateTime instance\n * @example DateTime.utc() //~> now\n * @example DateTime.utc(2017) //~> 2017-01-01T00:00:00Z\n * @example DateTime.utc(2017, 3) //~> 2017-03-01T00:00:00Z\n * @example DateTime.utc(2017, 3, 12) //~> 2017-03-12T00:00:00Z\n * @example DateTime.utc(2017, 3, 12, 5) //~> 2017-03-12T05:00:00Z\n * @example DateTime.utc(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00Z\n * @example DateTime.utc(2017, 3, 12, 5, 45, { locale: \"fr\" }) //~> 2017-03-12T05:45:00Z with a French locale\n * @example DateTime.utc(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10Z\n * @example DateTime.utc(2017, 3, 12, 5, 45, 10, 765, { locale: \"fr\" }) //~> 2017-03-12T05:45:10.765Z with a French locale\n * @return {DateTime}\n */\n static utc() {\n const [opts, args] = lastOpts(arguments),\n [year, month, day, hour, minute, second, millisecond] = args;\n\n opts.zone = FixedOffsetZone.utcInstance;\n return quickDT({ year, month, day, hour, minute, second, millisecond }, opts);\n }\n\n /**\n * Create a DateTime from a JavaScript Date object. Uses the default zone.\n * @param {Date} date - a JavaScript Date object\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @return {DateTime}\n */\n static fromJSDate(date, options = {}) {\n const ts = isDate(date) ? date.valueOf() : NaN;\n if (Number.isNaN(ts)) {\n return DateTime.invalid(\"invalid input\");\n }\n\n const zoneToUse = normalizeZone(options.zone, Settings.defaultZone);\n if (!zoneToUse.isValid) {\n return DateTime.invalid(unsupportedZone(zoneToUse));\n }\n\n return new DateTime({\n ts: ts,\n zone: zoneToUse,\n loc: Locale.fromObject(options),\n });\n }\n\n /**\n * Create a DateTime from a number of milliseconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n * @param {number} milliseconds - a number of milliseconds since 1970 UTC\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromMillis(milliseconds, options = {}) {\n if (!isNumber(milliseconds)) {\n throw new InvalidArgumentError(\n `fromMillis requires a numerical input, but received a ${typeof milliseconds} with value ${milliseconds}`\n );\n } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) {\n // this isn't perfect because because we can still end up out of range because of additional shifting, but it's a start\n return DateTime.invalid(\"Timestamp out of range\");\n } else {\n return new DateTime({\n ts: milliseconds,\n zone: normalizeZone(options.zone, Settings.defaultZone),\n loc: Locale.fromObject(options),\n });\n }\n }\n\n /**\n * Create a DateTime from a number of seconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n * @param {number} seconds - a number of seconds since 1970 UTC\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromSeconds(seconds, options = {}) {\n if (!isNumber(seconds)) {\n throw new InvalidArgumentError(\"fromSeconds requires a numerical input\");\n } else {\n return new DateTime({\n ts: seconds * 1000,\n zone: normalizeZone(options.zone, Settings.defaultZone),\n loc: Locale.fromObject(options),\n });\n }\n }\n\n /**\n * Create a DateTime from a JavaScript object with keys like 'year' and 'hour' with reasonable defaults.\n * @param {Object} obj - the object to create the DateTime from\n * @param {number} obj.year - a year, such as 1987\n * @param {number} obj.month - a month, 1-12\n * @param {number} obj.day - a day of the month, 1-31, depending on the month\n * @param {number} obj.ordinal - day of the year, 1-365 or 366\n * @param {number} obj.weekYear - an ISO week year\n * @param {number} obj.weekNumber - an ISO week number, between 1 and 52 or 53, depending on the year\n * @param {number} obj.weekday - an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday\n * @param {number} obj.localWeekYear - a week year, according to the locale\n * @param {number} obj.localWeekNumber - a week number, between 1 and 52 or 53, depending on the year, according to the locale\n * @param {number} obj.localWeekday - a weekday, 1-7, where 1 is the first and 7 is the last day of the week, according to the locale\n * @param {number} obj.hour - hour of the day, 0-23\n * @param {number} obj.minute - minute of the hour, 0-59\n * @param {number} obj.second - second of the minute, 0-59\n * @param {number} obj.millisecond - millisecond of the second, 0-999\n * @param {Object} opts - options for creating this DateTime\n * @param {string|Zone} [opts.zone='local'] - interpret the numbers in the context of a particular zone. Can take any value taken as the first argument to setZone()\n * @param {string} [opts.locale='system\\'s locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @example DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25'\n * @example DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01'\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //~> today at 10:26:06\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'utc' }),\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'local' })\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'America/New_York' })\n * @example DateTime.fromObject({ weekYear: 2016, weekNumber: 2, weekday: 3 }).toISODate() //=> '2016-01-13'\n * @example DateTime.fromObject({ localWeekYear: 2022, localWeekNumber: 1, localWeekday: 1 }, { locale: \"en-US\" }).toISODate() //=> '2021-12-26'\n * @return {DateTime}\n */\n static fromObject(obj, opts = {}) {\n obj = obj || {};\n const zoneToUse = normalizeZone(opts.zone, Settings.defaultZone);\n if (!zoneToUse.isValid) {\n return DateTime.invalid(unsupportedZone(zoneToUse));\n }\n\n const loc = Locale.fromObject(opts);\n const normalized = normalizeObject(obj, normalizeUnitWithLocalWeeks);\n const { minDaysInFirstWeek, startOfWeek } = usesLocalWeekValues(normalized, loc);\n\n const tsNow = Settings.now(),\n offsetProvis = !isUndefined(opts.specificOffset)\n ? opts.specificOffset\n : zoneToUse.offset(tsNow),\n containsOrdinal = !isUndefined(normalized.ordinal),\n containsGregorYear = !isUndefined(normalized.year),\n containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n containsGregor = containsGregorYear || containsGregorMD,\n definiteWeekDef = normalized.weekYear || normalized.weekNumber;\n\n // cases:\n // just a weekday -> this week's instance of that weekday, no worries\n // (gregorian data or ordinal) + (weekYear or weekNumber) -> error\n // (gregorian month or day) + ordinal -> error\n // otherwise just use weeks or ordinals or gregorian, depending on what's specified\n\n if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n throw new ConflictingSpecificationError(\n \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n );\n }\n\n if (containsGregorMD && containsOrdinal) {\n throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n }\n\n const useWeekData = definiteWeekDef || (normalized.weekday && !containsGregor);\n\n // configure ourselves to deal with gregorian dates or week stuff\n let units,\n defaultValues,\n objNow = tsToObj(tsNow, offsetProvis);\n if (useWeekData) {\n units = orderedWeekUnits;\n defaultValues = defaultWeekUnitValues;\n objNow = gregorianToWeek(objNow, minDaysInFirstWeek, startOfWeek);\n } else if (containsOrdinal) {\n units = orderedOrdinalUnits;\n defaultValues = defaultOrdinalUnitValues;\n objNow = gregorianToOrdinal(objNow);\n } else {\n units = orderedUnits;\n defaultValues = defaultUnitValues;\n }\n\n // set default values for missing stuff\n let foundFirst = false;\n for (const u of units) {\n const v = normalized[u];\n if (!isUndefined(v)) {\n foundFirst = true;\n } else if (foundFirst) {\n normalized[u] = defaultValues[u];\n } else {\n normalized[u] = objNow[u];\n }\n }\n\n // make sure the values we have are in range\n const higherOrderInvalid = useWeekData\n ? hasInvalidWeekData(normalized, minDaysInFirstWeek, startOfWeek)\n : containsOrdinal\n ? hasInvalidOrdinalData(normalized)\n : hasInvalidGregorianData(normalized),\n invalid = higherOrderInvalid || hasInvalidTimeData(normalized);\n\n if (invalid) {\n return DateTime.invalid(invalid);\n }\n\n // compute the actual time\n const gregorian = useWeekData\n ? weekToGregorian(normalized, minDaysInFirstWeek, startOfWeek)\n : containsOrdinal\n ? ordinalToGregorian(normalized)\n : normalized,\n [tsFinal, offsetFinal] = objToTS(gregorian, offsetProvis, zoneToUse),\n inst = new DateTime({\n ts: tsFinal,\n zone: zoneToUse,\n o: offsetFinal,\n loc,\n });\n\n // gregorian data + weekday serves only to validate\n if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) {\n return DateTime.invalid(\n \"mismatched weekday\",\n `you can't specify both a weekday of ${normalized.weekday} and a date of ${inst.toISO()}`\n );\n }\n\n return inst;\n }\n\n /**\n * Create a DateTime from an ISO 8601 string\n * @param {string} text - the ISO string\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the time to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} [opts.outputCalendar] - the output calendar to set on the resulting DateTime instance\n * @param {string} [opts.numberingSystem] - the numbering system to set on the resulting DateTime instance\n * @example DateTime.fromISO('2016-05-25T09:08:34.123')\n * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00')\n * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true})\n * @example DateTime.fromISO('2016-05-25T09:08:34.123', {zone: 'utc'})\n * @example DateTime.fromISO('2016-W05-4')\n * @return {DateTime}\n */\n static fromISO(text, opts = {}) {\n const [vals, parsedZone] = parseISODate(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"ISO 8601\", text);\n }\n\n /**\n * Create a DateTime from an RFC 2822 string\n * @param {string} text - the RFC 2822 string\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since the offset is always specified in the string itself, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @example DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT')\n * @example DateTime.fromRFC2822('Fri, 25 Nov 2016 13:23:12 +0600')\n * @example DateTime.fromRFC2822('25 Nov 2016 13:23 Z')\n * @return {DateTime}\n */\n static fromRFC2822(text, opts = {}) {\n const [vals, parsedZone] = parseRFC2822Date(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"RFC 2822\", text);\n }\n\n /**\n * Create a DateTime from an HTTP header date\n * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n * @param {string} text - the HTTP header date\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since HTTP dates are always in UTC, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n * @param {boolean} [opts.setZone=false] - override the zone with the fixed-offset zone specified in the string. For HTTP dates, this is always UTC, so this option is equivalent to setting the `zone` option to 'utc', but this option is included for consistency with similar methods.\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @example DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT')\n * @example DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT')\n * @example DateTime.fromHTTP('Sun Nov 6 08:49:37 1994')\n * @return {DateTime}\n */\n static fromHTTP(text, opts = {}) {\n const [vals, parsedZone] = parseHTTPDate(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"HTTP\", opts);\n }\n\n /**\n * Create a DateTime from an input string and format string.\n * Defaults to en-US if no locale has been specified, regardless of the system's locale. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/parsing?id=table-of-tokens).\n * @param {string} text - the string to parse\n * @param {string} fmt - the format the string is expected to be in (see the link below for the formats)\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromFormat(text, fmt, opts = {}) {\n if (isUndefined(text) || isUndefined(fmt)) {\n throw new InvalidArgumentError(\"fromFormat requires an input string and a format\");\n }\n\n const { locale = null, numberingSystem = null } = opts,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n }),\n [vals, parsedZone, specificOffset, invalid] = parseFromTokens(localeToUse, text, fmt);\n if (invalid) {\n return DateTime.invalid(invalid);\n } else {\n return parseDataToDateTime(vals, parsedZone, opts, `format ${fmt}`, text, specificOffset);\n }\n }\n\n /**\n * @deprecated use fromFormat instead\n */\n static fromString(text, fmt, opts = {}) {\n return DateTime.fromFormat(text, fmt, opts);\n }\n\n /**\n * Create a DateTime from a SQL date, time, or datetime\n * Defaults to en-US if no locale has been specified, regardless of the system's locale\n * @param {string} text - the string to parse\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @example DateTime.fromSQL('2017-05-15')\n * @example DateTime.fromSQL('2017-05-15 09:12:34')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342+06:00')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles', { setZone: true })\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342', { zone: 'America/Los_Angeles' })\n * @example DateTime.fromSQL('09:12:34.342')\n * @return {DateTime}\n */\n static fromSQL(text, opts = {}) {\n const [vals, parsedZone] = parseSQL(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"SQL\", text);\n }\n\n /**\n * Create an invalid DateTime.\n * @param {string} reason - simple string of why this DateTime is invalid. Should not contain parameters or anything else data-dependent.\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {DateTime}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the DateTime is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidDateTimeError(invalid);\n } else {\n return new DateTime({ invalid });\n }\n }\n\n /**\n * Check if an object is an instance of DateTime. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isDateTime(o) {\n return (o && o.isLuxonDateTime) || false;\n }\n\n /**\n * Produce the format string for a set of options\n * @param formatOpts\n * @param localeOpts\n * @returns {string}\n */\n static parseFormatForOpts(formatOpts, localeOpts = {}) {\n const tokenList = formatOptsToTokens(formatOpts, Locale.fromObject(localeOpts));\n return !tokenList ? null : tokenList.map((t) => (t ? t.val : null)).join(\"\");\n }\n\n /**\n * Produce the the fully expanded format token for the locale\n * Does NOT quote characters, so quoted tokens will not round trip correctly\n * @param fmt\n * @param localeOpts\n * @returns {string}\n */\n static expandFormat(fmt, localeOpts = {}) {\n const expanded = expandMacroTokens(Formatter.parseFormat(fmt), Locale.fromObject(localeOpts));\n return expanded.map((t) => t.val).join(\"\");\n }\n\n // INFO\n\n /**\n * Get the value of unit.\n * @param {string} unit - a unit such as 'minute' or 'day'\n * @example DateTime.local(2017, 7, 4).get('month'); //=> 7\n * @example DateTime.local(2017, 7, 4).get('day'); //=> 4\n * @return {number}\n */\n get(unit) {\n return this[unit];\n }\n\n /**\n * Returns whether the DateTime is valid. Invalid DateTimes occur when:\n * * The DateTime was created from invalid calendar information, such as the 13th month or February 30\n * * The DateTime was created by an operation on another invalid date\n * @type {boolean}\n */\n get isValid() {\n return this.invalid === null;\n }\n\n /**\n * Returns an error code if this DateTime is invalid, or null if the DateTime is valid\n * @type {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this DateTime became invalid, or null if the DateTime is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Get the locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime\n *\n * @type {string}\n */\n get locale() {\n return this.isValid ? this.loc.locale : null;\n }\n\n /**\n * Get the numbering system of a DateTime, such 'beng'. The numbering system is used when formatting the DateTime\n *\n * @type {string}\n */\n get numberingSystem() {\n return this.isValid ? this.loc.numberingSystem : null;\n }\n\n /**\n * Get the output calendar of a DateTime, such 'islamic'. The output calendar is used when formatting the DateTime\n *\n * @type {string}\n */\n get outputCalendar() {\n return this.isValid ? this.loc.outputCalendar : null;\n }\n\n /**\n * Get the time zone associated with this DateTime.\n * @type {Zone}\n */\n get zone() {\n return this._zone;\n }\n\n /**\n * Get the name of the time zone.\n * @type {string}\n */\n get zoneName() {\n return this.isValid ? this.zone.name : null;\n }\n\n /**\n * Get the year\n * @example DateTime.local(2017, 5, 25).year //=> 2017\n * @type {number}\n */\n get year() {\n return this.isValid ? this.c.year : NaN;\n }\n\n /**\n * Get the quarter\n * @example DateTime.local(2017, 5, 25).quarter //=> 2\n * @type {number}\n */\n get quarter() {\n return this.isValid ? Math.ceil(this.c.month / 3) : NaN;\n }\n\n /**\n * Get the month (1-12).\n * @example DateTime.local(2017, 5, 25).month //=> 5\n * @type {number}\n */\n get month() {\n return this.isValid ? this.c.month : NaN;\n }\n\n /**\n * Get the day of the month (1-30ish).\n * @example DateTime.local(2017, 5, 25).day //=> 25\n * @type {number}\n */\n get day() {\n return this.isValid ? this.c.day : NaN;\n }\n\n /**\n * Get the hour of the day (0-23).\n * @example DateTime.local(2017, 5, 25, 9).hour //=> 9\n * @type {number}\n */\n get hour() {\n return this.isValid ? this.c.hour : NaN;\n }\n\n /**\n * Get the minute of the hour (0-59).\n * @example DateTime.local(2017, 5, 25, 9, 30).minute //=> 30\n * @type {number}\n */\n get minute() {\n return this.isValid ? this.c.minute : NaN;\n }\n\n /**\n * Get the second of the minute (0-59).\n * @example DateTime.local(2017, 5, 25, 9, 30, 52).second //=> 52\n * @type {number}\n */\n get second() {\n return this.isValid ? this.c.second : NaN;\n }\n\n /**\n * Get the millisecond of the second (0-999).\n * @example DateTime.local(2017, 5, 25, 9, 30, 52, 654).millisecond //=> 654\n * @type {number}\n */\n get millisecond() {\n return this.isValid ? this.c.millisecond : NaN;\n }\n\n /**\n * Get the week year\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2014, 12, 31).weekYear //=> 2015\n * @type {number}\n */\n get weekYear() {\n return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN;\n }\n\n /**\n * Get the week number of the week year (1-52ish).\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2017, 5, 25).weekNumber //=> 21\n * @type {number}\n */\n get weekNumber() {\n return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN;\n }\n\n /**\n * Get the day of the week.\n * 1 is Monday and 7 is Sunday\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2014, 11, 31).weekday //=> 4\n * @type {number}\n */\n get weekday() {\n return this.isValid ? possiblyCachedWeekData(this).weekday : NaN;\n }\n\n /**\n * Returns true if this date is on a weekend according to the locale, false otherwise\n * @returns {boolean}\n */\n get isWeekend() {\n return this.isValid && this.loc.getWeekendDays().includes(this.weekday);\n }\n\n /**\n * Get the day of the week according to the locale.\n * 1 is the first day of the week and 7 is the last day of the week.\n * If the locale assigns Sunday as the first day of the week, then a date which is a Sunday will return 1,\n * @returns {number}\n */\n get localWeekday() {\n return this.isValid ? possiblyCachedLocalWeekData(this).weekday : NaN;\n }\n\n /**\n * Get the week number of the week year according to the locale. Different locales assign week numbers differently,\n * because the week can start on different days of the week (see localWeekday) and because a different number of days\n * is required for a week to count as the first week of a year.\n * @returns {number}\n */\n get localWeekNumber() {\n return this.isValid ? possiblyCachedLocalWeekData(this).weekNumber : NaN;\n }\n\n /**\n * Get the week year according to the locale. Different locales assign week numbers (and therefor week years)\n * differently, see localWeekNumber.\n * @returns {number}\n */\n get localWeekYear() {\n return this.isValid ? possiblyCachedLocalWeekData(this).weekYear : NaN;\n }\n\n /**\n * Get the ordinal (meaning the day of the year)\n * @example DateTime.local(2017, 5, 25).ordinal //=> 145\n * @type {number|DateTime}\n */\n get ordinal() {\n return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN;\n }\n\n /**\n * Get the human readable short month name, such as 'Oct'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).monthShort //=> Oct\n * @type {string}\n */\n get monthShort() {\n return this.isValid ? Info.months(\"short\", { locObj: this.loc })[this.month - 1] : null;\n }\n\n /**\n * Get the human readable long month name, such as 'October'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).monthLong //=> October\n * @type {string}\n */\n get monthLong() {\n return this.isValid ? Info.months(\"long\", { locObj: this.loc })[this.month - 1] : null;\n }\n\n /**\n * Get the human readable short weekday, such as 'Mon'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).weekdayShort //=> Mon\n * @type {string}\n */\n get weekdayShort() {\n return this.isValid ? Info.weekdays(\"short\", { locObj: this.loc })[this.weekday - 1] : null;\n }\n\n /**\n * Get the human readable long weekday, such as 'Monday'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).weekdayLong //=> Monday\n * @type {string}\n */\n get weekdayLong() {\n return this.isValid ? Info.weekdays(\"long\", { locObj: this.loc })[this.weekday - 1] : null;\n }\n\n /**\n * Get the UTC offset of this DateTime in minutes\n * @example DateTime.now().offset //=> -240\n * @example DateTime.utc().offset //=> 0\n * @type {number}\n */\n get offset() {\n return this.isValid ? +this.o : NaN;\n }\n\n /**\n * Get the short human name for the zone's current offset, for example \"EST\" or \"EDT\".\n * Defaults to the system's locale if no locale has been specified\n * @type {string}\n */\n get offsetNameShort() {\n if (this.isValid) {\n return this.zone.offsetName(this.ts, {\n format: \"short\",\n locale: this.locale,\n });\n } else {\n return null;\n }\n }\n\n /**\n * Get the long human name for the zone's current offset, for example \"Eastern Standard Time\" or \"Eastern Daylight Time\".\n * Defaults to the system's locale if no locale has been specified\n * @type {string}\n */\n get offsetNameLong() {\n if (this.isValid) {\n return this.zone.offsetName(this.ts, {\n format: \"long\",\n locale: this.locale,\n });\n } else {\n return null;\n }\n }\n\n /**\n * Get whether this zone's offset ever changes, as in a DST.\n * @type {boolean}\n */\n get isOffsetFixed() {\n return this.isValid ? this.zone.isUniversal : null;\n }\n\n /**\n * Get whether the DateTime is in a DST.\n * @type {boolean}\n */\n get isInDST() {\n if (this.isOffsetFixed) {\n return false;\n } else {\n return (\n this.offset > this.set({ month: 1, day: 1 }).offset ||\n this.offset > this.set({ month: 5 }).offset\n );\n }\n }\n\n /**\n * Get those DateTimes which have the same local time as this DateTime, but a different offset from UTC\n * in this DateTime's zone. During DST changes local time can be ambiguous, for example\n * `2023-10-29T02:30:00` in `Europe/Berlin` can have offset `+01:00` or `+02:00`.\n * This method will return both possible DateTimes if this DateTime's local time is ambiguous.\n * @returns {DateTime[]}\n */\n getPossibleOffsets() {\n if (!this.isValid || this.isOffsetFixed) {\n return [this];\n }\n const dayMs = 86400000;\n const minuteMs = 60000;\n const localTS = objToLocalTS(this.c);\n const oEarlier = this.zone.offset(localTS - dayMs);\n const oLater = this.zone.offset(localTS + dayMs);\n\n const o1 = this.zone.offset(localTS - oEarlier * minuteMs);\n const o2 = this.zone.offset(localTS - oLater * minuteMs);\n if (o1 === o2) {\n return [this];\n }\n const ts1 = localTS - o1 * minuteMs;\n const ts2 = localTS - o2 * minuteMs;\n const c1 = tsToObj(ts1, o1);\n const c2 = tsToObj(ts2, o2);\n if (\n c1.hour === c2.hour &&\n c1.minute === c2.minute &&\n c1.second === c2.second &&\n c1.millisecond === c2.millisecond\n ) {\n return [clone(this, { ts: ts1 }), clone(this, { ts: ts2 })];\n }\n return [this];\n }\n\n /**\n * Returns true if this DateTime is in a leap year, false otherwise\n * @example DateTime.local(2016).isInLeapYear //=> true\n * @example DateTime.local(2013).isInLeapYear //=> false\n * @type {boolean}\n */\n get isInLeapYear() {\n return isLeapYear(this.year);\n }\n\n /**\n * Returns the number of days in this DateTime's month\n * @example DateTime.local(2016, 2).daysInMonth //=> 29\n * @example DateTime.local(2016, 3).daysInMonth //=> 31\n * @type {number}\n */\n get daysInMonth() {\n return daysInMonth(this.year, this.month);\n }\n\n /**\n * Returns the number of days in this DateTime's year\n * @example DateTime.local(2016).daysInYear //=> 366\n * @example DateTime.local(2013).daysInYear //=> 365\n * @type {number}\n */\n get daysInYear() {\n return this.isValid ? daysInYear(this.year) : NaN;\n }\n\n /**\n * Returns the number of weeks in this DateTime's year\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2004).weeksInWeekYear //=> 53\n * @example DateTime.local(2013).weeksInWeekYear //=> 52\n * @type {number}\n */\n get weeksInWeekYear() {\n return this.isValid ? weeksInWeekYear(this.weekYear) : NaN;\n }\n\n /**\n * Returns the number of weeks in this DateTime's local week year\n * @example DateTime.local(2020, 6, {locale: 'en-US'}).weeksInLocalWeekYear //=> 52\n * @example DateTime.local(2020, 6, {locale: 'de-DE'}).weeksInLocalWeekYear //=> 53\n * @type {number}\n */\n get weeksInLocalWeekYear() {\n return this.isValid\n ? weeksInWeekYear(\n this.localWeekYear,\n this.loc.getMinDaysInFirstWeek(),\n this.loc.getStartOfWeek()\n )\n : NaN;\n }\n\n /**\n * Returns the resolved Intl options for this DateTime.\n * This is useful in understanding the behavior of formatting methods\n * @param {Object} opts - the same options as toLocaleString\n * @return {Object}\n */\n resolvedLocaleOptions(opts = {}) {\n const { locale, numberingSystem, calendar } = Formatter.create(\n this.loc.clone(opts),\n opts\n ).resolvedOptions(this);\n return { locale, numberingSystem, outputCalendar: calendar };\n }\n\n // TRANSFORM\n\n /**\n * \"Set\" the DateTime's zone to UTC. Returns a newly-constructed DateTime.\n *\n * Equivalent to {@link DateTime#setZone}('utc')\n * @param {number} [offset=0] - optionally, an offset from UTC in minutes\n * @param {Object} [opts={}] - options to pass to `setZone()`\n * @return {DateTime}\n */\n toUTC(offset = 0, opts = {}) {\n return this.setZone(FixedOffsetZone.instance(offset), opts);\n }\n\n /**\n * \"Set\" the DateTime's zone to the host's local zone. Returns a newly-constructed DateTime.\n *\n * Equivalent to `setZone('local')`\n * @return {DateTime}\n */\n toLocal() {\n return this.setZone(Settings.defaultZone);\n }\n\n /**\n * \"Set\" the DateTime's zone to specified zone. Returns a newly-constructed DateTime.\n *\n * By default, the setter keeps the underlying time the same (as in, the same timestamp), but the new instance will report different local times and consider DSTs when making computations, as with {@link DateTime#plus}. You may wish to use {@link DateTime#toLocal} and {@link DateTime#toUTC} which provide simple convenience wrappers for commonly used zones.\n * @param {string|Zone} [zone='local'] - a zone identifier. As a string, that can be any IANA zone supported by the host environment, or a fixed-offset name of the form 'UTC+3', or the strings 'local' or 'utc'. You may also supply an instance of a {@link DateTime#Zone} class.\n * @param {Object} opts - options\n * @param {boolean} [opts.keepLocalTime=false] - If true, adjust the underlying time so that the local time stays the same, but in the target zone. You should rarely need this.\n * @return {DateTime}\n */\n setZone(zone, { keepLocalTime = false, keepCalendarTime = false } = {}) {\n zone = normalizeZone(zone, Settings.defaultZone);\n if (zone.equals(this.zone)) {\n return this;\n } else if (!zone.isValid) {\n return DateTime.invalid(unsupportedZone(zone));\n } else {\n let newTS = this.ts;\n if (keepLocalTime || keepCalendarTime) {\n const offsetGuess = zone.offset(this.ts);\n const asObj = this.toObject();\n [newTS] = objToTS(asObj, offsetGuess, zone);\n }\n return clone(this, { ts: newTS, zone });\n }\n }\n\n /**\n * \"Set\" the locale, numberingSystem, or outputCalendar. Returns a newly-constructed DateTime.\n * @param {Object} properties - the properties to set\n * @example DateTime.local(2017, 5, 25).reconfigure({ locale: 'en-GB' })\n * @return {DateTime}\n */\n reconfigure({ locale, numberingSystem, outputCalendar } = {}) {\n const loc = this.loc.clone({ locale, numberingSystem, outputCalendar });\n return clone(this, { loc });\n }\n\n /**\n * \"Set\" the locale. Returns a newly-constructed DateTime.\n * Just a convenient alias for reconfigure({ locale })\n * @example DateTime.local(2017, 5, 25).setLocale('en-GB')\n * @return {DateTime}\n */\n setLocale(locale) {\n return this.reconfigure({ locale });\n }\n\n /**\n * \"Set\" the values of specified units. Returns a newly-constructed DateTime.\n * You can only set units with this method; for \"setting\" metadata, see {@link DateTime#reconfigure} and {@link DateTime#setZone}.\n *\n * This method also supports setting locale-based week units, i.e. `localWeekday`, `localWeekNumber` and `localWeekYear`.\n * They cannot be mixed with ISO-week units like `weekday`.\n * @param {Object} values - a mapping of units to numbers\n * @example dt.set({ year: 2017 })\n * @example dt.set({ hour: 8, minute: 30 })\n * @example dt.set({ weekday: 5 })\n * @example dt.set({ year: 2005, ordinal: 234 })\n * @return {DateTime}\n */\n set(values) {\n if (!this.isValid) return this;\n\n const normalized = normalizeObject(values, normalizeUnitWithLocalWeeks);\n const { minDaysInFirstWeek, startOfWeek } = usesLocalWeekValues(normalized, this.loc);\n\n const settingWeekStuff =\n !isUndefined(normalized.weekYear) ||\n !isUndefined(normalized.weekNumber) ||\n !isUndefined(normalized.weekday),\n containsOrdinal = !isUndefined(normalized.ordinal),\n containsGregorYear = !isUndefined(normalized.year),\n containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n containsGregor = containsGregorYear || containsGregorMD,\n definiteWeekDef = normalized.weekYear || normalized.weekNumber;\n\n if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n throw new ConflictingSpecificationError(\n \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n );\n }\n\n if (containsGregorMD && containsOrdinal) {\n throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n }\n\n let mixed;\n if (settingWeekStuff) {\n mixed = weekToGregorian(\n { ...gregorianToWeek(this.c, minDaysInFirstWeek, startOfWeek), ...normalized },\n minDaysInFirstWeek,\n startOfWeek\n );\n } else if (!isUndefined(normalized.ordinal)) {\n mixed = ordinalToGregorian({ ...gregorianToOrdinal(this.c), ...normalized });\n } else {\n mixed = { ...this.toObject(), ...normalized };\n\n // if we didn't set the day but we ended up on an overflow date,\n // use the last day of the right month\n if (isUndefined(normalized.day)) {\n mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day);\n }\n }\n\n const [ts, o] = objToTS(mixed, this.o, this.zone);\n return clone(this, { ts, o });\n }\n\n /**\n * Add a period of time to this DateTime and return the resulting DateTime\n *\n * Adding hours, minutes, seconds, or milliseconds increases the timestamp by the right number of milliseconds. Adding days, months, or years shifts the calendar, accounting for DSTs and leap years along the way. Thus, `dt.plus({ hours: 24 })` may result in a different time than `dt.plus({ days: 1 })` if there's a DST shift in between.\n * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @example DateTime.now().plus(123) //~> in 123 milliseconds\n * @example DateTime.now().plus({ minutes: 15 }) //~> in 15 minutes\n * @example DateTime.now().plus({ days: 1 }) //~> this time tomorrow\n * @example DateTime.now().plus({ days: -1 }) //~> this time yesterday\n * @example DateTime.now().plus({ hours: 3, minutes: 13 }) //~> in 3 hr, 13 min\n * @example DateTime.now().plus(Duration.fromObject({ hours: 3, minutes: 13 })) //~> in 3 hr, 13 min\n * @return {DateTime}\n */\n plus(duration) {\n if (!this.isValid) return this;\n const dur = Duration.fromDurationLike(duration);\n return clone(this, adjustTime(this, dur));\n }\n\n /**\n * Subtract a period of time to this DateTime and return the resulting DateTime\n * See {@link DateTime#plus}\n * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n @return {DateTime}\n */\n minus(duration) {\n if (!this.isValid) return this;\n const dur = Duration.fromDurationLike(duration).negate();\n return clone(this, adjustTime(this, dur));\n }\n\n /**\n * \"Set\" this DateTime to the beginning of a unit of time.\n * @param {string} unit - The unit to go to the beginning of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week\n * @example DateTime.local(2014, 3, 3).startOf('month').toISODate(); //=> '2014-03-01'\n * @example DateTime.local(2014, 3, 3).startOf('year').toISODate(); //=> '2014-01-01'\n * @example DateTime.local(2014, 3, 3).startOf('week').toISODate(); //=> '2014-03-03', weeks always start on Mondays\n * @example DateTime.local(2014, 3, 3, 5, 30).startOf('day').toISOTime(); //=> '00:00.000-05:00'\n * @example DateTime.local(2014, 3, 3, 5, 30).startOf('hour').toISOTime(); //=> '05:00:00.000-05:00'\n * @return {DateTime}\n */\n startOf(unit, { useLocaleWeeks = false } = {}) {\n if (!this.isValid) return this;\n\n const o = {},\n normalizedUnit = Duration.normalizeUnit(unit);\n switch (normalizedUnit) {\n case \"years\":\n o.month = 1;\n // falls through\n case \"quarters\":\n case \"months\":\n o.day = 1;\n // falls through\n case \"weeks\":\n case \"days\":\n o.hour = 0;\n // falls through\n case \"hours\":\n o.minute = 0;\n // falls through\n case \"minutes\":\n o.second = 0;\n // falls through\n case \"seconds\":\n o.millisecond = 0;\n break;\n case \"milliseconds\":\n break;\n // no default, invalid units throw in normalizeUnit()\n }\n\n if (normalizedUnit === \"weeks\") {\n if (useLocaleWeeks) {\n const startOfWeek = this.loc.getStartOfWeek();\n const { weekday } = this;\n if (weekday < startOfWeek) {\n o.weekNumber = this.weekNumber - 1;\n }\n o.weekday = startOfWeek;\n } else {\n o.weekday = 1;\n }\n }\n\n if (normalizedUnit === \"quarters\") {\n const q = Math.ceil(this.month / 3);\n o.month = (q - 1) * 3 + 1;\n }\n\n return this.set(o);\n }\n\n /**\n * \"Set\" this DateTime to the end (meaning the last millisecond) of a unit of time\n * @param {string} unit - The unit to go to the end of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week\n * @example DateTime.local(2014, 3, 3).endOf('month').toISO(); //=> '2014-03-31T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3).endOf('year').toISO(); //=> '2014-12-31T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3).endOf('week').toISO(); // => '2014-03-09T23:59:59.999-05:00', weeks start on Mondays\n * @example DateTime.local(2014, 3, 3, 5, 30).endOf('day').toISO(); //=> '2014-03-03T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3, 5, 30).endOf('hour').toISO(); //=> '2014-03-03T05:59:59.999-05:00'\n * @return {DateTime}\n */\n endOf(unit, opts) {\n return this.isValid\n ? this.plus({ [unit]: 1 })\n .startOf(unit, opts)\n .minus(1)\n : this;\n }\n\n // OUTPUT\n\n /**\n * Returns a string representation of this DateTime formatted according to the specified format string.\n * **You may not want this.** See {@link DateTime#toLocaleString} for a more flexible formatting tool. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/formatting?id=table-of-tokens).\n * Defaults to en-US if no locale has been specified, regardless of the system's locale.\n * @param {string} fmt - the format string\n * @param {Object} opts - opts to override the configuration options on this DateTime\n * @example DateTime.now().toFormat('yyyy LLL dd') //=> '2017 Apr 22'\n * @example DateTime.now().setLocale('fr').toFormat('yyyy LLL dd') //=> '2017 avr. 22'\n * @example DateTime.now().toFormat('yyyy LLL dd', { locale: \"fr\" }) //=> '2017 avr. 22'\n * @example DateTime.now().toFormat(\"HH 'hours and' mm 'minutes'\") //=> '20 hours and 55 minutes'\n * @return {string}\n */\n toFormat(fmt, opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt)\n : INVALID;\n }\n\n /**\n * Returns a localized string representing this date. Accepts the same options as the Intl.DateTimeFormat constructor and any presets defined by Luxon, such as `DateTime.DATE_FULL` or `DateTime.TIME_SIMPLE`.\n * The exact behavior of this method is browser-specific, but in general it will return an appropriate representation\n * of the DateTime in the assigned locale.\n * Defaults to the system's locale if no locale has been specified\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param formatOpts {Object} - Intl.DateTimeFormat constructor options and configuration options\n * @param {Object} opts - opts to override the configuration options on this DateTime\n * @example DateTime.now().toLocaleString(); //=> 4/20/2017\n * @example DateTime.now().setLocale('en-gb').toLocaleString(); //=> '20/04/2017'\n * @example DateTime.now().toLocaleString(DateTime.DATE_FULL); //=> 'April 20, 2017'\n * @example DateTime.now().toLocaleString(DateTime.DATE_FULL, { locale: 'fr' }); //=> '28 août 2022'\n * @example DateTime.now().toLocaleString(DateTime.TIME_SIMPLE); //=> '11:32 AM'\n * @example DateTime.now().toLocaleString(DateTime.DATETIME_SHORT); //=> '4/20/2017, 11:32 AM'\n * @example DateTime.now().toLocaleString({ weekday: 'long', month: 'long', day: '2-digit' }); //=> 'Thursday, April 20'\n * @example DateTime.now().toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> 'Thu, Apr 20, 11:27 AM'\n * @example DateTime.now().toLocaleString({ hour: '2-digit', minute: '2-digit', hourCycle: 'h23' }); //=> '11:32'\n * @return {string}\n */\n toLocaleString(formatOpts = Formats.DATE_SHORT, opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.clone(opts), formatOpts).formatDateTime(this)\n : INVALID;\n }\n\n /**\n * Returns an array of format \"parts\", meaning individual tokens along with metadata. This is allows callers to post-process individual sections of the formatted output.\n * Defaults to the system's locale if no locale has been specified\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts\n * @param opts {Object} - Intl.DateTimeFormat constructor options, same as `toLocaleString`.\n * @example DateTime.now().toLocaleParts(); //=> [\n * //=> { type: 'day', value: '25' },\n * //=> { type: 'literal', value: '/' },\n * //=> { type: 'month', value: '05' },\n * //=> { type: 'literal', value: '/' },\n * //=> { type: 'year', value: '1982' }\n * //=> ]\n */\n toLocaleParts(opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this)\n : [];\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.extendedZone=false] - add the time zone format extension\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example DateTime.utc(1983, 5, 25).toISO() //=> '1982-05-25T00:00:00.000Z'\n * @example DateTime.now().toISO() //=> '2017-04-22T20:47:05.335-04:00'\n * @example DateTime.now().toISO({ includeOffset: false }) //=> '2017-04-22T20:47:05.335'\n * @example DateTime.now().toISO({ format: 'basic' }) //=> '20170422T204705.335-0400'\n * @return {string}\n */\n toISO({\n format = \"extended\",\n suppressSeconds = false,\n suppressMilliseconds = false,\n includeOffset = true,\n extendedZone = false,\n } = {}) {\n if (!this.isValid) {\n return null;\n }\n\n const ext = format === \"extended\";\n\n let c = toISODate(this, ext);\n c += \"T\";\n c += toISOTime(this, ext, suppressSeconds, suppressMilliseconds, includeOffset, extendedZone);\n return c;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's date component\n * @param {Object} opts - options\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25'\n * @example DateTime.utc(1982, 5, 25).toISODate({ format: 'basic' }) //=> '19820525'\n * @return {string}\n */\n toISODate({ format = \"extended\" } = {}) {\n if (!this.isValid) {\n return null;\n }\n\n return toISODate(this, format === \"extended\");\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's week date\n * @example DateTime.utc(1982, 5, 25).toISOWeekDate() //=> '1982-W21-2'\n * @return {string}\n */\n toISOWeekDate() {\n return toTechFormat(this, \"kkkk-'W'WW-c\");\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's time component\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.extendedZone=true] - add the time zone format extension\n * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime() //=> '07:34:19.361Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34, seconds: 0, milliseconds: 0 }).toISOTime({ suppressSeconds: true }) //=> '07:34Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ format: 'basic' }) //=> '073419.361Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ includePrefix: true }) //=> 'T07:34:19.361Z'\n * @return {string}\n */\n toISOTime({\n suppressMilliseconds = false,\n suppressSeconds = false,\n includeOffset = true,\n includePrefix = false,\n extendedZone = false,\n format = \"extended\",\n } = {}) {\n if (!this.isValid) {\n return null;\n }\n\n let c = includePrefix ? \"T\" : \"\";\n return (\n c +\n toISOTime(\n this,\n format === \"extended\",\n suppressSeconds,\n suppressMilliseconds,\n includeOffset,\n extendedZone\n )\n );\n }\n\n /**\n * Returns an RFC 2822-compatible string representation of this DateTime\n * @example DateTime.utc(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 +0000'\n * @example DateTime.local(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 -0400'\n * @return {string}\n */\n toRFC2822() {\n return toTechFormat(this, \"EEE, dd LLL yyyy HH:mm:ss ZZZ\", false);\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in HTTP headers. The output is always expressed in GMT.\n * Specifically, the string conforms to RFC 1123.\n * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n * @example DateTime.utc(2014, 7, 13).toHTTP() //=> 'Sun, 13 Jul 2014 00:00:00 GMT'\n * @example DateTime.utc(2014, 7, 13, 19).toHTTP() //=> 'Sun, 13 Jul 2014 19:00:00 GMT'\n * @return {string}\n */\n toHTTP() {\n return toTechFormat(this.toUTC(), \"EEE, dd LLL yyyy HH:mm:ss 'GMT'\");\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL Date\n * @example DateTime.utc(2014, 7, 13).toSQLDate() //=> '2014-07-13'\n * @return {string}\n */\n toSQLDate() {\n if (!this.isValid) {\n return null;\n }\n return toISODate(this, true);\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL Time\n * @param {Object} opts - options\n * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00'\n * @example DateTime.utc().toSQL() //=> '05:15:16.345'\n * @example DateTime.now().toSQL() //=> '05:15:16.345 -04:00'\n * @example DateTime.now().toSQL({ includeOffset: false }) //=> '05:15:16.345'\n * @example DateTime.now().toSQL({ includeZone: false }) //=> '05:15:16.345 America/New_York'\n * @return {string}\n */\n toSQLTime({ includeOffset = true, includeZone = false, includeOffsetSpace = true } = {}) {\n let fmt = \"HH:mm:ss.SSS\";\n\n if (includeZone || includeOffset) {\n if (includeOffsetSpace) {\n fmt += \" \";\n }\n if (includeZone) {\n fmt += \"z\";\n } else if (includeOffset) {\n fmt += \"ZZ\";\n }\n }\n\n return toTechFormat(this, fmt, true);\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL DateTime\n * @param {Object} opts - options\n * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00'\n * @example DateTime.utc(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 Z'\n * @example DateTime.local(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 -04:00'\n * @example DateTime.local(2014, 7, 13).toSQL({ includeOffset: false }) //=> '2014-07-13 00:00:00.000'\n * @example DateTime.local(2014, 7, 13).toSQL({ includeZone: true }) //=> '2014-07-13 00:00:00.000 America/New_York'\n * @return {string}\n */\n toSQL(opts = {}) {\n if (!this.isValid) {\n return null;\n }\n\n return `${this.toSQLDate()} ${this.toSQLTime(opts)}`;\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for debugging\n * @return {string}\n */\n toString() {\n return this.isValid ? this.toISO() : INVALID;\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for the REPL.\n * @return {string}\n */\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n if (this.isValid) {\n return `DateTime { ts: ${this.toISO()}, zone: ${this.zone.name}, locale: ${this.locale} }`;\n } else {\n return `DateTime { Invalid, reason: ${this.invalidReason} }`;\n }\n }\n\n /**\n * Returns the epoch milliseconds of this DateTime. Alias of {@link DateTime#toMillis}\n * @return {number}\n */\n valueOf() {\n return this.toMillis();\n }\n\n /**\n * Returns the epoch milliseconds of this DateTime.\n * @return {number}\n */\n toMillis() {\n return this.isValid ? this.ts : NaN;\n }\n\n /**\n * Returns the epoch seconds of this DateTime.\n * @return {number}\n */\n toSeconds() {\n return this.isValid ? this.ts / 1000 : NaN;\n }\n\n /**\n * Returns the epoch seconds (as a whole number) of this DateTime.\n * @return {number}\n */\n toUnixInteger() {\n return this.isValid ? Math.floor(this.ts / 1000) : NaN;\n }\n\n /**\n * Returns an ISO 8601 representation of this DateTime appropriate for use in JSON.\n * @return {string}\n */\n toJSON() {\n return this.toISO();\n }\n\n /**\n * Returns a BSON serializable equivalent to this DateTime.\n * @return {Date}\n */\n toBSON() {\n return this.toJSDate();\n }\n\n /**\n * Returns a JavaScript object with this DateTime's year, month, day, and so on.\n * @param opts - options for generating the object\n * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output\n * @example DateTime.now().toObject() //=> { year: 2017, month: 4, day: 22, hour: 20, minute: 49, second: 42, millisecond: 268 }\n * @return {Object}\n */\n toObject(opts = {}) {\n if (!this.isValid) return {};\n\n const base = { ...this.c };\n\n if (opts.includeConfig) {\n base.outputCalendar = this.outputCalendar;\n base.numberingSystem = this.loc.numberingSystem;\n base.locale = this.loc.locale;\n }\n return base;\n }\n\n /**\n * Returns a JavaScript Date equivalent to this DateTime.\n * @return {Date}\n */\n toJSDate() {\n return new Date(this.isValid ? this.ts : NaN);\n }\n\n // COMPARE\n\n /**\n * Return the difference between two DateTimes as a Duration.\n * @param {DateTime} otherDateTime - the DateTime to compare this one to\n * @param {string|string[]} [unit=['milliseconds']] - the unit or array of units (such as 'hours' or 'days') to include in the duration.\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @example\n * var i1 = DateTime.fromISO('1982-05-25T09:45'),\n * i2 = DateTime.fromISO('1983-10-14T10:30');\n * i2.diff(i1).toObject() //=> { milliseconds: 43807500000 }\n * i2.diff(i1, 'hours').toObject() //=> { hours: 12168.75 }\n * i2.diff(i1, ['months', 'days']).toObject() //=> { months: 16, days: 19.03125 }\n * i2.diff(i1, ['months', 'days', 'hours']).toObject() //=> { months: 16, days: 19, hours: 0.75 }\n * @return {Duration}\n */\n diff(otherDateTime, unit = \"milliseconds\", opts = {}) {\n if (!this.isValid || !otherDateTime.isValid) {\n return Duration.invalid(\"created by diffing an invalid DateTime\");\n }\n\n const durOpts = { locale: this.locale, numberingSystem: this.numberingSystem, ...opts };\n\n const units = maybeArray(unit).map(Duration.normalizeUnit),\n otherIsLater = otherDateTime.valueOf() > this.valueOf(),\n earlier = otherIsLater ? this : otherDateTime,\n later = otherIsLater ? otherDateTime : this,\n diffed = diff(earlier, later, units, durOpts);\n\n return otherIsLater ? diffed.negate() : diffed;\n }\n\n /**\n * Return the difference between this DateTime and right now.\n * See {@link DateTime#diff}\n * @param {string|string[]} [unit=['milliseconds']] - the unit or units units (such as 'hours' or 'days') to include in the duration\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @return {Duration}\n */\n diffNow(unit = \"milliseconds\", opts = {}) {\n return this.diff(DateTime.now(), unit, opts);\n }\n\n /**\n * Return an Interval spanning between this DateTime and another DateTime\n * @param {DateTime} otherDateTime - the other end point of the Interval\n * @return {Interval}\n */\n until(otherDateTime) {\n return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this;\n }\n\n /**\n * Return whether this DateTime is in the same unit of time as another DateTime.\n * Higher-order units must also be identical for this function to return `true`.\n * Note that time zones are **ignored** in this comparison, which compares the **local** calendar time. Use {@link DateTime#setZone} to convert one of the dates if needed.\n * @param {DateTime} otherDateTime - the other DateTime\n * @param {string} unit - the unit of time to check sameness on\n * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; only the locale of this DateTime is used\n * @example DateTime.now().hasSame(otherDT, 'day'); //~> true if otherDT is in the same current calendar day\n * @return {boolean}\n */\n hasSame(otherDateTime, unit, opts) {\n if (!this.isValid) return false;\n\n const inputMs = otherDateTime.valueOf();\n const adjustedToZone = this.setZone(otherDateTime.zone, { keepLocalTime: true });\n return (\n adjustedToZone.startOf(unit, opts) <= inputMs && inputMs <= adjustedToZone.endOf(unit, opts)\n );\n }\n\n /**\n * Equality check\n * Two DateTimes are equal if and only if they represent the same millisecond, have the same zone and location, and are both valid.\n * To compare just the millisecond values, use `+dt1 === +dt2`.\n * @param {DateTime} other - the other DateTime\n * @return {boolean}\n */\n equals(other) {\n return (\n this.isValid &&\n other.isValid &&\n this.valueOf() === other.valueOf() &&\n this.zone.equals(other.zone) &&\n this.loc.equals(other.loc)\n );\n }\n\n /**\n * Returns a string representation of a this time relative to now, such as \"in two days\". Can only internationalize if your\n * platform supports Intl.RelativeTimeFormat. Rounds down by default.\n * @param {Object} options - options that affect the output\n * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n * @param {string} [options.style=\"long\"] - the style of units, must be \"long\", \"short\", or \"narrow\"\n * @param {string|string[]} options.unit - use a specific unit or array of units; if omitted, or an array, the method will pick the best unit. Use an array or one of \"years\", \"quarters\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", or \"seconds\"\n * @param {boolean} [options.round=true] - whether to round the numbers in the output.\n * @param {number} [options.padding=0] - padding in milliseconds. This allows you to round up the result if it fits inside the threshold. Don't use in combination with {round: false} because the decimal output will include the padding.\n * @param {string} options.locale - override the locale of this DateTime\n * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n * @example DateTime.now().plus({ days: 1 }).toRelative() //=> \"in 1 day\"\n * @example DateTime.now().setLocale(\"es\").toRelative({ days: 1 }) //=> \"dentro de 1 día\"\n * @example DateTime.now().plus({ days: 1 }).toRelative({ locale: \"fr\" }) //=> \"dans 23 heures\"\n * @example DateTime.now().minus({ days: 2 }).toRelative() //=> \"2 days ago\"\n * @example DateTime.now().minus({ days: 2 }).toRelative({ unit: \"hours\" }) //=> \"48 hours ago\"\n * @example DateTime.now().minus({ hours: 36 }).toRelative({ round: false }) //=> \"1.5 days ago\"\n */\n toRelative(options = {}) {\n if (!this.isValid) return null;\n const base = options.base || DateTime.fromObject({}, { zone: this.zone }),\n padding = options.padding ? (this < base ? -options.padding : options.padding) : 0;\n let units = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\"];\n let unit = options.unit;\n if (Array.isArray(options.unit)) {\n units = options.unit;\n unit = undefined;\n }\n return diffRelative(base, this.plus(padding), {\n ...options,\n numeric: \"always\",\n units,\n unit,\n });\n }\n\n /**\n * Returns a string representation of this date relative to today, such as \"yesterday\" or \"next month\".\n * Only internationalizes on platforms that supports Intl.RelativeTimeFormat.\n * @param {Object} options - options that affect the output\n * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n * @param {string} options.locale - override the locale of this DateTime\n * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of \"years\", \"quarters\", \"months\", \"weeks\", or \"days\"\n * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar() //=> \"tomorrow\"\n * @example DateTime.now().setLocale(\"es\").plus({ days: 1 }).toRelative() //=> \"\"mañana\"\n * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar({ locale: \"fr\" }) //=> \"demain\"\n * @example DateTime.now().minus({ days: 2 }).toRelativeCalendar() //=> \"2 days ago\"\n */\n toRelativeCalendar(options = {}) {\n if (!this.isValid) return null;\n\n return diffRelative(options.base || DateTime.fromObject({}, { zone: this.zone }), this, {\n ...options,\n numeric: \"auto\",\n units: [\"years\", \"months\", \"days\"],\n calendary: true,\n });\n }\n\n /**\n * Return the min of several date times\n * @param {...DateTime} dateTimes - the DateTimes from which to choose the minimum\n * @return {DateTime} the min DateTime, or undefined if called with no argument\n */\n static min(...dateTimes) {\n if (!dateTimes.every(DateTime.isDateTime)) {\n throw new InvalidArgumentError(\"min requires all arguments be DateTimes\");\n }\n return bestBy(dateTimes, (i) => i.valueOf(), Math.min);\n }\n\n /**\n * Return the max of several date times\n * @param {...DateTime} dateTimes - the DateTimes from which to choose the maximum\n * @return {DateTime} the max DateTime, or undefined if called with no argument\n */\n static max(...dateTimes) {\n if (!dateTimes.every(DateTime.isDateTime)) {\n throw new InvalidArgumentError(\"max requires all arguments be DateTimes\");\n }\n return bestBy(dateTimes, (i) => i.valueOf(), Math.max);\n }\n\n // MISC\n\n /**\n * Explain how a string would be parsed by fromFormat()\n * @param {string} text - the string to parse\n * @param {string} fmt - the format the string is expected to be in (see description)\n * @param {Object} options - options taken by fromFormat()\n * @return {Object}\n */\n static fromFormatExplain(text, fmt, options = {}) {\n const { locale = null, numberingSystem = null } = options,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n });\n return explainFromTokens(localeToUse, text, fmt);\n }\n\n /**\n * @deprecated use fromFormatExplain instead\n */\n static fromStringExplain(text, fmt, options = {}) {\n return DateTime.fromFormatExplain(text, fmt, options);\n }\n\n // FORMAT PRESETS\n\n /**\n * {@link DateTime#toLocaleString} format like 10/14/1983\n * @type {Object}\n */\n static get DATE_SHORT() {\n return Formats.DATE_SHORT;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Oct 14, 1983'\n * @type {Object}\n */\n static get DATE_MED() {\n return Formats.DATE_MED;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Fri, Oct 14, 1983'\n * @type {Object}\n */\n static get DATE_MED_WITH_WEEKDAY() {\n return Formats.DATE_MED_WITH_WEEKDAY;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'October 14, 1983'\n * @type {Object}\n */\n static get DATE_FULL() {\n return Formats.DATE_FULL;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Tuesday, October 14, 1983'\n * @type {Object}\n */\n static get DATE_HUGE() {\n return Formats.DATE_HUGE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_SIMPLE() {\n return Formats.TIME_SIMPLE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_SECONDS() {\n return Formats.TIME_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_SHORT_OFFSET() {\n return Formats.TIME_WITH_SHORT_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_LONG_OFFSET() {\n return Formats.TIME_WITH_LONG_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_SIMPLE() {\n return Formats.TIME_24_SIMPLE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_SECONDS() {\n return Formats.TIME_24_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 EDT', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_SHORT_OFFSET() {\n return Formats.TIME_24_WITH_SHORT_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 Eastern Daylight Time', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_LONG_OFFSET() {\n return Formats.TIME_24_WITH_LONG_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_SHORT() {\n return Formats.DATETIME_SHORT;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_SHORT_WITH_SECONDS() {\n return Formats.DATETIME_SHORT_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED() {\n return Formats.DATETIME_MED;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30:33 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED_WITH_SECONDS() {\n return Formats.DATETIME_MED_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Fri, 14 Oct 1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED_WITH_WEEKDAY() {\n return Formats.DATETIME_MED_WITH_WEEKDAY;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_FULL() {\n return Formats.DATETIME_FULL;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30:33 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_FULL_WITH_SECONDS() {\n return Formats.DATETIME_FULL_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_HUGE() {\n return Formats.DATETIME_HUGE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30:33 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_HUGE_WITH_SECONDS() {\n return Formats.DATETIME_HUGE_WITH_SECONDS;\n }\n}\n\n/**\n * @private\n */\nexport function friendlyDateTime(dateTimeish) {\n if (DateTime.isDateTime(dateTimeish)) {\n return dateTimeish;\n } else if (dateTimeish && dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) {\n return DateTime.fromJSDate(dateTimeish);\n } else if (dateTimeish && typeof dateTimeish === \"object\") {\n return DateTime.fromObject(dateTimeish);\n } else {\n throw new InvalidArgumentError(\n `Unknown datetime argument: ${dateTimeish}, of type ${typeof dateTimeish}`\n );\n }\n}\n"],"names":["LuxonError","Error","InvalidDateTimeError","constructor","reason","super","concat","toMessage","InvalidIntervalError","InvalidDurationError","ConflictingSpecificationError","InvalidUnitError","unit","InvalidArgumentError","ZoneIsAbstractError","n","s","l","DATE_SHORT","year","month","day","DATE_MED","DATE_MED_WITH_WEEKDAY","weekday","DATE_FULL","DATE_HUGE","TIME_SIMPLE","hour","minute","TIME_WITH_SECONDS","second","TIME_WITH_SHORT_OFFSET","timeZoneName","TIME_WITH_LONG_OFFSET","TIME_24_SIMPLE","hourCycle","TIME_24_WITH_SECONDS","TIME_24_WITH_SHORT_OFFSET","TIME_24_WITH_LONG_OFFSET","DATETIME_SHORT","DATETIME_SHORT_WITH_SECONDS","DATETIME_MED","DATETIME_MED_WITH_SECONDS","DATETIME_MED_WITH_WEEKDAY","DATETIME_FULL","DATETIME_FULL_WITH_SECONDS","DATETIME_HUGE","DATETIME_HUGE_WITH_SECONDS","Zone","type","name","ianaName","this","isUniversal","offsetName","ts","opts","formatOffset","format","offset","equals","otherZone","isValid","singleton","SystemZone","instance","Intl","DateTimeFormat","resolvedOptions","timeZone","_ref","locale","parseZoneInfo","Date","getTimezoneOffset","dtfCache","typeToPos","era","ianaZoneCache","IANAZone","create","resetCache","isValidSpecifier","isValidZone","zone","e","zoneName","valid","date","isNaN","NaN","dtf","hour12","adOrBc","formatToParts","formatted","filled","i","length","value","pos","isUndefined","parseInt","partsOffset","replace","parsed","exec","fMonth","fDay","fYear","fadOrBc","fHour","fMinute","fSecond","hackyOffset","Math","abs","asTS","over","objToLocalTS","millisecond","intlLFCache","intlDTCache","getCachedDTF","locString","arguments","undefined","key","JSON","stringify","intlNumCache","intlRelCache","sysLocaleCache","weekInfoCache","listStuff","loc","englishFn","intlFn","mode","listingMode","PolyNumberFormatter","intl","forceSimple","padTo","floor","otherOpts","Object","keys","intlOpts","useGrouping","minimumIntegerDigits","inf","NumberFormat","getCachedINF","fixed","padStart","roundTo","PolyDateFormatter","dt","z","originalZone","gmtOffset","offsetZ","setZone","plus","minutes","map","join","toJSDate","parts","part","PolyRelFormatter","isEnglish","style","hasRelative","rtf","base","cacheKeyOpts","RelativeTimeFormat","getCachedRTF","count","numeric","narrow","units","years","quarters","months","weeks","days","hours","seconds","lastable","indexOf","isDay","isInPast","is","fmtValue","singular","lilUnits","fmtUnit","English","fallbackWeekSettings","firstDay","minimalDays","weekend","Locale","fromOpts","numberingSystem","outputCalendar","weekSettings","defaultToEN","specifiedLocale","Settings","defaultLocale","localeR","numberingSystemR","defaultNumberingSystem","outputCalendarR","defaultOutputCalendar","weekSettingsR","validateWeekSettings","defaultWeekSettings","fromObject","numbering","parsedLocale","parsedNumberingSystem","parsedOutputCalendar","localeStr","xIndex","substring","uIndex","options","selectedStr","smaller","calendar","parseLocaleString","includes","intlConfigString","weekdaysCache","standalone","monthsCache","meridiemCache","eraCache","fastNumbersCached","fastNumbers","startsWith","isActuallyEn","hasNoWeirdness","clone","alts","getOwnPropertyNames","redefaultToEN","redefaultToSystem","formatStr","f","ms","DateTime","utc","push","mapMonths","extract","weekdays","mapWeekdays","meridiems","eras","field","matching","dtFormatter","find","m","toLowerCase","numberFormatter","relFormatter","listFormatter","ListFormat","getCachedLF","getWeekSettings","hasLocaleWeekInfo","data","getWeekInfo","weekInfo","getCachedWeekInfo","getStartOfWeek","getMinDaysInFirstWeek","getWeekendDays","other","FixedOffsetZone","utcInstance","parseSpecifier","r","match","signedOffset","InvalidZone","normalizeZone","input","defaultZone","lowered","isNumber","throwOnInvalid","now","twoDigitCutoffYear","cutoffYear","t","resetCaches","Invalid","explanation","nonLeapLadder","leapLadder","unitOutOfRange","dayOfWeek","d","UTC","setUTCFullYear","getUTCFullYear","js","getUTCDay","computeOrdinal","isLeapYear","uncomputeOrdinal","ordinal","table","month0","findIndex","isoWeekdayToLocal","isoWeekday","startOfWeek","gregorianToWeek","gregObj","minDaysInFirstWeek","weekYear","weekNumber","weeksInWeekYear","timeObject","weekToGregorian","weekData","weekdayOfJan4","yearInDays","daysInYear","gregorianToOrdinal","gregData","ordinalToGregorian","ordinalData","usesLocalWeekValues","obj","localWeekday","localWeekNumber","localWeekYear","hasInvalidGregorianData","validYear","isInteger","validMonth","integerBetween","validDay","daysInMonth","hasInvalidTimeData","validHour","validMinute","validSecond","validMillisecond","o","prototype","bestBy","arr","by","compare","reduce","best","next","pair","hasOwnProperty","prop","call","settings","Array","isArray","some","v","from","thing","bottom","top","padded","parseInteger","string","parseFloating","parseFloat","parseMillis","fraction","number","digits","factor","trunc","round","modMonth","x","floorMod","firstWeekOffset","weekOffset","weekOffsetNext","untruncateYear","offsetFormat","modified","offHourStr","offMinuteStr","offHour","Number","offMin","asNumber","numericValue","normalizeObject","normalizer","normalized","u","sign","RangeError","a","k","pick","monthsLong","monthsShort","monthsNarrow","weekdaysLong","weekdaysShort","weekdaysNarrow","erasLong","erasShort","erasNarrow","stringifyTokens","splits","tokenToString","token","literal","val","macroTokenToFormatOpts","D","Formats","DD","DDD","DDDD","tt","ttt","tttt","T","TT","TTT","TTTT","ff","fff","ffff","F","FF","FFF","FFFF","Formatter","parseFormat","fmt","current","currentFull","bracketed","c","charAt","test","formatOpts","systemLoc","formatWithSystemDefault","formatDateTime","formatDateTimeParts","formatInterval","interval","start","formatRange","end","num","p","formatDateTimeFromString","knownEnglish","useDateTimeFormatter","isOffsetFixed","allowZ","meridiem","maybeMacro","toString","slice","quarter","formatDurationFromString","dur","tokenToField","tokens","realTokens","found","lildur","mapped","get","shiftTo","filter","ianaRegex","combineRegexes","_len","regexes","_key","full","source","RegExp","combineExtractors","_len2","extractors","_key2","ex","mergedVals","mergedZone","cursor","parse","_len3","patterns","_key3","regex","extractor","simpleParse","_len4","_key4","ret","offsetRegex","isoExtendedZone","isoTimeBaseRegex","isoTimeRegex","isoTimeExtensionRegex","extractISOWeekData","extractISOOrdinalData","sqlTimeRegex","sqlTimeExtensionRegex","int","fallback","extractISOTime","milliseconds","extractISOOffset","local","fullOffset","extractIANAZone","isoTimeOnly","isoDuration","extractISODuration","yearStr","monthStr","weekStr","dayStr","hourStr","minuteStr","secondStr","millisecondsStr","hasNegativePrefix","negativeSeconds","maybeNegate","obsOffsets","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","fromStrings","weekdayStr","result","rfc2822","extractRFC2822","obsOffset","milOffset","rfc1123","rfc850","ascii","extractRFC1123Or850","extractASCII","isoYmdWithTimeExtensionRegex","isoWeekWithTimeExtensionRegex","isoOrdinalWithTimeExtensionRegex","isoTimeCombinedRegex","extractISOYmdTimeAndOffset","extractISOWeekTimeAndOffset","extractISOOrdinalDateAndTime","extractISOTimeAndOffset","extractISOTimeOnly","sqlYmdWithTimeExtensionRegex","sqlTimeCombinedRegex","extractISOTimeOffsetAndIANAZone","INVALID","lowOrderMatrix","casualMatrix","daysInYearAccurate","daysInMonthAccurate","accurateMatrix","orderedUnits","reverseUnits","reverse","conf","values","conversionAccuracy","matrix","Duration","durationToMillis","vals","_vals$milliseconds","sum","normalizeValues","reduceRight","previous","previousVal","conv","rollUp","config","accurate","invalid","isLuxonDuration","fromMillis","normalizeUnit","fromDurationLike","durationLike","isDuration","fromISO","text","parseISODuration","fromISOTime","parseISOTimeOnly","week","toFormat","fmtOpts","toHuman","unitDisplay","listStyle","toObject","toISO","toISOTime","millis","toMillis","suppressMilliseconds","suppressSeconds","includePrefix","includeOffset","toJSON","Symbol","for","invalidReason","valueOf","duration","minus","negate","mapUnits","fn","set","reconfigure","as","normalize","rescale","newVals","entries","removeZeroes","shiftToAll","built","accumulated","lastUnit","own","ak","negated","invalidExplanation","v1","v2","Interval","isLuxonInterval","fromDateTimes","builtStart","friendlyDateTime","builtEnd","validateError","validateStartEnd","after","before","split","startIsValid","endIsValid","isInterval","toDuration","startOf","useLocaleWeeks","diff","hasSame","isEmpty","isAfter","dateTime","isBefore","contains","splitAt","dateTimes","sorted","sort","b","results","added","splitBy","idx","divideEqually","numberOfParts","overlaps","abutsStart","abutsEnd","engulfs","intersection","union","merge","intervals","final","item","sofar","xor","currentCount","ends","time","difference","toLocaleString","toISODate","dateFormat","separator","mapEndpoints","mapFn","Info","hasDST","proto","isValidIANAZone","locObj","getMinimumDaysInFirstWeek","getWeekendWeekdays","monthsFormat","weekdaysFormat","features","relative","localeWeek","dayDiff","earlier","later","utcDayStart","toUTC","keepLocalTime","highWater","lowestOrder","differs","differ","highOrderDiffs","remainingMillis","lowerOrderUnits","numberingSystems","arab","arabext","bali","beng","deva","fullwide","gujr","hanidec","khmr","knda","laoo","limb","mlym","mong","mymr","orya","tamldec","telu","thai","tibt","latn","numberingSystemsUTF16","hanidecChars","digitRegex","append","MISSING_FTP","intUnit","post","deser","str","code","charCodeAt","search","min","max","parseDigits","NBSP","String","fromCharCode","spaceOrNBSP","spaceOrNBSPRegExp","fixListRegex","stripInsensitivities","oneOf","strings","startIndex","_ref2","groups","_ref3","h","simple","_ref4","partTypeStyleToTokenVal","short","long","dayperiod","dayPeriod","hour24","dummyDateTimeCache","expandMacroTokens","formatOptsToTokens","maybeExpandMacroToken","explainFromTokens","one","two","three","four","six","oneOrTwo","oneToThree","oneToSix","oneToNine","twoToFour","fourToSix","_ref5","unitate","unitForToken","disqualifyingUnit","regexString","handlers","re","buildRegex","rawMatches","matches","all","matchIndex","specificOffset","Z","q","M","G","y","S","toField","dateTimeFromMatches","df","resolvedOpts","isSpace","actualType","tokenForPart","MAX_DATE","unsupportedZone","possiblyCachedWeekData","possiblyCachedLocalWeekData","localWeekData","inst","old","fixOffset","localTS","tz","utcGuess","o2","o3","tsToObj","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","objToTS","adjustTime","oPre","millisToAdd","parseDataToDateTime","parsedZone","interpretationZone","toTechFormat","extended","longFormat","extendedZone","defaultUnitValues","defaultWeekUnitValues","defaultOrdinalUnitValues","orderedWeekUnits","orderedOrdinalUnits","normalizeUnitWithLocalWeeks","weeknumber","weeksnumber","weeknumbers","weekyear","weekyears","quickDT","tsNow","offsetProvis","diffRelative","calendary","lastOpts","argList","args","ot","_zone","isLuxonDateTime","fromJSDate","zoneToUse","fromSeconds","containsOrdinal","containsGregorYear","containsGregorMD","containsGregor","definiteWeekDef","useWeekData","defaultValues","objNow","foundFirst","higherOrderInvalid","validWeek","validWeekday","hasInvalidWeekData","validOrdinal","hasInvalidOrdinalData","gregorian","tsFinal","offsetFinal","parseISODate","fromRFC2822","trim","preprocessRFC2822","parseRFC2822Date","fromHTTP","parseHTTPDate","fromFormat","localeToUse","parseFromTokens","fromString","fromSQL","parseSQL","isDateTime","parseFormatForOpts","localeOpts","tokenList","expandFormat","ceil","isWeekend","monthShort","monthLong","weekdayShort","weekdayLong","offsetNameShort","offsetNameLong","isInDST","getPossibleOffsets","dayMs","minuteMs","oEarlier","oLater","o1","ts1","ts2","c1","c2","isInLeapYear","weeksInLocalWeekYear","resolvedLocaleOptions","toLocal","keepCalendarTime","newTS","offsetGuess","asObj","setLocale","settingWeekStuff","mixed","normalizedUnit","endOf","toLocaleParts","ext","toISOWeekDate","toRFC2822","toHTTP","toSQLDate","toSQLTime","includeZone","includeOffsetSpace","toSQL","toSeconds","toUnixInteger","toBSON","includeConfig","otherDateTime","durOpts","otherIsLater","diffed","diffNow","until","inputMs","adjustedToZone","toRelative","padding","toRelativeCalendar","every","fromFormatExplain","fromStringExplain","dateTimeish"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/301.d424161c.chunk.js b/web-app/build/static/js/301.d424161c.chunk.js deleted file mode 100644 index 571f09702ba..00000000000 --- a/web-app/build/static/js/301.d424161c.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[301],{5301:(e,t,a)=>{a.r(t),a.d(t,{default:()=>h});var o=a(5043),s=a(3216),c=a(2961),l=a(6483),n=a(4159),r=a(6537),p=a(649),u=a(685),g=a(579);const h=()=>{const e=(0,c.jL)(),t=(0,s.Zp)();return(0,o.useEffect)((()=>{(()=>{const a=()=>{(0,l.q7)(),e((0,n.WQ)(!1)),localStorage.setItem("userLoggedIn",""),localStorage.setItem("redirect-path",""),e((0,r.wD)()),t("/login")},o=localStorage.getItem("auth-state");p.A.invoke("POST","/api/v1/logout",{state:o}).then((()=>{a()})).catch((e=>{console.log(e),a()}))})()}),[e,t]),(0,g.jsx)(u.A,{})}}}]); -//# sourceMappingURL=301.d424161c.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/301.d424161c.chunk.js.map b/web-app/build/static/js/301.d424161c.chunk.js.map deleted file mode 100644 index 2989dfa8cdf..00000000000 --- a/web-app/build/static/js/301.d424161c.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/301.d424161c.chunk.js","mappings":"0NA0BA,MA6BA,EA7BmBA,KACjB,MAAMC,GAAWC,EAAAA,EAAAA,MACXC,GAAWC,EAAAA,EAAAA,MAwBjB,OAvBAC,EAAAA,EAAAA,YAAU,KACOC,MACb,MAAMC,EAAgBA,MACpBC,EAAAA,EAAAA,MACAP,GAASQ,EAAAA,EAAAA,KAAW,IACpBC,aAAaC,QAAQ,eAAgB,IACrCD,aAAaC,QAAQ,gBAAiB,IACtCV,GAASW,EAAAA,EAAAA,OACTT,EAAS,SAAS,EAEdU,EAAQH,aAAaI,QAAQ,cACnCC,EAAAA,EACGC,OAAO,OAAO,iBAAmB,CAAEH,UACnCI,MAAK,KACJV,GAAe,IAEhBW,OAAOC,IACNC,QAAQC,IAAIF,GACZZ,GAAe,GACf,EAEND,EAAQ,GACP,CAACL,EAAUE,KACPmB,EAAAA,EAAAA,KAACC,EAAAA,EAAgB,GAAG,C","sources":["screens/LogoutPage/LogoutPage.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect } from \"react\";\nimport { useNavigate } from \"react-router-dom\";\nimport { useAppDispatch } from \"../../store\";\nimport { ErrorResponseHandler } from \"../../common/types\";\nimport { clearSession } from \"../../common/utils\";\nimport { userLogged } from \"../../systemSlice\";\nimport { resetSession } from \"../Console/consoleSlice\";\nimport api from \"../../common/api\";\nimport LoadingComponent from \"../../common/LoadingComponent\";\n\nconst LogoutPage = () => {\n const dispatch = useAppDispatch();\n const navigate = useNavigate();\n useEffect(() => {\n const logout = () => {\n const deleteSession = () => {\n clearSession();\n dispatch(userLogged(false));\n localStorage.setItem(\"userLoggedIn\", \"\");\n localStorage.setItem(\"redirect-path\", \"\");\n dispatch(resetSession());\n navigate(`/login`);\n };\n const state = localStorage.getItem(\"auth-state\");\n api\n .invoke(\"POST\", `/api/v1/logout`, { state })\n .then(() => {\n deleteSession();\n })\n .catch((err: ErrorResponseHandler) => {\n console.log(err);\n deleteSession();\n });\n };\n logout();\n }, [dispatch, navigate]);\n return ;\n};\n\nexport default LogoutPage;\n"],"names":["LogoutPage","dispatch","useAppDispatch","navigate","useNavigate","useEffect","logout","deleteSession","clearSession","userLogged","localStorage","setItem","resetSession","state","getItem","api","invoke","then","catch","err","console","log","_jsx","LoadingComponent"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/361.970b063b.chunk.js b/web-app/build/static/js/361.970b063b.chunk.js deleted file mode 100644 index 99f67abf433..00000000000 --- a/web-app/build/static/js/361.970b063b.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[361],{9361:(e,r,t)=>{t.r(r),t.d(r,{default:()=>m});var o=t(5043),a=t(9923),i=t(4574),n=t(3097),s=t.n(n),l=t(3216),c=t(649),d=t(4710),p=t(4558),g=t(579);const h=i.Ay.div((e=>{let{theme:r}=e;return{"& .errorDescription":{fontStyle:"italic",transition:"all .2s ease-in-out",padding:"0 15px",marginTop:5,overflow:"auto"},"& .errorLabel":{color:s()(r,"fontColor","#000"),fontSize:18,fontWeight:"bold",marginLeft:5},"& .simpleError":{marginTop:5,padding:"2px 5px",fontSize:16,color:s()(r,"fontColor","#000")},"& .messageIcon":{color:s()(r,"signalColors.danger","#C72C48"),display:"flex","& svg":{width:32,height:32}},"& .errorTitle":{display:"flex",alignItems:"center",borderBottom:15}}})),m=()=>{const e=(0,l.Zp)(),[r,t]=(0,o.useState)(""),[i,n]=(0,o.useState)(""),[s,m]=(0,o.useState)(!0);return(0,o.useEffect)((()=>{if(s){const r=window.location.search,o=new URLSearchParams(r),a=o.get("code"),i=o.get("state"),s=o.get("error"),l=o.get("errorDescription");s||l?(t(s||""),n(l||""),m(!1)):c.A.invoke("POST","/api/v1/login/oauth2/auth",{code:a,state:i}).then((()=>{let r="/";localStorage.getItem("redirect-path")&&""!==localStorage.getItem("redirect-path")&&(r="".concat(localStorage.getItem("redirect-path")),localStorage.setItem("redirect-path","")),i&&localStorage.setItem("auth-state",i),m(!1),e(r)})).catch((e=>{t(e.errorMessage),n(e.detailedError),m(!1)}))}}),[s,e]),""!==r||""!==i?(0,g.jsx)(o.Fragment,{children:(0,g.jsx)(a.ndn,{logoProps:{applicationName:"operator",subVariant:(0,p.v)()},form:(0,g.jsxs)(h,{children:[(0,g.jsxs)("div",{className:"errorTitle",children:[(0,g.jsx)("span",{className:"messageIcon",children:(0,g.jsx)(a.cJw,{})}),(0,g.jsx)("span",{className:"errorLabel",children:"Error from IDP"})]}),(0,g.jsx)("div",{className:"simpleError",children:r}),(0,g.jsx)(a.azJ,{className:"errorDescription",children:i}),(0,g.jsx)(a.$nd,{id:"back-to-login",onClick:()=>{window.location.href="".concat(d.p,"login")},type:"submit",variant:"callAction",fullWidth:!0,children:"Back to Login"})]}),promoHeader:(0,g.jsx)(o.Fragment,{children:"Multi-Cloud Object\xa0Store"}),promoInfo:(0,g.jsxs)(o.Fragment,{children:["MinIO's high-performance, Kubernetes-native object store is licensed under GNU AGPL v3 and is available on every cloud - public, private and edge. For more information on the terms of the license or to learn more about commercial licensing options visit the"," ",(0,g.jsx)("a",{href:"https://min.io/pricing",children:"pricing page"}),"."]}),backgroundAnimation:!1})}):null}}}]); -//# sourceMappingURL=361.970b063b.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/361.970b063b.chunk.js.map b/web-app/build/static/js/361.970b063b.chunk.js.map deleted file mode 100644 index 26f0f439818..00000000000 --- a/web-app/build/static/js/361.970b063b.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/361.970b063b.chunk.js","mappings":"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","sources":["screens/LoginPage/LoginCallback.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport { Box, Button, LoginWrapper, WarnIcon } from \"mds\";\nimport styled from \"styled-components\";\nimport get from \"lodash/get\";\nimport { useNavigate } from \"react-router-dom\";\nimport api from \"../../common/api\";\nimport { baseUrl } from \"../../history\";\nimport { getLogoVar } from \"../../config\";\n\nconst CallBackContainer = styled.div(({ theme }) => ({\n \"& .errorDescription\": {\n fontStyle: \"italic\",\n transition: \"all .2s ease-in-out\",\n padding: \"0 15px\",\n marginTop: 5,\n overflow: \"auto\",\n },\n \"& .errorLabel\": {\n color: get(theme, \"fontColor\", \"#000\"),\n fontSize: 18,\n fontWeight: \"bold\",\n marginLeft: 5,\n },\n \"& .simpleError\": {\n marginTop: 5,\n padding: \"2px 5px\",\n fontSize: 16,\n color: get(theme, \"fontColor\", \"#000\"),\n },\n \"& .messageIcon\": {\n color: get(theme, \"signalColors.danger\", \"#C72C48\"),\n display: \"flex\",\n \"& svg\": {\n width: 32,\n height: 32,\n },\n },\n \"& .errorTitle\": {\n display: \"flex\",\n alignItems: \"center\",\n borderBottom: 15,\n },\n}));\n\nconst LoginCallback = () => {\n const navigate = useNavigate();\n\n const [error, setError] = useState(\"\");\n const [errorDescription, setErrorDescription] = useState(\"\");\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n if (loading) {\n const queryString = window.location.search;\n const urlParams = new URLSearchParams(queryString);\n const code = urlParams.get(\"code\");\n const state = urlParams.get(\"state\");\n const error = urlParams.get(\"error\");\n const errorDescription = urlParams.get(\"errorDescription\");\n if (error || errorDescription) {\n setError(error || \"\");\n setErrorDescription(errorDescription || \"\");\n setLoading(false);\n } else {\n api\n .invoke(\"POST\", \"/api/v1/login/oauth2/auth\", { code, state })\n .then(() => {\n // We push to history the new URL.\n let targetPath = \"/\";\n if (\n localStorage.getItem(\"redirect-path\") &&\n localStorage.getItem(\"redirect-path\") !== \"\"\n ) {\n targetPath = `${localStorage.getItem(\"redirect-path\")}`;\n localStorage.setItem(\"redirect-path\", \"\");\n }\n if (state) {\n localStorage.setItem(\"auth-state\", state);\n }\n setLoading(false);\n navigate(targetPath);\n })\n .catch((error) => {\n setError(error.errorMessage);\n setErrorDescription(error.detailedError);\n setLoading(false);\n });\n }\n }\n }, [loading, navigate]);\n return error !== \"\" || errorDescription !== \"\" ? (\n \n \n
\n \n \n \n Error from IDP\n
\n
{error}
\n {errorDescription}\n {\n window.location.href = `${baseUrl}login`;\n }}\n type=\"submit\"\n variant=\"callAction\"\n fullWidth\n >\n Back to Login\n \n \n }\n promoHeader={Multi-Cloud Object Store}\n promoInfo={\n \n MinIO's high-performance, Kubernetes-native object store is licensed\n under GNU AGPL v3 and is available on every cloud - public, private\n and edge. For more information on the terms of the license or to\n learn more about commercial licensing options visit the{\" \"}\n
pricing page.\n \n }\n backgroundAnimation={false}\n />\n \n ) : null;\n};\n\nexport default LoginCallback;\n"],"names":["CallBackContainer","styled","div","_ref","theme","fontStyle","transition","padding","marginTop","overflow","color","get","fontSize","fontWeight","marginLeft","display","width","height","alignItems","borderBottom","LoginCallback","navigate","useNavigate","error","setError","useState","errorDescription","setErrorDescription","loading","setLoading","useEffect","queryString","window","location","search","urlParams","URLSearchParams","code","state","api","invoke","then","targetPath","localStorage","getItem","concat","setItem","catch","errorMessage","detailedError","_jsx","Fragment","children","LoginWrapper","logoProps","applicationName","subVariant","getLogoVar","form","_jsxs","className","WarnIcon","Box","Button","id","onClick","href","baseUrl","type","variant","fullWidth","promoHeader","promoInfo","backgroundAnimation"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/381.6e506d98.chunk.js b/web-app/build/static/js/381.6e506d98.chunk.js deleted file mode 100644 index 900120c7ca8..00000000000 --- a/web-app/build/static/js/381.6e506d98.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[381],{2237:(e,t,i)=>{i.d(t,{A:()=>s});var n=i(5043),a=i(579);const s=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return function(i){return(0,a.jsx)(n.Suspense,{fallback:t,children:(0,a.jsx)(e,{...i})})}}},4141:(e,t,i)=>{i.d(t,{A:()=>d});var n=i(5043),a=i(9456),s=i(9923),l=i(2961),o=i(4159),r=i(9555),c=i(579);const d=e=>{let{onClose:t,modalOpen:i,title:d,children:x,wideLimit:p=!0,titleIcon:m=null,iconColor:h="default",sx:f}=e;const u=(0,l.jL)(),[b,g]=(0,n.useState)(!1),y=(0,a.d4)((e=>e.system.modalSnackBar));(0,n.useEffect)((()=>{u((0,o.h0)(""))}),[u]),(0,n.useEffect)((()=>{if(y){if(""===y.message)return void g(!1);"error"!==y.type&&g(!0)}}),[y]);let j="";return y&&(j=y.detailedErrorMsg,(""===y.detailedErrorMsg||y.detailedErrorMsg.length<5)&&(j=y.message)),(0,c.jsxs)(s.ngX,{onClose:t,open:i,title:d,titleIcon:m,widthLimit:p,sx:f,iconColor:h,children:[(0,c.jsx)(r.A,{isModal:!0}),(0,c.jsx)(s.qb_,{onClose:()=>{g(!1),u((0,o.h0)(""))},open:b,message:j,mode:"inline",variant:"error"===y.type?"error":"default",autoHideDuration:"error"===y.type?10:5,condensed:!0}),x]})}},7381:(e,t,i)=>{i.r(t),i.d(t,{default:()=>C});var n=i(5043),a=i(9923),s=i(3216),l=i(9161),o=i(3047),r=i(3024),c=i(4574),d=i(3097),x=i.n(d),p=i(579);const m=c.Ay.div((e=>{let{theme:t}=e;return{display:"grid",margin:"0 1.5rem 0 1.5rem",gridTemplateColumns:"1fr 1fr 1fr 1fr",["@media (max-width: ".concat(a.nmC.sm,"px)")]:{gridTemplateColumns:"1fr 1fr 1fr"},"&.paid-plans-only":{display:"grid",gridTemplateColumns:"1fr 1fr 1fr"},"& .features-col":{flex:1,minWidth:"260px","@media (max-width: 600px)":{display:"none"}},"& .xs-only":{display:"none"},"& .button-box":{display:"flex",alignItems:"center",justifyContent:"center",padding:"5px 0px 25px 0px",borderLeft:"1px solid ".concat(x()(t,"borderColor","#EAEAEA"))},"& .plan-header":{height:"99px",borderBottom:"1px solid ".concat(x()(t,"borderColor","#EAEAEA"))},"& .feature-title":{height:"25px",paddingLeft:"26px",fontSize:"14px",background:x()(t,"signalColors.disabled","#E5E5E5"),color:x()(t,"signalColors.main","#07193E"),"@media (max-width: 600px)":{"& .feature-title-info .xs-only":{display:"block"}}},"& .feature-name":{minHeight:"60px",padding:"5px",borderBottom:"1px solid ".concat(x()(t,"borderColor","#EAEAEA")),display:"flex",alignItems:"center",paddingLeft:"26px",fontSize:"14px"},"& .feature-item":{display:"flex",flexFlow:"column",alignItems:"center",justifyContent:"center",minHeight:"60px",padding:"0 15px 0 15px",borderBottom:"1px solid ".concat(x()(t,"borderColor","#EAEAEA")),borderLeft:"1px solid ".concat(x()(t,"borderColor","#EAEAEA")),fontSize:"14px","& .link-text":{color:"#2781B0",cursor:"pointer",textDecoration:"underline"},"&.icon-yes":{width:"15px",height:"15px"}},"& .feature-item-info":{flex:1,display:"flex",flexFlow:"column",alignItems:"center",justifyContent:"space-around",textAlign:"center","@media (max-width: 600px)":{justifyContent:"space-evenly",width:"100%","& .xs-only":{display:"block"},"& .plan-feature":{textAlign:"center",paddingRight:"10px"}}},"& .plan-col":{minWidth:"260px",flex:1},"& .active-plan-col":{background:"".concat(x()(t,"boxBackground","#FDFDFD")," 0% 0% no-repeat padding-box"),boxShadow:" 0px 3px 20px #00000038","& .plan-header":{backgroundColor:x()(t,"signalColors.info","#2781B0")},"& .feature-title":{background:x()(t,"signalColors.disabled","#E5E5E5"),color:x()(t,"fontColor","#000")}}}})),h=c.Ay.div((e=>{let{theme:t}=e;return{display:"flex",alignItems:"flex-start",justifyContent:"center",flexFlow:"column",borderLeft:"1px solid ".concat(x()(t,"borderColor","#EAEAEA")),borderBottom:"0px !important","& .plan-header":{display:"flex",alignItems:"center",justifyContent:"center",flexFlow:"column"},"& .title-block":{display:"flex",alignItems:"center",flexFlow:"column",width:"100%","& .title-main":{display:"flex",alignItems:"center",justifyContent:"center",flex:1},"& .iconContainer":{"& .min-icon":{minWidth:140,width:"100%",maxHeight:55,height:"100%"}}},"& .open-source":{fontSize:"14px",display:"flex",marginBottom:"5px",alignItems:"center","& .min-icon":{marginRight:"8px",height:"12px",width:"12px"}},"& .cur-plan-text":{fontSize:"12px",textTransform:"uppercase"},"@media (max-width: 600px)":{cursor:"pointer","& .title-block":{"& .title":{fontSize:"14px",fontWeight:600}}},"&.active, &.active.xs-active":{color:"#ffffff",position:"relative","& .min-icon":{fill:"#ffffff"},"&:before":{content:"' '",position:"absolute",width:"100%",height:"18px",backgroundColor:x()(t,"signalColors.info","#2781B0"),display:"block",top:-16},"& .iconContainer":{"& .min-icon":{marginTop:"-12px"}}},"&.active":{backgroundColor:x()(t,"signalColors.info","#2781B0"),color:"#ffffff"},"&.xs-active":{background:"#eaeaea"}}})),f=c.Ay.div((e=>{let{theme:t}=e;return{border:"1px solid ".concat(x()(t,"borderColor","#EAEAEA")),borderTop:"0px",marginBottom:"45px","&::-webkit-scrollbar":{width:"5px",height:"5px"},"&::-webkit-scrollbar-track":{background:"#F0F0F0",borderRadius:0,boxShadow:"inset 0px 0px 0px 0px #F0F0F0"},"&::-webkit-scrollbar-thumb":{background:"#777474",borderRadius:0},"&::-webkit-scrollbar-thumb:hover":{background:"#5A6375"}}})),u=e=>{let{isActive:t,isXsViewActive:i,title:n,onClick:a,children:s}=e;const l=n.toLowerCase();return(0,p.jsx)(h,{className:(0,r.A)({"plan-header":!0,active:t,"xs-active":i}),onClick:()=>{a&&a(l)},children:s})},b=e=>(0,p.jsx)(a.azJ,{className:"feature-title",children:(0,p.jsx)(a.azJ,{className:"feature-title-info",children:(0,p.jsxs)("div",{className:"xs-only",children:[e.featureLabel," "]})})}),g=e=>(0,p.jsx)(a.azJ,{className:"feature-item",style:e.style,children:(0,p.jsxs)(a.azJ,{className:"feature-item-info",children:[(0,p.jsx)("div",{className:"xs-only",children:(0,o.CA)(e.featureLabel||"")}),(0,p.jsxs)(a.azJ,{className:"plan-feature",children:[(0,p.jsx)("div",{children:(0,o.CA)(e.label||"")}),(0,o.CA)(e.detail),(0,p.jsxs)("div",{className:"xs-only",children:[e.xsLabel," "]})]})]})}),y=e=>{var t;let{licenseInfo:i}=e;const[s,l]=(0,n.useState)(window.innerWidth>=a.nmC.sm);(0,n.useEffect)((()=>{const e=()=>{let e=!1;window.innerWidth>=a.nmC.sm&&(e=!0),l(e)};return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[]);let r=i?null===i||void 0===i||null===(t=i.plan)||void 0===t?void 0:t.toLowerCase():"community";const c=r===o.Bx.COMMUNITY,d=r===o.Bx.STANDARD,x=r===o.Bx.ENTERPRISE,h=o.M7.includes(r),[y,j]=(0,n.useState)("");let A=y===o.Bx.COMMUNITY,v=y===o.Bx.STANDARD,w=y===o.Bx.ENTERPRISE;const N=(e,t,i,n)=>{let s="community"!==r?"https://subnet.min.io":e;return(0,p.jsx)(a.$nd,{id:"license-action-".concat(e),variant:i,style:{marginTop:"12px",width:"80%"},disabled:r!==o.Bx.COMMUNITY&&r!==n,onClick:e=>{e.preventDefault(),window.open("".concat(s,"?ref=op"),"_blank")},label:t})},C=e=>{j(e)};(0,n.useEffect)((()=>{j(s?r||"community":"")}),[s,r]);const k=o.c_;return(0,p.jsx)(n.Fragment,{children:(0,p.jsxs)(f,{children:[(0,p.jsx)(a.azJ,{className:"title-blue-bar",sx:{height:"8px",borderBottom:"8px solid rgb(6 48 83)"}}),(0,p.jsxs)(m,{className:h?"paid-plans-only":"",children:[(0,p.jsx)(a.azJ,{className:"features-col",children:k.map((e=>{const t=e.featureTitleRow;return e.isHeader?h?(0,p.jsxs)(a.azJ,{className:"plan-header",sx:{fontSize:"14px",paddingLeft:"26px",display:"flex",alignItems:"center",justifyContent:"flex-start",borderBottom:"0px !important","& .link-text":{color:"#2781B0",cursor:"pointer",textDecoration:"underline"},"& .min-icon":{marginRight:"10px",color:"#2781B0",fill:"#2781B0"}},children:[(0,p.jsx)(a.xLb,{}),(0,p.jsxs)("a",{href:"https://subnet.min.io/terms-and-conditions/".concat(r),rel:"noopener",className:"link-text",children:["View License agreement ",(0,p.jsx)("br",{}),"for the registered plan."]})]},"plan-header-".concat(e.desc)):(0,p.jsx)(a.azJ,{className:"plan-header",sx:{fontSize:"14px",paddingLeft:"26px",display:"flex",alignItems:"center",justifyContent:"flex-start",borderBottom:"0px !important"},children:e.label},"plan-header-label-".concat(e.desc)):t?(0,p.jsx)(a.azJ,{className:"feature-title",sx:{fontSize:"14px",fontWeight:600,textTransform:"uppercase"},children:(0,p.jsxs)("div",{children:[(0,o.CA)(e.desc)," "]})},"plan-descript-".concat(e.desc)):(0,p.jsx)(a.azJ,{className:"feature-name",style:e.style,children:(0,p.jsxs)("div",{children:[(0,o.CA)(e.desc)," "]})},"plan-feature-name-".concat(e.desc))}))}),h?null:(0,p.jsxs)(a.azJ,{className:"plan-col ".concat(c?"active-plan-col":"non-active-plan-col"),children:[o._T.map(((e,t)=>{const i=k[t].desc,{featureTitleRow:n,isHeader:l}=e;return l?(0,p.jsx)(u,{isActive:c,isXsViewActive:A,title:"community",onClick:s?C:null,children:(0,p.jsx)(a.azJ,{className:"title-block",children:(0,p.jsx)(a.azJ,{className:"title-main",children:(0,p.jsx)("div",{className:"iconContainer",children:(0,p.jsx)(a.ROG,{style:{width:117}})})})})},"community-header"):n?(0,p.jsx)(b,{featureLabel:i},"title-row-".concat(e.id)):(0,p.jsx)(g,{featureLabel:i,label:e.label,detail:e.detail,xsLabel:e.xsLabel,style:e.style},"pricing-feature-".concat(e.id))})),(0,p.jsx)(a.azJ,{className:"button-box",children:N("https://slack.min.io","Join Slack","regular",o.Bx.COMMUNITY)})]}),(0,p.jsxs)(a.azJ,{className:"plan-col ".concat(d?"active-plan-col":"non-active-plan-col"),children:[o._2.map(((e,t)=>{const i=k[t].desc,n=e.featureTitleRow;return e.isHeader?(0,p.jsx)(u,{isActive:d,isXsViewActive:v,title:"Standard",onClick:s?C:null,children:(0,p.jsx)(a.azJ,{className:"title-block",children:(0,p.jsx)(a.azJ,{className:"title-main",children:(0,p.jsx)("div",{className:"iconContainer",children:(0,p.jsx)(a.bWx,{})})})})},"standard-header"):n?(0,p.jsx)(b,{featureLabel:i},"feature-title-row-".concat(e.id)):(0,p.jsx)(g,{featureLabel:i,label:e.label,detail:e.detail,xsLabel:e.xsLabel,style:e.style},"feature-item-".concat(e.id))})),(0,p.jsx)(a.azJ,{className:"button-box",children:N("https://min.io/signup",o.M7.includes(r)?"Login to SUBNET":"Subscribe","callAction",o.Bx.STANDARD)})]}),(0,p.jsxs)(a.azJ,{className:"plan-col ".concat(x?"active-plan-col":"non-active-plan-col"),children:[o.yf.map(((e,t)=>{const i=k[t].desc,{featureTitleRow:n,isHeader:l,yesIcon:o}=e;return l?(0,p.jsx)(u,{isActive:x,isXsViewActive:w,title:"Enterprise",onClick:s?C:null,children:(0,p.jsx)(a.azJ,{className:"title-block",children:(0,p.jsx)(a.azJ,{className:"title-main",children:(0,p.jsx)("div",{className:"iconContainer",children:(0,p.jsx)(a.r3Q,{})})})})},"enterprise-header"):n?(0,p.jsx)(b,{featureLabel:i},"feature-title-row2-".concat(e.id)):o?(0,p.jsx)(a.azJ,{className:"feature-item",children:(0,p.jsxs)(a.azJ,{className:"feature-item-info",children:[(0,p.jsx)("div",{className:"xs-only"}),(0,p.jsx)(a.azJ,{className:"plan-feature",children:(0,p.jsx)(a.C1y,{})})]})},"ent-feature-yes".concat(e.id)):(0,p.jsx)(g,{featureLabel:i,label:e.label,detail:e.detail,style:e.style},"pricing-feature-item-".concat(e.id))})),(0,p.jsx)(a.azJ,{className:"button-box",children:N("https://min.io/signup",o.M7.includes(r)?"Login to SUBNET":"Subscribe","callAction",o.Bx.ENTERPRISE)})]})]})]})})};var j=i(9827),A=i(2237),v=i(4770),w=i(649);const N=(0,A.A)(n.lazy((()=>i.e(654).then(i.bind(i,3654))))),C=()=>{const e=(0,s.Zp)(),[t,i]=(0,n.useState)(!1),[r,c]=(0,n.useState)(),[d,x]=(0,n.useState)(0),[m,h]=(0,n.useState)(!1),[f,u]=(0,n.useState)(!0);(0,n.useState)(!1);const[b,g]=(0,n.useState)(!1),[A,C]=(0,n.useState)(!1),k=r&&b,S=(0,o.Gy)();(0,n.useEffect)((()=>{!k&&!S&&!f&&!m&&C(!0)}),[k,S,f,m]);const L=(0,n.useCallback)((()=>{m||(h(!0),w.A.invoke("GET","/api/v1/subnet/info").then((e=>{e&&("STANDARD"===e.plan?x(1):"ENTERPRISE"===e.plan?x(2):x(1),c(e)),g(!0),h(!1)})).catch((()=>{g(!1),h(!1)})))}),[m]);return(0,n.useEffect)((()=>{f&&(L(),u(!1))}),[L,f,u]),m?(0,p.jsx)(a.xA9,{item:!0,xs:12,children:(0,p.jsx)(a.z21,{})}):(0,p.jsxs)(n.Fragment,{children:[(0,p.jsx)(v.A,{label:"MinIO License and Support plans",actions:(0,p.jsx)(n.Fragment,{children:!k&&(0,p.jsx)(a.$nd,{id:"login-with-subnet",onClick:()=>e(l.zZ.REGISTER_SUPPORT),style:{fontSize:"14px",display:"flex",alignItems:"center",textDecoration:"none"},icon:(0,p.jsx)(a.HKb,{}),variant:"callAction",children:"Register your cluster"})})}),(0,p.jsxs)(a.Mxu,{children:[(0,p.jsx)(a.xA9,{item:!0,xs:12,children:k&&(0,p.jsx)(j.A,{email:null===r||void 0===r?void 0:r.email})}),(0,p.jsx)(y,{activateProductModal:t,closeModalAndFetchLicenseInfo:()=>{i(!1),L()},licenseInfo:r,currentPlanID:d,setActivateProductModal:i}),(0,p.jsx)(N,{isOpen:A,onClose:()=>{C(!1)}})]})]})}},5731:(e,t,i)=>{i.d(t,{A:()=>c});var n=i(5043),a=i(4574),s=i(3097),l=i.n(s),o=i(579);const r=a.Ay.a((e=>{let{theme:t}=e;return{color:l()(t,"linkColor","#2781B0"),fontWeight:600}})),c=()=>(0,o.jsxs)(n.Fragment,{children:[(0,o.jsx)("h2",{children:"What is the GNU AGPL v3?"}),(0,o.jsxs)("p",{children:['The GNU AGPL v3 is short for the "GNU Affero General Public License v3." It is a common open source license certified by the Free Software Foundation and the Open Source Initiative. You can get a copy of the GNU AGPL v3 license with MinIO source code or at\xa0',(0,o.jsx)(r,{href:"https://min.io/compliance?ref=op",target:"_blank",children:"https://www.gnu.org/licenses/agpl-3.0.en.html"}),"."]}),(0,o.jsx)("h2",{children:"What does it mean for me to comply with the GNU AGPL v3?"}),(0,o.jsx)("p",{children:"When you host or distribute MinIO over a network, the AGPL v3 applies to you. Any distribution or copying of MinIO software modified or not has to comply with the obligations specified in the AGPL v3. Otherwise, you may risk infringing MinIO\u2019s copyrights."}),(0,o.jsx)("h2",{children:"Making combined or derivative works of MinIO"}),(0,o.jsx)("p",{children:"Combining MinIO software as part of a larger software stack triggers your GNU AGPL v3 obligations."}),(0,o.jsx)("p",{children:"The method of combining does not matter. When MinIO is linked to a larger software stack in any form, including statically, dynamically, pipes, or containerized and invoked remotely, the AGPL v3 applies to your use. What triggers the AGPL v3 obligations is the exchanging data between the larger stack and MinIO."}),(0,o.jsx)("h2",{children:"Talking to your Legal Counsel"}),(0,o.jsx)("p",{children:"If you have questions, we recommend that you talk to your own attorney for legal advice. Purchasing a commercial license from MinIO removes the AGPL v3 obligations from MinIO software."})]})},7195:(e,t,i)=>{i.d(t,{A:()=>l});i(5043);var n=i(9456),a=i(4159),s=i(579);const l=()=>{const e=(0,n.d4)(a.JJ)?"op":"con";return(0,s.jsx)("a",{className:"link-text",href:"https://min.io/compliance?ref=".concat(e),children:"GNU AGPL v3"})}},3047:(e,t,i)=>{i.d(t,{_T:()=>f,yf:()=>b,c_:()=>h,Bx:()=>p,M7:()=>g,_2:()=>u,Gy:()=>v,CA:()=>y,YN:()=>A});var n=i(9923),a=i(7195),s=i(2811),l=i(2961),o=(i(5043),i(4141)),r=i(5731),c=i(9456),d=i(579);const x=()=>{const e=(0,l.jL)(),t=(0,c.d4)((e=>e.license.faqModalOpen));return(0,d.jsx)(o.A,{modalOpen:t,title:"License FAQ",onClose:()=>{e((0,s.s2)())},children:(0,d.jsx)(r.A,{})})},p={COMMUNITY:"community",STANDARD:"standard",ENTERPRISE:"enterprise"},m=e=>{let{text:t,anchor:i}=e;return(0,d.jsx)("a",{href:"https://min.io/product/subnet?ref=op#".concat(i),className:"link-text",target:"_blank",rel:"noopener ",style:{color:"#2781B0"},children:t})},h=[{label:"License ",isHeader:!0},{label:"",isHeader:!1,style:{height:"400px",verticalAlign:"top",alignItems:"start"}},{desc:"Features",featureTitleRow:!0},{desc:"Unit Price"},{desc:()=>(0,d.jsx)(m,{anchor:"sa-long-term-support",text:"Software Release"})},{desc:"SLA"},{desc:"Support"},{desc:"Critical Security and Bug Detection"},{desc:()=>(0,d.jsx)(m,{anchor:"sa-panic-button",text:"Panic Button"})},{desc:()=>(0,d.jsx)(m,{anchor:"sa-healthcheck",text:"Health Diagnostics"})},{desc:"Annual Architecture Review"},{desc:"Annual Performance Review"},{desc:"Indemnification"},{desc:"Security and Policy Review"}],f=[{label:"Community",isHeader:!0,style:{borderBottom:0}},{label:()=>(0,d.jsx)(n.azJ,{sx:{textAlign:"left"},children:(0,d.jsxs)("span",{children:["Designed for developers who are building open source applications in compliance with the ",(0,d.jsx)(a.A,{})," license, MinIO Trademarks and are able to self support themselves. It is fully featured. If you distribute, host or create derivative works of the MinIO software over the network, the ",(0,d.jsx)(a.A,{})," license requires that you also distribute the complete, corresponding source code of the combined work under the same ",(0,d.jsx)(a.A,{})," license. This requirement applies whether or not you modified MinIO.",(0,d.jsx)("br",{}),(0,d.jsx)("br",{}),(0,d.jsx)("span",{className:"link-text",onClick:()=>{l.Ay.dispatch((0,s.y)())},children:"Compliance FAQ"}),(0,d.jsx)(x,{})]})}),isHeader:!1,style:{height:"400px",borderBottom:0}},{id:"com_feat_title",featureTitleRow:!0},{id:"com_license_cost"},{id:"com_release",label:"Upstream"},{id:"com_sla",label:"No SLA"},{id:"com_support",label:"Community:",detail:"Slack + Github"},{id:"com_security",label:"Self"},{id:"com_panic",xsLabel:"N/A"},{id:"com_diag",xsLabel:"N/A"},{id:"com_arch",xsLabel:"N/A"},{id:"com_perf",xsLabel:"N/A"},{id:"com_indemnity",xsLabel:"N/A"},{id:"com_sec_policy",xsLabel:"N/A"}],u=[{label:"Standard",isHeader:!0,style:{borderBottom:0}},{isHeader:!1,label:()=>(0,d.jsxs)(n.azJ,{sx:{marginTop:"-85px",textAlign:"left"},children:[(0,d.jsxs)("span",{children:["Designed for customers who require a commercial license and can mostly self-support but want the peace of mind that comes with the MinIO Subscription Network\u2019s suite of operational capabilities and direct-to-engineer interaction. The Standard version is fully featured but with SLA limitations. ",(0,d.jsx)("br",{})," ",(0,d.jsx)("br",{})," To learn more about the MinIO Subscription Network"]})," ",(0,d.jsx)("a",{href:"https://min.io/product/subnet?ref=op",className:"link-text",target:"_blank",rel:"noopener",children:"click here"}),"."]}),style:{height:"400px",borderBottom:0}},{id:"std_feat_title",featureTitleRow:!0},{id:"std_license_cost",label:()=>(0,d.jsx)(n.azJ,{sx:{fontSize:"16px",fontWeight:600},children:"$10 per TiB per month"}),detail:()=>(0,d.jsx)(n.azJ,{sx:{fontSize:"14px",fontWeight:400,marginBottom:"5px"},children:"(Minimum of 200TiB)"})},{id:"std_release",label:"1 Year Long Term Support"},{id:"std_sla",label:"<48 Hours",detail:"(Local Business Hours)"},{id:"std_support",label:"L4 Direct Engineering",detail:"support via SUBNET"},{id:"std_security",label:"Continuous Scan and Alert"},{id:"std_panic",label:"1 Per year"},{id:"std_diag",label:"24/7/365"},{id:"std_arch",xsLabel:"N/A"},{id:"std_perf",xsLabel:"N/A"},{id:"std_indemnity",xsLabel:"N/A"},{id:"std_sec_policy",xsLabel:"N/A"}],b=[{label:"Enterprise",isHeader:!0,style:{borderBottom:0}},{isHeader:!1,label:()=>(0,d.jsxs)(n.azJ,{sx:{marginTop:"-135px",textAlign:"left"},children:[(0,d.jsxs)("span",{children:["Designed for mission critical environments where both a license and strict SLAs are required. The Enterprise version is fully featured but comes with additional capabilities. ",(0,d.jsx)("br",{})," ",(0,d.jsx)("br",{})," To learn more about the MinIO Subscription Network"]})," ",(0,d.jsx)("a",{href:"https://min.io/product/subnet?ref=op",className:"link-text",target:"_blank",rel:"noopener",children:"click here"}),"."]}),style:{height:"400px",borderBottom:0}},{id:"end_feat_title",featureTitleRow:!0},{id:"ent_license_cost",label:()=>(0,d.jsx)(n.azJ,{sx:{fontSize:"16px",fontWeight:600},children:"$20 per TiB per month"}),detail:()=>(0,d.jsx)(n.azJ,{sx:{fontSize:"14px",fontWeight:400,marginBottom:"5px"},children:"(Minimum of 100TiB)"})},{id:"ent_release",label:"5 Years Long Term Support"},{id:"ent_sla",label:"<1 hour"},{id:"ent_support",label:"L4 Direct Engineering support via",detail:"SUBNET, Phone, Web Conference"},{id:"ent_security",label:"Continuous Scan and Alert"},{id:"ent_panic",label:"Unlimited"},{id:"ent_diag",label:"24/7/365"},{id:"ent_arch",yesIcon:!0},{id:"ent_perf",yesIcon:!0},{id:"ent_indemnity",yesIcon:!0},{id:"ent_sec_policy",yesIcon:!0}],g=[p.STANDARD,p.ENTERPRISE],y=e=>"function"===typeof e?e():e,j="agpl_minio_license_consent",A=()=>{localStorage.setItem(j,"true")},v=()=>"true"===localStorage.getItem(j)},9827:(e,t,i)=>{i.d(t,{A:()=>s});i(5043);var n=i(9923),a=i(579);const s=e=>{let{email:t=""}=e;return(0,a.jsxs)(n.azJ,{sx:{height:"67px",color:"#ffffff",display:"flex",position:"relative",top:"-30px",left:"-32px",width:"calc(100% + 64px)",alignItems:"center",justifyContent:"space-between",backgroundColor:"#2781B0",padding:"0 25px 0 25px","& .registered-box, .reg-badge-box":{display:"flex",alignItems:"center",justifyContent:"flex-start"},"& .reg-badge-box":{marginLeft:"20px","& .min-icon":{fill:"#2781B0"}}},children:[(0,a.jsxs)(n.azJ,{className:"registered-box",children:[(0,a.jsx)(n.azJ,{sx:{fontSize:"16px",fontWeight:400},children:"Register status:"}),(0,a.jsxs)(n.azJ,{className:"reg-badge-box",children:[(0,a.jsx)(n.M3H,{}),(0,a.jsx)(n.azJ,{sx:{fontWeight:600},children:"Registered"})]})]}),(0,a.jsxs)(n.azJ,{className:"registered-acc-box",sx:{alignItems:"center",justifyContent:"flex-start",display:"flex",["@media (max-width: ".concat(n.nmC.sm,"px)")]:{display:"none"}},children:[(0,a.jsx)(n.azJ,{sx:{fontSize:"16px",fontWeight:400},children:"Registered to:"}),(0,a.jsx)(n.azJ,{sx:{marginLeft:"8px",fontWeight:600},children:t})]})]})}},3024:(e,t,i)=>{function n(e){var t,i,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;ta});const a=function(){for(var e,t,i=0,a="";i.\n\nimport React, { ComponentType, Suspense, SuspenseProps } from \"react\";\n\nfunction withSuspense

(\n WrappedComponent: ComponentType

,\n fallback: SuspenseProps[\"fallback\"] = null,\n) {\n function ComponentWithSuspense(props: P) {\n return (\n \n \n \n );\n }\n\n return ComponentWithSuspense;\n}\n\nexport default withSuspense;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React, { useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { ModalBox, Snackbar } from \"mds\";\nimport { CSSObject } from \"styled-components\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport { setModalSnackMessage } from \"../../../../systemSlice\";\nimport MainError from \"../MainError/MainError\";\n\ninterface IModalProps {\n onClose: () => void;\n modalOpen: boolean;\n title: string | React.ReactNode;\n children: any;\n wideLimit?: boolean;\n titleIcon?: React.ReactNode;\n iconColor?: \"default\" | \"delete\" | \"accept\";\n sx?: CSSObject;\n}\n\nconst ModalWrapper = ({\n onClose,\n modalOpen,\n title,\n children,\n wideLimit = true,\n titleIcon = null,\n iconColor = \"default\",\n sx,\n}: IModalProps) => {\n const dispatch = useAppDispatch();\n const [openSnackbar, setOpenSnackbar] = useState(false);\n\n const modalSnackMessage = useSelector(\n (state: AppState) => state.system.modalSnackBar,\n );\n\n useEffect(() => {\n dispatch(setModalSnackMessage(\"\"));\n }, [dispatch]);\n\n useEffect(() => {\n if (modalSnackMessage) {\n if (modalSnackMessage.message === \"\") {\n setOpenSnackbar(false);\n return;\n }\n // Open SnackBar\n if (modalSnackMessage.type !== \"error\") {\n setOpenSnackbar(true);\n }\n }\n }, [modalSnackMessage]);\n\n const closeSnackBar = () => {\n setOpenSnackbar(false);\n dispatch(setModalSnackMessage(\"\"));\n };\n\n let message = \"\";\n\n if (modalSnackMessage) {\n message = modalSnackMessage.detailedErrorMsg;\n if (\n modalSnackMessage.detailedErrorMsg === \"\" ||\n modalSnackMessage.detailedErrorMsg.length < 5\n ) {\n message = modalSnackMessage.message;\n }\n }\n\n return (\n \n \n \n {children}\n \n );\n};\n\nexport default ModalWrapper;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport clsx from \"clsx\";\nimport {\n AGPLV3Logo,\n Box,\n breakPoints,\n Button,\n CheckCircleIcon,\n ConsoleEnterprise,\n ConsoleStandard,\n LicenseDocIcon,\n} from \"mds\";\nimport { SubnetInfo } from \"./types\";\nimport {\n COMMUNITY_PLAN_FEATURES,\n ENTERPRISE_PLAN_FEATURES,\n FEATURE_ITEMS,\n getRenderValue,\n LICENSE_PLANS,\n PAID_PLANS,\n STANDARD_PLAN_FEATURES,\n} from \"./utils\";\nimport styled from \"styled-components\";\nimport get from \"lodash/get\";\n\ninterface IRegisterStatus {\n activateProductModal: any;\n closeModalAndFetchLicenseInfo: any;\n licenseInfo: SubnetInfo | undefined;\n currentPlanID: number;\n setActivateProductModal: any;\n}\n\nconst PlanListContainer = styled.div(({ theme }) => ({\n display: \"grid\",\n\n margin: \"0 1.5rem 0 1.5rem\",\n\n gridTemplateColumns: \"1fr 1fr 1fr 1fr\",\n\n [`@media (max-width: ${breakPoints.sm}px)`]: {\n gridTemplateColumns: \"1fr 1fr 1fr\",\n },\n\n \"&.paid-plans-only\": {\n display: \"grid\",\n gridTemplateColumns: \"1fr 1fr 1fr\",\n },\n\n \"& .features-col\": {\n flex: 1,\n minWidth: \"260px\",\n\n \"@media (max-width: 600px)\": {\n display: \"none\",\n },\n },\n\n \"& .xs-only\": {\n display: \"none\",\n },\n\n \"& .button-box\": {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: \"5px 0px 25px 0px\",\n borderLeft: `1px solid ${get(theme, \"borderColor\", \"#EAEAEA\")}`,\n },\n \"& .plan-header\": {\n height: \"99px\",\n borderBottom: `1px solid ${get(theme, \"borderColor\", \"#EAEAEA\")}`,\n },\n \"& .feature-title\": {\n height: \"25px\",\n paddingLeft: \"26px\",\n fontSize: \"14px\",\n\n background: get(theme, \"signalColors.disabled\", \"#E5E5E5\"),\n color: get(theme, \"signalColors.main\", \"#07193E\"),\n\n \"@media (max-width: 600px)\": {\n \"& .feature-title-info .xs-only\": {\n display: \"block\",\n },\n },\n },\n \"& .feature-name\": {\n minHeight: \"60px\",\n padding: \"5px\",\n borderBottom: `1px solid ${get(theme, \"borderColor\", \"#EAEAEA\")}`,\n display: \"flex\",\n alignItems: \"center\",\n paddingLeft: \"26px\",\n fontSize: \"14px\",\n },\n \"& .feature-item\": {\n display: \"flex\",\n flexFlow: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n minHeight: \"60px\",\n padding: \"0 15px 0 15px\",\n borderBottom: `1px solid ${get(theme, \"borderColor\", \"#EAEAEA\")}`,\n borderLeft: `1px solid ${get(theme, \"borderColor\", \"#EAEAEA\")}`,\n fontSize: \"14px\",\n \"& .link-text\": {\n color: \"#2781B0\",\n cursor: \"pointer\",\n textDecoration: \"underline\",\n },\n\n \"&.icon-yes\": {\n width: \"15px\",\n height: \"15px\",\n },\n },\n\n \"& .feature-item-info\": {\n flex: 1,\n display: \"flex\",\n flexFlow: \"column\",\n alignItems: \"center\",\n justifyContent: \"space-around\",\n textAlign: \"center\",\n\n \"@media (max-width: 600px)\": {\n justifyContent: \"space-evenly\",\n width: \"100%\",\n \"& .xs-only\": {\n display: \"block\",\n },\n \"& .plan-feature\": {\n textAlign: \"center\",\n paddingRight: \"10px\",\n },\n },\n },\n\n \"& .plan-col\": {\n minWidth: \"260px\",\n flex: 1,\n },\n\n \"& .active-plan-col\": {\n background: `${get(\n theme,\n \"boxBackground\",\n \"#FDFDFD\",\n )} 0% 0% no-repeat padding-box`,\n boxShadow: \" 0px 3px 20px #00000038\",\n\n \"& .plan-header\": {\n backgroundColor: get(theme, \"signalColors.info\", \"#2781B0\"),\n },\n\n \"& .feature-title\": {\n background: get(theme, \"signalColors.disabled\", \"#E5E5E5\"),\n color: get(theme, \"fontColor\", \"#000\"),\n },\n },\n}));\n\nconst PlanHeaderContainer = styled.div(({ theme }) => ({\n display: \"flex\",\n alignItems: \"flex-start\",\n justifyContent: \"center\",\n flexFlow: \"column\",\n borderLeft: `1px solid ${get(theme, \"borderColor\", \"#EAEAEA\")}`,\n borderBottom: \"0px !important\",\n \"& .plan-header\": {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexFlow: \"column\",\n },\n\n \"& .title-block\": {\n display: \"flex\",\n alignItems: \"center\",\n flexFlow: \"column\",\n width: \"100%\",\n \"& .title-main\": {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flex: 1,\n },\n \"& .iconContainer\": {\n \"& .min-icon\": {\n minWidth: 140,\n width: \"100%\",\n maxHeight: 55,\n height: \"100%\",\n },\n },\n },\n\n \"& .open-source\": {\n fontSize: \"14px\",\n display: \"flex\",\n marginBottom: \"5px\",\n alignItems: \"center\",\n \"& .min-icon\": {\n marginRight: \"8px\",\n height: \"12px\",\n width: \"12px\",\n },\n },\n\n \"& .cur-plan-text\": {\n fontSize: \"12px\",\n textTransform: \"uppercase\",\n },\n\n \"@media (max-width: 600px)\": {\n cursor: \"pointer\",\n \"& .title-block\": {\n \"& .title\": {\n fontSize: \"14px\",\n fontWeight: 600,\n },\n },\n },\n\n \"&.active, &.active.xs-active\": {\n color: \"#ffffff\",\n position: \"relative\",\n\n \"& .min-icon\": {\n fill: \"#ffffff\",\n },\n\n \"&:before\": {\n content: \"' '\",\n position: \"absolute\",\n width: \"100%\",\n height: \"18px\",\n backgroundColor: get(theme, \"signalColors.info\", \"#2781B0\"),\n display: \"block\",\n top: -16,\n },\n \"& .iconContainer\": {\n \"& .min-icon\": {\n marginTop: \"-12px\",\n },\n },\n },\n \"&.active\": {\n backgroundColor: get(theme, \"signalColors.info\", \"#2781B0\"),\n color: \"#ffffff\",\n },\n \"&.xs-active\": {\n background: \"#eaeaea\",\n },\n}));\n\nconst ListContainer = styled.div(({ theme }) => ({\n border: `1px solid ${get(theme, \"borderColor\", \"#EAEAEA\")}`,\n borderTop: \"0px\",\n marginBottom: \"45px\",\n \"&::-webkit-scrollbar\": {\n width: \"5px\",\n height: \"5px\",\n },\n \"&::-webkit-scrollbar-track\": {\n background: \"#F0F0F0\",\n borderRadius: 0,\n boxShadow: \"inset 0px 0px 0px 0px #F0F0F0\",\n },\n \"&::-webkit-scrollbar-thumb\": {\n background: \"#777474\",\n borderRadius: 0,\n },\n \"&::-webkit-scrollbar-thumb:hover\": {\n background: \"#5A6375\",\n },\n}));\n\nconst PlanHeader = ({\n isActive,\n isXsViewActive,\n title,\n onClick,\n children,\n}: {\n isActive: boolean;\n isXsViewActive: boolean;\n title: string;\n price?: string;\n onClick: any;\n children: any;\n}) => {\n const plan = title.toLowerCase();\n return (\n {\n onClick && onClick(plan);\n }}\n >\n {children}\n \n );\n};\n\nconst FeatureTitleRowCmp = (props: { featureLabel: any }) => {\n return (\n \n \n

{props.featureLabel}
\n \n \n );\n};\n\nconst PricingFeatureItem = (props: {\n featureLabel: any;\n label?: any;\n detail?: any;\n xsLabel?: string;\n style?: any;\n}) => {\n return (\n \n \n
\n {getRenderValue(props.featureLabel || \"\")}\n
\n \n
{getRenderValue(props.label || \"\")}
\n {getRenderValue(props.detail)}\n\n
{props.xsLabel}
\n
\n
\n
\n );\n};\n\nconst LicensePlans = ({ licenseInfo }: IRegisterStatus) => {\n const [isSmallScreen, setIsSmallScreen] = useState(\n window.innerWidth >= breakPoints.sm,\n );\n\n useEffect(() => {\n const handleWindowResize = () => {\n let extMD = false;\n if (window.innerWidth >= breakPoints.sm) {\n extMD = true;\n }\n setIsSmallScreen(extMD);\n };\n\n window.addEventListener(\"resize\", handleWindowResize);\n\n return () => {\n window.removeEventListener(\"resize\", handleWindowResize);\n };\n }, []);\n\n let currentPlan = !licenseInfo\n ? \"community\"\n : licenseInfo?.plan?.toLowerCase();\n\n const isCommunityPlan = currentPlan === LICENSE_PLANS.COMMUNITY;\n const isStandardPlan = currentPlan === LICENSE_PLANS.STANDARD;\n const isEnterprisePlan = currentPlan === LICENSE_PLANS.ENTERPRISE;\n\n const isPaidPlan = PAID_PLANS.includes(currentPlan);\n\n /*In smaller screen use tabbed view to show features*/\n const [xsPlanView, setXsPlanView] = useState(\"\");\n let isXsViewCommunity = xsPlanView === LICENSE_PLANS.COMMUNITY;\n let isXsViewStandard = xsPlanView === LICENSE_PLANS.STANDARD;\n let isXsViewEnterprise = xsPlanView === LICENSE_PLANS.ENTERPRISE;\n\n const getCommunityPlanHeader = () => {\n return (\n \n \n \n
\n \n
\n
\n
\n \n );\n };\n\n const getStandardPlanHeader = () => {\n return (\n \n \n \n
\n \n
\n
\n
\n \n );\n };\n\n const getEnterpriseHeader = () => {\n return (\n \n \n \n
\n \n
\n
\n
\n \n );\n };\n\n const getButton = (\n link: string,\n btnText: string,\n variant: any,\n plan: string,\n ) => {\n let linkToNav =\n currentPlan !== \"community\" ? \"https://subnet.min.io\" : link;\n return (\n {\n e.preventDefault();\n\n window.open(`${linkToNav}?ref=op`, \"_blank\");\n }}\n label={btnText}\n />\n );\n };\n\n const onPlanClick = (plan: string) => {\n setXsPlanView(plan);\n };\n\n useEffect(() => {\n if (isSmallScreen) {\n setXsPlanView(currentPlan || \"community\");\n } else {\n setXsPlanView(\"\");\n }\n }, [isSmallScreen, currentPlan]);\n\n const featureList = FEATURE_ITEMS;\n return (\n \n \n \n \n \n {featureList.map((fi) => {\n const featureTitleRow = fi.featureTitleRow;\n const isHeader = fi.isHeader;\n\n if (isHeader) {\n if (isPaidPlan) {\n return (\n \n \n \n View License agreement
\n for the registered plan.\n \n
\n );\n }\n\n return (\n \n {fi.label}\n \n );\n }\n if (featureTitleRow) {\n return (\n \n
{getRenderValue(fi.desc)}
\n \n );\n }\n return (\n \n
{getRenderValue(fi.desc)}
\n \n );\n })}\n \n {!isPaidPlan ? (\n \n {COMMUNITY_PLAN_FEATURES.map((fi, idx) => {\n const featureLabel = featureList[idx].desc;\n const { featureTitleRow, isHeader } = fi;\n\n if (isHeader) {\n return getCommunityPlanHeader();\n }\n\n if (featureTitleRow) {\n return (\n \n );\n }\n\n return (\n \n );\n })}\n \n {getButton(\n `https://slack.min.io`,\n \"Join Slack\",\n \"regular\",\n LICENSE_PLANS.COMMUNITY,\n )}\n \n \n ) : null}\n \n {STANDARD_PLAN_FEATURES.map((fi, idx) => {\n const featureLabel = featureList[idx].desc;\n const featureTitleRow = fi.featureTitleRow;\n const isHeader = fi.isHeader;\n\n if (isHeader) {\n return getStandardPlanHeader();\n }\n\n if (featureTitleRow) {\n return (\n \n );\n }\n return (\n \n );\n })}\n\n \n {getButton(\n `https://min.io/signup`,\n !PAID_PLANS.includes(currentPlan)\n ? \"Subscribe\"\n : \"Login to SUBNET\",\n \"callAction\",\n LICENSE_PLANS.STANDARD,\n )}\n \n \n \n {ENTERPRISE_PLAN_FEATURES.map((fi, idx) => {\n const featureLabel = featureList[idx].desc;\n const { featureTitleRow, isHeader, yesIcon } = fi;\n\n if (isHeader) {\n return getEnterpriseHeader();\n }\n\n if (featureTitleRow) {\n return (\n \n );\n }\n\n if (yesIcon) {\n return (\n \n \n
\n \n \n \n
\n
\n );\n }\n return (\n \n );\n })}\n \n {getButton(\n `https://min.io/signup`,\n !PAID_PLANS.includes(currentPlan)\n ? \"Subscribe\"\n : \"Login to SUBNET\",\n \"callAction\",\n LICENSE_PLANS.ENTERPRISE,\n )}\n \n \n
\n
\n
\n );\n};\n\nexport default LicensePlans;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { ArrowIcon, Button, PageLayout, ProgressBar, Grid } from \"mds\";\nimport { useNavigate } from \"react-router-dom\";\nimport { IAM_PAGES } from \"../../../common/SecureComponent/permissions\";\nimport { SubnetInfo } from \"./types\";\nimport { getLicenseConsent } from \"./utils\";\nimport LicensePlans from \"./LicensePlans\";\nimport RegistrationStatusBanner from \"../Support/RegistrationStatusBanner\";\nimport withSuspense from \"../Common/Components/withSuspense\";\nimport PageHeaderWrapper from \"../Common/PageHeaderWrapper/PageHeaderWrapper\";\nimport api from \"../../../common/api\";\n\nconst LicenseConsentModal = withSuspense(\n React.lazy(() => import(\"./LicenseConsentModal\")),\n);\n\nconst License = () => {\n const navigate = useNavigate();\n const [activateProductModal, setActivateProductModal] =\n useState(false);\n\n const [licenseInfo, setLicenseInfo] = useState();\n const [currentPlanID, setCurrentPlanID] = useState(0);\n const [loadingLicenseInfo, setLoadingLicenseInfo] = useState(false);\n const [initialLicenseLoading, setInitialLicenseLoading] =\n useState(true);\n useState(false);\n const [clusterRegistered, setClusterRegistered] = useState(false);\n\n const [isLicenseConsentOpen, setIsLicenseConsentOpen] =\n useState(false);\n\n const closeModalAndFetchLicenseInfo = () => {\n setActivateProductModal(false);\n fetchLicenseInfo();\n };\n\n const isRegistered = licenseInfo && clusterRegistered;\n\n const isAgplConsentDone = getLicenseConsent();\n\n useEffect(() => {\n const shouldConsent =\n !isRegistered && !isAgplConsentDone && !initialLicenseLoading;\n\n if (shouldConsent && !loadingLicenseInfo) {\n setIsLicenseConsentOpen(true);\n }\n }, [\n isRegistered,\n isAgplConsentDone,\n initialLicenseLoading,\n loadingLicenseInfo,\n ]);\n\n const fetchLicenseInfo = useCallback(() => {\n if (loadingLicenseInfo) {\n return;\n }\n setLoadingLicenseInfo(true);\n api\n .invoke(\"GET\", `/api/v1/subnet/info`)\n .then((res: SubnetInfo) => {\n if (res) {\n if (res.plan === \"STANDARD\") {\n setCurrentPlanID(1);\n } else if (res.plan === \"ENTERPRISE\") {\n setCurrentPlanID(2);\n } else {\n setCurrentPlanID(1);\n }\n setLicenseInfo(res);\n }\n setClusterRegistered(true);\n setLoadingLicenseInfo(false);\n })\n .catch(() => {\n setClusterRegistered(false);\n setLoadingLicenseInfo(false);\n });\n }, [loadingLicenseInfo]);\n\n useEffect(() => {\n if (initialLicenseLoading) {\n fetchLicenseInfo();\n setInitialLicenseLoading(false);\n }\n }, [fetchLicenseInfo, initialLicenseLoading, setInitialLicenseLoading]);\n\n if (loadingLicenseInfo) {\n return (\n \n \n \n );\n }\n\n return (\n \n \n {!isRegistered && (\n navigate(IAM_PAGES.REGISTER_SUPPORT)}\n style={{\n fontSize: \"14px\",\n display: \"flex\",\n alignItems: \"center\",\n textDecoration: \"none\",\n }}\n icon={}\n variant={\"callAction\"}\n >\n Register your cluster\n \n )}\n \n }\n />\n\n \n \n {isRegistered && (\n \n )}\n \n\n \n\n {\n setIsLicenseConsentOpen(false);\n }}\n />\n \n \n );\n};\n\nexport default License;\n","// This file is part of MinIO Operator\n// Copyright (c) 2023 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport styled from \"styled-components\";\nimport get from \"lodash/get\";\n\nconst LinkElement = styled.a(({ theme }) => ({\n color: get(theme, \"linkColor\", \"#2781B0\"),\n fontWeight: 600,\n}));\n\nconst LicenseFAQ = () => {\n return (\n \n

What is the GNU AGPL v3?

\n

\n The GNU AGPL v3 is short for the \"GNU Affero General Public License v3.\"\n It is a common open source license certified by the Free Software\n Foundation and the Open Source Initiative. You can get a copy of the GNU\n AGPL v3 license with MinIO source code or at \n \n https://www.gnu.org/licenses/agpl-3.0.en.html\n \n .\n

\n

What does it mean for me to comply with the GNU AGPL v3?

\n

\n When you host or distribute MinIO over a network, the AGPL v3 applies to\n you. Any distribution or copying of MinIO software modified or not has\n to comply with the obligations specified in the AGPL v3. Otherwise, you\n may risk infringing MinIO’s copyrights.\n

\n

Making combined or derivative works of MinIO

\n

\n Combining MinIO software as part of a larger software stack triggers\n your GNU AGPL v3 obligations.\n

\n

\n The method of combining does not matter. When MinIO is linked to a\n larger software stack in any form, including statically, dynamically,\n pipes, or containerized and invoked remotely, the AGPL v3 applies to\n your use. What triggers the AGPL v3 obligations is the exchanging data\n between the larger stack and MinIO.\n

\n

Talking to your Legal Counsel

\n

\n If you have questions, we recommend that you talk to your own attorney\n for legal advice. Purchasing a commercial license from MinIO removes the\n AGPL v3 obligations from MinIO software.\n

\n
\n );\n};\nexport default LicenseFAQ;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { selOpMode } from \"../../../systemSlice\";\n\nconst LicenseLink = () => {\n const isOperatorMode = useSelector(selOpMode);\n\n const refFrom = isOperatorMode ? \"op\" : \"con\";\n\n return (\n \n GNU AGPL v3\n \n );\n};\nexport default LicenseLink;\n","// This file is part of MinIO Operator\n// Copyright (c) 2023 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport ModalWrapper from \"../Common/ModalWrapper/ModalWrapper\";\nimport LicenseFAQ from \"./LicenseFAQ\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../store\";\nimport { closeFAQModal } from \"./licenseSlice\";\n\nconst FAQModal = () => {\n const dispatch = useAppDispatch();\n const isOpen = useSelector((state: AppState) => state.license.faqModalOpen);\n\n return (\n {\n dispatch(closeFAQModal());\n }}\n >\n \n \n );\n};\n\nexport default FAQModal;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { Box } from \"mds\";\nimport LicenseLink from \"./LicenseLink\";\nimport { openFAQModal } from \"./licenseSlice\";\nimport store from \"../../../store\";\nimport FAQModal from \"./FAQModal\";\n\nexport const LICENSE_PLANS = {\n COMMUNITY: \"community\",\n STANDARD: \"standard\",\n ENTERPRISE: \"enterprise\",\n};\n\ntype FeatureItem = {\n label?: any;\n isHeader?: boolean;\n style?: any;\n desc?: any;\n featureTitleRow?: boolean;\n};\n\nconst FeatureLink = ({ text, anchor }: { text: string; anchor: string }) => {\n return (\n \n {text}\n \n );\n};\n\nexport const FEATURE_ITEMS: FeatureItem[] = [\n {\n label: \"License \",\n isHeader: true,\n },\n {\n label: \"\",\n isHeader: false,\n style: {\n height: \"400px\",\n verticalAlign: \"top\",\n alignItems: \"start\",\n },\n },\n {\n desc: \"Features\",\n featureTitleRow: true,\n },\n {\n desc: \"Unit Price\",\n },\n {\n desc: () => {\n return (\n \n );\n },\n },\n {\n desc: \"SLA\",\n },\n {\n desc: \"Support\",\n },\n {\n desc: \"Critical Security and Bug Detection\",\n },\n {\n desc: () => {\n return ;\n },\n },\n {\n desc: () => {\n return (\n \n );\n },\n },\n {\n desc: \"Annual Architecture Review\",\n },\n {\n desc: \"Annual Performance Review\",\n },\n {\n desc: \"Indemnification\",\n },\n {\n desc: \"Security and Policy Review\",\n },\n];\n\nexport const COMMUNITY_PLAN_FEATURES = [\n {\n label: \"Community\",\n isHeader: true,\n style: {\n borderBottom: 0,\n },\n },\n {\n label: () => {\n return (\n \n \n Designed for developers who are building open source applications in\n compliance with the license, MinIO Trademarks and\n are able to self support themselves. It is fully featured. If you\n distribute, host or create derivative works of the MinIO software\n over the network, the license requires that you also\n distribute the complete, corresponding source code of the combined\n work under the same license. This requirement\n applies whether or not you modified MinIO.\n
\n
\n {\n store.dispatch(openFAQModal());\n }}\n >\n Compliance FAQ\n
\n \n \n \n );\n },\n isHeader: false,\n style: {\n height: \"400px\",\n borderBottom: 0,\n },\n },\n {\n id: \"com_feat_title\",\n featureTitleRow: true,\n },\n {\n id: \"com_license_cost\",\n },\n {\n id: \"com_release\",\n label: \"Upstream\",\n },\n {\n id: \"com_sla\",\n label: \"No SLA\",\n },\n {\n id: \"com_support\",\n label: \"Community:\",\n detail: \"Slack + Github\",\n },\n {\n id: \"com_security\",\n label: \"Self\",\n },\n {\n id: \"com_panic\",\n xsLabel: \"N/A\",\n },\n {\n id: \"com_diag\",\n xsLabel: \"N/A\",\n },\n {\n id: \"com_arch\",\n xsLabel: \"N/A\",\n },\n {\n id: \"com_perf\",\n xsLabel: \"N/A\",\n },\n {\n id: \"com_indemnity\",\n xsLabel: \"N/A\",\n },\n {\n id: \"com_sec_policy\",\n xsLabel: \"N/A\",\n },\n];\n\nexport const STANDARD_PLAN_FEATURES = [\n {\n label: \"Standard\",\n isHeader: true,\n style: {\n borderBottom: 0,\n },\n },\n {\n isHeader: false,\n label: () => {\n return (\n \n \n Designed for customers who require a commercial license and can\n mostly self-support but want the peace of mind that comes with the\n MinIO Subscription Network’s suite of operational capabilities and\n direct-to-engineer interaction. The Standard version is fully\n featured but with SLA limitations.

To learn more about\n the MinIO Subscription Network\n
{\" \"}\n \n click here\n \n .\n \n );\n },\n style: {\n height: \"400px\",\n borderBottom: 0,\n },\n },\n {\n id: \"std_feat_title\",\n featureTitleRow: true,\n },\n {\n id: \"std_license_cost\",\n label: () => (\n \n $10 per TiB per month\n \n ),\n detail: () => (\n \n (Minimum of 200TiB)\n \n ),\n },\n {\n id: \"std_release\",\n label: \"1 Year Long Term Support\",\n },\n {\n id: \"std_sla\",\n label: \"<48 Hours\",\n detail: \"(Local Business Hours)\",\n },\n {\n id: \"std_support\",\n label: \"L4 Direct Engineering\",\n detail: \"support via SUBNET\",\n },\n {\n id: \"std_security\",\n label: \"Continuous Scan and Alert\",\n },\n {\n id: \"std_panic\",\n label: \"1 Per year\",\n },\n {\n id: \"std_diag\",\n label: \"24/7/365\",\n },\n {\n id: \"std_arch\",\n xsLabel: \"N/A\",\n },\n {\n id: \"std_perf\",\n xsLabel: \"N/A\",\n },\n {\n id: \"std_indemnity\",\n xsLabel: \"N/A\",\n },\n {\n id: \"std_sec_policy\",\n xsLabel: \"N/A\",\n },\n];\n\nexport const ENTERPRISE_PLAN_FEATURES = [\n {\n label: \"Enterprise\",\n isHeader: true,\n style: {\n borderBottom: 0,\n },\n },\n {\n isHeader: false,\n label: () => {\n return (\n \n \n Designed for mission critical environments where both a license and\n strict SLAs are required. The Enterprise version is fully featured\n but comes with additional capabilities.

To learn more\n about the MinIO Subscription Network\n
{\" \"}\n \n click here\n \n .\n \n );\n },\n style: {\n height: \"400px\",\n borderBottom: 0,\n },\n },\n {\n id: \"end_feat_title\",\n featureTitleRow: true,\n },\n {\n id: \"ent_license_cost\",\n label: () => (\n \n $20 per TiB per month\n \n ),\n detail: () => (\n \n (Minimum of 100TiB)\n \n ),\n },\n {\n id: \"ent_release\",\n label: \"5 Years Long Term Support\",\n },\n {\n id: \"ent_sla\",\n label: \"<1 hour\",\n },\n {\n id: \"ent_support\",\n label: \"L4 Direct Engineering support via\",\n detail: \"SUBNET, Phone, Web Conference\",\n },\n {\n id: \"ent_security\",\n label: \"Continuous Scan and Alert\",\n },\n {\n id: \"ent_panic\",\n label: \"Unlimited\",\n },\n {\n id: \"ent_diag\",\n label: \"24/7/365\",\n },\n {\n id: \"ent_arch\",\n yesIcon: true,\n },\n {\n id: \"ent_perf\",\n yesIcon: true,\n },\n {\n id: \"ent_indemnity\",\n yesIcon: true,\n },\n {\n id: \"ent_sec_policy\",\n yesIcon: true,\n },\n];\n\nexport const PAID_PLANS = [LICENSE_PLANS.STANDARD, LICENSE_PLANS.ENTERPRISE];\n\nexport const getRenderValue = (val: any) => {\n return typeof val === \"function\" ? val() : val;\n};\n\nexport const LICENSE_CONSENT_STORE_KEY = \"agpl_minio_license_consent\";\nexport const setLicenseConsent = () => {\n localStorage.setItem(LICENSE_CONSENT_STORE_KEY, \"true\");\n};\n\nexport const getLicenseConsent = () => {\n return localStorage.getItem(LICENSE_CONSENT_STORE_KEY) === \"true\";\n};\n","import React from \"react\";\nimport { VerifiedIcon, Box, breakPoints } from \"mds\";\n\nconst RegistrationStatusBanner = ({ email = \"\" }: { email?: string }) => {\n return (\n \n \n Register status:\n \n \n \n Registered\n \n \n \n\n \n Registered to:\n {email}\n \n \n );\n};\nexport default RegistrationStatusBanner;\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e))for(t=0;t{n.d(t,{U:()=>o,_:()=>a});const a={label:{color:"#07193E",fontSize:13,alignSelf:"center",whiteSpace:"nowrap","&:not(:first-of-type)":{marginLeft:10}},actionsTray:{display:"flex",justifyContent:"space-between",marginBottom:"1rem",alignItems:"center","& button":{flexGrow:0,marginLeft:8}}},o={modalButtonBar:{marginTop:15,display:"flex",alignItems:"center",justifyContent:"flex-end","& button":{marginRight:10},"& button:last-child":{marginRight:0}},modalFormScrollable:{maxHeight:"calc(100vh - 300px)",overflowY:"auto",paddingTop:10}}},5448:(e,t,n)=>{n.d(t,{A:()=>s});var a=n(5043),o=n(649);const s=(e,t)=>{const[n,s]=(0,a.useState)(!1);return[n,(n,a,l,r)=>{s(!0),o.A.invoke(n,a,l,r).then((t=>{s(!1),e(t)})).catch((e=>{s(!1),t(e)}))}]}},4681:(e,t,n)=>{n.d(t,{A:()=>s});n(5043);var a=n(9923),o=n(579);const s=e=>{let{placeholder:t="",onChange:n,overrideClass:s,value:l,id:r="search-resource",label:i="",sx:c}=e;return(0,o.jsx)(a.cl_,{placeholder:t,className:s||"",id:r,label:i,onChange:e=>{n(e.target.value)},value:l,startIcon:(0,o.jsx)(a.WIv,{}),sx:c})}},3414:(e,t,n)=>{n.r(t),n.d(t,{default:()=>b});var a=n(5043),o=n(9456),s=n(3216),l=n(9923),r=n(7403),i=n(6483),c=n(2961),d=n(4159),m=n(649),p=n(5448),u=n(8661),h=n(579);const x=e=>{let{deleteOpen:t,selectedPod:n,closeDeleteModalAndRefresh:o}=e;const s=(0,c.jL)(),[r,i]=(0,a.useState)(""),[m,x]=(0,p.A)((()=>o(!0)),(e=>s((0,d.C9)(e))));return(0,h.jsx)(u.A,{title:"Delete Pod",confirmText:"Delete",isOpen:t,titleIcon:(0,h.jsx)(l.xWY,{}),isLoading:m,onConfirm:()=>{r===n.name?x("DELETE","/api/v1/namespaces/".concat(n.namespace,"/tenants/").concat(n.tenant,"/pods/").concat(n.name)):(0,d.C9)({errorMessage:"Tenant name is incorrect",detailedError:""})},onClose:()=>o(!1),confirmButtonProps:{disabled:r!==n.name||m},confirmationContent:(0,h.jsxs)(a.Fragment,{children:["To continue please type ",(0,h.jsx)("b",{children:n.name})," in the box.",(0,h.jsx)(l.azJ,{sx:{marginTop:15},children:(0,h.jsx)(l.cl_,{id:"retype-pod",name:"retype-pod",onChange:e=>{i(e.target.value)},label:"",value:r})})]})})};var g=n(6681),f=n(4681);const b=()=>{const e=(0,c.jL)(),t=(0,s.Zp)(),{tenantName:n,tenantNamespace:p}=(0,s.g)(),u=(0,o.d4)((e=>e.tenants.loadingTenant)),[b,y]=(0,a.useState)([]),[j,C]=(0,a.useState)(!0),[v,S]=(0,a.useState)(!1),[A,w]=(0,a.useState)(null),[E,T]=(0,a.useState)(""),[k,I]=(0,a.useState)(""),[P,L]=(0,a.useState)(!1),[_,B]=(0,a.useState)(!1),[D,N]=(0,a.useState)(!1),[R,K]=(0,a.useState)(!1),[z,F]=(0,a.useState)("");(0,a.useEffect)((()=>{if(_){let e=document.createElement("a");e.setAttribute("href","data:application/gzip;base64,".concat(k)),e.setAttribute("download",z),e.style.display="none",document.body.appendChild(e),e.click(),document.body.removeChild(e),B(!1),N(!0)}}),[_,z,k]);const M=b.filter((e=>e.name.toLowerCase().includes(E.toLowerCase()))),W=[{type:"view",onClick:e=>{t("/namespaces/".concat(p||"","/tenants/").concat(n||"","/pods/").concat(e.name))}},{type:"delete",onClick:e=>{e.tenant=n,e.namespace=p,w(e),S(!0)}}];(0,a.useEffect)((()=>{u&&C(!0)}),[u]),(0,a.useEffect)((()=>{j&&m.A.invoke("GET","/api/v1/namespaces/".concat(p||"","/tenants/").concat(n||"","/pods")).then((e=>{for(let t=0;t{e((0,d.C9)({errorMessage:"Error loading pods",detailedError:t.detailedError}))}))}),[j,n,p,e]),(0,a.useEffect)((()=>{P?(I(""),m.A.invoke("GET","/api/v1/namespaces/".concat(p,"/tenants/").concat(n,"/log-report")).then((async e=>{I(decodeURIComponent(e.blob)),F(e.filename||"tenant-log-report.zip"),L(!1),B(!0),0===e.filename.length||0===e.blob.length?K(!0):K(!1)})).catch((t=>{e((0,d.C9)(t)),L(!1),K(!0)}))):L(!1)}),[n,p,P,e]);return(0,h.jsxs)(a.Fragment,{children:[v&&(0,h.jsx)(x,{deleteOpen:v,selectedPod:A,closeDeleteModalAndRefresh:e=>{S(!1),C(!0)}}),(0,h.jsx)(l._xt,{separator:!0,sx:{marginBottom:15},actions:(0,h.jsx)(g.A,{tooltip:"A report of all tenant logs will be generated as a .zip file and downloaded for analysis. This report can be uploaded to SUBNET to enable our team to best assist you in troubleshooting.",children:(0,h.jsx)(l.$nd,{id:"log_report",onClick:()=>{L(!0)},disabled:0===b.length,children:"Download Log Report"})}),children:"Pods"}),D&&!R&&(0,h.jsx)(l.Wei,{title:"Success",message:"Tenant report downloaded to "+z,variant:"success"}),R&&(0,h.jsx)(l.Wei,{title:"Error",message:"There was a problem generating the report",variant:"error"}),(0,h.jsxs)(l.xA9,{container:!0,sx:{marginBottom:15},children:[(0,h.jsx)(l.xA9,{item:!0,xs:4,sx:{display:"flex",alignItems:"center"}}),(0,h.jsx)(l.xA9,{item:!0,xs:4,sx:{display:"flex",justifyContent:"flex-end",alignItems:"center"}})]}),(0,h.jsx)(l.xA9,{item:!0,xs:12,sx:r._.actionsTray,children:(0,h.jsx)(f.A,{value:E,onChange:e=>{T(e)},placeholder:"Search Pods",id:"search-resource"})}),(0,h.jsx)(l.xA9,{item:!0,xs:12,children:(0,h.jsx)(l.bQt,{columns:[{label:"Name",elementKey:"name",width:200},{label:"Status",elementKey:"status"},{label:"Age",elementKey:"time"},{label:"Pod IP",elementKey:"podIP"},{label:"Restarts",elementKey:"restarts",renderFunction:e=>null!==e?e:0},{label:"Node",elementKey:"node"}],isLoading:j,records:M,itemActions:W,entityName:"Pods",idField:"name",customPaperHeight:"calc(100vh - 400px)"})})]})}}}]); -//# sourceMappingURL=414.f9770abf.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/414.f9770abf.chunk.js.map b/web-app/build/static/js/414.f9770abf.chunk.js.map deleted file mode 100644 index f9cb735f531..00000000000 --- a/web-app/build/static/js/414.f9770abf.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/414.f9770abf.chunk.js","mappings":"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","sources":["screens/Console/Common/FormComponents/common/styleLibrary.ts","screens/Console/Common/Hooks/useApi.tsx","screens/Console/Common/SearchBox.tsx","screens/Console/Tenants/TenantDetails/DeletePod.tsx","screens/Console/Tenants/TenantDetails/PodsSummary.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\n// This object contains variables that will be used across form components.\n\nexport const actionsTray = {\n label: {\n color: \"#07193E\",\n fontSize: 13,\n alignSelf: \"center\" as const,\n whiteSpace: \"nowrap\" as const,\n \"&:not(:first-of-type)\": {\n marginLeft: 10,\n },\n },\n actionsTray: {\n display: \"flex\" as const,\n justifyContent: \"space-between\" as const,\n marginBottom: \"1rem\",\n alignItems: \"center\",\n \"& button\": {\n flexGrow: 0,\n marginLeft: 8,\n },\n },\n};\n\nexport const modalStyleUtils: any = {\n modalButtonBar: {\n marginTop: 15,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n\n \"& button\": {\n marginRight: 10,\n },\n \"& button:last-child\": {\n marginRight: 0,\n },\n },\n modalFormScrollable: {\n maxHeight: \"calc(100vh - 300px)\",\n overflowY: \"auto\",\n paddingTop: 10,\n },\n};\n","import { useState } from \"react\";\nimport api from \"../../../../common/api\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\n\ntype NoReturnFunction = (param?: any) => void;\ntype ApiMethodToInvoke = (method: string, url: string, data?: any) => void;\ntype IsApiInProgress = boolean;\n\nconst useApi = (\n onSuccess: NoReturnFunction,\n onError: NoReturnFunction,\n): [IsApiInProgress, ApiMethodToInvoke] => {\n const [isLoading, setIsLoading] = useState(false);\n\n const callApi = (method: string, url: string, data?: any, headers?: any) => {\n setIsLoading(true);\n api\n .invoke(method, url, data, headers)\n .then((res: any) => {\n setIsLoading(false);\n onSuccess(res);\n })\n .catch((err: ErrorResponseHandler) => {\n setIsLoading(false);\n onError(err);\n });\n };\n\n return [isLoading, callApi];\n};\n\nexport default useApi;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { InputBox, SearchIcon } from \"mds\";\nimport { CSSObject } from \"styled-components\";\n\ntype SearchBoxProps = {\n placeholder?: string;\n value: string;\n onChange: (value: string) => void;\n overrideClass?: any;\n id?: string;\n label?: string;\n sx?: CSSObject;\n};\n\nconst SearchBox = ({\n placeholder = \"\",\n onChange,\n overrideClass,\n value,\n id = \"search-resource\",\n label = \"\",\n sx,\n}: SearchBoxProps) => {\n return (\n {\n onChange(e.target.value);\n }}\n value={value}\n startIcon={}\n sx={sx}\n />\n );\n};\n\nexport default SearchBox;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState, Fragment } from \"react\";\nimport { ConfirmDeleteIcon, Box, InputBox } from \"mds\";\nimport { IPodListElement } from \"../ListTenants/types\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport { setErrorSnackMessage } from \"../../../../systemSlice\";\nimport { useAppDispatch } from \"../../../../store\";\nimport useApi from \"../../Common/Hooks/useApi\";\nimport ConfirmDialog from \"../../Common/ModalWrapper/ConfirmDialog\";\n\ninterface IDeletePod {\n deleteOpen: boolean;\n selectedPod: IPodListElement;\n closeDeleteModalAndRefresh: (refreshList: boolean) => any;\n}\n\nconst DeletePod = ({\n deleteOpen,\n selectedPod,\n closeDeleteModalAndRefresh,\n}: IDeletePod) => {\n const dispatch = useAppDispatch();\n const [retypePod, setRetypePod] = useState(\"\");\n\n const onDelSuccess = () => closeDeleteModalAndRefresh(true);\n const onDelError = (err: ErrorResponseHandler) =>\n dispatch(setErrorSnackMessage(err));\n const onClose = () => closeDeleteModalAndRefresh(false);\n\n const [deleteLoading, invokeDeleteApi] = useApi(onDelSuccess, onDelError);\n\n const onConfirmDelete = () => {\n if (retypePod !== selectedPod.name) {\n setErrorSnackMessage({\n errorMessage: \"Tenant name is incorrect\",\n detailedError: \"\",\n });\n return;\n }\n invokeDeleteApi(\n \"DELETE\",\n `/api/v1/namespaces/${selectedPod.namespace}/tenants/${selectedPod.tenant}/pods/${selectedPod.name}`,\n );\n };\n\n return (\n }\n isLoading={deleteLoading}\n onConfirm={onConfirmDelete}\n onClose={onClose}\n confirmButtonProps={{\n disabled: retypePod !== selectedPod.name || deleteLoading,\n }}\n confirmationContent={\n \n To continue please type {selectedPod.name} in the box.\n \n ) => {\n setRetypePod(event.target.value);\n }}\n label=\"\"\n value={retypePod}\n />\n \n \n }\n />\n );\n};\n\nexport default DeletePod;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { useNavigate, useParams } from \"react-router-dom\";\nimport { Button, DataTable, Grid, InformativeMessage, SectionTitle } from \"mds\";\nimport { actionsTray } from \"../../Common/FormComponents/common/styleLibrary\";\nimport { niceDays } from \"../../../../common/utils\";\nimport { IPodListElement } from \"../ListTenants/types\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport { setErrorSnackMessage } from \"../../../../systemSlice\";\nimport api from \"../../../../common/api\";\nimport DeletePod from \"./DeletePod\";\nimport TooltipWrapper from \"../../Common/TooltipWrapper/TooltipWrapper\";\nimport SearchBox from \"../../Common/SearchBox\";\n\nconst PodsSummary = () => {\n const dispatch = useAppDispatch();\n const navigate = useNavigate();\n const { tenantName, tenantNamespace } = useParams();\n\n const loadingTenant = useSelector(\n (state: AppState) => state.tenants.loadingTenant,\n );\n\n const [pods, setPods] = useState([]);\n const [loadingPods, setLoadingPods] = useState(true);\n const [deleteOpen, setDeleteOpen] = useState(false);\n const [selectedPod, setSelectedPod] = useState(null);\n const [filter, setFilter] = useState(\"\");\n const [logReportFileContent, setLogReportFileContent] = useState(\"\");\n const [startLogReport, setStartLogReport] = useState(false);\n const [downloadReport, setDownloadReport] = useState(false);\n const [downloadSuccess, setDownloadSuccess] = useState(false);\n const [reportError, setReportError] = useState(false);\n const [filename, setFilename] = useState(\"\");\n\n const podViewAction = (pod: IPodListElement) => {\n navigate(\n `/namespaces/${tenantNamespace || \"\"}/tenants/${tenantName || \"\"}/pods/${\n pod.name\n }`,\n );\n return;\n };\n\n useEffect(() => {\n if (downloadReport) {\n let element = document.createElement(\"a\");\n element.setAttribute(\n \"href\",\n `data:application/gzip;base64,${logReportFileContent}`,\n );\n element.setAttribute(\"download\", filename);\n\n element.style.display = \"none\";\n document.body.appendChild(element);\n\n element.click();\n\n document.body.removeChild(element);\n setDownloadReport(false);\n setDownloadSuccess(true);\n }\n }, [downloadReport, filename, logReportFileContent]);\n\n const closeDeleteModalAndRefresh = (reloadData: boolean) => {\n setDeleteOpen(false);\n setLoadingPods(true);\n };\n\n const confirmDeletePod = (pod: IPodListElement) => {\n pod.tenant = tenantName;\n pod.namespace = tenantNamespace;\n setSelectedPod(pod);\n setDeleteOpen(true);\n };\n\n const filteredRecords: IPodListElement[] = pods.filter((elementItem) =>\n elementItem.name.toLowerCase().includes(filter.toLowerCase()),\n );\n\n const podTableActions = [\n { type: \"view\", onClick: podViewAction },\n { type: \"delete\", onClick: confirmDeletePod },\n ];\n\n useEffect(() => {\n if (loadingTenant) {\n setLoadingPods(true);\n }\n }, [loadingTenant]);\n\n useEffect(() => {\n if (loadingPods) {\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${tenantNamespace || \"\"}/tenants/${\n tenantName || \"\"\n }/pods`,\n )\n .then((result: IPodListElement[]) => {\n for (let i = 0; i < result.length; i++) {\n let currentTime = (Date.now() / 1000) | 0;\n result[i].time = niceDays(\n (currentTime - parseInt(result[i].timeCreated)).toString(),\n );\n }\n setPods(result);\n setLoadingPods(false);\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(\n setErrorSnackMessage({\n errorMessage: \"Error loading pods\",\n detailedError: err.detailedError,\n }),\n );\n });\n }\n }, [loadingPods, tenantName, tenantNamespace, dispatch]);\n\n useEffect(() => {\n if (startLogReport) {\n setLogReportFileContent(\"\");\n\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${tenantNamespace}/tenants/${tenantName}/log-report`,\n )\n .then(async (res: any) => {\n setLogReportFileContent(decodeURIComponent(res.blob));\n //@ts-ignore\n setFilename(res.filename || \"tenant-log-report.zip\");\n setStartLogReport(false);\n setDownloadReport(true);\n if (res.filename.length === 0 || res.blob.length === 0) {\n setReportError(true);\n } else {\n setReportError(false);\n }\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n setStartLogReport(false);\n setReportError(true);\n });\n } else {\n // reset start status\n setStartLogReport(false);\n }\n }, [tenantName, tenantNamespace, startLogReport, dispatch]);\n\n const generateTenantLogReport = () => {\n setStartLogReport(true);\n };\n\n return (\n \n {deleteOpen && (\n \n )}\n \n \n Download Log Report\n \n \n }\n >\n Pods\n \n {downloadSuccess && !reportError && (\n \n )}\n\n {reportError && (\n \n )}\n \n \n \n \n \n {\n setFilter(value);\n }}\n placeholder={\"Search Pods\"}\n id=\"search-resource\"\n />\n \n \n {\n return input !== null ? input : 0;\n },\n },\n { label: \"Node\", elementKey: \"node\" },\n ]}\n isLoading={loadingPods}\n records={filteredRecords}\n itemActions={podTableActions}\n entityName=\"Pods\"\n idField=\"name\"\n customPaperHeight={\"calc(100vh - 400px)\"}\n />\n \n \n );\n};\n\nexport default PodsSummary;\n"],"names":["actionsTray","label","color","fontSize","alignSelf","whiteSpace","marginLeft","display","justifyContent","marginBottom","alignItems","flexGrow","modalStyleUtils","modalButtonBar","marginTop","marginRight","modalFormScrollable","maxHeight","overflowY","paddingTop","useApi","onSuccess","onError","isLoading","setIsLoading","useState","callApi","method","url","data","headers","api","invoke","then","res","catch","err","_ref","placeholder","onChange","overrideClass","value","id","sx","_jsx","InputBox","className","e","target","startIcon","SearchIcon","deleteOpen","selectedPod","closeDeleteModalAndRefresh","dispatch","useAppDispatch","retypePod","setRetypePod","deleteLoading","invokeDeleteApi","onDelSuccess","setErrorSnackMessage","ConfirmDialog","title","confirmText","isOpen","titleIcon","ConfirmDeleteIcon","onConfirm","onConfirmDelete","name","concat","namespace","tenant","errorMessage","detailedError","onClose","confirmButtonProps","disabled","confirmationContent","_jsxs","Fragment","children","Box","event","PodsSummary","navigate","useNavigate","tenantName","tenantNamespace","useParams","loadingTenant","useSelector","state","tenants","pods","setPods","loadingPods","setLoadingPods","setDeleteOpen","setSelectedPod","filter","setFilter","logReportFileContent","setLogReportFileContent","startLogReport","setStartLogReport","downloadReport","setDownloadReport","downloadSuccess","setDownloadSuccess","reportError","setReportError","filename","setFilename","useEffect","element","document","createElement","setAttribute","style","body","appendChild","click","removeChild","filteredRecords","elementItem","toLowerCase","includes","podTableActions","type","onClick","pod","result","i","length","currentTime","Date","now","time","niceDays","parseInt","timeCreated","toString","async","decodeURIComponent","blob","DeletePod","reloadData","SectionTitle","separator","actions","TooltipWrapper","tooltip","Button","generateTenantLogReport","InformativeMessage","message","variant","Grid","container","item","xs","SearchBox","DataTable","columns","elementKey","width","renderFunction","input","records","itemActions","entityName","idField","customPaperHeight"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/415.6349f8fe.chunk.js b/web-app/build/static/js/415.6349f8fe.chunk.js deleted file mode 100644 index 863917a9570..00000000000 --- a/web-app/build/static/js/415.6349f8fe.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[415],{7403:(e,n,s)=>{s.d(n,{U:()=>l,_:()=>t});const t={label:{color:"#07193E",fontSize:13,alignSelf:"center",whiteSpace:"nowrap","&:not(:first-of-type)":{marginLeft:10}},actionsTray:{display:"flex",justifyContent:"space-between",marginBottom:"1rem",alignItems:"center","& button":{flexGrow:0,marginLeft:8}}},l={modalButtonBar:{marginTop:15,display:"flex",alignItems:"center",justifyContent:"flex-end","& button":{marginRight:10},"& button:last-child":{marginRight:0}},modalFormScrollable:{maxHeight:"calc(100vh - 300px)",overflowY:"auto",paddingTop:10}}},4681:(e,n,s)=>{s.d(n,{A:()=>o});s(5043);var t=s(9923),l=s(579);const o=e=>{let{placeholder:n="",onChange:s,overrideClass:o,value:r,id:a="search-resource",label:i="",sx:d}=e;return(0,l.jsx)(t.cl_,{placeholder:n,className:o||"",id:a,label:i,onChange:e=>{s(e.target.value)},value:r,startIcon:(0,l.jsx)(t.WIv,{}),sx:d})}},2415:(e,n,s)=>{s.r(n),s.d(n,{default:()=>j});var t=s(5043),l=s(9923),o=s(9456),r=s(3216),a=s(2961),i=s(9607),d=s(7403),u=s(6483),c=s(6681),x=s(4681),m=s(579);const p=e=>{let{setPoolDetailsView:n}=e;const s=(0,a.jL)(),p=(0,r.Zp)(),v=(0,o.d4)((e=>e.tenants.loadingTenant)),f=(0,o.d4)((e=>e.tenants.tenantInfo)),[j,h]=(0,t.useState)([]),[g,y]=(0,t.useState)("");(0,t.useEffect)((()=>{if(f){const e=f.pools?f.pools:[];h(e)}}),[f]);const C=j.filter((e=>{var n;return!(null===(n=e.name)||void 0===n||!n.toLowerCase().includes(g.toLowerCase()))})),b=[{type:"view",onClick:e=>{s((0,i.mw)(e.name)),n()}}];return(0,m.jsxs)(t.Fragment,{children:[(0,m.jsxs)(l.xA9,{item:!0,xs:12,sx:d._.actionsTray,children:[(0,m.jsx)(x.A,{value:g,onChange:e=>{y(e)},placeholder:"Filter",id:"search-resource"}),(0,m.jsx)(c.A,{tooltip:"Expand Tenant",children:(0,m.jsx)(l.$nd,{id:"expand-tenant",label:"Expand Tenant",onClick:()=>{p("/namespaces/".concat((null===f||void 0===f?void 0:f.namespace)||"","/tenants/").concat((null===f||void 0===f?void 0:f.name)||"","/add-pool"))},icon:(0,m.jsx)(l.REV,{}),variant:"callAction"})})]}),(0,m.jsx)(l.xA9,{item:!0,xs:12,children:(0,m.jsx)(l.bQt,{itemActions:b,columns:[{label:"Name",elementKey:"name"},{label:"Total Capacity",elementKey:"capacity",renderFullObject:!0,renderFunction:e=>(0,u.qO)(e.volumes_per_server*e.servers*e.volume_configuration.size)},{label:"Servers",elementKey:"servers"},{label:"Volumes/Server",elementKey:"volumes_per_server"}],isLoading:v,records:C,entityName:"Servers",idField:"name",customEmptyMessage:"No Pools found",customPaperHeight:"calc(100vh - 400px)"})})]})},v={display:"grid",gridTemplateColumns:"2fr 1fr",gridAutoFlow:"row",gap:2,padding:"15px",["@media (max-width: ".concat(l.nmC.sm,"px)")]:{gridTemplateColumns:"1fr",gridAutoFlow:"dense"}},f=()=>{var e,n,s,a,i,d,c,x,p,f,j;const h=(0,r.Zp)(),g=(0,o.d4)((e=>e.tenants.tenantInfo)),y=(0,o.d4)((e=>e.tenants.selectedPool));if(null===g)return(0,m.jsx)(t.Fragment,{});const C=(null===(e=g.pools)||void 0===e?void 0:e.find((e=>e.name===y)))||null;if(null===C)return null;let b="None";return C.affinity&&(b=C.affinity.nodeAffinity?"Node Selector":"Default (Pod Anti-Affinity)"),(0,m.jsx)(t.Fragment,{children:(0,m.jsxs)(l.azJ,{withBorders:!0,customBorderPadding:"0px",sx:{width:"100%"},children:[(0,m.jsx)(l._xt,{separator:!0,actions:(0,m.jsx)(l.$nd,{icon:(0,m.jsx)(l.qI7,{}),onClick:()=>{h("/namespaces/".concat((null===g||void 0===g?void 0:g.namespace)||"","/tenants/").concat((null===g||void 0===g?void 0:g.name)||"","/edit-pool"))},label:"Edit Pool",id:"editPool"}),children:"Pool Configuration"}),(0,m.jsxs)(l.azJ,{sx:{...v},children:[(0,m.jsx)(l.mZW,{label:"Pool Name",value:C.name}),(0,m.jsx)(l.mZW,{label:"Total Volumes",value:C.volumes_per_server}),(0,m.jsx)(l.mZW,{label:"Volumes per server",value:C.volumes_per_server}),(0,m.jsx)(l.mZW,{label:"Capacity",value:(0,u.qO)(C.volumes_per_server*C.servers*C.volume_configuration.size)}),(0,m.jsx)(l.mZW,{label:"Runtime Class Name",value:C.runtimeClassName})]}),(0,m.jsx)(l._xt,{separator:!0,children:"Resources"}),(0,m.jsxs)(l.azJ,{sx:{...v},children:[C.resources&&(0,m.jsxs)(t.Fragment,{children:[(0,m.jsx)(l.mZW,{label:"CPU",value:null===(n=C.resources)||void 0===n||null===(s=n.requests)||void 0===s?void 0:s.cpu}),(0,m.jsx)(l.mZW,{label:"Memory",value:(0,u.qO)(null===(a=C.resources)||void 0===a||null===(i=a.requests)||void 0===i?void 0:i.memory)})]}),(0,m.jsx)(l.mZW,{label:"Volume Size",value:(0,u.qO)(C.volume_configuration.size)}),(0,m.jsx)(l.mZW,{label:"Storage Class Name",value:C.volume_configuration.storage_class_name})]}),C.securityContext&&(C.securityContext.runAsNonRoot||C.securityContext.runAsUser||C.securityContext.runAsGroup||C.securityContext.fsGroup)&&(0,m.jsxs)(t.Fragment,{children:[(0,m.jsx)(l._xt,{separator:!0,children:"Security Context"}),(0,m.jsxs)(l.azJ,{children:[null!==C.securityContext.runAsNonRoot&&(0,m.jsx)(l.azJ,{sx:{...v},children:(0,m.jsx)(l.mZW,{label:"Run as Non Root",value:C.securityContext.runAsNonRoot?"Yes":"No"})}),(0,m.jsxs)(l.azJ,{sx:{display:"grid",gridTemplateColumns:"2fr 1fr",gridAutoFlow:"row",gap:2,padding:"15px",["@media (max-width: ".concat(l.nmC.sm,"px)")]:{gridTemplateColumns:"1fr",gridAutoFlow:"dense"},["@media (max-width: ".concat(l.nmC.md,"px)")]:{gridTemplateColumns:"2fr 1fr"},["@media (max-width: ".concat(l.nmC.lg,"px)")]:{gridTemplateColumns:"1fr 1fr 1fr"}},children:[C.securityContext.runAsUser&&(0,m.jsx)(l.mZW,{label:"Run as User",value:C.securityContext.runAsUser}),C.securityContext.runAsGroup&&(0,m.jsx)(l.mZW,{label:"Run as Group",value:C.securityContext.runAsGroup}),C.securityContext.fsGroup&&(0,m.jsx)(l.mZW,{label:"FsGroup",value:C.securityContext.fsGroup})]})]})]}),(0,m.jsx)(l._xt,{separator:!0,children:"Affinity"}),(0,m.jsxs)(l.azJ,{children:[(0,m.jsxs)(l.azJ,{sx:{...v},children:[(0,m.jsx)(l.mZW,{label:"Type",value:b}),null!==(d=C.affinity)&&void 0!==d&&d.nodeAffinity&&null!==(c=C.affinity)&&void 0!==c&&c.podAntiAffinity?(0,m.jsx)(l.mZW,{label:"With Pod Anti affinity",value:"Yes"}):(0,m.jsx)("span",{})]}),(null===(x=C.affinity)||void 0===x?void 0:x.nodeAffinity)&&(0,m.jsxs)(t.Fragment,{children:[(0,m.jsx)(l._xt,{separator:!0,children:"Labels"}),(0,m.jsx)("ul",{children:null===(p=C.affinity)||void 0===p||null===(f=p.nodeAffinity)||void 0===f||null===(j=f.requiredDuringSchedulingIgnoredDuringExecution)||void 0===j?void 0:j.nodeSelectorTerms.map((e=>{var n;return null===(n=e.matchExpressions)||void 0===n?void 0:n.map((e=>{var n;return(0,m.jsxs)("li",{children:[e.key," - ",null===(n=e.values)||void 0===n?void 0:n.join(", ")]})}))}))})]})]}),C.tolerations&&C.tolerations.length>0&&(0,m.jsxs)(t.Fragment,{children:[(0,m.jsx)(l._xt,{separator:!0,children:"Tolerations"}),(0,m.jsx)(l.azJ,{children:(0,m.jsx)("ul",{children:C.tolerations.map((e=>{var n,s;return(0,m.jsx)("li",{children:"Equal"===e.operator?(0,m.jsxs)(t.Fragment,{children:["If ",(0,m.jsx)("strong",{children:e.key})," is equal to"," ",(0,m.jsx)("strong",{children:e.value})," then"," ",(0,m.jsx)("strong",{children:e.effect})," after"," ",(0,m.jsx)("strong",{children:(null===(n=e.tolerationSeconds)||void 0===n?void 0:n.seconds)||0})," ","seconds"]}):(0,m.jsxs)(t.Fragment,{children:["If ",(0,m.jsx)("strong",{children:e.key})," exists then"," ",(0,m.jsx)("strong",{children:e.effect})," after"," ",(0,m.jsx)("strong",{children:(null===(s=e.tolerationSeconds)||void 0===s?void 0:s.seconds)||0})," ","seconds"]})})}))})})]})]})})},j=()=>{const e=(0,a.jL)(),n=(0,r.Zp)(),{pathname:s=""}=(0,r.zy)(),d=(0,o.d4)((e=>e.tenants.selectedPool)),u=(0,o.d4)((e=>e.tenants.poolDetailsOpen));return(0,m.jsxs)(t.Fragment,{children:[u&&(0,m.jsx)(l.azJ,{children:(0,m.jsx)(l.EGL,{label:"Pools list",onClick:()=>{n(s),e((0,i.VG)(!1))}})}),(0,m.jsx)(l._xt,{separator:!0,sx:{marginBottom:15},children:u?"Pool Details - ".concat(d||""):"Pools"}),(0,m.jsx)(l.azJ,{children:u?(0,m.jsx)(f,{}):(0,m.jsx)(p,{setPoolDetailsView:()=>{e((0,i.VG)(!0))}})})]})}}}]); -//# sourceMappingURL=415.6349f8fe.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/415.6349f8fe.chunk.js.map b/web-app/build/static/js/415.6349f8fe.chunk.js.map deleted file mode 100644 index 2a4183fc06b..00000000000 --- a/web-app/build/static/js/415.6349f8fe.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/415.6349f8fe.chunk.js","mappings":"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","sources":["screens/Console/Common/FormComponents/common/styleLibrary.ts","screens/Console/Common/SearchBox.tsx","screens/Console/Tenants/TenantDetails/Pools/Details/PoolsListing.tsx","screens/Console/Tenants/TenantDetails/Pools/Details/PoolDetails.tsx","screens/Console/Tenants/TenantDetails/PoolsSummary.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\n// This object contains variables that will be used across form components.\n\nexport const actionsTray = {\n label: {\n color: \"#07193E\",\n fontSize: 13,\n alignSelf: \"center\" as const,\n whiteSpace: \"nowrap\" as const,\n \"&:not(:first-of-type)\": {\n marginLeft: 10,\n },\n },\n actionsTray: {\n display: \"flex\" as const,\n justifyContent: \"space-between\" as const,\n marginBottom: \"1rem\",\n alignItems: \"center\",\n \"& button\": {\n flexGrow: 0,\n marginLeft: 8,\n },\n },\n};\n\nexport const modalStyleUtils: any = {\n modalButtonBar: {\n marginTop: 15,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n\n \"& button\": {\n marginRight: 10,\n },\n \"& button:last-child\": {\n marginRight: 0,\n },\n },\n modalFormScrollable: {\n maxHeight: \"calc(100vh - 300px)\",\n overflowY: \"auto\",\n paddingTop: 10,\n },\n};\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { InputBox, SearchIcon } from \"mds\";\nimport { CSSObject } from \"styled-components\";\n\ntype SearchBoxProps = {\n placeholder?: string;\n value: string;\n onChange: (value: string) => void;\n overrideClass?: any;\n id?: string;\n label?: string;\n sx?: CSSObject;\n};\n\nconst SearchBox = ({\n placeholder = \"\",\n onChange,\n overrideClass,\n value,\n id = \"search-resource\",\n label = \"\",\n sx,\n}: SearchBoxProps) => {\n return (\n {\n onChange(e.target.value);\n }}\n value={value}\n startIcon={}\n sx={sx}\n />\n );\n};\n\nexport default SearchBox;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport { AddIcon, Button, DataTable, Grid } from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport { useNavigate } from \"react-router-dom\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport { actionsTray } from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport { setSelectedPool } from \"../../../tenantsSlice\";\nimport { Pool } from \"../../../../../../api/operatorApi\";\nimport { niceBytesInt } from \"../../../../../../common/utils\";\nimport TooltipWrapper from \"../../../../Common/TooltipWrapper/TooltipWrapper\";\nimport SearchBox from \"../../../../Common/SearchBox\";\n\ninterface IPoolsSummary {\n setPoolDetailsView: () => void;\n}\n\nconst PoolsListing = ({ setPoolDetailsView }: IPoolsSummary) => {\n const dispatch = useAppDispatch();\n const navigate = useNavigate();\n\n const loadingTenant = useSelector(\n (state: AppState) => state.tenants.loadingTenant,\n );\n const tenant = useSelector((state: AppState) => state.tenants.tenantInfo);\n\n const [pools, setPools] = useState([]);\n const [filter, setFilter] = useState(\"\");\n\n useEffect(() => {\n if (tenant) {\n const resPools = !tenant.pools ? [] : tenant.pools;\n setPools(resPools);\n }\n }, [tenant]);\n\n const filteredPools = pools.filter((pool) => {\n if (pool.name?.toLowerCase().includes(filter.toLowerCase())) {\n return true;\n }\n\n return false;\n });\n\n const listActions = [\n {\n type: \"view\",\n onClick: (selectedValue: Pool) => {\n dispatch(setSelectedPool(selectedValue.name!));\n setPoolDetailsView();\n },\n },\n ];\n\n return (\n \n \n {\n setFilter(value);\n }}\n placeholder={\"Filter\"}\n id=\"search-resource\"\n />\n \n {\n navigate(\n `/namespaces/${tenant?.namespace || \"\"}/tenants/${\n tenant?.name || \"\"\n }/add-pool`,\n );\n }}\n icon={}\n variant={\"callAction\"}\n />\n \n \n \n \n niceBytesInt(\n x.volumes_per_server *\n x.servers *\n x.volume_configuration.size,\n ),\n },\n { label: \"Servers\", elementKey: \"servers\" },\n { label: \"Volumes/Server\", elementKey: \"volumes_per_server\" },\n ]}\n isLoading={loadingTenant}\n records={filteredPools}\n entityName=\"Servers\"\n idField=\"name\"\n customEmptyMessage=\"No Pools found\"\n customPaperHeight={\"calc(100vh - 400px)\"}\n />\n \n \n );\n};\n\nexport default PoolsListing;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { useNavigate } from \"react-router-dom\";\nimport { AppState } from \"../../../../../../store\";\nimport { niceBytesInt } from \"../../../../../../common/utils\";\nimport {\n Box,\n breakPoints,\n Button,\n EditTenantIcon,\n SectionTitle,\n ValuePair,\n} from \"mds\";\nimport { NodeSelectorTerm } from \"../../../../../../api/operatorApi\";\n\nconst twoColCssGridLayoutConfig = {\n display: \"grid\",\n gridTemplateColumns: \"2fr 1fr\",\n gridAutoFlow: \"row\",\n gap: 2,\n padding: \"15px\",\n [`@media (max-width: ${breakPoints.sm}px)`]: {\n gridTemplateColumns: \"1fr\",\n gridAutoFlow: \"dense\",\n },\n};\n\nconst PoolDetails = () => {\n const navigate = useNavigate();\n\n const tenant = useSelector((state: AppState) => state.tenants.tenantInfo);\n const selectedPool = useSelector(\n (state: AppState) => state.tenants.selectedPool,\n );\n if (tenant === null) {\n return ;\n }\n\n const poolInformation =\n tenant.pools?.find((pool) => pool.name === selectedPool) || null;\n\n if (poolInformation === null) {\n return null;\n }\n\n let affinityType = \"None\";\n\n if (poolInformation.affinity) {\n if (poolInformation.affinity.nodeAffinity) {\n affinityType = \"Node Selector\";\n } else {\n affinityType = \"Default (Pod Anti-Affinity)\";\n }\n }\n\n return (\n \n \n }\n onClick={() => {\n navigate(\n `/namespaces/${tenant?.namespace || \"\"}/tenants/${\n tenant?.name || \"\"\n }/edit-pool`,\n );\n }}\n label={\"Edit Pool\"}\n id={\"editPool\"}\n />\n }\n >\n Pool Configuration\n \n \n \n \n \n \n \n \n Resources\n \n {poolInformation.resources && (\n \n \n \n \n )}\n \n \n \n {poolInformation.securityContext &&\n (poolInformation.securityContext.runAsNonRoot ||\n poolInformation.securityContext.runAsUser ||\n poolInformation.securityContext.runAsGroup ||\n poolInformation.securityContext.fsGroup) && (\n \n Security Context\n \n {poolInformation.securityContext.runAsNonRoot !== null && (\n \n \n \n )}\n \n {poolInformation.securityContext.runAsUser && (\n \n )}\n {poolInformation.securityContext.runAsGroup && (\n \n )}\n {poolInformation.securityContext.fsGroup && (\n \n )}\n \n \n \n )}\n Affinity\n \n \n \n {poolInformation.affinity?.nodeAffinity &&\n poolInformation.affinity?.podAntiAffinity ? (\n \n ) : (\n \n )}\n \n {poolInformation.affinity?.nodeAffinity && (\n \n Labels\n
    \n {poolInformation.affinity?.nodeAffinity?.requiredDuringSchedulingIgnoredDuringExecution?.nodeSelectorTerms.map(\n (term: NodeSelectorTerm) => {\n return term.matchExpressions?.map((trm) => {\n return (\n
  • \n {trm.key} - {trm.values?.join(\", \")}\n
  • \n );\n });\n },\n )}\n
\n
\n )}\n
\n {poolInformation.tolerations &&\n poolInformation.tolerations.length > 0 && (\n \n Tolerations\n \n
    \n {poolInformation.tolerations.map((tolItem) => {\n return (\n
  • \n {tolItem.operator === \"Equal\" ? (\n \n If {tolItem.key} is equal to{\" \"}\n {tolItem.value} then{\" \"}\n {tolItem.effect} after{\" \"}\n \n {tolItem.tolerationSeconds?.seconds || 0}\n {\" \"}\n seconds\n \n ) : (\n \n If {tolItem.key} exists then{\" \"}\n {tolItem.effect} after{\" \"}\n \n {tolItem.tolerationSeconds?.seconds || 0}\n {\" \"}\n seconds\n \n )}\n
  • \n );\n })}\n
\n
\n
\n )}\n \n
\n );\n};\n\nexport default PoolDetails;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport { BackLink, SectionTitle, Box } from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport { useLocation, useNavigate } from \"react-router-dom\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport { setOpenPoolDetails } from \"../tenantsSlice\";\nimport PoolsListing from \"./Pools/Details/PoolsListing\";\nimport PoolDetails from \"./Pools/Details/PoolDetails\";\n\nconst PoolsSummary = () => {\n const dispatch = useAppDispatch();\n const navigate = useNavigate();\n\n const { pathname = \"\" } = useLocation();\n\n const selectedPool = useSelector(\n (state: AppState) => state.tenants.selectedPool,\n );\n const poolDetailsOpen = useSelector(\n (state: AppState) => state.tenants.poolDetailsOpen,\n );\n\n return (\n \n {poolDetailsOpen && (\n \n {\n navigate(pathname);\n dispatch(setOpenPoolDetails(false));\n }}\n />\n \n )}\n \n {poolDetailsOpen ? `Pool Details - ${selectedPool || \"\"}` : \"Pools\"}\n \n\n \n {poolDetailsOpen ? (\n \n ) : (\n {\n dispatch(setOpenPoolDetails(true));\n }}\n />\n )}\n \n \n );\n};\n\nexport default PoolsSummary;\n"],"names":["actionsTray","label","color","fontSize","alignSelf","whiteSpace","marginLeft","display","justifyContent","marginBottom","alignItems","flexGrow","modalStyleUtils","modalButtonBar","marginTop","marginRight","modalFormScrollable","maxHeight","overflowY","paddingTop","_ref","placeholder","onChange","overrideClass","value","id","sx","_jsx","InputBox","className","e","target","startIcon","SearchIcon","setPoolDetailsView","dispatch","useAppDispatch","navigate","useNavigate","loadingTenant","useSelector","state","tenants","tenant","tenantInfo","pools","setPools","useState","filter","setFilter","useEffect","resPools","filteredPools","pool","_pool$name","name","toLowerCase","includes","listActions","type","onClick","selectedValue","setSelectedPool","_jsxs","Fragment","children","Grid","item","xs","SearchBox","TooltipWrapper","tooltip","Button","concat","namespace","icon","AddIcon","variant","DataTable","itemActions","columns","elementKey","renderFullObject","renderFunction","x","niceBytesInt","volumes_per_server","servers","volume_configuration","size","isLoading","records","entityName","idField","customEmptyMessage","customPaperHeight","twoColCssGridLayoutConfig","gridTemplateColumns","gridAutoFlow","gap","padding","breakPoints","sm","PoolDetails","_tenant$pools","_poolInformation$reso","_poolInformation$reso2","_poolInformation$reso3","_poolInformation$reso4","_poolInformation$affi","_poolInformation$affi2","_poolInformation$affi3","_poolInformation$affi4","_poolInformation$affi5","_poolInformation$affi6","selectedPool","poolInformation","find","affinityType","affinity","nodeAffinity","Box","withBorders","customBorderPadding","width","SectionTitle","separator","actions","EditTenantIcon","ValuePair","runtimeClassName","resources","requests","cpu","memory","storage_class_name","securityContext","runAsNonRoot","runAsUser","runAsGroup","fsGroup","md","lg","podAntiAffinity","requiredDuringSchedulingIgnoredDuringExecution","nodeSelectorTerms","map","term","_term$matchExpression","matchExpressions","trm","_trm$values","key","values","join","tolerations","length","tolItem","_tolItem$tolerationSe","_tolItem$tolerationSe2","operator","effect","tolerationSeconds","seconds","PoolsSummary","pathname","useLocation","poolDetailsOpen","BackLink","setOpenPoolDetails","PoolsListing"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/450.be9d2e55.chunk.js b/web-app/build/static/js/450.be9d2e55.chunk.js deleted file mode 100644 index 336881b4334..00000000000 --- a/web-app/build/static/js/450.be9d2e55.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[450],{450:(e,n,t)=>{t.r(n),t.d(n,{default:()=>h});var c=t(5043),a=t(9923),o=t(3216),s=t(5475),r=t(3097),l=t.n(r),i=t(4574),d=t(4770),p=t(579);const u=i.Ay.div((e=>{let{theme:n}=e;return{position:"absolute",left:0,top:80,height:"calc(100vh - 81px)",width:"100%",borderTop:"1px solid ".concat(l()(n,"borderColor","#E2E2E2")),"& .loader":{width:100,margin:"auto",marginTop:80},"& .iframeStyle":{border:0,position:"absolute",height:"calc(100vh - 77px)",width:"100%"}}})),h=()=>{const e=(0,o.Zp)(),n=(0,o.g)(),[t,r]=(0,c.useState)(!0),l=n.tenantName||"",i=n.tenantNamespace||"",h=c.useRef(null);return(0,p.jsxs)(c.Fragment,{children:[(0,p.jsx)(d.A,{label:(0,p.jsxs)(c.Fragment,{children:[(0,p.jsx)(s.N_,{to:"/tenants",children:"Tenants"})," > ",(0,p.jsx)(s.N_,{to:"/namespaces/".concat(i,"/tenants/").concat(l),children:l})," > Management"]}),actions:(0,p.jsxs)(c.Fragment,{children:[(0,p.jsx)(a.K0,{onClick:()=>{if(null!==h&&null!==h.current&&null!==h.current.contentDocument){const e=h.current.contentDocument.location.toString();let n="&";if(e.indexOf("?")<0&&(n="?"),e.indexOf("cp=y")<0){const t="".concat(e).concat(n,"cp=y");h.current.contentDocument.location.replace(t)}else h.current.contentDocument.location.reload()}},size:"large",children:(0,p.jsx)(a.fNY,{})}),(0,p.jsx)(a.K0,{onClick:()=>{e("/namespaces/".concat(i,"/tenants/").concat(l))},size:"large",children:(0,p.jsx)(a.Tir,{})})]})}),(0,p.jsxs)(u,{children:[t&&(0,p.jsx)(a.azJ,{className:"loader",children:(0,p.jsx)(a.aHM,{})}),(0,p.jsx)("iframe",{ref:h,className:"iframeStyle",title:"metrics",src:"/api/hop/".concat(i,"/").concat(l,"/?cp=y"),onLoad:e=>{r(!1)}})]})]})}}}]); -//# sourceMappingURL=450.be9d2e55.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/450.be9d2e55.chunk.js.map b/web-app/build/static/js/450.be9d2e55.chunk.js.map deleted file mode 100644 index 971be7f4422..00000000000 --- a/web-app/build/static/js/450.be9d2e55.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/450.be9d2e55.chunk.js","mappings":"0NAuBA,MAAMA,EAAeC,EAAAA,GAAOC,KAAIC,IAAA,IAAC,MAAEC,GAAOD,EAAA,MAAM,CAC9CE,SAAU,WACVC,KAAM,EACNC,IAAK,GACLC,OAAQ,qBACRC,MAAO,OACPC,UAAU,aAADC,OAAeC,IAAIR,EAAO,cAAe,YAClD,YAAa,CACXK,MAAO,IACPI,OAAQ,OACRC,UAAW,IAEb,iBAAkB,CAChBC,OAAQ,EACRV,SAAU,WACVG,OAAQ,qBACRC,MAAO,QAEV,IAwFD,EAtFYO,KACV,MAAMC,GAAWC,EAAAA,EAAAA,MACXC,GAASC,EAAAA,EAAAA,MAERC,EAASC,IAAcC,EAAAA,EAAAA,WAAkB,GAE1CC,EAAaL,EAAOK,YAAc,GAClCC,EAAkBN,EAAOM,iBAAmB,GAC5CC,EAAeC,EAAAA,OAAgC,MAErD,OACEC,EAAAA,EAAAA,MAACC,EAAAA,SAAQ,CAAAC,SAAA,EACPC,EAAAA,EAAAA,KAACC,EAAAA,EAAiB,CAChBC,OACEL,EAAAA,EAAAA,MAACC,EAAAA,SAAQ,CAAAC,SAAA,EACPC,EAAAA,EAAAA,KAACG,EAAAA,GAAI,CAACC,GAAI,WAAWL,SAAC,YAAc,OAEpCC,EAAAA,EAAAA,KAACG,EAAAA,GAAI,CAACC,GAAE,eAAAxB,OAAiBc,EAAe,aAAAd,OAAYa,GAAaM,SAC9DN,IACI,mBAIXY,SACER,EAAAA,EAAAA,MAACD,EAAAA,SAAc,CAAAG,SAAA,EACbC,EAAAA,EAAAA,KAACM,EAAAA,GAAU,CACTC,QAASA,KACP,GACmB,OAAjBZ,GACyB,OAAzBA,EAAaa,SAC4B,OAAzCb,EAAaa,QAAQC,gBACrB,CACA,MAAMC,EACJf,EAAaa,QAAQC,gBAAgBE,SAASC,WAEhD,IAAIC,EAAM,IAMV,GAJIH,EAAII,QAAQ,KAAO,IACrBD,EAAG,KAGDH,EAAII,QAAQ,QAAU,EAAG,CAC3B,MAAMC,EAAI,GAAAnC,OAAM8B,GAAG9B,OAAGiC,EAAG,QACzBlB,EAAaa,QAAQC,gBAAgBE,SAASK,QAAQD,EACxD,MACEpB,EAAaa,QAAQC,gBAAgBE,SAASM,QAElD,GAEFC,KAAK,QAAOnB,UAEZC,EAAAA,EAAAA,KAACmB,EAAAA,IAAW,OAEdnB,EAAAA,EAAAA,KAACM,EAAAA,GAAU,CACTC,QAASA,KACPrB,EAAS,eAADN,OACSc,EAAe,aAAAd,OAAYa,GAC3C,EAEHyB,KAAK,QAAOnB,UAEZC,EAAAA,EAAAA,KAACoB,EAAAA,IAAS,YAKlBvB,EAAAA,EAAAA,MAAC5B,EAAY,CAAA8B,SAAA,CACVT,IACCU,EAAAA,EAAAA,KAACqB,EAAAA,IAAG,CAACC,UAAW,SAASvB,UACvBC,EAAAA,EAAAA,KAACuB,EAAAA,IAAM,OAGXvB,EAAAA,EAAAA,KAAA,UACEwB,IAAK7B,EACL2B,UAAW,cACXG,MAAO,UACPC,IAAG,YAAA9C,OAAcc,EAAe,KAAAd,OAAIa,EAAU,UAC9CkC,OAASC,IACPrC,GAAW,EAAM,SAId,C","sources":["screens/Console/Tenants/TenantDetails/hop/Hop.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useState } from \"react\";\nimport { Box, IconButton, Loader, LoginIcon, RefreshIcon } from \"mds\";\nimport { Link, useNavigate, useParams } from \"react-router-dom\";\nimport get from \"lodash/get\";\nimport styled from \"styled-components\";\nimport PageHeaderWrapper from \"../../../Common/PageHeaderWrapper/PageHeaderWrapper\";\n\nconst HopContainer = styled.div(({ theme }) => ({\n position: \"absolute\",\n left: 0,\n top: 80,\n height: \"calc(100vh - 81px)\",\n width: \"100%\",\n borderTop: `1px solid ${get(theme, \"borderColor\", \"#E2E2E2\")}`,\n \"& .loader\": {\n width: 100,\n margin: \"auto\",\n marginTop: 80,\n },\n \"& .iframeStyle\": {\n border: 0,\n position: \"absolute\",\n height: \"calc(100vh - 77px)\",\n width: \"100%\",\n },\n}));\n\nconst Hop = () => {\n const navigate = useNavigate();\n const params = useParams();\n\n const [loading, setLoading] = useState(true);\n\n const tenantName = params.tenantName || \"\";\n const tenantNamespace = params.tenantNamespace || \"\";\n const consoleFrame = React.useRef(null);\n\n return (\n \n \n Tenants\n {` > `}\n \n {tenantName}\n \n {` > Management`}\n \n }\n actions={\n \n {\n if (\n consoleFrame !== null &&\n consoleFrame.current !== null &&\n consoleFrame.current.contentDocument !== null\n ) {\n const loc =\n consoleFrame.current.contentDocument.location.toString();\n\n let add = \"&\";\n\n if (loc.indexOf(\"?\") < 0) {\n add = `?`;\n }\n\n if (loc.indexOf(\"cp=y\") < 0) {\n const next = `${loc}${add}cp=y`;\n consoleFrame.current.contentDocument.location.replace(next);\n } else {\n consoleFrame.current.contentDocument.location.reload();\n }\n }\n }}\n size=\"large\"\n >\n \n \n {\n navigate(\n `/namespaces/${tenantNamespace}/tenants/${tenantName}`,\n );\n }}\n size=\"large\"\n >\n \n \n \n }\n />\n \n {loading && (\n \n \n \n )}\n {\n setLoading(false);\n }}\n />\n \n
\n );\n};\n\nexport default Hop;\n"],"names":["HopContainer","styled","div","_ref","theme","position","left","top","height","width","borderTop","concat","get","margin","marginTop","border","Hop","navigate","useNavigate","params","useParams","loading","setLoading","useState","tenantName","tenantNamespace","consoleFrame","React","_jsxs","Fragment","children","_jsx","PageHeaderWrapper","label","Link","to","actions","IconButton","onClick","current","contentDocument","loc","location","toString","add","indexOf","next","replace","reload","size","RefreshIcon","LoginIcon","Box","className","Loader","ref","title","src","onLoad","val"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/461.dbb22491.chunk.js b/web-app/build/static/js/461.dbb22491.chunk.js deleted file mode 100644 index d8b82571630..00000000000 --- a/web-app/build/static/js/461.dbb22491.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[461],{5448:(e,t,n)=>{n.d(t,{A:()=>l});var a=n(5043),s=n(649);const l=(e,t)=>{const[n,l]=(0,a.useState)(!1);return[n,(n,a,o,r)=>{l(!0),s.A.invoke(n,a,o,r).then((t=>{l(!1),e(t)})).catch((e=>{l(!1),t(e)}))}]}},8461:(e,t,n)=>{n.r(t),n.d(t,{default:()=>d});var a=n(5043),s=n(9923),l=n(4159),o=n(2961),r=n(5448),c=n(8661),i=n(579);const d=e=>{let{deleteOpen:t,selectedTenant:n,closeDeleteModalAndRefresh:d}=e;const m=(0,o.jL)(),[p,u]=(0,a.useState)(""),[h,x]=(0,a.useState)(!1),[b,j]=(0,r.A)((()=>d(!0)),(e=>m((0,l.C9)(e))));return(0,i.jsx)(c.A,{title:"Delete Tenant",confirmText:"Delete",isOpen:t,titleIcon:(0,i.jsx)(s.xWY,{}),isLoading:b,onConfirm:()=>{p===n.name?j("DELETE","/api/v1/namespaces/".concat(n.namespace,"/tenants/").concat(n.name),{delete_pvcs:h}):(0,l.C9)({errorMessage:"Tenant name is incorrect",detailedError:""})},onClose:()=>d(!1),confirmButtonProps:{disabled:p!==n.name||b},confirmationContent:(0,i.jsxs)(s.Hbc,{withBorders:!1,containerPadding:!1,children:[h&&(0,i.jsx)(s.xA9,{item:!0,xs:12,className:"inputItem",children:(0,i.jsx)(s.Wei,{variant:"error",title:"WARNING",message:"Delete Volumes: Data will be permanently deleted. Please proceed with caution."})}),"To continue please type ",(0,i.jsx)("b",{children:n.name})," in the box.",(0,i.jsxs)(s.xA9,{item:!0,xs:12,children:[(0,i.jsx)(s.cl_,{id:"retype-tenant",name:"retype-tenant",onChange:e=>{u(e.target.value)},label:"",value:p}),(0,i.jsx)(s.dOG,{checked:h,id:"delete-volumes",label:"Delete Volumes",name:"delete-volumes",onChange:()=>{x(!h)}})]})]})})}}}]); -//# sourceMappingURL=461.dbb22491.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/461.dbb22491.chunk.js.map b/web-app/build/static/js/461.dbb22491.chunk.js.map deleted file mode 100644 index c41b8b49b87..00000000000 --- a/web-app/build/static/js/461.dbb22491.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/461.dbb22491.chunk.js","mappings":"yIAQA,MAuBA,EAvBeA,CACbC,EACAC,KAEA,MAAOC,EAAWC,IAAgBC,EAAAA,EAAAA,WAAkB,GAgBpD,MAAO,CAACF,EAdQG,CAACC,EAAgBC,EAAaC,EAAYC,KACxDN,GAAa,GACbO,EAAAA,EACGC,OAAOL,EAAQC,EAAKC,EAAMC,GAC1BG,MAAMC,IACLV,GAAa,GACbH,EAAUa,EAAI,IAEfC,OAAOC,IACNZ,GAAa,GACbF,EAAQc,EAAI,GACZ,EAGqB,C,wHCU7B,MAoFA,EApFqBC,IAIC,IAJA,WACpBC,EAAU,eACVC,EAAc,2BACdC,GACcH,EACd,MAAMI,GAAWC,EAAAA,EAAAA,OACVC,EAAcC,IAAmBnB,EAAAA,EAAAA,UAAS,KAO1CoB,EAAeC,IAAoBrB,EAAAA,EAAAA,WAAkB,IAErDsB,EAAeC,IAAmB5B,EAAAA,EAAAA,IAPpB6B,IAAMT,GAA2B,KAClCJ,GAClBK,GAASS,EAAAA,EAAAA,IAAqBd,MAsBhC,OACEe,EAAAA,EAAAA,KAACC,EAAAA,EAAa,CACZC,MAAK,gBACLC,YAAa,SACbC,OAAQjB,EACRkB,WAAWL,EAAAA,EAAAA,KAACM,EAAAA,IAAiB,IAC7BlC,UAAWwB,EACXW,UAtBoBC,KAClBhB,IAAiBJ,EAAeqB,KAOpCZ,EACE,SAAS,sBAADa,OACctB,EAAeuB,UAAS,aAAAD,OAAYtB,EAAeqB,MACzE,CAAEG,YAAalB,KATfK,EAAAA,EAAAA,IAAqB,CACnBc,aAAc,2BACdC,cAAe,IAQlB,EAWCC,QA7BYA,IAAM1B,GAA2B,GA8B7C2B,mBAAoB,CAClBC,SAAUzB,IAAiBJ,EAAeqB,MAAQb,GAEpDsB,qBACEC,EAAAA,EAAAA,MAACC,EAAAA,IAAU,CAACC,aAAa,EAAOC,kBAAkB,EAAMC,SAAA,CACrD7B,IACCM,EAAAA,EAAAA,KAACwB,EAAAA,IAAI,CAACC,MAAI,EAACC,GAAI,GAAIC,UAAW,YAAYJ,UACxCvB,EAAAA,EAAAA,KAAC4B,EAAAA,IAAkB,CACjBC,QAAS,QACT3B,MAAO,UACP4B,QACE,qFAIN,4BACsB9B,EAAAA,EAAAA,KAAA,KAAAuB,SAAInC,EAAeqB,OAAS,gBACpDU,EAAAA,EAAAA,MAACK,EAAAA,IAAI,CAACC,MAAI,EAACC,GAAI,GAAGH,SAAA,EAChBvB,EAAAA,EAAAA,KAAC+B,EAAAA,IAAQ,CACPC,GAAG,gBACHvB,KAAK,gBACLwB,SAAWC,IACTzC,EAAgByC,EAAMC,OAAOC,MAAM,EAErCC,MAAM,GACND,MAAO5C,KAETQ,EAAAA,EAAAA,KAACsC,EAAAA,IAAM,CACLC,QAAS7C,EACTsC,GAAE,iBACFK,MAAO,iBACP5B,KAAI,iBACJwB,SAAUA,KACRtC,GAAkBD,EAAc,WAM1C,C","sources":["screens/Console/Common/Hooks/useApi.tsx","screens/Console/Tenants/ListTenants/DeleteTenant.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport api from \"../../../../common/api\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\n\ntype NoReturnFunction = (param?: any) => void;\ntype ApiMethodToInvoke = (method: string, url: string, data?: any) => void;\ntype IsApiInProgress = boolean;\n\nconst useApi = (\n onSuccess: NoReturnFunction,\n onError: NoReturnFunction,\n): [IsApiInProgress, ApiMethodToInvoke] => {\n const [isLoading, setIsLoading] = useState(false);\n\n const callApi = (method: string, url: string, data?: any, headers?: any) => {\n setIsLoading(true);\n api\n .invoke(method, url, data, headers)\n .then((res: any) => {\n setIsLoading(false);\n onSuccess(res);\n })\n .catch((err: ErrorResponseHandler) => {\n setIsLoading(false);\n onError(err);\n });\n };\n\n return [isLoading, callApi];\n};\n\nexport default useApi;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport {\n ConfirmDeleteIcon,\n FormLayout,\n InformativeMessage,\n InputBox,\n Switch,\n Grid,\n} from \"mds\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport { setErrorSnackMessage } from \"../../../../systemSlice\";\nimport { useAppDispatch } from \"../../../../store\";\nimport { Tenant } from \"../../../../api/operatorApi\";\nimport useApi from \"../../Common/Hooks/useApi\";\nimport ConfirmDialog from \"../../Common/ModalWrapper/ConfirmDialog\";\n\ninterface IDeleteTenant {\n deleteOpen: boolean;\n selectedTenant: Tenant;\n closeDeleteModalAndRefresh: (refreshList: boolean) => any;\n}\n\nconst DeleteTenant = ({\n deleteOpen,\n selectedTenant,\n closeDeleteModalAndRefresh,\n}: IDeleteTenant) => {\n const dispatch = useAppDispatch();\n const [retypeTenant, setRetypeTenant] = useState(\"\");\n\n const onDelSuccess = () => closeDeleteModalAndRefresh(true);\n const onDelError = (err: ErrorResponseHandler) =>\n dispatch(setErrorSnackMessage(err));\n const onClose = () => closeDeleteModalAndRefresh(false);\n\n const [deleteVolumes, setDeleteVolumes] = useState(false);\n\n const [deleteLoading, invokeDeleteApi] = useApi(onDelSuccess, onDelError);\n\n const onConfirmDelete = () => {\n if (retypeTenant !== selectedTenant.name) {\n setErrorSnackMessage({\n errorMessage: \"Tenant name is incorrect\",\n detailedError: \"\",\n });\n return;\n }\n invokeDeleteApi(\n \"DELETE\",\n `/api/v1/namespaces/${selectedTenant.namespace}/tenants/${selectedTenant.name}`,\n { delete_pvcs: deleteVolumes },\n );\n };\n\n return (\n }\n isLoading={deleteLoading}\n onConfirm={onConfirmDelete}\n onClose={onClose}\n confirmButtonProps={{\n disabled: retypeTenant !== selectedTenant.name || deleteLoading,\n }}\n confirmationContent={\n \n {deleteVolumes && (\n \n \n \n )}\n To continue please type {selectedTenant.name} in the box.\n \n ) => {\n setRetypeTenant(event.target.value);\n }}\n label=\"\"\n value={retypeTenant}\n />\n {\n setDeleteVolumes(!deleteVolumes);\n }}\n />\n \n \n }\n />\n );\n};\n\nexport default DeleteTenant;\n"],"names":["useApi","onSuccess","onError","isLoading","setIsLoading","useState","callApi","method","url","data","headers","api","invoke","then","res","catch","err","_ref","deleteOpen","selectedTenant","closeDeleteModalAndRefresh","dispatch","useAppDispatch","retypeTenant","setRetypeTenant","deleteVolumes","setDeleteVolumes","deleteLoading","invokeDeleteApi","onDelSuccess","setErrorSnackMessage","_jsx","ConfirmDialog","title","confirmText","isOpen","titleIcon","ConfirmDeleteIcon","onConfirm","onConfirmDelete","name","concat","namespace","delete_pvcs","errorMessage","detailedError","onClose","confirmButtonProps","disabled","confirmationContent","_jsxs","FormLayout","withBorders","containerPadding","children","Grid","item","xs","className","InformativeMessage","variant","message","InputBox","id","onChange","event","target","value","label","Switch","checked"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/481.f19f292a.chunk.js b/web-app/build/static/js/481.f19f292a.chunk.js deleted file mode 100644 index 093a8ac055b..00000000000 --- a/web-app/build/static/js/481.f19f292a.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[481],{8481:(e,n,t)=>{t.r(n),t.d(n,{default:()=>b});var i=t(5043),s=t(9923),a=t(9456),o=t(2961),c=t(4574),l=t(4241),r=t(5475),d=t(3097),x=t.n(d),m=t(6483),f=t(6681),h=t(579);const u=c.Ay.div((e=>{let{theme:n}=e;return{"& .licenseInfoValue":{textTransform:"none",fontSize:14,fontWeight:"bold"},"&.licenseContainer":{position:"relative",padding:"20px 52px 0px 28px",background:x()(n,"signalColors.info","#2781B0"),boxShadow:"0px 3px 7px #00000014","& h2":{color:x()(n,"bgColor","#fff"),marginBottom:67},"& a":{textDecoration:"none"},"& h3":{color:x()(n,"bgColor","#fff"),marginBottom:"30px",fontWeight:"bold"},"& h6":{color:"#FFFFFF !important"}},"& .licenseInfo":{color:x()(n,"bgColor","#fff"),position:"relative"},"& .licenseInfoTitle":{textTransform:"none",color:x()(n,"mutedText","#87888d"),fontSize:11},"& .verifiedIcon":{width:96,position:"absolute",right:0,bottom:29},"& .noUnderLine":{textDecoration:"none"}}})),g=e=>{var n,t;let{tenant:a,loadingActivateProduct:o,loadingLicenseInfo:c,licenseInfo:d,activateProduct:x}=e;const g=null!==a&&void 0!==a&&a.subnet_license?l.c9.fromISO(null===(n=a.subnet_license)||void 0===n?void 0:n.expires_at):l.c9.now();return(0,h.jsx)(u,{className:a&&a.subnet_license?"licenseContainer":"",children:a&&a.subnet_license?(0,h.jsx)(i.Fragment,{children:(0,h.jsxs)(s.xA9,{container:!0,className:"licenseInfo",children:[(0,h.jsxs)(s.xA9,{item:!0,xs:6,children:[(0,h.jsx)(s.azJ,{sx:{marginBottom:12},className:"licenseInfoTitle",children:"License"}),(0,h.jsx)(s.azJ,{sx:{marginBottom:12},className:"licenseInfoValue",children:"Commercial License"}),(0,h.jsx)(s.azJ,{sx:{marginBottom:12},className:"licenseInfoTitle",children:"Organization"}),(0,h.jsx)(s.azJ,{sx:{marginBottom:12},className:"licenseInfoValue",children:a.subnet_license.organization}),(0,h.jsx)(s.azJ,{sx:{marginBottom:12},className:"licenseInfoTitle",children:"Registered Capacity"}),(0,h.jsx)(s.azJ,{sx:{marginBottom:12},className:"licenseInfoValue",children:(0,m.nO)((1099511627776*((null===(t=a.subnet_license)||void 0===t?void 0:t.storage_capacity)||0)).toString(10))}),(0,h.jsx)(s.azJ,{sx:{marginBottom:12},className:"licenseInfoTitle",children:"Expiry Date"}),(0,h.jsx)(s.azJ,{sx:{marginBottom:12},className:"licenseInfoValue",children:g.toFormat("yyyy-MM-dd")})]}),(0,h.jsxs)(s.xA9,{item:!0,xs:6,children:[(0,h.jsx)(s.azJ,{sx:{marginBottom:12},className:"licenseInfoTitle",children:"Subscription Plan"}),(0,h.jsx)(s.azJ,{sx:{marginBottom:12},className:"licenseInfoValue",children:a.subnet_license.plan}),(0,h.jsx)(s.azJ,{sx:{marginBottom:12},className:"licenseInfoTitle",children:"Requestor"}),(0,h.jsx)(s.azJ,{sx:{marginBottom:12},className:"licenseInfoValue",children:a.subnet_license.email})]}),(0,h.jsx)("img",{className:"verifiedIcon",src:"/verified.svg",alt:"verified"})]})}):!c&&(0,h.jsxs)(s.azJ,{withBorders:!0,sx:{display:"flex",alignItems:"center",justifyContent:"center"},children:[!d&&(0,h.jsx)(r.N_,{to:"/license",onClick:e=>{e.stopPropagation()},className:"noUnderLine",children:(0,h.jsx)(f.A,{tooltip:"Activate Product",children:(0,h.jsx)(s.$nd,{id:"activate-product",label:"Activate Product",onClick:()=>!1,variant:"callAction"})})}),d&&a&&(0,h.jsx)(f.A,{tooltip:"Attach License",children:(0,h.jsx)(s.$nd,{id:"attach-license",disabled:o,label:"Attach License",onClick:()=>x(a.namespace,a.name),variant:"callAction"})})]})})};var p=t(649),j=t(4159),v=t(9607);const b=()=>{const e=(0,o.jL)(),n=(0,a.d4)((e=>e.tenants.loadingTenant)),t=(0,a.d4)((e=>e.tenants.tenantInfo)),[c,l]=(0,i.useState)(),[r,d]=(0,i.useState)(!0),[x,m]=(0,i.useState)(!1);return(0,i.useEffect)((()=>{r&&p.A.invoke("GET","/api/v1/subscription/info").then((e=>{l(e),d(!1)})).catch((e=>{d(!1)}))}),[r]),(0,h.jsxs)(i.Fragment,{children:[(0,h.jsx)(s._xt,{separator:!0,sx:{marginBottom:15},children:"License"}),n?(0,h.jsx)(s.azJ,{sx:{textAlign:"center"},children:(0,h.jsx)(s.aHM,{})}):(0,h.jsx)(i.Fragment,{children:t&&(0,h.jsx)(s.xA9,{container:!0,children:(0,h.jsx)(s.xA9,{item:!0,xs:12,children:(0,h.jsx)(g,{tenant:t,loadingLicenseInfo:r,loadingActivateProduct:x,licenseInfo:c,activateProduct:(n,t)=>{x||(m(!0),p.A.invoke("POST","/api/v1/subscription/namespaces/".concat(n,"/tenants/").concat(t,"/activate"),{}).then((()=>{m(!1),e((0,v.ZL)(!0)),d(!0)})).catch((n=>{m(!1),e((0,j.C9)(n))})))}})})})})]})}}}]); -//# sourceMappingURL=481.f19f292a.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/481.f19f292a.chunk.js.map b/web-app/build/static/js/481.f19f292a.chunk.js.map deleted file mode 100644 index b3f70b6250f..00000000000 --- a/web-app/build/static/js/481.f19f292a.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/481.f19f292a.chunk.js","mappings":"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","sources":["screens/Console/Tenants/TenantDetails/SubnetLicenseTenant.tsx","screens/Console/Tenants/TenantDetails/TenantLicense.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport { Box, Button, Grid } from \"mds\";\nimport styled from \"styled-components\";\nimport { DateTime } from \"luxon\";\nimport { Link } from \"react-router-dom\";\nimport get from \"lodash/get\";\nimport { niceBytes } from \"../../../../common/utils\";\nimport { SubnetInfo } from \"../../License/types\";\nimport { Tenant } from \"../../../../api/operatorApi\";\nimport TooltipWrapper from \"../../Common/TooltipWrapper/TooltipWrapper\";\n\ninterface ISubnetLicenseTenant {\n tenant: Tenant | null;\n loadingActivateProduct: any;\n loadingLicenseInfo: boolean;\n licenseInfo: SubnetInfo | undefined;\n activateProduct: any;\n}\n\nconst LicenseContainer = styled.div(({ theme }) => ({\n \"& .licenseInfoValue\": {\n textTransform: \"none\",\n fontSize: 14,\n fontWeight: \"bold\",\n },\n \"&.licenseContainer\": {\n position: \"relative\",\n padding: \"20px 52px 0px 28px\",\n background: get(theme, \"signalColors.info\", \"#2781B0\"),\n boxShadow: \"0px 3px 7px #00000014\",\n \"& h2\": {\n color: get(theme, \"bgColor\", \"#fff\"),\n marginBottom: 67,\n },\n \"& a\": {\n textDecoration: \"none\",\n },\n \"& h3\": {\n color: get(theme, \"bgColor\", \"#fff\"),\n marginBottom: \"30px\",\n fontWeight: \"bold\",\n },\n \"& h6\": {\n color: \"#FFFFFF !important\",\n },\n },\n \"& .licenseInfo\": {\n color: get(theme, \"bgColor\", \"#fff\"),\n position: \"relative\",\n },\n \"& .licenseInfoTitle\": {\n textTransform: \"none\",\n color: get(theme, \"mutedText\", \"#87888d\"),\n fontSize: 11,\n },\n \"& .verifiedIcon\": {\n width: 96,\n position: \"absolute\",\n right: 0,\n bottom: 29,\n },\n \"& .noUnderLine\": {\n textDecoration: \"none\",\n },\n}));\n\nconst SubnetLicenseTenant = ({\n tenant,\n loadingActivateProduct,\n loadingLicenseInfo,\n licenseInfo,\n activateProduct,\n}: ISubnetLicenseTenant) => {\n const expiryTime = tenant?.subnet_license\n ? DateTime.fromISO(tenant.subnet_license?.expires_at!)\n : DateTime.now();\n\n return (\n \n {tenant && tenant.subnet_license ? (\n \n \n \n \n License\n \n \n Commercial License\n \n \n Organization\n \n \n {tenant.subnet_license.organization}\n \n \n Registered Capacity\n \n \n {niceBytes(\n (\n (tenant.subnet_license?.storage_capacity || 0) *\n 1099511627776\n ) // 1 Terabyte = 1099511627776 Bytes\n .toString(10),\n )}\n \n \n Expiry Date\n \n \n {expiryTime.toFormat(\"yyyy-MM-dd\")}\n \n \n \n \n Subscription Plan\n \n \n {tenant.subnet_license.plan}\n \n \n Requestor\n \n \n {tenant.subnet_license.email}\n \n \n \n \n \n ) : (\n !loadingLicenseInfo && (\n \n {!licenseInfo && (\n {\n e.stopPropagation();\n }}\n className={\"noUnderLine\"}\n >\n \n false}\n variant={\"callAction\"}\n />\n \n \n )}\n {licenseInfo && tenant && (\n \n activateProduct(tenant.namespace, tenant.name)}\n variant={\"callAction\"}\n />\n \n )}\n \n )\n )}\n \n );\n};\n\nexport default SubnetLicenseTenant;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport { Loader, SectionTitle, Box, Grid } from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport { SubnetInfo } from \"../../License/types\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport SubnetLicenseTenant from \"./SubnetLicenseTenant\";\nimport api from \"../../../../common/api\";\n\nimport { setErrorSnackMessage } from \"../../../../systemSlice\";\nimport { setTenantDetailsLoad } from \"../tenantsSlice\";\n\nconst TenantLicense = () => {\n const dispatch = useAppDispatch();\n\n const loadingTenant = useSelector(\n (state: AppState) => state.tenants.loadingTenant,\n );\n const tenant = useSelector((state: AppState) => state.tenants.tenantInfo);\n\n const [licenseInfo, setLicenseInfo] = useState();\n const [loadingLicenseInfo, setLoadingLicenseInfo] = useState(true);\n const [loadingActivateProduct, setLoadingActivateProduct] =\n useState(false);\n\n const activateProduct = (namespace: string, tenant: string) => {\n if (loadingActivateProduct) {\n return;\n }\n setLoadingActivateProduct(true);\n api\n .invoke(\n \"POST\",\n `/api/v1/subscription/namespaces/${namespace}/tenants/${tenant}/activate`,\n {},\n )\n .then(() => {\n setLoadingActivateProduct(false);\n dispatch(setTenantDetailsLoad(true));\n setLoadingLicenseInfo(true);\n })\n .catch((err: ErrorResponseHandler) => {\n setLoadingActivateProduct(false);\n dispatch(setErrorSnackMessage(err));\n });\n };\n\n useEffect(() => {\n if (loadingLicenseInfo) {\n api\n .invoke(\"GET\", `/api/v1/subscription/info`)\n .then((res: SubnetInfo) => {\n setLicenseInfo(res);\n setLoadingLicenseInfo(false);\n })\n .catch((err: ErrorResponseHandler) => {\n setLoadingLicenseInfo(false);\n });\n }\n }, [loadingLicenseInfo]);\n\n return (\n \n \n License\n \n {loadingTenant ? (\n \n \n \n ) : (\n \n {tenant && (\n \n \n \n \n \n )}\n \n )}\n \n );\n};\n\nexport default TenantLicense;\n"],"names":["LicenseContainer","styled","div","_ref","theme","textTransform","fontSize","fontWeight","position","padding","background","get","boxShadow","color","marginBottom","textDecoration","width","right","bottom","_ref2","_tenant$subnet_licens","_tenant$subnet_licens2","tenant","loadingActivateProduct","loadingLicenseInfo","licenseInfo","activateProduct","expiryTime","subnet_license","DateTime","fromISO","expires_at","now","_jsx","className","children","Fragment","_jsxs","Grid","container","item","xs","Box","sx","organization","niceBytes","storage_capacity","toString","toFormat","plan","email","src","alt","withBorders","display","alignItems","justifyContent","Link","to","onClick","e","stopPropagation","TooltipWrapper","tooltip","Button","id","label","variant","disabled","namespace","name","TenantLicense","dispatch","useAppDispatch","loadingTenant","useSelector","state","tenants","tenantInfo","setLicenseInfo","useState","setLoadingLicenseInfo","setLoadingActivateProduct","useEffect","api","invoke","then","res","catch","err","SectionTitle","separator","textAlign","Loader","SubnetLicenseTenant","concat","setTenantDetailsLoad","setErrorSnackMessage"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/517.6b633ce9.chunk.js b/web-app/build/static/js/517.6b633ce9.chunk.js deleted file mode 100644 index 1c1280c5fc1..00000000000 --- a/web-app/build/static/js/517.6b633ce9.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[517],{3461:(e,t,n)=>{n.d(t,{A:()=>l});var r=n(5043);var o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]&&arguments[0];this._memoizedUnloadedRanges=[],e&&this._ensureRowsLoaded(this._lastRenderedStartIndex,this._lastRenderedStopIndex)}},{key:"componentDidMount",value:function(){0}},{key:"render",value:function(){return(0,this.props.children)({onItemsRendered:this._onItemsRendered,ref:this._setRef})}},{key:"_ensureRowsLoaded",value:function(e,t){var n=this.props,r=n.isItemLoaded,o=n.itemCount,i=n.minimumBatchSize,l=void 0===i?10:i,s=n.threshold,a=void 0===s?15:s,c=function(e){for(var t=e.isItemLoaded,n=e.itemCount,r=e.minimumBatchSize,o=e.startIndex,i=e.stopIndex,l=[],s=null,a=null,c=o;c<=i;c++)t(c)?null!==a&&(l.push(s,a),s=a=null):(a=c,null===s&&(s=c));if(null!==a){for(var u=Math.min(Math.max(a,s+r-1),n-1),d=a+1;d<=u&&!t(d);d++)a=d;l.push(s,a)}if(l.length)for(;l[1]-l[0]+10;){var f=l[0]-1;if(t(f))break;l[0]=f}return l}({isItemLoaded:r,itemCount:o,minimumBatchSize:l,startIndex:Math.max(0,e-a),stopIndex:Math.min(o-1,t+a)});(this._memoizedUnloadedRanges.length!==c.length||this._memoizedUnloadedRanges.some((function(e,t){return c[t]!==e})))&&(this._memoizedUnloadedRanges=c,this._loadUnloadedRanges(c))}},{key:"_loadUnloadedRanges",value:function(e){for(var t=this,n=this.props.loadMoreItems||this.props.loadMoreRows,r=function(r){var o=e[r],i=e[r+1],l=n(o,i);null!=l&&l.then((function(){if(function(e){var t=e.lastRenderedStartIndex,n=e.lastRenderedStopIndex,r=e.startIndex,o=e.stopIndex;return!(r>n||o{n.d(t,{Y1:()=>y});var r=n(8168),o=n(1798),i=n(3662);function l(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,(0,i.A)(e,t)}var s=Number.isNaN||function(e){return"number"===typeof e&&e!==e};function a(e,t){if(e.length!==t.length)return!1;for(var n=0;n=t?e.call(null):r.id=requestAnimationFrame(o)}))};return r}var p=-1;function m(e){if(void 0===e&&(e=!1),-1===p||e){var t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",document.body.appendChild(t),p=t.offsetWidth-t.clientWidth,document.body.removeChild(t)}return p}var v=null;function g(e){if(void 0===e&&(e=!1),null===v||e){var t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",n.direction="rtl";var r=document.createElement("div"),o=r.style;return o.width="100px",o.height="100px",t.appendChild(r),document.body.appendChild(t),t.scrollLeft>0?v="positive-descending":(t.scrollLeft=1,v=0===t.scrollLeft?"negative":"positive-ascending"),document.body.removeChild(t),v}return v}var S=function(e,t){return e};function _(e){var t,n=e.getItemOffset,i=e.getEstimatedTotalSize,s=e.getItemSize,a=e.getOffsetForIndexAndAlignment,d=e.getStartIndexForOffset,p=e.getStopIndexForStartIndex,v=e.initInstanceProps,_=e.shouldResetStyleCacheOnItemSizeChange,y=e.validateProps;return t=function(e){function t(t){var r;return(r=e.call(this,t)||this)._instanceProps=v(r.props,(0,o.A)(r)),r._outerRef=void 0,r._resetIsScrollingTimeoutId=null,r.state={instance:(0,o.A)(r),isScrolling:!1,scrollDirection:"forward",scrollOffset:"number"===typeof r.props.initialScrollOffset?r.props.initialScrollOffset:0,scrollUpdateWasRequested:!1},r._callOnItemsRendered=void 0,r._callOnItemsRendered=c((function(e,t,n,o){return r.props.onItemsRendered({overscanStartIndex:e,overscanStopIndex:t,visibleStartIndex:n,visibleStopIndex:o})})),r._callOnScroll=void 0,r._callOnScroll=c((function(e,t,n){return r.props.onScroll({scrollDirection:e,scrollOffset:t,scrollUpdateWasRequested:n})})),r._getItemStyle=void 0,r._getItemStyle=function(e){var t,o=r.props,i=o.direction,l=o.itemSize,a=o.layout,c=r._getItemStyleCache(_&&l,_&&a,_&&i);if(c.hasOwnProperty(e))t=c[e];else{var u=n(r.props,e,r._instanceProps),d=s(r.props,e,r._instanceProps),f="horizontal"===i||"horizontal"===a,h="rtl"===i,p=f?u:0;c[e]=t={position:"absolute",left:h?void 0:p,right:h?p:void 0,top:f?0:u,height:f?"100%":d,width:f?d:"100%"}}return t},r._getItemStyleCache=void 0,r._getItemStyleCache=c((function(e,t,n){return{}})),r._onScrollHorizontal=function(e){var t=e.currentTarget,n=t.clientWidth,o=t.scrollLeft,i=t.scrollWidth;r.setState((function(e){if(e.scrollOffset===o)return null;var t=r.props.direction,l=o;if("rtl"===t)switch(g()){case"negative":l=-o;break;case"positive-descending":l=i-n-o}return l=Math.max(0,Math.min(l,i-n)),{isScrolling:!0,scrollDirection:e.scrollOffsets.clientWidth?m():0:s.scrollHeight>s.clientHeight?m():0}this.scrollTo(a(this.props,e,t,i,this._instanceProps,l))},R.componentDidMount=function(){var e=this.props,t=e.direction,n=e.initialScrollOffset,r=e.layout;if("number"===typeof n&&null!=this._outerRef){var o=this._outerRef;"horizontal"===t||"horizontal"===r?o.scrollLeft=n:o.scrollTop=n}this._callPropsCallbacks()},R.componentDidUpdate=function(){var e=this.props,t=e.direction,n=e.layout,r=this.state,o=r.scrollOffset;if(r.scrollUpdateWasRequested&&null!=this._outerRef){var i=this._outerRef;if("horizontal"===t||"horizontal"===n)if("rtl"===t)switch(g()){case"negative":i.scrollLeft=-o;break;case"positive-ascending":i.scrollLeft=o;break;default:var l=i.clientWidth,s=i.scrollWidth;i.scrollLeft=s-l-o}else i.scrollLeft=o;else i.scrollTop=o}this._callPropsCallbacks()},R.componentWillUnmount=function(){null!==this._resetIsScrollingTimeoutId&&f(this._resetIsScrollingTimeoutId)},R.render=function(){var e=this.props,t=e.children,n=e.className,o=e.direction,l=e.height,s=e.innerRef,a=e.innerElementType,c=e.innerTagName,d=e.itemCount,f=e.itemData,h=e.itemKey,p=void 0===h?S:h,m=e.layout,v=e.outerElementType,g=e.outerTagName,_=e.style,I=e.useIsScrolling,y=e.width,R=this.state.isScrolling,x="horizontal"===o||"horizontal"===m,b=x?this._onScrollHorizontal:this._onScrollVertical,w=this._getRangeToRender(),O=w[0],C=w[1],z=[];if(d>0)for(var M=O;M<=C;M++)z.push((0,u.createElement)(t,{data:f,key:p(M,f),index:M,isScrolling:I?R:void 0,style:this._getItemStyle(M)}));var T=i(this.props,this._instanceProps);return(0,u.createElement)(v||g||"div",{className:n,onScroll:b,ref:this._outerRefSetter,style:(0,r.A)({position:"relative",height:l,width:y,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:o},_)},(0,u.createElement)(a||c||"div",{children:z,ref:s,style:{height:x?"100%":T,pointerEvents:R?"none":void 0,width:x?T:"100%"}}))},R._callPropsCallbacks=function(){if("function"===typeof this.props.onItemsRendered&&this.props.itemCount>0){var e=this._getRangeToRender(),t=e[0],n=e[1],r=e[2],o=e[3];this._callOnItemsRendered(t,n,r,o)}if("function"===typeof this.props.onScroll){var i=this.state,l=i.scrollDirection,s=i.scrollOffset,a=i.scrollUpdateWasRequested;this._callOnScroll(l,s,a)}},R._getRangeToRender=function(){var e=this.props,t=e.itemCount,n=e.overscanCount,r=this.state,o=r.isScrolling,i=r.scrollDirection,l=r.scrollOffset;if(0===t)return[0,0,0,0];var s=d(this.props,l,this._instanceProps),a=p(this.props,s,l,this._instanceProps),c=o&&"backward"!==i?1:Math.max(1,n),u=o&&"forward"!==i?1:Math.max(1,n);return[Math.max(0,s-c),Math.max(0,Math.min(t-1,a+u)),s,a]},t}(u.PureComponent),t.defaultProps={direction:"ltr",itemData:void 0,layout:"vertical",overscanCount:2,useIsScrolling:!1},t}var I=function(e,t){e.children,e.direction,e.height,e.layout,e.innerTagName,e.outerTagName,e.width,t.instance},y=_({getItemOffset:function(e,t){return t*e.itemSize},getItemSize:function(e,t){return e.itemSize},getEstimatedTotalSize:function(e){var t=e.itemCount;return e.itemSize*t},getOffsetForIndexAndAlignment:function(e,t,n,r,o,i){var l=e.direction,s=e.height,a=e.itemCount,c=e.itemSize,u=e.layout,d=e.width,f="horizontal"===l||"horizontal"===u?d:s,h=Math.max(0,a*c-f),p=Math.min(h,t*c),m=Math.max(0,t*c-f+c+i);switch("smart"===n&&(n=r>=m-f&&r<=p+f?"auto":"center"),n){case"start":return p;case"end":return m;case"center":var v=Math.round(m+(p-m)/2);return vh+Math.floor(f/2)?h:v;default:return r>=m&&r<=p?r:r lastRenderedStopIndex || stopIndex < lastRenderedStartIndex);\n}\n\nfunction scanForUnloadedRanges(_ref) {\n var isItemLoaded = _ref.isItemLoaded,\n itemCount = _ref.itemCount,\n minimumBatchSize = _ref.minimumBatchSize,\n startIndex = _ref.startIndex,\n stopIndex = _ref.stopIndex;\n\n var unloadedRanges = [];\n\n var rangeStartIndex = null;\n var rangeStopIndex = null;\n\n for (var _index = startIndex; _index <= stopIndex; _index++) {\n var loaded = isItemLoaded(_index);\n\n if (!loaded) {\n rangeStopIndex = _index;\n if (rangeStartIndex === null) {\n rangeStartIndex = _index;\n }\n } else if (rangeStopIndex !== null) {\n unloadedRanges.push(rangeStartIndex, rangeStopIndex);\n\n rangeStartIndex = rangeStopIndex = null;\n }\n }\n\n // If :rangeStopIndex is not null it means we haven't ran out of unloaded rows.\n // Scan forward to try filling our :minimumBatchSize.\n if (rangeStopIndex !== null) {\n var potentialStopIndex = Math.min(Math.max(rangeStopIndex, rangeStartIndex + minimumBatchSize - 1), itemCount - 1);\n\n for (var _index2 = rangeStopIndex + 1; _index2 <= potentialStopIndex; _index2++) {\n if (!isItemLoaded(_index2)) {\n rangeStopIndex = _index2;\n } else {\n break;\n }\n }\n\n unloadedRanges.push(rangeStartIndex, rangeStopIndex);\n }\n\n // Check to see if our first range ended prematurely.\n // In this case we should scan backwards to try filling our :minimumBatchSize.\n if (unloadedRanges.length) {\n while (unloadedRanges[1] - unloadedRanges[0] + 1 < minimumBatchSize && unloadedRanges[0] > 0) {\n var _index3 = unloadedRanges[0] - 1;\n\n if (!isItemLoaded(_index3)) {\n unloadedRanges[0] = _index3;\n } else {\n break;\n }\n }\n }\n\n return unloadedRanges;\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar inherits = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar InfiniteLoader = function (_PureComponent) {\n inherits(InfiniteLoader, _PureComponent);\n\n function InfiniteLoader() {\n var _ref;\n\n var _temp, _this, _ret;\n\n classCallCheck(this, InfiniteLoader);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = possibleConstructorReturn(this, (_ref = InfiniteLoader.__proto__ || Object.getPrototypeOf(InfiniteLoader)).call.apply(_ref, [this].concat(args))), _this), _this._lastRenderedStartIndex = -1, _this._lastRenderedStopIndex = -1, _this._memoizedUnloadedRanges = [], _this._onItemsRendered = function (_ref2) {\n var visibleStartIndex = _ref2.visibleStartIndex,\n visibleStopIndex = _ref2.visibleStopIndex;\n\n if (process.env.NODE_ENV !== 'production') {\n if (!isInteger(visibleStartIndex) || !isInteger(visibleStopIndex)) {\n console.warn('Invalid onItemsRendered signature; please refer to InfiniteLoader documentation.');\n }\n\n if (typeof _this.props.loadMoreRows === 'function') {\n console.warn('InfiniteLoader \"loadMoreRows\" prop has been renamed to \"loadMoreItems\".');\n }\n }\n\n _this._lastRenderedStartIndex = visibleStartIndex;\n _this._lastRenderedStopIndex = visibleStopIndex;\n\n _this._ensureRowsLoaded(visibleStartIndex, visibleStopIndex);\n }, _this._setRef = function (listRef) {\n _this._listRef = listRef;\n }, _temp), possibleConstructorReturn(_this, _ret);\n }\n\n createClass(InfiniteLoader, [{\n key: 'resetloadMoreItemsCache',\n value: function resetloadMoreItemsCache() {\n var autoReload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n this._memoizedUnloadedRanges = [];\n\n if (autoReload) {\n this._ensureRowsLoaded(this._lastRenderedStartIndex, this._lastRenderedStopIndex);\n }\n }\n }, {\n key: 'componentDidMount',\n value: function componentDidMount() {\n if (process.env.NODE_ENV !== 'production') {\n if (this._listRef == null) {\n console.warn('Invalid list ref; please refer to InfiniteLoader documentation.');\n }\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var children = this.props.children;\n\n\n return children({\n onItemsRendered: this._onItemsRendered,\n ref: this._setRef\n });\n }\n }, {\n key: '_ensureRowsLoaded',\n value: function _ensureRowsLoaded(startIndex, stopIndex) {\n var _props = this.props,\n isItemLoaded = _props.isItemLoaded,\n itemCount = _props.itemCount,\n _props$minimumBatchSi = _props.minimumBatchSize,\n minimumBatchSize = _props$minimumBatchSi === undefined ? 10 : _props$minimumBatchSi,\n _props$threshold = _props.threshold,\n threshold = _props$threshold === undefined ? 15 : _props$threshold;\n\n\n var unloadedRanges = scanForUnloadedRanges({\n isItemLoaded: isItemLoaded,\n itemCount: itemCount,\n minimumBatchSize: minimumBatchSize,\n startIndex: Math.max(0, startIndex - threshold),\n stopIndex: Math.min(itemCount - 1, stopIndex + threshold)\n });\n\n // Avoid calling load-rows unless range has changed.\n // This shouldn't be strictly necessary, but is maybe nice to do.\n if (this._memoizedUnloadedRanges.length !== unloadedRanges.length || this._memoizedUnloadedRanges.some(function (startOrStop, index) {\n return unloadedRanges[index] !== startOrStop;\n })) {\n this._memoizedUnloadedRanges = unloadedRanges;\n this._loadUnloadedRanges(unloadedRanges);\n }\n }\n }, {\n key: '_loadUnloadedRanges',\n value: function _loadUnloadedRanges(unloadedRanges) {\n var _this2 = this;\n\n // loadMoreRows was renamed to loadMoreItems in v1.0.3; will be removed in v2.0\n var loadMoreItems = this.props.loadMoreItems || this.props.loadMoreRows;\n\n var _loop = function _loop(i) {\n var startIndex = unloadedRanges[i];\n var stopIndex = unloadedRanges[i + 1];\n var promise = loadMoreItems(startIndex, stopIndex);\n if (promise != null) {\n promise.then(function () {\n // Refresh the visible rows if any of them have just been loaded.\n // Otherwise they will remain in their unloaded visual state.\n if (isRangeVisible({\n lastRenderedStartIndex: _this2._lastRenderedStartIndex,\n lastRenderedStopIndex: _this2._lastRenderedStopIndex,\n startIndex: startIndex,\n stopIndex: stopIndex\n })) {\n // Handle an unmount while promises are still in flight.\n if (_this2._listRef == null) {\n return;\n }\n\n // Resize cached row sizes for VariableSizeList,\n // otherwise just re-render the list.\n if (typeof _this2._listRef.resetAfterIndex === 'function') {\n _this2._listRef.resetAfterIndex(startIndex, true);\n } else {\n // HACK reset temporarily cached item styles to force PureComponent to re-render.\n // This is pretty gross, but I'm okay with it for now.\n // Don't judge me.\n if (typeof _this2._listRef._getItemStyleCache === 'function') {\n _this2._listRef._getItemStyleCache(-1);\n }\n _this2._listRef.forceUpdate();\n }\n }\n });\n }\n };\n\n for (var i = 0; i < unloadedRanges.length; i += 2) {\n _loop(i);\n }\n }\n }]);\n return InfiniteLoader;\n}(PureComponent);\n\nexport default InfiniteLoader;\n","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","var safeIsNaN = Number.isNaN ||\n function ponyfill(value) {\n return typeof value === 'number' && value !== value;\n };\nfunction isEqual(first, second) {\n if (first === second) {\n return true;\n }\n if (safeIsNaN(first) && safeIsNaN(second)) {\n return true;\n }\n return false;\n}\nfunction areInputsEqual(newInputs, lastInputs) {\n if (newInputs.length !== lastInputs.length) {\n return false;\n }\n for (var i = 0; i < newInputs.length; i++) {\n if (!isEqual(newInputs[i], lastInputs[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n if (isEqual === void 0) { isEqual = areInputsEqual; }\n var lastThis;\n var lastArgs = [];\n var lastResult;\n var calledOnce = false;\n function memoized() {\n var newArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n newArgs[_i] = arguments[_i];\n }\n if (calledOnce && lastThis === this && isEqual(newArgs, lastArgs)) {\n return lastResult;\n }\n lastResult = resultFn.apply(this, newArgs);\n calledOnce = true;\n lastThis = this;\n lastArgs = newArgs;\n return lastResult;\n }\n return memoized;\n}\n\nexport default memoizeOne;\n","// @flow\n\n// Animation frame based implementation of setTimeout.\n// Inspired by Joe Lambert, https://gist.github.com/joelambert/1002116#file-requesttimeout-js\n\nconst hasNativePerformanceNow =\n typeof performance === 'object' && typeof performance.now === 'function';\n\nconst now = hasNativePerformanceNow\n ? () => performance.now()\n : () => Date.now();\n\nexport type TimeoutID = {|\n id: AnimationFrameID,\n|};\n\nexport function cancelTimeout(timeoutID: TimeoutID) {\n cancelAnimationFrame(timeoutID.id);\n}\n\nexport function requestTimeout(callback: Function, delay: number): TimeoutID {\n const start = now();\n\n function tick() {\n if (now() - start >= delay) {\n callback.call(null);\n } else {\n timeoutID.id = requestAnimationFrame(tick);\n }\n }\n\n const timeoutID: TimeoutID = {\n id: requestAnimationFrame(tick),\n };\n\n return timeoutID;\n}\n","// @flow\n\nlet size: number = -1;\n\n// This utility copied from \"dom-helpers\" package.\nexport function getScrollbarSize(recalculate?: boolean = false): number {\n if (size === -1 || recalculate) {\n const div = document.createElement('div');\n const style = div.style;\n style.width = '50px';\n style.height = '50px';\n style.overflow = 'scroll';\n\n ((document.body: any): HTMLBodyElement).appendChild(div);\n\n size = div.offsetWidth - div.clientWidth;\n\n ((document.body: any): HTMLBodyElement).removeChild(div);\n }\n\n return size;\n}\n\nexport type RTLOffsetType =\n | 'negative'\n | 'positive-descending'\n | 'positive-ascending';\n\nlet cachedRTLResult: RTLOffsetType | null = null;\n\n// TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n// Chrome does not seem to adhere; its scrollLeft values are positive (measured relative to the left).\n// Safari's elastic bounce makes detecting this even more complicated wrt potential false positives.\n// The safest way to check this is to intentionally set a negative offset,\n// and then verify that the subsequent \"scroll\" event matches the negative offset.\n// If it does not match, then we can assume a non-standard RTL scroll implementation.\nexport function getRTLOffsetType(recalculate?: boolean = false): RTLOffsetType {\n if (cachedRTLResult === null || recalculate) {\n const outerDiv = document.createElement('div');\n const outerStyle = outerDiv.style;\n outerStyle.width = '50px';\n outerStyle.height = '50px';\n outerStyle.overflow = 'scroll';\n outerStyle.direction = 'rtl';\n\n const innerDiv = document.createElement('div');\n const innerStyle = innerDiv.style;\n innerStyle.width = '100px';\n innerStyle.height = '100px';\n\n outerDiv.appendChild(innerDiv);\n\n ((document.body: any): HTMLBodyElement).appendChild(outerDiv);\n\n if (outerDiv.scrollLeft > 0) {\n cachedRTLResult = 'positive-descending';\n } else {\n outerDiv.scrollLeft = 1;\n if (outerDiv.scrollLeft === 0) {\n cachedRTLResult = 'negative';\n } else {\n cachedRTLResult = 'positive-ascending';\n }\n }\n\n ((document.body: any): HTMLBodyElement).removeChild(outerDiv);\n\n return cachedRTLResult;\n }\n\n return cachedRTLResult;\n}\n","// @flow\n\nimport memoizeOne from 'memoize-one';\nimport { createElement, PureComponent } from 'react';\nimport { cancelTimeout, requestTimeout } from './timer';\nimport { getScrollbarSize, getRTLOffsetType } from './domHelpers';\n\nimport type { TimeoutID } from './timer';\n\ntype Direction = 'ltr' | 'rtl';\nexport type ScrollToAlign = 'auto' | 'smart' | 'center' | 'start' | 'end';\n\ntype itemSize = number | ((index: number) => number);\n\ntype RenderComponentProps = {|\n columnIndex: number,\n data: T,\n isScrolling?: boolean,\n rowIndex: number,\n style: Object,\n|};\nexport type RenderComponent = React$ComponentType<\n $Shape>\n>;\n\ntype ScrollDirection = 'forward' | 'backward';\n\ntype OnItemsRenderedCallback = ({\n overscanColumnStartIndex: number,\n overscanColumnStopIndex: number,\n overscanRowStartIndex: number,\n overscanRowStopIndex: number,\n visibleColumnStartIndex: number,\n visibleColumnStopIndex: number,\n visibleRowStartIndex: number,\n visibleRowStopIndex: number,\n}) => void;\ntype OnScrollCallback = ({\n horizontalScrollDirection: ScrollDirection,\n scrollLeft: number,\n scrollTop: number,\n scrollUpdateWasRequested: boolean,\n verticalScrollDirection: ScrollDirection,\n}) => void;\n\ntype ScrollEvent = SyntheticEvent;\ntype ItemStyleCache = { [key: string]: Object };\n\ntype OuterProps = {|\n children: React$Node,\n className: string | void,\n onScroll: ScrollEvent => void,\n style: {\n [string]: mixed,\n },\n|};\n\ntype InnerProps = {|\n children: React$Node,\n style: {\n [string]: mixed,\n },\n|};\n\nexport type Props = {|\n children: RenderComponent,\n className?: string,\n columnCount: number,\n columnWidth: itemSize,\n direction: Direction,\n height: number,\n initialScrollLeft?: number,\n initialScrollTop?: number,\n innerRef?: any,\n innerElementType?: string | React$AbstractComponent,\n innerTagName?: string, // deprecated\n itemData: T,\n itemKey?: (params: {|\n columnIndex: number,\n data: T,\n rowIndex: number,\n |}) => any,\n onItemsRendered?: OnItemsRenderedCallback,\n onScroll?: OnScrollCallback,\n outerRef?: any,\n outerElementType?: string | React$AbstractComponent,\n outerTagName?: string, // deprecated\n overscanColumnCount?: number,\n overscanColumnsCount?: number, // deprecated\n overscanCount?: number, // deprecated\n overscanRowCount?: number,\n overscanRowsCount?: number, // deprecated\n rowCount: number,\n rowHeight: itemSize,\n style?: Object,\n useIsScrolling: boolean,\n width: number,\n|};\n\ntype State = {|\n instance: any,\n isScrolling: boolean,\n horizontalScrollDirection: ScrollDirection,\n scrollLeft: number,\n scrollTop: number,\n scrollUpdateWasRequested: boolean,\n verticalScrollDirection: ScrollDirection,\n|};\n\ntype getItemOffset = (\n props: Props,\n index: number,\n instanceProps: any\n) => number;\ntype getItemSize = (\n props: Props,\n index: number,\n instanceProps: any\n) => number;\ntype getEstimatedTotalSize = (props: Props, instanceProps: any) => number;\ntype GetOffsetForItemAndAlignment = (\n props: Props,\n index: number,\n align: ScrollToAlign,\n scrollOffset: number,\n instanceProps: any,\n scrollbarSize: number\n) => number;\ntype GetStartIndexForOffset = (\n props: Props,\n offset: number,\n instanceProps: any\n) => number;\ntype GetStopIndexForStartIndex = (\n props: Props,\n startIndex: number,\n scrollOffset: number,\n instanceProps: any\n) => number;\ntype InitInstanceProps = (props: Props, instance: any) => any;\ntype ValidateProps = (props: Props) => void;\n\nconst IS_SCROLLING_DEBOUNCE_INTERVAL = 150;\n\nconst defaultItemKey = ({ columnIndex, data, rowIndex }) =>\n `${rowIndex}:${columnIndex}`;\n\n// In DEV mode, this Set helps us only log a warning once per component instance.\n// This avoids spamming the console every time a render happens.\nlet devWarningsOverscanCount = null;\nlet devWarningsOverscanRowsColumnsCount = null;\nlet devWarningsTagName = null;\nif (process.env.NODE_ENV !== 'production') {\n if (typeof window !== 'undefined' && typeof window.WeakSet !== 'undefined') {\n devWarningsOverscanCount = new WeakSet();\n devWarningsOverscanRowsColumnsCount = new WeakSet();\n devWarningsTagName = new WeakSet();\n }\n}\n\nexport default function createGridComponent({\n getColumnOffset,\n getColumnStartIndexForOffset,\n getColumnStopIndexForStartIndex,\n getColumnWidth,\n getEstimatedTotalHeight,\n getEstimatedTotalWidth,\n getOffsetForColumnAndAlignment,\n getOffsetForRowAndAlignment,\n getRowHeight,\n getRowOffset,\n getRowStartIndexForOffset,\n getRowStopIndexForStartIndex,\n initInstanceProps,\n shouldResetStyleCacheOnItemSizeChange,\n validateProps,\n}: {|\n getColumnOffset: getItemOffset,\n getColumnStartIndexForOffset: GetStartIndexForOffset,\n getColumnStopIndexForStartIndex: GetStopIndexForStartIndex,\n getColumnWidth: getItemSize,\n getEstimatedTotalHeight: getEstimatedTotalSize,\n getEstimatedTotalWidth: getEstimatedTotalSize,\n getOffsetForColumnAndAlignment: GetOffsetForItemAndAlignment,\n getOffsetForRowAndAlignment: GetOffsetForItemAndAlignment,\n getRowOffset: getItemOffset,\n getRowHeight: getItemSize,\n getRowStartIndexForOffset: GetStartIndexForOffset,\n getRowStopIndexForStartIndex: GetStopIndexForStartIndex,\n initInstanceProps: InitInstanceProps,\n shouldResetStyleCacheOnItemSizeChange: boolean,\n validateProps: ValidateProps,\n|}) {\n return class Grid extends PureComponent, State> {\n _instanceProps: any = initInstanceProps(this.props, this);\n _resetIsScrollingTimeoutId: TimeoutID | null = null;\n _outerRef: ?HTMLDivElement;\n\n static defaultProps = {\n direction: 'ltr',\n itemData: undefined,\n useIsScrolling: false,\n };\n\n state: State = {\n instance: this,\n isScrolling: false,\n horizontalScrollDirection: 'forward',\n scrollLeft:\n typeof this.props.initialScrollLeft === 'number'\n ? this.props.initialScrollLeft\n : 0,\n scrollTop:\n typeof this.props.initialScrollTop === 'number'\n ? this.props.initialScrollTop\n : 0,\n scrollUpdateWasRequested: false,\n verticalScrollDirection: 'forward',\n };\n\n // Always use explicit constructor for React components.\n // It produces less code after transpilation. (#26)\n // eslint-disable-next-line no-useless-constructor\n constructor(props: Props) {\n super(props);\n }\n\n static getDerivedStateFromProps(\n nextProps: Props,\n prevState: State\n ): $Shape | null {\n validateSharedProps(nextProps, prevState);\n validateProps(nextProps);\n return null;\n }\n\n scrollTo({\n scrollLeft,\n scrollTop,\n }: {\n scrollLeft: number,\n scrollTop: number,\n }): void {\n if (scrollLeft !== undefined) {\n scrollLeft = Math.max(0, scrollLeft);\n }\n if (scrollTop !== undefined) {\n scrollTop = Math.max(0, scrollTop);\n }\n\n this.setState(prevState => {\n if (scrollLeft === undefined) {\n scrollLeft = prevState.scrollLeft;\n }\n if (scrollTop === undefined) {\n scrollTop = prevState.scrollTop;\n }\n\n if (\n prevState.scrollLeft === scrollLeft &&\n prevState.scrollTop === scrollTop\n ) {\n return null;\n }\n\n return {\n horizontalScrollDirection:\n prevState.scrollLeft < scrollLeft ? 'forward' : 'backward',\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n scrollUpdateWasRequested: true,\n verticalScrollDirection:\n prevState.scrollTop < scrollTop ? 'forward' : 'backward',\n };\n }, this._resetIsScrollingDebounced);\n }\n\n scrollToItem({\n align = 'auto',\n columnIndex,\n rowIndex,\n }: {\n align: ScrollToAlign,\n columnIndex?: number,\n rowIndex?: number,\n }): void {\n const { columnCount, height, rowCount, width } = this.props;\n const { scrollLeft, scrollTop } = this.state;\n const scrollbarSize = getScrollbarSize();\n\n if (columnIndex !== undefined) {\n columnIndex = Math.max(0, Math.min(columnIndex, columnCount - 1));\n }\n if (rowIndex !== undefined) {\n rowIndex = Math.max(0, Math.min(rowIndex, rowCount - 1));\n }\n\n const estimatedTotalHeight = getEstimatedTotalHeight(\n this.props,\n this._instanceProps\n );\n const estimatedTotalWidth = getEstimatedTotalWidth(\n this.props,\n this._instanceProps\n );\n\n // The scrollbar size should be considered when scrolling an item into view,\n // to ensure it's fully visible.\n // But we only need to account for its size when it's actually visible.\n const horizontalScrollbarSize =\n estimatedTotalWidth > width ? scrollbarSize : 0;\n const verticalScrollbarSize =\n estimatedTotalHeight > height ? scrollbarSize : 0;\n\n this.scrollTo({\n scrollLeft:\n columnIndex !== undefined\n ? getOffsetForColumnAndAlignment(\n this.props,\n columnIndex,\n align,\n scrollLeft,\n this._instanceProps,\n verticalScrollbarSize\n )\n : scrollLeft,\n scrollTop:\n rowIndex !== undefined\n ? getOffsetForRowAndAlignment(\n this.props,\n rowIndex,\n align,\n scrollTop,\n this._instanceProps,\n horizontalScrollbarSize\n )\n : scrollTop,\n });\n }\n\n componentDidMount() {\n const { initialScrollLeft, initialScrollTop } = this.props;\n\n if (this._outerRef != null) {\n const outerRef = ((this._outerRef: any): HTMLElement);\n if (typeof initialScrollLeft === 'number') {\n outerRef.scrollLeft = initialScrollLeft;\n }\n if (typeof initialScrollTop === 'number') {\n outerRef.scrollTop = initialScrollTop;\n }\n }\n\n this._callPropsCallbacks();\n }\n\n componentDidUpdate() {\n const { direction } = this.props;\n const { scrollLeft, scrollTop, scrollUpdateWasRequested } = this.state;\n\n if (scrollUpdateWasRequested && this._outerRef != null) {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // So we need to determine which browser behavior we're dealing with, and mimic it.\n const outerRef = ((this._outerRef: any): HTMLElement);\n if (direction === 'rtl') {\n switch (getRTLOffsetType()) {\n case 'negative':\n outerRef.scrollLeft = -scrollLeft;\n break;\n case 'positive-ascending':\n outerRef.scrollLeft = scrollLeft;\n break;\n default:\n const { clientWidth, scrollWidth } = outerRef;\n outerRef.scrollLeft = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n } else {\n outerRef.scrollLeft = Math.max(0, scrollLeft);\n }\n\n outerRef.scrollTop = Math.max(0, scrollTop);\n }\n\n this._callPropsCallbacks();\n }\n\n componentWillUnmount() {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n }\n\n render() {\n const {\n children,\n className,\n columnCount,\n direction,\n height,\n innerRef,\n innerElementType,\n innerTagName,\n itemData,\n itemKey = defaultItemKey,\n outerElementType,\n outerTagName,\n rowCount,\n style,\n useIsScrolling,\n width,\n } = this.props;\n const { isScrolling } = this.state;\n\n const [\n columnStartIndex,\n columnStopIndex,\n ] = this._getHorizontalRangeToRender();\n const [rowStartIndex, rowStopIndex] = this._getVerticalRangeToRender();\n\n const items = [];\n if (columnCount > 0 && rowCount) {\n for (\n let rowIndex = rowStartIndex;\n rowIndex <= rowStopIndex;\n rowIndex++\n ) {\n for (\n let columnIndex = columnStartIndex;\n columnIndex <= columnStopIndex;\n columnIndex++\n ) {\n items.push(\n createElement(children, {\n columnIndex,\n data: itemData,\n isScrolling: useIsScrolling ? isScrolling : undefined,\n key: itemKey({ columnIndex, data: itemData, rowIndex }),\n rowIndex,\n style: this._getItemStyle(rowIndex, columnIndex),\n })\n );\n }\n }\n }\n\n // Read this value AFTER items have been created,\n // So their actual sizes (if variable) are taken into consideration.\n const estimatedTotalHeight = getEstimatedTotalHeight(\n this.props,\n this._instanceProps\n );\n const estimatedTotalWidth = getEstimatedTotalWidth(\n this.props,\n this._instanceProps\n );\n\n return createElement(\n outerElementType || outerTagName || 'div',\n {\n className,\n onScroll: this._onScroll,\n ref: this._outerRefSetter,\n style: {\n position: 'relative',\n height,\n width,\n overflow: 'auto',\n WebkitOverflowScrolling: 'touch',\n willChange: 'transform',\n direction,\n ...style,\n },\n },\n createElement(innerElementType || innerTagName || 'div', {\n children: items,\n ref: innerRef,\n style: {\n height: estimatedTotalHeight,\n pointerEvents: isScrolling ? 'none' : undefined,\n width: estimatedTotalWidth,\n },\n })\n );\n }\n\n _callOnItemsRendered: (\n overscanColumnStartIndex: number,\n overscanColumnStopIndex: number,\n overscanRowStartIndex: number,\n overscanRowStopIndex: number,\n visibleColumnStartIndex: number,\n visibleColumnStopIndex: number,\n visibleRowStartIndex: number,\n visibleRowStopIndex: number\n ) => void;\n _callOnItemsRendered = memoizeOne(\n (\n overscanColumnStartIndex: number,\n overscanColumnStopIndex: number,\n overscanRowStartIndex: number,\n overscanRowStopIndex: number,\n visibleColumnStartIndex: number,\n visibleColumnStopIndex: number,\n visibleRowStartIndex: number,\n visibleRowStopIndex: number\n ) =>\n ((this.props.onItemsRendered: any): OnItemsRenderedCallback)({\n overscanColumnStartIndex,\n overscanColumnStopIndex,\n overscanRowStartIndex,\n overscanRowStopIndex,\n visibleColumnStartIndex,\n visibleColumnStopIndex,\n visibleRowStartIndex,\n visibleRowStopIndex,\n })\n );\n\n _callOnScroll: (\n scrollLeft: number,\n scrollTop: number,\n horizontalScrollDirection: ScrollDirection,\n verticalScrollDirection: ScrollDirection,\n scrollUpdateWasRequested: boolean\n ) => void;\n _callOnScroll = memoizeOne(\n (\n scrollLeft: number,\n scrollTop: number,\n horizontalScrollDirection: ScrollDirection,\n verticalScrollDirection: ScrollDirection,\n scrollUpdateWasRequested: boolean\n ) =>\n ((this.props.onScroll: any): OnScrollCallback)({\n horizontalScrollDirection,\n scrollLeft,\n scrollTop,\n verticalScrollDirection,\n scrollUpdateWasRequested,\n })\n );\n\n _callPropsCallbacks() {\n const { columnCount, onItemsRendered, onScroll, rowCount } = this.props;\n\n if (typeof onItemsRendered === 'function') {\n if (columnCount > 0 && rowCount > 0) {\n const [\n overscanColumnStartIndex,\n overscanColumnStopIndex,\n visibleColumnStartIndex,\n visibleColumnStopIndex,\n ] = this._getHorizontalRangeToRender();\n const [\n overscanRowStartIndex,\n overscanRowStopIndex,\n visibleRowStartIndex,\n visibleRowStopIndex,\n ] = this._getVerticalRangeToRender();\n this._callOnItemsRendered(\n overscanColumnStartIndex,\n overscanColumnStopIndex,\n overscanRowStartIndex,\n overscanRowStopIndex,\n visibleColumnStartIndex,\n visibleColumnStopIndex,\n visibleRowStartIndex,\n visibleRowStopIndex\n );\n }\n }\n\n if (typeof onScroll === 'function') {\n const {\n horizontalScrollDirection,\n scrollLeft,\n scrollTop,\n scrollUpdateWasRequested,\n verticalScrollDirection,\n } = this.state;\n this._callOnScroll(\n scrollLeft,\n scrollTop,\n horizontalScrollDirection,\n verticalScrollDirection,\n scrollUpdateWasRequested\n );\n }\n }\n\n // Lazily create and cache item styles while scrolling,\n // So that pure component sCU will prevent re-renders.\n // We maintain this cache, and pass a style prop rather than index,\n // So that List can clear cached styles and force item re-render if necessary.\n _getItemStyle: (rowIndex: number, columnIndex: number) => Object;\n _getItemStyle = (rowIndex: number, columnIndex: number): Object => {\n const { columnWidth, direction, rowHeight } = this.props;\n\n const itemStyleCache = this._getItemStyleCache(\n shouldResetStyleCacheOnItemSizeChange && columnWidth,\n shouldResetStyleCacheOnItemSizeChange && direction,\n shouldResetStyleCacheOnItemSizeChange && rowHeight\n );\n\n const key = `${rowIndex}:${columnIndex}`;\n\n let style;\n if (itemStyleCache.hasOwnProperty(key)) {\n style = itemStyleCache[key];\n } else {\n const offset = getColumnOffset(\n this.props,\n columnIndex,\n this._instanceProps\n );\n const isRtl = direction === 'rtl';\n itemStyleCache[key] = style = {\n position: 'absolute',\n left: isRtl ? undefined : offset,\n right: isRtl ? offset : undefined,\n top: getRowOffset(this.props, rowIndex, this._instanceProps),\n height: getRowHeight(this.props, rowIndex, this._instanceProps),\n width: getColumnWidth(this.props, columnIndex, this._instanceProps),\n };\n }\n\n return style;\n };\n\n _getItemStyleCache: (_: any, __: any, ___: any) => ItemStyleCache;\n _getItemStyleCache = memoizeOne((_: any, __: any, ___: any) => ({}));\n\n _getHorizontalRangeToRender(): [number, number, number, number] {\n const {\n columnCount,\n overscanColumnCount,\n overscanColumnsCount,\n overscanCount,\n rowCount,\n } = this.props;\n const { horizontalScrollDirection, isScrolling, scrollLeft } = this.state;\n\n const overscanCountResolved: number =\n overscanColumnCount || overscanColumnsCount || overscanCount || 1;\n\n if (columnCount === 0 || rowCount === 0) {\n return [0, 0, 0, 0];\n }\n\n const startIndex = getColumnStartIndexForOffset(\n this.props,\n scrollLeft,\n this._instanceProps\n );\n const stopIndex = getColumnStopIndexForStartIndex(\n this.props,\n startIndex,\n scrollLeft,\n this._instanceProps\n );\n\n // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n const overscanBackward =\n !isScrolling || horizontalScrollDirection === 'backward'\n ? Math.max(1, overscanCountResolved)\n : 1;\n const overscanForward =\n !isScrolling || horizontalScrollDirection === 'forward'\n ? Math.max(1, overscanCountResolved)\n : 1;\n\n return [\n Math.max(0, startIndex - overscanBackward),\n Math.max(0, Math.min(columnCount - 1, stopIndex + overscanForward)),\n startIndex,\n stopIndex,\n ];\n }\n\n _getVerticalRangeToRender(): [number, number, number, number] {\n const {\n columnCount,\n overscanCount,\n overscanRowCount,\n overscanRowsCount,\n rowCount,\n } = this.props;\n const { isScrolling, verticalScrollDirection, scrollTop } = this.state;\n\n const overscanCountResolved: number =\n overscanRowCount || overscanRowsCount || overscanCount || 1;\n\n if (columnCount === 0 || rowCount === 0) {\n return [0, 0, 0, 0];\n }\n\n const startIndex = getRowStartIndexForOffset(\n this.props,\n scrollTop,\n this._instanceProps\n );\n const stopIndex = getRowStopIndexForStartIndex(\n this.props,\n startIndex,\n scrollTop,\n this._instanceProps\n );\n\n // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n const overscanBackward =\n !isScrolling || verticalScrollDirection === 'backward'\n ? Math.max(1, overscanCountResolved)\n : 1;\n const overscanForward =\n !isScrolling || verticalScrollDirection === 'forward'\n ? Math.max(1, overscanCountResolved)\n : 1;\n\n return [\n Math.max(0, startIndex - overscanBackward),\n Math.max(0, Math.min(rowCount - 1, stopIndex + overscanForward)),\n startIndex,\n stopIndex,\n ];\n }\n\n _onScroll = (event: ScrollEvent): void => {\n const {\n clientHeight,\n clientWidth,\n scrollLeft,\n scrollTop,\n scrollHeight,\n scrollWidth,\n } = event.currentTarget;\n this.setState(prevState => {\n if (\n prevState.scrollLeft === scrollLeft &&\n prevState.scrollTop === scrollTop\n ) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n }\n\n const { direction } = this.props;\n\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // It's also easier for this component if we convert offsets to the same format as they would be in for ltr.\n // So the simplest solution is to determine which browser behavior we're dealing with, and convert based on it.\n let calculatedScrollLeft = scrollLeft;\n if (direction === 'rtl') {\n switch (getRTLOffsetType()) {\n case 'negative':\n calculatedScrollLeft = -scrollLeft;\n break;\n case 'positive-descending':\n calculatedScrollLeft = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n }\n\n // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n calculatedScrollLeft = Math.max(\n 0,\n Math.min(calculatedScrollLeft, scrollWidth - clientWidth)\n );\n const calculatedScrollTop = Math.max(\n 0,\n Math.min(scrollTop, scrollHeight - clientHeight)\n );\n\n return {\n isScrolling: true,\n horizontalScrollDirection:\n prevState.scrollLeft < scrollLeft ? 'forward' : 'backward',\n scrollLeft: calculatedScrollLeft,\n scrollTop: calculatedScrollTop,\n verticalScrollDirection:\n prevState.scrollTop < scrollTop ? 'forward' : 'backward',\n scrollUpdateWasRequested: false,\n };\n }, this._resetIsScrollingDebounced);\n };\n\n _outerRefSetter = (ref: any): void => {\n const { outerRef } = this.props;\n\n this._outerRef = ((ref: any): HTMLDivElement);\n\n if (typeof outerRef === 'function') {\n outerRef(ref);\n } else if (\n outerRef != null &&\n typeof outerRef === 'object' &&\n outerRef.hasOwnProperty('current')\n ) {\n outerRef.current = ref;\n }\n };\n\n _resetIsScrollingDebounced = () => {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n\n this._resetIsScrollingTimeoutId = requestTimeout(\n this._resetIsScrolling,\n IS_SCROLLING_DEBOUNCE_INTERVAL\n );\n };\n\n _resetIsScrolling = () => {\n this._resetIsScrollingTimeoutId = null;\n\n this.setState({ isScrolling: false }, () => {\n // Clear style cache after state update has been committed.\n // This way we don't break pure sCU for items that don't use isScrolling param.\n this._getItemStyleCache(-1);\n });\n };\n };\n}\n\nconst validateSharedProps = (\n {\n children,\n direction,\n height,\n innerTagName,\n outerTagName,\n overscanColumnsCount,\n overscanCount,\n overscanRowsCount,\n width,\n }: Props,\n { instance }: State\n): void => {\n if (process.env.NODE_ENV !== 'production') {\n if (typeof overscanCount === 'number') {\n if (devWarningsOverscanCount && !devWarningsOverscanCount.has(instance)) {\n devWarningsOverscanCount.add(instance);\n console.warn(\n 'The overscanCount prop has been deprecated. ' +\n 'Please use the overscanColumnCount and overscanRowCount props instead.'\n );\n }\n }\n\n if (\n typeof overscanColumnsCount === 'number' ||\n typeof overscanRowsCount === 'number'\n ) {\n if (\n devWarningsOverscanRowsColumnsCount &&\n !devWarningsOverscanRowsColumnsCount.has(instance)\n ) {\n devWarningsOverscanRowsColumnsCount.add(instance);\n console.warn(\n 'The overscanColumnsCount and overscanRowsCount props have been deprecated. ' +\n 'Please use the overscanColumnCount and overscanRowCount props instead.'\n );\n }\n }\n\n if (innerTagName != null || outerTagName != null) {\n if (devWarningsTagName && !devWarningsTagName.has(instance)) {\n devWarningsTagName.add(instance);\n console.warn(\n 'The innerTagName and outerTagName props have been deprecated. ' +\n 'Please use the innerElementType and outerElementType props instead.'\n );\n }\n }\n\n if (children == null) {\n throw Error(\n 'An invalid \"children\" prop has been specified. ' +\n 'Value should be a React component. ' +\n `\"${children === null ? 'null' : typeof children}\" was specified.`\n );\n }\n\n switch (direction) {\n case 'ltr':\n case 'rtl':\n // Valid values\n break;\n default:\n throw Error(\n 'An invalid \"direction\" prop has been specified. ' +\n 'Value should be either \"ltr\" or \"rtl\". ' +\n `\"${direction}\" was specified.`\n );\n }\n\n if (typeof width !== 'number') {\n throw Error(\n 'An invalid \"width\" prop has been specified. ' +\n 'Grids must specify a number for width. ' +\n `\"${width === null ? 'null' : typeof width}\" was specified.`\n );\n }\n\n if (typeof height !== 'number') {\n throw Error(\n 'An invalid \"height\" prop has been specified. ' +\n 'Grids must specify a number for height. ' +\n `\"${height === null ? 'null' : typeof height}\" was specified.`\n );\n }\n }\n};\n","// @flow\n\nimport memoizeOne from 'memoize-one';\nimport { createElement, PureComponent } from 'react';\nimport { cancelTimeout, requestTimeout } from './timer';\nimport { getScrollbarSize, getRTLOffsetType } from './domHelpers';\n\nimport type { TimeoutID } from './timer';\n\nexport type ScrollToAlign = 'auto' | 'smart' | 'center' | 'start' | 'end';\n\ntype itemSize = number | ((index: number) => number);\n// TODO Deprecate directions \"horizontal\" and \"vertical\"\ntype Direction = 'ltr' | 'rtl' | 'horizontal' | 'vertical';\ntype Layout = 'horizontal' | 'vertical';\n\ntype RenderComponentProps = {|\n data: T,\n index: number,\n isScrolling?: boolean,\n style: Object,\n|};\ntype RenderComponent = React$ComponentType<$Shape>>;\n\ntype ScrollDirection = 'forward' | 'backward';\n\ntype onItemsRenderedCallback = ({\n overscanStartIndex: number,\n overscanStopIndex: number,\n visibleStartIndex: number,\n visibleStopIndex: number,\n}) => void;\ntype onScrollCallback = ({\n scrollDirection: ScrollDirection,\n scrollOffset: number,\n scrollUpdateWasRequested: boolean,\n}) => void;\n\ntype ScrollEvent = SyntheticEvent;\ntype ItemStyleCache = { [index: number]: Object };\n\ntype OuterProps = {|\n children: React$Node,\n className: string | void,\n onScroll: ScrollEvent => void,\n style: {\n [string]: mixed,\n },\n|};\n\ntype InnerProps = {|\n children: React$Node,\n style: {\n [string]: mixed,\n },\n|};\n\nexport type Props = {|\n children: RenderComponent,\n className?: string,\n direction: Direction,\n height: number | string,\n initialScrollOffset?: number,\n innerRef?: any,\n innerElementType?: string | React$AbstractComponent,\n innerTagName?: string, // deprecated\n itemCount: number,\n itemData: T,\n itemKey?: (index: number, data: T) => any,\n itemSize: itemSize,\n layout: Layout,\n onItemsRendered?: onItemsRenderedCallback,\n onScroll?: onScrollCallback,\n outerRef?: any,\n outerElementType?: string | React$AbstractComponent,\n outerTagName?: string, // deprecated\n overscanCount: number,\n style?: Object,\n useIsScrolling: boolean,\n width: number | string,\n|};\n\ntype State = {|\n instance: any,\n isScrolling: boolean,\n scrollDirection: ScrollDirection,\n scrollOffset: number,\n scrollUpdateWasRequested: boolean,\n|};\n\ntype GetItemOffset = (\n props: Props,\n index: number,\n instanceProps: any\n) => number;\ntype GetItemSize = (\n props: Props,\n index: number,\n instanceProps: any\n) => number;\ntype GetEstimatedTotalSize = (props: Props, instanceProps: any) => number;\ntype GetOffsetForIndexAndAlignment = (\n props: Props,\n index: number,\n align: ScrollToAlign,\n scrollOffset: number,\n instanceProps: any\n) => number;\ntype GetStartIndexForOffset = (\n props: Props,\n offset: number,\n instanceProps: any\n) => number;\ntype GetStopIndexForStartIndex = (\n props: Props,\n startIndex: number,\n scrollOffset: number,\n instanceProps: any\n) => number;\ntype InitInstanceProps = (props: Props, instance: any) => any;\ntype ValidateProps = (props: Props) => void;\n\nconst IS_SCROLLING_DEBOUNCE_INTERVAL = 150;\n\nconst defaultItemKey = (index: number, data: any) => index;\n\n// In DEV mode, this Set helps us only log a warning once per component instance.\n// This avoids spamming the console every time a render happens.\nlet devWarningsDirection = null;\nlet devWarningsTagName = null;\nif (process.env.NODE_ENV !== 'production') {\n if (typeof window !== 'undefined' && typeof window.WeakSet !== 'undefined') {\n devWarningsDirection = new WeakSet();\n devWarningsTagName = new WeakSet();\n }\n}\n\nexport default function createListComponent({\n getItemOffset,\n getEstimatedTotalSize,\n getItemSize,\n getOffsetForIndexAndAlignment,\n getStartIndexForOffset,\n getStopIndexForStartIndex,\n initInstanceProps,\n shouldResetStyleCacheOnItemSizeChange,\n validateProps,\n}: {|\n getItemOffset: GetItemOffset,\n getEstimatedTotalSize: GetEstimatedTotalSize,\n getItemSize: GetItemSize,\n getOffsetForIndexAndAlignment: GetOffsetForIndexAndAlignment,\n getStartIndexForOffset: GetStartIndexForOffset,\n getStopIndexForStartIndex: GetStopIndexForStartIndex,\n initInstanceProps: InitInstanceProps,\n shouldResetStyleCacheOnItemSizeChange: boolean,\n validateProps: ValidateProps,\n|}) {\n return class List extends PureComponent, State> {\n _instanceProps: any = initInstanceProps(this.props, this);\n _outerRef: ?HTMLDivElement;\n _resetIsScrollingTimeoutId: TimeoutID | null = null;\n\n static defaultProps = {\n direction: 'ltr',\n itemData: undefined,\n layout: 'vertical',\n overscanCount: 2,\n useIsScrolling: false,\n };\n\n state: State = {\n instance: this,\n isScrolling: false,\n scrollDirection: 'forward',\n scrollOffset:\n typeof this.props.initialScrollOffset === 'number'\n ? this.props.initialScrollOffset\n : 0,\n scrollUpdateWasRequested: false,\n };\n\n // Always use explicit constructor for React components.\n // It produces less code after transpilation. (#26)\n // eslint-disable-next-line no-useless-constructor\n constructor(props: Props) {\n super(props);\n }\n\n static getDerivedStateFromProps(\n nextProps: Props,\n prevState: State\n ): $Shape | null {\n validateSharedProps(nextProps, prevState);\n validateProps(nextProps);\n return null;\n }\n\n scrollTo(scrollOffset: number): void {\n scrollOffset = Math.max(0, scrollOffset);\n\n this.setState(prevState => {\n if (prevState.scrollOffset === scrollOffset) {\n return null;\n }\n return {\n scrollDirection:\n prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: true,\n };\n }, this._resetIsScrollingDebounced);\n }\n\n scrollToItem(index: number, align: ScrollToAlign = 'auto'): void {\n const { itemCount, layout } = this.props;\n const { scrollOffset } = this.state;\n\n index = Math.max(0, Math.min(index, itemCount - 1));\n\n // The scrollbar size should be considered when scrolling an item into view, to ensure it's fully visible.\n // But we only need to account for its size when it's actually visible.\n // This is an edge case for lists; normally they only scroll in the dominant direction.\n let scrollbarSize = 0;\n if (this._outerRef) {\n const outerRef = ((this._outerRef: any): HTMLElement);\n if (layout === 'vertical') {\n scrollbarSize =\n outerRef.scrollWidth > outerRef.clientWidth\n ? getScrollbarSize()\n : 0;\n } else {\n scrollbarSize =\n outerRef.scrollHeight > outerRef.clientHeight\n ? getScrollbarSize()\n : 0;\n }\n }\n\n this.scrollTo(\n getOffsetForIndexAndAlignment(\n this.props,\n index,\n align,\n scrollOffset,\n this._instanceProps,\n scrollbarSize\n )\n );\n }\n\n componentDidMount() {\n const { direction, initialScrollOffset, layout } = this.props;\n\n if (typeof initialScrollOffset === 'number' && this._outerRef != null) {\n const outerRef = ((this._outerRef: any): HTMLElement);\n // TODO Deprecate direction \"horizontal\"\n if (direction === 'horizontal' || layout === 'horizontal') {\n outerRef.scrollLeft = initialScrollOffset;\n } else {\n outerRef.scrollTop = initialScrollOffset;\n }\n }\n\n this._callPropsCallbacks();\n }\n\n componentDidUpdate() {\n const { direction, layout } = this.props;\n const { scrollOffset, scrollUpdateWasRequested } = this.state;\n\n if (scrollUpdateWasRequested && this._outerRef != null) {\n const outerRef = ((this._outerRef: any): HTMLElement);\n\n // TODO Deprecate direction \"horizontal\"\n if (direction === 'horizontal' || layout === 'horizontal') {\n if (direction === 'rtl') {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // So we need to determine which browser behavior we're dealing with, and mimic it.\n switch (getRTLOffsetType()) {\n case 'negative':\n outerRef.scrollLeft = -scrollOffset;\n break;\n case 'positive-ascending':\n outerRef.scrollLeft = scrollOffset;\n break;\n default:\n const { clientWidth, scrollWidth } = outerRef;\n outerRef.scrollLeft = scrollWidth - clientWidth - scrollOffset;\n break;\n }\n } else {\n outerRef.scrollLeft = scrollOffset;\n }\n } else {\n outerRef.scrollTop = scrollOffset;\n }\n }\n\n this._callPropsCallbacks();\n }\n\n componentWillUnmount() {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n }\n\n render() {\n const {\n children,\n className,\n direction,\n height,\n innerRef,\n innerElementType,\n innerTagName,\n itemCount,\n itemData,\n itemKey = defaultItemKey,\n layout,\n outerElementType,\n outerTagName,\n style,\n useIsScrolling,\n width,\n } = this.props;\n const { isScrolling } = this.state;\n\n // TODO Deprecate direction \"horizontal\"\n const isHorizontal =\n direction === 'horizontal' || layout === 'horizontal';\n\n const onScroll = isHorizontal\n ? this._onScrollHorizontal\n : this._onScrollVertical;\n\n const [startIndex, stopIndex] = this._getRangeToRender();\n\n const items = [];\n if (itemCount > 0) {\n for (let index = startIndex; index <= stopIndex; index++) {\n items.push(\n createElement(children, {\n data: itemData,\n key: itemKey(index, itemData),\n index,\n isScrolling: useIsScrolling ? isScrolling : undefined,\n style: this._getItemStyle(index),\n })\n );\n }\n }\n\n // Read this value AFTER items have been created,\n // So their actual sizes (if variable) are taken into consideration.\n const estimatedTotalSize = getEstimatedTotalSize(\n this.props,\n this._instanceProps\n );\n\n return createElement(\n outerElementType || outerTagName || 'div',\n {\n className,\n onScroll,\n ref: this._outerRefSetter,\n style: {\n position: 'relative',\n height,\n width,\n overflow: 'auto',\n WebkitOverflowScrolling: 'touch',\n willChange: 'transform',\n direction,\n ...style,\n },\n },\n createElement(innerElementType || innerTagName || 'div', {\n children: items,\n ref: innerRef,\n style: {\n height: isHorizontal ? '100%' : estimatedTotalSize,\n pointerEvents: isScrolling ? 'none' : undefined,\n width: isHorizontal ? estimatedTotalSize : '100%',\n },\n })\n );\n }\n\n _callOnItemsRendered: (\n overscanStartIndex: number,\n overscanStopIndex: number,\n visibleStartIndex: number,\n visibleStopIndex: number\n ) => void;\n _callOnItemsRendered = memoizeOne(\n (\n overscanStartIndex: number,\n overscanStopIndex: number,\n visibleStartIndex: number,\n visibleStopIndex: number\n ) =>\n ((this.props.onItemsRendered: any): onItemsRenderedCallback)({\n overscanStartIndex,\n overscanStopIndex,\n visibleStartIndex,\n visibleStopIndex,\n })\n );\n\n _callOnScroll: (\n scrollDirection: ScrollDirection,\n scrollOffset: number,\n scrollUpdateWasRequested: boolean\n ) => void;\n _callOnScroll = memoizeOne(\n (\n scrollDirection: ScrollDirection,\n scrollOffset: number,\n scrollUpdateWasRequested: boolean\n ) =>\n ((this.props.onScroll: any): onScrollCallback)({\n scrollDirection,\n scrollOffset,\n scrollUpdateWasRequested,\n })\n );\n\n _callPropsCallbacks() {\n if (typeof this.props.onItemsRendered === 'function') {\n const { itemCount } = this.props;\n if (itemCount > 0) {\n const [\n overscanStartIndex,\n overscanStopIndex,\n visibleStartIndex,\n visibleStopIndex,\n ] = this._getRangeToRender();\n this._callOnItemsRendered(\n overscanStartIndex,\n overscanStopIndex,\n visibleStartIndex,\n visibleStopIndex\n );\n }\n }\n\n if (typeof this.props.onScroll === 'function') {\n const {\n scrollDirection,\n scrollOffset,\n scrollUpdateWasRequested,\n } = this.state;\n this._callOnScroll(\n scrollDirection,\n scrollOffset,\n scrollUpdateWasRequested\n );\n }\n }\n\n // Lazily create and cache item styles while scrolling,\n // So that pure component sCU will prevent re-renders.\n // We maintain this cache, and pass a style prop rather than index,\n // So that List can clear cached styles and force item re-render if necessary.\n _getItemStyle: (index: number) => Object;\n _getItemStyle = (index: number): Object => {\n const { direction, itemSize, layout } = this.props;\n\n const itemStyleCache = this._getItemStyleCache(\n shouldResetStyleCacheOnItemSizeChange && itemSize,\n shouldResetStyleCacheOnItemSizeChange && layout,\n shouldResetStyleCacheOnItemSizeChange && direction\n );\n\n let style;\n if (itemStyleCache.hasOwnProperty(index)) {\n style = itemStyleCache[index];\n } else {\n const offset = getItemOffset(this.props, index, this._instanceProps);\n const size = getItemSize(this.props, index, this._instanceProps);\n\n // TODO Deprecate direction \"horizontal\"\n const isHorizontal =\n direction === 'horizontal' || layout === 'horizontal';\n\n const isRtl = direction === 'rtl';\n const offsetHorizontal = isHorizontal ? offset : 0;\n itemStyleCache[index] = style = {\n position: 'absolute',\n left: isRtl ? undefined : offsetHorizontal,\n right: isRtl ? offsetHorizontal : undefined,\n top: !isHorizontal ? offset : 0,\n height: !isHorizontal ? size : '100%',\n width: isHorizontal ? size : '100%',\n };\n }\n\n return style;\n };\n\n _getItemStyleCache: (_: any, __: any, ___: any) => ItemStyleCache;\n _getItemStyleCache = memoizeOne((_: any, __: any, ___: any) => ({}));\n\n _getRangeToRender(): [number, number, number, number] {\n const { itemCount, overscanCount } = this.props;\n const { isScrolling, scrollDirection, scrollOffset } = this.state;\n\n if (itemCount === 0) {\n return [0, 0, 0, 0];\n }\n\n const startIndex = getStartIndexForOffset(\n this.props,\n scrollOffset,\n this._instanceProps\n );\n const stopIndex = getStopIndexForStartIndex(\n this.props,\n startIndex,\n scrollOffset,\n this._instanceProps\n );\n\n // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n const overscanBackward =\n !isScrolling || scrollDirection === 'backward'\n ? Math.max(1, overscanCount)\n : 1;\n const overscanForward =\n !isScrolling || scrollDirection === 'forward'\n ? Math.max(1, overscanCount)\n : 1;\n\n return [\n Math.max(0, startIndex - overscanBackward),\n Math.max(0, Math.min(itemCount - 1, stopIndex + overscanForward)),\n startIndex,\n stopIndex,\n ];\n }\n\n _onScrollHorizontal = (event: ScrollEvent): void => {\n const { clientWidth, scrollLeft, scrollWidth } = event.currentTarget;\n this.setState(prevState => {\n if (prevState.scrollOffset === scrollLeft) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n }\n\n const { direction } = this.props;\n\n let scrollOffset = scrollLeft;\n if (direction === 'rtl') {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // It's also easier for this component if we convert offsets to the same format as they would be in for ltr.\n // So the simplest solution is to determine which browser behavior we're dealing with, and convert based on it.\n switch (getRTLOffsetType()) {\n case 'negative':\n scrollOffset = -scrollLeft;\n break;\n case 'positive-descending':\n scrollOffset = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n }\n\n // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n scrollOffset = Math.max(\n 0,\n Math.min(scrollOffset, scrollWidth - clientWidth)\n );\n\n return {\n isScrolling: true,\n scrollDirection:\n prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n scrollOffset,\n scrollUpdateWasRequested: false,\n };\n }, this._resetIsScrollingDebounced);\n };\n\n _onScrollVertical = (event: ScrollEvent): void => {\n const { clientHeight, scrollHeight, scrollTop } = event.currentTarget;\n this.setState(prevState => {\n if (prevState.scrollOffset === scrollTop) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n }\n\n // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n const scrollOffset = Math.max(\n 0,\n Math.min(scrollTop, scrollHeight - clientHeight)\n );\n\n return {\n isScrolling: true,\n scrollDirection:\n prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n scrollOffset,\n scrollUpdateWasRequested: false,\n };\n }, this._resetIsScrollingDebounced);\n };\n\n _outerRefSetter = (ref: any): void => {\n const { outerRef } = this.props;\n\n this._outerRef = ((ref: any): HTMLDivElement);\n\n if (typeof outerRef === 'function') {\n outerRef(ref);\n } else if (\n outerRef != null &&\n typeof outerRef === 'object' &&\n outerRef.hasOwnProperty('current')\n ) {\n outerRef.current = ref;\n }\n };\n\n _resetIsScrollingDebounced = () => {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n\n this._resetIsScrollingTimeoutId = requestTimeout(\n this._resetIsScrolling,\n IS_SCROLLING_DEBOUNCE_INTERVAL\n );\n };\n\n _resetIsScrolling = () => {\n this._resetIsScrollingTimeoutId = null;\n\n this.setState({ isScrolling: false }, () => {\n // Clear style cache after state update has been committed.\n // This way we don't break pure sCU for items that don't use isScrolling param.\n this._getItemStyleCache(-1, null);\n });\n };\n };\n}\n\n// NOTE: I considered further wrapping individual items with a pure ListItem component.\n// This would avoid ever calling the render function for the same index more than once,\n// But it would also add the overhead of a lot of components/fibers.\n// I assume people already do this (render function returning a class component),\n// So my doing it would just unnecessarily double the wrappers.\n\nconst validateSharedProps = (\n {\n children,\n direction,\n height,\n layout,\n innerTagName,\n outerTagName,\n width,\n }: Props,\n { instance }: State\n): void => {\n if (process.env.NODE_ENV !== 'production') {\n if (innerTagName != null || outerTagName != null) {\n if (devWarningsTagName && !devWarningsTagName.has(instance)) {\n devWarningsTagName.add(instance);\n console.warn(\n 'The innerTagName and outerTagName props have been deprecated. ' +\n 'Please use the innerElementType and outerElementType props instead.'\n );\n }\n }\n\n // TODO Deprecate direction \"horizontal\"\n const isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n\n switch (direction) {\n case 'horizontal':\n case 'vertical':\n if (devWarningsDirection && !devWarningsDirection.has(instance)) {\n devWarningsDirection.add(instance);\n console.warn(\n 'The direction prop should be either \"ltr\" (default) or \"rtl\". ' +\n 'Please use the layout prop to specify \"vertical\" (default) or \"horizontal\" orientation.'\n );\n }\n break;\n case 'ltr':\n case 'rtl':\n // Valid values\n break;\n default:\n throw Error(\n 'An invalid \"direction\" prop has been specified. ' +\n 'Value should be either \"ltr\" or \"rtl\". ' +\n `\"${direction}\" was specified.`\n );\n }\n\n switch (layout) {\n case 'horizontal':\n case 'vertical':\n // Valid values\n break;\n default:\n throw Error(\n 'An invalid \"layout\" prop has been specified. ' +\n 'Value should be either \"horizontal\" or \"vertical\". ' +\n `\"${layout}\" was specified.`\n );\n }\n\n if (children == null) {\n throw Error(\n 'An invalid \"children\" prop has been specified. ' +\n 'Value should be a React component. ' +\n `\"${children === null ? 'null' : typeof children}\" was specified.`\n );\n }\n\n if (isHorizontal && typeof width !== 'number') {\n throw Error(\n 'An invalid \"width\" prop has been specified. ' +\n 'Horizontal lists must specify a number for width. ' +\n `\"${width === null ? 'null' : typeof width}\" was specified.`\n );\n } else if (!isHorizontal && typeof height !== 'number') {\n throw Error(\n 'An invalid \"height\" prop has been specified. ' +\n 'Vertical lists must specify a number for height. ' +\n `\"${height === null ? 'null' : typeof height}\" was specified.`\n );\n }\n }\n};\n","// @flow\n\nimport createListComponent from './createListComponent';\n\nimport type { Props, ScrollToAlign } from './createListComponent';\n\ntype InstanceProps = any;\n\nconst FixedSizeList = createListComponent({\n getItemOffset: ({ itemSize }: Props, index: number): number =>\n index * ((itemSize: any): number),\n\n getItemSize: ({ itemSize }: Props, index: number): number =>\n ((itemSize: any): number),\n\n getEstimatedTotalSize: ({ itemCount, itemSize }: Props) =>\n ((itemSize: any): number) * itemCount,\n\n getOffsetForIndexAndAlignment: (\n { direction, height, itemCount, itemSize, layout, width }: Props,\n index: number,\n align: ScrollToAlign,\n scrollOffset: number,\n instanceProps: InstanceProps,\n scrollbarSize: number\n ): number => {\n // TODO Deprecate direction \"horizontal\"\n const isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n const size = (((isHorizontal ? width : height): any): number);\n const lastItemOffset = Math.max(\n 0,\n itemCount * ((itemSize: any): number) - size\n );\n const maxOffset = Math.min(\n lastItemOffset,\n index * ((itemSize: any): number)\n );\n const minOffset = Math.max(\n 0,\n index * ((itemSize: any): number) -\n size +\n ((itemSize: any): number) +\n scrollbarSize\n );\n\n if (align === 'smart') {\n if (\n scrollOffset >= minOffset - size &&\n scrollOffset <= maxOffset + size\n ) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n case 'end':\n return minOffset;\n case 'center': {\n // \"Centered\" offset is usually the average of the min and max.\n // But near the edges of the list, this doesn't hold true.\n const middleOffset = Math.round(\n minOffset + (maxOffset - minOffset) / 2\n );\n if (middleOffset < Math.ceil(size / 2)) {\n return 0; // near the beginning\n } else if (middleOffset > lastItemOffset + Math.floor(size / 2)) {\n return lastItemOffset; // near the end\n } else {\n return middleOffset;\n }\n }\n case 'auto':\n default:\n if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n return scrollOffset;\n } else if (scrollOffset < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n }\n },\n\n getStartIndexForOffset: (\n { itemCount, itemSize }: Props,\n offset: number\n ): number =>\n Math.max(\n 0,\n Math.min(itemCount - 1, Math.floor(offset / ((itemSize: any): number)))\n ),\n\n getStopIndexForStartIndex: (\n { direction, height, itemCount, itemSize, layout, width }: Props,\n startIndex: number,\n scrollOffset: number\n ): number => {\n // TODO Deprecate direction \"horizontal\"\n const isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n const offset = startIndex * ((itemSize: any): number);\n const size = (((isHorizontal ? width : height): any): number);\n const numVisibleItems = Math.ceil(\n (size + scrollOffset - offset) / ((itemSize: any): number)\n );\n return Math.max(\n 0,\n Math.min(\n itemCount - 1,\n startIndex + numVisibleItems - 1 // -1 is because stop index is inclusive\n )\n );\n },\n\n initInstanceProps(props: Props): any {\n // Noop\n },\n\n shouldResetStyleCacheOnItemSizeChange: true,\n\n validateProps: ({ itemSize }: Props): void => {\n if (process.env.NODE_ENV !== 'production') {\n if (typeof itemSize !== 'number') {\n throw Error(\n 'An invalid \"itemSize\" prop has been specified. ' +\n 'Value should be a number. ' +\n `\"${itemSize === null ? 'null' : typeof itemSize}\" was specified.`\n );\n }\n }\n },\n});\n\nexport default FixedSizeList;\n"],"names":["createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","Constructor","protoProps","staticProps","prototype","possibleConstructorReturn","self","call","ReferenceError","_PureComponent","InfiniteLoader","_ref","_temp","_this","instance","TypeError","classCallCheck","this","_len","arguments","args","Array","_key","__proto__","getPrototypeOf","apply","concat","_lastRenderedStartIndex","_lastRenderedStopIndex","_memoizedUnloadedRanges","_onItemsRendered","_ref2","visibleStartIndex","visibleStopIndex","_ensureRowsLoaded","_setRef","listRef","_listRef","subClass","superClass","create","constructor","value","setPrototypeOf","inherits","autoReload","undefined","process","children","onItemsRendered","ref","startIndex","stopIndex","_props","isItemLoaded","itemCount","_props$minimumBatchSi","minimumBatchSize","_props$threshold","threshold","unloadedRanges","rangeStartIndex","rangeStopIndex","_index","push","potentialStopIndex","Math","min","max","_index2","_index3","scanForUnloadedRanges","some","startOrStop","index","_loadUnloadedRanges","_this2","loadMoreItems","loadMoreRows","_loop","promise","then","lastRenderedStartIndex","lastRenderedStopIndex","isRangeVisible","resetAfterIndex","_getItemStyleCache","forceUpdate","PureComponent","_inheritsLoose","safeIsNaN","Number","isNaN","areInputsEqual","newInputs","lastInputs","first","second","resultFn","isEqual","lastThis","lastResult","lastArgs","calledOnce","newArgs","_i","now","performance","Date","cancelTimeout","timeoutID","cancelAnimationFrame","id","requestTimeout","callback","delay","start","requestAnimationFrame","tick","size","getScrollbarSize","recalculate","div","document","createElement","style","width","height","overflow","body","appendChild","offsetWidth","clientWidth","removeChild","cachedRTLResult","getRTLOffsetType","outerDiv","outerStyle","direction","innerDiv","innerStyle","scrollLeft","defaultItemKey$1","data","createListComponent","_class","getItemOffset","getEstimatedTotalSize","getItemSize","getOffsetForIndexAndAlignment","getStartIndexForOffset","getStopIndexForStartIndex","initInstanceProps","shouldResetStyleCacheOnItemSizeChange","validateProps","List","_instanceProps","_assertThisInitialized","_outerRef","_resetIsScrollingTimeoutId","state","isScrolling","scrollDirection","scrollOffset","initialScrollOffset","scrollUpdateWasRequested","_callOnItemsRendered","memoizeOne","overscanStartIndex","overscanStopIndex","_callOnScroll","onScroll","_getItemStyle","_this$props","itemSize","layout","itemStyleCache","hasOwnProperty","_offset","isHorizontal","isRtl","offsetHorizontal","position","left","right","top","_","__","___","_onScrollHorizontal","event","_event$currentTarget","currentTarget","scrollWidth","setState","prevState","_resetIsScrollingDebounced","_onScrollVertical","_event$currentTarget2","clientHeight","scrollHeight","scrollTop","_outerRefSetter","outerRef","current","_resetIsScrolling","getDerivedStateFromProps","nextProps","validateSharedProps$1","_proto","scrollTo","scrollToItem","align","_this$props2","scrollbarSize","componentDidMount","_this$props3","_callPropsCallbacks","componentDidUpdate","_this$props4","_this$state","componentWillUnmount","render","_this$props5","className","innerRef","innerElementType","innerTagName","itemData","_this$props5$itemKey","itemKey","outerElementType","outerTagName","useIsScrolling","_this$_getRangeToRend","_getRangeToRender","items","estimatedTotalSize","_extends","WebkitOverflowScrolling","willChange","pointerEvents","_this$_getRangeToRend2","_overscanStartIndex","_overscanStopIndex","_visibleStartIndex","_visibleStopIndex","_this$state2","_scrollDirection","_scrollOffset","_scrollUpdateWasRequested","_this$props6","overscanCount","_this$state3","overscanBackward","overscanForward","defaultProps","_ref3","FixedSizeList","_ref4","instanceProps","lastItemOffset","maxOffset","minOffset","middleOffset","round","ceil","floor","_ref5","offset","_ref6","numVisibleItems","_ref7"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/577.4e2f491e.chunk.js b/web-app/build/static/js/577.4e2f491e.chunk.js deleted file mode 100644 index 0a035de0f38..00000000000 --- a/web-app/build/static/js/577.4e2f491e.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[577],{1577:(e,t,n)=>{n.r(t),n.d(t,{default:()=>ae});var a=n(5043),r=n(3097),i=n.n(r),s=n(9923),l=n(9456),o=n(3216),c=n(3029),d=n(6537),u=n(4493),m=n(2961),p=n(4574),x=n(969),g=n(788),h=n(1938),y=n(579);const f=p.Ay.div((()=>({"& .configSectionItem":{marginRight:15,marginBottom:15},"& .containerItem":{marginRight:15},"& .responsiveSectionItem":{"&.doubleElement":{display:"flex","& div":{flexGrow:1}},"@media (max-width: 900px)":{flexFlow:"column",alignItems:"flex-start","& div > div":{marginBottom:5,marginRight:0}}},"& .wrapperContainer":{display:"flex",alignItems:"center"},"& .envVarRow":{display:"flex",alignItems:"center",justifyContent:"flex-start","&:last-child":{borderBottom:0},"@media (max-width: 900px)":{flex:1,"& div label":{minWidth:50}}},"& .fileItem":{marginRight:10,display:"flex","& div label":{minWidth:50},"@media (max-width: 900px)":{flexFlow:"column"}},"& .rowActions":{display:"flex",justifyContent:"flex-end","@media (max-width: 900px)":{flex:1}},"& .overlayAction":{marginLeft:10,marginBottom:15}}))),v=()=>{const e=(0,m.jL)(),t=(0,l.d4)((e=>e.createTenant.fields.configure.exposeMinIO)),n=(0,l.d4)((e=>e.createTenant.fields.configure.exposeConsole)),r=(0,l.d4)((e=>e.createTenant.fields.configure.exposeSFTP)),i=(0,l.d4)((e=>e.createTenant.fields.configure.setDomains)),o=(0,l.d4)((e=>e.createTenant.fields.configure.consoleDomain)),c=(0,l.d4)((e=>e.createTenant.fields.configure.minioDomains)),d=(0,l.d4)((e=>e.createTenant.fields.configure.tenantCustom)),p=(0,l.d4)((e=>e.createTenant.fields.configure.envVars)),v=(0,l.d4)((e=>e.createTenant.fields.configure.tenantSecurityContext)),j=(0,l.d4)((e=>e.createTenant.fields.configure.customRuntime)),C=(0,l.d4)((e=>e.createTenant.fields.configure.runtimeClassName)),[_,b]=(0,a.useState)({}),S=(0,a.useCallback)(((t,n)=>{e((0,u.rJ)({pageName:"configure",field:t,value:n}))}),[e]);(0,a.useEffect)((()=>{let t=[];if(d&&(t=[{fieldKey:"tenant_securityContext_runAsUser",required:!0,value:v.runAsUser,customValidation:""===v.runAsUser||parseInt(v.runAsUser)<0,customValidationMessage:"runAsUser must be present and be 0 or more"},{fieldKey:"tenant_securityContext_runAsGroup",required:!0,value:v.runAsGroup,customValidation:""===v.runAsGroup||parseInt(v.runAsGroup)<0,customValidationMessage:"runAsGroup must be present and be 0 or more"},{fieldKey:"tenant_securityContext_fsGroup",required:!0,value:v.fsGroup,customValidation:""===v.fsGroup||parseInt(v.fsGroup)<0,customValidationMessage:"fsGroup must be present and be 0 or more"}]),i){const e=c.map(((e,t)=>({fieldKey:"minio-domain-".concat(t.toString()),required:!1,value:e,pattern:/^(https?):\/\/([a-zA-Z0-9\-.]+)(:[0-9]+)?$/,customPatternMessage:"MinIO domain is not in the form of http|https://subdomain.domain"})));t=[...t,...e,{fieldKey:"console_domain",required:!1,value:o,pattern:/^(https?):\/\/([a-zA-Z0-9\-.]+)(:[0-9]+)?(\/[a-zA-Z0-9\-./]*)?$/,customPatternMessage:"Console domain is not in the form of http|https://subdomain.domain:port/subpath1/subpath2"}]}const n=(0,g.D)(t);e((0,u.qK)({pageName:"configure",valid:0===Object.keys(n).length})),b(n)}),[e,d,v,i,o,c]);const A=e=>{b((0,x.p)(_,e))};return(0,y.jsx)(f,{children:(0,y.jsxs)(s.Hbc,{withBorders:!1,containerPadding:!1,children:[(0,y.jsxs)(s.azJ,{className:"inputItem",children:[(0,y.jsx)(h.A,{children:"Configure"}),(0,y.jsx)("span",{className:"muted",children:"Basic configurations for tenant management"})]}),(0,y.jsxs)(s.azJ,{className:"inputItem",children:[(0,y.jsx)("h4",{style:{margin:"10px 0px 0px"},children:"Services"}),(0,y.jsx)("span",{className:"muted",children:"Whether the tenant's services should request an external IP via LoadBalancer service type."})]}),(0,y.jsx)(s.dOG,{value:"expose_minio",id:"expose_minio",name:"expose_minio",checked:t,onChange:e=>{const t=e.target.checked;S("exposeMinIO",t)},label:"Expose MinIO Service"}),(0,y.jsx)(s.dOG,{value:"expose_console",id:"expose_console",name:"expose_console",checked:n,onChange:e=>{const t=e.target.checked;S("exposeConsole",t)},label:"Expose Console Service"}),(0,y.jsx)(s.dOG,{value:"expose_sftp",id:"expose_sftp",name:"expose_sftp",checked:r,onChange:e=>{const t=e.target.checked;S("exposeSFTP",t)},label:"Expose SFTP Service"}),(0,y.jsx)(s.dOG,{value:"custom_domains",id:"custom_domains",name:"custom_domains",checked:i,onChange:e=>{const t=e.target.checked;S("setDomains",t)},label:"Set Custom Domains"}),i&&(0,y.jsx)(s.xA9,{item:!0,xs:12,className:"inputItem",children:(0,y.jsxs)("fieldset",{children:[(0,y.jsx)("legend",{children:"Custom Domains for MinIO"}),(0,y.jsxs)(s.xA9,{item:!0,xs:12,className:"configSectionItem",children:[(0,y.jsx)(s.azJ,{className:"inputItem",children:(0,y.jsx)(s.cl_,{id:"console_domain",name:"console_domain",onChange:e=>{S("consoleDomain",e.target.value),A("tenant_securityContext_runAsUser")},label:"Console Domain",value:o,placeholder:"Eg. http://subdomain.domain:port/subpath1/subpath2",error:_.console_domain||""})}),(0,y.jsxs)(s.azJ,{children:[(0,y.jsx)("h4",{children:"MinIO Domains"}),(0,y.jsx)(s.azJ,{className:"responsiveSectionItem",children:c.map(((t,n)=>(0,y.jsxs)(s.azJ,{className:"containerItem wrapperContainer",children:[(0,y.jsx)(s.cl_,{id:"minio-domain-".concat(n.toString()),name:"minio-domain-".concat(n.toString()),onChange:e=>{((e,t)=>{const n=[...c];n[t]=e,S("minioDomains",n)})(e.target.value,n)},label:"MinIO Domain ".concat(n+1),value:t,placeholder:"Eg. http://subdomain.domain",error:_["minio-domain-".concat(n.toString())]||""}),(0,y.jsx)(s.azJ,{className:"overlayAction",children:(0,y.jsx)(s.K0,{size:"small",onClick:()=>e((0,u.ib)()),disabled:n!==c.length-1,children:(0,y.jsx)(s.REV,{})})}),(0,y.jsx)(s.azJ,{className:"overlayAction",children:(0,y.jsx)(s.K0,{size:"small",onClick:()=>e((0,u.hh)(n)),disabled:c.length<=1,children:(0,y.jsx)(s.YPx,{})})})]},"minio-domain-key-".concat(n.toString()))))})]})]})]})}),(0,y.jsx)(s.dOG,{value:"tenantConfig",id:"tenant_configuration",name:"tenant_configuration",checked:d,onChange:e=>{const t=e.target.checked;S("tenantCustom",t)},label:"Security Context"}),d&&(0,y.jsx)(s.xA9,{item:!0,xs:12,className:"inputItem",children:(0,y.jsxs)("fieldset",{children:[(0,y.jsx)("legend",{children:"Security Context for MinIO"}),(0,y.jsx)(s.xA9,{item:!0,xs:12,className:"configSectionItem",children:(0,y.jsxs)(s.azJ,{className:"responsiveSectionItem doubleElement",children:[(0,y.jsx)(s.azJ,{className:"containerItem",children:(0,y.jsx)(s.cl_,{type:"number",id:"tenant_securityContext_runAsUser",name:"tenant_securityContext_runAsUser",onChange:e=>{S("tenantSecurityContext",{...v,runAsUser:e.target.value}),A("tenant_securityContext_runAsUser")},label:"Run As User",value:v.runAsUser,required:!0,error:_.tenant_securityContext_runAsUser||"",min:"0"})}),(0,y.jsx)(s.azJ,{className:"containerItem",children:(0,y.jsx)(s.cl_,{type:"number",id:"tenant_securityContext_runAsGroup",name:"tenant_securityContext_runAsGroup",onChange:e=>{S("tenantSecurityContext",{...v,runAsGroup:e.target.value}),A("tenant_securityContext_runAsGroup")},label:"Run As Group",value:v.runAsGroup,required:!0,error:_.tenant_securityContext_runAsGroup||"",min:"0"})})]})}),(0,y.jsx)("br",{}),(0,y.jsx)(s.xA9,{item:!0,xs:12,className:"configSectionItem",children:(0,y.jsxs)(s.azJ,{className:"responsiveSectionItem doubleElement",children:[(0,y.jsx)(s.azJ,{className:"containerItem",children:(0,y.jsx)(s.cl_,{type:"number",id:"tenant_securityContext_fsGroup",name:"tenant_securityContext_fsGroup",onChange:e=>{S("tenantSecurityContext",{...v,fsGroup:e.target.value}),A("tenant_securityContext_fsGroup")},label:"FsGroup",value:v.fsGroup,required:!0,error:_.tenant_securityContext_fsGroup||"",min:"0"})}),(0,y.jsx)(s.azJ,{className:"containerItem",children:(0,y.jsx)(s.l6P,{label:"FsGroupChangePolicy",id:"securityContext_fsGroupChangePolicy",name:"securityContext_fsGroupChangePolicy",value:v.fsGroupChangePolicy,onChange:e=>{S("tenantSecurityContext",{...v,fsGroupChangePolicy:e})},options:[{label:"Always",value:"Always"},{label:"OnRootMismatch",value:"OnRootMismatch"}]})})]})}),(0,y.jsx)("br",{}),(0,y.jsx)(s.xA9,{item:!0,xs:12,className:"configSectionItem",children:(0,y.jsx)(s.dOG,{value:"tenantSecurityContextRunAsNonRoot",id:"tenant_securityContext_runAsNonRoot",name:"tenant_securityContext_runAsNonRoot",checked:v.runAsNonRoot,onChange:e=>{const t=e.target.checked;S("tenantSecurityContext",{...v,runAsNonRoot:t})},label:"Do not run as Root"})})]})}),(0,y.jsx)(s.dOG,{value:"customRuntime",id:"tenant_custom_runtime",name:"tenant_custom_runtime",checked:j,onChange:e=>{const t=e.target.checked;S("customRuntime",t)},label:"Custom Runtime Configurations"}),j&&(0,y.jsx)(s.xA9,{item:!0,xs:12,className:"inputItem",children:(0,y.jsxs)("fieldset",{children:[(0,y.jsx)("legend",{children:"Custom Runtime Configurations"}),(0,y.jsx)(s.cl_,{id:"tenant_runtime_runtimeClassName",name:"tenant_runtime_runtimeClassName",onChange:e=>{S("runtimeClassName",e.target.value),A("tenant_runtime_runtimeClassName")},label:"Runtime Class Name",value:C,error:_.tenant_runtime_runtimeClassName||""})]})}),(0,y.jsx)("hr",{}),(0,y.jsxs)(s.azJ,{className:"inputItem",children:[(0,y.jsx)(h.A,{children:"Additional Environment Variables"}),(0,y.jsx)("span",{className:"muted",children:"Define additional environment variables to be used by your MinIO pods"})]}),(0,y.jsx)(s.xA9,{container:!0,children:p.map(((t,n)=>(0,y.jsxs)(s.xA9,{item:!0,xs:12,className:"formFieldRow envVarRow",children:[(0,y.jsx)(s.xA9,{item:!0,xs:5,className:"fileItem",children:(0,y.jsx)(s.cl_,{id:"env_var_key",name:"env_var_key",label:"Key",value:t.key,onChange:t=>{const a=[...p];e((0,u.kb)(a.map(((e,a)=>a===n?{key:t.target.value,value:e.value}:e))))},index:n},"env_var_key_".concat(n.toString()))}),(0,y.jsx)(s.xA9,{item:!0,xs:5,className:"fileItem",children:(0,y.jsx)(s.cl_,{id:"env_var_value",name:"env_var_value",label:"Value",value:t.value,onChange:t=>{const a=[...p];e((0,u.kb)(a.map(((e,a)=>a===n?{key:e.key,value:t.target.value}:e))))},index:n},"env_var_value_".concat(n.toString()))}),(0,y.jsxs)(s.xA9,{item:!0,xs:2,className:"rowActions",children:[(0,y.jsx)(s.azJ,{className:"overlayAction",children:(0,y.jsx)(s.K0,{size:"small",onClick:()=>{const t=[...p];t.push({key:"",value:""}),e((0,u.kb)(t))},disabled:n!==p.length-1,children:(0,y.jsx)(s.REV,{})})}),(0,y.jsx)(s.azJ,{className:"overlayAction",children:(0,y.jsx)(s.K0,{size:"small",onClick:()=>{const t=p.filter(((e,t)=>t!==n));e((0,u.kb)(t))},disabled:p.length<=1,children:(0,y.jsx)(s.YPx,{})})})]})]},"tenant-envVar-".concat(n.toString()))))})]})})},j=()=>{const e=(0,m.jL)(),t=(0,l.d4)((e=>e.createTenant.fields.identityProvider.idpSelection)),n=(0,l.d4)((e=>e.createTenant.fields.identityProvider.ADURL)),r=(0,l.d4)((e=>e.createTenant.fields.identityProvider.ADSkipTLS)),i=(0,l.d4)((e=>e.createTenant.fields.identityProvider.ADServerInsecure)),o=(0,l.d4)((e=>e.createTenant.fields.identityProvider.ADGroupSearchBaseDN)),c=(0,l.d4)((e=>e.createTenant.fields.identityProvider.ADGroupSearchFilter)),d=(0,l.d4)((e=>e.createTenant.fields.identityProvider.ADUserDNs)),p=(0,l.d4)((e=>e.createTenant.fields.identityProvider.ADGroupDNs)),h=(0,l.d4)((e=>e.createTenant.fields.identityProvider.ADLookupBindDN)),f=(0,l.d4)((e=>e.createTenant.fields.identityProvider.ADLookupBindPassword)),v=(0,l.d4)((e=>e.createTenant.fields.identityProvider.ADUserDNSearchBaseDN)),j=(0,l.d4)((e=>e.createTenant.fields.identityProvider.ADUserDNSearchFilter)),C=(0,l.d4)((e=>e.createTenant.fields.identityProvider.ADServerStartTLS)),[_,b]=(0,a.useState)({}),S=(0,a.useCallback)(((t,n)=>{e((0,u.rJ)({pageName:"identityProvider",field:t,value:n}))}),[e]),A=e=>{b((0,x.p)(_,e))};return(0,a.useEffect)((()=>{let a=[];"AD"===t&&(a=[...a,{fieldKey:"AD_URL",required:!0,value:n},{fieldKey:"ad_lookupBindDN",required:!0,value:h}]);const r=(0,g.D)(a);e((0,u.qK)({pageName:"identityProvider",valid:0===Object.keys(r).length})),b(r)}),[h,t,n,o,c,d,p,e]),(0,y.jsxs)(s.Hbc,{withBorders:!1,containerPadding:!1,sx:{"& .adUserDnRows":{display:"flex"},"& .buttonTray":{display:"flex",gap:10,alignItems:"center",marginLeft:10,marginBottom:10}},children:[(0,y.jsx)(s.cl_,{id:"AD_URL",name:"AD_URL",onChange:e=>{S("ADURL",e.target.value),A("AD_URL")},label:"LDAP Server Address",value:n,placeholder:"ldap-server:636",error:_.AD_URL||"",required:!0}),(0,y.jsx)(s.dOG,{value:"ad_skipTLS",id:"ad_skipTLS",name:"ad_skipTLS",checked:r,onChange:e=>{const t=e.target.checked;S("ADSkipTLS",t)},label:"Skip TLS Verification"}),(0,y.jsx)(s.dOG,{value:"ad_serverInsecure",id:"ad_serverInsecure",name:"ad_serverInsecure",checked:i,onChange:e=>{const t=e.target.checked;S("ADServerInsecure",t)},label:"Server Insecure"}),i?(0,y.jsxs)(s.azJ,{className:"inputItem",children:[(0,y.jsx)("span",{className:"error",children:"Warning: All traffic with Active Directory will be unencrypted"}),(0,y.jsx)("br",{})]}):null,(0,y.jsx)(s.dOG,{value:"ad_serverStartTLS",id:"ad_serverStartTLS",name:"ad_serverStartTLS",checked:C,onChange:e=>{const t=e.target.checked;S("ADServerStartTLS",t)},label:"Start TLS connection to AD/LDAP server"}),(0,y.jsx)(s.cl_,{id:"ad_lookupBindDN",name:"ad_lookupBindDN",onChange:e=>{S("ADLookupBindDN",e.target.value),A("ad_lookupBindDN")},label:"Lookup Bind DN",value:h,placeholder:"cn=admin,dc=min,dc=io",error:_.ad_lookupBindDN||"",required:!0}),(0,y.jsx)(s.cl_,{id:"ad_lookupBindPassword",name:"ad_lookupBindPassword",onChange:e=>{S("ADLookupBindPassword",e.target.value)},label:"Lookup Bind Password",value:f,placeholder:"admin"}),(0,y.jsx)(s.cl_,{id:"ad_userDNSearchBaseDN",name:"ad_userDNSearchBaseDN",onChange:e=>{S("ADUserDNSearchBaseDN",e.target.value)},label:"User DN Search Base DN",value:v,placeholder:"dc=min,dc=io"}),(0,y.jsx)(s.cl_,{id:"ad_userDNSearchFilter",name:"ad_userDNSearchFilter",onChange:e=>{S("ADUserDNSearchFilter",e.target.value)},label:"User DN Search Filter",value:j,placeholder:"(sAMAcountName=%s)"}),(0,y.jsx)(s.cl_,{id:"ad_groupSearchBaseDN",name:"ad_groupSearchBaseDN",onChange:e=>{S("ADGroupSearchBaseDN",e.target.value)},label:"Group Search Base DN",value:o,placeholder:"ou=hwengg,dc=min,dc=io;ou=swengg,dc=min,dc=io"}),(0,y.jsx)(s.cl_,{id:"ad_groupSearchFilter",name:"ad_groupSearchFilter",onChange:e=>{S("ADGroupSearchFilter",e.target.value)},label:"Group Search Filter",value:c,placeholder:"(&(objectclass=groupOfNames)(member=%s))"}),(0,y.jsxs)("fieldset",{className:"inputItem",style:{marginTop:10},children:[(0,y.jsx)("legend",{children:"List of user DNs (Distinguished Names) to be Tenant Administrators"}),d.map(((t,n)=>(0,y.jsx)(a.Fragment,{children:(0,y.jsxs)(s.azJ,{className:"adUserDnRows",children:[(0,y.jsx)(s.cl_,{id:"ad-userdn-".concat(n.toString()),label:"",placeholder:"",name:"ad-userdn-".concat(n.toString()),value:d[n],onChange:t=>{e((0,u.UQ)({index:n,userDN:t.target.value})),A("ad-userdn-".concat(n.toString()))},index:n,error:_["ad-userdn-".concat(n.toString())]||""},"csv-ad-userdn-".concat(n.toString())),(0,y.jsxs)(s.azJ,{className:"buttonTray",children:[(0,y.jsx)(s.m_M,{tooltip:"Add User","aria-label":"add",children:(0,y.jsx)(s.K0,{size:"small",onClick:()=>{e((0,u.lJ)())},children:(0,y.jsx)(s.REV,{})})}),(0,y.jsx)(s.m_M,{tooltip:"Remove","aria-label":"add",children:(0,y.jsx)(s.K0,{size:"small",onClick:()=>{d.length>1&&e((0,u.Wi)(n))},children:(0,y.jsx)(s.YPx,{})})})]})]})},"identityField-".concat(n.toString()))))]}),(0,y.jsxs)("fieldset",{className:"inputItem",children:[(0,y.jsx)("legend",{children:"List of group DNs (Distinguished Names) to be Tenant Administrators"}),p.map(((t,n)=>(0,y.jsx)(a.Fragment,{children:(0,y.jsxs)(s.azJ,{className:"adUserDnRows",children:[(0,y.jsx)(s.cl_,{id:"ad-groupdn-".concat(n.toString()),label:"",placeholder:"",name:"ad-groupdn-".concat(n.toString()),value:p[n],onChange:t=>{e((0,u.lW)({index:n,userDN:t.target.value})),A("ad-groupdn-".concat(n.toString()))},index:n,error:_["ad-groupdn-".concat(n.toString())]||""},"csv-ad-groupdn-".concat(n.toString())),(0,y.jsxs)(s.azJ,{className:"buttonTray",children:[(0,y.jsx)(s.m_M,{tooltip:"Add Group","aria-label":"add",children:(0,y.jsx)(s.K0,{size:"small",onClick:()=>{e((0,u.Eh)())},children:(0,y.jsx)(s.REV,{})})}),(0,y.jsx)(s.m_M,{tooltip:"Remove","aria-label":"add",children:(0,y.jsx)(s.K0,{size:"small",onClick:()=>{p.length>1&&e((0,u.Vj)(n))},children:(0,y.jsx)(s.YPx,{})})})]})]})},"identityField-".concat(n.toString()))))]})]})},C=()=>{const e=(0,m.jL)(),t=(0,l.d4)((e=>e.createTenant.fields.identityProvider.idpSelection)),n=(0,l.d4)((e=>e.createTenant.fields.identityProvider.openIDConfigurationURL)),r=(0,l.d4)((e=>e.createTenant.fields.identityProvider.openIDClientID)),i=(0,l.d4)((e=>e.createTenant.fields.identityProvider.openIDSecretID)),o=(0,l.d4)((e=>e.createTenant.fields.identityProvider.openIDClaimName)),c=(0,l.d4)((e=>e.createTenant.fields.identityProvider.openIDScopes)),[d,p]=(0,a.useState)({}),h=(0,a.useCallback)(((t,n)=>{e((0,u.rJ)({pageName:"identityProvider",field:t,value:n}))}),[e]),f=e=>{p((0,x.p)(d,e))};return(0,a.useEffect)((()=>{let a=[];"OpenID"===t&&(a=[...a,{fieldKey:"openID_CONFIGURATION_URL",required:!0,value:n},{fieldKey:"openID_clientID",required:!0,value:r},{fieldKey:"openID_secretID",required:!0,value:i},{fieldKey:"openID_claimName",required:!1,value:o}]);const s=(0,g.D)(a);e((0,u.qK)({pageName:"identityProvider",valid:0===Object.keys(s).length})),p(s)}),[t,r,i,n,o,e]),(0,y.jsxs)(s.Hbc,{withBorders:!1,containerPadding:!1,children:[(0,y.jsx)(s.cl_,{id:"openID_CONFIGURATION_URL",name:"openID_CONFIGURATION_URL",onChange:e=>{h("openIDConfigurationURL",e.target.value),f("openID_CONFIGURATION_URL")},label:"Configuration URL",value:n,placeholder:"https://your-identity-provider.com/.well-known/openid-configuration",error:d.openID_CONFIGURATION_URL||"",required:!0}),(0,y.jsx)(s.cl_,{id:"openID_clientID",name:"openID_clientID",onChange:e=>{h("openIDClientID",e.target.value),f("openID_clientID")},label:"Client ID",value:r,error:d.openID_clientID||"",required:!0}),(0,y.jsx)(s.cl_,{id:"openID_secretID",name:"openID_secretID",onChange:e=>{h("openIDSecretID",e.target.value),f("openID_secretID")},label:"Secret ID",value:i,error:d.openID_secretID||"",required:!0}),(0,y.jsx)(s.cl_,{id:"openID_claimName",name:"openID_claimName",onChange:e=>{h("openIDClaimName",e.target.value),f("openID_claimName")},label:"Claim Name",value:o,placeholder:"policy",error:d.openID_claimName||""}),(0,y.jsx)(s.cl_,{id:"openID_scopes",name:"openID_scopes",onChange:e=>{h("openIDScopes",e.target.value),f("openID_scopes")},label:"Scopes",value:c})]})},_=()=>{const e=(0,m.jL)(),t=(0,l.d4)((e=>e.createTenant.fields.identityProvider.idpSelection)),n=(0,l.d4)((e=>e.createTenant.fields.identityProvider.accessKeys)),r=(0,l.d4)((e=>e.createTenant.fields.identityProvider.secretKeys)),[i,o]=(0,a.useState)({}),c=e=>{o((0,x.p)(i,e))};return(0,a.useEffect)((()=>{let a=[];if("Built-in"===t){a=[...a];for(var i=0;i(0,y.jsx)(a.Fragment,{children:(0,y.jsxs)(s.azJ,{sx:{gridTemplateColumns:"auto auto 50px 50px",display:"grid",gap:10,marginBottom:10},children:[(0,y.jsx)(s.cl_,{id:"accesskey-".concat(l.toString()),label:"",placeholder:"Access Key",name:"accesskey-".concat(l.toString()),value:n[l],onChange:t=>{e((0,u.p$)({index:l,accessKey:t.target.value})),c("accesskey-".concat(l.toString()))},index:l,error:i["accesskey-".concat(l.toString())]||""},"csv-accesskey-".concat(l.toString())),(0,y.jsx)(s.cl_,{id:"secretkey-".concat(l.toString()),label:"",placeholder:"Secret Key",name:"secretkey-".concat(l.toString()),value:r[l],onChange:t=>{e((0,u.cZ)({index:l,secretKey:t.target.value})),c("secretkey-".concat(l.toString()))},index:l,error:i["secretkey-".concat(l.toString())]||""},"csv-secretkey-".concat(l.toString())),(0,y.jsxs)(s.azJ,{sx:{display:"flex",alignItems:"center",gap:10,height:38},children:[(0,y.jsx)(s.K0,{size:"small",onClick:()=>{e((0,u.KJ)())},disabled:l!==n.length-1,children:(0,y.jsx)(s.REV,{})}),(0,y.jsx)(s.K0,{size:"small",onClick:()=>{e((0,u.Yq)(l))},disabled:n.length<=1,children:(0,y.jsx)(s.YPx,{})}),(0,y.jsx)(s.m_M,{tooltip:"Randomize Credentials","aria-label":"add",children:(0,y.jsx)(s.K0,{onClick:()=>{e((0,u.p$)({index:l,accessKey:(0,x.$)(16)})),e((0,u.cZ)({index:l,secretKey:(0,x.$)(16)}))},size:"small",children:(0,y.jsx)(s.Rru,{})})})]})]})},"identityField-".concat(l.toString()))))]})},b=()=>{const e=(0,m.jL)(),t=(0,l.d4)((e=>e.createTenant.fields.identityProvider.idpSelection));return(0,y.jsxs)(s.Hbc,{withBorders:!1,containerPadding:!1,children:[(0,y.jsxs)(s.azJ,{className:"inputItem",children:[(0,y.jsx)(h.A,{children:"Identity Provider"}),(0,y.jsx)("span",{className:"muted",children:"Access to the tenant can be controlled via an external Identity Manager."})]}),(0,y.jsx)(s.xA9,{item:!0,xs:12,sx:{padding:10},children:(0,y.jsx)(s.z6M,{currentValue:t,id:"idp-options",name:"idp-options",label:"Protocol",onChange:t=>{e((0,u.YY)(t.target.value))},selectorOptions:[{label:"Built-in",value:"Built-in",icon:(0,y.jsx)(s.c2u,{})},{label:"Open ID",value:"OpenID",icon:(0,y.jsx)(s.Z4D,{})},{label:"LDAP / Active Directory",value:"AD",icon:(0,y.jsx)(s.Tp8,{})}]})}),"Built-in"===t&&(0,y.jsx)(_,{}),"OpenID"===t&&(0,y.jsx)(C,{}),"AD"===t&&(0,y.jsx)(j,{})]})};var S=n(3084);const A=p.Ay.div((e=>{let{theme:t}=e;return{display:"flex",alignItems:"center",justifyContent:"flex-start",padding:8,borderBottom:"1px solid ".concat(i()(t,"borderColor","#E2E2E2")),"& .fileItem":{display:"flex","& .inputItem:not(:last-of-type)":{marginBottom:0},["@media (max-width: ".concat(s.nmC.md,"px)")]:{flexFlow:"column","& .inputItem:not(:last-of-type)":{marginBottom:10}}},"& .rowActions":{display:"flex",justifyContent:"flex-end",alignItems:"center",gap:10,"@media (max-width: 900px)":{flex:1}}}})),k=()=>{const e=(0,m.jL)(),t=(0,l.d4)((e=>e.createTenant.fields.security.enableTLS)),n=(0,l.d4)((e=>e.createTenant.fields.security.enableAutoCert)),r=(0,l.d4)((e=>e.createTenant.fields.security.enableCustomCerts)),i=(0,l.d4)((e=>e.createTenant.certificates.minioServerCertificates)),o=(0,l.d4)((e=>e.createTenant.certificates.minioClientCertificates)),c=(0,l.d4)((e=>e.createTenant.certificates.minioCAsCertificates)),d=(0,a.useCallback)(((t,n)=>{e((0,u.rJ)({pageName:"security",field:t,value:n}))}),[e]);return(0,a.useEffect)((()=>{e(t?n||r?(0,u.qK)({pageName:"security",valid:!0}):(0,u.qK)({pageName:"security",valid:!1}):(0,u.qK)({pageName:"security",valid:!0}))}),[t,n,r,e]),(0,y.jsxs)(s.Hbc,{withBorders:!1,containerPadding:!1,children:[(0,y.jsx)(s.azJ,{className:"inputItem",children:(0,y.jsx)(h.A,{children:"Security"})}),(0,y.jsx)(s.dOG,{value:"enableTLS",id:"enableTLS",name:"enableTLS",checked:t,onChange:e=>{const t=e.target.checked;d("enableTLS",t)},label:"TLS",description:"Securing all the traffic using TLS. This is required for Encryption Configuration"}),t&&(0,y.jsxs)(a.Fragment,{children:[(0,y.jsx)(s.dOG,{value:"enableAutoCert",id:"enableAutoCert",name:"enableAutoCert",checked:n,onChange:e=>{const t=e.target.checked;d("enableAutoCert",t)},label:"AutoCert",description:"The internode certificates will be generated and managed by MinIO Operator"}),(0,y.jsx)(s.dOG,{value:"enableCustomCerts",id:"enableCustomCerts",name:"enableCustomCerts",checked:r,onChange:e=>{const t=e.target.checked;d("enableCustomCerts",t)},label:"Custom Certificates",description:"Certificates used to terminated TLS at MinIO"}),r&&(0,y.jsxs)(a.Fragment,{children:[!n&&(0,y.jsx)(S.A,{}),(0,y.jsxs)("fieldset",{className:"inputItem",children:[(0,y.jsx)("legend",{children:"MinIO Server Certificates"}),i.map(((t,n)=>(0,y.jsxs)(A,{children:[(0,y.jsxs)(s.xA9,{item:!0,xs:10,className:"fileItem",children:[(0,y.jsx)(s.SxS,{onChange:(n,a,r)=>{r&&e((0,u.Ay)({id:t.id,key:"cert",fileName:a,value:r}))},accept:".cer,.crt,.cert,.pem",id:"tlsCert",name:"tlsCert",label:"Cert",value:t.cert,returnEncodedData:!0}),(0,y.jsx)(s.SxS,{onChange:(n,a,r)=>{r&&e((0,u.Ay)({id:t.id,key:"key",fileName:a,value:r}))},accept:".key,.pem",id:"tlsKey",name:"tlsKey",label:"Key",value:t.key,returnEncodedData:!0})]}),(0,y.jsxs)(s.xA9,{item:!0,xs:2,className:"rowActions",children:[(0,y.jsx)(s.K0,{size:"small",onClick:()=>{e((0,u.nI)())},disabled:n!==i.length-1,children:(0,y.jsx)(s.REV,{})}),(0,y.jsx)(s.K0,{size:"small",onClick:()=>{e((0,u.z9)(t.id))},disabled:i.length<=1,children:(0,y.jsx)(s.YPx,{})})]})]},"minio-certs-".concat(t.id))))]}),(0,y.jsxs)("fieldset",{className:"inputItem",children:[(0,y.jsx)("legend",{children:"MinIO Client Certificates"}),o.map(((t,n)=>(0,y.jsxs)(A,{children:[(0,y.jsxs)(s.xA9,{item:!0,xs:10,className:"fileItem",children:[(0,y.jsx)(s.SxS,{onChange:(n,a,r)=>{r&&e((0,u.ZJ)({id:t.id,key:"cert",fileName:a,value:r}))},accept:".cer,.crt,.cert,.pem",id:"tlsCert",name:"tlsCert",label:"Cert",value:t.cert,returnEncodedData:!0}),(0,y.jsx)(s.SxS,{onChange:(n,a,r)=>{r&&e((0,u.ZJ)({id:t.id,key:"key",fileName:a,value:r}))},accept:".key,.pem",id:"tlsKey",name:"tlsKey",label:"Key",value:t.key,returnEncodedData:!0})]}),(0,y.jsxs)(s.xA9,{item:!0,xs:2,className:"rowActions",children:[(0,y.jsx)(s.K0,{size:"small",onClick:()=>{e((0,u.Kx)())},disabled:n!==o.length-1,children:(0,y.jsx)(s.REV,{})}),(0,y.jsx)(s.K0,{size:"small",onClick:()=>{e((0,u.KK)(t.id))},disabled:o.length<=1,children:(0,y.jsx)(s.YPx,{})})]})]},"minio-certs-".concat(t.id))))]}),(0,y.jsxs)("fieldset",{className:"inputItem",children:[(0,y.jsx)("legend",{children:"MinIO CA Certificates"}),c.map(((t,n)=>(0,y.jsxs)(A,{children:[(0,y.jsx)(s.xA9,{item:!0,xs:6,className:"fileItem",children:(0,y.jsx)(s.SxS,{onChange:(n,a,r)=>{r&&e((0,u.HI)({id:t.id,key:"cert",fileName:a,value:r}))},accept:".cer,.crt,.cert,.pem",id:"tlsCert",name:"tlsCert",label:"Cert",value:t.cert,returnEncodedData:!0})}),(0,y.jsx)(s.xA9,{item:!0,xs:6,children:(0,y.jsxs)("div",{className:"rowActions",children:[(0,y.jsx)(s.K0,{size:"small",onClick:()=>{e((0,u.re)())},disabled:n!==c.length-1,children:(0,y.jsx)(s.REV,{})}),(0,y.jsx)(s.K0,{size:"small",onClick:()=>{e((0,u.xE)(t.id))},disabled:c.length<=1,children:(0,y.jsx)(s.YPx,{})})]})})]},"minio-CA-certs-".concat(t.id))))]})]})]})]})},T=()=>{const e=(0,m.jL)(),t=(0,l.d4)((e=>e.createTenant.fields.encryption.encryptionTab)),n=(0,l.d4)((e=>e.createTenant.fields.encryption.vaultEndpoint)),r=(0,l.d4)((e=>e.createTenant.fields.encryption.vaultEngine)),i=(0,l.d4)((e=>e.createTenant.fields.encryption.vaultNamespace)),o=(0,l.d4)((e=>e.createTenant.fields.encryption.vaultPrefix)),c=(0,l.d4)((e=>e.createTenant.fields.encryption.vaultAppRoleEngine)),d=(0,l.d4)((e=>e.createTenant.fields.encryption.vaultId)),p=(0,l.d4)((e=>e.createTenant.fields.encryption.vaultSecret)),h=(0,l.d4)((e=>e.createTenant.fields.encryption.vaultRetry)),f=(0,l.d4)((e=>e.createTenant.fields.encryption.vaultPing)),[v,j]=(0,a.useState)({});(0,a.useEffect)((()=>{let a=[];t||(a=[...a,{fieldKey:"vault_endpoint",required:!0,value:n},{fieldKey:"vault_id",required:!0,value:d},{fieldKey:"vault_secret",required:!0,value:p},{fieldKey:"vault_ping",required:!1,value:f,customValidation:parseInt(f)<0,customValidationMessage:"Value needs to be 0 or greater"},{fieldKey:"vault_retry",required:!1,value:h,customValidation:parseInt(h)<0,customValidationMessage:"Value needs to be 0 or greater"}]);const r=(0,g.D)(a);e((0,u.qK)({pageName:"encryption",valid:0===Object.keys(r).length})),j(r)}),[t,n,r,d,p,f,h,e]);const C=(0,a.useCallback)(((t,n)=>{e((0,u.rJ)({pageName:"encryption",field:t,value:n}))}),[e]),_=e=>{j((0,x.p)(v,e))};return(0,y.jsxs)(a.Fragment,{children:[(0,y.jsx)(s.cl_,{id:"vault_endpoint",name:"vault_endpoint",onChange:e=>{C("vaultEndpoint",e.target.value),_("vault_endpoint")},label:"Endpoint",tooltip:"Endpoint is the Hashicorp Vault endpoint",value:n,error:v.vault_endpoint||"",required:!0}),(0,y.jsx)(s.cl_,{id:"vault_engine",name:"vault_engine",onChange:e=>{C("vaultEngine",e.target.value),_("vault_engine")},label:"Engine",tooltip:"Engine is the Hashicorp Vault K/V engine path. If empty, defaults to 'kv'",value:r}),(0,y.jsx)(s.cl_,{id:"vault_namespace",name:"vault_namespace",onChange:e=>{C("vaultNamespace",e.target.value)},label:"Namespace",tooltip:"Namespace is an optional Hashicorp Vault namespace. An empty namespace means no particular namespace is used.",value:i}),(0,y.jsx)(s.cl_,{id:"vault_prefix",name:"vault_prefix",onChange:e=>{C("vaultPrefix",e.target.value)},label:"Prefix",tooltip:"Prefix is an optional prefix / directory within the K/V engine. If empty, keys will be stored at the K/V engine top level",value:o}),(0,y.jsxs)("fieldset",{className:"inputItem",children:[(0,y.jsx)("legend",{children:"App Role"}),(0,y.jsx)(s.cl_,{id:"vault_approle_engine",name:"vault_approle_engine",onChange:e=>{C("vaultAppRoleEngine",e.target.value)},label:"Engine",tooltip:"AppRoleEngine is the AppRole authentication engine path. If empty, defaults to 'approle'",value:c}),(0,y.jsx)(s.cl_,{id:"vault_id",name:"vault_id",onChange:e=>{C("vaultId",e.target.value),_("vault_id")},label:"AppRole ID",tooltip:"AppRoleSecret is the AppRole access secret for authenticating to Hashicorp Vault via the AppRole method",value:d,error:v.vault_id||"",required:!0}),(0,y.jsx)(s.cl_,{id:"vault_secret",name:"vault_secret",onChange:e=>{C("vaultSecret",e.target.value),_("vault_secret")},label:"AppRole Secret",tooltip:"AppRoleSecret is the AppRole access secret for authenticating to Hashicorp Vault via the AppRole method",value:p,error:v.vault_secret||"",required:!0}),(0,y.jsx)(s.cl_,{type:"number",min:"0",id:"vault_retry",name:"vault_retry",onChange:e=>{C("vaultRetry",e.target.value),_("vault_retry")},label:"Retry (Seconds)",value:h,error:v.vault_retry||""})]}),(0,y.jsxs)("fieldset",{className:"inputItem",children:[(0,y.jsx)("legend",{children:"Status"}),(0,y.jsx)(s.cl_,{type:"number",min:"0",id:"vault_ping",name:"vault_ping",onChange:e=>{C("vaultPing",e.target.value),_("vault_ping")},label:"Ping (Seconds)",value:f,error:v.vault_ping||""})]})]})},I=()=>{const e=(0,m.jL)(),t=(0,l.d4)((e=>e.createTenant.fields.encryption.encryptionTab)),n=(0,l.d4)((e=>e.createTenant.fields.encryption.azureEndpoint)),r=(0,l.d4)((e=>e.createTenant.fields.encryption.azureTenantID)),i=(0,l.d4)((e=>e.createTenant.fields.encryption.azureClientID)),o=(0,l.d4)((e=>e.createTenant.fields.encryption.azureClientSecret)),[c,d]=(0,a.useState)({});(0,a.useEffect)((()=>{let a=[];t||(a=[...a,{fieldKey:"azure_endpoint",required:!0,value:n},{fieldKey:"azure_tenant_id",required:!0,value:r},{fieldKey:"azure_client_id",required:!0,value:i},{fieldKey:"azure_client_secret",required:!0,value:o}]);const s=(0,g.D)(a);e((0,u.qK)({pageName:"encryption",valid:0===Object.keys(s).length})),d(s)}),[t,n,r,i,o,e]);const p=(0,a.useCallback)(((t,n)=>{e((0,u.rJ)({pageName:"encryption",field:t,value:n}))}),[e]),h=e=>{d((0,x.p)(c,e))};return(0,y.jsxs)(a.Fragment,{children:[(0,y.jsx)(s.cl_,{id:"azure_endpoint",name:"azure_endpoint",onChange:e=>{p("azureEndpoint",e.target.value),h("azure_endpoint")},label:"Endpoint",tooltip:"Endpoint is the Azure KeyVault endpoint",value:n,error:c.azure_endpoint||""}),(0,y.jsxs)("fieldset",{className:"inputItem",children:[(0,y.jsx)("legend",{children:"Credentials"}),(0,y.jsx)(s.cl_,{id:"azure_tenant_id",name:"azure_tenant_id",onChange:e=>{p("azureTenantID",e.target.value),h("azure_tenant_id")},label:"Tenant ID",tooltip:"TenantID is the ID of the Azure KeyVault tenant",value:r,error:c.azure_tenant_id||""}),(0,y.jsx)(s.cl_,{id:"azure_client_id",name:"azure_client_id",onChange:e=>{p("azureClientID",e.target.value),h("azure_client_id")},label:"Client ID",tooltip:"ClientID is the ID of the client accessing Azure KeyVault",value:i,error:c.azure_client_id||""}),(0,y.jsx)(s.cl_,{id:"azure_client_secret",name:"azure_client_secret",onChange:e=>{p("azureClientSecret",e.target.value),h("azure_client_secret")},label:"Client Secret",tooltip:"ClientSecret is the client secret accessing the Azure KeyVault",value:o,error:c.azure_client_secret||""})]})]})},N=()=>{const e=(0,m.jL)(),t=(0,l.d4)((e=>e.createTenant.fields.encryption.gcpProjectID)),n=(0,l.d4)((e=>e.createTenant.fields.encryption.gcpEndpoint)),r=(0,l.d4)((e=>e.createTenant.fields.encryption.gcpClientEmail)),i=(0,l.d4)((e=>e.createTenant.fields.encryption.gcpClientID)),o=(0,l.d4)((e=>e.createTenant.fields.encryption.gcpPrivateKeyID)),c=(0,l.d4)((e=>e.createTenant.fields.encryption.gcpPrivateKey)),d=(0,a.useCallback)(((t,n)=>{e((0,u.rJ)({pageName:"encryption",field:t,value:n}))}),[e]);return(0,y.jsxs)(a.Fragment,{children:[(0,y.jsx)(s.cl_,{id:"gcp_project_id",name:"gcp_project_id",onChange:e=>{d("gcpProjectID",e.target.value)},label:"Project ID",tooltip:"ProjectID is the GCP project ID.",value:t}),(0,y.jsx)(s.cl_,{id:"gcp_endpoint",name:"gcp_endpoint",onChange:e=>{d("gcpEndpoint",e.target.value)},label:"Endpoint",tooltip:"Endpoint is the GCP project ID. If empty defaults to: secretmanager.googleapis.com:443",value:n}),(0,y.jsxs)("fieldset",{className:"inputItem",children:[(0,y.jsx)("legend",{children:"Credentials"}),(0,y.jsx)(s.cl_,{id:"gcp_client_email",name:"gcp_client_email",onChange:e=>{d("gcpClientEmail",e.target.value)},label:"Client Email",tooltip:"Is the Client email of the GCP service account used to access the SecretManager",value:r}),(0,y.jsx)(s.cl_,{id:"gcp_client_id",name:"gcp_client_id",onChange:e=>{d("gcpClientID",e.target.value)},label:"Client ID",tooltip:"Is the Client ID of the GCP service account used to access the SecretManager",value:i}),(0,y.jsx)(s.cl_,{id:"gcp_private_key_id",name:"gcp_private_key_id",onChange:e=>{d("gcpPrivateKeyID",e.target.value)},label:"Private Key ID",tooltip:"Is the private key ID of the GCP service account used to access the SecretManager",value:o}),(0,y.jsx)(s.cl_,{id:"gcp_private_key",name:"gcp_private_key",onChange:e=>{d("gcpPrivateKey",e.target.value)},label:"Private Key",tooltip:"Is the private key of the GCP service account used to access the SecretManager",value:c})]})]})},D=()=>{const e=(0,m.jL)(),t=(0,l.d4)((e=>e.createTenant.fields.encryption.encryptionTab)),n=(0,l.d4)((e=>e.createTenant.fields.encryption.gemaltoEndpoint)),r=(0,l.d4)((e=>e.createTenant.fields.encryption.gemaltoToken)),i=(0,l.d4)((e=>e.createTenant.fields.encryption.gemaltoDomain)),o=(0,l.d4)((e=>e.createTenant.fields.encryption.gemaltoRetry)),[c,d]=(0,a.useState)({});(0,a.useEffect)((()=>{let a=[];t||(a=[...a,{fieldKey:"gemalto_endpoint",required:!0,value:n},{fieldKey:"gemalto_token",required:!0,value:r},{fieldKey:"gemalto_domain",required:!0,value:i},{fieldKey:"gemalto_retry",required:!1,value:o,customValidation:parseInt(o)<0,customValidationMessage:"Value needs to be 0 or greater"}]);const s=(0,g.D)(a);e((0,u.qK)({pageName:"encryption",valid:0===Object.keys(s).length})),d(s)}),[t,n,r,i,o,e]);const p=(0,a.useCallback)(((t,n)=>{e((0,u.rJ)({pageName:"encryption",field:t,value:n}))}),[e]),h=e=>{d((0,x.p)(c,e))};return(0,y.jsxs)(a.Fragment,{children:[(0,y.jsx)(s.cl_,{id:"gemalto_endpoint",name:"gemalto_endpoint",onChange:e=>{p("gemaltoEndpoint",e.target.value),h("gemalto_endpoint")},label:"Endpoint",tooltip:"Endpoint is the endpoint to the KeySecure server",value:n,error:c.gemalto_endpoint||"",required:!0}),(0,y.jsxs)("fieldset",{className:"inputItem",children:[(0,y.jsx)("legend",{children:"Credentials"}),(0,y.jsx)(s.cl_,{id:"gemalto_token",name:"gemalto_token",onChange:e=>{p("gemaltoToken",e.target.value),h("gemalto_token")},label:"Token",tooltip:"Token is the refresh authentication token to access the KeySecure server",value:r,error:c.gemalto_token||"",required:!0}),(0,y.jsx)(s.cl_,{id:"gemalto_domain",name:"gemalto_domain",onChange:e=>{p("gemaltoDomain",e.target.value),h("gemalto_domain")},label:"Domain",tooltip:"Domain is the isolated namespace within the KeySecure server. If empty, defaults to the top-level / root domain",value:i,error:c.gemalto_domain||"",required:!0}),(0,y.jsx)(s.cl_,{type:"number",min:"0",id:"gemalto_retry",name:"gemalto_retry",onChange:e=>{p("gemaltoRetry",e.target.value),h("gemalto_retry")},label:"Retry (seconds)",value:o,error:c.gemalto_retry||""})]})]})},K=()=>{const e=(0,m.jL)(),t=(0,l.d4)((e=>e.createTenant.fields.encryption.encryptionTab)),n=(0,l.d4)((e=>e.createTenant.fields.encryption.awsEndpoint)),r=(0,l.d4)((e=>e.createTenant.fields.encryption.awsRegion)),i=(0,l.d4)((e=>e.createTenant.fields.encryption.awsKMSKey)),o=(0,l.d4)((e=>e.createTenant.fields.encryption.awsAccessKey)),c=(0,l.d4)((e=>e.createTenant.fields.encryption.awsSecretKey)),d=(0,l.d4)((e=>e.createTenant.fields.encryption.awsToken)),[p,h]=(0,a.useState)({});(0,a.useEffect)((()=>{let a=[];t||(a=[...a,{fieldKey:"aws_endpoint",required:!0,value:n},{fieldKey:"aws_region",required:!0,value:r},{fieldKey:"aws_accessKey",required:!0,value:o},{fieldKey:"aws_secretKey",required:!0,value:c}]);const i=(0,g.D)(a);e((0,u.qK)({pageName:"encryption",valid:0===Object.keys(i).length})),h(i)}),[t,n,r,c,o,e]);const f=(0,a.useCallback)(((t,n)=>{e((0,u.rJ)({pageName:"encryption",field:t,value:n}))}),[e]),v=e=>{h((0,x.p)(p,e))};return(0,y.jsxs)(a.Fragment,{children:[(0,y.jsx)(s.cl_,{id:"aws_endpoint",name:"aws_endpoint",onChange:e=>{f("awsEndpoint",e.target.value),v("aws_endpoint")},label:"Endpoint",tooltip:"Endpoint is the AWS SecretsManager endpoint. AWS SecretsManager endpoints have the following schema: secrestmanager[-fips]..amanzonaws.com",value:n,error:p.aws_endpoint||"",required:!0}),(0,y.jsx)(s.cl_,{id:"aws_region",name:"aws_region",onChange:e=>{f("awsRegion",e.target.value),v("aws_region")},label:"Region",tooltip:"Region is the AWS region the SecretsManager is located",value:r,error:p.aws_region||"",required:!0}),(0,y.jsx)(s.cl_,{id:"aws_kmsKey",name:"aws_kmsKey",onChange:e=>{f("awsKMSKey",e.target.value)},label:"KMS Key",tooltip:"KMSKey is the AWS-KMS key ID (CMK-ID) used to en/decrypt secrets managed by the SecretsManager. If empty, the default AWS KMS key is used",value:i}),(0,y.jsxs)("fieldset",{className:"inputItem",children:[(0,y.jsx)("legend",{children:"Credentials"}),(0,y.jsx)(s.cl_,{id:"aws_accessKey",name:"aws_accessKey",onChange:e=>{f("awsAccessKey",e.target.value),v("aws_accessKey")},label:"Access Key",tooltip:"AccessKey is the access key for authenticating to AWS",value:o,error:p.aws_accessKey||"",required:!0}),(0,y.jsx)(s.cl_,{id:"aws_secretKey",name:"aws_secretKey",onChange:e=>{f("awsSecretKey",e.target.value),v("aws_secretKey")},label:"Secret Key",tooltip:"SecretKey is the secret key for authenticating to AWS",value:c,error:p.aws_secretKey||"",required:!0}),(0,y.jsx)(s.cl_,{id:"aws_token",name:"aws_token",tooltip:"SessionToken is an optional session token for authenticating to AWS when using STS",onChange:e=>{f("awsToken",e.target.value)},label:"Token",value:d})]})]})},w=()=>{const e=(0,m.jL)(),t=(0,l.d4)((e=>e.createTenant.fields.encryption.replicas)),n=(0,l.d4)((e=>e.createTenant.fields.encryption.rawConfiguration)),r=(0,l.d4)((e=>e.createTenant.fields.encryption.encryptionTab)),i=(0,l.d4)((e=>e.createTenant.fields.encryption.enableEncryption)),o=(0,l.d4)((e=>e.createTenant.fields.encryption.encryptionType)),c=(0,l.d4)((e=>e.createTenant.fields.encryption.gcpProjectID)),d=(0,l.d4)((e=>e.createTenant.fields.encryption.gcpEndpoint)),p=(0,l.d4)((e=>e.createTenant.fields.encryption.gcpClientEmail)),f=(0,l.d4)((e=>e.createTenant.fields.encryption.gcpClientID)),v=(0,l.d4)((e=>e.createTenant.fields.encryption.gcpPrivateKeyID)),j=(0,l.d4)((e=>e.createTenant.fields.encryption.gcpPrivateKey)),C=(0,l.d4)((e=>e.createTenant.fields.encryption.enableCustomCertsForKES)),_=(0,l.d4)((e=>e.createTenant.fields.security.enableAutoCert)),b=(0,l.d4)((e=>e.createTenant.fields.security.enableTLS)),S=(0,l.d4)((e=>e.createTenant.certificates.minioServerCertificates)),A=(0,l.d4)((e=>e.createTenant.certificates.kesServerCertificate)),k=(0,l.d4)((e=>e.createTenant.certificates.minioMTLSCertificate)),w=(0,l.d4)((e=>e.createTenant.certificates.kmsMTLSCertificate)),z=(0,l.d4)((e=>e.createTenant.certificates.kmsCA)),P=(0,l.d4)((e=>e.createTenant.fields.security.enableCustomCerts)),E=(0,l.d4)((e=>e.createTenant.fields.encryption.kesSecurityContext)),[R,G]=(0,a.useState)({});let q=!1;b&&(_||S&&S.filter((e=>e.encoded_key&&e.encoded_cert)).length>0)&&(q=!0);const O=(0,a.useCallback)(((t,n)=>{e((0,u.rJ)({pageName:"encryption",field:t,value:n}))}),[e]),L=e=>{G((0,x.p)(R,e))};return(0,a.useEffect)((()=>{let a=[];i&&(a=[{fieldKey:"rawConfiguration",required:"kms-raw-configuration"===r,value:n},{fieldKey:"replicas",required:!0,value:t,customValidation:parseInt(t)<1,customValidationMessage:"Replicas needs to be 1 or greater"},{fieldKey:"kes_securityContext_runAsUser",required:!0,value:E.runAsUser,customValidation:""===E.runAsUser||parseInt(E.runAsUser)<0,customValidationMessage:"runAsUser must be present and be 0 or more"},{fieldKey:"kes_securityContext_runAsGroup",required:!0,value:E.runAsGroup,customValidation:""===E.runAsGroup||parseInt(E.runAsGroup)<0,customValidationMessage:"runAsGroup must be present and be 0 or more"},{fieldKey:"kes_securityContext_fsGroup",required:!0,value:E.fsGroup,customValidation:""===E.fsGroup||parseInt(E.fsGroup)<0,customValidationMessage:"fsGroup must be present and be 0 or more"}],P&&(a=[...a,{fieldKey:"serverKey",required:!_,value:A.encoded_key},{fieldKey:"serverCert",required:!_,value:A.encoded_cert},{fieldKey:"clientKey",required:!_,value:k.encoded_key},{fieldKey:"clientCert",required:!_,value:k.encoded_cert}]));const s=(0,g.D)(a);e((0,u.qK)({pageName:"encryption",valid:0===Object.keys(s).length})),G(s)}),[n,r,i,o,c,d,p,f,v,j,e,_,P,A.encoded_key,A.encoded_cert,k.encoded_key,k.encoded_cert,E,t]),(0,y.jsxs)(s.Hbc,{withBorders:!1,containerPadding:!1,sx:{"& .tabs-container":{height:"inherit"},"& .rightSpacer":{marginRight:15},"& .responsiveContainer":{"@media (max-width: 900px)":{display:"flex",flexFlow:"column"}},"& .multiContainer":{display:"flex",alignItems:"center",justifyContent:"flex-start"}},children:[(0,y.jsxs)(s.azJ,{className:"inputItem",sx:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[(0,y.jsx)(h.A,{children:"Encryption"}),(0,y.jsx)(s.dOG,{label:"",indicatorLabels:["Enabled","Disabled"],checked:i,value:"tenant_encryption",id:"tenant-encryption",name:"tenant-encryption",onChange:e=>{const t=e.target.checked;O("enableEncryption",t)},description:"",disabled:!q})]}),(0,y.jsx)(s.azJ,{className:"muted inputItem",children:"MinIO Server-Side Encryption (SSE) protects objects as part of write operations, allowing clients to take advantage of server processing power to secure objects at the storage layer (encryption-at-rest). SSE also provides key functionality to regulatory and compliance requirements around secure locking and erasure."}),(0,y.jsx)("hr",{}),i&&(0,y.jsxs)(a.Fragment,{children:[(0,y.jsx)(s.tUM,{horizontal:!0,currentTabOrPath:r,onTabClick:e=>{O("encryptionTab",e)},sx:{height:"initial"},options:[{tabConfig:{label:"Options",id:"kms-options"},content:(0,y.jsxs)(a.Fragment,{children:[(0,y.jsx)(s.z6M,{currentValue:o,id:"encryptionType",name:"encryptionType",label:"KMS",onChange:e=>{O("encryptionType",e.target.value)},selectorOptions:[{label:"Vault",value:"vault"},{label:"AWS",value:"aws"},{label:"Gemalto",value:"gemalto"},{label:"GCP",value:"gcp"},{label:"Azure",value:"azure"}]}),"vault"===o&&(0,y.jsx)(T,{}),"azure"===o&&(0,y.jsx)(I,{}),"gcp"===o&&(0,y.jsx)(N,{}),"aws"===o&&(0,y.jsx)(K,{}),"gemalto"===o&&(0,y.jsx)(D,{})]})},{tabConfig:{label:"Raw Edit",id:"kms-raw-configuration"},content:(0,y.jsx)(a.Fragment,{children:(0,y.jsx)(s.xA9,{item:!0,xs:12,children:(0,y.jsx)(s.BYM,{value:n,mode:"yaml",onChange:e=>{O("rawConfiguration",e)},editorHeight:"550px"})})})}]}),(0,y.jsx)(s.kCK,{label:"Additional Configurations",sx:{margin:"0px 0px 10px"}}),(0,y.jsx)(s.dOG,{value:"enableCustomCertsForKES",id:"enableCustomCertsForKES",name:"enableCustomCertsForKES",checked:C||!_,onChange:e=>{const t=e.target.checked;O("enableCustomCertsForKES",t)},label:"Custom Certificates",disabled:!_}),(C||!_)&&(0,y.jsxs)(a.Fragment,{children:[(0,y.jsxs)("fieldset",{className:"inputItem",children:[(0,y.jsx)("legend",{children:"Encryption server certificates"}),(0,y.jsx)(s.SxS,{onChange:(t,n,a)=>{a&&(e((0,u.g8)({key:"key",fileName:n,value:a})),L("serverKey"))},accept:".key,.pem",id:"serverKey",name:"serverKey",label:"Key",error:R.serverKey||"",value:A.key,required:!_,returnEncodedData:!0}),(0,y.jsx)(s.SxS,{onChange:(t,n,a)=>{a&&(e((0,u.g8)({key:"cert",fileName:n,value:a})),L("serverCert"))},accept:".cer,.crt,.cert,.pem",id:"serverCert",name:"serverCert",label:"Cert",error:R.serverCert||"",value:A.cert,required:!_,returnEncodedData:!0})]}),(0,y.jsxs)("fieldset",{className:"inputItem",children:[(0,y.jsx)("legend",{children:"MinIO mTLS certificates (connection between MinIO and the Encryption server)"}),(0,y.jsx)(s.SxS,{onChange:(t,n,a)=>{a&&(e((0,u.oN)({key:"key",fileName:n,value:a})),L("clientKey"))},accept:".key,.pem",id:"clientKey",name:"clientKey",label:"Key",error:R.clientKey||"",value:k.key,required:!_,returnEncodedData:!0}),(0,y.jsx)(s.SxS,{onChange:(t,n,a)=>{a&&(e((0,u.oN)({key:"cert",fileName:n,value:a})),L("clientCert"))},accept:".cer,.crt,.cert,.pem",id:"clientCert",name:"clientCert",label:"Cert",error:R.clientCert||"",value:k.cert,required:!_,returnEncodedData:!0})]}),(0,y.jsxs)("fieldset",{className:"inputItem",children:[(0,y.jsx)("legend",{children:"KMS mTLS certificates (connection between the Encryption server and the KMS)"}),(0,y.jsx)(s.SxS,{onChange:(t,n,a)=>{a&&(e((0,u.vz)({key:"key",fileName:n,value:a})),L("vault_key"))},accept:".key,.pem",id:"vault_key",name:"vault_key",label:"Key",value:w.key,returnEncodedData:!0}),(0,y.jsx)(s.SxS,{onChange:(t,n,a)=>{a&&(e((0,u.vz)({key:"cert",fileName:n,value:a})),L("vault_cert"))},accept:".cer,.crt,.cert,.pem",id:"vault_cert",name:"vault_cert",label:"Cert",value:w.cert,returnEncodedData:!0}),(0,y.jsx)(s.SxS,{onChange:(t,n,a)=>{a&&(e((0,u.$U)({fileName:n,value:a})),L("vault_ca"))},accept:".cer,.crt,.cert,.pem",id:"vault_ca",name:"vault_ca",label:"CA",value:z.cert,returnEncodedData:!0})]})]}),(0,y.jsx)(s.cl_,{type:"number",min:"1",id:"replicas",name:"replicas",onChange:e=>{O("replicas",e.target.value),L("replicas")},label:"Replicas",value:t,required:!0,error:R.replicas||"",sx:{marginBottom:10}}),(0,y.jsxs)("fieldset",{className:"inputItem",children:[(0,y.jsx)("legend",{children:"SecurityContext for KES pods"}),(0,y.jsx)(s.xA9,{item:!0,xs:12,children:(0,y.jsxs)("div",{className:"multiContainer responsiveContainer",children:[(0,y.jsx)("div",{className:"rightSpacer",children:(0,y.jsx)(s.cl_,{type:"number",id:"kes_securityContext_runAsUser",name:"kes_securityContext_runAsUser",onChange:e=>{O("kesSecurityContext",{...E,runAsUser:e.target.value}),L("kes_securityContext_runAsUser")},label:"Run As User",value:E.runAsUser,required:!0,error:R.kes_securityContext_runAsUser||"",min:"0"})}),(0,y.jsx)("div",{className:"rightSpacer",children:(0,y.jsx)(s.cl_,{type:"number",id:"kes_securityContext_runAsGroup",name:"kes_securityContext_runAsGroup",onChange:e=>{O("kesSecurityContext",{...E,runAsGroup:e.target.value}),L("kes_securityContext_runAsGroup")},label:"Run As Group",value:E.runAsGroup,required:!0,error:R.kes_securityContext_runAsGroup||"",min:"0"})})]})}),(0,y.jsx)("br",{}),(0,y.jsx)(s.xA9,{item:!0,xs:12,children:(0,y.jsxs)("div",{className:"multiContainer responsiveContainer",children:[(0,y.jsx)("div",{className:"rightSpacer",children:(0,y.jsx)(s.cl_,{type:"number",id:"kes_securityContext_fsGroup",name:"kes_securityContext_fsGroup",onChange:e=>{O("kesSecurityContext",{...E,fsGroup:e.target.value}),L("kes_securityContext_fsGroup")},label:"FsGroup",value:E.fsGroup,required:!0,error:R.kes_securityContext_fsGroup||"",min:"0"})}),(0,y.jsx)("div",{className:"rightSpacer",children:(0,y.jsx)(s.l6P,{label:"FsGroupChangePolicy",id:"securityContext_fsGroupChangePolicy",name:"securityContext_fsGroupChangePolicy",value:E.fsGroupChangePolicy,onChange:e=>{O("kesSecurityContext",{...E,fsGroupChangePolicy:e})},options:[{label:"Always",value:"Always"},{label:"OnRootMismatch",value:"OnRootMismatch"}]})})]})}),(0,y.jsx)("br",{}),(0,y.jsx)(s.dOG,{value:"kesSecurityContextRunAsNonRoot",id:"kes_securityContext_runAsNonRoot",name:"kes_securityContext_runAsNonRoot",checked:E.runAsNonRoot,onChange:e=>{const t=e.target.checked;O("kesSecurityContext",{...E,runAsNonRoot:t})},label:"Do not run as Root"})]})]})]})};var z=n(4159),P=n(649),E=n(8997);const R=p.Ay.div((()=>({"& .overlayAction":{marginLeft:10,display:"flex",alignItems:"center"},"& .affinityConfigField":{display:"flex"},"& .affinityFieldLabel":{display:"flex",flexFlow:"column",flex:1},"& .affinityLabelKey":{"& div:first-child":{marginBottom:0}},"& .affinityLabelValue":{marginLeft:10,"& div:first-child":{marginBottom:0}},"& .rowActions":{display:"flex",alignItems:"center"},"& .affinityRow":{marginBottom:10,display:"flex"}}))),G=()=>{const e=(0,m.jL)(),t=(0,l.d4)((e=>e.createTenant.fields.affinity.podAffinity)),n=(0,l.d4)((e=>e.createTenant.fields.affinity.nodeSelectorLabels)),r=(0,l.d4)((e=>e.createTenant.fields.affinity.withPodAntiAffinity)),i=(0,l.d4)((e=>e.createTenant.nodeSelectorPairs)),o=(0,l.d4)((e=>e.createTenant.tolerations)),[c,d]=(0,a.useState)({}),[p,x]=(0,a.useState)(!0),[f,v]=(0,a.useState)({}),[j,C]=(0,a.useState)([]),_=(0,a.useCallback)(((t,n)=>{e((0,u.rJ)({pageName:"affinity",field:t,value:n}))}),[e]);(0,a.useEffect)((()=>{p&&P.A.invoke("GET","/api/v1/nodes/labels").then((e=>{x(!1),v(e);let t=[];for(let n in e)t.push({label:n,value:n});C(t)})).catch((t=>{x(!1),e((0,z.Dy)(t)),v({})}))}),[e,p]),(0,a.useEffect)((()=>{if(i){const e=i.filter((e=>""!==e.key)).map((e=>"".concat(e.key,"=").concat(e.value))).filter(((e,t,n)=>n.indexOf(e)===t)).join("&");_("nodeSelectorLabels",e)}}),[i,_]),(0,a.useEffect)((()=>{let a=[];if("nodeSelector"===t){let e=!0;const t=n.split("&");1===t.length&&""===t[0]&&(e=!1),t.forEach(((n,a)=>{const r=n.split("=");2!==r.length&&(e=!1),a+1!==t.length&&(""!==r[0]&&""!==r[1]||(e=!1))})),a=[...a,{fieldKey:"labels",required:!0,value:n,customValidation:!e,customValidationMessage:"You need to add at least one label key-pair"}]}const r=(0,g.D)(a);e((0,u.qK)({pageName:"affinity",valid:0===Object.keys(r).length})),d(r)}),[e,t,n]);const b=(t,n,a)=>{const r={...o[t],[n]:a};e((0,u.Um)({index:t,tolerationValue:r}))};return(0,y.jsx)(R,{children:(0,y.jsxs)(s.Hbc,{withBorders:!1,containerPadding:!1,children:[(0,y.jsxs)(s.azJ,{className:"inputItem",children:[(0,y.jsx)(h.A,{children:"Pod Placement"}),(0,y.jsx)("span",{className:"muted",children:"Configure how pods will be assigned to nodes"})]}),(0,y.jsx)(s.azJ,{children:(0,y.jsx)(s.l1Y,{children:"Type"})}),(0,y.jsx)(s.azJ,{className:"muted inputItem",children:"MinIO supports multiple configurations for Pod Affinity"}),(0,y.jsx)(s.z6M,{currentValue:t,id:"affinity-options",name:"affinity-options",label:" ",onChange:e=>{_("podAffinity",e.target.value)},selectorOptions:[{label:"None",value:"none"},{label:"Default (Pod Anti-Affinity)",value:"default"},{label:"Node Selector",value:"nodeSelector"}],displayInColumn:!0}),"nodeSelector"===t&&(0,y.jsxs)(a.Fragment,{children:[(0,y.jsx)(s.dOG,{value:"with_pod_anti_affinity",id:"with_pod_anti_affinity",name:"with_pod_anti_affinity",checked:r,onChange:e=>{const t=e.target.checked;_("withPodAntiAffinity",t)},label:"With Pod Anti-Affinity"}),(0,y.jsxs)(s.azJ,{className:"inputBox",children:[(0,y.jsx)("h3",{children:"Labels"}),(0,y.jsx)("span",{className:"error",children:c.labels}),(0,y.jsx)(s.xA9,{container:!0,children:i&&i.map(((t,n)=>(0,y.jsxs)(s.xA9,{item:!0,xs:12,className:"affinityRow",children:[(0,y.jsxs)(s.xA9,{item:!0,xs:5,className:"affinityLabelKey",children:[j.length>0&&(0,y.jsx)(s.l6P,{onChange:t=>{const a={key:t,value:f[t][0]},r=[...i];r[n]=a,e((0,u.EZ)(r))},id:"select-access-policy",name:"select-access-policy",label:"",value:t.key,options:j}),0===j.length&&(0,y.jsx)(s.cl_,{id:"nodeselector-key-".concat(n.toString()),label:"",name:"nodeselector-".concat(n.toString()),value:t.key,onChange:t=>{const a=[...i];a[n]={key:a[n].key,value:t.target.value},e((0,u.EZ)(a))},index:n,placeholder:"Key"})]}),(0,y.jsxs)(s.xA9,{item:!0,xs:5,className:"affinityLabelValue",children:[j.length>0&&(0,y.jsx)(s.l6P,{onChange:t=>{const a=[...i];a[n]={key:a[n].key,value:t},e((0,u.EZ)(a))},id:"select-access-policy",name:"select-access-policy",label:"",value:t.value,options:f[t.key]?f[t.key].map((e=>({label:e,value:e}))):[]}),0===j.length&&(0,y.jsx)(s.cl_,{id:"nodeselector-value-".concat(n.toString()),label:"",name:"nodeselector-".concat(n.toString()),value:t.value,onChange:t=>{const a=[...i];a[n]={key:a[n].key,value:t.target.value},e((0,u.EZ)(a))},index:n,placeholder:"value"})]}),(0,y.jsxs)(s.xA9,{item:!0,xs:2,className:"rowActions",children:[(0,y.jsx)(s.azJ,{className:"overlayAction",children:(0,y.jsx)(s.K0,{size:"small",onClick:()=>{const t=[...i];j.length>0?t.push({key:j[0].value,value:f[j[0].value][0]}):t.push({key:"",value:""}),e((0,u.EZ)(t))},disabled:n!==i.length-1,children:(0,y.jsx)(s.REV,{})})}),(0,y.jsx)(s.azJ,{className:"overlayAction",children:(0,y.jsx)(s.K0,{size:"small",onClick:()=>{const t=i.filter(((e,t)=>t!==n));e((0,u.EZ)(t))},disabled:i.length<=1,children:(0,y.jsx)(s.YPx,{})})})]})]},"affinity-keyVal-".concat(n.toString()))))})]})]}),(0,y.jsx)(s.xA9,{item:!0,xs:12,className:"affinityConfigField",children:(0,y.jsxs)(s.xA9,{item:!0,className:"affinityFieldLabel",children:[(0,y.jsx)("h3",{children:"Tolerations"}),(0,y.jsx)("span",{className:"error",children:c.tolerations}),(0,y.jsx)(s.xA9,{container:!0,children:o&&o.map(((t,n)=>{var a;return(0,y.jsxs)(s.xA9,{item:!0,xs:12,className:"affinityRow",children:[(0,y.jsx)(E.A,{effect:t.effect,onEffectChange:e=>{b(n,"effect",e)},tolerationKey:t.key,onTolerationKeyChange:e=>{b(n,"key",e)},operator:t.operator,onOperatorChange:e=>{b(n,"operator",e)},value:t.value,onValueChange:e=>{b(n,"value",e)},tolerationSeconds:(null===(a=t.tolerationSeconds)||void 0===a?void 0:a.seconds)||0,onSecondsChange:e=>{b(n,"tolerationSeconds",{seconds:e})},index:n}),(0,y.jsx)(s.azJ,{className:"overlayAction",children:(0,y.jsx)(s.K0,{size:"small",onClick:()=>{e((0,u.LI)())},disabled:n!==o.length-1,children:(0,y.jsx)(s.REV,{})})}),(0,y.jsx)(s.azJ,{className:"overlayAction",children:(0,y.jsx)(s.K0,{size:"small",onClick:()=>e((0,u.Ap)(n)),disabled:o.length<=1,children:(0,y.jsx)(s.YPx,{})})})]},"affinity-keyVal-".concat(n.toString()))}))})]})})]})})},q=()=>{const e=(0,m.jL)(),t=(0,l.d4)((e=>e.createTenant.fields.configure.customImage)),n=(0,l.d4)((e=>e.createTenant.fields.configure.imageName)),r=(0,l.d4)((e=>e.createTenant.fields.configure.customDockerhub)),i=(0,l.d4)((e=>e.createTenant.fields.configure.imageRegistry)),o=(0,l.d4)((e=>e.createTenant.fields.configure.imageRegistryUsername)),c=(0,l.d4)((e=>e.createTenant.fields.configure.imageRegistryPassword)),d=(0,l.d4)((e=>e.createTenant.fields.configure.tenantCustom)),p=(0,l.d4)((e=>e.createTenant.fields.configure.kesImage)),[f,v]=(0,a.useState)({}),j=(0,a.useCallback)(((t,n)=>{e((0,u.rJ)({pageName:"configure",field:t,value:n}))}),[e]);(0,a.useEffect)((()=>{let a=[];t&&(a=[...a,{fieldKey:"image",required:!1,value:n,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'minio/minio:VERSION'"},{fieldKey:"kesImage",required:!1,value:p,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'minio/kes:VERSION'"}],r&&(a=[...a,{fieldKey:"registry",required:!0,value:i},{fieldKey:"registryUsername",required:!0,value:o},{fieldKey:"registryPassword",required:!0,value:c}]));const s=(0,g.D)(a);e((0,u.qK)({pageName:"configure",valid:0===Object.keys(s).length})),v(s)}),[t,n,p,r,i,o,c,e,d]);const C=e=>{v((0,x.p)(f,e))};return(0,y.jsxs)(s.Hbc,{withBorders:!1,containerPadding:!1,children:[(0,y.jsxs)(s.azJ,{className:"inputItem",children:[(0,y.jsx)(h.A,{children:"Container Images"}),(0,y.jsx)("span",{className:"muted",children:"Specify the container images used by the Tenant and its features."})]}),(0,y.jsx)(s.cl_,{id:"image",name:"image",onChange:e=>{j("imageName",e.target.value),C("image")},label:"MinIO",value:n,error:f.image||"",placeholder:"minio/minio:RELEASE.2024-03-15T01-07-19Z"}),(0,y.jsx)(s.cl_,{id:"kesImage",name:"kesImage",onChange:e=>{j("kesImage",e.target.value),C("kesImage")},label:"KES",value:p,error:f.kesImage||"",placeholder:"minio/kes:2024-03-13T17-52-13Z"}),t&&(0,y.jsxs)(a.Fragment,{children:[(0,y.jsx)(s.azJ,{className:"inputItem",children:(0,y.jsx)("h4",{children:"Custom Container Registry"})}),(0,y.jsx)(s.dOG,{value:"custom_docker_hub",id:"custom_docker_hub",name:"custom_docker_hub",checked:r,onChange:e=>{const t=e.target.checked;j("customDockerhub",t)},label:"Use a private container registry"})]}),r&&(0,y.jsxs)(a.Fragment,{children:[(0,y.jsx)(s.cl_,{id:"registry",name:"registry",onChange:e=>{j("imageRegistry",e.target.value)},label:"Endpoint",value:i,error:f.registry||"",placeholder:"https://index.docker.io/v1/",required:!0}),(0,y.jsx)(s.cl_,{id:"registryUsername",name:"registryUsername",onChange:e=>{j("imageRegistryUsername",e.target.value)},label:"Username",value:o,error:f.registryUsername||"",required:!0}),(0,y.jsx)(s.cl_,{id:"registryPassword",name:"registryPassword",onChange:e=>{j("imageRegistryPassword",e.target.value)},label:"Password",value:c,error:f.registryPassword||"",required:!0})]})]})};var O=n(6483);const L=()=>{const e=(0,l.d4)((e=>e.createTenant.fields.tenantSize.nodes)),t=(0,l.d4)((e=>e.createTenant.fields.tenantSize.resourcesMemoryRequest)),n=(0,l.d4)((e=>e.createTenant.fields.tenantSize.ecParity)),r=(0,l.d4)((e=>e.createTenant.fields.tenantSize.distribution)),i=(0,l.d4)((e=>e.createTenant.fields.tenantSize.ecParityCalc)),o=(0,l.d4)((e=>e.createTenant.fields.tenantSize.resourcesCPURequest)),c=(0,l.d4)((e=>e.createTenant.fields.tenantSize.integrationSelection)),d=i.storageFactors.find((e=>e.erasureCode===n));return(0,y.jsxs)(s.azJ,{sx:{margin:4,"& table":{fontSize:13,"& td":{padding:8}}},children:[(0,y.jsx)(s.kCK,{label:"Resource Allocation",sx:{margin:4,padding:"5px 0"}}),(0,y.jsx)(s.XIK,{children:(0,y.jsxs)(s.BFY,{children:[(0,y.jsxs)(s.Hjg,{children:[(0,y.jsx)(s.nA6,{scope:"row",children:"Number of Servers"}),(0,y.jsx)(s.nA6,{sx:{textAlign:"right"},children:parseInt(e)>0?e:"-"})]}),""===c.typeSelection&&""===c.storageClass&&(0,y.jsxs)(a.Fragment,{children:[(0,y.jsxs)(s.Hjg,{children:[(0,y.jsx)(s.nA6,{scope:"row",children:"Drives per Server"}),(0,y.jsx)(s.nA6,{sx:{textAlign:"right"},children:r?r.disks:"-"})]}),(0,y.jsxs)(s.Hjg,{children:[(0,y.jsx)(s.nA6,{scope:"row",children:"Drive Capacity"}),(0,y.jsx)(s.nA6,{sx:{textAlign:"right"},children:r?(0,O.nO)(r.pvSize):"-"})]})]}),(0,y.jsxs)(s.Hjg,{children:[(0,y.jsx)(s.nA6,{scope:"row",children:"Total Volumes"}),(0,y.jsx)(s.nA6,{sx:{textAlign:"right"},children:r?r.persistentVolumes:"-"})]}),""===c.typeSelection&&""===c.storageClass&&(0,y.jsxs)(a.Fragment,{children:[(0,y.jsxs)(s.Hjg,{children:[(0,y.jsx)(s.nA6,{scope:"row",children:"Memory per Node"}),(0,y.jsxs)(s.nA6,{sx:{textAlign:"right"},children:[t," Gi"]})]}),(0,y.jsxs)(s.Hjg,{children:[(0,y.jsx)(s.nA6,{style:{borderBottom:0},scope:"row",children:"CPU Selection"}),(0,y.jsx)(s.nA6,{style:{borderBottom:0},sx:{textAlign:"right"},children:o})]})]})]})}),0===i.error&&d&&(0,y.jsxs)(a.Fragment,{children:[(0,y.jsx)(s.kCK,{label:"Erasure Code Configuration",sx:{margin:4,padding:"5px 0"}}),(0,y.jsx)(s.XIK,{children:(0,y.jsxs)(s.BFY,{children:[(0,y.jsxs)(s.Hjg,{children:[(0,y.jsx)(s.nA6,{scope:"row",children:"EC Parity"}),(0,y.jsx)(s.nA6,{sx:{textAlign:"right"},children:""!==n?n:"-"})]}),(0,y.jsxs)(s.Hjg,{children:[(0,y.jsx)(s.nA6,{scope:"row",children:"Raw Capacity"}),(0,y.jsx)(s.nA6,{sx:{textAlign:"right"},children:(0,O.nO)(i.rawCapacity)})]}),(0,y.jsxs)(s.Hjg,{children:[(0,y.jsx)(s.nA6,{scope:"row",children:"Usable Capacity"}),(0,y.jsx)(s.nA6,{sx:{textAlign:"right"},children:n===O.Fd?(0,O.nO)(i.rawCapacity):(0,O.nO)(d.maxCapacity)})]}),(0,y.jsxs)(s.Hjg,{children:[(0,y.jsx)(s.nA6,{style:{borderBottom:0},scope:"row",children:"Server Failures Tolerated"}),(0,y.jsx)(s.nA6,{style:{borderBottom:0},sx:{textAlign:"right"},children:n===O.Fd?0:r&&r.disks>0&&d.maxFailureTolerations?Math.floor(d.maxFailureTolerations/r.disks):"-"})]})]})})]}),""!==c.typeSelection&&""!==c.storageClass&&(0,y.jsxs)(a.Fragment,{children:[(0,y.jsx)(s.kCK,{label:"Single Instance Configuration",sx:{margin:4,padding:"5px 0"}}),(0,y.jsx)(s.XIK,{children:(0,y.jsxs)(s.BFY,{children:[(0,y.jsxs)(s.Hjg,{children:[(0,y.jsx)(s.nA6,{scope:"row",children:"CPU"}),(0,y.jsx)(s.nA6,{sx:{textAlign:"right"},children:0!==c.CPU?c.CPU:"-"})]}),(0,y.jsxs)(s.Hjg,{children:[(0,y.jsx)(s.nA6,{scope:"row",children:"Memory"}),(0,y.jsx)(s.nA6,{sx:{textAlign:"right"},children:0!==c.memory?"".concat(c.memory," Gi"):"-"})]}),(0,y.jsxs)(s.Hjg,{children:[(0,y.jsx)(s.nA6,{scope:"row",children:"Drives per Server"}),(0,y.jsx)(s.nA6,{sx:{textAlign:"right"},children:0!==c.drivesPerServer?"".concat(c.drivesPerServer):"-"})]}),(0,y.jsxs)(s.Hjg,{children:[(0,y.jsx)(s.nA6,{style:{borderBottom:0},scope:"row",children:"Drive Size"}),(0,y.jsxs)(s.nA6,{style:{borderBottom:0},sx:{textAlign:"right"},children:[c.driveSize.driveSize,c.driveSize.sizeUnit]})]})]})})]})]})};var M=n(3811),F=n(3950),U=n.n(F),B=n(5034),V=n(8661);const J=()=>{const e=(0,m.jL)(),t=(0,l.d4)((e=>e.createTenant.fields.nameTenant.namespace)),n=(0,l.d4)((e=>e.createTenant.addNSLoading)),r=(0,l.d4)((e=>e.createTenant.addNSOpen));return(0,y.jsx)(V.A,{title:"New namespace",confirmText:"Create",confirmButtonProps:{variant:"callAction"},isOpen:r,titleIcon:(0,y.jsx)(s.$rg,{}),isLoading:n,onConfirm:()=>{e((0,B.CC)())},onClose:()=>{e((0,u.e7)())},confirmationContent:(0,y.jsxs)(a.Fragment,{children:[n&&(0,y.jsx)(s.z21,{}),"Are you sure you want to add a namespace called",(0,y.jsx)("br",{}),(0,y.jsx)("b",{style:{maxWidth:"200px",whiteSpace:"normal",wordWrap:"break-word"},children:t}),"?"]})})},H=e=>{let{formToRender:t}=e;const n=(0,m.jL)(),r=(0,l.d4)((e=>e.createTenant.fields.nameTenant.namespace)),i=(0,l.d4)((e=>e.createTenant.showNSCreateButton)),o=(0,l.d4)((e=>e.createTenant.validationErrors.namespace)),c=(0,l.d4)((e=>e.createTenant.addNSOpen)),d=(0,a.useMemo)((()=>U()((()=>{n((0,B.kE)())}),500)),[n]);(0,a.useEffect)((()=>{if(""!==r)return d(),d.cancel}),[d,r]);return(0,y.jsxs)(a.Fragment,{children:[c&&(0,y.jsx)(J,{}),(0,y.jsx)(s.cl_,{id:"namespace",name:"namespace",onChange:e=>{n((0,u.KH)(e.target.value))},label:"Namespace",value:r,error:o||"",overlayIcon:i?(0,y.jsx)(s.REV,{}):null,overlayAction:()=>{n((0,u.uq)())},required:!0})]})},Y=()=>{const e=(0,m.jL)(),t=(0,l.d4)((e=>e.createTenant.fields.nameTenant.tenantName)),n=(0,l.d4)((e=>e.createTenant.validationErrors["tenant-name"]));return(0,y.jsx)(s.cl_,{id:"tenant-name",name:"tenant-name",onChange:t=>{e((0,u.s1)(t.target.value))},label:"Name",value:t,required:!0,error:n||""})},Z=e=>{let{formToRender:t}=e;const n=(0,m.jL)(),r=(0,l.d4)((e=>e.createTenant.fields.nameTenant.selectedStorageClass)),o=(0,l.d4)((e=>e.createTenant.fields.nameTenant.selectedStorageType)),p=(0,l.d4)((e=>e.createTenant.storageClasses)),x=(0,l.d4)(d.s$),g=(0,a.useCallback)(((e,t)=>{n((0,u.rJ)({pageName:"nameTenant",field:e,value:t}))}),[n]);return(0,a.useEffect)((()=>{const e=t===c.oD.default&&p.length>0||t!==c.oD.default&&""!==o;n((0,u.qK)({pageName:"nameTenant",valid:e}))}),[p,n,o,t]),(0,y.jsx)(a.Fragment,{children:(0,y.jsxs)(s.xA9,{container:!0,sx:{justifyContent:"space-between"},children:[(0,y.jsx)(s.xA9,{item:!0,sx:{width:"calc(100% - 320px)"},children:(0,y.jsx)(s.azJ,{sx:{minHeight:550},children:(0,y.jsxs)(s.Hbc,{withBorders:!1,containerPadding:!1,children:[(0,y.jsxs)(s.azJ,{className:"inputItem",children:[(0,y.jsx)(h.A,{children:"Name"}),(0,y.jsx)("span",{className:"muted",children:"How would you like to name this new tenant?"})]}),(0,y.jsx)(Y,{}),(0,y.jsx)(H,{formToRender:t}),t===c.oD.default?(0,y.jsx)(s.l6P,{id:"storage_class",name:"storage_class",onChange:e=>{g("selectedStorageClass",e)},label:"Storage Class",value:r,options:p,disabled:p.length<1}):(0,y.jsx)(s.l6P,{id:"storage_type",name:"storage_type",onChange:e=>{n((0,u.a0)({storageType:e,features:x}))},label:i()(c.m3,"".concat(t,".variantSelectorLabel"),"Storage Type"),value:o,options:i()(c.m3,"".concat(t,".variantSelectorValues"),[])}),t===c.oD.default?(0,y.jsx)(M.A,{}):i()(c.m3,"".concat(t,".sizingComponent"),null)]})})}),(0,y.jsx)(s.xA9,{item:!0,xs:"hidden",sm:"hidden",children:(0,y.jsx)(s.azJ,{sx:{marginLeft:10,padding:2,marginTop:20},withBorders:!0,useBackground:!0,children:(0,y.jsx)(L,{})})})]})})},W=()=>{const e=(0,l.d4)(d.s$),[t,n]=(0,a.useState)(null);return(0,a.useEffect)((()=>{let t=c.oD.default;if(e&&0!==e.length){Object.keys(c.h2).forEach((n=>{e.includes(n)&&(t=i()(c.h2,n,c.oD.default))}))}n(t)}),[e]),null===t?null:(0,y.jsx)(Z,{formToRender:t})},$=["nameTenant","tenantSize","configure","affinity","identityProvider","security","encryption"];var X=n(286);const Q=()=>{const e=(0,m.jL)(),t=(0,l.d4)((e=>e.createTenant.addingTenant)),n=(0,l.d4)((e=>e.createTenant.validPages)),a=(0,l.d4)((e=>e.createTenant.fields.nameTenant.selectedStorageClass)),r=!t&&""!==a&&$.every((e=>n.includes(e)));return(0,y.jsx)(s.$nd,{id:"wizard-button-Create",variant:"callAction",color:"primary",onClick:()=>{e((0,X.J)())},disabled:!r,label:"Create"},"button-AddTenant-Create")};var ee=n(8619);const te=()=>{const e=(0,m.jL)(),t=(0,o.Zp)(),n=(0,l.d4)((e=>e.createTenant.showNewCredentials)),r=(0,l.d4)((e=>e.createTenant.createdAccount));return(0,y.jsx)(a.Fragment,{children:n&&(0,y.jsx)(ee.default,{newServiceAccount:r,open:n,closeModal:()=>{e((0,u.vH)()),t("/tenants")},entity:"Tenant"})})};var ne=n(4770);const ae=()=>{const e=(0,m.jL)(),t=(0,o.Zp)(),n=(0,l.d4)(d.s$),r=(0,l.d4)((e=>e.createTenant.addingTenant)),[p,x]=(0,a.useState)(null);(0,a.useEffect)((()=>{let e=c.oD.default;if(n&&0!==n.length){Object.keys(c.h2).forEach((t=>{n.includes(t)&&(e=i()(c.h2,t,c.oD.default))}))}x(e)}),[n]);const g={label:"Cancel",type:"custom",enabled:!0,action:()=>{e((0,u.vH)()),t("/tenants")}},h={componentRender:(0,y.jsx)(Q,{},"create-tenant")},f=[{label:"Setup",componentRender:(0,y.jsx)(W,{}),buttons:[g,h]},{label:"Configure",advancedOnly:!0,componentRender:(0,y.jsx)(v,{}),buttons:[g,h]},{label:"Images",advancedOnly:!0,componentRender:(0,y.jsx)(q,{}),buttons:[g,h]},{label:"Pod Placement",advancedOnly:!0,componentRender:(0,y.jsx)(G,{}),buttons:[g,h]},{label:"Identity Provider",advancedOnly:!0,componentRender:(0,y.jsx)(b,{}),buttons:[g,h]},{label:"Security",advancedOnly:!0,componentRender:(0,y.jsx)(k,{}),buttons:[g,h]},{label:"Encryption",advancedOnly:!0,componentRender:(0,y.jsx)(w,{}),buttons:[g,h]}];return(0,y.jsxs)(a.Fragment,{children:[(0,y.jsx)(te,{}),(0,y.jsx)(ne.A,{label:(0,y.jsx)(s.EGL,{onClick:()=>{e((0,u.vH)()),t("/tenants")},label:"Tenants"})}),(0,y.jsxs)(s.Mxu,{variant:"constrained",children:[r&&(0,y.jsx)(s.xA9,{item:!0,xs:12,children:(0,y.jsx)(s.z21,{})}),(0,y.jsx)(s.azJ,{withBorders:!0,customBorderPadding:"0px",sx:{"& .muted":{fontSize:13}},children:(0,y.jsx)(s.sQ4,{wizardSteps:f,linearMode:!1})}),p===c.oD.aws&&(0,y.jsx)(s.xA9,{item:!0,xs:12,style:{marginTop:16},children:(0,y.jsx)(s.lVp,{title:"EBS Volume Configuration.",iconComponent:(0,y.jsx)(s.NBP,{}),help:(0,y.jsxs)(a.Fragment,{children:[(0,y.jsx)("b",{children:"Performance Optimized"}),": Uses the ",(0,y.jsx)("i",{children:"gp3"})," EBS storage class class configured at 1,000Mi/s throughput and 16,000 IOPS, however the minimum volume size for this type of EBS volume is ",(0,y.jsx)("b",{children:"32Gi"}),".",(0,y.jsx)("br",{}),(0,y.jsx)("br",{}),(0,y.jsx)("b",{children:"Storage Optimized"}),": Uses the ",(0,y.jsx)("i",{children:"sc1"})," EBS storage class, however the minimum volume size for this type of EBS volume is \xa0",(0,y.jsx)("b",{children:"16Ti"})," to unlock their maximum throughput speed of 250Mi/s."]})})})]})]})}},3084:(e,t,n)=>{n.d(t,{A:()=>o});n(5043);var a=n(9456),r=n(9923),i=n(3216),s=n(579);const l=e=>{let{icon:t,description:n}=e;return(0,s.jsxs)(r.azJ,{sx:{display:"flex","& .min-icon":{marginRight:"10px",height:"23px",width:"23px",marginBottom:"10px"}},children:[t," ",(0,s.jsx)(r.azJ,{className:"muted",sx:{fontSize:"14px",fontStyle:"italic"},children:n})]})},o=()=>{const e=(0,i.g)(),t=e.tenantName||"",n=e.tenantNamespace||"",o=(0,a.d4)((e=>""!==n?n:""!==e.createTenant.fields.nameTenant.namespace?e.createTenant.fields.nameTenant.namespace:"")),c=(0,a.d4)((e=>""!==t?t:""!==e.createTenant.fields.nameTenant.tenantName?e.createTenant.fields.nameTenant.tenantName:""));return(0,s.jsx)(r.azJ,{sx:{flex:1,border:"1px solid #eaeaea",borderRadius:"2px",display:"flex",flexFlow:"column",padding:"20px",["@media (max-width: ".concat(r.nmC.sm,"px)")]:{marginTop:0}},children:(0,s.jsxs)(r.azJ,{sx:{display:"flex",flexFlow:"column"},children:[(0,s.jsx)(l,{icon:(0,s.jsx)(r.j$V,{}),description:"TLS Certificates Warning"}),(0,s.jsxs)(r.azJ,{sx:{fontSize:"14px",marginBottom:"15px"},children:["Automatic certificate generation is not enabled.",(0,s.jsx)("br",{}),(0,s.jsx)("br",{}),"If you wish to continue only with ",(0,s.jsx)("b",{children:"custom certificates"})," make sure they are valid for the following internode hostnames, i.e.:",(0,s.jsx)("br",{}),(0,s.jsx)("br",{}),(0,s.jsxs)(r.azJ,{sx:{fontSize:"14px",fontStyle:"italic"},className:"muted",children:["minio.",o,(0,s.jsx)("br",{}),"minio.",o,".svc",(0,s.jsx)("br",{}),"minio.",o,".svc.",(0,s.jsx)("br",{}),"*.",c,"-hl.",o,".svc.",(0,s.jsx)("br",{}),"*.",o,".svc."]}),(0,s.jsx)("br",{}),"Replace ",(0,s.jsx)("em",{children:""}),","," ",(0,s.jsx)("em",{children:""})," and",(0,s.jsx)("em",{children:""})," with the actual values for your MinIO tenant.",(0,s.jsx)("br",{}),(0,s.jsx)("br",{}),"You can learn more at our"," ",(0,s.jsx)("a",{href:"https://min.io/docs/minio/kubernetes/upstream/operations/network-encryption.html?ref=op#id5",target:"_blank",rel:"noopener",children:"documentation"}),"."]})]})})}}}]); -//# sourceMappingURL=577.4e2f491e.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/577.4e2f491e.chunk.js.map b/web-app/build/static/js/577.4e2f491e.chunk.js.map deleted file mode 100644 index 793bfeb0fb6..00000000000 --- a/web-app/build/static/js/577.4e2f491e.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/577.4e2f491e.chunk.js","mappings":"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","sources":["screens/Console/Tenants/AddTenant/Steps/Configure.tsx","screens/Console/Tenants/AddTenant/Steps/IdentityProvider/IDPActiveDirectory.tsx","screens/Console/Tenants/AddTenant/Steps/IdentityProvider/IDPOpenID.tsx","screens/Console/Tenants/AddTenant/Steps/IdentityProvider/IDPBuiltIn.tsx","screens/Console/Tenants/AddTenant/Steps/IdentityProvider.tsx","screens/Console/Tenants/AddTenant/Steps/Security.tsx","screens/Console/Tenants/AddTenant/Steps/Encryption/VaultKMSAdd.tsx","screens/Console/Tenants/AddTenant/Steps/Encryption/AzureKMSAdd.tsx","screens/Console/Tenants/AddTenant/Steps/Encryption/GCPKMSAdd.tsx","screens/Console/Tenants/AddTenant/Steps/Encryption/GemaltoKMSAdd.tsx","screens/Console/Tenants/AddTenant/Steps/Encryption/AWSKMSAdd.tsx","screens/Console/Tenants/AddTenant/Steps/Encryption.tsx","screens/Console/Tenants/AddTenant/Steps/Affinity.tsx","screens/Console/Tenants/AddTenant/Steps/Images.tsx","screens/Console/Tenants/AddTenant/Steps/SizePreview.tsx","screens/Console/Tenants/AddTenant/Steps/helpers/AddNamespaceModal.tsx","screens/Console/Tenants/AddTenant/Steps/TenantResources/NamespaceSelector.tsx","screens/Console/Tenants/AddTenant/Steps/TenantResources/NameTenantMain.tsx","screens/Console/Tenants/AddTenant/Steps/TenantResources/TenantResources.tsx","screens/Console/Tenants/AddTenant/common.ts","screens/Console/Tenants/AddTenant/CreateTenantButton.tsx","screens/Console/Tenants/AddTenant/NewTenantCredentials.tsx","screens/Console/Tenants/AddTenant/AddTenant.tsx","screens/Console/Tenants/HelpBox/TLSHelpBox.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport {\n Box,\n FormLayout,\n Grid,\n IconButton,\n InputBox,\n RemoveIcon,\n Select,\n Switch,\n AddIcon,\n} from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport styled from \"styled-components\";\nimport { AppState, useAppDispatch } from \"../../../../../store\";\nimport { clearValidationError } from \"../../utils\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../utils/validationFunctions\";\nimport {\n addNewMinIODomain,\n isPageValid,\n removeMinIODomain,\n setEnvVars,\n updateAddField,\n} from \"../createTenantSlice\";\nimport H3Section from \"../../../Common/H3Section\";\n\nconst ConfigureMain = styled.div(() => ({\n \"& .configSectionItem\": {\n marginRight: 15,\n marginBottom: 15,\n },\n \"& .containerItem\": {\n marginRight: 15,\n },\n \"& .responsiveSectionItem\": {\n \"&.doubleElement\": {\n display: \"flex\",\n \"& div\": {\n flexGrow: 1,\n },\n },\n \"@media (max-width: 900px)\": {\n flexFlow: \"column\",\n alignItems: \"flex-start\",\n\n \"& div > div\": {\n marginBottom: 5,\n marginRight: 0,\n },\n },\n },\n \"& .wrapperContainer\": {\n display: \"flex\",\n alignItems: \"center\",\n },\n \"& .envVarRow\": {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n \"&:last-child\": {\n borderBottom: 0,\n },\n \"@media (max-width: 900px)\": {\n flex: 1,\n\n \"& div label\": {\n minWidth: 50,\n },\n },\n },\n \"& .fileItem\": {\n marginRight: 10,\n display: \"flex\",\n \"& div label\": {\n minWidth: 50,\n },\n\n \"@media (max-width: 900px)\": {\n flexFlow: \"column\",\n },\n },\n \"& .rowActions\": {\n display: \"flex\",\n justifyContent: \"flex-end\",\n \"@media (max-width: 900px)\": {\n flex: 1,\n },\n },\n \"& .overlayAction\": {\n marginLeft: 10,\n marginBottom: 15,\n },\n}));\n\nconst Configure = () => {\n const dispatch = useAppDispatch();\n\n const exposeMinIO = useSelector(\n (state: AppState) => state.createTenant.fields.configure.exposeMinIO,\n );\n const exposeConsole = useSelector(\n (state: AppState) => state.createTenant.fields.configure.exposeConsole,\n );\n const exposeSFTP = useSelector(\n (state: AppState) => state.createTenant.fields.configure.exposeSFTP,\n );\n const setDomains = useSelector(\n (state: AppState) => state.createTenant.fields.configure.setDomains,\n );\n const consoleDomain = useSelector(\n (state: AppState) => state.createTenant.fields.configure.consoleDomain,\n );\n const minioDomains = useSelector(\n (state: AppState) => state.createTenant.fields.configure.minioDomains,\n );\n const tenantCustom = useSelector(\n (state: AppState) => state.createTenant.fields.configure.tenantCustom,\n );\n const tenantEnvVars = useSelector(\n (state: AppState) => state.createTenant.fields.configure.envVars,\n );\n const tenantSecurityContext = useSelector(\n (state: AppState) =>\n state.createTenant.fields.configure.tenantSecurityContext,\n );\n const customRuntime = useSelector(\n (state: AppState) => state.createTenant.fields.configure.customRuntime,\n );\n const runtimeClassName = useSelector(\n (state: AppState) => state.createTenant.fields.configure.runtimeClassName,\n );\n\n const [validationErrors, setValidationErrors] = useState({});\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n updateAddField({ pageName: \"configure\", field: field, value: value }),\n );\n },\n [dispatch],\n );\n\n // Validation\n useEffect(() => {\n let customAccountValidation: IValidation[] = [];\n if (tenantCustom) {\n customAccountValidation = [\n {\n fieldKey: \"tenant_securityContext_runAsUser\",\n required: true,\n value: tenantSecurityContext.runAsUser,\n customValidation:\n tenantSecurityContext.runAsUser === \"\" ||\n parseInt(tenantSecurityContext.runAsUser) < 0,\n customValidationMessage: `runAsUser must be present and be 0 or more`,\n },\n {\n fieldKey: \"tenant_securityContext_runAsGroup\",\n required: true,\n value: tenantSecurityContext.runAsGroup,\n customValidation:\n tenantSecurityContext.runAsGroup === \"\" ||\n parseInt(tenantSecurityContext.runAsGroup) < 0,\n customValidationMessage: `runAsGroup must be present and be 0 or more`,\n },\n {\n fieldKey: \"tenant_securityContext_fsGroup\",\n required: true,\n value: tenantSecurityContext.fsGroup!,\n customValidation:\n tenantSecurityContext.fsGroup === \"\" ||\n parseInt(tenantSecurityContext.fsGroup!) < 0,\n customValidationMessage: `fsGroup must be present and be 0 or more`,\n },\n ];\n }\n\n if (setDomains) {\n const minioExtraValidations = minioDomains.map((validation, index) => {\n return {\n fieldKey: `minio-domain-${index.toString()}`,\n required: false,\n value: validation,\n pattern: /^(https?):\\/\\/([a-zA-Z0-9\\-.]+)(:[0-9]+)?$/,\n customPatternMessage:\n \"MinIO domain is not in the form of http|https://subdomain.domain\",\n };\n });\n\n customAccountValidation = [\n ...customAccountValidation,\n ...minioExtraValidations,\n {\n fieldKey: \"console_domain\",\n required: false,\n value: consoleDomain,\n pattern:\n /^(https?):\\/\\/([a-zA-Z0-9\\-.]+)(:[0-9]+)?(\\/[a-zA-Z0-9\\-./]*)?$/,\n customPatternMessage:\n \"Console domain is not in the form of http|https://subdomain.domain:port/subpath1/subpath2\",\n },\n ];\n }\n\n const commonVal = commonFormValidation(customAccountValidation);\n\n dispatch(\n isPageValid({\n pageName: \"configure\",\n valid: Object.keys(commonVal).length === 0,\n }),\n );\n\n setValidationErrors(commonVal);\n }, [\n dispatch,\n tenantCustom,\n tenantSecurityContext,\n setDomains,\n consoleDomain,\n minioDomains,\n ]);\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n const updateMinIODomain = (value: string, index: number) => {\n const copyDomains = [...minioDomains];\n copyDomains[index] = value;\n\n updateField(\"minioDomains\", copyDomains);\n };\n\n return (\n \n \n \n Configure\n \n Basic configurations for tenant management\n \n \n \n

Services

\n \n Whether the tenant's services should request an external IP via\n LoadBalancer service type.\n \n
\n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"exposeMinIO\", checked);\n }}\n label={\"Expose MinIO Service\"}\n />\n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"exposeConsole\", checked);\n }}\n label={\"Expose Console Service\"}\n />\n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"exposeSFTP\", checked);\n }}\n label={\"Expose SFTP Service\"}\n />\n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"setDomains\", checked);\n }}\n label={\"Set Custom Domains\"}\n />\n {setDomains && (\n \n
\n Custom Domains for MinIO\n \n \n ) => {\n updateField(\"consoleDomain\", e.target.value);\n cleanValidation(\"tenant_securityContext_runAsUser\");\n }}\n label=\"Console Domain\"\n value={consoleDomain}\n placeholder={\n \"Eg. http://subdomain.domain:port/subpath1/subpath2\"\n }\n error={validationErrors[\"console_domain\"] || \"\"}\n />\n \n \n

MinIO Domains

\n \n {minioDomains.map((domain, index) => {\n return (\n \n ,\n ) => {\n updateMinIODomain(e.target.value, index);\n }}\n label={`MinIO Domain ${index + 1}`}\n value={domain}\n placeholder={\"Eg. http://subdomain.domain\"}\n error={\n validationErrors[\n `minio-domain-${index.toString()}`\n ] || \"\"\n }\n />\n \n dispatch(addNewMinIODomain())}\n disabled={index !== minioDomains.length - 1}\n >\n \n \n \n\n \n dispatch(removeMinIODomain(index))}\n disabled={minioDomains.length <= 1}\n >\n \n \n \n \n );\n })}\n
\n \n
\n
\n
\n )}\n\n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"tenantCustom\", checked);\n }}\n label={\"Security Context\"}\n />\n {tenantCustom && (\n \n
\n Security Context for MinIO\n \n \n \n ) => {\n updateField(\"tenantSecurityContext\", {\n ...tenantSecurityContext,\n runAsUser: e.target.value,\n });\n cleanValidation(\"tenant_securityContext_runAsUser\");\n }}\n label=\"Run As User\"\n value={tenantSecurityContext.runAsUser}\n required\n error={\n validationErrors[\"tenant_securityContext_runAsUser\"] ||\n \"\"\n }\n min=\"0\"\n />\n \n \n ) => {\n updateField(\"tenantSecurityContext\", {\n ...tenantSecurityContext,\n runAsGroup: e.target.value,\n });\n cleanValidation(\"tenant_securityContext_runAsGroup\");\n }}\n label=\"Run As Group\"\n value={tenantSecurityContext.runAsGroup}\n required\n error={\n validationErrors[\"tenant_securityContext_runAsGroup\"] ||\n \"\"\n }\n min=\"0\"\n />\n \n \n \n
\n \n \n \n ) => {\n updateField(\"tenantSecurityContext\", {\n ...tenantSecurityContext,\n fsGroup: e.target.value,\n });\n cleanValidation(\"tenant_securityContext_fsGroup\");\n }}\n label=\"FsGroup\"\n value={tenantSecurityContext.fsGroup!}\n required\n error={\n validationErrors[\"tenant_securityContext_fsGroup\"] || \"\"\n }\n min=\"0\"\n />\n \n \n {\n updateField(\"tenantSecurityContext\", {\n ...tenantSecurityContext,\n fsGroupChangePolicy: value,\n });\n }}\n options={[\n {\n label: \"Always\",\n value: \"Always\",\n },\n {\n label: \"OnRootMismatch\",\n value: \"OnRootMismatch\",\n },\n ]}\n />\n \n \n \n
\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"tenantSecurityContext\", {\n ...tenantSecurityContext,\n runAsNonRoot: checked,\n });\n }}\n label={\"Do not run as Root\"}\n />\n \n
\n
\n )}\n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"customRuntime\", checked);\n }}\n label={\"Custom Runtime Configurations\"}\n />\n {customRuntime && (\n \n
\n Custom Runtime Configurations\n ) => {\n updateField(\"runtimeClassName\", e.target.value);\n cleanValidation(\"tenant_runtime_runtimeClassName\");\n }}\n label=\"Runtime Class Name\"\n value={runtimeClassName}\n error={\n validationErrors[\"tenant_runtime_runtimeClassName\"] || \"\"\n }\n />\n
\n
\n )}\n
\n\n \n Additional Environment Variables\n \n Define additional environment variables to be used by your MinIO\n pods\n \n \n \n {tenantEnvVars.map((envVar, index) => (\n \n \n ) => {\n const existingEnvVars = [...tenantEnvVars];\n dispatch(\n setEnvVars(\n existingEnvVars.map((keyPair, i) =>\n i === index\n ? { key: e.target.value, value: keyPair.value }\n : keyPair,\n ),\n ),\n );\n }}\n index={index}\n key={`env_var_key_${index.toString()}`}\n />\n \n \n ) => {\n const existingEnvVars = [...tenantEnvVars];\n dispatch(\n setEnvVars(\n existingEnvVars.map((keyPair, i) =>\n i === index\n ? { key: keyPair.key, value: e.target.value }\n : keyPair,\n ),\n ),\n );\n }}\n index={index}\n key={`env_var_value_${index.toString()}`}\n />\n \n \n \n {\n const existingEnvVars = [...tenantEnvVars];\n existingEnvVars.push({ key: \"\", value: \"\" });\n\n dispatch(setEnvVars(existingEnvVars));\n }}\n disabled={index !== tenantEnvVars.length - 1}\n >\n \n \n \n \n {\n const existingEnvVars = tenantEnvVars.filter(\n (item, fIndex) => fIndex !== index,\n );\n dispatch(setEnvVars(existingEnvVars));\n }}\n disabled={tenantEnvVars.length <= 1}\n >\n \n \n \n \n \n ))}\n \n
\n
\n );\n};\n\nexport default Configure;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport {\n IconButton,\n Tooltip,\n InputBox,\n Switch,\n FormLayout,\n Box,\n AddIcon,\n RemoveIcon,\n} from \"mds\";\nimport {\n addIDPADGroupAtIndex,\n addIDPADUsrAtIndex,\n isPageValid,\n removeIDPADGroupAtIndex,\n removeIDPADUsrAtIndex,\n setIDPADGroupAtIndex,\n setIDPADUsrAtIndex,\n updateAddField,\n} from \"../../createTenantSlice\";\nimport { useSelector } from \"react-redux\";\nimport { clearValidationError } from \"../../../utils\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../../utils/validationFunctions\";\n\nconst IDPActiveDirectory = () => {\n const dispatch = useAppDispatch();\n\n const idpSelection = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.idpSelection,\n );\n const ADURL = useSelector(\n (state: AppState) => state.createTenant.fields.identityProvider.ADURL,\n );\n const ADSkipTLS = useSelector(\n (state: AppState) => state.createTenant.fields.identityProvider.ADSkipTLS,\n );\n const ADServerInsecure = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.ADServerInsecure,\n );\n const ADGroupSearchBaseDN = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.ADGroupSearchBaseDN,\n );\n const ADGroupSearchFilter = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.ADGroupSearchFilter,\n );\n const ADUserDNs = useSelector(\n (state: AppState) => state.createTenant.fields.identityProvider.ADUserDNs,\n );\n const ADGroupDNs = useSelector(\n (state: AppState) => state.createTenant.fields.identityProvider.ADGroupDNs,\n );\n const ADLookupBindDN = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.ADLookupBindDN,\n );\n const ADLookupBindPassword = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.ADLookupBindPassword,\n );\n const ADUserDNSearchBaseDN = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.ADUserDNSearchBaseDN,\n );\n const ADUserDNSearchFilter = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.ADUserDNSearchFilter,\n );\n const ADServerStartTLS = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.ADServerStartTLS,\n );\n\n const [validationErrors, setValidationErrors] = useState({});\n\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n updateAddField({\n pageName: \"identityProvider\",\n field: field,\n value: value,\n }),\n );\n },\n [dispatch],\n );\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n // Validation\n useEffect(() => {\n let customIDPValidation: IValidation[] = [];\n\n if (idpSelection === \"AD\") {\n customIDPValidation = [\n ...customIDPValidation,\n {\n fieldKey: \"AD_URL\",\n required: true,\n value: ADURL,\n },\n {\n fieldKey: \"ad_lookupBindDN\",\n required: true,\n value: ADLookupBindDN,\n },\n ];\n }\n\n const commonVal = commonFormValidation(customIDPValidation);\n\n dispatch(\n isPageValid({\n pageName: \"identityProvider\",\n valid: Object.keys(commonVal).length === 0,\n }),\n );\n\n setValidationErrors(commonVal);\n }, [\n ADLookupBindDN,\n idpSelection,\n ADURL,\n ADGroupSearchBaseDN,\n ADGroupSearchFilter,\n ADUserDNs,\n ADGroupDNs,\n dispatch,\n ]);\n\n return (\n \n ) => {\n updateField(\"ADURL\", e.target.value);\n cleanValidation(\"AD_URL\");\n }}\n label=\"LDAP Server Address\"\n value={ADURL}\n placeholder=\"ldap-server:636\"\n error={validationErrors[\"AD_URL\"] || \"\"}\n required\n />\n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"ADSkipTLS\", checked);\n }}\n label={\"Skip TLS Verification\"}\n />\n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"ADServerInsecure\", checked);\n }}\n label={\"Server Insecure\"}\n />\n {ADServerInsecure ? (\n \n \n Warning: All traffic with Active Directory will be unencrypted\n \n
\n
\n ) : null}\n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"ADServerStartTLS\", checked);\n }}\n label={\"Start TLS connection to AD/LDAP server\"}\n />\n ) => {\n updateField(\"ADLookupBindDN\", e.target.value);\n cleanValidation(\"ad_lookupBindDN\");\n }}\n label=\"Lookup Bind DN\"\n value={ADLookupBindDN}\n placeholder=\"cn=admin,dc=min,dc=io\"\n error={validationErrors[\"ad_lookupBindDN\"] || \"\"}\n required\n />\n ) => {\n updateField(\"ADLookupBindPassword\", e.target.value);\n }}\n label=\"Lookup Bind Password\"\n value={ADLookupBindPassword}\n placeholder=\"admin\"\n />\n ) => {\n updateField(\"ADUserDNSearchBaseDN\", e.target.value);\n }}\n label=\"User DN Search Base DN\"\n value={ADUserDNSearchBaseDN}\n placeholder=\"dc=min,dc=io\"\n />\n ) => {\n updateField(\"ADUserDNSearchFilter\", e.target.value);\n }}\n label=\"User DN Search Filter\"\n value={ADUserDNSearchFilter}\n placeholder=\"(sAMAcountName=%s)\"\n />\n ) => {\n updateField(\"ADGroupSearchBaseDN\", e.target.value);\n }}\n label=\"Group Search Base DN\"\n value={ADGroupSearchBaseDN}\n placeholder=\"ou=hwengg,dc=min,dc=io;ou=swengg,dc=min,dc=io\"\n />\n ) => {\n updateField(\"ADGroupSearchFilter\", e.target.value);\n }}\n label=\"Group Search Filter\"\n value={ADGroupSearchFilter}\n placeholder=\"(&(objectclass=groupOfNames)(member=%s))\"\n />\n
\n \n List of user DNs (Distinguished Names) to be Tenant Administrators\n \n {ADUserDNs.map((_, index) => {\n return (\n \n \n ) => {\n dispatch(\n setIDPADUsrAtIndex({\n index: index,\n userDN: e.target.value,\n }),\n );\n cleanValidation(`ad-userdn-${index.toString()}`);\n }}\n index={index}\n key={`csv-ad-userdn-${index.toString()}`}\n error={\n validationErrors[`ad-userdn-${index.toString()}`] || \"\"\n }\n />\n \n \n {\n dispatch(addIDPADUsrAtIndex());\n }}\n >\n \n \n \n \n {\n if (ADUserDNs.length > 1) {\n dispatch(removeIDPADUsrAtIndex(index));\n }\n }}\n >\n \n \n \n \n \n \n );\n })}\n
\n
\n \n List of group DNs (Distinguished Names) to be Tenant Administrators\n \n {ADGroupDNs.map((_, index) => {\n return (\n \n \n ) => {\n dispatch(\n setIDPADGroupAtIndex({\n index: index,\n userDN: e.target.value,\n }),\n );\n cleanValidation(`ad-groupdn-${index.toString()}`);\n }}\n index={index}\n key={`csv-ad-groupdn-${index.toString()}`}\n error={\n validationErrors[`ad-groupdn-${index.toString()}`] || \"\"\n }\n />\n \n \n {\n dispatch(addIDPADGroupAtIndex());\n }}\n >\n \n \n \n \n {\n if (ADGroupDNs.length > 1) {\n dispatch(removeIDPADGroupAtIndex(index));\n }\n }}\n >\n \n \n \n \n \n \n );\n })}\n
\n \n );\n};\n\nexport default IDPActiveDirectory;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { FormLayout, InputBox } from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport { isPageValid, updateAddField } from \"../../createTenantSlice\";\nimport { clearValidationError } from \"../../../utils\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../../utils/validationFunctions\";\n\nconst IDPOpenID = () => {\n const dispatch = useAppDispatch();\n\n const idpSelection = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.idpSelection,\n );\n const openIDConfigurationURL = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.openIDConfigurationURL,\n );\n const openIDClientID = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.openIDClientID,\n );\n const openIDSecretID = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.openIDSecretID,\n );\n const openIDClaimName = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.openIDClaimName,\n );\n const openIDScopes = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.openIDScopes,\n );\n\n const [validationErrors, setValidationErrors] = useState({});\n\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n updateAddField({\n pageName: \"identityProvider\",\n field: field,\n value: value,\n }),\n );\n },\n [dispatch],\n );\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n // Validation\n useEffect(() => {\n let customIDPValidation: IValidation[] = [];\n\n if (idpSelection === \"OpenID\") {\n customIDPValidation = [\n ...customIDPValidation,\n {\n fieldKey: \"openID_CONFIGURATION_URL\",\n required: true,\n value: openIDConfigurationURL,\n },\n {\n fieldKey: \"openID_clientID\",\n required: true,\n value: openIDClientID,\n },\n {\n fieldKey: \"openID_secretID\",\n required: true,\n value: openIDSecretID,\n },\n {\n fieldKey: \"openID_claimName\",\n required: false,\n value: openIDClaimName,\n },\n ];\n }\n\n const commonVal = commonFormValidation(customIDPValidation);\n\n dispatch(\n isPageValid({\n pageName: \"identityProvider\",\n valid: Object.keys(commonVal).length === 0,\n }),\n );\n\n setValidationErrors(commonVal);\n }, [\n idpSelection,\n openIDClientID,\n openIDSecretID,\n openIDConfigurationURL,\n openIDClaimName,\n dispatch,\n ]);\n\n return (\n \n ) => {\n updateField(\"openIDConfigurationURL\", e.target.value);\n cleanValidation(\"openID_CONFIGURATION_URL\");\n }}\n label=\"Configuration URL\"\n value={openIDConfigurationURL}\n placeholder=\"https://your-identity-provider.com/.well-known/openid-configuration\"\n error={validationErrors[\"openID_CONFIGURATION_URL\"] || \"\"}\n required\n />\n ) => {\n updateField(\"openIDClientID\", e.target.value);\n cleanValidation(\"openID_clientID\");\n }}\n label=\"Client ID\"\n value={openIDClientID}\n error={validationErrors[\"openID_clientID\"] || \"\"}\n required\n />\n ) => {\n updateField(\"openIDSecretID\", e.target.value);\n cleanValidation(\"openID_secretID\");\n }}\n label=\"Secret ID\"\n value={openIDSecretID}\n error={validationErrors[\"openID_secretID\"] || \"\"}\n required\n />\n ) => {\n updateField(\"openIDClaimName\", e.target.value);\n cleanValidation(\"openID_claimName\");\n }}\n label=\"Claim Name\"\n value={openIDClaimName}\n placeholder=\"policy\"\n error={validationErrors[\"openID_claimName\"] || \"\"}\n />\n ) => {\n updateField(\"openIDScopes\", e.target.value);\n cleanValidation(\"openID_scopes\");\n }}\n label=\"Scopes\"\n value={openIDScopes}\n />\n \n );\n};\n\nexport default IDPOpenID;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport {\n IconButton,\n Tooltip,\n InputBox,\n AddIcon,\n RemoveIcon,\n Box,\n ShuffleIcon,\n} from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport {\n addIDPNewKeyPair,\n isPageValid,\n removeIDPKeyPairAtIndex,\n setIDPPwdAtIndex,\n setIDPUsrAtIndex,\n} from \"../../createTenantSlice\";\nimport { clearValidationError, getRandomString } from \"../../../utils\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../../utils/validationFunctions\";\n\nconst IDPBuiltIn = () => {\n const dispatch = useAppDispatch();\n\n const idpSelection = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.idpSelection,\n );\n const accessKeys = useSelector(\n (state: AppState) => state.createTenant.fields.identityProvider.accessKeys,\n );\n const secretKeys = useSelector(\n (state: AppState) => state.createTenant.fields.identityProvider.secretKeys,\n );\n\n const [validationErrors, setValidationErrors] = useState({});\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n // Validation\n useEffect(() => {\n let customIDPValidation: IValidation[] = [];\n\n if (idpSelection === \"Built-in\") {\n customIDPValidation = [...customIDPValidation];\n for (var i = 0; i < accessKeys.length; i++) {\n customIDPValidation.push({\n fieldKey: `accesskey-${i.toString()}`,\n required: true,\n value: accessKeys[i],\n pattern: /^[a-zA-Z0-9-]{8,63}$/,\n customPatternMessage: \"Keys must be at least length 8\",\n });\n customIDPValidation.push({\n fieldKey: `secretkey-${i.toString()}`,\n required: true,\n value: secretKeys[i],\n pattern: /^[a-zA-Z0-9-]{8,63}$/,\n customPatternMessage: \"Keys must be at least length 8\",\n });\n }\n }\n\n const commonVal = commonFormValidation(customIDPValidation);\n\n dispatch(\n isPageValid({\n pageName: \"identityProvider\",\n valid: Object.keys(commonVal).length === 0,\n }),\n );\n\n setValidationErrors(commonVal);\n }, [idpSelection, accessKeys, secretKeys, dispatch]);\n\n return (\n \n Add additional users\n {accessKeys.map((_, index) => {\n return (\n \n \n ) => {\n dispatch(\n setIDPUsrAtIndex({\n index,\n accessKey: e.target.value,\n }),\n );\n cleanValidation(`accesskey-${index.toString()}`);\n }}\n index={index}\n key={`csv-accesskey-${index.toString()}`}\n error={validationErrors[`accesskey-${index.toString()}`] || \"\"}\n />\n ) => {\n dispatch(\n setIDPPwdAtIndex({\n index,\n secretKey: e.target.value,\n }),\n );\n cleanValidation(`secretkey-${index.toString()}`);\n }}\n index={index}\n key={`csv-secretkey-${index.toString()}`}\n error={validationErrors[`secretkey-${index.toString()}`] || \"\"}\n />\n \n {\n dispatch(addIDPNewKeyPair());\n }}\n disabled={index !== accessKeys.length - 1}\n >\n \n \n {\n dispatch(removeIDPKeyPairAtIndex(index));\n }}\n disabled={accessKeys.length <= 1}\n >\n \n \n \n {\n dispatch(\n setIDPUsrAtIndex({\n index,\n accessKey: getRandomString(16),\n }),\n );\n dispatch(\n setIDPPwdAtIndex({\n index,\n secretKey: getRandomString(16),\n }),\n );\n }}\n size={\"small\"}\n >\n \n \n \n \n \n \n );\n })}\n \n );\n};\n\nexport default IDPBuiltIn;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport {\n Box,\n FormLayout,\n Grid,\n LDAPIcon,\n OIDCIcon,\n RadioGroup,\n UsersIcon,\n} from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../../../store\";\nimport { setIDP } from \"../createTenantSlice\";\nimport IDPActiveDirectory from \"./IdentityProvider/IDPActiveDirectory\";\nimport IDPOpenID from \"./IdentityProvider/IDPOpenID\";\nimport IDPBuiltIn from \"./IdentityProvider/IDPBuiltIn\";\nimport H3Section from \"../../../Common/H3Section\";\n\nconst IdentityProvider = () => {\n const dispatch = useAppDispatch();\n\n const idpSelection = useSelector(\n (state: AppState) =>\n state.createTenant.fields.identityProvider.idpSelection,\n );\n\n return (\n \n \n Identity Provider\n \n Access to the tenant can be controlled via an external Identity\n Manager.\n \n \n \n {\n dispatch(setIDP(e.target.value));\n }}\n selectorOptions={[\n { label: \"Built-in\", value: \"Built-in\", icon: },\n { label: \"Open ID\", value: \"OpenID\", icon: },\n {\n label: \"LDAP / Active Directory\",\n value: \"AD\",\n icon: ,\n },\n ]}\n />\n \n {idpSelection === \"Built-in\" && }\n {idpSelection === \"OpenID\" && }\n {idpSelection === \"AD\" && }\n \n );\n};\n\nexport default IdentityProvider;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect } from \"react\";\nimport {\n AddIcon,\n Box,\n breakPoints,\n FileSelector,\n FormLayout,\n Grid,\n IconButton,\n RemoveIcon,\n Switch,\n} from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport get from \"lodash/get\";\nimport styled from \"styled-components\";\nimport { AppState, useAppDispatch } from \"../../../../../store\";\nimport { KeyPair } from \"../../ListTenants/utils\";\nimport {\n addCaCertificate,\n addClientKeyPair,\n addFileToCaCertificates,\n addFileToClientKeyPair,\n addFileToKeyPair,\n addKeyPair,\n deleteCaCertificate,\n deleteClientKeyPair,\n deleteKeyPair,\n isPageValid,\n updateAddField,\n} from \"../createTenantSlice\";\nimport TLSHelpBox from \"../../HelpBox/TLSHelpBox\";\nimport H3Section from \"../../../Common/H3Section\";\n\nconst CertificateRow = styled.div(({ theme }) => ({\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n padding: 8,\n borderBottom: `1px solid ${get(theme, \"borderColor\", \"#E2E2E2\")}`,\n \"& .fileItem\": {\n display: \"flex\",\n \"& .inputItem:not(:last-of-type)\": {\n marginBottom: 0,\n },\n [`@media (max-width: ${breakPoints.md}px)`]: {\n flexFlow: \"column\",\n \"& .inputItem:not(:last-of-type)\": {\n marginBottom: 10,\n },\n },\n },\n \"& .rowActions\": {\n display: \"flex\",\n justifyContent: \"flex-end\",\n alignItems: \"center\",\n gap: 10,\n \"@media (max-width: 900px)\": {\n flex: 1,\n },\n },\n}));\n\nconst Security = () => {\n const dispatch = useAppDispatch();\n\n const enableTLS = useSelector(\n (state: AppState) => state.createTenant.fields.security.enableTLS,\n );\n const enableAutoCert = useSelector(\n (state: AppState) => state.createTenant.fields.security.enableAutoCert,\n );\n const enableCustomCerts = useSelector(\n (state: AppState) => state.createTenant.fields.security.enableCustomCerts,\n );\n const minioCertificates = useSelector(\n (state: AppState) =>\n state.createTenant.certificates.minioServerCertificates,\n );\n const minioClientCertificates = useSelector(\n (state: AppState) =>\n state.createTenant.certificates.minioClientCertificates,\n );\n const caCertificates = useSelector(\n (state: AppState) => state.createTenant.certificates.minioCAsCertificates,\n );\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n updateAddField({ pageName: \"security\", field: field, value: value }),\n );\n },\n [dispatch],\n );\n\n // Validation\n\n useEffect(() => {\n if (!enableTLS) {\n dispatch(isPageValid({ pageName: \"security\", valid: true }));\n return;\n }\n if (enableAutoCert) {\n dispatch(isPageValid({ pageName: \"security\", valid: true }));\n return;\n }\n if (enableCustomCerts) {\n dispatch(isPageValid({ pageName: \"security\", valid: true }));\n return;\n }\n dispatch(isPageValid({ pageName: \"security\", valid: false }));\n }, [enableTLS, enableAutoCert, enableCustomCerts, dispatch]);\n\n return (\n \n \n Security\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"enableTLS\", checked);\n }}\n label={\"TLS\"}\n description={\n \"Securing all the traffic using TLS. This is required for Encryption Configuration\"\n }\n />\n {enableTLS && (\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"enableAutoCert\", checked);\n }}\n label={\"AutoCert\"}\n description={\n \"The internode certificates will be generated and managed by MinIO Operator\"\n }\n />\n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"enableCustomCerts\", checked);\n }}\n label={\"Custom Certificates\"}\n description={\"Certificates used to terminated TLS at MinIO\"}\n />\n {enableCustomCerts && (\n \n {!enableAutoCert && }\n
\n MinIO Server Certificates\n\n {minioCertificates.map((keyPair: KeyPair, index) => (\n \n \n {\n if (encodedValue) {\n dispatch(\n addFileToKeyPair({\n id: keyPair.id,\n key: \"cert\",\n fileName: fileName,\n value: encodedValue,\n }),\n );\n }\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"tlsCert\"\n name=\"tlsCert\"\n label=\"Cert\"\n value={keyPair.cert}\n returnEncodedData\n />\n {\n if (encodedValue) {\n dispatch(\n addFileToKeyPair({\n id: keyPair.id,\n key: \"key\",\n fileName: fileName,\n value: encodedValue,\n }),\n );\n }\n }}\n accept=\".key,.pem\"\n id=\"tlsKey\"\n name=\"tlsKey\"\n label=\"Key\"\n value={keyPair.key}\n returnEncodedData\n />\n \n\n \n {\n dispatch(addKeyPair());\n }}\n disabled={index !== minioCertificates.length - 1}\n >\n \n \n {\n dispatch(deleteKeyPair(keyPair.id));\n }}\n disabled={minioCertificates.length <= 1}\n >\n \n \n \n \n ))}\n
\n
\n MinIO Client Certificates\n {minioClientCertificates.map((keyPair: KeyPair, index) => (\n \n \n {\n if (encodedValue) {\n dispatch(\n addFileToClientKeyPair({\n id: keyPair.id,\n key: \"cert\",\n fileName: fileName,\n value: encodedValue,\n }),\n );\n }\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"tlsCert\"\n name=\"tlsCert\"\n label=\"Cert\"\n value={keyPair.cert}\n returnEncodedData\n />\n {\n if (encodedValue) {\n dispatch(\n addFileToClientKeyPair({\n id: keyPair.id,\n key: \"key\",\n fileName: fileName,\n value: encodedValue,\n }),\n );\n }\n }}\n accept=\".key,.pem\"\n id=\"tlsKey\"\n name=\"tlsKey\"\n label=\"Key\"\n value={keyPair.key}\n returnEncodedData\n />\n \n\n \n {\n dispatch(addClientKeyPair());\n }}\n disabled={index !== minioClientCertificates.length - 1}\n >\n \n \n {\n dispatch(deleteClientKeyPair(keyPair.id));\n }}\n disabled={minioClientCertificates.length <= 1}\n >\n \n \n \n \n ))}\n
\n
\n MinIO CA Certificates\n {caCertificates.map((keyPair: KeyPair, index) => (\n \n \n {\n if (encodedValue) {\n dispatch(\n addFileToCaCertificates({\n id: keyPair.id,\n key: \"cert\",\n fileName: fileName,\n value: encodedValue,\n }),\n );\n }\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"tlsCert\"\n name=\"tlsCert\"\n label=\"Cert\"\n value={keyPair.cert}\n returnEncodedData\n />\n \n \n
\n {\n dispatch(addCaCertificate());\n }}\n disabled={index !== caCertificates.length - 1}\n >\n \n \n {\n dispatch(deleteCaCertificate(keyPair.id));\n }}\n disabled={caCertificates.length <= 1}\n >\n \n \n
\n
\n
\n ))}\n
\n
\n )}\n
\n )}\n
\n );\n};\n\nexport default Security;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { InputBox } from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport { isPageValid, updateAddField } from \"../../createTenantSlice\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../../utils/validationFunctions\";\nimport { clearValidationError } from \"../../../utils\";\n\nconst VaultKMSAdd = () => {\n const dispatch = useAppDispatch();\n\n const encryptionTab = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.encryptionTab,\n );\n const vaultEndpoint = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.vaultEndpoint,\n );\n const vaultEngine = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.vaultEngine,\n );\n const vaultNamespace = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.vaultNamespace,\n );\n const vaultPrefix = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.vaultPrefix,\n );\n const vaultAppRoleEngine = useSelector(\n (state: AppState) =>\n state.createTenant.fields.encryption.vaultAppRoleEngine,\n );\n const vaultId = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.vaultId,\n );\n const vaultSecret = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.vaultSecret,\n );\n const vaultRetry = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.vaultRetry,\n );\n const vaultPing = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.vaultPing,\n );\n\n const [validationErrors, setValidationErrors] = useState({});\n\n // Validation\n useEffect(() => {\n let encryptionValidation: IValidation[] = [];\n\n if (!encryptionTab) {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"vault_endpoint\",\n required: true,\n value: vaultEndpoint,\n },\n {\n fieldKey: \"vault_id\",\n required: true,\n value: vaultId,\n },\n {\n fieldKey: \"vault_secret\",\n required: true,\n value: vaultSecret,\n },\n {\n fieldKey: \"vault_ping\",\n required: false,\n value: vaultPing,\n customValidation: parseInt(vaultPing) < 0,\n customValidationMessage: \"Value needs to be 0 or greater\",\n },\n {\n fieldKey: \"vault_retry\",\n required: false,\n value: vaultRetry,\n customValidation: parseInt(vaultRetry) < 0,\n customValidationMessage: \"Value needs to be 0 or greater\",\n },\n ];\n }\n\n const commonVal = commonFormValidation(encryptionValidation);\n\n dispatch(\n isPageValid({\n pageName: \"encryption\",\n valid: Object.keys(commonVal).length === 0,\n }),\n );\n\n setValidationErrors(commonVal);\n }, [\n encryptionTab,\n vaultEndpoint,\n vaultEngine,\n vaultId,\n vaultSecret,\n vaultPing,\n vaultRetry,\n dispatch,\n ]);\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n updateAddField({ pageName: \"encryption\", field: field, value: value }),\n );\n },\n [dispatch],\n );\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n return (\n \n ) => {\n updateField(\"vaultEndpoint\", e.target.value);\n cleanValidation(\"vault_endpoint\");\n }}\n label=\"Endpoint\"\n tooltip=\"Endpoint is the Hashicorp Vault endpoint\"\n value={vaultEndpoint}\n error={validationErrors[\"vault_endpoint\"] || \"\"}\n required\n />\n ) => {\n updateField(\"vaultEngine\", e.target.value);\n cleanValidation(\"vault_engine\");\n }}\n label=\"Engine\"\n tooltip=\"Engine is the Hashicorp Vault K/V engine path. If empty, defaults to 'kv'\"\n value={vaultEngine}\n />\n ) => {\n updateField(\"vaultNamespace\", e.target.value);\n }}\n label=\"Namespace\"\n tooltip=\"Namespace is an optional Hashicorp Vault namespace. An empty namespace means no particular namespace is used.\"\n value={vaultNamespace}\n />\n ) => {\n updateField(\"vaultPrefix\", e.target.value);\n }}\n label=\"Prefix\"\n tooltip=\"Prefix is an optional prefix / directory within the K/V engine. If empty, keys will be stored at the K/V engine top level\"\n value={vaultPrefix}\n />\n
\n App Role\n ) => {\n updateField(\"vaultAppRoleEngine\", e.target.value);\n }}\n label=\"Engine\"\n tooltip=\"AppRoleEngine is the AppRole authentication engine path. If empty, defaults to 'approle'\"\n value={vaultAppRoleEngine}\n />\n ) => {\n updateField(\"vaultId\", e.target.value);\n cleanValidation(\"vault_id\");\n }}\n label=\"AppRole ID\"\n tooltip=\"AppRoleSecret is the AppRole access secret for authenticating to Hashicorp Vault via the AppRole method\"\n value={vaultId}\n error={validationErrors[\"vault_id\"] || \"\"}\n required\n />\n ) => {\n updateField(\"vaultSecret\", e.target.value);\n cleanValidation(\"vault_secret\");\n }}\n label=\"AppRole Secret\"\n tooltip=\"AppRoleSecret is the AppRole access secret for authenticating to Hashicorp Vault via the AppRole method\"\n value={vaultSecret}\n error={validationErrors[\"vault_secret\"] || \"\"}\n required\n />\n ) => {\n updateField(\"vaultRetry\", e.target.value);\n cleanValidation(\"vault_retry\");\n }}\n label=\"Retry (Seconds)\"\n value={vaultRetry}\n error={validationErrors[\"vault_retry\"] || \"\"}\n />\n
\n
\n Status\n ) => {\n updateField(\"vaultPing\", e.target.value);\n cleanValidation(\"vault_ping\");\n }}\n label=\"Ping (Seconds)\"\n value={vaultPing}\n error={validationErrors[\"vault_ping\"] || \"\"}\n />\n
\n
\n );\n};\n\nexport default VaultKMSAdd;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { InputBox } from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../../utils/validationFunctions\";\nimport { isPageValid, updateAddField } from \"../../createTenantSlice\";\nimport { clearValidationError } from \"../../../utils\";\n\nconst AzureKMSAdd = () => {\n const dispatch = useAppDispatch();\n\n const encryptionTab = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.encryptionTab,\n );\n const azureEndpoint = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.azureEndpoint,\n );\n const azureTenantID = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.azureTenantID,\n );\n const azureClientID = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.azureClientID,\n );\n const azureClientSecret = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.azureClientSecret,\n );\n\n const [validationErrors, setValidationErrors] = useState({});\n\n // Validation\n useEffect(() => {\n let encryptionValidation: IValidation[] = [];\n\n if (!encryptionTab) {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"azure_endpoint\",\n required: true,\n value: azureEndpoint,\n },\n {\n fieldKey: \"azure_tenant_id\",\n required: true,\n value: azureTenantID,\n },\n {\n fieldKey: \"azure_client_id\",\n required: true,\n value: azureClientID,\n },\n {\n fieldKey: \"azure_client_secret\",\n required: true,\n value: azureClientSecret,\n },\n ];\n }\n\n const commonVal = commonFormValidation(encryptionValidation);\n\n dispatch(\n isPageValid({\n pageName: \"encryption\",\n valid: Object.keys(commonVal).length === 0,\n }),\n );\n\n setValidationErrors(commonVal);\n }, [\n encryptionTab,\n azureEndpoint,\n azureTenantID,\n azureClientID,\n azureClientSecret,\n dispatch,\n ]);\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n updateAddField({ pageName: \"encryption\", field: field, value: value }),\n );\n },\n [dispatch],\n );\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n return (\n \n ) => {\n updateField(\"azureEndpoint\", e.target.value);\n cleanValidation(\"azure_endpoint\");\n }}\n label=\"Endpoint\"\n tooltip=\"Endpoint is the Azure KeyVault endpoint\"\n value={azureEndpoint}\n error={validationErrors[\"azure_endpoint\"] || \"\"}\n />\n
\n Credentials\n ) => {\n updateField(\"azureTenantID\", e.target.value);\n cleanValidation(\"azure_tenant_id\");\n }}\n label=\"Tenant ID\"\n tooltip=\"TenantID is the ID of the Azure KeyVault tenant\"\n value={azureTenantID}\n error={validationErrors[\"azure_tenant_id\"] || \"\"}\n />\n ) => {\n updateField(\"azureClientID\", e.target.value);\n cleanValidation(\"azure_client_id\");\n }}\n label=\"Client ID\"\n tooltip=\"ClientID is the ID of the client accessing Azure KeyVault\"\n value={azureClientID}\n error={validationErrors[\"azure_client_id\"] || \"\"}\n />\n ) => {\n updateField(\"azureClientSecret\", e.target.value);\n cleanValidation(\"azure_client_secret\");\n }}\n label=\"Client Secret\"\n tooltip=\"ClientSecret is the client secret accessing the Azure KeyVault\"\n value={azureClientSecret}\n error={validationErrors[\"azure_client_secret\"] || \"\"}\n />\n
\n
\n );\n};\n\nexport default AzureKMSAdd;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback } from \"react\";\nimport { InputBox } from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport { updateAddField } from \"../../createTenantSlice\";\n\nconst GCPKMSAdd = () => {\n const dispatch = useAppDispatch();\n\n const gcpProjectID = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gcpProjectID,\n );\n const gcpEndpoint = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gcpEndpoint,\n );\n const gcpClientEmail = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gcpClientEmail,\n );\n const gcpClientID = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gcpClientID,\n );\n const gcpPrivateKeyID = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gcpPrivateKeyID,\n );\n const gcpPrivateKey = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gcpPrivateKey,\n );\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n updateAddField({ pageName: \"encryption\", field: field, value: value }),\n );\n },\n [dispatch],\n );\n\n return (\n \n ) => {\n updateField(\"gcpProjectID\", e.target.value);\n }}\n label=\"Project ID\"\n tooltip=\"ProjectID is the GCP project ID.\"\n value={gcpProjectID}\n />\n ) => {\n updateField(\"gcpEndpoint\", e.target.value);\n }}\n label=\"Endpoint\"\n tooltip=\"Endpoint is the GCP project ID. If empty defaults to: secretmanager.googleapis.com:443\"\n value={gcpEndpoint}\n />\n
\n Credentials\n ) => {\n updateField(\"gcpClientEmail\", e.target.value);\n }}\n label=\"Client Email\"\n tooltip=\"Is the Client email of the GCP service account used to access the SecretManager\"\n value={gcpClientEmail}\n />\n ) => {\n updateField(\"gcpClientID\", e.target.value);\n }}\n label=\"Client ID\"\n tooltip=\"Is the Client ID of the GCP service account used to access the SecretManager\"\n value={gcpClientID}\n />\n ) => {\n updateField(\"gcpPrivateKeyID\", e.target.value);\n }}\n label=\"Private Key ID\"\n tooltip=\"Is the private key ID of the GCP service account used to access the SecretManager\"\n value={gcpPrivateKeyID}\n />\n ) => {\n updateField(\"gcpPrivateKey\", e.target.value);\n }}\n label=\"Private Key\"\n tooltip=\"Is the private key of the GCP service account used to access the SecretManager\"\n value={gcpPrivateKey}\n />\n
\n
\n );\n};\n\nexport default GCPKMSAdd;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { InputBox } from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport { isPageValid, updateAddField } from \"../../createTenantSlice\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../../utils/validationFunctions\";\nimport { clearValidationError } from \"../../../utils\";\n\nconst GemaltoKMSAdd = () => {\n const dispatch = useAppDispatch();\n\n const encryptionTab = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.encryptionTab,\n );\n const gemaltoEndpoint = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gemaltoEndpoint,\n );\n const gemaltoToken = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gemaltoToken,\n );\n const gemaltoDomain = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gemaltoDomain,\n );\n const gemaltoRetry = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gemaltoRetry,\n );\n\n const [validationErrors, setValidationErrors] = useState({});\n\n // Validation\n useEffect(() => {\n let encryptionValidation: IValidation[] = [];\n\n if (!encryptionTab) {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"gemalto_endpoint\",\n required: true,\n value: gemaltoEndpoint,\n },\n {\n fieldKey: \"gemalto_token\",\n required: true,\n value: gemaltoToken,\n },\n {\n fieldKey: \"gemalto_domain\",\n required: true,\n value: gemaltoDomain,\n },\n {\n fieldKey: \"gemalto_retry\",\n required: false,\n value: gemaltoRetry,\n customValidation: parseInt(gemaltoRetry) < 0,\n customValidationMessage: \"Value needs to be 0 or greater\",\n },\n ];\n }\n\n const commonVal = commonFormValidation(encryptionValidation);\n\n dispatch(\n isPageValid({\n pageName: \"encryption\",\n valid: Object.keys(commonVal).length === 0,\n }),\n );\n\n setValidationErrors(commonVal);\n }, [\n encryptionTab,\n gemaltoEndpoint,\n gemaltoToken,\n gemaltoDomain,\n gemaltoRetry,\n dispatch,\n ]);\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n updateAddField({ pageName: \"encryption\", field: field, value: value }),\n );\n },\n [dispatch],\n );\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n return (\n \n ) => {\n updateField(\"gemaltoEndpoint\", e.target.value);\n cleanValidation(\"gemalto_endpoint\");\n }}\n label=\"Endpoint\"\n tooltip=\"Endpoint is the endpoint to the KeySecure server\"\n value={gemaltoEndpoint}\n error={validationErrors[\"gemalto_endpoint\"] || \"\"}\n required\n />\n
\n Credentials\n ) => {\n updateField(\"gemaltoToken\", e.target.value);\n cleanValidation(\"gemalto_token\");\n }}\n label=\"Token\"\n tooltip=\"Token is the refresh authentication token to access the KeySecure server\"\n value={gemaltoToken}\n error={validationErrors[\"gemalto_token\"] || \"\"}\n required\n />\n ) => {\n updateField(\"gemaltoDomain\", e.target.value);\n cleanValidation(\"gemalto_domain\");\n }}\n label=\"Domain\"\n tooltip=\"Domain is the isolated namespace within the KeySecure server. If empty, defaults to the top-level / root domain\"\n value={gemaltoDomain}\n error={validationErrors[\"gemalto_domain\"] || \"\"}\n required\n />\n ) => {\n updateField(\"gemaltoRetry\", e.target.value);\n cleanValidation(\"gemalto_retry\");\n }}\n label=\"Retry (seconds)\"\n value={gemaltoRetry}\n error={validationErrors[\"gemalto_retry\"] || \"\"}\n />\n
\n
\n );\n};\n\nexport default GemaltoKMSAdd;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { InputBox } from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../../utils/validationFunctions\";\nimport { isPageValid, updateAddField } from \"../../createTenantSlice\";\nimport { clearValidationError } from \"../../../utils\";\n\nconst AWSKMSAdd = () => {\n const dispatch = useAppDispatch();\n\n const encryptionTab = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.encryptionTab,\n );\n const awsEndpoint = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.awsEndpoint,\n );\n const awsRegion = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.awsRegion,\n );\n const awsKMSKey = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.awsKMSKey,\n );\n const awsAccessKey = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.awsAccessKey,\n );\n const awsSecretKey = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.awsSecretKey,\n );\n const awsToken = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.awsToken,\n );\n const [validationErrors, setValidationErrors] = useState({});\n\n // Validation\n useEffect(() => {\n let encryptionValidation: IValidation[] = [];\n\n if (!encryptionTab) {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"aws_endpoint\",\n required: true,\n value: awsEndpoint,\n },\n {\n fieldKey: \"aws_region\",\n required: true,\n value: awsRegion,\n },\n {\n fieldKey: \"aws_accessKey\",\n required: true,\n value: awsAccessKey,\n },\n {\n fieldKey: \"aws_secretKey\",\n required: true,\n value: awsSecretKey,\n },\n ];\n }\n\n const commonVal = commonFormValidation(encryptionValidation);\n\n dispatch(\n isPageValid({\n pageName: \"encryption\",\n valid: Object.keys(commonVal).length === 0,\n }),\n );\n\n setValidationErrors(commonVal);\n }, [\n encryptionTab,\n awsEndpoint,\n awsRegion,\n awsSecretKey,\n awsAccessKey,\n dispatch,\n ]);\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n updateAddField({ pageName: \"encryption\", field: field, value: value }),\n );\n },\n [dispatch],\n );\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n return (\n \n ) => {\n updateField(\"awsEndpoint\", e.target.value);\n cleanValidation(\"aws_endpoint\");\n }}\n label=\"Endpoint\"\n tooltip=\"Endpoint is the AWS SecretsManager endpoint. AWS SecretsManager endpoints have the following schema: secrestmanager[-fips]..amanzonaws.com\"\n value={awsEndpoint}\n error={validationErrors[\"aws_endpoint\"] || \"\"}\n required\n />\n ) => {\n updateField(\"awsRegion\", e.target.value);\n cleanValidation(\"aws_region\");\n }}\n label=\"Region\"\n tooltip=\"Region is the AWS region the SecretsManager is located\"\n value={awsRegion}\n error={validationErrors[\"aws_region\"] || \"\"}\n required\n />\n ) => {\n updateField(\"awsKMSKey\", e.target.value);\n }}\n label=\"KMS Key\"\n tooltip=\"KMSKey is the AWS-KMS key ID (CMK-ID) used to en/decrypt secrets managed by the SecretsManager. If empty, the default AWS KMS key is used\"\n value={awsKMSKey}\n />\n
\n Credentials\n ) => {\n updateField(\"awsAccessKey\", e.target.value);\n cleanValidation(\"aws_accessKey\");\n }}\n label=\"Access Key\"\n tooltip=\"AccessKey is the access key for authenticating to AWS\"\n value={awsAccessKey}\n error={validationErrors[\"aws_accessKey\"] || \"\"}\n required\n />\n ) => {\n updateField(\"awsSecretKey\", e.target.value);\n cleanValidation(\"aws_secretKey\");\n }}\n label=\"Secret Key\"\n tooltip=\"SecretKey is the secret key for authenticating to AWS\"\n value={awsSecretKey}\n error={validationErrors[\"aws_secretKey\"] || \"\"}\n required\n />\n ) => {\n updateField(\"awsToken\", e.target.value);\n }}\n label=\"Token\"\n value={awsToken}\n />\n
\n
\n );\n};\n\nexport default AWSKMSAdd;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport {\n Box,\n CodeEditor,\n FileSelector,\n FormLayout,\n Grid,\n InputBox,\n RadioGroup,\n Select,\n SimpleHeader,\n Switch,\n Tabs,\n} from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../../../store\";\nimport { clearValidationError } from \"../../utils\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../utils/validationFunctions\";\nimport {\n addFileKESServerCert,\n addFileKMSCa,\n addFileKMSMTLSCert,\n addFileMinIOMTLSCert,\n isPageValid,\n updateAddField,\n} from \"../createTenantSlice\";\nimport VaultKMSAdd from \"./Encryption/VaultKMSAdd\";\nimport AzureKMSAdd from \"./Encryption/AzureKMSAdd\";\nimport GCPKMSAdd from \"./Encryption/GCPKMSAdd\";\nimport GemaltoKMSAdd from \"./Encryption/GemaltoKMSAdd\";\nimport AWSKMSAdd from \"./Encryption/AWSKMSAdd\";\nimport H3Section from \"../../../Common/H3Section\";\n\nconst Encryption = () => {\n const dispatch = useAppDispatch();\n\n const replicas = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.replicas,\n );\n const rawConfiguration = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.rawConfiguration,\n );\n const encryptionTab = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.encryptionTab,\n );\n const enableEncryption = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.enableEncryption,\n );\n const encryptionType = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.encryptionType,\n );\n\n const gcpProjectID = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gcpProjectID,\n );\n const gcpEndpoint = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gcpEndpoint,\n );\n const gcpClientEmail = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gcpClientEmail,\n );\n const gcpClientID = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gcpClientID,\n );\n const gcpPrivateKeyID = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gcpPrivateKeyID,\n );\n const gcpPrivateKey = useSelector(\n (state: AppState) => state.createTenant.fields.encryption.gcpPrivateKey,\n );\n const enableCustomCertsForKES = useSelector(\n (state: AppState) =>\n state.createTenant.fields.encryption.enableCustomCertsForKES,\n );\n const enableAutoCert = useSelector(\n (state: AppState) => state.createTenant.fields.security.enableAutoCert,\n );\n const enableTLS = useSelector(\n (state: AppState) => state.createTenant.fields.security.enableTLS,\n );\n const minioServerCertificates = useSelector(\n (state: AppState) =>\n state.createTenant.certificates.minioServerCertificates,\n );\n const kesServerCertificate = useSelector(\n (state: AppState) => state.createTenant.certificates.kesServerCertificate,\n );\n const minioMTLSCertificate = useSelector(\n (state: AppState) => state.createTenant.certificates.minioMTLSCertificate,\n );\n const kmsMTLSCertificate = useSelector(\n (state: AppState) => state.createTenant.certificates.kmsMTLSCertificate,\n );\n const kmsCA = useSelector(\n (state: AppState) => state.createTenant.certificates.kmsCA,\n );\n const enableCustomCerts = useSelector(\n (state: AppState) => state.createTenant.fields.security.enableCustomCerts,\n );\n const kesSecurityContext = useSelector(\n (state: AppState) =>\n state.createTenant.fields.encryption.kesSecurityContext,\n );\n\n const [validationErrors, setValidationErrors] = useState({});\n\n let encryptionAvailable = false;\n if (\n enableTLS &&\n (enableAutoCert ||\n (minioServerCertificates &&\n minioServerCertificates.filter(\n (item) => item.encoded_key && item.encoded_cert,\n ).length > 0))\n ) {\n encryptionAvailable = true;\n }\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n updateAddField({ pageName: \"encryption\", field: field, value: value }),\n );\n },\n [dispatch],\n );\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n // Validation\n useEffect(() => {\n let encryptionValidation: IValidation[] = [];\n\n if (enableEncryption) {\n encryptionValidation = [\n {\n fieldKey: \"rawConfiguration\",\n required: encryptionTab === \"kms-raw-configuration\",\n value: rawConfiguration,\n },\n {\n fieldKey: \"replicas\",\n required: true,\n value: replicas,\n customValidation: parseInt(replicas) < 1,\n customValidationMessage: \"Replicas needs to be 1 or greater\",\n },\n {\n fieldKey: \"kes_securityContext_runAsUser\",\n required: true,\n value: kesSecurityContext.runAsUser,\n customValidation:\n kesSecurityContext.runAsUser === \"\" ||\n parseInt(kesSecurityContext.runAsUser) < 0,\n customValidationMessage: `runAsUser must be present and be 0 or more`,\n },\n {\n fieldKey: \"kes_securityContext_runAsGroup\",\n required: true,\n value: kesSecurityContext.runAsGroup,\n customValidation:\n kesSecurityContext.runAsGroup === \"\" ||\n parseInt(kesSecurityContext.runAsGroup) < 0,\n customValidationMessage: `runAsGroup must be present and be 0 or more`,\n },\n {\n fieldKey: \"kes_securityContext_fsGroup\",\n required: true,\n value: kesSecurityContext.fsGroup!,\n customValidation:\n kesSecurityContext.fsGroup === \"\" ||\n parseInt(kesSecurityContext.fsGroup!) < 0,\n customValidationMessage: `fsGroup must be present and be 0 or more`,\n },\n ];\n\n if (enableCustomCerts) {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"serverKey\",\n required: !enableAutoCert,\n value: kesServerCertificate.encoded_key,\n },\n {\n fieldKey: \"serverCert\",\n required: !enableAutoCert,\n value: kesServerCertificate.encoded_cert,\n },\n {\n fieldKey: \"clientKey\",\n required: !enableAutoCert,\n value: minioMTLSCertificate.encoded_key,\n },\n {\n fieldKey: \"clientCert\",\n required: !enableAutoCert,\n value: minioMTLSCertificate.encoded_cert,\n },\n ];\n }\n }\n\n const commonVal = commonFormValidation(encryptionValidation);\n dispatch(\n isPageValid({\n pageName: \"encryption\",\n valid: Object.keys(commonVal).length === 0,\n }),\n );\n\n setValidationErrors(commonVal);\n }, [\n rawConfiguration,\n encryptionTab,\n enableEncryption,\n encryptionType,\n gcpProjectID,\n gcpEndpoint,\n gcpClientEmail,\n gcpClientID,\n gcpPrivateKeyID,\n gcpPrivateKey,\n dispatch,\n enableAutoCert,\n enableCustomCerts,\n kesServerCertificate.encoded_key,\n kesServerCertificate.encoded_cert,\n minioMTLSCertificate.encoded_key,\n minioMTLSCertificate.encoded_cert,\n kesSecurityContext,\n replicas,\n ]);\n\n return (\n \n \n Encryption\n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"enableEncryption\", checked);\n }}\n description=\"\"\n disabled={!encryptionAvailable}\n />\n \n \n MinIO Server-Side Encryption (SSE) protects objects as part of write\n operations, allowing clients to take advantage of server processing\n power to secure objects at the storage layer (encryption-at-rest). SSE\n also provides key functionality to regulatory and compliance\n requirements around secure locking and erasure.\n \n
\n\n {enableEncryption && (\n \n {\n updateField(\"encryptionTab\", value);\n }}\n sx={{\n height: \"initial\",\n }}\n options={[\n {\n tabConfig: {\n label: \"Options\",\n id: \"kms-options\",\n },\n content: (\n \n {\n updateField(\"encryptionType\", e.target.value);\n }}\n selectorOptions={[\n { label: \"Vault\", value: \"vault\" },\n { label: \"AWS\", value: \"aws\" },\n { label: \"Gemalto\", value: \"gemalto\" },\n { label: \"GCP\", value: \"gcp\" },\n { label: \"Azure\", value: \"azure\" },\n ]}\n />\n {encryptionType === \"vault\" && }\n {encryptionType === \"azure\" && }\n {encryptionType === \"gcp\" && }\n {encryptionType === \"aws\" && }\n {encryptionType === \"gemalto\" && }\n \n ),\n },\n {\n tabConfig: {\n label: \"Raw Edit\",\n id: \"kms-raw-configuration\",\n },\n content: (\n \n \n {\n updateField(\"rawConfiguration\", value);\n }}\n editorHeight={\"550px\"}\n />\n \n \n ),\n },\n ]}\n />\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"enableCustomCertsForKES\", checked);\n }}\n label={\"Custom Certificates\"}\n disabled={!enableAutoCert}\n />\n {(enableCustomCertsForKES || !enableAutoCert) && (\n \n
\n Encryption server certificates\n {\n if (encodedValue) {\n dispatch(\n addFileKESServerCert({\n key: \"key\",\n fileName: fileName,\n value: encodedValue,\n }),\n );\n cleanValidation(\"serverKey\");\n }\n }}\n accept=\".key,.pem\"\n id=\"serverKey\"\n name=\"serverKey\"\n label=\"Key\"\n error={validationErrors[\"serverKey\"] || \"\"}\n value={kesServerCertificate.key}\n required={!enableAutoCert}\n returnEncodedData\n />\n {\n if (encodedValue) {\n dispatch(\n addFileKESServerCert({\n key: \"cert\",\n fileName: fileName,\n value: encodedValue,\n }),\n );\n cleanValidation(\"serverCert\");\n }\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"serverCert\"\n name=\"serverCert\"\n label=\"Cert\"\n error={validationErrors[\"serverCert\"] || \"\"}\n value={kesServerCertificate.cert}\n required={!enableAutoCert}\n returnEncodedData\n />\n
\n
\n \n MinIO mTLS certificates (connection between MinIO and the\n Encryption server)\n \n {\n if (encodedValue) {\n dispatch(\n addFileMinIOMTLSCert({\n key: \"key\",\n fileName: fileName,\n value: encodedValue,\n }),\n );\n cleanValidation(\"clientKey\");\n }\n }}\n accept=\".key,.pem\"\n id=\"clientKey\"\n name=\"clientKey\"\n label=\"Key\"\n error={validationErrors[\"clientKey\"] || \"\"}\n value={minioMTLSCertificate.key}\n required={!enableAutoCert}\n returnEncodedData\n />\n {\n if (encodedValue) {\n dispatch(\n addFileMinIOMTLSCert({\n key: \"cert\",\n fileName: fileName,\n value: encodedValue,\n }),\n );\n cleanValidation(\"clientCert\");\n }\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"clientCert\"\n name=\"clientCert\"\n label=\"Cert\"\n error={validationErrors[\"clientCert\"] || \"\"}\n value={minioMTLSCertificate.cert}\n required={!enableAutoCert}\n returnEncodedData\n />\n
\n
\n \n KMS mTLS certificates (connection between the Encryption\n server and the KMS)\n \n {\n if (encodedValue) {\n dispatch(\n addFileKMSMTLSCert({\n key: \"key\",\n fileName: fileName,\n value: encodedValue,\n }),\n );\n cleanValidation(\"vault_key\");\n }\n }}\n accept=\".key,.pem\"\n id=\"vault_key\"\n name=\"vault_key\"\n label=\"Key\"\n value={kmsMTLSCertificate.key}\n returnEncodedData\n />\n {\n if (encodedValue) {\n dispatch(\n addFileKMSMTLSCert({\n key: \"cert\",\n fileName: fileName,\n value: encodedValue,\n }),\n );\n cleanValidation(\"vault_cert\");\n }\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"vault_cert\"\n name=\"vault_cert\"\n label=\"Cert\"\n value={kmsMTLSCertificate.cert}\n returnEncodedData\n />\n {\n if (encodedValue) {\n dispatch(\n addFileKMSCa({\n fileName: fileName,\n value: encodedValue,\n }),\n );\n cleanValidation(\"vault_ca\");\n }\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"vault_ca\"\n name=\"vault_ca\"\n label=\"CA\"\n value={kmsCA.cert}\n returnEncodedData\n />\n
\n
\n )}\n ) => {\n updateField(\"replicas\", e.target.value);\n cleanValidation(\"replicas\");\n }}\n label=\"Replicas\"\n value={replicas}\n required\n error={validationErrors[\"replicas\"] || \"\"}\n sx={{ marginBottom: 10 }}\n />\n\n
\n SecurityContext for KES pods\n \n
\n
\n ) => {\n updateField(\"kesSecurityContext\", {\n ...kesSecurityContext,\n runAsUser: e.target.value,\n });\n cleanValidation(\"kes_securityContext_runAsUser\");\n }}\n label=\"Run As User\"\n value={kesSecurityContext.runAsUser}\n required\n error={\n validationErrors[\"kes_securityContext_runAsUser\"] || \"\"\n }\n min=\"0\"\n />\n
\n
\n ) => {\n updateField(\"kesSecurityContext\", {\n ...kesSecurityContext,\n runAsGroup: e.target.value,\n });\n cleanValidation(\"kes_securityContext_runAsGroup\");\n }}\n label=\"Run As Group\"\n value={kesSecurityContext.runAsGroup}\n required\n error={\n validationErrors[\"kes_securityContext_runAsGroup\"] || \"\"\n }\n min=\"0\"\n />\n
\n
\n
\n
\n \n
\n
\n ) => {\n updateField(\"kesSecurityContext\", {\n ...kesSecurityContext,\n fsGroup: e.target.value,\n });\n cleanValidation(\"kes_securityContext_fsGroup\");\n }}\n label=\"FsGroup\"\n value={kesSecurityContext.fsGroup!}\n required\n error={\n validationErrors[\"kes_securityContext_fsGroup\"] || \"\"\n }\n min=\"0\"\n />\n
\n
\n {\n updateField(\"kesSecurityContext\", {\n ...kesSecurityContext,\n fsGroupChangePolicy: value,\n });\n }}\n options={[\n {\n label: \"Always\",\n value: \"Always\",\n },\n {\n label: \"OnRootMismatch\",\n value: \"OnRootMismatch\",\n },\n ]}\n />\n
\n
\n
\n
\n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"kesSecurityContext\", {\n ...kesSecurityContext,\n runAsNonRoot: checked,\n });\n }}\n label={\"Do not run as Root\"}\n />\n
\n
\n )}\n \n );\n};\n\nexport default Encryption;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport {\n AddIcon,\n RemoveIcon,\n FormLayout,\n Box,\n InputLabel,\n RadioGroup,\n Switch,\n Select,\n InputBox,\n IconButton,\n Grid,\n} from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport styled from \"styled-components\";\nimport { AppState, useAppDispatch } from \"../../../../../store\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../utils/validationFunctions\";\nimport { ErrorResponseHandler } from \"../../../../../common/types\";\nimport { LabelKeyPair } from \"../../types\";\nimport { setModalErrorSnackMessage } from \"../../../../../systemSlice\";\nimport {\n addNewToleration,\n isPageValid,\n removeToleration,\n setKeyValuePairs,\n setTolerationInfo,\n updateAddField,\n} from \"../createTenantSlice\";\nimport api from \"../../../../../common/api\";\nimport TolerationSelector from \"../../../Common/TolerationSelector/TolerationSelector\";\nimport H3Section from \"../../../Common/H3Section\";\n\nconst AffinityContainer = styled.div(() => ({\n \"& .overlayAction\": {\n marginLeft: 10,\n display: \"flex\",\n alignItems: \"center\",\n },\n \"& .affinityConfigField\": {\n display: \"flex\",\n },\n \"& .affinityFieldLabel\": {\n display: \"flex\",\n flexFlow: \"column\",\n flex: 1,\n },\n \"& .affinityLabelKey\": {\n \"& div:first-child\": {\n marginBottom: 0,\n },\n },\n \"& .affinityLabelValue\": {\n marginLeft: 10,\n \"& div:first-child\": {\n marginBottom: 0,\n },\n },\n \"& .rowActions\": {\n display: \"flex\",\n alignItems: \"center\",\n },\n \"& .affinityRow\": {\n marginBottom: 10,\n display: \"flex\",\n },\n}));\n\ninterface OptionPair {\n label: string;\n value: string;\n}\n\nconst Affinity = () => {\n const dispatch = useAppDispatch();\n\n const podAffinity = useSelector(\n (state: AppState) => state.createTenant.fields.affinity.podAffinity,\n );\n const nodeSelectorLabels = useSelector(\n (state: AppState) => state.createTenant.fields.affinity.nodeSelectorLabels,\n );\n const withPodAntiAffinity = useSelector(\n (state: AppState) => state.createTenant.fields.affinity.withPodAntiAffinity,\n );\n const keyValuePairs = useSelector(\n (state: AppState) => state.createTenant.nodeSelectorPairs,\n );\n const tolerations = useSelector(\n (state: AppState) => state.createTenant.tolerations,\n );\n\n const [validationErrors, setValidationErrors] = useState({});\n const [loading, setLoading] = useState(true);\n const [keyValueMap, setKeyValueMap] = useState<{ [key: string]: string[] }>(\n {},\n );\n const [keyOptions, setKeyOptions] = useState([]);\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n updateAddField({\n pageName: \"affinity\",\n field: field,\n value: value,\n }),\n );\n },\n [dispatch],\n );\n\n useEffect(() => {\n if (loading) {\n api\n .invoke(\"GET\", `/api/v1/nodes/labels`)\n .then((res: { [key: string]: string[] }) => {\n setLoading(false);\n setKeyValueMap(res);\n let keys: OptionPair[] = [];\n for (let k in res) {\n keys.push({\n label: k,\n value: k,\n });\n }\n setKeyOptions(keys);\n })\n .catch((err: ErrorResponseHandler) => {\n setLoading(false);\n dispatch(setModalErrorSnackMessage(err));\n setKeyValueMap({});\n });\n }\n }, [dispatch, loading]);\n\n useEffect(() => {\n if (keyValuePairs) {\n const vlr = keyValuePairs\n .filter((kvp) => kvp.key !== \"\")\n .map((kvp) => `${kvp.key}=${kvp.value}`)\n .filter((kvs, i, a) => a.indexOf(kvs) === i);\n const vl = vlr.join(\"&\");\n updateField(\"nodeSelectorLabels\", vl);\n }\n }, [keyValuePairs, updateField]);\n\n // Validation\n useEffect(() => {\n let customAccountValidation: IValidation[] = [];\n\n if (podAffinity === \"nodeSelector\") {\n let valid = true;\n\n const splittedLabels = nodeSelectorLabels.split(\"&\");\n\n if (splittedLabels.length === 1 && splittedLabels[0] === \"\") {\n valid = false;\n }\n\n splittedLabels.forEach((item: string, index: number) => {\n const splitItem = item.split(\"=\");\n\n if (splitItem.length !== 2) {\n valid = false;\n }\n\n if (index + 1 !== splittedLabels.length) {\n if (splitItem[0] === \"\" || splitItem[1] === \"\") {\n valid = false;\n }\n }\n });\n\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"labels\",\n required: true,\n value: nodeSelectorLabels,\n customValidation: !valid,\n customValidationMessage:\n \"You need to add at least one label key-pair\",\n },\n ];\n }\n\n const commonVal = commonFormValidation(customAccountValidation);\n\n dispatch(\n isPageValid({\n pageName: \"affinity\",\n valid: Object.keys(commonVal).length === 0,\n }),\n );\n\n setValidationErrors(commonVal);\n }, [dispatch, podAffinity, nodeSelectorLabels]);\n\n const updateToleration = (index: number, field: string, value: any) => {\n const alterToleration = { ...tolerations[index], [field]: value };\n\n dispatch(\n setTolerationInfo({\n index: index,\n tolerationValue: alterToleration,\n }),\n );\n };\n\n return (\n \n \n \n Pod Placement\n \n Configure how pods will be assigned to nodes\n \n \n \n Type\n \n \n MinIO supports multiple configurations for Pod Affinity\n \n {\n updateField(\"podAffinity\", e.target.value);\n }}\n selectorOptions={[\n { label: \"None\", value: \"none\" },\n { label: \"Default (Pod Anti-Affinity)\", value: \"default\" },\n { label: \"Node Selector\", value: \"nodeSelector\" },\n ]}\n displayInColumn\n />\n {podAffinity === \"nodeSelector\" && (\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"withPodAntiAffinity\", checked);\n }}\n label={\"With Pod Anti-Affinity\"}\n />\n \n

Labels

\n {validationErrors[\"labels\"]}\n \n {keyValuePairs &&\n keyValuePairs.map((kvp, i) => {\n return (\n \n \n {keyOptions.length > 0 && (\n {\n const newKey = value;\n const newLKP: LabelKeyPair = {\n key: newKey,\n value: keyValueMap[newKey][0],\n };\n const arrCp: LabelKeyPair[] = [\n ...keyValuePairs,\n ];\n arrCp[i] = newLKP;\n dispatch(setKeyValuePairs(arrCp));\n }}\n id=\"select-access-policy\"\n name=\"select-access-policy\"\n label={\"\"}\n value={kvp.key}\n options={keyOptions}\n />\n )}\n {keyOptions.length === 0 && (\n {\n const arrCp: LabelKeyPair[] = [\n ...keyValuePairs,\n ];\n arrCp[i] = {\n key: arrCp[i].key,\n value: e.target.value as string,\n };\n dispatch(setKeyValuePairs(arrCp));\n }}\n index={i}\n placeholder={\"Key\"}\n />\n )}\n \n \n {keyOptions.length > 0 && (\n {\n const arrCp: LabelKeyPair[] = [\n ...keyValuePairs,\n ];\n arrCp[i] = {\n key: arrCp[i].key,\n value: value,\n };\n dispatch(setKeyValuePairs(arrCp));\n }}\n id=\"select-access-policy\"\n name=\"select-access-policy\"\n label={\"\"}\n value={kvp.value}\n options={\n keyValueMap[kvp.key]\n ? keyValueMap[kvp.key].map((v) => {\n return { label: v, value: v };\n })\n : []\n }\n />\n )}\n {keyOptions.length === 0 && (\n {\n const arrCp: LabelKeyPair[] = [\n ...keyValuePairs,\n ];\n arrCp[i] = {\n key: arrCp[i].key,\n value: e.target.value as string,\n };\n dispatch(setKeyValuePairs(arrCp));\n }}\n index={i}\n placeholder={\"value\"}\n />\n )}\n \n \n \n {\n const arrCp = [...keyValuePairs];\n if (keyOptions.length > 0) {\n arrCp.push({\n key: keyOptions[0].value,\n value: keyValueMap[keyOptions[0].value][0],\n });\n } else {\n arrCp.push({ key: \"\", value: \"\" });\n }\n\n dispatch(setKeyValuePairs(arrCp));\n }}\n disabled={i !== keyValuePairs.length - 1}\n >\n \n \n \n \n {\n const arrCp = keyValuePairs.filter(\n (item, index) => index !== i,\n );\n dispatch(setKeyValuePairs(arrCp));\n }}\n disabled={keyValuePairs.length <= 1}\n >\n \n \n \n \n \n );\n })}\n \n
\n
\n )}\n \n \n

Tolerations

\n {validationErrors[\"tolerations\"]}\n \n {tolerations &&\n tolerations.map((tol, i) => {\n return (\n \n {\n updateToleration(i, \"effect\", value);\n }}\n tolerationKey={tol.key}\n onTolerationKeyChange={(value) => {\n updateToleration(i, \"key\", value);\n }}\n operator={tol.operator}\n onOperatorChange={(value) => {\n updateToleration(i, \"operator\", value);\n }}\n value={tol.value}\n onValueChange={(value) => {\n updateToleration(i, \"value\", value);\n }}\n tolerationSeconds={tol.tolerationSeconds?.seconds || 0}\n onSecondsChange={(value) => {\n updateToleration(i, \"tolerationSeconds\", {\n seconds: value,\n });\n }}\n index={i}\n />\n \n {\n dispatch(addNewToleration());\n }}\n disabled={i !== tolerations.length - 1}\n >\n \n \n \n\n \n dispatch(removeToleration(i))}\n disabled={tolerations.length <= 1}\n >\n \n \n \n \n );\n })}\n
\n
\n \n
\n
\n );\n};\n\nexport default Affinity;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { Box, FormLayout, InputBox, Switch } from \"mds\";\nimport { AppState, useAppDispatch } from \"../../../../../store\";\nimport { clearValidationError } from \"../../utils\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../utils/validationFunctions\";\nimport { isPageValid, updateAddField } from \"../createTenantSlice\";\nimport H3Section from \"../../../Common/H3Section\";\n\nconst Images = () => {\n const dispatch = useAppDispatch();\n\n const customImage = useSelector(\n (state: AppState) => state.createTenant.fields.configure.customImage,\n );\n const imageName = useSelector(\n (state: AppState) => state.createTenant.fields.configure.imageName,\n );\n const customDockerhub = useSelector(\n (state: AppState) => state.createTenant.fields.configure.customDockerhub,\n );\n const imageRegistry = useSelector(\n (state: AppState) => state.createTenant.fields.configure.imageRegistry,\n );\n const imageRegistryUsername = useSelector(\n (state: AppState) =>\n state.createTenant.fields.configure.imageRegistryUsername,\n );\n const imageRegistryPassword = useSelector(\n (state: AppState) =>\n state.createTenant.fields.configure.imageRegistryPassword,\n );\n\n const tenantCustom = useSelector(\n (state: AppState) => state.createTenant.fields.configure.tenantCustom,\n );\n\n const kesImage = useSelector(\n (state: AppState) => state.createTenant.fields.configure.kesImage,\n );\n\n const [validationErrors, setValidationErrors] = useState({});\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n updateAddField({ pageName: \"configure\", field: field, value: value }),\n );\n },\n [dispatch],\n );\n\n // Validation\n useEffect(() => {\n let customAccountValidation: IValidation[] = [];\n\n if (customImage) {\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"image\",\n required: false,\n value: imageName,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage: \"Format must be of form: 'minio/minio:VERSION'\",\n },\n {\n fieldKey: \"kesImage\",\n required: false,\n value: kesImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage: \"Format must be of form: 'minio/kes:VERSION'\",\n },\n ];\n if (customDockerhub) {\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"registry\",\n required: true,\n value: imageRegistry,\n },\n {\n fieldKey: \"registryUsername\",\n required: true,\n value: imageRegistryUsername,\n },\n {\n fieldKey: \"registryPassword\",\n required: true,\n value: imageRegistryPassword,\n },\n ];\n }\n }\n\n const commonVal = commonFormValidation(customAccountValidation);\n\n dispatch(\n isPageValid({\n pageName: \"configure\",\n valid: Object.keys(commonVal).length === 0,\n }),\n );\n\n setValidationErrors(commonVal);\n }, [\n customImage,\n imageName,\n kesImage,\n customDockerhub,\n imageRegistry,\n imageRegistryUsername,\n imageRegistryPassword,\n dispatch,\n tenantCustom,\n ]);\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n return (\n \n \n Container Images\n \n Specify the container images used by the Tenant and its features.\n \n \n\n ) => {\n updateField(\"imageName\", e.target.value);\n cleanValidation(\"image\");\n }}\n label=\"MinIO\"\n value={imageName}\n error={validationErrors[\"image\"] || \"\"}\n placeholder=\"minio/minio:RELEASE.2024-03-15T01-07-19Z\"\n />\n ) => {\n updateField(\"kesImage\", e.target.value);\n cleanValidation(\"kesImage\");\n }}\n label=\"KES\"\n value={kesImage}\n error={validationErrors[\"kesImage\"] || \"\"}\n placeholder=\"minio/kes:2024-03-13T17-52-13Z\"\n />\n\n {customImage && (\n \n \n

Custom Container Registry

\n
\n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"customDockerhub\", checked);\n }}\n label={\"Use a private container registry\"}\n />\n
\n )}\n {customDockerhub && (\n \n ) => {\n updateField(\"imageRegistry\", e.target.value);\n }}\n label=\"Endpoint\"\n value={imageRegistry}\n error={validationErrors[\"registry\"] || \"\"}\n placeholder=\"https://index.docker.io/v1/\"\n required\n />\n ) => {\n updateField(\"imageRegistryUsername\", e.target.value);\n }}\n label=\"Username\"\n value={imageRegistryUsername}\n error={validationErrors[\"registryUsername\"] || \"\"}\n required\n />\n ) => {\n updateField(\"imageRegistryPassword\", e.target.value);\n }}\n label=\"Password\"\n value={imageRegistryPassword}\n error={validationErrors[\"registryPassword\"] || \"\"}\n required\n />\n \n )}\n
\n );\n};\n\nexport default Images;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport { Box, SimpleHeader, Table, TableBody, TableCell, TableRow } from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport { AppState } from \"../../../../../store\";\nimport { niceBytes, EC0 } from \"../../../../../common/utils\";\n\nconst SizePreview = () => {\n const nodes = useSelector(\n (state: AppState) => state.createTenant.fields.tenantSize.nodes,\n );\n const memoryNode = useSelector(\n (state: AppState) =>\n state.createTenant.fields.tenantSize.resourcesMemoryRequest,\n );\n const ecParity = useSelector(\n (state: AppState) => state.createTenant.fields.tenantSize.ecParity,\n );\n\n const distribution = useSelector(\n (state: AppState) => state.createTenant.fields.tenantSize.distribution,\n );\n const ecParityCalc = useSelector(\n (state: AppState) => state.createTenant.fields.tenantSize.ecParityCalc,\n );\n\n const cpuToUse = useSelector(\n (state: AppState) =>\n state.createTenant.fields.tenantSize.resourcesCPURequest,\n );\n const integrationSelection = useSelector(\n (state: AppState) =>\n state.createTenant.fields.tenantSize.integrationSelection,\n );\n\n const usableInformation = ecParityCalc.storageFactors.find(\n (element) => element.erasureCode === ecParity,\n );\n\n return (\n \n \n \n \n \n Number of Servers\n \n {parseInt(nodes) > 0 ? nodes : \"-\"}\n \n \n {integrationSelection.typeSelection === \"\" &&\n integrationSelection.storageClass === \"\" && (\n \n \n Drives per Server\n \n {distribution ? distribution.disks : \"-\"}\n \n \n \n Drive Capacity\n \n {distribution ? niceBytes(distribution.pvSize) : \"-\"}\n \n \n \n )}\n\n \n Total Volumes\n \n {distribution ? distribution.persistentVolumes : \"-\"}\n \n \n {integrationSelection.typeSelection === \"\" &&\n integrationSelection.storageClass === \"\" && (\n \n \n Memory per Node\n \n {memoryNode} Gi\n \n \n \n \n CPU Selection\n \n \n {cpuToUse}\n \n \n \n )}\n \n
\n {ecParityCalc.error === 0 && usableInformation && (\n \n \n \n \n \n EC Parity\n \n {ecParity !== \"\" ? ecParity : \"-\"}\n \n \n \n Raw Capacity\n \n {niceBytes(ecParityCalc.rawCapacity)}\n \n \n \n Usable Capacity\n \n {ecParity === EC0\n ? niceBytes(ecParityCalc.rawCapacity)\n : niceBytes(usableInformation.maxCapacity)}\n \n \n \n \n Server Failures Tolerated\n \n \n {ecParity === EC0\n ? 0\n : distribution &&\n distribution.disks > 0 &&\n usableInformation.maxFailureTolerations\n ? Math.floor(\n usableInformation.maxFailureTolerations /\n distribution.disks,\n )\n : \"-\"}\n \n \n \n
\n
\n )}\n {integrationSelection.typeSelection !== \"\" &&\n integrationSelection.storageClass !== \"\" && (\n \n \n \n \n \n CPU\n \n {integrationSelection.CPU !== 0\n ? integrationSelection.CPU\n : \"-\"}\n \n \n \n Memory\n \n {integrationSelection.memory !== 0\n ? `${integrationSelection.memory} Gi`\n : \"-\"}\n \n \n \n Drives per Server\n \n {integrationSelection.drivesPerServer !== 0\n ? `${integrationSelection.drivesPerServer}`\n : \"-\"}\n \n \n \n \n Drive Size\n \n \n {integrationSelection.driveSize.driveSize}\n {integrationSelection.driveSize.sizeUnit}\n \n \n \n
\n
\n )}\n \n );\n};\n\nexport default SizePreview;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { ConfirmModalIcon, ProgressBar } from \"mds\";\nimport ConfirmDialog from \"../../../../Common/ModalWrapper/ConfirmDialog\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport { closeAddNSModal } from \"../../createTenantSlice\";\nimport { createNamespaceAsync } from \"../../thunks/namespaceThunks\";\n\nconst AddNamespaceModal = () => {\n const dispatch = useAppDispatch();\n\n const namespace = useSelector(\n (state: AppState) => state.createTenant.fields.nameTenant.namespace,\n );\n const addNamespaceLoading = useSelector(\n (state: AppState) => state.createTenant.addNSLoading,\n );\n const addNamespaceOpen = useSelector(\n (state: AppState) => state.createTenant.addNSOpen,\n );\n\n return (\n }\n isLoading={addNamespaceLoading}\n onConfirm={() => {\n dispatch(createNamespaceAsync());\n }}\n onClose={() => {\n dispatch(closeAddNSModal());\n }}\n confirmationContent={\n \n {addNamespaceLoading && }\n Are you sure you want to add a namespace called\n
\n \n {namespace}\n
\n ?\n \n }\n />\n );\n};\n\nexport default AddNamespaceModal;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useMemo } from \"react\";\nimport debounce from \"lodash/debounce\";\nimport { AddIcon, InputBox } from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport { openAddNSModal, setNamespace } from \"../../createTenantSlice\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport { IMkEnvs } from \"./utils\";\nimport { validateNamespaceAsync } from \"../../thunks/namespaceThunks\";\nimport AddNamespaceModal from \"../helpers/AddNamespaceModal\";\n\nconst NamespaceSelector = ({ formToRender }: { formToRender?: IMkEnvs }) => {\n const dispatch = useAppDispatch();\n\n const namespace = useSelector(\n (state: AppState) => state.createTenant.fields.nameTenant.namespace,\n );\n\n const showNSCreateButton = useSelector(\n (state: AppState) => state.createTenant.showNSCreateButton,\n );\n\n const namespaceError = useSelector(\n (state: AppState) => state.createTenant.validationErrors[\"namespace\"],\n );\n const openAddNSConfirm = useSelector(\n (state: AppState) => state.createTenant.addNSOpen,\n );\n\n const debounceNamespace = useMemo(\n () =>\n debounce(() => {\n dispatch(validateNamespaceAsync());\n }, 500),\n [dispatch],\n );\n\n useEffect(() => {\n if (namespace !== \"\") {\n debounceNamespace();\n // Cancel previous debounce calls during useEffect cleanup.\n return debounceNamespace.cancel;\n }\n }, [debounceNamespace, namespace]);\n\n const addNamespace = () => {\n dispatch(openAddNSModal());\n };\n\n return (\n \n {openAddNSConfirm && }\n ) => {\n dispatch(setNamespace(e.target.value));\n }}\n label=\"Namespace\"\n value={namespace}\n error={namespaceError || \"\"}\n overlayIcon={showNSCreateButton ? : null}\n overlayAction={addNamespace}\n required\n />\n \n );\n};\nexport default NamespaceSelector;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { Box, FormLayout, Grid, InputBox, Select } from \"mds\";\nimport get from \"lodash/get\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport { IMkEnvs, mkPanelConfigurations } from \"./utils\";\nimport {\n isPageValid,\n setStorageType,\n setTenantName,\n updateAddField,\n} from \"../../createTenantSlice\";\nimport { selFeatures } from \"../../../../consoleSlice\";\nimport SizePreview from \"../SizePreview\";\nimport TenantSize from \"./TenantSize\";\nimport NamespaceSelector from \"./NamespaceSelector\";\nimport H3Section from \"../../../../Common/H3Section\";\n\nconst NameTenantField = () => {\n const dispatch = useAppDispatch();\n const tenantName = useSelector(\n (state: AppState) => state.createTenant.fields.nameTenant.tenantName,\n );\n\n const tenantNameError = useSelector(\n (state: AppState) => state.createTenant.validationErrors[\"tenant-name\"],\n );\n\n return (\n ) => {\n dispatch(setTenantName(e.target.value));\n }}\n label=\"Name\"\n value={tenantName}\n required\n error={tenantNameError || \"\"}\n />\n );\n};\n\ninterface INameTenantMainScreen {\n formToRender?: IMkEnvs;\n}\n\nconst NameTenantMain = ({ formToRender }: INameTenantMainScreen) => {\n const dispatch = useAppDispatch();\n\n const selectedStorageClass = useSelector(\n (state: AppState) =>\n state.createTenant.fields.nameTenant.selectedStorageClass,\n );\n const selectedStorageType = useSelector(\n (state: AppState) =>\n state.createTenant.fields.nameTenant.selectedStorageType,\n );\n const storageClasses = useSelector(\n (state: AppState) => state.createTenant.storageClasses,\n );\n const features = useSelector(selFeatures);\n\n // Common\n const updateField = useCallback(\n (field: string, value: string) => {\n dispatch(\n updateAddField({ pageName: \"nameTenant\", field: field, value: value }),\n );\n },\n [dispatch],\n );\n\n // Validation\n useEffect(() => {\n const isValid =\n (formToRender === IMkEnvs.default && storageClasses.length > 0) ||\n (formToRender !== IMkEnvs.default && selectedStorageType !== \"\");\n\n dispatch(isPageValid({ pageName: \"nameTenant\", valid: isValid }));\n }, [storageClasses, dispatch, selectedStorageType, formToRender]);\n\n return (\n \n \n \n \n \n \n Name\n \n How would you like to name this new tenant?\n \n \n \n \n {formToRender === IMkEnvs.default ? (\n {\n updateField(\"selectedStorageClass\", value);\n }}\n label=\"Storage Class\"\n value={selectedStorageClass}\n options={storageClasses}\n disabled={storageClasses.length < 1}\n />\n ) : (\n {\n dispatch(\n setStorageType({\n storageType: value,\n features: features,\n }),\n );\n }}\n label={get(\n mkPanelConfigurations,\n `${formToRender}.variantSelectorLabel`,\n \"Storage Type\",\n )}\n value={selectedStorageType}\n options={get(\n mkPanelConfigurations,\n `${formToRender}.variantSelectorValues`,\n [],\n )}\n />\n )}\n {formToRender === IMkEnvs.default ? (\n \n ) : (\n get(\n mkPanelConfigurations,\n `${formToRender}.sizingComponent`,\n null,\n )\n )}\n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default NameTenantMain;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport get from \"lodash/get\";\nimport NameTenantMain from \"./NameTenantMain\";\nimport { IMkEnvs, resourcesConfigurations } from \"./utils\";\nimport { selFeatures } from \"../../../../consoleSlice\";\n\nconst TenantResources = () => {\n const features = useSelector(selFeatures);\n const [formRender, setFormRender] = useState(null);\n\n useEffect(() => {\n let setConfiguration = IMkEnvs.default;\n\n if (features && features.length !== 0) {\n const possibleVariables = Object.keys(resourcesConfigurations);\n\n possibleVariables.forEach((element) => {\n if (features.includes(element)) {\n setConfiguration = get(\n resourcesConfigurations,\n element,\n IMkEnvs.default,\n );\n }\n });\n }\n\n setFormRender(setConfiguration);\n }, [features]);\n\n if (formRender === null) {\n return null;\n }\n\n return ;\n};\n\nexport default TenantResources;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nexport const requiredPages = [\n \"nameTenant\",\n \"tenantSize\",\n \"configure\",\n \"affinity\",\n \"identityProvider\",\n \"security\",\n \"encryption\",\n];\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { Button } from \"mds\";\nimport React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport { requiredPages } from \"./common\";\nimport { createTenantAsync } from \"./thunks/createTenantThunk\";\n\nconst CreateTenantButton = () => {\n const dispatch = useAppDispatch();\n\n const addSending = useSelector(\n (state: AppState) => state.createTenant.addingTenant,\n );\n\n const validPages = useSelector(\n (state: AppState) => state.createTenant.validPages,\n );\n\n const selectedStorageClass = useSelector(\n (state: AppState) =>\n state.createTenant.fields.nameTenant.selectedStorageClass,\n );\n\n const enabled =\n !addSending &&\n selectedStorageClass !== \"\" &&\n requiredPages.every((v) => validPages.includes(v));\n\n return (\n {\n dispatch(createTenantAsync());\n }}\n disabled={!enabled}\n key={`button-AddTenant-Create`}\n label={\"Create\"}\n />\n );\n};\n\nexport default CreateTenantButton;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport CredentialsPrompt from \"../../Common/CredentialsPrompt/CredentialsPrompt\";\nimport { resetAddTenantForm } from \"./createTenantSlice\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport { useNavigate } from \"react-router-dom\";\n\nconst NewTenantCredentials = () => {\n const dispatch = useAppDispatch();\n const navigate = useNavigate();\n\n const showNewCredentials = useSelector(\n (state: AppState) => state.createTenant.showNewCredentials,\n );\n const createdAccount = useSelector(\n (state: AppState) => state.createTenant.createdAccount,\n );\n\n return (\n \n {showNewCredentials && (\n {\n dispatch(resetAddTenantForm());\n navigate(\"/tenants\");\n }}\n entity=\"Tenant\"\n />\n )}\n \n );\n};\n\nexport default NewTenantCredentials;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport get from \"lodash/get\";\nimport {\n BackLink,\n Box,\n Grid,\n HelpBox,\n PageLayout,\n ProgressBar,\n StorageIcon,\n Wizard,\n WizardButton,\n WizardElement,\n} from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport { useNavigate } from \"react-router-dom\";\nimport {\n IMkEnvs,\n resourcesConfigurations,\n} from \"./Steps/TenantResources/utils\";\nimport { selFeatures } from \"../../consoleSlice\";\nimport { resetAddTenantForm } from \"./createTenantSlice\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport Configure from \"./Steps/Configure\";\nimport IdentityProvider from \"./Steps/IdentityProvider\";\nimport Security from \"./Steps/Security\";\nimport Encryption from \"./Steps/Encryption\";\nimport Affinity from \"./Steps/Affinity\";\nimport Images from \"./Steps/Images\";\nimport TenantResources from \"./Steps/TenantResources/TenantResources\";\nimport CreateTenantButton from \"./CreateTenantButton\";\nimport NewTenantCredentials from \"./NewTenantCredentials\";\nimport PageHeaderWrapper from \"../../Common/PageHeaderWrapper/PageHeaderWrapper\";\n\nconst AddTenant = () => {\n const dispatch = useAppDispatch();\n const navigate = useNavigate();\n\n const features = useSelector(selFeatures);\n\n // Fields\n const addSending = useSelector(\n (state: AppState) => state.createTenant.addingTenant,\n );\n const [formRender, setFormRender] = useState(null);\n\n useEffect(() => {\n let setConfiguration = IMkEnvs.default;\n\n if (features && features.length !== 0) {\n const possibleVariables = Object.keys(resourcesConfigurations);\n\n possibleVariables.forEach((element) => {\n if (features.includes(element)) {\n setConfiguration = get(\n resourcesConfigurations,\n element,\n IMkEnvs.default,\n );\n }\n });\n }\n\n setFormRender(setConfiguration);\n }, [features]);\n\n const cancelButton = {\n label: \"Cancel\",\n type: \"custom\" as \"to\" | \"custom\" | \"next\" | \"back\",\n enabled: true,\n action: () => {\n dispatch(resetAddTenantForm());\n navigate(\"/tenants\");\n },\n };\n\n const createButton: WizardButton = {\n componentRender: ,\n };\n\n const wizardSteps: WizardElement[] = [\n {\n label: \"Setup\",\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n {\n label: \"Configure\",\n advancedOnly: true,\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n {\n label: \"Images\",\n advancedOnly: true,\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n {\n label: \"Pod Placement\",\n advancedOnly: true,\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n {\n label: \"Identity Provider\",\n advancedOnly: true,\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n {\n label: \"Security\",\n advancedOnly: true,\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n {\n label: \"Encryption\",\n advancedOnly: true,\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n ];\n\n return (\n \n \n {\n dispatch(resetAddTenantForm());\n navigate(\"/tenants\");\n }}\n label={\"Tenants\"}\n />\n }\n />\n\n \n {addSending && (\n \n \n \n )}\n \n \n \n {formRender === IMkEnvs.aws && (\n \n }\n help={\n \n Performance Optimized: Uses the gp3 EBS storage\n class class configured at 1,000Mi/s throughput and 16,000\n IOPS, however the minimum volume size for this type of EBS\n volume is 32Gi.\n
\n
\n Storage Optimized: Uses the sc1 EBS storage\n class, however the minimum volume size for this type of EBS\n volume is  \n 16Ti to unlock their maximum throughput speed of\n 250Mi/s.\n
\n }\n />\n
\n )}\n
\n
\n );\n};\n\nexport default AddTenant;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { CertificateIcon, Box, breakPoints } from \"mds\";\nimport { useParams } from \"react-router-dom\";\nimport { AppState } from \"../../../../store\";\n\nconst FeatureItem = ({\n icon,\n description,\n}: {\n icon: any;\n description: string;\n}) => {\n return (\n \n {icon}{\" \"}\n \n {description}\n \n \n );\n};\nconst TLSHelpBox = () => {\n const params = useParams();\n const tenantNameParam = params.tenantName || \"\";\n const tenantNamespaceParam = params.tenantNamespace || \"\";\n const namespace = useSelector((state: AppState) => {\n let defaultNamespace = \"\";\n if (tenantNamespaceParam !== \"\") {\n return tenantNamespaceParam;\n }\n if (state.createTenant.fields.nameTenant.namespace !== \"\") {\n return state.createTenant.fields.nameTenant.namespace;\n }\n return defaultNamespace;\n });\n\n const tenantName = useSelector((state: AppState) => {\n let defaultTenantName = \"\";\n if (tenantNameParam !== \"\") {\n return tenantNameParam;\n }\n\n if (state.createTenant.fields.nameTenant.tenantName !== \"\") {\n return state.createTenant.fields.nameTenant.tenantName;\n }\n return defaultTenantName;\n });\n\n return (\n \n \n }\n description={`TLS Certificates Warning`}\n />\n \n Automatic certificate generation is not enabled.\n
\n
\n If you wish to continue only with custom certificates make sure\n they are valid for the following internode hostnames, i.e.:\n
\n
\n \n minio.{namespace}\n
\n minio.{namespace}.svc\n
\n minio.{namespace}.svc.<cluster domain>\n
\n *.{tenantName}-hl.{namespace}.svc.<cluster domain>\n
\n *.{namespace}.svc.<cluster domain>\n
\n
\n Replace <tenant-name>,{\" \"}\n <namespace> and\n <cluster domain> with the actual values for your\n MinIO tenant.\n
\n
\n You can learn more at our{\" \"}\n \n documentation\n \n .\n \n \n \n );\n};\n\nexport default TLSHelpBox;\n"],"names":["ConfigureMain","styled","div","marginRight","marginBottom","display","flexGrow","flexFlow","alignItems","justifyContent","borderBottom","flex","minWidth","marginLeft","Configure","dispatch","useAppDispatch","exposeMinIO","useSelector","state","createTenant","fields","configure","exposeConsole","exposeSFTP","setDomains","consoleDomain","minioDomains","tenantCustom","tenantEnvVars","envVars","tenantSecurityContext","customRuntime","runtimeClassName","validationErrors","setValidationErrors","useState","updateField","useCallback","field","value","updateAddField","pageName","useEffect","customAccountValidation","fieldKey","required","runAsUser","customValidation","parseInt","customValidationMessage","runAsGroup","fsGroup","minioExtraValidations","map","validation","index","concat","toString","pattern","customPatternMessage","commonVal","commonFormValidation","isPageValid","valid","Object","keys","length","cleanValidation","fieldName","clearValidationError","_jsx","children","_jsxs","FormLayout","withBorders","containerPadding","Box","className","H3Section","style","margin","Switch","id","name","checked","onChange","e","target","label","Grid","item","xs","InputBox","placeholder","error","domain","updateMinIODomain","copyDomains","IconButton","size","onClick","addNewMinIODomain","disabled","AddIcon","removeMinIODomain","RemoveIcon","type","min","Select","fsGroupChangePolicy","options","runAsNonRoot","container","envVar","key","existingEnvVars","setEnvVars","keyPair","i","push","filter","fIndex","IDPActiveDirectory","idpSelection","identityProvider","ADURL","ADSkipTLS","ADServerInsecure","ADGroupSearchBaseDN","ADGroupSearchFilter","ADUserDNs","ADGroupDNs","ADLookupBindDN","ADLookupBindPassword","ADUserDNSearchBaseDN","ADUserDNSearchFilter","ADServerStartTLS","customIDPValidation","sx","gap","marginTop","_","Fragment","setIDPADUsrAtIndex","userDN","Tooltip","tooltip","addIDPADUsrAtIndex","removeIDPADUsrAtIndex","setIDPADGroupAtIndex","addIDPADGroupAtIndex","removeIDPADGroupAtIndex","IDPOpenID","openIDConfigurationURL","openIDClientID","openIDSecretID","openIDClaimName","openIDScopes","IDPBuiltIn","accessKeys","secretKeys","gridTemplateColumns","setIDPUsrAtIndex","accessKey","setIDPPwdAtIndex","secretKey","height","addIDPNewKeyPair","removeIDPKeyPairAtIndex","getRandomString","ShuffleIcon","IdentityProvider","padding","RadioGroup","currentValue","setIDP","selectorOptions","icon","UsersIcon","OIDCIcon","LDAPIcon","CertificateRow","_ref","theme","get","breakPoints","md","Security","enableTLS","security","enableAutoCert","enableCustomCerts","minioCertificates","certificates","minioServerCertificates","minioClientCertificates","caCertificates","minioCAsCertificates","description","TLSHelpBox","FileSelector","fileName","encodedValue","addFileToKeyPair","accept","cert","returnEncodedData","event","addKeyPair","deleteKeyPair","addFileToClientKeyPair","addClientKeyPair","deleteClientKeyPair","addFileToCaCertificates","addCaCertificate","deleteCaCertificate","VaultKMSAdd","encryptionTab","encryption","vaultEndpoint","vaultEngine","vaultNamespace","vaultPrefix","vaultAppRoleEngine","vaultId","vaultSecret","vaultRetry","vaultPing","encryptionValidation","AzureKMSAdd","azureEndpoint","azureTenantID","azureClientID","azureClientSecret","GCPKMSAdd","gcpProjectID","gcpEndpoint","gcpClientEmail","gcpClientID","gcpPrivateKeyID","gcpPrivateKey","GemaltoKMSAdd","gemaltoEndpoint","gemaltoToken","gemaltoDomain","gemaltoRetry","AWSKMSAdd","awsEndpoint","awsRegion","awsKMSKey","awsAccessKey","awsSecretKey","awsToken","Encryption","replicas","rawConfiguration","enableEncryption","encryptionType","enableCustomCertsForKES","kesServerCertificate","minioMTLSCertificate","kmsMTLSCertificate","kmsCA","kesSecurityContext","encryptionAvailable","encoded_key","encoded_cert","indicatorLabels","Tabs","horizontal","currentTabOrPath","onTabClick","tabConfig","content","CodeEditor","mode","editorHeight","SimpleHeader","addFileKESServerCert","addFileMinIOMTLSCert","addFileKMSMTLSCert","addFileKMSCa","AffinityContainer","Affinity","podAffinity","affinity","nodeSelectorLabels","withPodAntiAffinity","keyValuePairs","nodeSelectorPairs","tolerations","loading","setLoading","keyValueMap","setKeyValueMap","keyOptions","setKeyOptions","api","invoke","then","res","k","catch","err","setModalErrorSnackMessage","vl","kvp","kvs","a","indexOf","join","splittedLabels","split","forEach","splitItem","updateToleration","alterToleration","setTolerationInfo","tolerationValue","InputLabel","displayInColumn","newLKP","arrCp","setKeyValuePairs","v","tol","_tol$tolerationSecond","TolerationSelector","effect","onEffectChange","tolerationKey","onTolerationKeyChange","operator","onOperatorChange","onValueChange","tolerationSeconds","seconds","onSecondsChange","addNewToleration","removeToleration","Images","customImage","imageName","customDockerhub","imageRegistry","imageRegistryUsername","imageRegistryPassword","kesImage","SizePreview","nodes","tenantSize","memoryNode","resourcesMemoryRequest","ecParity","distribution","ecParityCalc","cpuToUse","resourcesCPURequest","integrationSelection","usableInformation","storageFactors","find","element","erasureCode","fontSize","Table","TableBody","TableRow","TableCell","scope","textAlign","typeSelection","storageClass","disks","niceBytes","pvSize","persistentVolumes","rawCapacity","EC0","maxCapacity","maxFailureTolerations","Math","floor","CPU","memory","drivesPerServer","driveSize","sizeUnit","AddNamespaceModal","namespace","nameTenant","addNamespaceLoading","addNSLoading","addNamespaceOpen","addNSOpen","ConfirmDialog","title","confirmText","confirmButtonProps","variant","isOpen","titleIcon","ConfirmModalIcon","isLoading","onConfirm","createNamespaceAsync","onClose","closeAddNSModal","confirmationContent","ProgressBar","maxWidth","whiteSpace","wordWrap","formToRender","showNSCreateButton","namespaceError","openAddNSConfirm","debounceNamespace","useMemo","debounce","validateNamespaceAsync","cancel","setNamespace","overlayIcon","overlayAction","addNamespace","openAddNSModal","NameTenantField","tenantName","tenantNameError","setTenantName","selectedStorageClass","selectedStorageType","storageClasses","features","selFeatures","isValid","IMkEnvs","default","width","minHeight","NamespaceSelector","setStorageType","storageType","mkPanelConfigurations","TenantSize","sm","useBackground","TenantResources","formRender","setFormRender","setConfiguration","resourcesConfigurations","includes","NameTenantMain","requiredPages","CreateTenantButton","addSending","addingTenant","validPages","enabled","every","Button","color","createTenantAsync","NewTenantCredentials","navigate","useNavigate","showNewCredentials","createdAccount","CredentialsPrompt","newServiceAccount","open","closeModal","resetAddTenantForm","entity","AddTenant","cancelButton","action","createButton","componentRender","wizardSteps","buttons","advancedOnly","PageHeaderWrapper","BackLink","PageLayout","customBorderPadding","Wizard","linearMode","aws","HelpBox","iconComponent","StorageIcon","help","FeatureItem","fontStyle","params","useParams","tenantNameParam","tenantNamespaceParam","tenantNamespace","border","borderRadius","CertificateIcon","href","rel"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/619.87b2158f.chunk.js b/web-app/build/static/js/619.87b2158f.chunk.js deleted file mode 100644 index 1eeea200bb6..00000000000 --- a/web-app/build/static/js/619.87b2158f.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[619],{8619:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>x});var n=r(5043),o=r(3097),a=r.n(o),i=r(4574),l=r(9923),c=r(4141),s=r(1476),u=r.n(s),p=r(2961),d=r(4159),f=r(579);const y=e=>{let{label:t="",value:r=""}=e;const n=(0,p.jL)();return(0,f.jsxs)(l.azJ,{sx:{marginTop:12},children:[(0,f.jsx)(l.l1Y,{children:t}),(0,f.jsx)(l.EmB,{actionButton:(0,f.jsx)(u(),{text:r,children:(0,f.jsx)(l.$nd,{id:"copy-path",variant:"regular",onClick:()=>{n((0,d.h0)("".concat(t," copied to clipboard")))},style:{marginRight:"5px",width:"28px",height:"28px",padding:"0px"},icon:(0,f.jsx)(l.TdU,{})})}),children:r})]})};var m=r(6681),h=r(7403);const b=i.Ay.div((e=>{let{theme:t}=e;return{color:a()(t,"signalColors.danger","#C51B3F"),fontSize:".85rem",margin:".5rem 0 .5rem 0",display:"flex",alignItems:"center","& svg ":{marginRight:".3rem",height:16,width:16}}})),g=(e,t)=>{let r=document.createElement("a");r.setAttribute("href","data:text/plain;charset=utf-8,"+t),r.setAttribute("download",e),r.style.display="none",document.body.appendChild(r),r.click(),document.body.removeChild(r)},x=e=>{let{newServiceAccount:t,open:r,closeModal:o,entity:i}=e;if(!t)return null;const s=a()(t,"console",null),u=a()(t,"idp",!1);return(0,f.jsx)(c.A,{modalOpen:r,onClose:()=>{o()},title:"New ".concat(i," Created"),titleIcon:(0,f.jsx)(l.kQt,{}),children:(0,f.jsxs)(l.xA9,{container:!0,children:[(0,f.jsxs)(l.xA9,{item:!0,xs:12,children:["A new ",i," has been created with the following details:",!u&&s&&(0,f.jsx)(n.Fragment,{children:(0,f.jsxs)(l.xA9,{item:!0,xs:12,sx:{overflowY:"auto",maxHeight:350},children:[(0,f.jsx)(l.azJ,{sx:{padding:".8rem 0 0 0",fontWeight:600,fontSize:".9rem"},children:"Console Credentials"}),Array.isArray(s)&&s.map(((e,t)=>(0,f.jsxs)(n.Fragment,{children:[(0,f.jsx)(y,{label:"Access Key",value:e.accessKey}),(0,f.jsx)(y,{label:"Secret Key",value:e.secretKey})]}))),!Array.isArray(s)&&(0,f.jsxs)(n.Fragment,{children:[(0,f.jsx)(y,{label:"Access Key",value:s.accessKey}),(0,f.jsx)(y,{label:"Secret Key",value:s.secretKey})]})]})}),(null===s||void 0===s)&&(0,f.jsxs)(f.Fragment,{children:[(0,f.jsx)(y,{label:"Access Key",value:t.accessKey||""}),(0,f.jsx)(y,{label:"Secret Key",value:t.secretKey||""})]}),u?(0,f.jsx)(b,{children:"Please Login via the configured external identity provider."}):(0,f.jsxs)(b,{children:[(0,f.jsx)(l.cJw,{}),(0,f.jsx)("span",{children:"Write these down, as this is the only time the secret will be displayed."})]})]}),(0,f.jsx)(l.xA9,{item:!0,xs:12,sx:{...h.U.modalButtonBar},children:!u&&(0,f.jsxs)(n.Fragment,{children:[(0,f.jsx)(m.A,{tooltip:"Download credentials in a JSON file formatted for import using mc alias import. This will only include the default login credentials.",children:(0,f.jsx)(l.$nd,{id:"download-button",label:"Download for import",onClick:()=>{let e={};if(s)if(Array.isArray(s)){e=s.map((e=>({url:e.url,accessKey:e.accessKey,secretKey:e.secretKey,api:"s3v4",path:"auto"})))[0]}else e={url:s.url,accessKey:s.accessKey,secretKey:s.secretKey,api:"s3v4",path:"auto"};else e={url:t.url,accessKey:t.accessKey,secretKey:t.secretKey,api:"s3v4",path:"auto"};g("credentials.json",JSON.stringify({...e}))},icon:(0,f.jsx)(l.s3U,{}),variant:"callAction"})}),Array.isArray(s)&&s.length>1&&(0,f.jsx)(m.A,{tooltip:"Download all access credentials to a JSON file. NOTE: This file is not formatted for import using mc alias import. If you plan to import this alias from the file, please use the Download for Import button. ",children:(0,f.jsx)(l.$nd,{id:"download-all-button",label:"Download all access credentials",onClick:()=>{let e={};if(s&&Array.isArray(s)&&s.length>1){e=s.map((e=>({accessKey:e.accessKey,secretKey:e.secretKey})))}g("all_credentials.json",JSON.stringify({...e}))},icon:(0,f.jsx)(l.s3U,{}),variant:"callAction",color:"primary"})})]})})]})})}},7403:(e,t,r)=>{"use strict";r.d(t,{U:()=>o,_:()=>n});const n={label:{color:"#07193E",fontSize:13,alignSelf:"center",whiteSpace:"nowrap","&:not(:first-of-type)":{marginLeft:10}},actionsTray:{display:"flex",justifyContent:"space-between",marginBottom:"1rem",alignItems:"center","& button":{flexGrow:0,marginLeft:8}}},o={modalButtonBar:{marginTop:15,display:"flex",alignItems:"center",justifyContent:"flex-end","& button":{marginRight:10},"& button:last-child":{marginRight:0}},modalFormScrollable:{maxHeight:"calc(100vh - 300px)",overflowY:"auto",paddingTop:10}}},4141:(e,t,r)=>{"use strict";r.d(t,{A:()=>u});var n=r(5043),o=r(9456),a=r(9923),i=r(2961),l=r(4159),c=r(9555),s=r(579);const u=e=>{let{onClose:t,modalOpen:r,title:u,children:p,wideLimit:d=!0,titleIcon:f=null,iconColor:y="default",sx:m}=e;const h=(0,i.jL)(),[b,g]=(0,n.useState)(!1),x=(0,o.d4)((e=>e.system.modalSnackBar));(0,n.useEffect)((()=>{h((0,l.h0)(""))}),[h]),(0,n.useEffect)((()=>{if(x){if(""===x.message)return void g(!1);"error"!==x.type&&g(!0)}}),[x]);let v="";return x&&(v=x.detailedErrorMsg,(""===x.detailedErrorMsg||x.detailedErrorMsg.length<5)&&(v=x.message)),(0,s.jsxs)(a.ngX,{onClose:t,open:r,title:u,titleIcon:f,widthLimit:d,sx:m,iconColor:y,children:[(0,s.jsx)(c.A,{isModal:!0}),(0,s.jsx)(a.qb_,{onClose:()=>{g(!1),h((0,l.h0)(""))},open:b,message:v,mode:"inline",variant:"error"===x.type?"error":"default",autoHideDuration:"error"===x.type?10:5,condensed:!0}),p]})}},5270:(e,t,r)=>{"use strict";var n=r(139),o={"text/plain":"Text","text/html":"Url",default:"Text"};e.exports=function(e,t){var r,a,i,l,c,s,u=!1;t||(t={}),r=t.debug||!1;try{if(i=n(),l=document.createRange(),c=document.getSelection(),(s=document.createElement("span")).textContent=e,s.ariaHidden="true",s.style.all="unset",s.style.position="fixed",s.style.top=0,s.style.clip="rect(0, 0, 0, 0)",s.style.whiteSpace="pre",s.style.webkitUserSelect="text",s.style.MozUserSelect="text",s.style.msUserSelect="text",s.style.userSelect="text",s.addEventListener("copy",(function(n){if(n.stopPropagation(),t.format)if(n.preventDefault(),"undefined"===typeof n.clipboardData){r&&console.warn("unable to use e.clipboardData"),r&&console.warn("trying IE specific stuff"),window.clipboardData.clearData();var a=o[t.format]||o.default;window.clipboardData.setData(a,e)}else n.clipboardData.clearData(),n.clipboardData.setData(t.format,e);t.onCopy&&(n.preventDefault(),t.onCopy(n.clipboardData))})),document.body.appendChild(s),l.selectNodeContents(s),c.addRange(l),!document.execCommand("copy"))throw new Error("copy command was unsuccessful");u=!0}catch(p){r&&console.error("unable to copy using execCommand: ",p),r&&console.warn("trying IE specific stuff");try{window.clipboardData.setData(t.format||"text",e),t.onCopy&&t.onCopy(window.clipboardData),u=!0}catch(p){r&&console.error("unable to copy using clipboardData: ",p),r&&console.error("falling back to prompt"),a=function(e){var t=(/mac os x/i.test(navigator.userAgent)?"\u2318":"Ctrl")+"+C";return e.replace(/#{\s*key\s*}/g,t)}("message"in t?t.message:"Copy to clipboard: #{key}, Enter"),window.prompt(a,e)}}finally{c&&("function"==typeof c.removeRange?c.removeRange(l):c.removeAllRanges()),s&&document.body.removeChild(s),i()}return u}},2099:(e,t,r)=>{"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.CopyToClipboard=void 0;var o=l(r(5043)),a=l(r(5270)),i=["text","onCopy","options","children"];function l(e){return e&&e.__esModule?e:{default:e}}function c(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function s(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function p(e,t){for(var r=0;r{"use strict";var n=r(2099).CopyToClipboard;n.CopyToClipboard=n,e.exports=n},139:e=>{e.exports=function(){var e=document.getSelection();if(!e.rangeCount)return function(){};for(var t=document.activeElement,r=[],n=0;n.\n\nimport React from \"react\";\nimport { Box, Button, CopyIcon, InputLabel, ReadBox } from \"mds\";\nimport CopyToClipboard from \"react-copy-to-clipboard\";\nimport { useAppDispatch } from \"../../../../store\";\nimport { setModalSnackMessage } from \"../../../../systemSlice\";\n\ninterface ICredentialsItem {\n label?: string;\n value?: string;\n}\n\nconst CredentialItem = ({ label = \"\", value = \"\" }: ICredentialsItem) => {\n const dispatch = useAppDispatch();\n\n return (\n \n {label}\n \n {\n dispatch(setModalSnackMessage(`${label} copied to clipboard`));\n }}\n style={{\n marginRight: \"5px\",\n width: \"28px\",\n height: \"28px\",\n padding: \"0px\",\n }}\n icon={}\n />\n \n }\n >\n {value}\n \n \n );\n};\n\nexport default CredentialItem;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport get from \"lodash/get\";\nimport styled from \"styled-components\";\nimport {\n Box,\n Button,\n DownloadIcon,\n ServiceAccountCredentialsIcon,\n WarnIcon,\n Grid,\n} from \"mds\";\nimport { NewServiceAccount } from \"./types\";\nimport ModalWrapper from \"../ModalWrapper/ModalWrapper\";\nimport CredentialItem from \"./CredentialItem\";\nimport TooltipWrapper from \"../TooltipWrapper/TooltipWrapper\";\nimport { modalStyleUtils } from \"../FormComponents/common/styleLibrary\";\n\nconst WarningBlock = styled.div(({ theme }) => ({\n color: get(theme, \"signalColors.danger\", \"#C51B3F\"),\n fontSize: \".85rem\",\n margin: \".5rem 0 .5rem 0\",\n display: \"flex\",\n alignItems: \"center\",\n \"& svg \": {\n marginRight: \".3rem\",\n height: 16,\n width: 16,\n },\n}));\n\ninterface ICredentialsPromptProps {\n newServiceAccount: NewServiceAccount | null;\n open: boolean;\n entity: string;\n closeModal: () => void;\n}\n\nconst download = (filename: string, text: string) => {\n let element = document.createElement(\"a\");\n element.setAttribute(\"href\", \"data:text/plain;charset=utf-8,\" + text);\n element.setAttribute(\"download\", filename);\n\n element.style.display = \"none\";\n document.body.appendChild(element);\n\n element.click();\n document.body.removeChild(element);\n};\n\nconst CredentialsPrompt = ({\n newServiceAccount,\n open,\n closeModal,\n entity,\n}: ICredentialsPromptProps) => {\n if (!newServiceAccount) {\n return null;\n }\n const consoleCreds = get(newServiceAccount, \"console\", null);\n const idp = get(newServiceAccount, \"idp\", false);\n\n const downloadImport = () => {\n let consoleExtras = {};\n\n if (consoleCreds) {\n if (!Array.isArray(consoleCreds)) {\n consoleExtras = {\n url: consoleCreds.url,\n accessKey: consoleCreds.accessKey,\n secretKey: consoleCreds.secretKey,\n api: \"s3v4\",\n path: \"auto\",\n };\n } else {\n const cCreds = consoleCreds.map((itemMap) => {\n return {\n url: itemMap.url,\n accessKey: itemMap.accessKey,\n secretKey: itemMap.secretKey,\n api: \"s3v4\",\n path: \"auto\",\n };\n });\n consoleExtras = cCreds[0];\n }\n } else {\n consoleExtras = {\n url: newServiceAccount.url,\n accessKey: newServiceAccount.accessKey,\n secretKey: newServiceAccount.secretKey,\n api: \"s3v4\",\n path: \"auto\",\n };\n }\n\n download(\n \"credentials.json\",\n JSON.stringify({\n ...consoleExtras,\n }),\n );\n };\n\n const downloaddAllCredentials = () => {\n let allCredentials = {};\n if (\n consoleCreds &&\n Array.isArray(consoleCreds) &&\n consoleCreds.length > 1\n ) {\n const cCreds = consoleCreds.map((itemMap) => {\n return {\n accessKey: itemMap.accessKey,\n secretKey: itemMap.secretKey,\n };\n });\n allCredentials = cCreds;\n }\n download(\n \"all_credentials.json\",\n JSON.stringify({\n ...allCredentials,\n }),\n );\n };\n\n return (\n {\n closeModal();\n }}\n title={`New ${entity} Created`}\n titleIcon={}\n >\n \n \n A new {entity} has been created with the following details:\n {!idp && consoleCreds && (\n \n \n \n Console Credentials\n \n {Array.isArray(consoleCreds) &&\n consoleCreds.map((credentialsPair, index) => {\n return (\n \n \n \n \n );\n })}\n {!Array.isArray(consoleCreds) && (\n \n \n \n \n )}\n \n \n )}\n {(consoleCreds === null || consoleCreds === undefined) && (\n <>\n \n \n \n )}\n {idp ? (\n \n Please Login via the configured external identity provider.\n \n ) : (\n \n \n \n Write these down, as this is the only time the secret will be\n displayed.\n \n \n )}\n \n \n {!idp && (\n \n \n }\n variant=\"callAction\"\n />\n \n\n {Array.isArray(consoleCreds) && consoleCreds.length > 1 && (\n \n }\n variant=\"callAction\"\n color=\"primary\"\n />\n \n )}\n \n )}\n \n \n \n );\n};\n\nexport default CredentialsPrompt;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\n// This object contains variables that will be used across form components.\n\nexport const actionsTray = {\n label: {\n color: \"#07193E\",\n fontSize: 13,\n alignSelf: \"center\" as const,\n whiteSpace: \"nowrap\" as const,\n \"&:not(:first-of-type)\": {\n marginLeft: 10,\n },\n },\n actionsTray: {\n display: \"flex\" as const,\n justifyContent: \"space-between\" as const,\n marginBottom: \"1rem\",\n alignItems: \"center\",\n \"& button\": {\n flexGrow: 0,\n marginLeft: 8,\n },\n },\n};\n\nexport const modalStyleUtils: any = {\n modalButtonBar: {\n marginTop: 15,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n\n \"& button\": {\n marginRight: 10,\n },\n \"& button:last-child\": {\n marginRight: 0,\n },\n },\n modalFormScrollable: {\n maxHeight: \"calc(100vh - 300px)\",\n overflowY: \"auto\",\n paddingTop: 10,\n },\n};\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React, { useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { ModalBox, Snackbar } from \"mds\";\nimport { CSSObject } from \"styled-components\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport { setModalSnackMessage } from \"../../../../systemSlice\";\nimport MainError from \"../MainError/MainError\";\n\ninterface IModalProps {\n onClose: () => void;\n modalOpen: boolean;\n title: string | React.ReactNode;\n children: any;\n wideLimit?: boolean;\n titleIcon?: React.ReactNode;\n iconColor?: \"default\" | \"delete\" | \"accept\";\n sx?: CSSObject;\n}\n\nconst ModalWrapper = ({\n onClose,\n modalOpen,\n title,\n children,\n wideLimit = true,\n titleIcon = null,\n iconColor = \"default\",\n sx,\n}: IModalProps) => {\n const dispatch = useAppDispatch();\n const [openSnackbar, setOpenSnackbar] = useState(false);\n\n const modalSnackMessage = useSelector(\n (state: AppState) => state.system.modalSnackBar,\n );\n\n useEffect(() => {\n dispatch(setModalSnackMessage(\"\"));\n }, [dispatch]);\n\n useEffect(() => {\n if (modalSnackMessage) {\n if (modalSnackMessage.message === \"\") {\n setOpenSnackbar(false);\n return;\n }\n // Open SnackBar\n if (modalSnackMessage.type !== \"error\") {\n setOpenSnackbar(true);\n }\n }\n }, [modalSnackMessage]);\n\n const closeSnackBar = () => {\n setOpenSnackbar(false);\n dispatch(setModalSnackMessage(\"\"));\n };\n\n let message = \"\";\n\n if (modalSnackMessage) {\n message = modalSnackMessage.detailedErrorMsg;\n if (\n modalSnackMessage.detailedErrorMsg === \"\" ||\n modalSnackMessage.detailedErrorMsg.length < 5\n ) {\n message = modalSnackMessage.message;\n }\n }\n\n return (\n \n \n \n {children}\n \n );\n};\n\nexport default ModalWrapper;\n","\"use strict\";\n\nvar deselectCurrent = require(\"toggle-selection\");\n\nvar clipboardToIE11Formatting = {\n \"text/plain\": \"Text\",\n \"text/html\": \"Url\",\n \"default\": \"Text\"\n}\n\nvar defaultMessage = \"Copy to clipboard: #{key}, Enter\";\n\nfunction format(message) {\n var copyKey = (/mac os x/i.test(navigator.userAgent) ? \"⌘\" : \"Ctrl\") + \"+C\";\n return message.replace(/#{\\s*key\\s*}/g, copyKey);\n}\n\nfunction copy(text, options) {\n var debug,\n message,\n reselectPrevious,\n range,\n selection,\n mark,\n success = false;\n if (!options) {\n options = {};\n }\n debug = options.debug || false;\n try {\n reselectPrevious = deselectCurrent();\n\n range = document.createRange();\n selection = document.getSelection();\n\n mark = document.createElement(\"span\");\n mark.textContent = text;\n // avoid screen readers from reading out loud the text\n mark.ariaHidden = \"true\"\n // reset user styles for span element\n mark.style.all = \"unset\";\n // prevents scrolling to the end of the page\n mark.style.position = \"fixed\";\n mark.style.top = 0;\n mark.style.clip = \"rect(0, 0, 0, 0)\";\n // used to preserve spaces and line breaks\n mark.style.whiteSpace = \"pre\";\n // do not inherit user-select (it may be `none`)\n mark.style.webkitUserSelect = \"text\";\n mark.style.MozUserSelect = \"text\";\n mark.style.msUserSelect = \"text\";\n mark.style.userSelect = \"text\";\n mark.addEventListener(\"copy\", function(e) {\n e.stopPropagation();\n if (options.format) {\n e.preventDefault();\n if (typeof e.clipboardData === \"undefined\") { // IE 11\n debug && console.warn(\"unable to use e.clipboardData\");\n debug && console.warn(\"trying IE specific stuff\");\n window.clipboardData.clearData();\n var format = clipboardToIE11Formatting[options.format] || clipboardToIE11Formatting[\"default\"]\n window.clipboardData.setData(format, text);\n } else { // all other browsers\n e.clipboardData.clearData();\n e.clipboardData.setData(options.format, text);\n }\n }\n if (options.onCopy) {\n e.preventDefault();\n options.onCopy(e.clipboardData);\n }\n });\n\n document.body.appendChild(mark);\n\n range.selectNodeContents(mark);\n selection.addRange(range);\n\n var successful = document.execCommand(\"copy\");\n if (!successful) {\n throw new Error(\"copy command was unsuccessful\");\n }\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using execCommand: \", err);\n debug && console.warn(\"trying IE specific stuff\");\n try {\n window.clipboardData.setData(options.format || \"text\", text);\n options.onCopy && options.onCopy(window.clipboardData);\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using clipboardData: \", err);\n debug && console.error(\"falling back to prompt\");\n message = format(\"message\" in options ? options.message : defaultMessage);\n window.prompt(message, text);\n }\n } finally {\n if (selection) {\n if (typeof selection.removeRange == \"function\") {\n selection.removeRange(range);\n } else {\n selection.removeAllRanges();\n }\n }\n\n if (mark) {\n document.body.removeChild(mark);\n }\n reselectPrevious();\n }\n\n return success;\n}\n\nmodule.exports = copy;\n","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.CopyToClipboard = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _copyToClipboard = _interopRequireDefault(require(\"copy-to-clipboard\"));\n\nvar _excluded = [\"text\", \"onCopy\", \"options\", \"children\"];\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar CopyToClipboard = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(CopyToClipboard, _React$PureComponent);\n\n var _super = _createSuper(CopyToClipboard);\n\n function CopyToClipboard() {\n var _this;\n\n _classCallCheck(this, CopyToClipboard);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"onClick\", function (event) {\n var _this$props = _this.props,\n text = _this$props.text,\n onCopy = _this$props.onCopy,\n children = _this$props.children,\n options = _this$props.options;\n\n var elem = _react[\"default\"].Children.only(children);\n\n var result = (0, _copyToClipboard[\"default\"])(text, options);\n\n if (onCopy) {\n onCopy(text, result);\n } // Bypass onClick if it was present\n\n\n if (elem && elem.props && typeof elem.props.onClick === 'function') {\n elem.props.onClick(event);\n }\n });\n\n return _this;\n }\n\n _createClass(CopyToClipboard, [{\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n _text = _this$props2.text,\n _onCopy = _this$props2.onCopy,\n _options = _this$props2.options,\n children = _this$props2.children,\n props = _objectWithoutProperties(_this$props2, _excluded);\n\n var elem = _react[\"default\"].Children.only(children);\n\n return /*#__PURE__*/_react[\"default\"].cloneElement(elem, _objectSpread(_objectSpread({}, props), {}, {\n onClick: this.onClick\n }));\n }\n }]);\n\n return CopyToClipboard;\n}(_react[\"default\"].PureComponent);\n\nexports.CopyToClipboard = CopyToClipboard;\n\n_defineProperty(CopyToClipboard, \"defaultProps\", {\n onCopy: undefined,\n options: undefined\n});","\"use strict\";\n\nvar _require = require('./Component'),\n CopyToClipboard = _require.CopyToClipboard;\n\nCopyToClipboard.CopyToClipboard = CopyToClipboard;\nmodule.exports = CopyToClipboard;","\nmodule.exports = function () {\n var selection = document.getSelection();\n if (!selection.rangeCount) {\n return function () {};\n }\n var active = document.activeElement;\n\n var ranges = [];\n for (var i = 0; i < selection.rangeCount; i++) {\n ranges.push(selection.getRangeAt(i));\n }\n\n switch (active.tagName.toUpperCase()) { // .toUpperCase handles XHTML\n case 'INPUT':\n case 'TEXTAREA':\n active.blur();\n break;\n\n default:\n active = null;\n break;\n }\n\n selection.removeAllRanges();\n return function () {\n selection.type === 'Caret' &&\n selection.removeAllRanges();\n\n if (!selection.rangeCount) {\n ranges.forEach(function(range) {\n selection.addRange(range);\n });\n }\n\n active &&\n active.focus();\n };\n};\n"],"names":["_ref","label","value","dispatch","useAppDispatch","_jsxs","Box","sx","marginTop","children","_jsx","InputLabel","ReadBox","actionButton","CopyToClipboard","text","Button","id","variant","onClick","setModalSnackMessage","concat","style","marginRight","width","height","padding","icon","CopyIcon","WarningBlock","styled","div","theme","color","get","fontSize","margin","display","alignItems","download","filename","element","document","createElement","setAttribute","body","appendChild","click","removeChild","_ref2","newServiceAccount","open","closeModal","entity","consoleCreds","idp","ModalWrapper","modalOpen","onClose","title","titleIcon","ServiceAccountCredentialsIcon","Grid","container","item","xs","Fragment","overflowY","maxHeight","fontWeight","Array","isArray","map","credentialsPair","index","CredentialItem","accessKey","secretKey","undefined","_Fragment","WarnIcon","modalStyleUtils","modalButtonBar","TooltipWrapper","tooltip","downloadImport","consoleExtras","itemMap","url","api","path","JSON","stringify","DownloadIcon","length","downloaddAllCredentials","allCredentials","actionsTray","alignSelf","whiteSpace","marginLeft","justifyContent","marginBottom","flexGrow","modalFormScrollable","paddingTop","wideLimit","iconColor","openSnackbar","setOpenSnackbar","useState","modalSnackMessage","useSelector","state","system","modalSnackBar","useEffect","message","type","detailedErrorMsg","ModalBox","widthLimit","MainError","isModal","Snackbar","closeSnackBar","mode","autoHideDuration","condensed","deselectCurrent","require","clipboardToIE11Formatting","module","exports","options","debug","reselectPrevious","range","selection","mark","success","createRange","getSelection","textContent","ariaHidden","all","position","top","clip","webkitUserSelect","MozUserSelect","msUserSelect","userSelect","addEventListener","e","stopPropagation","format","preventDefault","clipboardData","console","warn","window","clearData","setData","onCopy","selectNodeContents","addRange","execCommand","Error","err","error","copyKey","test","navigator","userAgent","replace","prompt","removeRange","removeAllRanges","_typeof","obj","Symbol","iterator","constructor","prototype","Object","defineProperty","_react","_interopRequireDefault","_copyToClipboard","_excluded","__esModule","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","source","forEach","key","_defineProperty","getOwnPropertyDescriptors","defineProperties","_objectWithoutProperties","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","call","_defineProperties","props","descriptor","configurable","writable","_setPrototypeOf","o","p","setPrototypeOf","__proto__","_createSuper","Derived","hasNativeReflectConstruct","Reflect","construct","sham","Proxy","Boolean","valueOf","_isNativeReflectConstruct","result","Super","_getPrototypeOf","NewTarget","this","self","TypeError","_assertThisInitialized","_possibleConstructorReturn","ReferenceError","getPrototypeOf","_React$PureComponent","subClass","superClass","create","_inherits","Constructor","protoProps","staticProps","_super","_this","instance","_classCallCheck","_len","args","_key","event","_this$props","elem","Children","only","_this$props2","cloneElement","PureComponent","rangeCount","active","activeElement","ranges","getRangeAt","tagName","toUpperCase","blur","focus"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/629.e9da79a6.chunk.js b/web-app/build/static/js/629.e9da79a6.chunk.js deleted file mode 100644 index 774ebe53b27..00000000000 --- a/web-app/build/static/js/629.e9da79a6.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[629],{2237:(e,t,n)=>{n.d(t,{A:()=>l});var a=n(5043),s=n(579);const l=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return function(n){return(0,s.jsx)(a.Suspense,{fallback:t,children:(0,s.jsx)(e,{...n})})}}},2629:(e,t,n)=>{n.r(t),n.d(t,{default:()=>_});var a=n(5043),s=n(9456),l=n(9923),i=n(3216),o=n(4574),r=n(3097),d=n.n(r),c=n(2961),h=n(6483),x=n(9161),j=n(4159),m=n(9607),p=n(8296),b=n(7612),u=n(2237),y=n(6681),g=n(4770),f=n(579);const C=(0,u.A)(a.lazy((()=>n.e(122).then(n.bind(n,8122))))),A=(0,u.A)(a.lazy((()=>Promise.all([n.e(829),n.e(979)]).then(n.bind(n,5979))))),v=(0,u.A)(a.lazy((()=>Promise.all([n.e(241),n.e(481)]).then(n.bind(n,8481))))),z=(0,u.A)(a.lazy((()=>n.e(415).then(n.bind(n,2415))))),q=(0,u.A)(a.lazy((()=>n.e(414).then(n.bind(n,3414))))),k=(0,u.A)(a.lazy((()=>n.e(112).then(n.bind(n,112))))),P=(0,u.A)(a.lazy((()=>n.e(943).then(n.bind(n,3943))))),T=(0,u.A)(a.lazy((()=>n.e(732).then(n.bind(n,732))))),E=(0,u.A)(a.lazy((()=>n.e(204).then(n.bind(n,2204))))),N=(0,u.A)(a.lazy((()=>n.e(104).then(n.bind(n,104))))),B=(0,u.A)(a.lazy((()=>n.e(728).then(n.bind(n,3728))))),w=(0,u.A)(a.lazy((()=>n.e(682).then(n.bind(n,4682))))),F=(0,u.A)(a.lazy((()=>Promise.all([n.e(241),n.e(723)]).then(n.bind(n,3104))))),M=(0,u.A)(a.lazy((()=>Promise.all([n.e(241),n.e(713)]).then(n.bind(n,8094))))),S=(0,u.A)(a.lazy((()=>n.e(461).then(n.bind(n,8461))))),L=(0,u.A)(a.lazy((()=>Promise.all([n.e(64),n.e(666)]).then(n.bind(n,5367))))),R=(0,u.A)(a.lazy((()=>n.e(641).then(n.bind(n,9641))))),$=o.Ay.div((e=>{let{theme:t}=e;return{position:"relative",fontSize:10,left:26,height:10,top:4,"& .statusIcon":{color:d()(t,"signalColors.disabled","#E6EBEB"),"&.red":{color:d()(t,"signalColors.danger","#C51B3F")},"&.yellow":{color:d()(t,"signalColors.warning","#FFBD62")},"&.green":{color:d()(t,"signalColors.good","#4CCB92")}}}})),_=()=>{var e;const t=(0,c.jL)(),n=(0,i.g)(),o=(0,i.Zp)(),{pathname:r=""}=(0,i.zy)(),d=(0,s.d4)((e=>e.tenants.loadingTenant)),u=(0,s.d4)((e=>e.tenants.currentTenant)),_=(0,s.d4)((e=>e.tenants.currentNamespace)),D=(0,s.d4)((e=>e.tenants.tenantInfo)),I=n.tenantName||"",O=n.tenantNamespace||"",[V,Y]=(0,a.useState)(!1);(0,a.useEffect)((()=>{_===O&&u===I||(t((0,m.s1)({name:I,namespace:O})),t((0,p.X)()))}),[u,_,t,I,O]);const G=e=>"/namespaces/".concat(O,"/tenants/").concat(I,"/").concat(e);return(0,f.jsxs)(a.Fragment,{children:[V&&null!==D&&(0,f.jsx)(S,{deleteOpen:V,selectedTenant:D,closeDeleteModalAndRefresh:e=>{Y(!1),e&&(t((0,j.Hk)("Tenant Deleted")),o("/tenants"))}}),(0,f.jsx)(g.A,{label:(0,f.jsx)(a.Fragment,{children:(0,f.jsx)(l.EGL,{label:"Tenants",onClick:()=>o(x.zZ.TENANTS)})}),actions:(0,f.jsx)(a.Fragment,{})}),(0,f.jsxs)(l.Mxu,{variant:"constrained",children:[d&&(0,f.jsx)(l.xA9,{item:!0,xs:12,children:(0,f.jsx)(l.z21,{})}),(0,f.jsx)(l.azJ,{withBorders:!0,customBorderPadding:"0px",sx:{borderBottom:0},children:(0,f.jsx)(l.lcx,{icon:(0,f.jsxs)(a.Fragment,{children:[(0,f.jsx)($,{children:D&&D.status&&(0,f.jsx)("span",{className:"statusIcon ".concat(null===(e=D.status)||void 0===e?void 0:e.health_status),children:(0,f.jsx)(l.GQ2,{style:{width:15,height:15}})})}),(0,f.jsx)(l.fmr,{})]}),title:I,subTitle:(0,f.jsxs)(a.Fragment,{children:["Namespace: ",O," / Capacity:"," ",(0,h.nO)(((null===D||void 0===D?void 0:D.total_size)||0).toString(10))]}),actions:(0,f.jsxs)(l.azJ,{sx:{display:"flex",justifyContent:"flex-end",gap:10},children:[(0,f.jsx)(y.A,{tooltip:"Delete",children:(0,f.jsx)(l.$nd,{id:"delete-tenant",variant:"secondary",onClick:()=>{Y(!0)},color:"secondary",icon:(0,f.jsx)(l.ucK,{})})}),(0,f.jsx)(y.A,{tooltip:"Edit YAML",children:(0,f.jsx)(l.$nd,{icon:(0,f.jsx)(l.qUP,{}),id:"yaml_button",variant:"regular","aria-label":"Edit YAML",onClick:()=>{o(G("summary/yaml"))}})}),(0,f.jsx)(y.A,{tooltip:"Management Console",children:(0,f.jsx)(l.$nd,{id:"tenant-hop",onClick:()=>{o("/namespaces/".concat(O,"/tenants/").concat(I,"/hop"))},disabled:!D||!(0,b.an)(D),variant:"regular",icon:(0,f.jsx)(l.$2v,{style:{height:16}})})}),(0,f.jsx)(y.A,{tooltip:"Refresh",children:(0,f.jsx)(l.$nd,{id:"tenant-refresh",variant:"regular","aria-label":"Refresh List",onClick:()=>{t((0,p.X)())},icon:(0,f.jsx)(l.fNY,{})})})]})})}),(0,f.jsx)(l.tUM,{currentTabOrPath:r,useRouteTabs:!0,onTabClick:e=>o(e),routes:(0,f.jsxs)(i.BV,{children:[(0,f.jsx)(i.qh,{path:"summary",element:(0,f.jsx)(A,{})}),(0,f.jsx)(i.qh,{path:"configuration",element:(0,f.jsx)(R,{})}),(0,f.jsx)(i.qh,{path:"summary/yaml",element:(0,f.jsx)(C,{})}),(0,f.jsx)(i.qh,{path:"metrics",element:(0,f.jsx)(E,{})}),(0,f.jsx)(i.qh,{path:"trace",element:(0,f.jsx)(N,{})}),(0,f.jsx)(i.qh,{path:"identity-provider",element:(0,f.jsx)(w,{})}),(0,f.jsx)(i.qh,{path:"security",element:(0,f.jsx)(F,{})}),(0,f.jsx)(i.qh,{path:"encryption",element:(0,f.jsx)(M,{})}),(0,f.jsx)(i.qh,{path:"pools",element:(0,f.jsx)(z,{})}),(0,f.jsx)(i.qh,{path:"pods/:podName",element:(0,f.jsx)(L,{})}),(0,f.jsx)(i.qh,{path:"pods",element:(0,f.jsx)(q,{})}),(0,f.jsx)(i.qh,{path:"pvcs/:PVCName",element:(0,f.jsx)(B,{})}),(0,f.jsx)(i.qh,{path:"volumes",element:(0,f.jsx)(T,{})}),(0,f.jsx)(i.qh,{path:"license",element:(0,f.jsx)(v,{})}),(0,f.jsx)(i.qh,{path:"events",element:(0,f.jsx)(k,{})}),(0,f.jsx)(i.qh,{path:"csr",element:(0,f.jsx)(P,{})}),(0,f.jsx)(i.qh,{path:"/",element:(0,f.jsx)(i.C5,{to:"/namespaces/".concat(O,"/tenants/").concat(I,"/summary")})})]}),options:[{tabConfig:{label:"Summary",id:"details-summary",to:G("summary")}},{tabConfig:{label:"Configuration",id:"details-configuration",to:G("configuration")}},{tabConfig:{label:"Metrics",id:"details-metrics",to:G("metrics")}},{tabConfig:{label:"Identity Provider",id:"details-idp",to:G("identity-provider")}},{tabConfig:{label:"Security",id:"details-security",to:G("security")}},{tabConfig:{label:"Encryption",id:"details-encryption",to:G("encryption")}},{tabConfig:{label:"Pools",id:"details-pools",to:G("pools")}},{tabConfig:{label:"Pods",id:"tenant-pod-tab",to:G("pods")}},{tabConfig:{label:"Volumes",id:"details-volumes",to:G("volumes")}},{tabConfig:{label:"Events",id:"details-events",to:G("events")}},{tabConfig:{label:"Certificate Requests",id:"details-csr",to:G("csr")}},{tabConfig:{label:"License",id:"details-license",to:G("license")}}]})]})]})}}}]); -//# sourceMappingURL=629.e9da79a6.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/629.e9da79a6.chunk.js.map b/web-app/build/static/js/629.e9da79a6.chunk.js.map deleted file mode 100644 index baae736ba9d..00000000000 --- a/web-app/build/static/js/629.e9da79a6.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/629.e9da79a6.chunk.js","mappings":"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","sources":["screens/Console/Common/Components/withSuspense.tsx","screens/Console/Tenants/TenantDetails/TenantDetails.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { ComponentType, Suspense, SuspenseProps } from \"react\";\n\nfunction withSuspense

(\n WrappedComponent: ComponentType

,\n fallback: SuspenseProps[\"fallback\"] = null,\n) {\n function ComponentWithSuspense(props: P) {\n return (\n \n \n \n );\n }\n\n return ComponentWithSuspense;\n}\n\nexport default withSuspense;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport {\n BackLink,\n Box,\n Button,\n CircleIcon,\n EditIcon,\n Grid,\n MinIOTierIconXs,\n PageLayout,\n ProgressBar,\n RefreshIcon,\n ScreenTitle,\n Tabs,\n TenantsIcon,\n TrashIcon,\n} from \"mds\";\nimport {\n Navigate,\n Route,\n Routes,\n useLocation,\n useNavigate,\n useParams,\n} from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport get from \"lodash/get\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport { niceBytes } from \"../../../../common/utils\";\nimport { IAM_PAGES } from \"../../../../common/SecureComponent/permissions\";\nimport { setSnackBarMessage } from \"../../../../systemSlice\";\nimport { setTenantName } from \"../tenantsSlice\";\nimport { getTenantAsync } from \"../thunks/tenantDetailsAsync\";\nimport { tenantIsOnline } from \"./utils\";\nimport withSuspense from \"../../Common/Components/withSuspense\";\nimport TooltipWrapper from \"../../Common/TooltipWrapper/TooltipWrapper\";\nimport PageHeaderWrapper from \"../../Common/PageHeaderWrapper/PageHeaderWrapper\";\n\nconst TenantYAML = withSuspense(React.lazy(() => import(\"./TenantYAML\")));\nconst TenantSummary = withSuspense(React.lazy(() => import(\"./TenantSummary\")));\nconst TenantLicense = withSuspense(React.lazy(() => import(\"./TenantLicense\")));\nconst PoolsSummary = withSuspense(React.lazy(() => import(\"./PoolsSummary\")));\nconst PodsSummary = withSuspense(React.lazy(() => import(\"./PodsSummary\")));\nconst TenantEvents = withSuspense(React.lazy(() => import(\"./TenantEvents\")));\nconst TenantCSR = withSuspense(React.lazy(() => import(\"./TenantCSR\")));\nconst VolumesSummary = withSuspense(\n React.lazy(() => import(\"./VolumesSummary\")),\n);\nconst TenantMetrics = withSuspense(React.lazy(() => import(\"./TenantMetrics\")));\nconst TenantTrace = withSuspense(React.lazy(() => import(\"./TenantTrace\")));\nconst TenantVolumes = withSuspense(\n React.lazy(() => import(\"./pvcs/TenantVolumes\")),\n);\nconst TenantIdentityProvider = withSuspense(\n React.lazy(() => import(\"./TenantIdentityProvider\")),\n);\nconst TenantSecurity = withSuspense(\n React.lazy(() => import(\"./TenantSecurity\")),\n);\nconst TenantEncryption = withSuspense(\n React.lazy(() => import(\"./TenantEncryption\")),\n);\nconst DeleteTenant = withSuspense(\n React.lazy(() => import(\"../ListTenants/DeleteTenant\")),\n);\nconst PodDetails = withSuspense(React.lazy(() => import(\"./pods/PodDetails\")));\n\nconst TenantConfiguration = withSuspense(\n React.lazy(() => import(\"./TenantConfiguration\")),\n);\n\nconst HealthsStatusIcon = styled.div(({ theme }) => ({\n position: \"relative\",\n fontSize: 10,\n left: 26,\n height: 10,\n top: 4,\n \"& .statusIcon\": {\n color: get(theme, \"signalColors.disabled\", \"#E6EBEB\"),\n \"&.red\": {\n color: get(theme, \"signalColors.danger\", \"#C51B3F\"),\n },\n \"&.yellow\": {\n color: get(theme, \"signalColors.warning\", \"#FFBD62\"),\n },\n \"&.green\": {\n color: get(theme, \"signalColors.good\", \"#4CCB92\"),\n },\n },\n}));\n\nconst TenantDetails = () => {\n const dispatch = useAppDispatch();\n const params = useParams();\n const navigate = useNavigate();\n const { pathname = \"\" } = useLocation();\n\n const loadingTenant = useSelector(\n (state: AppState) => state.tenants.loadingTenant,\n );\n const selectedTenant = useSelector(\n (state: AppState) => state.tenants.currentTenant,\n );\n const selectedNamespace = useSelector(\n (state: AppState) => state.tenants.currentNamespace,\n );\n const tenantInfo = useSelector((state: AppState) => state.tenants.tenantInfo);\n\n const tenantName = params.tenantName || \"\";\n const tenantNamespace = params.tenantNamespace || \"\";\n const [deleteOpen, setDeleteOpen] = useState(false);\n\n // if the current tenant selected is not the one in the redux, reload it\n useEffect(() => {\n if (\n selectedNamespace !== tenantNamespace ||\n selectedTenant !== tenantName\n ) {\n dispatch(\n setTenantName({\n name: tenantName,\n namespace: tenantNamespace,\n }),\n );\n dispatch(getTenantAsync());\n }\n }, [\n selectedTenant,\n selectedNamespace,\n dispatch,\n tenantName,\n tenantNamespace,\n ]);\n\n const editYaml = () => {\n navigate(getRoutePath(\"summary/yaml\"));\n };\n\n const getRoutePath = (newValue: string) => {\n return `/namespaces/${tenantNamespace}/tenants/${tenantName}/${newValue}`;\n };\n\n const confirmDeleteTenant = () => {\n setDeleteOpen(true);\n };\n\n const closeDeleteModalAndRefresh = (reloadData: boolean) => {\n setDeleteOpen(false);\n\n if (reloadData) {\n dispatch(setSnackBarMessage(\"Tenant Deleted\"));\n navigate(`/tenants`);\n }\n };\n\n return (\n \n {deleteOpen && tenantInfo !== null && (\n \n )}\n\n \n navigate(IAM_PAGES.TENANTS)}\n />\n \n }\n actions={}\n />\n\n \n {loadingTenant && (\n \n \n \n )}\n \n \n \n {tenantInfo && tenantInfo.status && (\n \n \n \n )}\n \n \n \n }\n title={tenantName}\n subTitle={\n \n Namespace: {tenantNamespace} / Capacity:{\" \"}\n {niceBytes((tenantInfo?.total_size || 0).toString(10))}\n \n }\n actions={\n \n \n {\n confirmDeleteTenant();\n }}\n color=\"secondary\"\n icon={}\n />\n \n \n }\n id={\"yaml_button\"}\n variant=\"regular\"\n aria-label=\"Edit YAML\"\n onClick={() => {\n editYaml();\n }}\n />\n \n \n {\n navigate(\n `/namespaces/${tenantNamespace}/tenants/${tenantName}/hop`,\n );\n }}\n disabled={!tenantInfo || !tenantIsOnline(tenantInfo)}\n variant={\"regular\"}\n icon={}\n />\n \n \n {\n dispatch(getTenantAsync());\n }}\n icon={}\n />\n \n \n }\n />\n \n\n navigate(route)}\n routes={\n \n } />\n } />\n } />\n } />\n } />\n }\n />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n \n }\n />\n \n }\n options={[\n {\n tabConfig: {\n label: \"Summary\",\n id: `details-summary`,\n to: getRoutePath(\"summary\"),\n },\n },\n {\n tabConfig: {\n label: \"Configuration\",\n id: `details-configuration`,\n to: getRoutePath(\"configuration\"),\n },\n },\n {\n tabConfig: {\n label: \"Metrics\",\n id: `details-metrics`,\n to: getRoutePath(\"metrics\"),\n },\n },\n {\n tabConfig: {\n label: \"Identity Provider\",\n id: `details-idp`,\n to: getRoutePath(\"identity-provider\"),\n },\n },\n {\n tabConfig: {\n label: \"Security\",\n id: `details-security`,\n to: getRoutePath(\"security\"),\n },\n },\n {\n tabConfig: {\n label: \"Encryption\",\n id: `details-encryption`,\n to: getRoutePath(\"encryption\"),\n },\n },\n {\n tabConfig: {\n label: \"Pools\",\n id: `details-pools`,\n to: getRoutePath(\"pools\"),\n },\n },\n {\n tabConfig: {\n label: \"Pods\",\n id: \"tenant-pod-tab\",\n to: getRoutePath(\"pods\"),\n },\n },\n\n {\n tabConfig: {\n label: \"Volumes\",\n id: `details-volumes`,\n to: getRoutePath(\"volumes\"),\n },\n },\n {\n tabConfig: {\n label: \"Events\",\n id: `details-events`,\n to: getRoutePath(\"events\"),\n },\n },\n {\n tabConfig: {\n label: \"Certificate Requests\",\n id: `details-csr`,\n to: getRoutePath(\"csr\"),\n },\n },\n {\n tabConfig: {\n label: \"License\",\n id: `details-license`,\n to: getRoutePath(\"license\"),\n },\n },\n ]}\n />\n \n \n );\n};\n\nexport default TenantDetails;\n"],"names":["WrappedComponent","fallback","arguments","length","undefined","props","_jsx","Suspense","children","TenantYAML","withSuspense","React","TenantSummary","TenantLicense","PoolsSummary","PodsSummary","TenantEvents","TenantCSR","VolumesSummary","TenantMetrics","TenantTrace","TenantVolumes","TenantIdentityProvider","TenantSecurity","TenantEncryption","DeleteTenant","PodDetails","TenantConfiguration","HealthsStatusIcon","styled","div","_ref","theme","position","fontSize","left","height","top","color","get","TenantDetails","_tenantInfo$status","dispatch","useAppDispatch","params","useParams","navigate","useNavigate","pathname","useLocation","loadingTenant","useSelector","state","tenants","selectedTenant","currentTenant","selectedNamespace","currentNamespace","tenantInfo","tenantName","tenantNamespace","deleteOpen","setDeleteOpen","useState","useEffect","setTenantName","name","namespace","getTenantAsync","getRoutePath","newValue","concat","_jsxs","Fragment","closeDeleteModalAndRefresh","reloadData","setSnackBarMessage","PageHeaderWrapper","label","BackLink","onClick","IAM_PAGES","TENANTS","actions","PageLayout","variant","Grid","item","xs","ProgressBar","Box","withBorders","customBorderPadding","sx","borderBottom","ScreenTitle","icon","status","className","health_status","CircleIcon","style","width","TenantsIcon","title","subTitle","niceBytes","total_size","toString","display","justifyContent","gap","TooltipWrapper","tooltip","Button","id","TrashIcon","EditIcon","disabled","tenantIsOnline","MinIOTierIconXs","RefreshIcon","Tabs","currentTabOrPath","useRouteTabs","onTabClick","route","routes","Routes","Route","path","element","Navigate","to","options","tabConfig"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/64.2066437f.chunk.js b/web-app/build/static/js/64.2066437f.chunk.js deleted file mode 100644 index 3abdeaa7cdd..00000000000 --- a/web-app/build/static/js/64.2066437f.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[64],{3024:(e,t,o)=>{function i(e){var t,o,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;tn});const n=function(){for(var e,t,o=0,n="";o{function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}o.d(t,{t$:()=>Q,dl:()=>ie,jS:()=>ne,B8:()=>we});var n=o(816);function r(e,t){for(var o=0;o=0&&a===s&&c())}function S(e,t){if(null==e)return{};var o,i,n=function(e,t){if(null==e)return{};var o,i,n={},r=Object.keys(e);for(i=0;i=0||(n[o]=e[o]);return n}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(n[o]=e[o])}return n}var C=function(){function e(t){var o=t.cellCount,n=t.cellSizeGetter,r=t.estimatedCellSize;i(this,e),(0,f.A)(this,"_cellSizeAndPositionData",{}),(0,f.A)(this,"_lastMeasuredIndex",-1),(0,f.A)(this,"_lastBatchedIndex",-1),(0,f.A)(this,"_cellCount",void 0),(0,f.A)(this,"_cellSizeGetter",void 0),(0,f.A)(this,"_estimatedCellSize",void 0),this._cellSizeGetter=n,this._cellCount=o,this._estimatedCellSize=r}return l(e,[{key:"areOffsetsAdjusted",value:function(){return!1}},{key:"configure",value:function(e){var t=e.cellCount,o=e.estimatedCellSize,i=e.cellSizeGetter;this._cellCount=t,this._estimatedCellSize=o,this._cellSizeGetter=i}},{key:"getCellCount",value:function(){return this._cellCount}},{key:"getEstimatedCellSize",value:function(){return this._estimatedCellSize}},{key:"getLastMeasuredIndex",value:function(){return this._lastMeasuredIndex}},{key:"getOffsetAdjustment",value:function(){return 0}},{key:"getSizeAndPositionOfCell",value:function(e){if(e<0||e>=this._cellCount)throw Error("Requested index ".concat(e," is outside of range 0..").concat(this._cellCount));if(e>this._lastMeasuredIndex)for(var t=this.getSizeAndPositionOfLastMeasuredCell(),o=t.offset+t.size,i=this._lastMeasuredIndex+1;i<=e;i++){var n=this._cellSizeGetter({index:i});if(void 0===n||isNaN(n))throw Error("Invalid size returned for cell ".concat(i," of value ").concat(n));null===n?(this._cellSizeAndPositionData[i]={offset:o,size:0},this._lastBatchedIndex=e):(this._cellSizeAndPositionData[i]={offset:o,size:n},o+=n,this._lastMeasuredIndex=e)}return this._cellSizeAndPositionData[e]}},{key:"getSizeAndPositionOfLastMeasuredCell",value:function(){return this._lastMeasuredIndex>=0?this._cellSizeAndPositionData[this._lastMeasuredIndex]:{offset:0,size:0}}},{key:"getTotalSize",value:function(){var e=this.getSizeAndPositionOfLastMeasuredCell();return e.offset+e.size+(this._cellCount-this._lastMeasuredIndex-1)*this._estimatedCellSize}},{key:"getUpdatedOffsetForIndex",value:function(e){var t=e.align,o=void 0===t?"auto":t,i=e.containerSize,n=e.currentOffset,r=e.targetIndex;if(i<=0)return 0;var l,s=this.getSizeAndPositionOfCell(r),a=s.offset,c=a-i+s.size;switch(o){case"start":l=a;break;case"end":l=c;break;case"center":l=a-(i-s.size)/2;break;default:l=Math.max(c,Math.min(a,n))}var d=this.getTotalSize();return Math.max(0,Math.min(d-i,l))}},{key:"getVisibleCellRange",value:function(e){var t=e.containerSize,o=e.offset;if(0===this.getTotalSize())return{};var i=o+t,n=this._findNearestCell(o),r=this.getSizeAndPositionOfCell(n);o=r.offset+r.size;for(var l=n;oo&&(e=i-1)}return t>0?t-1:0}},{key:"_exponentialSearch",value:function(e,t){for(var o=1;e=e?this._binarySearch(o,0,e):this._exponentialSearch(o,e)}}]),e}(),y=function(){return"undefined"!==typeof window&&window.chrome?16777100:15e5},w=function(){function e(t){var o=t.maxScrollSize,n=void 0===o?y():o,r=S(t,["maxScrollSize"]);i(this,e),(0,f.A)(this,"_cellSizeAndPositionManager",void 0),(0,f.A)(this,"_maxScrollSize",void 0),this._cellSizeAndPositionManager=new C(r),this._maxScrollSize=n}return l(e,[{key:"areOffsetsAdjusted",value:function(){return this._cellSizeAndPositionManager.getTotalSize()>this._maxScrollSize}},{key:"configure",value:function(e){this._cellSizeAndPositionManager.configure(e)}},{key:"getCellCount",value:function(){return this._cellSizeAndPositionManager.getCellCount()}},{key:"getEstimatedCellSize",value:function(){return this._cellSizeAndPositionManager.getEstimatedCellSize()}},{key:"getLastMeasuredIndex",value:function(){return this._cellSizeAndPositionManager.getLastMeasuredIndex()}},{key:"getOffsetAdjustment",value:function(e){var t=e.containerSize,o=e.offset,i=this._cellSizeAndPositionManager.getTotalSize(),n=this.getTotalSize(),r=this._getOffsetPercentage({containerSize:t,offset:o,totalSize:n});return Math.round(r*(n-i))}},{key:"getSizeAndPositionOfCell",value:function(e){return this._cellSizeAndPositionManager.getSizeAndPositionOfCell(e)}},{key:"getSizeAndPositionOfLastMeasuredCell",value:function(){return this._cellSizeAndPositionManager.getSizeAndPositionOfLastMeasuredCell()}},{key:"getTotalSize",value:function(){return Math.min(this._maxScrollSize,this._cellSizeAndPositionManager.getTotalSize())}},{key:"getUpdatedOffsetForIndex",value:function(e){var t=e.align,o=void 0===t?"auto":t,i=e.containerSize,n=e.currentOffset,r=e.targetIndex;n=this._safeOffsetToOffset({containerSize:i,offset:n});var l=this._cellSizeAndPositionManager.getUpdatedOffsetForIndex({align:o,containerSize:i,currentOffset:n,targetIndex:r});return this._offsetToSafeOffset({containerSize:i,offset:l})}},{key:"getVisibleCellRange",value:function(e){var t=e.containerSize,o=e.offset;return o=this._safeOffsetToOffset({containerSize:t,offset:o}),this._cellSizeAndPositionManager.getVisibleCellRange({containerSize:t,offset:o})}},{key:"resetCell",value:function(e){this._cellSizeAndPositionManager.resetCell(e)}},{key:"_getOffsetPercentage",value:function(e){var t=e.containerSize,o=e.offset,i=e.totalSize;return i<=t?0:o/(i-t)}},{key:"_offsetToSafeOffset",value:function(e){var t=e.containerSize,o=e.offset,i=this._cellSizeAndPositionManager.getTotalSize(),n=this.getTotalSize();if(i===n)return o;var r=this._getOffsetPercentage({containerSize:t,offset:o,totalSize:i});return Math.round(r*(n-t))}},{key:"_safeOffsetToOffset",value:function(e){var t=e.containerSize,o=e.offset,i=this._cellSizeAndPositionManager.getTotalSize(),n=this.getTotalSize();if(i===n)return o;var r=this._getOffsetPercentage({containerSize:t,offset:o,totalSize:n});return Math.round(r*(i-t))}}]),e}();function x(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t={};return function(o){var i=o.callback,n=o.indices,r=Object.keys(n),l=!e||r.every((function(e){var t=n[e];return Array.isArray(t)?t.length>0:t>=0})),s=r.length!==Object.keys(t).length||r.some((function(e){var o=t[e],i=n[e];return Array.isArray(i)?o.join(",")!==i.join(","):o!==i}));t=n,l&&s&&i(n)}}function R(e){var t=e.cellSize,o=e.cellSizeAndPositionManager,i=e.previousCellsCount,n=e.previousCellSize,r=e.previousScrollToAlignment,l=e.previousScrollToIndex,s=e.previousSize,a=e.scrollOffset,c=e.scrollToAlignment,d=e.scrollToIndex,h=e.size,u=e.sizeJustIncreasedFromZero,f=e.updateScrollIndexCallback,p=o.getCellCount(),g=d>=0&&d0&&(ho.getTotalSize()-h&&f(p-1)}const b=!("undefined"===typeof window||!window.document||!window.document.createElement);var T,A;function z(e){if((!T&&0!==T||e)&&b){var t=document.createElement("div");t.style.position="absolute",t.style.top="-9999px",t.style.width="50px",t.style.height="50px",t.style.overflow="scroll",document.body.appendChild(t),T=t.offsetWidth-t.clientWidth,document.body.removeChild(t)}return T}var I,M,k=(A="undefined"!==typeof window?window:"undefined"!==typeof self?self:{}).requestAnimationFrame||A.webkitRequestAnimationFrame||A.mozRequestAnimationFrame||A.oRequestAnimationFrame||A.msRequestAnimationFrame||function(e){return A.setTimeout(e,1e3/60)},P=A.cancelAnimationFrame||A.webkitCancelAnimationFrame||A.mozCancelAnimationFrame||A.oCancelAnimationFrame||A.msCancelAnimationFrame||function(e){A.clearTimeout(e)},O=k,L=P,G=function(e){return L(e.id)},H=function(e,t){var o;Promise.resolve().then((function(){o=Date.now()}));var i={id:O((function n(){Date.now()-o>=t?e.call():i.id=O(n)}))};return i};function W(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,i)}return o}function E(e){for(var t=1;t0&&(o._initialScrollTop=o._getCalculatedScrollTop(e,o.state)),e.scrollToColumn>0&&(o._initialScrollLeft=o._getCalculatedScrollLeft(e,o.state)),o}return u(t,e),l(t,[{key:"getOffsetForCell",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.alignment,o=void 0===t?this.props.scrollToAlignment:t,i=e.columnIndex,n=void 0===i?this.props.scrollToColumn:i,r=e.rowIndex,l=void 0===r?this.props.scrollToRow:r,s=E({},this.props,{scrollToAlignment:o,scrollToColumn:n,scrollToRow:l});return{scrollLeft:this._getCalculatedScrollLeft(s),scrollTop:this._getCalculatedScrollTop(s)}}},{key:"getTotalRowsHeight",value:function(){return this.state.instanceProps.rowSizeAndPositionManager.getTotalSize()}},{key:"getTotalColumnsWidth",value:function(){return this.state.instanceProps.columnSizeAndPositionManager.getTotalSize()}},{key:"handleScrollEvent",value:function(e){var t=e.scrollLeft,o=void 0===t?0:t,i=e.scrollTop,n=void 0===i?0:i;if(!(n<0)){this._debounceScrollEnded();var r=this.props,l=r.autoHeight,s=r.autoWidth,a=r.height,c=r.width,d=this.state.instanceProps,h=d.scrollbarSize,u=d.rowSizeAndPositionManager.getTotalSize(),f=d.columnSizeAndPositionManager.getTotalSize(),p=Math.min(Math.max(0,f-c+h),o),g=Math.min(Math.max(0,u-a+h),n);if(this.state.scrollLeft!==p||this.state.scrollTop!==g){var v={isScrolling:!0,scrollDirectionHorizontal:p!==this.state.scrollLeft?p>this.state.scrollLeft?1:-1:this.state.scrollDirectionHorizontal,scrollDirectionVertical:g!==this.state.scrollTop?g>this.state.scrollTop?1:-1:this.state.scrollDirectionVertical,scrollPositionChangeReason:D};l||(v.scrollTop=g),s||(v.scrollLeft=p),v.needToResetStyleCache=!1,this.setState(v)}this._invokeOnScrollMemoizer({scrollLeft:p,scrollTop:g,totalColumnsWidth:f,totalRowsHeight:u})}}},{key:"invalidateCellSizeAfterRender",value:function(e){var t=e.columnIndex,o=e.rowIndex;this._deferredInvalidateColumnIndex="number"===typeof this._deferredInvalidateColumnIndex?Math.min(this._deferredInvalidateColumnIndex,t):t,this._deferredInvalidateRowIndex="number"===typeof this._deferredInvalidateRowIndex?Math.min(this._deferredInvalidateRowIndex,o):o}},{key:"measureAllCells",value:function(){var e=this.props,t=e.columnCount,o=e.rowCount,i=this.state.instanceProps;i.columnSizeAndPositionManager.getSizeAndPositionOfCell(t-1),i.rowSizeAndPositionManager.getSizeAndPositionOfCell(o-1)}},{key:"recomputeGridSize",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.columnIndex,o=void 0===t?0:t,i=e.rowIndex,n=void 0===i?0:i,r=this.props,l=r.scrollToColumn,s=r.scrollToRow,a=this.state.instanceProps;a.columnSizeAndPositionManager.resetCell(o),a.rowSizeAndPositionManager.resetCell(n),this._recomputeScrollLeftFlag=l>=0&&(1===this.state.scrollDirectionHorizontal?o<=l:o>=l),this._recomputeScrollTopFlag=s>=0&&(1===this.state.scrollDirectionVertical?n<=s:n>=s),this._styleCache={},this._cellCache={},this.forceUpdate()}},{key:"scrollToCell",value:function(e){var t=e.columnIndex,o=e.rowIndex,i=this.props.columnCount,n=this.props;i>1&&void 0!==t&&this._updateScrollLeftForScrollToColumn(E({},n,{scrollToColumn:t})),void 0!==o&&this._updateScrollTopForScrollToRow(E({},n,{scrollToRow:o}))}},{key:"componentDidMount",value:function(){var e=this.props,o=e.getScrollbarSize,i=e.height,n=e.scrollLeft,r=e.scrollToColumn,l=e.scrollTop,s=e.scrollToRow,a=e.width,c=this.state.instanceProps;if(this._initialScrollTop=0,this._initialScrollLeft=0,this._handleInvalidatedGridSize(),c.scrollbarSizeMeasured||this.setState((function(e){var t=E({},e,{needToResetStyleCache:!1});return t.instanceProps.scrollbarSize=o(),t.instanceProps.scrollbarSizeMeasured=!0,t})),"number"===typeof n&&n>=0||"number"===typeof l&&l>=0){var d=t._getScrollToPositionStateUpdate({prevState:this.state,scrollLeft:n,scrollTop:l});d&&(d.needToResetStyleCache=!1,this.setState(d))}this._scrollingContainer&&(this._scrollingContainer.scrollLeft!==this.state.scrollLeft&&(this._scrollingContainer.scrollLeft=this.state.scrollLeft),this._scrollingContainer.scrollTop!==this.state.scrollTop&&(this._scrollingContainer.scrollTop=this.state.scrollTop));var h=i>0&&a>0;r>=0&&h&&this._updateScrollLeftForScrollToColumn(),s>=0&&h&&this._updateScrollTopForScrollToRow(),this._invokeOnGridRenderedHelper(),this._invokeOnScrollMemoizer({scrollLeft:n||0,scrollTop:l||0,totalColumnsWidth:c.columnSizeAndPositionManager.getTotalSize(),totalRowsHeight:c.rowSizeAndPositionManager.getTotalSize()}),this._maybeCallOnScrollbarPresenceChange()}},{key:"componentDidUpdate",value:function(e,t){var o=this,i=this.props,n=i.autoHeight,r=i.autoWidth,l=i.columnCount,s=i.height,a=i.rowCount,c=i.scrollToAlignment,d=i.scrollToColumn,h=i.scrollToRow,u=i.width,f=this.state,p=f.scrollLeft,g=f.scrollPositionChangeReason,v=f.scrollTop,_=f.instanceProps;this._handleInvalidatedGridSize();var m=l>0&&0===e.columnCount||a>0&&0===e.rowCount;g===j&&(!r&&p>=0&&(p!==this._scrollingContainer.scrollLeft||m)&&(this._scrollingContainer.scrollLeft=p),!n&&v>=0&&(v!==this._scrollingContainer.scrollTop||m)&&(this._scrollingContainer.scrollTop=v));var S=(0===e.width||0===e.height)&&s>0&&u>0;if(this._recomputeScrollLeftFlag?(this._recomputeScrollLeftFlag=!1,this._updateScrollLeftForScrollToColumn(this.props)):R({cellSizeAndPositionManager:_.columnSizeAndPositionManager,previousCellsCount:e.columnCount,previousCellSize:e.columnWidth,previousScrollToAlignment:e.scrollToAlignment,previousScrollToIndex:e.scrollToColumn,previousSize:e.width,scrollOffset:p,scrollToAlignment:c,scrollToIndex:d,size:u,sizeJustIncreasedFromZero:S,updateScrollIndexCallback:function(){return o._updateScrollLeftForScrollToColumn(o.props)}}),this._recomputeScrollTopFlag?(this._recomputeScrollTopFlag=!1,this._updateScrollTopForScrollToRow(this.props)):R({cellSizeAndPositionManager:_.rowSizeAndPositionManager,previousCellsCount:e.rowCount,previousCellSize:e.rowHeight,previousScrollToAlignment:e.scrollToAlignment,previousScrollToIndex:e.scrollToRow,previousSize:e.height,scrollOffset:v,scrollToAlignment:c,scrollToIndex:h,size:s,sizeJustIncreasedFromZero:S,updateScrollIndexCallback:function(){return o._updateScrollTopForScrollToRow(o.props)}}),this._invokeOnGridRenderedHelper(),p!==t.scrollLeft||v!==t.scrollTop){var C=_.rowSizeAndPositionManager.getTotalSize(),y=_.columnSizeAndPositionManager.getTotalSize();this._invokeOnScrollMemoizer({scrollLeft:p,scrollTop:v,totalColumnsWidth:y,totalRowsHeight:C})}this._maybeCallOnScrollbarPresenceChange()}},{key:"componentWillUnmount",value:function(){this._disablePointerEventsTimeoutId&&G(this._disablePointerEventsTimeoutId)}},{key:"render",value:function(){var e=this.props,t=e.autoContainerWidth,o=e.autoHeight,i=e.autoWidth,n=e.className,r=e.containerProps,l=e.containerRole,s=e.containerStyle,a=e.height,c=e.id,d=e.noContentRenderer,h=e.role,u=e.style,f=e.tabIndex,g=e.width,m=this.state,S=m.instanceProps,C=m.needToResetStyleCache,y=this._isScrolling(),w={boxSizing:"border-box",direction:"ltr",height:o?"auto":a,position:"relative",width:i?"auto":g,WebkitOverflowScrolling:"touch",willChange:"transform"};C&&(this._styleCache={}),this.state.isScrolling||this._resetStyleCache(),this._calculateChildrenToRender(this.props,this.state);var x=S.columnSizeAndPositionManager.getTotalSize(),R=S.rowSizeAndPositionManager.getTotalSize(),b=R>a?S.scrollbarSize:0,T=x>g?S.scrollbarSize:0;T===this._horizontalScrollBarSize&&b===this._verticalScrollBarSize||(this._horizontalScrollBarSize=T,this._verticalScrollBarSize=b,this._scrollbarPresenceChanged=!0),w.overflowX=x+b<=g?"hidden":"auto",w.overflowY=R+T<=a?"hidden":"auto";var A=this._childrenToDisplay,z=0===A.length&&a>0&&g>0;return p.createElement("div",(0,v.A)({ref:this._setScrollingContainerRef},r,{"aria-label":this.props["aria-label"],"aria-readonly":this.props["aria-readonly"],className:(0,_.A)("ReactVirtualized__Grid",n),id:c,onScroll:this._onScroll,role:h,style:E({},w,{},u),tabIndex:f}),A.length>0&&p.createElement("div",{className:"ReactVirtualized__Grid__innerScrollContainer",role:l,style:E({width:t?"auto":x,height:R,maxWidth:x,maxHeight:R,overflow:"hidden",pointerEvents:y?"none":"",position:"relative"},s)},A),z&&d())}},{key:"_calculateChildrenToRender",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.props,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.state,o=e.cellRenderer,i=e.cellRangeRenderer,n=e.columnCount,r=e.deferredMeasurementCache,l=e.height,s=e.overscanColumnCount,a=e.overscanIndicesGetter,c=e.overscanRowCount,d=e.rowCount,h=e.width,u=e.isScrollingOptOut,f=t.scrollDirectionHorizontal,p=t.scrollDirectionVertical,g=t.instanceProps,v=this._initialScrollTop>0?this._initialScrollTop:t.scrollTop,_=this._initialScrollLeft>0?this._initialScrollLeft:t.scrollLeft,m=this._isScrolling(e,t);if(this._childrenToDisplay=[],l>0&&h>0){var S=g.columnSizeAndPositionManager.getVisibleCellRange({containerSize:h,offset:_}),C=g.rowSizeAndPositionManager.getVisibleCellRange({containerSize:l,offset:v}),y=g.columnSizeAndPositionManager.getOffsetAdjustment({containerSize:h,offset:_}),w=g.rowSizeAndPositionManager.getOffsetAdjustment({containerSize:l,offset:v});this._renderedColumnStartIndex=S.start,this._renderedColumnStopIndex=S.stop,this._renderedRowStartIndex=C.start,this._renderedRowStopIndex=C.stop;var x=a({direction:"horizontal",cellCount:n,overscanCellsCount:s,scrollDirection:f,startIndex:"number"===typeof S.start?S.start:0,stopIndex:"number"===typeof S.stop?S.stop:-1}),R=a({direction:"vertical",cellCount:d,overscanCellsCount:c,scrollDirection:p,startIndex:"number"===typeof C.start?C.start:0,stopIndex:"number"===typeof C.stop?C.stop:-1}),b=x.overscanStartIndex,T=x.overscanStopIndex,A=R.overscanStartIndex,z=R.overscanStopIndex;if(r){if(!r.hasFixedHeight())for(var I=A;I<=z;I++)if(!r.has(I,0)){b=0,T=n-1;break}if(!r.hasFixedWidth())for(var M=b;M<=T;M++)if(!r.has(0,M)){A=0,z=d-1;break}}this._childrenToDisplay=i({cellCache:this._cellCache,cellRenderer:o,columnSizeAndPositionManager:g.columnSizeAndPositionManager,columnStartIndex:b,columnStopIndex:T,deferredMeasurementCache:r,horizontalOffsetAdjustment:y,isScrolling:m,isScrollingOptOut:u,parent:this,rowSizeAndPositionManager:g.rowSizeAndPositionManager,rowStartIndex:A,rowStopIndex:z,scrollLeft:_,scrollTop:v,styleCache:this._styleCache,verticalOffsetAdjustment:w,visibleColumnIndices:S,visibleRowIndices:C}),this._columnStartIndex=b,this._columnStopIndex=T,this._rowStartIndex=A,this._rowStopIndex=z}}},{key:"_debounceScrollEnded",value:function(){var e=this.props.scrollingResetTimeInterval;this._disablePointerEventsTimeoutId&&G(this._disablePointerEventsTimeoutId),this._disablePointerEventsTimeoutId=H(this._debounceScrollEndedCallback,e)}},{key:"_handleInvalidatedGridSize",value:function(){if("number"===typeof this._deferredInvalidateColumnIndex&&"number"===typeof this._deferredInvalidateRowIndex){var e=this._deferredInvalidateColumnIndex,t=this._deferredInvalidateRowIndex;this._deferredInvalidateColumnIndex=null,this._deferredInvalidateRowIndex=null,this.recomputeGridSize({columnIndex:e,rowIndex:t})}}},{key:"_invokeOnScrollMemoizer",value:function(e){var t=this,o=e.scrollLeft,i=e.scrollTop,n=e.totalColumnsWidth,r=e.totalRowsHeight;this._onScrollMemoizer({callback:function(e){var o=e.scrollLeft,i=e.scrollTop,l=t.props,s=l.height;(0,l.onScroll)({clientHeight:s,clientWidth:l.width,scrollHeight:r,scrollLeft:o,scrollTop:i,scrollWidth:n})},indices:{scrollLeft:o,scrollTop:i}})}},{key:"_isScrolling",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.props,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.state;return Object.hasOwnProperty.call(e,"isScrolling")?Boolean(e.isScrolling):Boolean(t.isScrolling)}},{key:"_maybeCallOnScrollbarPresenceChange",value:function(){if(this._scrollbarPresenceChanged){var e=this.props.onScrollbarPresenceChange;this._scrollbarPresenceChanged=!1,e({horizontal:this._horizontalScrollBarSize>0,size:this.state.instanceProps.scrollbarSize,vertical:this._verticalScrollBarSize>0})}}},{key:"scrollToPosition",value:function(e){var o=e.scrollLeft,i=e.scrollTop,n=t._getScrollToPositionStateUpdate({prevState:this.state,scrollLeft:o,scrollTop:i});n&&(n.needToResetStyleCache=!1,this.setState(n))}},{key:"_getCalculatedScrollLeft",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.props,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.state;return t._getCalculatedScrollLeft(e,o)}},{key:"_updateScrollLeftForScrollToColumn",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.props,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.state,i=t._getScrollLeftForScrollToColumnStateUpdate(e,o);i&&(i.needToResetStyleCache=!1,this.setState(i))}},{key:"_getCalculatedScrollTop",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.props,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.state;return t._getCalculatedScrollTop(e,o)}},{key:"_resetStyleCache",value:function(){var e=this._styleCache,t=this._cellCache,o=this.props.isScrollingOptOut;this._cellCache={},this._styleCache={};for(var i=this._rowStartIndex;i<=this._rowStopIndex;i++)for(var n=this._columnStartIndex;n<=this._columnStopIndex;n++){var r="".concat(i,"-").concat(n);this._styleCache[r]=e[r],o&&(this._cellCache[r]=t[r])}}},{key:"_updateScrollTopForScrollToRow",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.props,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.state,i=t._getScrollTopForScrollToRowStateUpdate(e,o);i&&(i.needToResetStyleCache=!1,this.setState(i))}}],[{key:"getDerivedStateFromProps",value:function(e,o){var i={};0===e.columnCount&&0!==o.scrollLeft||0===e.rowCount&&0!==o.scrollTop?(i.scrollLeft=0,i.scrollTop=0):(e.scrollLeft!==o.scrollLeft&&e.scrollToColumn<0||e.scrollTop!==o.scrollTop&&e.scrollToRow<0)&&Object.assign(i,t._getScrollToPositionStateUpdate({prevState:o,scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}));var n,r,l=o.instanceProps;return i.needToResetStyleCache=!1,e.columnWidth===l.prevColumnWidth&&e.rowHeight===l.prevRowHeight||(i.needToResetStyleCache=!0),l.columnSizeAndPositionManager.configure({cellCount:e.columnCount,estimatedCellSize:t._getEstimatedColumnSize(e),cellSizeGetter:t._wrapSizeGetter(e.columnWidth)}),l.rowSizeAndPositionManager.configure({cellCount:e.rowCount,estimatedCellSize:t._getEstimatedRowSize(e),cellSizeGetter:t._wrapSizeGetter(e.rowHeight)}),0!==l.prevColumnCount&&0!==l.prevRowCount||(l.prevColumnCount=0,l.prevRowCount=0),e.autoHeight&&!1===e.isScrolling&&!0===l.prevIsScrolling&&Object.assign(i,{isScrolling:!1}),m({cellCount:l.prevColumnCount,cellSize:"number"===typeof l.prevColumnWidth?l.prevColumnWidth:null,computeMetadataCallback:function(){return l.columnSizeAndPositionManager.resetCell(0)},computeMetadataCallbackProps:e,nextCellsCount:e.columnCount,nextCellSize:"number"===typeof e.columnWidth?e.columnWidth:null,nextScrollToIndex:e.scrollToColumn,scrollToIndex:l.prevScrollToColumn,updateScrollOffsetForScrollToIndex:function(){n=t._getScrollLeftForScrollToColumnStateUpdate(e,o)}}),m({cellCount:l.prevRowCount,cellSize:"number"===typeof l.prevRowHeight?l.prevRowHeight:null,computeMetadataCallback:function(){return l.rowSizeAndPositionManager.resetCell(0)},computeMetadataCallbackProps:e,nextCellsCount:e.rowCount,nextCellSize:"number"===typeof e.rowHeight?e.rowHeight:null,nextScrollToIndex:e.scrollToRow,scrollToIndex:l.prevScrollToRow,updateScrollOffsetForScrollToIndex:function(){r=t._getScrollTopForScrollToRowStateUpdate(e,o)}}),l.prevColumnCount=e.columnCount,l.prevColumnWidth=e.columnWidth,l.prevIsScrolling=!0===e.isScrolling,l.prevRowCount=e.rowCount,l.prevRowHeight=e.rowHeight,l.prevScrollToColumn=e.scrollToColumn,l.prevScrollToRow=e.scrollToRow,l.scrollbarSize=e.getScrollbarSize(),void 0===l.scrollbarSize?(l.scrollbarSizeMeasured=!1,l.scrollbarSize=0):l.scrollbarSizeMeasured=!0,i.instanceProps=l,E({},i,{},n,{},r)}},{key:"_getEstimatedColumnSize",value:function(e){return"number"===typeof e.columnWidth?e.columnWidth:e.estimatedColumnSize}},{key:"_getEstimatedRowSize",value:function(e){return"number"===typeof e.rowHeight?e.rowHeight:e.estimatedRowSize}},{key:"_getScrollToPositionStateUpdate",value:function(e){var t=e.prevState,o=e.scrollLeft,i=e.scrollTop,n={scrollPositionChangeReason:j};return"number"===typeof o&&o>=0&&(n.scrollDirectionHorizontal=o>t.scrollLeft?1:-1,n.scrollLeft=o),"number"===typeof i&&i>=0&&(n.scrollDirectionVertical=i>t.scrollTop?1:-1,n.scrollTop=i),"number"===typeof o&&o>=0&&o!==t.scrollLeft||"number"===typeof i&&i>=0&&i!==t.scrollTop?n:{}}},{key:"_wrapSizeGetter",value:function(e){return"function"===typeof e?e:function(){return e}}},{key:"_getCalculatedScrollLeft",value:function(e,t){var o=e.columnCount,i=e.height,n=e.scrollToAlignment,r=e.scrollToColumn,l=e.width,s=t.scrollLeft,a=t.instanceProps;if(o>0){var c=o-1,d=r<0?c:Math.min(c,r),h=a.rowSizeAndPositionManager.getTotalSize(),u=a.scrollbarSizeMeasured&&h>i?a.scrollbarSize:0;return a.columnSizeAndPositionManager.getUpdatedOffsetForIndex({align:n,containerSize:l-u,currentOffset:s,targetIndex:d})}return 0}},{key:"_getScrollLeftForScrollToColumnStateUpdate",value:function(e,o){var i=o.scrollLeft,n=t._getCalculatedScrollLeft(e,o);return"number"===typeof n&&n>=0&&i!==n?t._getScrollToPositionStateUpdate({prevState:o,scrollLeft:n,scrollTop:-1}):{}}},{key:"_getCalculatedScrollTop",value:function(e,t){var o=e.height,i=e.rowCount,n=e.scrollToAlignment,r=e.scrollToRow,l=e.width,s=t.scrollTop,a=t.instanceProps;if(i>0){var c=i-1,d=r<0?c:Math.min(c,r),h=a.columnSizeAndPositionManager.getTotalSize(),u=a.scrollbarSizeMeasured&&h>l?a.scrollbarSize:0;return a.rowSizeAndPositionManager.getUpdatedOffsetForIndex({align:n,containerSize:o-u,currentOffset:s,targetIndex:d})}return 0}},{key:"_getScrollTopForScrollToRowStateUpdate",value:function(e,o){var i=o.scrollTop,n=t._getCalculatedScrollTop(e,o);return"number"===typeof n&&n>=0&&i!==n?t._getScrollToPositionStateUpdate({prevState:o,scrollLeft:-1,scrollTop:n}):{}}}]),t}(p.PureComponent),(0,f.A)(I,"propTypes",null),M);(0,f.A)(F,"defaultProps",{"aria-label":"grid","aria-readonly":!0,autoContainerWidth:!1,autoHeight:!1,autoWidth:!1,cellRangeRenderer:function(e){for(var t=e.cellCache,o=e.cellRenderer,i=e.columnSizeAndPositionManager,n=e.columnStartIndex,r=e.columnStopIndex,l=e.deferredMeasurementCache,s=e.horizontalOffsetAdjustment,a=e.isScrolling,c=e.isScrollingOptOut,d=e.parent,h=e.rowSizeAndPositionManager,u=e.rowStartIndex,f=e.rowStopIndex,p=e.styleCache,g=e.verticalOffsetAdjustment,v=e.visibleColumnIndices,_=e.visibleRowIndices,m=[],S=i.areOffsetsAdjusted()||h.areOffsetsAdjusted(),C=!a&&!S,y=u;y<=f;y++)for(var w=h.getSizeAndPositionOfCell(y),x=n;x<=r;x++){var R=i.getSizeAndPositionOfCell(x),b=x>=v.start&&x<=v.stop&&y>=_.start&&y<=_.stop,T="".concat(y,"-").concat(x),A=void 0;C&&p[T]?A=p[T]:l&&!l.has(y,x)?A={height:"auto",left:0,position:"absolute",top:0,width:"auto"}:(A={height:w.size,left:R.offset+s,position:"absolute",top:w.offset+g,width:R.size},p[T]=A);var z={columnIndex:x,isScrolling:a,isVisible:b,key:T,parent:d,rowIndex:y,style:A},I=void 0;!c&&!a||s||g?I=o(z):(t[T]||(t[T]=o(z)),I=t[T]),null!=I&&!1!==I&&m.push(I)}return m},containerRole:"rowgroup",containerStyle:{},estimatedColumnSize:100,estimatedRowSize:30,getScrollbarSize:z,noContentRenderer:function(){return null},onScroll:function(){},onScrollbarPresenceChange:function(){},onSectionRendered:function(){},overscanColumnCount:0,overscanIndicesGetter:function(e){var t=e.cellCount,o=e.overscanCellsCount,i=e.scrollDirection,n=e.startIndex,r=e.stopIndex;return 1===i?{overscanStartIndex:Math.max(0,n),overscanStopIndex:Math.min(t-1,r+o)}:{overscanStartIndex:Math.max(0,n-o),overscanStopIndex:Math.min(t-1,r)}},overscanRowCount:10,role:"grid",scrollingResetTimeInterval:150,scrollToAlignment:"auto",scrollToColumn:-1,scrollToRow:-1,style:{},tabIndex:0,isScrollingOptOut:!1}),(0,g.polyfill)(F);const N=F;function U(e){var t=e.cellCount,o=e.overscanCellsCount,i=e.scrollDirection,n=e.startIndex,r=e.stopIndex;return o=Math.max(1,o),1===i?{overscanStartIndex:Math.max(0,n-1),overscanStopIndex:Math.min(t-1,r+o)}:{overscanStartIndex:Math.max(0,n-o),overscanStopIndex:Math.min(t-1,r+1)}}var B,V;function q(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,i)}return o}var K=(V=B=function(e){function t(){var e,o;i(this,t);for(var n=arguments.length,r=new Array(n),l=0;l div, .contract-trigger:before { content: " "; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; z-index: -1; } .resize-triggers > div { background: #eee; overflow: auto; } .contract-trigger:before { width: 200%; height: 200%; }',i=t.head||t.getElementsByTagName("head")[0],n=t.createElement("style");n.id="detectElementResize",n.type="text/css",null!=e&&n.setAttribute("nonce",e),n.styleSheet?n.styleSheet.cssText=o:n.appendChild(t.createTextNode(o)),i.appendChild(n)}}(r),t.__resizeLast__={},t.__resizeListeners__=[],(t.__resizeTriggers__=r.createElement("div")).className="resize-triggers";var c='

';if(window.trustedTypes){var d=trustedTypes.createPolicy("react-virtualized-auto-sizer",{createHTML:function(){return c}});t.__resizeTriggers__.innerHTML=d.createHTML("")}else t.__resizeTriggers__.innerHTML=c;t.appendChild(t.__resizeTriggers__),s(t),t.addEventListener("scroll",a,!0),h&&(t.__resizeTriggers__.__animationListener__=function(e){e.animationName==v&&s(t)},t.__resizeTriggers__.addEventListener(h,t.__resizeTriggers__.__animationListener__))}t.__resizeListeners__.push(o)}},removeResizeListener:function(e,t){if(n)e.detachEvent("onresize",t);else if(e.__resizeListeners__.splice(e.__resizeListeners__.indexOf(t),1),!e.__resizeListeners__.length){e.removeEventListener("scroll",a,!0),e.__resizeTriggers__.__animationListener__&&(e.__resizeTriggers__.removeEventListener(h,e.__resizeTriggers__.__animationListener__),e.__resizeTriggers__.__animationListener__=null);try{e.__resizeTriggers__=!e.removeChild(e.__resizeTriggers__)}catch(o){}}}}}var Y,J;function Z(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,i)}return o}function $(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{};i(this,e),(0,f.A)(this,"_cellHeightCache",{}),(0,f.A)(this,"_cellWidthCache",{}),(0,f.A)(this,"_columnWidthCache",{}),(0,f.A)(this,"_rowHeightCache",{}),(0,f.A)(this,"_defaultHeight",void 0),(0,f.A)(this,"_defaultWidth",void 0),(0,f.A)(this,"_minHeight",void 0),(0,f.A)(this,"_minWidth",void 0),(0,f.A)(this,"_keyMapper",void 0),(0,f.A)(this,"_hasFixedHeight",void 0),(0,f.A)(this,"_hasFixedWidth",void 0),(0,f.A)(this,"_columnCount",0),(0,f.A)(this,"_rowCount",0),(0,f.A)(this,"columnWidth",(function(e){var o=e.index,i=t._keyMapper(0,o);return void 0!==t._columnWidthCache[i]?t._columnWidthCache[i]:t._defaultWidth})),(0,f.A)(this,"rowHeight",(function(e){var o=e.index,i=t._keyMapper(o,0);return void 0!==t._rowHeightCache[i]?t._rowHeightCache[i]:t._defaultHeight}));var n=o.defaultHeight,r=o.defaultWidth,l=o.fixedHeight,s=o.fixedWidth,a=o.keyMapper,c=o.minHeight,d=o.minWidth;this._hasFixedHeight=!0===l,this._hasFixedWidth=!0===s,this._minHeight=c||0,this._minWidth=d||0,this._keyMapper=a||re,this._defaultHeight=Math.max(this._minHeight,"number"===typeof n?n:30),this._defaultWidth=Math.max(this._minWidth,"number"===typeof r?r:100)}return l(e,[{key:"clear",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this._keyMapper(e,t);delete this._cellHeightCache[o],delete this._cellWidthCache[o],this._updateCachedColumnAndRowSizes(e,t)}},{key:"clearAll",value:function(){this._cellHeightCache={},this._cellWidthCache={},this._columnWidthCache={},this._rowHeightCache={},this._rowCount=0,this._columnCount=0}},{key:"hasFixedHeight",value:function(){return this._hasFixedHeight}},{key:"hasFixedWidth",value:function(){return this._hasFixedWidth}},{key:"getHeight",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this._hasFixedHeight)return this._defaultHeight;var o=this._keyMapper(e,t);return void 0!==this._cellHeightCache[o]?Math.max(this._minHeight,this._cellHeightCache[o]):this._defaultHeight}},{key:"getWidth",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(this._hasFixedWidth)return this._defaultWidth;var o=this._keyMapper(e,t);return void 0!==this._cellWidthCache[o]?Math.max(this._minWidth,this._cellWidthCache[o]):this._defaultWidth}},{key:"has",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this._keyMapper(e,t);return void 0!==this._cellHeightCache[o]}},{key:"set",value:function(e,t,o,i){var n=this._keyMapper(e,t);t>=this._columnCount&&(this._columnCount=t+1),e>=this._rowCount&&(this._rowCount=e+1),this._cellHeightCache[n]=i,this._cellWidthCache[n]=o,this._updateCachedColumnAndRowSizes(e,t)}},{key:"_updateCachedColumnAndRowSizes",value:function(e,t){if(!this._hasFixedWidth){for(var o=0,i=0;i=0){var d=t.getScrollPositionForCell({align:n,cellIndex:r,height:i,scrollLeft:a,scrollTop:c,width:l});d.scrollLeft===a&&d.scrollTop===c||o._setScrollPosition(d)}})),(0,f.A)((0,a.A)(o),"_onScroll",(function(e){if(e.target===o._scrollingContainer){o._enablePointerEventsAfterDelay();var t=o.props,i=t.cellLayoutManager,n=t.height,r=t.isScrollingChange,l=t.width,s=o._scrollbarSize,a=i.getTotalSize(),c=a.height,d=a.width,h=Math.max(0,Math.min(d-l+s,e.target.scrollLeft)),u=Math.max(0,Math.min(c-n+s,e.target.scrollTop));if(o.state.scrollLeft!==h||o.state.scrollTop!==u){var f=e.cancelable?ae:ce;o.state.isScrolling||r(!0),o.setState({isScrolling:!0,scrollLeft:h,scrollPositionChangeReason:f,scrollTop:u})}o._invokeOnScrollMemoizer({scrollLeft:h,scrollTop:u,totalWidth:d,totalHeight:c})}})),o._scrollbarSize=z(),void 0===o._scrollbarSize?(o._scrollbarSizeMeasured=!1,o._scrollbarSize=0):o._scrollbarSizeMeasured=!0,o}return u(t,e),l(t,[{key:"recomputeCellSizesAndPositions",value:function(){this._calculateSizeAndPositionDataOnNextUpdate=!0,this.forceUpdate()}},{key:"componentDidMount",value:function(){var e=this.props,t=e.cellLayoutManager,o=e.scrollLeft,i=e.scrollToCell,n=e.scrollTop;this._scrollbarSizeMeasured||(this._scrollbarSize=z(),this._scrollbarSizeMeasured=!0,this.setState({})),i>=0?this._updateScrollPositionForScrollToCell():(o>=0||n>=0)&&this._setScrollPosition({scrollLeft:o,scrollTop:n}),this._invokeOnSectionRenderedHelper();var r=t.getTotalSize(),l=r.height,s=r.width;this._invokeOnScrollMemoizer({scrollLeft:o||0,scrollTop:n||0,totalHeight:l,totalWidth:s})}},{key:"componentDidUpdate",value:function(e,t){var o=this.props,i=o.height,n=o.scrollToAlignment,r=o.scrollToCell,l=o.width,s=this.state,a=s.scrollLeft,c=s.scrollPositionChangeReason,d=s.scrollTop;c===ce&&(a>=0&&a!==t.scrollLeft&&a!==this._scrollingContainer.scrollLeft&&(this._scrollingContainer.scrollLeft=a),d>=0&&d!==t.scrollTop&&d!==this._scrollingContainer.scrollTop&&(this._scrollingContainer.scrollTop=d)),i===e.height&&n===e.scrollToAlignment&&r===e.scrollToCell&&l===e.width||this._updateScrollPositionForScrollToCell(),this._invokeOnSectionRenderedHelper()}},{key:"componentWillUnmount",value:function(){this._disablePointerEventsTimeoutId&&clearTimeout(this._disablePointerEventsTimeoutId)}},{key:"render",value:function(){var e=this.props,t=e.autoHeight,o=e.cellCount,i=e.cellLayoutManager,n=e.className,r=e.height,l=e.horizontalOverscanSize,s=e.id,a=e.noContentRenderer,c=e.style,d=e.verticalOverscanSize,h=e.width,u=this.state,f=u.isScrolling,g=u.scrollLeft,v=u.scrollTop;(this._lastRenderedCellCount!==o||this._lastRenderedCellLayoutManager!==i||this._calculateSizeAndPositionDataOnNextUpdate)&&(this._lastRenderedCellCount=o,this._lastRenderedCellLayoutManager=i,this._calculateSizeAndPositionDataOnNextUpdate=!1,i.calculateSizeAndPositionData());var m=i.getTotalSize(),S=m.height,C=m.width,y=Math.max(0,g-l),w=Math.max(0,v-d),x=Math.min(C,g+h+l),R=Math.min(S,v+r+d),b=r>0&&h>0?i.cellRenderers({height:R-w,isScrolling:f,width:x-y,x:y,y:w}):[],T={boxSizing:"border-box",direction:"ltr",height:t?"auto":r,position:"relative",WebkitOverflowScrolling:"touch",width:h,willChange:"transform"},A=S>r?this._scrollbarSize:0,z=C>h?this._scrollbarSize:0;return T.overflowX=C+A<=h?"hidden":"auto",T.overflowY=S+z<=r?"hidden":"auto",p.createElement("div",{ref:this._setScrollingContainerRef,"aria-label":this.props["aria-label"],className:(0,_.A)("ReactVirtualized__Collection",n),id:s,onScroll:this._onScroll,role:"grid",style:se({},T,{},c),tabIndex:0},o>0&&p.createElement("div",{className:"ReactVirtualized__Collection__innerScrollContainer",style:{height:S,maxHeight:S,maxWidth:C,overflow:"hidden",pointerEvents:f?"none":"",width:C}},b),0===o&&a())}},{key:"_enablePointerEventsAfterDelay",value:function(){var e=this;this._disablePointerEventsTimeoutId&&clearTimeout(this._disablePointerEventsTimeoutId),this._disablePointerEventsTimeoutId=setTimeout((function(){(0,e.props.isScrollingChange)(!1),e._disablePointerEventsTimeoutId=null,e.setState({isScrolling:!1})}),150)}},{key:"_invokeOnScrollMemoizer",value:function(e){var t=this,o=e.scrollLeft,i=e.scrollTop,n=e.totalHeight,r=e.totalWidth;this._onScrollMemoizer({callback:function(e){var o=e.scrollLeft,i=e.scrollTop,l=t.props,s=l.height;(0,l.onScroll)({clientHeight:s,clientWidth:l.width,scrollHeight:n,scrollLeft:o,scrollTop:i,scrollWidth:r})},indices:{scrollLeft:o,scrollTop:i}})}},{key:"_setScrollPosition",value:function(e){var t=e.scrollLeft,o=e.scrollTop,i={scrollPositionChangeReason:ce};t>=0&&(i.scrollLeft=t),o>=0&&(i.scrollTop=o),(t>=0&&t!==this.state.scrollLeft||o>=0&&o!==this.state.scrollTop)&&this.setState(i)}}],[{key:"getDerivedStateFromProps",value:function(e,t){return 0!==e.cellCount||0===t.scrollLeft&&0===t.scrollTop?e.scrollLeft!==t.scrollLeft||e.scrollTop!==t.scrollTop?{scrollLeft:null!=e.scrollLeft?e.scrollLeft:t.scrollLeft,scrollTop:null!=e.scrollTop?e.scrollTop:t.scrollTop,scrollPositionChangeReason:ce}:null:{scrollLeft:0,scrollTop:0,scrollPositionChangeReason:ce}}}]),t}(p.PureComponent);(0,f.A)(de,"defaultProps",{"aria-label":"grid",horizontalOverscanSize:0,noContentRenderer:function(){return null},onScroll:function(){return null},onSectionRendered:function(){return null},scrollToAlignment:"auto",scrollToCell:-1,style:{},verticalOverscanSize:0}),de.propTypes={},(0,g.polyfill)(de);const he=de;var ue=function(){function e(t){var o=t.height,n=t.width,r=t.x,l=t.y;i(this,e),this.height=o,this.width=n,this.x=r,this.y=l,this._indexMap={},this._indices=[]}return l(e,[{key:"addCellIndex",value:function(e){var t=e.index;this._indexMap[t]||(this._indexMap[t]=!0,this._indices.push(t))}},{key:"getCellIndices",value:function(){return this._indices}},{key:"toString",value:function(){return"".concat(this.x,",").concat(this.y," ").concat(this.width,"x").concat(this.height)}}]),e}(),fe=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:100;i(this,e),this._sectionSize=t,this._cellMetadata=[],this._sections={}}return l(e,[{key:"getCellIndices",value:function(e){var t=e.height,o=e.width,i=e.x,n=e.y,r={};return this.getSections({height:t,width:o,x:i,y:n}).forEach((function(e){return e.getCellIndices().forEach((function(e){r[e]=e}))})),Object.keys(r).map((function(e){return r[e]}))}},{key:"getCellMetadata",value:function(e){var t=e.index;return this._cellMetadata[t]}},{key:"getSections",value:function(e){for(var t=e.height,o=e.width,i=e.x,n=e.y,r=Math.floor(i/this._sectionSize),l=Math.floor((i+o-1)/this._sectionSize),s=Math.floor(n/this._sectionSize),a=Math.floor((n+t-1)/this._sectionSize),c=[],d=r;d<=l;d++)for(var h=s;h<=a;h++){var u="".concat(d,".").concat(h);this._sections[u]||(this._sections[u]=new ue({height:this._sectionSize,width:this._sectionSize,x:d*this._sectionSize,y:h*this._sectionSize})),c.push(this._sections[u])}return c}},{key:"getTotalSectionCount",value:function(){return Object.keys(this._sections).length}},{key:"toString",value:function(){var e=this;return Object.keys(this._sections).map((function(t){return e._sections[t].toString()}))}},{key:"registerCell",value:function(e){var t=e.cellMetadatum,o=e.index;this._cellMetadata[o]=t,this.getSections(t).forEach((function(e){return e.addCellIndex({index:o})}))}}]),e}();function pe(e){var t=e.align,o=void 0===t?"auto":t,i=e.cellOffset,n=e.cellSize,r=e.containerSize,l=e.currentOffset,s=i,a=s-r+n;switch(o){case"start":return s;case"end":return a;case"center":return s-(r-n)/2;default:return Math.max(a,Math.min(s,l))}}var ge=function(e){function t(e,o){var n;return i(this,t),(n=c(this,d(t).call(this,e,o)))._cellMetadata=[],n._lastRenderedCellIndices=[],n._cellCache=[],n._isScrollingChange=n._isScrollingChange.bind((0,a.A)(n)),n._setCollectionViewRef=n._setCollectionViewRef.bind((0,a.A)(n)),n}return u(t,e),l(t,[{key:"forceUpdate",value:function(){void 0!==this._collectionView&&this._collectionView.forceUpdate()}},{key:"recomputeCellSizesAndPositions",value:function(){this._cellCache=[],this._collectionView.recomputeCellSizesAndPositions()}},{key:"render",value:function(){var e=(0,v.A)({},this.props);return p.createElement(he,(0,v.A)({cellLayoutManager:this,isScrollingChange:this._isScrollingChange,ref:this._setCollectionViewRef},e))}},{key:"calculateSizeAndPositionData",value:function(){var e=this.props,t=function(e){for(var t=e.cellCount,o=e.cellSizeAndPositionGetter,i=e.sectionSize,n=[],r=new fe(i),l=0,s=0,a=0;a=0&&oe.length)&&(t=e.length);for(var o=0,i=new Array(t);oo||n1&&void 0!==arguments[1]?arguments[1]:0,o="function"===typeof e.recomputeGridSize?e.recomputeGridSize:e.recomputeRowHeights;o?o.call(e,t):e.forceUpdate()}(t._registeredChild,t._lastRenderedStartIndex)}))}))}},{key:"_onRowsRendered",value:function(e){var t=e.startIndex,o=e.stopIndex;this._lastRenderedStartIndex=t,this._lastRenderedStopIndex=o,this._doStuff(t,o)}},{key:"_doStuff",value:function(e,t){var o,i=this,n=this.props,r=n.isRowLoaded,l=n.minimumBatchSize,s=n.rowCount,a=n.threshold,c=function(e){for(var t=e.isRowLoaded,o=e.minimumBatchSize,i=e.rowCount,n=e.startIndex,r=e.stopIndex,l=[],s=null,a=null,c=n;c<=r;c++){t({index:c})?null!==a&&(l.push({startIndex:s,stopIndex:a}),s=a=null):(a=c,null===s&&(s=c))}if(null!==a){for(var d=Math.min(Math.max(a,s+o-1),i-1),h=a+1;h<=d&&!t({index:h});h++)a=h;l.push({startIndex:s,stopIndex:a})}if(l.length)for(var u=l[0];u.stopIndex-u.startIndex+10;){var f=u.startIndex-1;if(t({index:f}))break;u.startIndex=f}return l}({isRowLoaded:r,minimumBatchSize:l,rowCount:s,startIndex:Math.max(0,e-a),stopIndex:Math.min(s-1,t+a)}),d=(o=[]).concat.apply(o,me(c.map((function(e){return[e.startIndex,e.stopIndex]}))));this._loadMoreRowsMemoizer({callback:function(){i._loadUnloadedRanges(c)},indices:{squashedUnloadedRanges:d}})}},{key:"_registerChild",value:function(e){this._registeredChild=e}}]),t}(p.PureComponent);(0,f.A)(Se,"defaultProps",{minimumBatchSize:10,rowCount:0,threshold:15}),Se.propTypes={};var Ce,ye,we=(ye=Ce=function(e){function t(){var e,o;i(this,t);for(var n=arguments.length,r=new Array(n),l=0;l0&&void 0!==arguments[0]?arguments[0]:{},t=e.columnIndex,o=void 0===t?0:t,i=e.rowIndex,n=void 0===i?0:i;this.Grid&&this.Grid.recomputeGridSize({rowIndex:n,columnIndex:o})}},{key:"recomputeRowHeights",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;this.Grid&&this.Grid.recomputeGridSize({rowIndex:e,columnIndex:0})}},{key:"scrollToPosition",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;this.Grid&&this.Grid.scrollToPosition({scrollTop:e})}},{key:"scrollToRow",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;this.Grid&&this.Grid.scrollToCell({columnIndex:0,rowIndex:e})}},{key:"render",value:function(){var e=this.props,t=e.className,o=e.noRowsRenderer,i=e.scrollToIndex,n=e.width,r=(0,_.A)("ReactVirtualized__List",t);return p.createElement(N,(0,v.A)({},this.props,{autoContainerWidth:!0,cellRenderer:this._cellRenderer,className:r,columnWidth:n,columnCount:1,noContentRenderer:o,onScroll:this._onScroll,onSectionRendered:this._onSectionRendered,ref:this._setRef,scrollToRow:i}))}}]),t}(p.PureComponent),(0,f.A)(Ce,"propTypes",null),ye);function xe(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var i,n,r,l,s=[],a=!0,c=!1;try{if(r=(o=o.call(e)).next,0===t){if(Object(o)!==o)return;a=!1}else for(;!(a=(i=r.call(o)).done)&&(s.push(i.value),s.length!==t);a=!0);}catch(e){c=!0,n=e}finally{try{if(!a&&null!=o.return&&(l=o.return(),Object(l)!==l))return}finally{if(c)throw n}}return s}}(e,t)||_e(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(0,f.A)(we,"defaultProps",{autoHeight:!1,estimatedRowSize:30,onScroll:function(){},noRowsRenderer:function(){return null},onRowsRendered:function(){},overscanIndicesGetter:U,overscanRowCount:10,scrollToAlignment:"auto",scrollToIndex:-1,style:{}});const Re={ge:function(e,t,o,i,n){return"function"===typeof o?function(e,t,o,i,n){for(var r=o+1;t<=o;){var l=t+o>>>1;n(e[l],i)>=0?(r=l,o=l-1):t=l+1}return r}(e,void 0===i?0:0|i,void 0===n?e.length-1:0|n,t,o):function(e,t,o,i){for(var n=o+1;t<=o;){var r=t+o>>>1;e[r]>=i?(n=r,o=r-1):t=r+1}return n}(e,void 0===o?0:0|o,void 0===i?e.length-1:0|i,t)},gt:function(e,t,o,i,n){return"function"===typeof o?function(e,t,o,i,n){for(var r=o+1;t<=o;){var l=t+o>>>1;n(e[l],i)>0?(r=l,o=l-1):t=l+1}return r}(e,void 0===i?0:0|i,void 0===n?e.length-1:0|n,t,o):function(e,t,o,i){for(var n=o+1;t<=o;){var r=t+o>>>1;e[r]>i?(n=r,o=r-1):t=r+1}return n}(e,void 0===o?0:0|o,void 0===i?e.length-1:0|i,t)},lt:function(e,t,o,i,n){return"function"===typeof o?function(e,t,o,i,n){for(var r=t-1;t<=o;){var l=t+o>>>1;n(e[l],i)<0?(r=l,t=l+1):o=l-1}return r}(e,void 0===i?0:0|i,void 0===n?e.length-1:0|n,t,o):function(e,t,o,i){for(var n=t-1;t<=o;){var r=t+o>>>1;e[r]>>1;n(e[l],i)<=0?(r=l,t=l+1):o=l-1}return r}(e,void 0===i?0:0|i,void 0===n?e.length-1:0|n,t,o):function(e,t,o,i){for(var n=t-1;t<=o;){var r=t+o>>>1;e[r]<=i?(n=r,t=r+1):o=r-1}return n}(e,void 0===o?0:0|o,void 0===i?e.length-1:0|i,t)},eq:function(e,t,o,i,n){return"function"===typeof o?function(e,t,o,i,n){for(;t<=o;){var r=t+o>>>1,l=n(e[r],i);if(0===l)return r;l<=0?t=r+1:o=r-1}return-1}(e,void 0===i?0:0|i,void 0===n?e.length-1:0|n,t,o):function(e,t,o,i){for(;t<=o;){var n=t+o>>>1,r=e[n];if(r===i)return n;r<=i?t=n+1:o=n-1}return-1}(e,void 0===o?0:0|o,void 0===i?e.length-1:0|i,t)}};function be(e,t,o,i,n){this.mid=e,this.left=t,this.right=o,this.leftPoints=i,this.rightPoints=n,this.count=(t?t.count:0)+(o?o.count:0)+i.length}var Te=be.prototype;function Ae(e,t){e.mid=t.mid,e.left=t.left,e.right=t.right,e.leftPoints=t.leftPoints,e.rightPoints=t.rightPoints,e.count=t.count}function ze(e,t){var o=We(t);e.mid=o.mid,e.left=o.left,e.right=o.right,e.leftPoints=o.leftPoints,e.rightPoints=o.rightPoints,e.count=o.count}function Ie(e,t){var o=e.intervals([]);o.push(t),ze(e,o)}function Me(e,t){var o=e.intervals([]),i=o.indexOf(t);return i<0?0:(o.splice(i,1),ze(e,o),1)}function ke(e,t,o){for(var i=0;i=0&&e[i][1]>=t;--i){var n=o(e[i]);if(n)return n}}function Oe(e,t){for(var o=0;o>1],n=[],r=[],l=[];for(o=0;o3*(t+1)?Ie(this,e):this.left.insert(e):this.left=We([e]);else if(e[0]>this.mid)this.right?4*(this.right.count+1)>3*(t+1)?Ie(this,e):this.right.insert(e):this.right=We([e]);else{var o=Re.ge(this.leftPoints,e,Ge),i=Re.ge(this.rightPoints,e,He);this.leftPoints.splice(o,0,e),this.rightPoints.splice(i,0,e)}},Te.remove=function(e){var t=this.count-this.leftPoints;if(e[1]3*(t-1)?Me(this,e):2===(r=this.left.remove(e))?(this.left=null,this.count-=1,1):(1===r&&(this.count-=1),r):0;if(e[0]>this.mid)return this.right?4*(this.left?this.left.count:0)>3*(t-1)?Me(this,e):2===(r=this.right.remove(e))?(this.right=null,this.count-=1,1):(1===r&&(this.count-=1),r):0;if(1===this.count)return this.leftPoints[0]===e?2:0;if(1===this.leftPoints.length&&this.leftPoints[0]===e){if(this.left&&this.right){for(var o=this,i=this.left;i.right;)o=i,i=i.right;if(o===this)i.right=this.right;else{var n=this.left,r=this.right;o.count-=i.count,o.right=i.left,i.left=n,i.right=r}Ae(this,i),this.count=(this.left?this.left.count:0)+(this.right?this.right.count:0)+this.leftPoints.length}else this.left?Ae(this,this.left):Ae(this,this.right);return 1}for(n=Re.ge(this.leftPoints,e,Ge);nthis.mid){var o;if(this.right)if(o=this.right.queryPoint(e,t))return o;return Pe(this.rightPoints,e,t)}return Oe(this.leftPoints,t)},Te.queryInterval=function(e,t,o){var i;if(ethis.mid&&this.right&&(i=this.right.queryInterval(e,t,o)))return i;return tthis.mid?Pe(this.rightPoints,e,o):Oe(this.leftPoints,o)};var De=Ee.prototype;De.insert=function(e){this.root?this.root.insert(e):this.root=new be(e[0],null,null,[e],[e])},De.remove=function(e){if(this.root){var t=this.root.remove(e);return 2===t&&(this.root=null),0!==t}return!1},De.queryPoint=function(e,t){if(this.root)return this.root.queryPoint(e,t)},De.queryInterval=function(e,t,o){if(e<=t&&this.root)return this.root.queryInterval(e,t,o)},Object.defineProperty(De,"count",{get:function(){return this.root?this.root.count:0}}),Object.defineProperty(De,"intervals",{get:function(){return this.root?this.root.intervals([]):[]}});var je,Fe,Ne=function(){function e(){var t;i(this,e),(0,f.A)(this,"_columnSizeMap",{}),(0,f.A)(this,"_intervalTree",t&&0!==t.length?new Ee(We(t)):new Ee(null)),(0,f.A)(this,"_leftMap",{})}return l(e,[{key:"estimateTotalHeight",value:function(e,t,o){var i=e-this.count;return this.tallestColumnSize+Math.ceil(i/t)*o}},{key:"range",value:function(e,t,o){var i=this;this._intervalTree.queryInterval(e,e+t,(function(e){var t=xe(e,3),n=t[0],r=(t[1],t[2]);return o(r,i._leftMap[r],n)}))}},{key:"setPosition",value:function(e,t,o,i){this._intervalTree.insert([o,o+i,e]),this._leftMap[e]=t;var n=this._columnSizeMap,r=n[t];n[t]=void 0===r?o+i:Math.max(r,o+i)}},{key:"count",get:function(){return this._intervalTree.count}},{key:"shortestColumnSize",get:function(){var e=this._columnSizeMap,t=0;for(var o in e){var i=e[o];t=0===t?i:Math.min(t,i)}return t}},{key:"tallestColumnSize",get:function(){var e=this._columnSizeMap,t=0;for(var o in e){var i=e[o];t=Math.max(t,i)}return t}}]),e}();function Ue(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,i)}return o}function Be(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{};i(this,e),(0,f.A)(this,"_cellMeasurerCache",void 0),(0,f.A)(this,"_columnIndexOffset",void 0),(0,f.A)(this,"_rowIndexOffset",void 0),(0,f.A)(this,"columnWidth",(function(e){var o=e.index;t._cellMeasurerCache.columnWidth({index:o+t._columnIndexOffset})})),(0,f.A)(this,"rowHeight",(function(e){var o=e.index;t._cellMeasurerCache.rowHeight({index:o+t._rowIndexOffset})}));var n=o.cellMeasurerCache,r=o.columnIndexOffset,l=void 0===r?0:r,s=o.rowIndexOffset,a=void 0===s?0:s;this._cellMeasurerCache=n,this._columnIndexOffset=l,this._rowIndexOffset=a}return l(e,[{key:"clear",value:function(e,t){this._cellMeasurerCache.clear(e+this._rowIndexOffset,t+this._columnIndexOffset)}},{key:"clearAll",value:function(){this._cellMeasurerCache.clearAll()}},{key:"hasFixedHeight",value:function(){return this._cellMeasurerCache.hasFixedHeight()}},{key:"hasFixedWidth",value:function(){return this._cellMeasurerCache.hasFixedWidth()}},{key:"getHeight",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return this._cellMeasurerCache.getHeight(e+this._rowIndexOffset,t+this._columnIndexOffset)}},{key:"getWidth",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return this._cellMeasurerCache.getWidth(e+this._rowIndexOffset,t+this._columnIndexOffset)}},{key:"has",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return this._cellMeasurerCache.has(e+this._rowIndexOffset,t+this._columnIndexOffset)}},{key:"set",value:function(e,t,o,i){this._cellMeasurerCache.set(e+this._rowIndexOffset,t+this._columnIndexOffset,o,i)}},{key:"defaultHeight",get:function(){return this._cellMeasurerCache.defaultHeight}},{key:"defaultWidth",get:function(){return this._cellMeasurerCache.defaultWidth}}]),e}();function Xe(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,i)}return o}function Ye(e){for(var t=1;t0?new Ke({cellMeasurerCache:r,columnIndexOffset:0,rowIndexOffset:s}):r,n._deferredMeasurementCacheBottomRightGrid=l>0||s>0?new Ke({cellMeasurerCache:r,columnIndexOffset:l,rowIndexOffset:s}):r,n._deferredMeasurementCacheTopRightGrid=l>0?new Ke({cellMeasurerCache:r,columnIndexOffset:l,rowIndexOffset:0}):r),n}return u(t,e),l(t,[{key:"forceUpdateGrids",value:function(){this._bottomLeftGrid&&this._bottomLeftGrid.forceUpdate(),this._bottomRightGrid&&this._bottomRightGrid.forceUpdate(),this._topLeftGrid&&this._topLeftGrid.forceUpdate(),this._topRightGrid&&this._topRightGrid.forceUpdate()}},{key:"invalidateCellSizeAfterRender",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.columnIndex,o=void 0===t?0:t,i=e.rowIndex,n=void 0===i?0:i;this._deferredInvalidateColumnIndex="number"===typeof this._deferredInvalidateColumnIndex?Math.min(this._deferredInvalidateColumnIndex,o):o,this._deferredInvalidateRowIndex="number"===typeof this._deferredInvalidateRowIndex?Math.min(this._deferredInvalidateRowIndex,n):n}},{key:"measureAllCells",value:function(){this._bottomLeftGrid&&this._bottomLeftGrid.measureAllCells(),this._bottomRightGrid&&this._bottomRightGrid.measureAllCells(),this._topLeftGrid&&this._topLeftGrid.measureAllCells(),this._topRightGrid&&this._topRightGrid.measureAllCells()}},{key:"recomputeGridSize",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.columnIndex,o=void 0===t?0:t,i=e.rowIndex,n=void 0===i?0:i,r=this.props,l=r.fixedColumnCount,s=r.fixedRowCount,a=Math.max(0,o-l),c=Math.max(0,n-s);this._bottomLeftGrid&&this._bottomLeftGrid.recomputeGridSize({columnIndex:o,rowIndex:c}),this._bottomRightGrid&&this._bottomRightGrid.recomputeGridSize({columnIndex:a,rowIndex:c}),this._topLeftGrid&&this._topLeftGrid.recomputeGridSize({columnIndex:o,rowIndex:n}),this._topRightGrid&&this._topRightGrid.recomputeGridSize({columnIndex:a,rowIndex:n}),this._leftGridWidth=null,this._topGridHeight=null,this._maybeCalculateCachedStyles(!0)}},{key:"componentDidMount",value:function(){var e=this.props,t=e.scrollLeft,o=e.scrollTop;if(t>0||o>0){var i={};t>0&&(i.scrollLeft=t),o>0&&(i.scrollTop=o),this.setState(i)}this._handleInvalidatedGridSize()}},{key:"componentDidUpdate",value:function(){this._handleInvalidatedGridSize()}},{key:"render",value:function(){var e=this.props,t=e.onScroll,o=e.onSectionRendered,i=(e.onScrollbarPresenceChange,e.scrollLeft,e.scrollToColumn),n=(e.scrollTop,e.scrollToRow),r=S(e,["onScroll","onSectionRendered","onScrollbarPresenceChange","scrollLeft","scrollToColumn","scrollTop","scrollToRow"]);if(this._prepareForRender(),0===this.props.width||0===this.props.height)return null;var l=this.state,s=l.scrollLeft,a=l.scrollTop;return p.createElement("div",{style:this._containerOuterStyle},p.createElement("div",{style:this._containerTopStyle},this._renderTopLeftGrid(r),this._renderTopRightGrid(Ye({},r,{onScroll:t,scrollLeft:s}))),p.createElement("div",{style:this._containerBottomStyle},this._renderBottomLeftGrid(Ye({},r,{onScroll:t,scrollTop:a})),this._renderBottomRightGrid(Ye({},r,{onScroll:t,onSectionRendered:o,scrollLeft:s,scrollToColumn:i,scrollToRow:n,scrollTop:a}))))}},{key:"_getBottomGridHeight",value:function(e){return e.height-this._getTopGridHeight(e)}},{key:"_getLeftGridWidth",value:function(e){var t=e.fixedColumnCount,o=e.columnWidth;if(null==this._leftGridWidth)if("function"===typeof o){for(var i=0,n=0;n=0?e.scrollLeft:t.scrollLeft,scrollTop:null!=e.scrollTop&&e.scrollTop>=0?e.scrollTop:t.scrollTop}:null}}]),t}(p.PureComponent);(0,f.A)(Je,"defaultProps",{classNameBottomLeftGrid:"",classNameBottomRightGrid:"",classNameTopLeftGrid:"",classNameTopRightGrid:"",enableFixedColumnScroll:!1,enableFixedRowScroll:!1,fixedColumnCount:0,fixedRowCount:0,scrollToColumn:-1,scrollToRow:-1,style:{},styleBottomLeftGrid:{},styleBottomRightGrid:{},styleTopLeftGrid:{},styleTopRightGrid:{},hideTopRightGridScrollbar:!1,hideBottomLeftGridScrollbar:!1}),Je.propTypes={},(0,g.polyfill)(Je);(function(e){function t(e,o){var n;return i(this,t),(n=c(this,d(t).call(this,e,o))).state={clientHeight:0,clientWidth:0,scrollHeight:0,scrollLeft:0,scrollTop:0,scrollWidth:0},n._onScroll=n._onScroll.bind((0,a.A)(n)),n}return u(t,e),l(t,[{key:"render",value:function(){var e=this.props.children,t=this.state,o=t.clientHeight,i=t.clientWidth,n=t.scrollHeight,r=t.scrollLeft,l=t.scrollTop,s=t.scrollWidth;return e({clientHeight:o,clientWidth:i,onScroll:this._onScroll,scrollHeight:n,scrollLeft:r,scrollTop:l,scrollWidth:s})}},{key:"_onScroll",value:function(e){var t=e.clientHeight,o=e.clientWidth,i=e.scrollHeight,n=e.scrollLeft,r=e.scrollTop,l=e.scrollWidth;this.setState({clientHeight:t,clientWidth:o,scrollHeight:i,scrollLeft:n,scrollTop:r,scrollWidth:l})}}]),t}(p.PureComponent)).propTypes={};function Ze(e){var t=e.className,o=e.columns,i=e.style;return p.createElement("div",{className:t,role:"row",style:i},o)}Ze.propTypes=null;const $e={ASC:"ASC",DESC:"DESC"};function Qe(e){var t=e.sortDirection,o=(0,_.A)("ReactVirtualized__Table__sortableHeaderIcon",{"ReactVirtualized__Table__sortableHeaderIcon--ASC":t===$e.ASC,"ReactVirtualized__Table__sortableHeaderIcon--DESC":t===$e.DESC});return p.createElement("svg",{className:o,width:18,height:18,viewBox:"0 0 24 24"},t===$e.ASC?p.createElement("path",{d:"M7 14l5-5 5 5z"}):p.createElement("path",{d:"M7 10l5 5 5-5z"}),p.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}))}function et(e){var t=e.dataKey,o=e.label,i=e.sortBy,n=e.sortDirection,r=i===t,l=[p.createElement("span",{className:"ReactVirtualized__Table__headerTruncatedText",key:"label",title:"string"===typeof o?o:null},o)];return r&&l.push(p.createElement(Qe,{key:"SortIndicator",sortDirection:n})),l}function tt(e){var t=e.className,o=e.columns,i=e.index,n=e.key,r=e.onRowClick,l=e.onRowDoubleClick,s=e.onRowMouseOut,a=e.onRowMouseOver,c=e.onRowRightClick,d=e.rowData,h=e.style,u={"aria-rowindex":i+1};return(r||l||s||a||c)&&(u["aria-label"]="row",u.tabIndex=0,r&&(u.onClick=function(e){return r({event:e,index:i,rowData:d})}),l&&(u.onDoubleClick=function(e){return l({event:e,index:i,rowData:d})}),s&&(u.onMouseOut=function(e){return s({event:e,index:i,rowData:d})}),a&&(u.onMouseOver=function(e){return a({event:e,index:i,rowData:d})}),c&&(u.onContextMenu=function(e){return c({event:e,index:i,rowData:d})})),p.createElement("div",(0,v.A)({},u,{className:t,key:n,role:"row",style:h}),o)}Qe.propTypes={},et.propTypes=null,tt.propTypes=null;var ot=function(e){function t(){return i(this,t),c(this,d(t).apply(this,arguments))}return u(t,e),t}(p.Component);function it(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,i)}return o}function nt(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{},t=e.columnIndex,o=void 0===t?0:t,i=e.rowIndex,n=void 0===i?0:i;this.Grid&&this.Grid.recomputeGridSize({rowIndex:n,columnIndex:o})}},{key:"recomputeRowHeights",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;this.Grid&&this.Grid.recomputeGridSize({rowIndex:e})}},{key:"scrollToPosition",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;this.Grid&&this.Grid.scrollToPosition({scrollTop:e})}},{key:"scrollToRow",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;this.Grid&&this.Grid.scrollToCell({columnIndex:0,rowIndex:e})}},{key:"getScrollbarWidth",value:function(){if(this.Grid){var e=(0,oe.findDOMNode)(this.Grid),t=e.clientWidth||0;return(e.offsetWidth||0)-t}return 0}},{key:"componentDidMount",value:function(){this._setScrollbarWidth()}},{key:"componentDidUpdate",value:function(){this._setScrollbarWidth()}},{key:"render",value:function(){var e=this,t=this.props,o=t.children,i=t.className,n=t.disableHeader,r=t.gridClassName,l=t.gridStyle,s=t.headerHeight,a=t.headerRowRenderer,c=t.height,d=t.id,h=t.noRowsRenderer,u=t.rowClassName,f=t.rowStyle,g=t.scrollToIndex,m=t.style,S=t.width,C=this.state.scrollbarWidth,y=n?c:c-s,w="function"===typeof u?u({index:-1}):u,x="function"===typeof f?f({index:-1}):f;return this._cachedColumnStyles=[],p.Children.toArray(o).forEach((function(t,o){var i=e._getFlexStyleForColumn(t,t.props.style);e._cachedColumnStyles[o]=nt({overflow:"hidden"},i)})),p.createElement("div",{"aria-label":this.props["aria-label"],"aria-labelledby":this.props["aria-labelledby"],"aria-colcount":p.Children.toArray(o).length,"aria-rowcount":this.props.rowCount,className:(0,_.A)("ReactVirtualized__Table",i),id:d,role:"grid",style:m},!n&&a({className:(0,_.A)("ReactVirtualized__Table__headerRow",w),columns:this._getHeaderColumns(),style:nt({height:s,overflow:"hidden",paddingRight:C,width:S},x)}),p.createElement(N,(0,v.A)({},this.props,{"aria-readonly":null,autoContainerWidth:!0,className:(0,_.A)("ReactVirtualized__Table__Grid",r),cellRenderer:this._createRow,columnWidth:S,columnCount:1,height:y,id:void 0,noContentRenderer:h,onScroll:this._onScroll,onSectionRendered:this._onSectionRendered,ref:this._setRef,role:"rowgroup",scrollbarWidth:C,scrollToRow:g,style:nt({},l,{overflowX:"hidden"})})))}},{key:"_createColumn",value:function(e){var t=e.column,o=e.columnIndex,i=e.isScrolling,n=e.parent,r=e.rowData,l=e.rowIndex,s=this.props.onColumnClick,a=t.props,c=a.cellDataGetter,d=a.cellRenderer,h=a.className,u=a.columnData,f=a.dataKey,g=a.id,v=d({cellData:c({columnData:u,dataKey:f,rowData:r}),columnData:u,columnIndex:o,dataKey:f,isScrolling:i,parent:n,rowData:r,rowIndex:l}),m=this._cachedColumnStyles[o],S="string"===typeof v?v:null;return p.createElement("div",{"aria-colindex":o+1,"aria-describedby":g,className:(0,_.A)("ReactVirtualized__Table__rowColumn",h),key:"Row"+l+"-Col"+o,onClick:function(e){s&&s({columnData:u,dataKey:f,event:e})},role:"gridcell",style:m,title:S},v)}},{key:"_createHeader",value:function(e){var t,o,i,n,r,l=e.column,s=e.index,a=this.props,c=a.headerClassName,d=a.headerStyle,h=a.onHeaderClick,u=a.sort,f=a.sortBy,g=a.sortDirection,v=l.props,m=v.columnData,S=v.dataKey,C=v.defaultSortDirection,y=v.disableSort,w=v.headerRenderer,x=v.id,R=v.label,b=!y&&u,T=(0,_.A)("ReactVirtualized__Table__headerColumn",c,l.props.headerClassName,{ReactVirtualized__Table__sortableHeaderColumn:b}),A=this._getFlexStyleForColumn(l,nt({},d,{},l.props.headerStyle)),z=w({columnData:m,dataKey:S,disableSort:y,label:R,sortBy:f,sortDirection:g});if(b||h){var I=f!==S?C:g===$e.DESC?$e.ASC:$e.DESC,M=function(e){b&&u({defaultSortDirection:C,event:e,sortBy:S,sortDirection:I}),h&&h({columnData:m,dataKey:S,event:e})};r=l.props["aria-label"]||R||S,n="none",i=0,t=M,o=function(e){"Enter"!==e.key&&" "!==e.key||M(e)}}return f===S&&(n=g===$e.ASC?"ascending":"descending"),p.createElement("div",{"aria-label":r,"aria-sort":n,className:T,id:x,key:"Header-Col"+s,onClick:t,onKeyDown:o,role:"columnheader",style:A,tabIndex:i},z)}},{key:"_createRow",value:function(e){var t=this,o=e.rowIndex,i=e.isScrolling,n=e.key,r=e.parent,l=e.style,s=this.props,a=s.children,c=s.onRowClick,d=s.onRowDoubleClick,h=s.onRowRightClick,u=s.onRowMouseOver,f=s.onRowMouseOut,g=s.rowClassName,v=s.rowGetter,m=s.rowRenderer,S=s.rowStyle,C=this.state.scrollbarWidth,y="function"===typeof g?g({index:o}):g,w="function"===typeof S?S({index:o}):S,x=v({index:o}),R=p.Children.toArray(a).map((function(e,n){return t._createColumn({column:e,columnIndex:n,isScrolling:i,parent:r,rowData:x,rowIndex:o,scrollbarWidth:C})})),b=(0,_.A)("ReactVirtualized__Table__row",y),T=nt({},l,{height:this._getRowHeight(o),overflow:"hidden",paddingRight:C},w);return m({className:b,columns:R,index:o,isScrolling:i,key:n,onRowClick:c,onRowDoubleClick:d,onRowRightClick:h,onRowMouseOver:u,onRowMouseOut:f,rowData:x,style:T})}},{key:"_getFlexStyleForColumn",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o="".concat(e.props.flexGrow," ").concat(e.props.flexShrink," ").concat(e.props.width,"px"),i=nt({},t,{flex:o,msFlex:o,WebkitFlex:o});return e.props.maxWidth&&(i.maxWidth=e.props.maxWidth),e.props.minWidth&&(i.minWidth=e.props.minWidth),i}},{key:"_getHeaderColumns",value:function(){var e=this,t=this.props,o=t.children;return(t.disableHeader?[]:p.Children.toArray(o)).map((function(t,o){return e._createHeader({column:t,index:o})}))}},{key:"_getRowHeight",value:function(e){var t=this.props.rowHeight;return"function"===typeof t?t({index:e}):t}},{key:"_onScroll",value:function(e){var t=e.clientHeight,o=e.scrollHeight,i=e.scrollTop;(0,this.props.onScroll)({clientHeight:t,scrollHeight:o,scrollTop:i})}},{key:"_onSectionRendered",value:function(e){var t=e.rowOverscanStartIndex,o=e.rowOverscanStopIndex,i=e.rowStartIndex,n=e.rowStopIndex;(0,this.props.onRowsRendered)({overscanStartIndex:t,overscanStopIndex:o,startIndex:i,stopIndex:n})}},{key:"_setRef",value:function(e){this.Grid=e}},{key:"_setScrollbarWidth",value:function(){var e=this.getScrollbarWidth();this.setState({scrollbarWidth:e})}}]),t}(p.PureComponent);(0,f.A)(rt,"defaultProps",{disableHeader:!1,estimatedRowSize:30,headerHeight:0,headerStyle:{},noRowsRenderer:function(){return null},onRowsRendered:function(){return null},onScroll:function(){return null},overscanIndicesGetter:U,overscanRowCount:10,rowRenderer:tt,headerRowRenderer:Ze,rowStyle:{},scrollToAlignment:"auto",scrollToIndex:-1,style:{}}),rt.propTypes={};var lt=[],st=null,at=null;function ct(){at&&(at=null,document.body&&null!=st&&(document.body.style.pointerEvents=st),st=null)}function dt(){ct(),lt.forEach((function(e){return e.__resetIsScrolling()}))}function ht(e){e.currentTarget===window&&null==st&&document.body&&(st=document.body.style.pointerEvents,document.body.style.pointerEvents="none"),function(){at&&G(at);var e=0;lt.forEach((function(t){e=Math.max(e,t.props.scrollingResetTimeInterval)})),at=H(dt,e)}(),lt.forEach((function(t){t.props.scrollElement===e.currentTarget&&t.__handleWindowScrollEvent()}))}function ut(e,t){lt.some((function(e){return e.props.scrollElement===t}))||t.addEventListener("scroll",ht),lt.push(e)}function ft(e,t){(lt=lt.filter((function(t){return t!==e}))).length||(t.removeEventListener("scroll",ht),at&&(G(at),ct()))}var pt,gt,vt=function(e){return e===window},_t=function(e){return e.getBoundingClientRect()};function mt(e,t){if(e){if(vt(e)){var o=window,i=o.innerHeight,n=o.innerWidth;return{height:"number"===typeof i?i:0,width:"number"===typeof n?n:0}}return _t(e)}return{height:t.serverHeight,width:t.serverWidth}}function St(e){return vt(e)&&document.documentElement?{top:"scrollY"in window?window.scrollY:document.documentElement.scrollTop,left:"scrollX"in window?window.scrollX:document.documentElement.scrollLeft}:{top:e.scrollTop,left:e.scrollLeft}}function Ct(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,i)}return o}var yt=function(){return"undefined"!==typeof window?window:void 0},wt=(gt=pt=function(e){function t(){var e,o;i(this,t);for(var n=arguments.length,r=new Array(n),l=0;l0&&void 0!==arguments[0]?arguments[0]:this.props.scrollElement,t=this.props.onResize,o=this.state,i=o.height,n=o.width,r=this._child||oe.findDOMNode(this);if(r instanceof Element&&e){var l=function(e,t){if(vt(t)&&document.documentElement){var o=document.documentElement,i=_t(e),n=_t(o);return{top:i.top-n.top,left:i.left-n.left}}var r=St(t),l=_t(e),s=_t(t);return{top:l.top+r.top-s.top,left:l.left+r.left-s.left}}(r,e);this._positionFromTop=l.top,this._positionFromLeft=l.left}var s=mt(e,this.props);i===s.height&&n===s.width||(this.setState({height:s.height,width:s.width}),t({height:s.height,width:s.width}))}},{key:"componentDidMount",value:function(){var e=this.props.scrollElement;this._detectElementResize=X(),this.updatePosition(e),e&&(ut(this,e),this._registerResizeListener(e)),this._isMounted=!0}},{key:"componentDidUpdate",value:function(e,t){var o=this.props.scrollElement,i=e.scrollElement;i!==o&&null!=i&&null!=o&&(this.updatePosition(o),ft(this,i),ut(this,o),this._unregisterResizeListener(i),this._registerResizeListener(o))}},{key:"componentWillUnmount",value:function(){var e=this.props.scrollElement;e&&(ft(this,e),this._unregisterResizeListener(e)),this._isMounted=!1}},{key:"render",value:function(){var e=this.props.children,t=this.state,o=t.isScrolling,i=t.scrollTop,n=t.scrollLeft,r=t.height,l=t.width;return e({onChildScroll:this._onChildScroll,registerChild:this._registerChild,height:r,isScrolling:o,scrollLeft:n,scrollTop:i,width:l})}}]),t}(p.PureComponent),(0,f.A)(pt,"propTypes",null),gt);(0,f.A)(wt,"defaultProps",{onResize:function(){},onScroll:function(){},scrollingResetTimeInterval:150,scrollElement:yt(),serverHeight:0,serverWidth:0})},1798:(e,t,o)=>{function i(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}o.d(t,{A:()=>i})},8168:(e,t,o)=>{function i(){return i=Object.assign?Object.assign.bind():function(e){for(var t=1;ti})},3662:(e,t,o)=>{function i(e,t){return i=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},i(e,t)}o.d(t,{A:()=>i})}}]); -//# sourceMappingURL=64.2066437f.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/64.2066437f.chunk.js.map b/web-app/build/static/js/64.2066437f.chunk.js.map deleted file mode 100644 index 3daea824aca..00000000000 --- a/web-app/build/static/js/64.2066437f.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/64.2066437f.chunk.js","mappings":"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","sources":["../node_modules/clsx/dist/clsx.m.js","../node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../node_modules/@babel/runtime/helpers/esm/createClass.js","../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/inherits.js","../node_modules/react-virtualized/dist/es/Grid/utils/calculateSizeAndPositionDataAndUpdateScrollOffset.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/react-virtualized/dist/es/Grid/types.js","../node_modules/react-virtualized/dist/es/Grid/utils/CellSizeAndPositionManager.js","../node_modules/react-virtualized/dist/es/Grid/utils/maxElementSize.js","../node_modules/react-virtualized/dist/es/Grid/utils/ScalingCellSizeAndPositionManager.js","../node_modules/react-virtualized/dist/es/utils/createCallbackMemoizer.js","../node_modules/react-virtualized/dist/es/Grid/utils/updateScrollIndexHelper.js","../node_modules/dom-helpers/esm/canUseDOM.js","../node_modules/dom-helpers/esm/scrollbarSize.js","../node_modules/react-virtualized/dist/es/utils/animationFrame.js","../node_modules/react-virtualized/dist/es/Grid/Grid.js","../node_modules/react-virtualized/dist/es/utils/requestAnimationTimeout.js","../node_modules/react-virtualized/dist/es/Grid/defaultOverscanIndicesGetter.js","../node_modules/react-virtualized/dist/es/Grid/defaultCellRangeRenderer.js","../node_modules/react-virtualized/dist/es/Grid/accessibilityOverscanIndicesGetter.js","../node_modules/react-virtualized/dist/es/ArrowKeyStepper/types.js","../node_modules/react-virtualized/dist/es/ArrowKeyStepper/ArrowKeyStepper.js","../node_modules/react-virtualized/dist/es/vendor/detectElementResize.js","../node_modules/react-virtualized/dist/es/AutoSizer/AutoSizer.js","../node_modules/react-virtualized/dist/es/CellMeasurer/CellMeasurer.js","../node_modules/react-virtualized/dist/es/CellMeasurer/CellMeasurerCache.js","../node_modules/react-virtualized/dist/es/Collection/CollectionView.js","../node_modules/react-virtualized/dist/es/Collection/types.js","../node_modules/react-virtualized/dist/es/Collection/Section.js","../node_modules/react-virtualized/dist/es/Collection/SectionManager.js","../node_modules/react-virtualized/dist/es/utils/getUpdatedOffsetForIndex.js","../node_modules/react-virtualized/dist/es/Collection/Collection.js","../node_modules/react-virtualized/dist/es/Collection/utils/calculateSizeAndPositionData.js","../node_modules/react-virtualized/dist/es/ColumnSizer/ColumnSizer.js","../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","../node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","../node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","../node_modules/react-virtualized/dist/es/InfiniteLoader/InfiniteLoader.js","../node_modules/react-virtualized/dist/es/List/types.js","../node_modules/react-virtualized/dist/es/List/List.js","../node_modules/@babel/runtime/helpers/esm/slicedToArray.js","../node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","../node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","../node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","../node_modules/react-virtualized/dist/es/vendor/binarySearchBounds.js","../node_modules/react-virtualized/dist/es/vendor/intervalTree.js","../node_modules/react-virtualized/dist/es/Masonry/PositionCache.js","../node_modules/react-virtualized/dist/es/Masonry/Masonry.js","../node_modules/react-virtualized/dist/es/MultiGrid/CellMeasurerCacheDecorator.js","../node_modules/react-virtualized/dist/es/MultiGrid/MultiGrid.js","../node_modules/react-virtualized/dist/es/ScrollSync/ScrollSync.js","../node_modules/react-virtualized/dist/es/Table/defaultHeaderRowRenderer.js","../node_modules/react-virtualized/dist/es/Table/SortDirection.js","../node_modules/react-virtualized/dist/es/Table/SortIndicator.js","../node_modules/react-virtualized/dist/es/Table/defaultHeaderRenderer.js","../node_modules/react-virtualized/dist/es/Table/defaultRowRenderer.js","../node_modules/react-virtualized/dist/es/Table/Column.js","../node_modules/react-virtualized/dist/es/Table/Table.js","../node_modules/react-virtualized/dist/es/Table/defaultCellDataGetter.js","../node_modules/react-virtualized/dist/es/Table/defaultCellRenderer.js","../node_modules/react-virtualized/dist/es/WindowScroller/utils/onScroll.js","../node_modules/react-virtualized/dist/es/WindowScroller/utils/dimensions.js","../node_modules/react-virtualized/dist/es/WindowScroller/WindowScroller.js","../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js"],"sourcesContent":["function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e))for(t=0;t
\n \n \n \n \n \n );\n })}\n \n \n ) : null;\n};\n\nexport default KMSPolicyInfo;\n","// This file is part of MinIO Operator\n// Copyright (c) 2023 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport {\n Box,\n Button,\n CodeEditor,\n FileSelector,\n FormLayout,\n Grid,\n InformativeMessage,\n InputBox,\n RadioGroup,\n SectionTitle,\n Switch,\n Tabs,\n} from \"mds\";\nimport { modalStyleUtils } from \"../../Common/FormComponents/common/styleLibrary\";\nimport { useSelector } from \"react-redux\";\nimport { ICertificateInfo, ITenantEncryptionResponse } from \"../types\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport { KeyPair } from \"../ListTenants/utils\";\nimport { clearValidationError } from \"../utils\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../utils/validationFunctions\";\nimport { setErrorSnackMessage } from \"../../../../systemSlice\";\nimport { SecurityContext } from \"../../../../api/operatorApi\";\nimport api from \"../../../../common/api\";\nimport ConfirmDialog from \"../../Common/ModalWrapper/ConfirmDialog\";\nimport TLSCertificate from \"../../Common/TLSCertificate/TLSCertificate\";\nimport KMSPolicyInfo from \"./KMSPolicyInfo\";\n\nconst TenantEncryption = () => {\n const dispatch = useAppDispatch();\n\n const tenant = useSelector((state: AppState) => state.tenants.tenantInfo);\n const [editRawConfiguration, setEditRawConfiguration] =\n useState(\"options\");\n const [encryptionRawConfiguration, setEncryptionRawConfiguration] =\n useState(\"\");\n const [encryptionEnabled, setEncryptionEnabled] = useState(false);\n const [encryptionType, setEncryptionType] = useState(\"vault\");\n const [replicas, setReplicas] = useState(\"1\");\n const [image, setImage] = useState(\"\");\n const [refreshEncryptionInfo, setRefreshEncryptionInfo] =\n useState(false);\n const [securityContext, setSecurityContext] = useState({\n fsGroup: \"1000\",\n fsGroupChangePolicy: \"Always\",\n runAsGroup: \"1000\",\n runAsNonRoot: true,\n runAsUser: \"1000\",\n });\n const [policies, setPolicies] = useState([]);\n const [vaultConfiguration, setVaultConfiguration] = useState(null);\n const [awsConfiguration, setAWSConfiguration] = useState(null);\n const [gemaltoConfiguration, setGemaltoConfiguration] = useState(null);\n const [azureConfiguration, setAzureConfiguration] = useState(null);\n const [gcpConfiguration, setGCPConfiguration] = useState(null);\n const [enabledCustomCertificates, setEnabledCustomCertificates] =\n useState(false);\n const [updatingEncryption, setUpdatingEncryption] = useState(false);\n const [kesServerTLSCertificateSecret, setKesServerTLSCertificateSecret] =\n useState(null);\n const [minioMTLSCertificateSecret, setMinioMTLSCertificateSecret] =\n useState(null);\n const [minioMTLSCertificate, setMinioMTLSCertificate] =\n useState(null);\n const [certificatesToBeRemoved, setCertificatesToBeRemoved] = useState<\n string[]\n >([]);\n const [isFormValid, setIsFormValid] = useState(false);\n const [kmsMTLSCertificateSecret, setKmsMTLSCertificateSecret] =\n useState(null);\n const [kmsCACertificateSecret, setKMSCACertificateSecret] =\n useState(null);\n const [kmsMTLSCertificate, setKmsMTLSCertificate] = useState(\n null,\n );\n const [kesServerCertificate, setKESServerCertificate] =\n useState(null);\n const [kmsCACertificate, setKmsCACertificate] = useState(\n null,\n );\n const [validationErrors, setValidationErrors] = useState({});\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n const [confirmOpen, setConfirmOpen] = useState(false);\n\n // Validation\n useEffect(() => {\n let encryptionValidation: IValidation[] = [];\n\n if (encryptionEnabled) {\n encryptionValidation = [\n {\n fieldKey: \"replicas\",\n required: true,\n value: replicas,\n customValidation: parseInt(replicas) < 1,\n customValidationMessage: \"Replicas needs to be 1 or greater\",\n },\n {\n fieldKey: \"kes_securityContext_runAsUser\",\n required: true,\n value: securityContext.runAsUser,\n customValidation:\n securityContext.runAsUser === \"\" ||\n parseInt(securityContext.runAsUser) < 0,\n customValidationMessage: `runAsUser must be present and be 0 or more`,\n },\n {\n fieldKey: \"kes_securityContext_runAsGroup\",\n required: true,\n value: securityContext.runAsGroup,\n customValidation:\n securityContext.runAsGroup === \"\" ||\n parseInt(securityContext.runAsGroup) < 0,\n customValidationMessage: `runAsGroup must be present and be 0 or more`,\n },\n {\n fieldKey: \"kes_securityContext_fsGroup\",\n required: true,\n value: securityContext.fsGroup!,\n customValidation:\n securityContext.fsGroup === \"\" ||\n parseInt(securityContext.fsGroup!) < 0,\n customValidationMessage: `fsGroup must be present and be 0 or more`,\n },\n ];\n\n if (enabledCustomCertificates) {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"serverKey\",\n required: false,\n value: kesServerCertificate?.encoded_key || \"\",\n },\n {\n fieldKey: \"serverCert\",\n required: false,\n value: kesServerCertificate?.encoded_cert || \"\",\n },\n {\n fieldKey: \"clientKey\",\n required: false,\n value: minioMTLSCertificate?.encoded_key || \"\",\n },\n {\n fieldKey: \"clientCert\",\n required: false,\n value: minioMTLSCertificate?.encoded_cert || \"\",\n },\n ];\n }\n\n if (encryptionType === \"vault\") {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"vault_endpoint\",\n required: true,\n value: vaultConfiguration?.endpoint,\n },\n {\n fieldKey: \"vault_id\",\n required: true,\n value: vaultConfiguration?.approle?.id,\n },\n {\n fieldKey: \"vault_secret\",\n required: true,\n value: vaultConfiguration?.approle?.secret,\n },\n {\n fieldKey: \"vault_ping\",\n required: false,\n value: vaultConfiguration?.status?.ping,\n customValidation: parseInt(vaultConfiguration?.status?.ping) < 0,\n customValidationMessage: \"Value needs to be 0 or greater\",\n },\n {\n fieldKey: \"vault_retry\",\n required: false,\n value: vaultConfiguration?.approle?.retry,\n customValidation: parseInt(vaultConfiguration?.approle?.retry) < 0,\n customValidationMessage: \"Value needs to be 0 or greater\",\n },\n ];\n }\n\n if (encryptionType === \"aws\") {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"aws_endpoint\",\n required: true,\n value: awsConfiguration?.secretsmanager?.endpoint,\n },\n {\n fieldKey: \"aws_region\",\n required: true,\n value: awsConfiguration?.secretsmanager?.region,\n },\n {\n fieldKey: \"aws_accessKey\",\n required: true,\n value: awsConfiguration?.secretsmanager?.credentials?.accesskey,\n },\n {\n fieldKey: \"aws_secretKey\",\n required: true,\n value: awsConfiguration?.secretsmanager?.credentials?.secretkey,\n },\n ];\n }\n\n if (encryptionType === \"gemalto\") {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"gemalto_endpoint\",\n required: true,\n value: gemaltoConfiguration?.keysecure?.endpoint,\n },\n {\n fieldKey: \"gemalto_token\",\n required: true,\n value: gemaltoConfiguration?.keysecure?.credentials?.token,\n },\n {\n fieldKey: \"gemalto_domain\",\n required: true,\n value: gemaltoConfiguration?.keysecure?.credentials?.domain,\n },\n {\n fieldKey: \"gemalto_retry\",\n required: false,\n value: gemaltoConfiguration?.keysecure?.credentials?.retry,\n customValidation:\n parseInt(gemaltoConfiguration?.keysecure?.credentials?.retry) < 0,\n customValidationMessage: \"Value needs to be 0 or greater\",\n },\n ];\n }\n\n if (encryptionType === \"azure\") {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"azure_endpoint\",\n required: true,\n value: azureConfiguration?.keyvault?.endpoint,\n },\n {\n fieldKey: \"azure_tenant_id\",\n required: true,\n value: azureConfiguration?.keyvault?.credentials?.tenant_id,\n },\n {\n fieldKey: \"azure_client_id\",\n required: true,\n value: azureConfiguration?.keyvault?.credentials?.client_id,\n },\n {\n fieldKey: \"azure_client_secret\",\n required: true,\n value: azureConfiguration?.keyvault?.credentials?.client_secret,\n },\n ];\n }\n }\n\n const commonVal = commonFormValidation(encryptionValidation);\n\n setIsFormValid(Object.keys(commonVal).length === 0);\n\n setValidationErrors(commonVal);\n }, [\n enabledCustomCertificates,\n encryptionEnabled,\n encryptionType,\n kesServerCertificate?.encoded_key,\n kesServerCertificate?.encoded_cert,\n minioMTLSCertificate?.encoded_key,\n minioMTLSCertificate?.encoded_cert,\n kmsMTLSCertificate?.encoded_key,\n kmsMTLSCertificate?.encoded_cert,\n kmsCACertificate?.encoded_key,\n kmsCACertificate?.encoded_cert,\n securityContext,\n vaultConfiguration,\n awsConfiguration,\n gemaltoConfiguration,\n azureConfiguration,\n gcpConfiguration,\n replicas,\n ]);\n\n const fetchEncryptionInfo = () => {\n if (!refreshEncryptionInfo && tenant?.namespace && tenant?.name) {\n setRefreshEncryptionInfo(true);\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${tenant?.namespace}/tenants/${tenant?.name}/encryption`,\n )\n .then((resp: ITenantEncryptionResponse) => {\n setEncryptionRawConfiguration(resp.raw);\n if (resp.policies) {\n setPolicies(resp.policies);\n }\n if (resp.vault) {\n setEncryptionType(\"vault\");\n setVaultConfiguration(resp.vault);\n } else if (resp.aws) {\n setEncryptionType(\"aws\");\n setAWSConfiguration(resp.aws);\n } else if (resp.gemalto) {\n setEncryptionType(\"gemalto\");\n setGemaltoConfiguration(resp.gemalto);\n } else if (resp.gcp) {\n setEncryptionType(\"gcp\");\n setGCPConfiguration(resp.gcp);\n } else if (resp.azure) {\n setEncryptionType(\"azure\");\n setAzureConfiguration(resp.azure);\n }\n\n setEncryptionEnabled(true);\n setImage(resp.image);\n setReplicas(resp.replicas);\n if (resp.securityContext) {\n setSecurityContext(resp.securityContext);\n }\n if (resp.server_tls || resp.minio_mtls || resp.kms_mtls) {\n setEnabledCustomCertificates(true);\n }\n if (resp.server_tls) {\n setKesServerTLSCertificateSecret(resp.server_tls);\n }\n if (resp.minio_mtls) {\n setMinioMTLSCertificateSecret(resp.minio_mtls);\n }\n if (resp.kms_mtls) {\n setKmsMTLSCertificateSecret(resp.kms_mtls.crt);\n setKMSCACertificateSecret(resp.kms_mtls.ca);\n }\n setRefreshEncryptionInfo(false);\n })\n .catch((err: ErrorResponseHandler) => {\n console.error(err);\n setRefreshEncryptionInfo(false);\n });\n }\n };\n\n useEffect(() => {\n fetchEncryptionInfo();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [tenant]);\n\n const removeCertificate = (certificateInfo: ICertificateInfo) => {\n setCertificatesToBeRemoved([\n ...certificatesToBeRemoved,\n certificateInfo.name,\n ]);\n if (certificateInfo.name === kesServerTLSCertificateSecret?.name) {\n setKesServerTLSCertificateSecret(null);\n }\n if (certificateInfo.name === minioMTLSCertificateSecret?.name) {\n setMinioMTLSCertificateSecret(null);\n }\n if (certificateInfo.name === kmsMTLSCertificateSecret?.name) {\n setKmsMTLSCertificateSecret(null);\n }\n if (certificateInfo.name === kmsCACertificateSecret?.name) {\n setKMSCACertificateSecret(null);\n }\n };\n\n const updateEncryptionConfiguration = () => {\n if (encryptionEnabled) {\n let insertEncrypt = {};\n switch (encryptionType) {\n case \"gemalto\":\n insertEncrypt = {\n gemalto: {\n keysecure: {\n endpoint: gemaltoConfiguration?.keysecure?.endpoint || \"\",\n credentials: {\n token:\n gemaltoConfiguration?.keysecure?.credentials?.token || \"\",\n domain:\n gemaltoConfiguration?.keysecure?.credentials?.domain || \"\",\n retry: parseInt(\n gemaltoConfiguration?.keysecure?.credentials?.retry,\n ),\n },\n },\n },\n };\n break;\n case \"aws\":\n insertEncrypt = {\n aws: {\n secretsmanager: {\n endpoint: awsConfiguration?.secretsmanager?.endpoint || \"\",\n region: awsConfiguration?.secretsmanager?.region || \"\",\n kmskey: awsConfiguration?.secretsmanager?.kmskey || \"\",\n credentials: {\n accesskey:\n awsConfiguration?.secretsmanager?.credentials?.accesskey ||\n \"\",\n secretkey:\n awsConfiguration?.secretsmanager?.credentials?.secretkey ||\n \"\",\n token:\n awsConfiguration?.secretsmanager?.credentials?.token || \"\",\n },\n },\n },\n };\n break;\n case \"azure\":\n insertEncrypt = {\n azure: {\n keyvault: {\n endpoint: azureConfiguration?.keyvault?.endpoint || \"\",\n credentials: {\n tenant_id:\n azureConfiguration?.keyvault?.credentials?.tenant_id || \"\",\n client_id:\n azureConfiguration?.keyvault?.credentials?.client_id || \"\",\n client_secret:\n azureConfiguration?.keyvault?.credentials?.client_secret ||\n \"\",\n },\n },\n },\n };\n break;\n case \"gcp\":\n insertEncrypt = {\n gcp: {\n secretmanager: {\n project_id: gcpConfiguration?.secretmanager?.project_id || \"\",\n endpoint: gcpConfiguration?.secretmanager?.endpoint || \"\",\n credentials: {\n client_email:\n gcpConfiguration?.secretmanager?.credentials\n ?.client_email || \"\",\n client_id:\n gcpConfiguration?.secretmanager?.credentials?.client_id ||\n \"\",\n private_key_id:\n gcpConfiguration?.secretmanager?.credentials\n ?.private_key_id || \"\",\n private_key:\n gcpConfiguration?.secretmanager?.credentials?.private_key ||\n \"\",\n },\n },\n },\n };\n break;\n case \"vault\":\n insertEncrypt = {\n vault: {\n endpoint: vaultConfiguration?.endpoint || \"\",\n engine: vaultConfiguration?.engine || \"\",\n namespace: vaultConfiguration?.namespace || \"\",\n prefix: vaultConfiguration?.prefix || \"\",\n approle: {\n engine: vaultConfiguration?.approle?.engine || \"\",\n id: vaultConfiguration?.approle?.id || \"\",\n secret: vaultConfiguration?.approle?.secret || \"\",\n retry: parseInt(vaultConfiguration?.approle?.retry),\n },\n status: {\n ping: parseInt(vaultConfiguration?.status?.ping),\n },\n },\n };\n break;\n }\n\n let encryptionServerKeyPair: any = {};\n let encryptionClientKeyPair: any = {};\n let encryptionKMSCertificates: any = {};\n\n // MinIO -> KES (mTLS certificates)\n if (\n minioMTLSCertificate?.encoded_key &&\n minioMTLSCertificate?.encoded_cert\n ) {\n encryptionClientKeyPair = {\n minio_mtls: {\n key: minioMTLSCertificate?.encoded_key,\n crt: minioMTLSCertificate?.encoded_cert,\n },\n };\n }\n\n // KES server certificates\n if (\n kesServerCertificate?.encoded_key &&\n kesServerCertificate?.encoded_cert\n ) {\n encryptionServerKeyPair = {\n server_tls: {\n key: kesServerCertificate?.encoded_key,\n crt: kesServerCertificate?.encoded_cert,\n },\n };\n }\n\n // KES -> KMS (mTLS certificates)\n let kmsMTLSKeyPair = null;\n let kmsCAInsert = null;\n if (kmsMTLSCertificate?.encoded_key && kmsMTLSCertificate?.encoded_cert) {\n kmsMTLSKeyPair = {\n key: kmsMTLSCertificate?.encoded_key,\n crt: kmsMTLSCertificate?.encoded_cert,\n };\n }\n if (kmsCACertificate?.encoded_cert) {\n kmsCAInsert = {\n ca: kmsCACertificate?.encoded_cert,\n };\n }\n if (kmsMTLSKeyPair || kmsCAInsert) {\n encryptionKMSCertificates = {\n kms_mtls: {\n ...kmsMTLSKeyPair,\n ...kmsCAInsert,\n },\n };\n }\n\n const dataSend = {\n raw:\n editRawConfiguration === \"raw-edit\" ? encryptionRawConfiguration : \"\",\n secretsToBeDeleted: certificatesToBeRemoved || [],\n replicas: replicas,\n securityContext: securityContext,\n image: image,\n ...encryptionClientKeyPair,\n ...encryptionServerKeyPair,\n ...encryptionKMSCertificates,\n ...insertEncrypt,\n };\n if (!updatingEncryption) {\n setUpdatingEncryption(true);\n api\n .invoke(\n \"PUT\",\n `/api/v1/namespaces/${tenant?.namespace}/tenants/${tenant?.name}/encryption`,\n dataSend,\n )\n .then(() => {\n setConfirmOpen(false);\n setUpdatingEncryption(false);\n fetchEncryptionInfo();\n })\n .catch((err: ErrorResponseHandler) => {\n setUpdatingEncryption(false);\n dispatch(setErrorSnackMessage(err));\n });\n }\n } else {\n if (!updatingEncryption) {\n setUpdatingEncryption(true);\n api\n .invoke(\n \"DELETE\",\n `/api/v1/namespaces/${tenant?.namespace}/tenants/${tenant?.name}/encryption`,\n {},\n )\n .then(() => {\n setConfirmOpen(false);\n setUpdatingEncryption(false);\n fetchEncryptionInfo();\n })\n .catch((err: ErrorResponseHandler) => {\n setUpdatingEncryption(false);\n dispatch(setErrorSnackMessage(err));\n });\n }\n }\n };\n\n return (\n \n {confirmOpen && (\n setConfirmOpen(false)}\n onConfirm={updateEncryptionConfiguration}\n confirmationContent={\n \n {encryptionEnabled\n ? \"Data will be encrypted using and external KMS\"\n : \"Current encrypted information will not be accessible\"}\n {encryptionEnabled && (\n \n )}\n \n }\n />\n )}\n \n \n \n \n {\n setEncryptionEnabled(!encryptionEnabled);\n }}\n description=\"\"\n />\n \n }\n >\n Encryption\n \n \n {encryptionEnabled && (\n \n \n \n \n {\n setEncryptionType(e.target.value);\n }}\n selectorOptions={[\n { label: \"Vault\", value: \"vault\" },\n { label: \"AWS\", value: \"aws\" },\n { label: \"Gemalto\", value: \"gemalto\" },\n { label: \"GCP\", value: \"gcp\" },\n { label: \"Azure\", value: \"azure\" },\n ]}\n />\n\n {encryptionType === \"vault\" && (\n \n ,\n ) =>\n setVaultConfiguration({\n ...vaultConfiguration,\n endpoint: e.target.value,\n })\n }\n label=\"Endpoint\"\n tooltip=\"Endpoint is the Hashicorp Vault endpoint\"\n value={vaultConfiguration?.endpoint || \"\"}\n error={validationErrors[\"vault_ping\"] || \"\"}\n required\n />\n ,\n ) =>\n setVaultConfiguration({\n ...vaultConfiguration,\n engine: e.target.value,\n })\n }\n label=\"Engine\"\n tooltip=\"Engine is the Hashicorp Vault K/V engine path. If empty, defaults to 'kv'\"\n value={vaultConfiguration?.engine || \"\"}\n />\n ,\n ) =>\n setVaultConfiguration({\n ...vaultConfiguration,\n namespace: e.target.value,\n })\n }\n label=\"Namespace\"\n tooltip=\"Namespace is an optional Hashicorp Vault namespace. An empty namespace means no particular namespace is used.\"\n value={vaultConfiguration?.namespace || \"\"}\n />\n ,\n ) =>\n setVaultConfiguration({\n ...vaultConfiguration,\n prefix: e.target.value,\n })\n }\n label=\"Prefix\"\n tooltip=\"Prefix is an optional prefix / directory within the K/V engine. If empty, keys will be stored at the K/V engine top level\"\n value={vaultConfiguration?.prefix || \"\"}\n />\n App Role\n
\n App Role\n ,\n ) =>\n setVaultConfiguration({\n ...vaultConfiguration,\n approle: {\n ...vaultConfiguration?.approle,\n engine: e.target.value,\n },\n })\n }\n label=\"Engine\"\n tooltip=\"AppRoleEngine is the AppRole authentication engine path. If empty, defaults to 'approle'\"\n value={\n vaultConfiguration?.approle?.engine || \"\"\n }\n />\n ,\n ) =>\n setVaultConfiguration({\n ...vaultConfiguration,\n approle: {\n ...vaultConfiguration?.approle,\n id: e.target.value,\n },\n })\n }\n label=\"AppRole ID\"\n tooltip=\"AppRoleSecret is the AppRole access secret for authenticating to Hashicorp Vault via the AppRole method\"\n value={vaultConfiguration?.approle?.id || \"\"}\n required\n error={validationErrors[\"vault_id\"] || \"\"}\n />\n ,\n ) =>\n setVaultConfiguration({\n ...vaultConfiguration,\n approle: {\n ...vaultConfiguration?.approle,\n secret: e.target.value,\n },\n })\n }\n label=\"AppRole Secret\"\n tooltip=\"AppRoleSecret is the AppRole access secret for authenticating to Hashicorp Vault via the AppRole method\"\n value={\n vaultConfiguration?.approle?.secret || \"\"\n }\n required\n error={validationErrors[\"vault_secret\"] || \"\"}\n />\n ,\n ) =>\n setVaultConfiguration({\n ...vaultConfiguration,\n approle: {\n ...vaultConfiguration?.approle,\n retry: e.target.value,\n },\n })\n }\n label=\"Retry (Seconds)\"\n error={validationErrors[\"vault_retry\"] || \"\"}\n value={\n vaultConfiguration?.approle?.retry || \"\"\n }\n />\n
\n
\n Status\n ,\n ) =>\n setVaultConfiguration({\n ...vaultConfiguration,\n status: {\n ...vaultConfiguration?.status,\n ping: e.target.value,\n },\n })\n }\n label=\"Ping (Seconds)\"\n tooltip=\"controls how often to Vault health status is checked. If not set, defaults to 10s\"\n error={validationErrors[\"vault_ping\"] || \"\"}\n value={vaultConfiguration?.status?.ping || \"\"}\n />\n
\n
\n )}\n {encryptionType === \"azure\" && (\n \n ,\n ) =>\n setAzureConfiguration({\n ...azureConfiguration,\n keyvault: {\n ...azureConfiguration?.keyvault,\n endpoint: e.target.value,\n },\n })\n }\n label=\"Endpoint\"\n tooltip=\"Endpoint is the Azure KeyVault endpoint\"\n error={validationErrors[\"azure_endpoint\"] || \"\"}\n value={\n azureConfiguration?.keyvault?.endpoint || \"\"\n }\n />\n
\n Credentials\n ,\n ) =>\n setAzureConfiguration({\n ...azureConfiguration,\n keyvault: {\n ...azureConfiguration?.keyvault,\n credentials: {\n ...azureConfiguration?.keyvault\n ?.credentials,\n tenant_id: e.target.value,\n },\n },\n })\n }\n label=\"Tenant ID\"\n tooltip=\"TenantID is the ID of the Azure KeyVault tenant\"\n value={\n azureConfiguration?.keyvault?.credentials\n ?.tenant_id || \"\"\n }\n error={\n validationErrors[\"azure_tenant_id\"] || \"\"\n }\n />\n ,\n ) =>\n setAzureConfiguration({\n ...azureConfiguration,\n keyvault: {\n ...azureConfiguration?.keyvault,\n credentials: {\n ...azureConfiguration?.keyvault\n ?.credentials,\n client_id: e.target.value,\n },\n },\n })\n }\n label=\"Client ID\"\n tooltip=\"ClientID is the ID of the client accessing Azure KeyVault\"\n value={\n azureConfiguration?.keyvault?.credentials\n ?.client_id || \"\"\n }\n error={\n validationErrors[\"azure_client_id\"] || \"\"\n }\n />\n ,\n ) =>\n setAzureConfiguration({\n ...azureConfiguration,\n keyvault: {\n ...azureConfiguration?.keyvault,\n credentials: {\n ...azureConfiguration?.keyvault\n ?.credentials,\n client_secret: e.target.value,\n },\n },\n })\n }\n label=\"Client Secret\"\n tooltip=\"ClientSecret is the client secret accessing the Azure KeyVault\"\n value={\n azureConfiguration?.keyvault?.credentials\n ?.client_secret || \"\"\n }\n error={\n validationErrors[\"azure_client_secret\"] ||\n \"\"\n }\n />\n
\n
\n )}\n {encryptionType === \"gcp\" && (\n \n ,\n ) =>\n setGCPConfiguration({\n ...gcpConfiguration,\n secretmanager: {\n ...gcpConfiguration?.secretmanager,\n project_id: e.target.value,\n },\n })\n }\n label=\"Project ID\"\n tooltip=\"ProjectID is the GCP project ID\"\n value={\n gcpConfiguration?.secretmanager.project_id ||\n \"\"\n }\n />\n ,\n ) =>\n setGCPConfiguration({\n ...gcpConfiguration,\n secretmanager: {\n ...gcpConfiguration?.secretmanager,\n endpoint: e.target.value,\n },\n })\n }\n label=\"Endpoint\"\n tooltip=\"Endpoint is the GCP project ID. If empty defaults to: secretmanager.googleapis.com:443\"\n value={\n gcpConfiguration?.secretmanager.endpoint || \"\"\n }\n />\n
\n Credentials\n ,\n ) =>\n setGCPConfiguration({\n ...gcpConfiguration,\n secretmanager: {\n ...gcpConfiguration?.secretmanager,\n credentials: {\n ...gcpConfiguration?.secretmanager\n .credentials,\n client_email: e.target.value,\n },\n },\n })\n }\n label=\"Client Email\"\n tooltip=\"Is the Client email of the GCP service account used to access the SecretManager\"\n value={\n gcpConfiguration?.secretmanager.credentials\n ?.client_email || \"\"\n }\n />\n ,\n ) =>\n setGCPConfiguration({\n ...gcpConfiguration,\n secretmanager: {\n ...gcpConfiguration?.secretmanager,\n credentials: {\n ...gcpConfiguration?.secretmanager\n .credentials,\n client_id: e.target.value,\n },\n },\n })\n }\n label=\"Client ID\"\n tooltip=\"Is the Client ID of the GCP service account used to access the SecretManager\"\n value={\n gcpConfiguration?.secretmanager.credentials\n ?.client_id || \"\"\n }\n />\n ,\n ) =>\n setGCPConfiguration({\n ...gcpConfiguration,\n secretmanager: {\n ...gcpConfiguration?.secretmanager,\n credentials: {\n ...gcpConfiguration?.secretmanager\n .credentials,\n private_key_id: e.target.value,\n },\n },\n })\n }\n label=\"Private Key ID\"\n tooltip=\"Is the private key ID of the GCP service account used to access the SecretManager\"\n value={\n gcpConfiguration?.secretmanager.credentials\n ?.private_key_id || \"\"\n }\n />\n ,\n ) =>\n setGCPConfiguration({\n ...gcpConfiguration,\n secretmanager: {\n ...gcpConfiguration?.secretmanager,\n credentials: {\n ...gcpConfiguration?.secretmanager\n .credentials,\n private_key: e.target.value,\n },\n },\n })\n }\n label=\"Private Key\"\n tooltip=\"Is the private key of the GCP service account used to access the SecretManager\"\n value={\n gcpConfiguration?.secretmanager.credentials\n ?.private_key || \"\"\n }\n />\n
\n
\n )}\n {encryptionType === \"aws\" && (\n \n ,\n ) =>\n setAWSConfiguration({\n ...awsConfiguration,\n secretsmanager: {\n ...awsConfiguration?.secretsmanager,\n endpoint: e.target.value,\n },\n })\n }\n label=\"Endpoint\"\n tooltip=\"Endpoint is the AWS SecretsManager endpoint. AWS SecretsManager endpoints have the following schema: secrestmanager[-fips]..amanzonaws.com\"\n value={\n awsConfiguration?.secretsmanager?.endpoint ||\n \"\"\n }\n required\n error={validationErrors[\"aws_endpoint\"] || \"\"}\n />\n ,\n ) =>\n setAWSConfiguration({\n ...awsConfiguration,\n secretsmanager: {\n ...awsConfiguration?.secretsmanager,\n region: e.target.value,\n },\n })\n }\n label=\"Region\"\n tooltip=\"Region is the AWS region the SecretsManager is located\"\n value={\n awsConfiguration?.secretsmanager?.region || \"\"\n }\n error={validationErrors[\"aws_region\"] || \"\"}\n required\n />\n ,\n ) =>\n setAWSConfiguration({\n ...awsConfiguration,\n secretsmanager: {\n ...awsConfiguration?.secretsmanager,\n kmskey: e.target.value,\n },\n })\n }\n label=\"KMS Key\"\n tooltip=\"KMSKey is the AWS-KMS key ID (CMK-ID) used to en/decrypt secrets managed by the SecretsManager. If empty, the default AWS KMS key is used\"\n value={\n awsConfiguration?.secretsmanager?.kmskey || \"\"\n }\n />\n
\n Credentials\n ,\n ) =>\n setAWSConfiguration({\n ...awsConfiguration,\n secretsmanager: {\n ...awsConfiguration?.secretsmanager,\n credentials: {\n ...awsConfiguration?.secretsmanager\n ?.credentials,\n accesskey: e.target.value,\n },\n },\n })\n }\n label=\"Access Key\"\n tooltip=\"AccessKey is the access key for authenticating to AWS\"\n value={\n awsConfiguration?.secretsmanager\n ?.credentials?.accesskey || \"\"\n }\n error={\n validationErrors[\"aws_accessKey\"] || \"\"\n }\n required\n />\n ,\n ) =>\n setAWSConfiguration({\n ...awsConfiguration,\n secretsmanager: {\n ...awsConfiguration?.secretsmanager,\n credentials: {\n ...awsConfiguration?.secretsmanager\n ?.credentials,\n secretkey: e.target.value,\n },\n },\n })\n }\n label=\"Secret Key\"\n tooltip=\"SecretKey is the secret key for authenticating to AWS\"\n value={\n awsConfiguration?.secretsmanager\n ?.credentials?.secretkey || \"\"\n }\n error={\n validationErrors[\"aws_secretKey\"] || \"\"\n }\n required\n />\n ,\n ) =>\n setAWSConfiguration({\n ...awsConfiguration,\n secretsmanager: {\n ...awsConfiguration?.secretsmanager,\n credentials: {\n ...awsConfiguration?.secretsmanager\n ?.credentials,\n token: e.target.value,\n },\n },\n })\n }\n label=\"Token\"\n tooltip=\"SessionToken is an optional session token for authenticating to AWS when using STS\"\n value={\n awsConfiguration?.secretsmanager\n ?.credentials?.token || \"\"\n }\n />\n
\n
\n )}\n {encryptionType === \"gemalto\" && (\n \n ,\n ) =>\n setGemaltoConfiguration({\n ...gemaltoConfiguration,\n keysecure: {\n ...gemaltoConfiguration?.keysecure,\n endpoint: e.target.value,\n },\n })\n }\n label=\"Endpoint\"\n tooltip=\"Endpoint is the endpoint to the KeySecure server\"\n value={\n gemaltoConfiguration?.keysecure?.endpoint ||\n \"\"\n }\n error={\n validationErrors[\"gemalto_endpoint\"] || \"\"\n }\n required\n />\n
\n Credentials\n ,\n ) =>\n setGemaltoConfiguration({\n ...gemaltoConfiguration,\n keysecure: {\n ...gemaltoConfiguration?.keysecure,\n credentials: {\n ...gemaltoConfiguration?.keysecure\n ?.credentials,\n token: e.target.value,\n },\n },\n })\n }\n label=\"Token\"\n tooltip=\"Token is the refresh authentication token to access the KeySecure server\"\n value={\n gemaltoConfiguration?.keysecure?.credentials\n ?.token || \"\"\n }\n error={\n validationErrors[\"gemalto_token\"] || \"\"\n }\n required\n />\n ,\n ) =>\n setGemaltoConfiguration({\n ...gemaltoConfiguration,\n keysecure: {\n ...gemaltoConfiguration?.keysecure,\n credentials: {\n ...gemaltoConfiguration?.keysecure\n ?.credentials,\n domain: e.target.value,\n },\n },\n })\n }\n label=\"Domain\"\n tooltip=\"Domain is the isolated namespace within the KeySecure server. If empty, defaults to the top-level / root domain\"\n value={\n gemaltoConfiguration?.keysecure?.credentials\n ?.domain || \"\"\n }\n error={\n validationErrors[\"gemalto_domain\"] || \"\"\n }\n required\n />\n ,\n ) =>\n setGemaltoConfiguration({\n ...gemaltoConfiguration,\n keysecure: {\n ...gemaltoConfiguration?.keysecure,\n credentials: {\n ...gemaltoConfiguration?.keysecure\n ?.credentials,\n retry: e.target.value,\n },\n },\n })\n }\n label=\"Retry (seconds)\"\n value={\n gemaltoConfiguration?.keysecure?.credentials\n ?.retry || \"\"\n }\n error={\n validationErrors[\"gemalto_retry\"] || \"\"\n }\n />\n
\n
\n )}\n
\n ),\n },\n {\n tabConfig: { label: \"Raw Edit\", id: \"raw-edit\" },\n content: (\n {\n setEncryptionRawConfiguration(value);\n }}\n editorHeight={\"550px\"}\n />\n ),\n },\n ]}\n onTabClick={(value) => setEditRawConfiguration(value)}\n currentTabOrPath={editRawConfiguration}\n horizontal\n />\n
\n \n Additional Configuration for KES\n \n setEnabledCustomCertificates(!enabledCustomCertificates)\n }\n label={\"Custom Certificates\"}\n />\n {enabledCustomCertificates && (\n \n
\n Encryption server certificates\n {kesServerTLSCertificateSecret ? (\n \n removeCertificate(kesServerTLSCertificateSecret)\n }\n />\n ) : (\n \n {\n if (encodedValue) {\n setKESServerCertificate({\n encoded_key: encodedValue,\n id: kesServerCertificate?.id || \"\",\n key: fileName || \"\",\n cert: kesServerCertificate?.cert || \"\",\n encoded_cert:\n kesServerCertificate?.encoded_cert || \"\",\n });\n cleanValidation(\"serverKey\");\n }\n }}\n accept=\".key,.pem\"\n id=\"serverKey\"\n name=\"serverKey\"\n label=\"Key\"\n value={kesServerCertificate?.key || \"\"}\n returnEncodedData\n />\n {\n if (encodedValue) {\n setKESServerCertificate({\n encoded_key:\n kesServerCertificate?.encoded_key || \"\",\n id: kesServerCertificate?.id || \"\",\n key: kesServerCertificate?.key || \"\",\n cert: fileName || \"\",\n encoded_cert: encodedValue || \"\",\n });\n cleanValidation(\"serverCert\");\n }\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"serverCert\"\n name=\"serverCert\"\n label=\"Cert\"\n value={kesServerCertificate?.cert || \"\"}\n returnEncodedData\n />\n \n )}\n
\n
\n \n MinIO mTLS certificates (connection between MinIO and\n the Encryption server)\n \n {minioMTLSCertificateSecret ? (\n \n removeCertificate(minioMTLSCertificateSecret)\n }\n />\n ) : (\n \n {\n if (encodedValue) {\n setMinioMTLSCertificate({\n encoded_key: encodedValue,\n id: minioMTLSCertificate?.id || \"\",\n key: fileName || \"\",\n cert: minioMTLSCertificate?.cert || \"\",\n encoded_cert:\n minioMTLSCertificate?.encoded_cert || \"\",\n });\n cleanValidation(\"clientKey\");\n }\n }}\n accept=\".key,.pem\"\n id=\"clientKey\"\n name=\"clientKey\"\n label=\"Key\"\n value={minioMTLSCertificate?.key || \"\"}\n returnEncodedData\n />\n {\n if (encodedValue) {\n setMinioMTLSCertificate({\n encoded_key:\n minioMTLSCertificate?.encoded_key || \"\",\n id: minioMTLSCertificate?.id || \"\",\n key: minioMTLSCertificate?.key || \"\",\n cert: fileName || \"\",\n encoded_cert: encodedValue || \"\",\n });\n cleanValidation(\"clientCert\");\n }\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"clientCert\"\n name=\"clientCert\"\n label=\"Cert\"\n value={minioMTLSCertificate?.cert || \"\"}\n returnEncodedData\n />\n \n )}\n
\n
\n \n KMS mTLS certificates (connection between the Encryption\n server and the KMS)\n \n {kmsMTLSCertificateSecret ? (\n \n removeCertificate(kmsMTLSCertificateSecret)\n }\n />\n ) : (\n \n {\n if (encodedValue) {\n setKmsMTLSCertificate({\n encoded_key: encodedValue || \"\",\n id: kmsMTLSCertificate?.id || \"\",\n key: fileName || \"\",\n cert: kmsMTLSCertificate?.cert || \"\",\n encoded_cert:\n kmsMTLSCertificate?.encoded_cert || \"\",\n });\n }\n }}\n accept=\".key,.pem\"\n id=\"kms_mtls_key\"\n name=\"kms_mtls_key\"\n label=\"Key\"\n value={kmsMTLSCertificate?.key || \"\"}\n returnEncodedData\n />\n {\n if (encodedValue) {\n setKmsMTLSCertificate({\n encoded_key:\n kmsMTLSCertificate?.encoded_key || \"\",\n id: kmsMTLSCertificate?.id || \"\",\n key: kmsMTLSCertificate?.key || \"\",\n cert: fileName || \"\",\n encoded_cert: encodedValue || \"\",\n });\n }\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"kms_mtls_cert\"\n name=\"kms_mtls_cert\"\n label=\"Cert\"\n value={kmsMTLSCertificate?.cert || \"\"}\n returnEncodedData\n />\n \n )}\n {kmsCACertificateSecret ? (\n \n removeCertificate(kmsCACertificateSecret)\n }\n />\n ) : (\n {\n if (encodedValue) {\n setKmsCACertificate({\n encoded_key:\n kmsCACertificate?.encoded_key || \"\",\n id: kmsCACertificate?.id || \"\",\n key: kmsCACertificate?.key || \"\",\n cert: fileName || \"\",\n encoded_cert: encodedValue || \"\",\n });\n }\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"kms_mtls_ca\"\n name=\"kms_mtls_ca\"\n label=\"CA\"\n value={kmsCACertificate?.cert || \"\"}\n returnEncodedData\n />\n )}\n
\n
\n )}\n ) =>\n setImage(e.target.value)\n }\n label=\"Image\"\n tooltip=\"KES container image\"\n placeholder=\"minio/kes:2024-03-13T17-52-13Z\"\n value={image}\n />\n ) =>\n setReplicas(e.target.value)\n }\n label=\"Replicas\"\n tooltip=\"Numer of KES pod replicas\"\n value={replicas}\n required\n error={validationErrors[\"replicas\"] || \"\"}\n />\n SecurityContext for KES\n \n \n ) => {\n setSecurityContext({\n ...securityContext,\n runAsUser: e.target.value,\n });\n }}\n label=\"Run As User\"\n value={securityContext.runAsUser}\n required\n error={\n validationErrors[\"kes_securityContext_runAsUser\"] || \"\"\n }\n min=\"0\"\n />\n \n \n ) => {\n setSecurityContext({\n ...securityContext,\n runAsGroup: e.target.value,\n });\n }}\n label=\"Run As Group\"\n value={securityContext.runAsGroup}\n required\n error={\n validationErrors[\"kes_securityContext_runAsGroup\"] || \"\"\n }\n min=\"0\"\n />\n \n \n \n \n ) => {\n setSecurityContext({\n ...securityContext,\n fsGroup: e.target.value,\n });\n }}\n label=\"FsGroup\"\n value={securityContext.fsGroup!}\n required\n error={\n validationErrors[\"kes_securityContext_fsGroup\"] || \"\"\n }\n min=\"0\"\n sx={{\n marginBottom: 12,\n }}\n />\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n setSecurityContext({\n ...securityContext,\n runAsNonRoot: checked,\n });\n }}\n label={\"Do not run as Root\"}\n />\n
\n \n )}\n \n setConfirmOpen(true)}\n label={\"Save\"}\n />\n \n \n
\n
\n );\n};\n\nexport default TenantEncryption;\n"],"names":["actionsTray","label","color","fontSize","alignSelf","whiteSpace","marginLeft","display","justifyContent","marginBottom","alignItems","flexGrow","modalStyleUtils","modalButtonBar","marginTop","marginRight","modalFormScrollable","maxHeight","overflowY","paddingTop","CertificateContainer","styled","div","_ref","theme","position","margin","userSelect","appearance","maxWidth","fontFamily","gap","border","concat","get","borderRadius","padding","fontWeight","backgroundColor","cursor","opacity","fill","width","height","minWidth","minHeight","flexWrap","textTransform","listStyle","content","borderBottom","transform","_ref2","certificateInfo","onDelete","certificates","domains","expiry","DateTime","fromISO","now","utc","daysToExpiry","daysToExpiryHuman","certificateExpiration","durationToExpiry","diff","as","minus","Duration","fromObject","days","shiftTo","toHuman","maximumFractionDigits","minutes","_jsxs","children","Box","className","_jsx","CertificateIcon","name","EventBusyIcon","toFormat","TimeIcon","style","length","map","dom","index","LanguageIcon","IconButton","size","onClick","AlertCloseIcon","PolicyItem","items","title","Fragment","flexFlow","iTxt","policies","fmtPolicies","arguments","undefined","Object","keys","polName","policyConfig","identities","paths","allow","deny","getPolicyData","Grid","xs","sx","withBorders","overflow","pConf","borderLeft","borderRight","borderTop","TenantEncryption","_vaultConfiguration$a9","_vaultConfiguration$a10","_vaultConfiguration$a11","_vaultConfiguration$a12","_vaultConfiguration$s4","_azureConfiguration$k15","_azureConfiguration$k17","_azureConfiguration$k18","_azureConfiguration$k20","_azureConfiguration$k21","_azureConfiguration$k23","_azureConfiguration$k24","_gcpConfiguration$sec11","_gcpConfiguration$sec12","_gcpConfiguration$sec13","_gcpConfiguration$sec14","_awsConfiguration$sec16","_awsConfiguration$sec17","_awsConfiguration$sec18","_awsConfiguration$sec20","_awsConfiguration$sec21","_awsConfiguration$sec23","_awsConfiguration$sec24","_awsConfiguration$sec26","_awsConfiguration$sec27","_gemaltoConfiguration17","_gemaltoConfiguration19","_gemaltoConfiguration20","_gemaltoConfiguration22","_gemaltoConfiguration23","_gemaltoConfiguration25","_gemaltoConfiguration26","dispatch","useAppDispatch","tenant","useSelector","state","tenants","tenantInfo","editRawConfiguration","setEditRawConfiguration","useState","encryptionRawConfiguration","setEncryptionRawConfiguration","encryptionEnabled","setEncryptionEnabled","encryptionType","setEncryptionType","replicas","setReplicas","image","setImage","refreshEncryptionInfo","setRefreshEncryptionInfo","securityContext","setSecurityContext","fsGroup","fsGroupChangePolicy","runAsGroup","runAsNonRoot","runAsUser","setPolicies","vaultConfiguration","setVaultConfiguration","awsConfiguration","setAWSConfiguration","gemaltoConfiguration","setGemaltoConfiguration","azureConfiguration","setAzureConfiguration","gcpConfiguration","setGCPConfiguration","enabledCustomCertificates","setEnabledCustomCertificates","updatingEncryption","setUpdatingEncryption","kesServerTLSCertificateSecret","setKesServerTLSCertificateSecret","minioMTLSCertificateSecret","setMinioMTLSCertificateSecret","minioMTLSCertificate","setMinioMTLSCertificate","certificatesToBeRemoved","setCertificatesToBeRemoved","isFormValid","setIsFormValid","kmsMTLSCertificateSecret","setKmsMTLSCertificateSecret","kmsCACertificateSecret","setKMSCACertificateSecret","kmsMTLSCertificate","setKmsMTLSCertificate","kesServerCertificate","setKESServerCertificate","kmsCACertificate","setKmsCACertificate","validationErrors","setValidationErrors","cleanValidation","fieldName","clearValidationError","confirmOpen","setConfirmOpen","useEffect","encryptionValidation","_vaultConfiguration$a","_vaultConfiguration$a2","_vaultConfiguration$s","_vaultConfiguration$s2","_vaultConfiguration$a3","_vaultConfiguration$a4","_awsConfiguration$sec","_awsConfiguration$sec2","_awsConfiguration$sec3","_awsConfiguration$sec4","_awsConfiguration$sec5","_awsConfiguration$sec6","_gemaltoConfiguration","_gemaltoConfiguration2","_gemaltoConfiguration3","_gemaltoConfiguration4","_gemaltoConfiguration5","_gemaltoConfiguration6","_gemaltoConfiguration7","_gemaltoConfiguration8","_gemaltoConfiguration9","_azureConfiguration$k","_azureConfiguration$k2","_azureConfiguration$k3","_azureConfiguration$k4","_azureConfiguration$k5","_azureConfiguration$k6","_azureConfiguration$k7","fieldKey","required","value","customValidation","parseInt","customValidationMessage","encoded_key","encoded_cert","endpoint","approle","id","secret","status","ping","retry","secretsmanager","region","credentials","accesskey","secretkey","keysecure","token","domain","keyvault","tenant_id","client_id","client_secret","commonVal","commonFormValidation","fetchEncryptionInfo","namespace","api","invoke","then","resp","raw","vault","aws","gemalto","gcp","azure","server_tls","minio_mtls","kms_mtls","crt","ca","catch","err","console","error","removeCertificate","React","ConfirmDialog","isOpen","confirmText","cancelText","onClose","onConfirm","updateEncryptionConfiguration","_gemaltoConfiguration10","_gemaltoConfiguration11","_gemaltoConfiguration12","_gemaltoConfiguration13","_gemaltoConfiguration14","_gemaltoConfiguration15","_gemaltoConfiguration16","_awsConfiguration$sec7","_awsConfiguration$sec8","_awsConfiguration$sec9","_awsConfiguration$sec10","_awsConfiguration$sec11","_awsConfiguration$sec12","_awsConfiguration$sec13","_awsConfiguration$sec14","_awsConfiguration$sec15","_azureConfiguration$k8","_azureConfiguration$k9","_azureConfiguration$k10","_azureConfiguration$k11","_azureConfiguration$k12","_azureConfiguration$k13","_azureConfiguration$k14","_gcpConfiguration$sec","_gcpConfiguration$sec2","_gcpConfiguration$sec3","_gcpConfiguration$sec4","_gcpConfiguration$sec5","_gcpConfiguration$sec6","_gcpConfiguration$sec7","_gcpConfiguration$sec8","_gcpConfiguration$sec9","_gcpConfiguration$sec10","_vaultConfiguration$a5","_vaultConfiguration$a6","_vaultConfiguration$a7","_vaultConfiguration$a8","_vaultConfiguration$s3","insertEncrypt","kmskey","secretmanager","project_id","client_email","private_key_id","private_key","engine","prefix","encryptionServerKeyPair","encryptionClientKeyPair","encryptionKMSCertificates","key","kmsMTLSKeyPair","kmsCAInsert","dataSend","secretsToBeDeleted","setErrorSnackMessage","confirmationContent","InformativeMessage","message","variant","FormLayout","containerPadding","container","item","SectionTitle","separator","actions","Switch","indicatorLabels","checked","onChange","description","Tabs","options","tabConfig","KMSPolicyInfo","RadioGroup","currentValue","e","target","selectorOptions","InputBox","tooltip","type","min","_azureConfiguration$k16","_azureConfiguration$k19","_azureConfiguration$k22","_awsConfiguration$sec19","_awsConfiguration$sec22","_awsConfiguration$sec25","_gemaltoConfiguration18","_gemaltoConfiguration21","_gemaltoConfiguration24","CodeEditor","mode","editorHeight","onTabClick","currentTabOrPath","horizontal","TLSCertificate","FileSelector","event","fileName","encodedValue","cert","accept","returnEncodedData","placeholder","Button","disabled"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/723.799b7760.chunk.js b/web-app/build/static/js/723.799b7760.chunk.js deleted file mode 100644 index beb0f5649e4..00000000000 --- a/web-app/build/static/js/723.799b7760.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[723],{7403:(e,t,n)=>{n.d(t,{U:()=>s,_:()=>i});const i={label:{color:"#07193E",fontSize:13,alignSelf:"center",whiteSpace:"nowrap","&:not(:first-of-type)":{marginLeft:10}},actionsTray:{display:"flex",justifyContent:"space-between",marginBottom:"1rem",alignItems:"center","& button":{flexGrow:0,marginLeft:8}}},s={modalButtonBar:{marginTop:15,display:"flex",alignItems:"center",justifyContent:"flex-end","& button":{marginRight:10},"& button:last-child":{marginRight:0}},modalFormScrollable:{maxHeight:"calc(100vh - 300px)",overflowY:"auto",paddingTop:10}}},7593:(e,t,n)=>{n.d(t,{A:()=>d});n(5043);var i=n(9923),s=n(4241),a=n(4574),r=n(3097),c=n.n(r),o=n(579);const l=a.Ay.div((e=>{let{theme:t}=e;return{position:"relative",margin:0,userSelect:"none",appearance:"none",maxWidth:"100%",fontFamily:"'Inter', sans-serif",fontSize:13,display:"inline-flex",alignItems:"center",justifyContent:"center",gap:6,border:"1px solid ".concat(c()(t,"borderColor","#E2E2E2")),borderRadius:3,padding:"5px 10px","& .certificateName":{display:"flex",alignItems:"center",gap:5,fontWeight:"bold",color:c()(t,"signalColors.main","#07193E")},"& .deleteTagButton":{backgroundColor:"transparent",border:0,display:"flex",alignItems:"center",justifyContent:"center",padding:0,cursor:"pointer",opacity:.6,"&:hover":{opacity:1},"& svg":{fill:c()(t,"tag.grey.background","#07193E"),width:10,height:10,minWidth:10,minHeight:10}},"& .certificateContainer":{margin:"5px 10px"},"& .certificateExpiry":{color:c()(t,"secondaryText","#5B5C5C"),display:"flex",alignItems:"center",flexWrap:"wrap",marginBottom:5,"& .label":{fontWeight:"bold"}},"& .certificateDomains":{color:c()(t,"secondaryText","#5B5C5C"),"& .label":{fontWeight:"bold"}},"& .certificatesList":{border:"1px solid ".concat(c()(t,"borderColor","#E2E2E2")),borderRadius:4,color:c()(t,"secondaryText","#5B5C5C"),textTransform:"lowercase",overflowY:"scroll",maxHeight:145,marginTop:3,marginBottom:5,padding:0,"& li":{listStyle:"none",padding:"5px 10px",margin:0,display:"flex",alignItems:"center","&:before":{content:"' '"}}},"& .certificatesListItem":{padding:"0px 16px",borderBottom:"1px solid ".concat(c()(t,"borderColor","#E2E2E2")),"& div":{minWidth:0},"& svg":{fontSize:12,marginRight:10,opacity:.5},"& span":{fontSize:12}},"& .certificateExpiring":{color:c()(t,"signalColors.warning","#FFBD62"),"& .label":{fontWeight:"bold"}},"& .certificateExpired":{color:c()(t,"signalColors.danger","#C51B3F"),"& .label":{fontWeight:"bold"}},"& .closeIcon":{transform:"scale(0.8)"}}})),d=e=>{let{certificateInfo:t,onDelete:n=(()=>{})}=e;const a=t.domains||[],r=s.c9.fromISO(t.expiry),c=s.c9.utc();let d=0,m="",x="";if(r){let e=r.diff(c);d=e.as("days"),m=e.minus(s.dw.fromObject({days:1})).shiftTo("days").toHuman({listStyle:"long",maximumFractionDigits:0}),d>=10&&d<30&&(x="certificateExpiring"),d<10&&(x="certificateExpired",d<2&&(m=e.minus(s.dw.fromObject({minutes:1})).shiftTo("hours","minutes").toHuman({listStyle:"long",maximumFractionDigits:0}),e.as("minutes")<=1&&(m="EXPIRED")))}return(0,o.jsxs)(l,{children:[(0,o.jsxs)(i.azJ,{children:[(0,o.jsxs)(i.azJ,{className:"certificateName",children:[(0,o.jsx)(i.j$V,{}),(0,o.jsx)("span",{children:t.name})]}),(0,o.jsxs)(i.azJ,{className:"certificateContainer",children:[(0,o.jsxs)(i.azJ,{className:"certificateExpiry",children:[(0,o.jsx)(i.PoC,{color:"inherit",fontSize:"small"}),"\xa0",(0,o.jsx)("span",{className:"label",children:"Expiry:\xa0"}),(0,o.jsx)("span",{children:r.toFormat("yyyy/MM/dd")})]}),(0,o.jsxs)(i.azJ,{className:"certificateExpiry",children:[(0,o.jsx)(i.b1c,{}),"\xa0",(0,o.jsx)("span",{className:"label",children:"Expires in:\xa0"}),(0,o.jsx)("span",{className:x,children:m})]}),(0,o.jsx)("hr",{style:{marginBottom:12}}),(0,o.jsx)(i.azJ,{className:"certificateDomains",children:(0,o.jsx)("span",{className:"label",children:"".concat(a.length," Domain (s):")})}),(0,o.jsx)("ul",{className:"certificatesList",children:a.map(((e,t)=>(0,o.jsxs)("li",{className:"certificatesListItem",children:[(0,o.jsx)(i.UaP,{}),(0,o.jsx)("span",{children:e})]},"".concat(e,"-").concat(t))))})]})]}),(0,o.jsx)(i.K0,{size:"small",onClick:n,className:"closeIcon",children:(0,o.jsx)(i.evq,{})})]})}},3084:(e,t,n)=>{n.d(t,{A:()=>o});n(5043);var i=n(9456),s=n(9923),a=n(3216),r=n(579);const c=e=>{let{icon:t,description:n}=e;return(0,r.jsxs)(s.azJ,{sx:{display:"flex","& .min-icon":{marginRight:"10px",height:"23px",width:"23px",marginBottom:"10px"}},children:[t," ",(0,r.jsx)(s.azJ,{className:"muted",sx:{fontSize:"14px",fontStyle:"italic"},children:n})]})},o=()=>{const e=(0,a.g)(),t=e.tenantName||"",n=e.tenantNamespace||"",o=(0,i.d4)((e=>""!==n?n:""!==e.createTenant.fields.nameTenant.namespace?e.createTenant.fields.nameTenant.namespace:"")),l=(0,i.d4)((e=>""!==t?t:""!==e.createTenant.fields.nameTenant.tenantName?e.createTenant.fields.nameTenant.tenantName:""));return(0,r.jsx)(s.azJ,{sx:{flex:1,border:"1px solid #eaeaea",borderRadius:"2px",display:"flex",flexFlow:"column",padding:"20px",["@media (max-width: ".concat(s.nmC.sm,"px)")]:{marginTop:0}},children:(0,r.jsxs)(s.azJ,{sx:{display:"flex",flexFlow:"column"},children:[(0,r.jsx)(c,{icon:(0,r.jsx)(s.j$V,{}),description:"TLS Certificates Warning"}),(0,r.jsxs)(s.azJ,{sx:{fontSize:"14px",marginBottom:"15px"},children:["Automatic certificate generation is not enabled.",(0,r.jsx)("br",{}),(0,r.jsx)("br",{}),"If you wish to continue only with ",(0,r.jsx)("b",{children:"custom certificates"})," make sure they are valid for the following internode hostnames, i.e.:",(0,r.jsx)("br",{}),(0,r.jsx)("br",{}),(0,r.jsxs)(s.azJ,{sx:{fontSize:"14px",fontStyle:"italic"},className:"muted",children:["minio.",o,(0,r.jsx)("br",{}),"minio.",o,".svc",(0,r.jsx)("br",{}),"minio.",o,".svc.",(0,r.jsx)("br",{}),"*.",l,"-hl.",o,".svc.",(0,r.jsx)("br",{}),"*.",o,".svc."]}),(0,r.jsx)("br",{}),"Replace ",(0,r.jsx)("em",{children:""}),","," ",(0,r.jsx)("em",{children:""})," and",(0,r.jsx)("em",{children:""})," with the actual values for your MinIO tenant.",(0,r.jsx)("br",{}),(0,r.jsx)("br",{}),"You can learn more at our"," ",(0,r.jsx)("a",{href:"https://min.io/docs/minio/kubernetes/upstream/operations/network-encryption.html?ref=op#id5",target:"_blank",rel:"noopener",children:"documentation"}),"."]})]})})}},3104:(e,t,n)=>{n.r(t),n.d(t,{default:()=>f});var i=n(5043),s=n(9456),a=n(9923),r=n(7403),c=n(2961),o=n(4159),l=n(649),d=n(8661),m=n(7593),x=n(579);const u=e=>{let{runAsGroup:t,runAsUser:n,fsGroup:r,fsGroupChangePolicy:c,runAsNonRoot:o,setRunAsUser:l,setRunAsGroup:d,setFSGroup:m,setRunAsNonRoot:u,setFSGroupChangePolicy:h}=e;const p=(0,s.wA)();return(0,x.jsx)(i.Fragment,{children:(0,x.jsxs)("fieldset",{className:"inputItem",children:[(0,x.jsx)("legend",{children:"Security Context"}),(0,x.jsxs)(a.azJ,{sx:{"& .multiContainerStackNarrow":{display:"flex",alignItems:"center",justifyContent:"flex-start",gap:"8px","@media (max-width: 750px)":{flexFlow:"column",flexDirection:"column"}},"& .configSectionItem":{marginRight:15,marginBottom:10}},children:[(0,x.jsx)(a.xA9,{item:!0,xs:12,children:(0,x.jsxs)(a.azJ,{className:"multiContainerStackNarrow",children:[(0,x.jsx)(a.azJ,{className:"configSectionItem",children:(0,x.jsx)(a.cl_,{type:"number",id:"securityContext_runAsUser",name:"securityContext_runAsUser",onChange:e=>{p(l(e.target.value))},label:"Run As User",value:n,required:!0,min:"0"})}),(0,x.jsx)(a.azJ,{className:"configSectionItem",children:(0,x.jsx)(a.cl_,{type:"number",id:"securityContext_runAsGroup",name:"securityContext_runAsGroup",onChange:e=>{p(d(e.target.value))},label:"Run As Group",value:t,required:!0,min:"0"})})]})}),(0,x.jsx)(a.xA9,{item:!0,xs:12,children:(0,x.jsxs)(a.azJ,{className:"multiContainerStackNarrow ",children:[(0,x.jsx)(a.azJ,{className:"configSectionItem",children:(0,x.jsx)(a.cl_,{type:"number",id:"securityContext_fsGroup",name:"securityContext_fsGroup",onChange:e=>{p(m(e.target.value))},label:"FsGroup",value:r,required:!0,min:"0"})}),(0,x.jsx)(a.azJ,{className:"configSectionItem",children:(0,x.jsx)(a.l6P,{label:"FsGroupChangePolicy",id:"securityContext_fsGroupChangePolicy",name:"securityContext_fsGroupChangePolicy",onChange:e=>{p(h(e))},value:c,options:[{label:"Always",value:"Always"},{label:"OnRootMismatch",value:"OnRootMismatch"}]})})]})}),(0,x.jsx)(a.xA9,{item:!0,xs:12,children:(0,x.jsx)(a.dOG,{value:"SecurityContextRunAsNonRoot",id:"securityContext_runAsNonRoot",name:"securityContext_runAsNonRoot",checked:o,onChange:()=>{p(u(!o))},label:"Do not run as Root"})})]})]})})};var h=n(2987),p=n(3084);const f=()=>{const e=(0,c.jL)(),t=(0,s.d4)((e=>e.tenants.tenantInfo)),n=(0,s.d4)((e=>e.tenants.loadingTenant)),[f,C]=(0,i.useState)(!1),[g,j]=(0,i.useState)(!1),[y,b]=(0,i.useState)(!1),[A,S]=(0,i.useState)(!1),[v,k]=(0,i.useState)(!1),[N,w]=(0,i.useState)([]),[R,T]=(0,i.useState)([{id:Date.now().toString(),key:"",cert:"",encoded_key:"",encoded_cert:""}]),[I,_]=(0,i.useState)([{id:Date.now().toString(),key:"",cert:"",encoded_key:"",encoded_cert:""}]),[z,G]=(0,i.useState)([{id:Date.now().toString(),key:"",cert:"",encoded_key:"",encoded_cert:""}]),[E,D]=(0,i.useState)([]),[B,F]=(0,i.useState)([]),[J,P]=(0,i.useState)([]),O=(0,s.d4)((e=>e.editTenantSecurityContext.runAsGroup)),L=(0,s.d4)((e=>e.editTenantSecurityContext.runAsUser)),K=(0,s.d4)((e=>e.editTenantSecurityContext.fsGroup)),U=(0,s.d4)((e=>e.editTenantSecurityContext.runAsNonRoot)),W=(0,s.d4)((e=>e.editTenantSecurityContext.fsGroupChangePolicy)),M=(0,i.useCallback)((()=>{l.A.invoke("GET","/api/v1/namespaces/".concat(null===t||void 0===t?void 0:t.namespace,"/tenants/").concat(null===t||void 0===t?void 0:t.name,"/security")).then((t=>{S(t.autoCert),b(t.autoCert),(t.customCertificates.minio||t.customCertificates.client||t.customCertificates.minioCAs)&&(k(!0),b(!0)),D(t.customCertificates.minio||[]),F(t.customCertificates.client||[]),P(t.customCertificates.minioCAs||[]),e((0,h.vi)(t.securityContext.runAsGroup)),e((0,h.r2)(t.securityContext.runAsUser)),e((0,h.Nn)(t.securityContext.fsGroup)),e((0,h.rW)(t.securityContext.runAsNonRoot)),e((0,h.TR)(t.securityContext.fsGroupChangePolicy))})).catch((t=>{e((0,o.C9)(t))}))}),[t,e]);(0,i.useEffect)((()=>{t&&M()}),[t,M]);const H=e=>{w([...N,e.name]);const t=E.filter((t=>t.name!==e.name)),n=B.filter((t=>t.name!==e.name)),i=J.filter((t=>t.name!==e.name));D(t),F(n),P(i)},Y=(e,t,n,i,s)=>{let a=R,r=()=>{};switch(e){case"minio":a=R,r=T;break;case"client":a=I,r=_;break;case"minioCAs":a=z,r=G}r(a.map((e=>e.id===t?{...e,[n]:i,["encoded_".concat(n)]:s}:e)))},q=(e,t)=>{let n=R,i=()=>{};switch(e){case"minio":n=R,i=T;break;case"client":n=I,i=_;break;case"minioCAs":n=z,i=G}if(n.length>1){i(n.filter((e=>e.id!==t)))}},V=e=>{let t=R,n=()=>{};switch(e){case"minio":t=R,n=T;break;case"client":t=I,n=_;break;case"minioCAs":t=z,n=G}n([...t,{id:Date.now().toString(),key:"",cert:"",encoded_key:"",encoded_cert:""}])};return(0,x.jsxs)(i.Fragment,{children:[(0,x.jsx)(d.A,{title:"Save and Restart",confirmText:"Restart",cancelText:"Cancel",titleIcon:(0,x.jsx)(a.$rg,{}),isLoading:f,onClose:()=>j(!1),isOpen:g,onConfirm:()=>{C(!0);let n={autoCert:A,customCertificates:{},securityContext:{runAsGroup:O,runAsUser:L,runAsNonRoot:U,fsGroup:K,fsGroupChangePolicy:W}};n.customCertificates=v?{secretsToBeDeleted:N,minioServerCertificates:R.map((e=>({crt:e.encoded_cert,key:e.encoded_key}))).filter((e=>e.crt&&e.key)),minioClientCertificates:I.map((e=>({crt:e.encoded_cert,key:e.encoded_key}))).filter((e=>e.crt&&e.key)),minioCAsCertificates:z.map((e=>e.encoded_cert)).filter((e=>e))}:{secretsToBeDeleted:[...E.map((e=>e.name)),...B.map((e=>e.name)),...J.map((e=>e.name))],minioServerCertificates:[],minioClientCertificates:[],minioCAsCertificates:[]},l.A.invoke("POST","/api/v1/namespaces/".concat(null===t||void 0===t?void 0:t.namespace,"/tenants/").concat(null===t||void 0===t?void 0:t.name,"/security"),n).then((()=>{C(!1),j(!1),T([{cert:"",encoded_cert:"",encoded_key:"",id:Date.now().toString(),key:""}]),_([{cert:"",encoded_cert:"",encoded_key:"",id:Date.now().toString(),key:""}]),G([{cert:"",encoded_cert:"",encoded_key:"",id:Date.now().toString(),key:""}]),M()})).catch((t=>{e((0,o.C9)(t)),C(!1)}))},confirmationContent:(0,x.jsx)(i.Fragment,{children:"Are you sure you want to save the changes and restart the service?"})}),n?(0,x.jsx)(a.azJ,{sx:{textAlign:"center"},children:(0,x.jsx)(a.aHM,{})}):(0,x.jsxs)(i.Fragment,{children:[(0,x.jsx)(a.azJ,{children:(0,x.jsx)(a._xt,{separator:!0,sx:{marginBottom:15},children:"Security"})}),(0,x.jsxs)(a.Hbc,{withBorders:!1,containerPadding:!1,sx:{"& .minioCertificateRows":{display:"flex",alignItems:"center",justifyContent:"flex-start",padding:5,"& .inputItem":{marginBottom:0},"&:last-child":{borderBottom:0},"@media (max-width: 900px)":{flex:1}},"& .overlayAction":{marginLeft:10},"& .rowActions":{display:"flex",justifyContent:"flex-end","@media (max-width: 900px)":{flex:1}}},children:[(0,x.jsx)(a.dOG,{value:"enableTLS",id:"enableTLS",name:"enableTLS",checked:y,onChange:e=>{const t=e.target.checked;b(t)},label:"TLS",description:"Securing all the traffic using TLS. This is required for Encryption Configuration"}),y&&(0,x.jsxs)(i.Fragment,{children:[(0,x.jsx)(a.dOG,{value:"enableAutoCert",id:"enableAutoCert",name:"enableAutoCert",checked:A,onChange:e=>{const t=e.target.checked;S(t)},label:"AutoCert",description:"The internode certificates will be generated and managed by MinIO Operator"}),(0,x.jsx)(a.dOG,{value:"enableCustomCerts",id:"enableCustomCerts",name:"enableCustomCerts",checked:v,onChange:e=>{const t=e.target.checked;k(t)},label:"Custom Certificates",description:"Certificates used to terminated TLS at MinIO"}),v&&(0,x.jsxs)(i.Fragment,{children:[!A&&(0,x.jsx)(a.xA9,{item:!0,xs:12,children:(0,x.jsx)(p.A,{})}),(0,x.jsx)(a.xA9,{item:!0,xs:12,className:"inputItem",children:(0,x.jsx)("h5",{children:"MinIO Server Certificates"})}),(0,x.jsx)(a.xA9,{item:!0,xs:12,children:E.map((e=>(0,x.jsx)(m.A,{certificateInfo:e,onDelete:()=>H(e)})))}),(0,x.jsx)(a.xA9,{item:!0,xs:12,children:R.map(((e,t)=>(0,x.jsxs)(a.xA9,{item:!0,xs:12,className:"minioCertificateRows",children:[(0,x.jsx)(a.SxS,{onChange:(t,n,i)=>{i&&Y("minio",e.id,"cert",n,i)},accept:".cer,.crt,.cert,.pem",id:"tlsCert",name:"tlsCert",label:"Cert",value:e.cert,returnEncodedData:!0}),(0,x.jsx)(a.SxS,{onChange:(t,n,i)=>{i&&Y("minio",e.id,"key",n,i)},accept:".key,.pem",id:"tlsKey",name:"tlsKey",label:"Key",value:e.key,returnEncodedData:!0}),(0,x.jsxs)(a.xA9,{item:!0,xs:2,className:"rowActions",children:[(0,x.jsx)("div",{className:"overlayAction",children:(0,x.jsx)(a.K0,{size:"small",onClick:()=>V("minio"),disabled:t!==R.length-1,children:(0,x.jsx)(a.REV,{})})}),(0,x.jsx)("div",{className:"overlayAction",children:(0,x.jsx)(a.K0,{size:"small",onClick:()=>q("minio",e.id),disabled:R.length<=1,children:(0,x.jsx)(a.YPx,{})})})]})]},e.id)))}),(0,x.jsx)(a.xA9,{item:!0,xs:12,className:"inputItem",children:(0,x.jsx)("h5",{children:"MinIO Client Certificates"})}),(0,x.jsx)(a.xA9,{item:!0,xs:12,children:B.map((e=>(0,x.jsx)(m.A,{certificateInfo:e,onDelete:()=>H(e)})))}),(0,x.jsx)(a.xA9,{item:!0,xs:12,className:"inputItem",children:I.map(((e,t)=>(0,x.jsxs)(a.xA9,{item:!0,xs:12,className:"minioCertificateRows",children:[(0,x.jsx)(a.SxS,{onChange:(t,n,i)=>{i&&Y("client",e.id,"cert",n,i)},accept:".cer,.crt,.cert,.pem",id:"tlsCert",name:"tlsCert",label:"Cert",value:e.cert,returnEncodedData:!0}),(0,x.jsx)(a.SxS,{onChange:(t,n,i)=>{i&&Y("client",e.id,"key",n,i)},accept:".key,.pem",id:"tlsKey",name:"tlsKey",label:"Key",value:e.key,returnEncodedData:!0}),(0,x.jsxs)(a.xA9,{item:!0,xs:2,className:"rowActions",children:[(0,x.jsx)("div",{className:"overlayAction",children:(0,x.jsx)(a.K0,{size:"small",onClick:()=>V("client"),disabled:t!==I.length-1,children:(0,x.jsx)(a.REV,{})})}),(0,x.jsx)("div",{className:"overlayAction",children:(0,x.jsx)(a.K0,{size:"small",onClick:()=>q("client",e.id),disabled:I.length<=1,children:(0,x.jsx)(a.YPx,{})})})]})]},e.id)))}),(0,x.jsx)(a.xA9,{item:!0,xs:12,children:(0,x.jsx)("h5",{children:"MinIO CA Certificates"})}),(0,x.jsx)(a.xA9,{item:!0,xs:12,children:J.map((e=>(0,x.jsx)(m.A,{certificateInfo:e,onDelete:()=>H(e)})))}),(0,x.jsx)(a.xA9,{item:!0,xs:12,children:z.map(((e,t)=>(0,x.jsxs)(a.xA9,{item:!0,xs:12,className:"minioCertificateRows",children:[(0,x.jsx)(a.xA9,{item:!0,xs:10,children:(0,x.jsx)(a.SxS,{onChange:(t,n,i)=>{i&&Y("minioCAs",e.id,"cert",n,i)},accept:".cer,.crt,.cert,.pem",id:"tlsCert",name:"tlsCert",label:"Cert",value:e.cert,returnEncodedData:!0})}),(0,x.jsx)(a.xA9,{item:!0,xs:2,children:(0,x.jsxs)("div",{className:"rowActions",children:[(0,x.jsx)("div",{className:"overlayAction",children:(0,x.jsx)(a.K0,{size:"small",onClick:()=>V("minioCAs"),disabled:t!==z.length-1,children:(0,x.jsx)(a.REV,{})})}),(0,x.jsx)("div",{className:"overlayAction",children:(0,x.jsx)(a.K0,{size:"small",onClick:()=>q("minioCAs",e.id),disabled:z.length<=1,children:(0,x.jsx)(a.YPx,{})})})]})})]},e.id)))})]})]}),(0,x.jsx)(a.xA9,{item:!0,xs:12,className:"inputItem",children:(0,x.jsx)(a._xt,{separator:!0,children:"Security Context"})}),(0,x.jsx)(a.xA9,{item:!0,xs:12,className:"inputItem",children:(0,x.jsx)(u,{runAsGroup:O,runAsUser:L,fsGroup:K,runAsNonRoot:U,fsGroupChangePolicy:W,setFSGroup:t=>e((0,h.Nn)(t)),setRunAsUser:t=>e((0,h.r2)(t)),setRunAsGroup:t=>e((0,h.vi)(t)),setRunAsNonRoot:t=>e((0,h.rW)(t)),setFSGroupChangePolicy:t=>e((0,h.TR)(t))})}),(0,x.jsx)(a.xA9,{item:!0,xs:12,sx:r.U.modalButtonBar,children:(0,x.jsx)(a.$nd,{id:"save-security",type:"submit",variant:"callAction",disabled:g||f,onClick:()=>j(!0),label:"Save"})})]})]})]})}}}]); -//# sourceMappingURL=723.799b7760.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/723.799b7760.chunk.js.map b/web-app/build/static/js/723.799b7760.chunk.js.map deleted file mode 100644 index e3c30b05f87..00000000000 --- a/web-app/build/static/js/723.799b7760.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/723.799b7760.chunk.js","mappings":"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","sources":["screens/Console/Common/FormComponents/common/styleLibrary.ts","screens/Console/Common/TLSCertificate/TLSCertificate.tsx","screens/Console/Tenants/HelpBox/TLSHelpBox.tsx","screens/Console/Tenants/securityContextSelector.tsx","screens/Console/Tenants/TenantDetails/TenantSecurity.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\n// This object contains variables that will be used across form components.\n\nexport const actionsTray = {\n label: {\n color: \"#07193E\",\n fontSize: 13,\n alignSelf: \"center\" as const,\n whiteSpace: \"nowrap\" as const,\n \"&:not(:first-of-type)\": {\n marginLeft: 10,\n },\n },\n actionsTray: {\n display: \"flex\" as const,\n justifyContent: \"space-between\" as const,\n marginBottom: \"1rem\",\n alignItems: \"center\",\n \"& button\": {\n flexGrow: 0,\n marginLeft: 8,\n },\n },\n};\n\nexport const modalStyleUtils: any = {\n modalButtonBar: {\n marginTop: 15,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n\n \"& button\": {\n marginRight: 10,\n },\n \"& button:last-child\": {\n marginRight: 0,\n },\n },\n modalFormScrollable: {\n maxHeight: \"calc(100vh - 300px)\",\n overflowY: \"auto\",\n paddingTop: 10,\n },\n};\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport {\n AlertCloseIcon,\n Box,\n CertificateIcon,\n IconButton,\n TimeIcon,\n LanguageIcon,\n EventBusyIcon,\n} from \"mds\";\nimport { DateTime, Duration } from \"luxon\";\nimport styled from \"styled-components\";\nimport get from \"lodash/get\";\nimport { ICertificateInfo } from \"../../Tenants/types\";\n\nconst CertificateContainer = styled.div(({ theme }) => ({\n position: \"relative\",\n margin: 0,\n userSelect: \"none\",\n appearance: \"none\",\n maxWidth: \"100%\",\n fontFamily: \"'Inter', sans-serif\",\n fontSize: 13,\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 6,\n border: `1px solid ${get(theme, \"borderColor\", \"#E2E2E2\")}`,\n borderRadius: 3,\n padding: \"5px 10px\",\n \"& .certificateName\": {\n display: \"flex\",\n alignItems: \"center\",\n gap: 5,\n fontWeight: \"bold\",\n color: get(theme, \"signalColors.main\", \"#07193E\"),\n },\n \"& .deleteTagButton\": {\n backgroundColor: \"transparent\",\n border: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: 0,\n cursor: \"pointer\",\n opacity: 0.6,\n \"&:hover\": {\n opacity: 1,\n },\n \"& svg\": {\n fill: get(theme, `tag.grey.background`, \"#07193E\"),\n width: 10,\n height: 10,\n minWidth: 10,\n minHeight: 10,\n },\n },\n \"& .certificateContainer\": {\n margin: \"5px 10px\",\n },\n \"& .certificateExpiry\": {\n color: get(theme, \"secondaryText\", \"#5B5C5C\"),\n display: \"flex\",\n alignItems: \"center\",\n flexWrap: \"wrap\",\n marginBottom: 5,\n \"& .label\": {\n fontWeight: \"bold\",\n },\n },\n \"& .certificateDomains\": {\n color: get(theme, \"secondaryText\", \"#5B5C5C\"),\n \"& .label\": {\n fontWeight: \"bold\",\n },\n },\n \"& .certificatesList\": {\n border: `1px solid ${get(theme, \"borderColor\", \"#E2E2E2\")}`,\n borderRadius: 4,\n color: get(theme, \"secondaryText\", \"#5B5C5C\"),\n textTransform: \"lowercase\",\n overflowY: \"scroll\",\n maxHeight: 145,\n marginTop: 3,\n marginBottom: 5,\n padding: 0,\n \"& li\": {\n listStyle: \"none\",\n padding: \"5px 10px\",\n margin: 0,\n display: \"flex\",\n alignItems: \"center\",\n \"&:before\": {\n content: \"' '\",\n },\n },\n },\n \"& .certificatesListItem\": {\n padding: \"0px 16px\",\n borderBottom: `1px solid ${get(theme, \"borderColor\", \"#E2E2E2\")}`,\n \"& div\": {\n minWidth: 0,\n },\n \"& svg\": {\n fontSize: 12,\n marginRight: 10,\n opacity: 0.5,\n },\n \"& span\": {\n fontSize: 12,\n },\n },\n \"& .certificateExpiring\": {\n color: get(theme, \"signalColors.warning\", \"#FFBD62\"),\n \"& .label\": {\n fontWeight: \"bold\",\n },\n },\n \"& .certificateExpired\": {\n color: get(theme, \"signalColors.danger\", \"#C51B3F\"),\n \"& .label\": {\n fontWeight: \"bold\",\n },\n },\n \"& .closeIcon\": {\n transform: \"scale(0.8)\",\n },\n}));\n\ninterface ITLSCertificate {\n certificateInfo: ICertificateInfo;\n onDelete: any;\n}\n\nconst TLSCertificate = ({\n certificateInfo,\n onDelete = () => {},\n}: ITLSCertificate) => {\n const certificates = certificateInfo.domains || [];\n\n const expiry = DateTime.fromISO(certificateInfo.expiry);\n const now = DateTime.utc();\n // Expose error on Tenant if certificate is near expiration or expired\n let daysToExpiry: number = 0;\n let daysToExpiryHuman: string = \"\";\n let certificateExpiration: string = \"\";\n if (expiry) {\n let durationToExpiry = expiry.diff(now);\n daysToExpiry = durationToExpiry.as(\"days\");\n daysToExpiryHuman = durationToExpiry\n .minus(Duration.fromObject({ days: 1 }))\n .shiftTo(\"days\")\n .toHuman({ listStyle: \"long\", maximumFractionDigits: 0 });\n if (daysToExpiry >= 10 && daysToExpiry < 30) {\n certificateExpiration = \"certificateExpiring\";\n }\n if (daysToExpiry < 10) {\n certificateExpiration = \"certificateExpired\";\n if (daysToExpiry < 2) {\n daysToExpiryHuman = durationToExpiry\n .minus(Duration.fromObject({ minutes: 1 }))\n .shiftTo(\"hours\", \"minutes\")\n .toHuman({ listStyle: \"long\", maximumFractionDigits: 0 });\n if (durationToExpiry.as(\"minutes\") <= 1) {\n daysToExpiryHuman = \"EXPIRED\";\n }\n }\n }\n }\n\n return (\n \n \n \n \n {certificateInfo.name}\n \n \n \n \n  \n Expiry: \n {expiry.toFormat(\"yyyy/MM/dd\")}\n \n \n \n  \n Expires in: \n {daysToExpiryHuman}\n \n
\n \n {`${certificates.length} Domain (s):`}\n \n
    \n {certificates.map((dom, index) => (\n
  • \n \n {dom}\n
  • \n ))}\n
\n
\n
\n \n \n \n
\n );\n};\n\nexport default TLSCertificate;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { CertificateIcon, Box, breakPoints } from \"mds\";\nimport { useParams } from \"react-router-dom\";\nimport { AppState } from \"../../../../store\";\n\nconst FeatureItem = ({\n icon,\n description,\n}: {\n icon: any;\n description: string;\n}) => {\n return (\n \n {icon}{\" \"}\n \n {description}\n \n \n );\n};\nconst TLSHelpBox = () => {\n const params = useParams();\n const tenantNameParam = params.tenantName || \"\";\n const tenantNamespaceParam = params.tenantNamespace || \"\";\n const namespace = useSelector((state: AppState) => {\n let defaultNamespace = \"\";\n if (tenantNamespaceParam !== \"\") {\n return tenantNamespaceParam;\n }\n if (state.createTenant.fields.nameTenant.namespace !== \"\") {\n return state.createTenant.fields.nameTenant.namespace;\n }\n return defaultNamespace;\n });\n\n const tenantName = useSelector((state: AppState) => {\n let defaultTenantName = \"\";\n if (tenantNameParam !== \"\") {\n return tenantNameParam;\n }\n\n if (state.createTenant.fields.nameTenant.tenantName !== \"\") {\n return state.createTenant.fields.nameTenant.tenantName;\n }\n return defaultTenantName;\n });\n\n return (\n \n \n }\n description={`TLS Certificates Warning`}\n />\n \n Automatic certificate generation is not enabled.\n
\n
\n If you wish to continue only with custom certificates make sure\n they are valid for the following internode hostnames, i.e.:\n
\n
\n \n minio.{namespace}\n
\n minio.{namespace}.svc\n
\n minio.{namespace}.svc.<cluster domain>\n
\n *.{tenantName}-hl.{namespace}.svc.<cluster domain>\n
\n *.{namespace}.svc.<cluster domain>\n
\n
\n Replace <tenant-name>,{\" \"}\n <namespace> and\n <cluster domain> with the actual values for your\n MinIO tenant.\n
\n
\n You can learn more at our{\" \"}\n \n documentation\n \n .\n \n \n \n );\n};\n\nexport default TLSHelpBox;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport { Box, Grid, InputBox, Select, Switch } from \"mds\";\nimport { useDispatch } from \"react-redux\";\nimport { fsGroupChangePolicyType } from \"./types\";\n\ninterface IEditSecurityContextProps {\n runAsUser: string;\n runAsGroup: string;\n fsGroup: string;\n fsGroupChangePolicy: fsGroupChangePolicyType;\n runAsNonRoot: boolean;\n setRunAsUser: any;\n setRunAsGroup: any;\n setFSGroup: any;\n setRunAsNonRoot: any;\n setFSGroupChangePolicy: any;\n}\n\nconst SecurityContextSelector = ({\n runAsGroup,\n runAsUser,\n fsGroup,\n fsGroupChangePolicy,\n runAsNonRoot,\n setRunAsUser,\n setRunAsGroup,\n setFSGroup,\n setRunAsNonRoot,\n setFSGroupChangePolicy,\n}: IEditSecurityContextProps) => {\n const dispatch = useDispatch();\n return (\n \n
\n Security Context\n \n \n \n \n ) => {\n dispatch(setRunAsUser(e.target.value));\n }}\n label=\"Run As User\"\n value={runAsUser}\n required\n min=\"0\"\n />\n \n \n ) => {\n dispatch(setRunAsGroup(e.target.value));\n }}\n label=\"Run As Group\"\n value={runAsGroup}\n required\n min=\"0\"\n />\n \n \n \n \n \n \n ) => {\n dispatch(setFSGroup(e.target.value));\n }}\n label=\"FsGroup\"\n value={fsGroup}\n required\n min=\"0\"\n />\n \n \n {\n dispatch(setFSGroupChangePolicy(value));\n }}\n value={fsGroupChangePolicy}\n options={[\n {\n label: \"Always\",\n value: \"Always\",\n },\n {\n label: \"OnRootMismatch\",\n value: \"OnRootMismatch\",\n },\n ]}\n />\n \n \n \n \n {\n dispatch(setRunAsNonRoot(!runAsNonRoot));\n }}\n label={\"Do not run as Root\"}\n />\n \n \n
\n
\n );\n};\n\nexport default SecurityContextSelector;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport {\n AddIcon,\n Box,\n Button,\n ConfirmModalIcon,\n FileSelector,\n FormLayout,\n Grid,\n IconButton,\n Loader,\n RemoveIcon,\n SectionTitle,\n Switch,\n} from \"mds\";\nimport {\n fsGroupChangePolicyType,\n ICertificateInfo,\n ITenantSecurityResponse,\n} from \"../types\";\nimport { modalStyleUtils } from \"../../Common/FormComponents/common/styleLibrary\";\n\nimport { KeyPair } from \"../ListTenants/utils\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport { setErrorSnackMessage } from \"../../../../systemSlice\";\nimport api from \"../../../../common/api\";\nimport ConfirmDialog from \"../../Common/ModalWrapper/ConfirmDialog\";\nimport TLSCertificate from \"../../Common/TLSCertificate/TLSCertificate\";\nimport SecurityContextSelector from \"../securityContextSelector\";\nimport {\n setFSGroup,\n setFSGroupChangePolicy,\n setRunAsGroup,\n setRunAsNonRoot,\n setRunAsUser,\n} from \"../tenantSecurityContextSlice\";\nimport TLSHelpBox from \"../HelpBox/TLSHelpBox\";\n\nconst TenantSecurity = () => {\n const dispatch = useAppDispatch();\n\n const tenant = useSelector((state: AppState) => state.tenants.tenantInfo);\n const loadingTenant = useSelector(\n (state: AppState) => state.tenants.loadingTenant,\n );\n\n const [isSending, setIsSending] = useState(false);\n const [dialogOpen, setDialogOpen] = useState(false);\n const [enableTLS, setEnableTLS] = useState(false);\n const [enableAutoCert, setEnableAutoCert] = useState(false);\n const [enableCustomCerts, setEnableCustomCerts] = useState(false);\n const [certificatesToBeRemoved, setCertificatesToBeRemoved] = useState<\n string[]\n >([]);\n // MinIO certificates\n const [minioServerCertificates, setMinioServerCertificates] = useState<\n KeyPair[]\n >([\n {\n id: Date.now().toString(),\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n ]);\n const [minioClientCertificates, setMinioClientCertificates] = useState<\n KeyPair[]\n >([\n {\n id: Date.now().toString(),\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n ]);\n const [minioCaCertificates, setMinioCaCertificates] = useState([\n {\n id: Date.now().toString(),\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n ]);\n const [minioServerCertificateSecrets, setMinioServerCertificateSecrets] =\n useState([]);\n const [minioClientCertificateSecrets, setMinioClientCertificateSecrets] =\n useState([]);\n const [minioTLSCaCertificateSecrets, setMinioTLSCaCertificateSecrets] =\n useState([]);\n\n const runAsGroup = useSelector(\n (state: AppState) => state.editTenantSecurityContext.runAsGroup,\n );\n const runAsUser = useSelector(\n (state: AppState) => state.editTenantSecurityContext.runAsUser,\n );\n const fsGroup = useSelector(\n (state: AppState) => state.editTenantSecurityContext.fsGroup,\n );\n const runAsNonRoot = useSelector(\n (state: AppState) => state.editTenantSecurityContext.runAsNonRoot,\n );\n const fsGroupChangePolicy = useSelector(\n (state: AppState) => state.editTenantSecurityContext.fsGroupChangePolicy,\n );\n\n const getTenantSecurityInfo = useCallback(() => {\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${tenant?.namespace}/tenants/${tenant?.name}/security`,\n )\n .then((res: ITenantSecurityResponse) => {\n setEnableAutoCert(res.autoCert);\n setEnableTLS(res.autoCert);\n if (\n res.customCertificates.minio ||\n res.customCertificates.client ||\n res.customCertificates.minioCAs\n ) {\n setEnableCustomCerts(true);\n setEnableTLS(true);\n }\n setMinioServerCertificateSecrets(res.customCertificates.minio || []);\n setMinioClientCertificateSecrets(res.customCertificates.client || []);\n setMinioTLSCaCertificateSecrets(res.customCertificates.minioCAs || []);\n dispatch(setRunAsGroup(res.securityContext.runAsGroup));\n dispatch(setRunAsUser(res.securityContext.runAsUser));\n dispatch(setFSGroup(res.securityContext.fsGroup!));\n dispatch(setRunAsNonRoot(res.securityContext.runAsNonRoot));\n dispatch(\n setFSGroupChangePolicy(\n res.securityContext.fsGroupChangePolicy as fsGroupChangePolicyType,\n ),\n );\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n });\n }, [tenant, dispatch]);\n\n useEffect(() => {\n if (tenant) {\n getTenantSecurityInfo();\n }\n }, [tenant, getTenantSecurityInfo]);\n\n const updateTenantSecurity = () => {\n setIsSending(true);\n let payload = {\n autoCert: enableAutoCert,\n customCertificates: {},\n securityContext: {\n runAsGroup: runAsGroup,\n runAsUser: runAsUser,\n runAsNonRoot: runAsNonRoot,\n fsGroup: fsGroup,\n fsGroupChangePolicy: fsGroupChangePolicy,\n },\n };\n if (enableCustomCerts) {\n payload[\"customCertificates\"] = {\n secretsToBeDeleted: certificatesToBeRemoved,\n minioServerCertificates: minioServerCertificates\n .map((keyPair: KeyPair) => ({\n crt: keyPair.encoded_cert,\n key: keyPair.encoded_key,\n }))\n .filter((cert: any) => cert.crt && cert.key),\n minioClientCertificates: minioClientCertificates\n .map((keyPair: KeyPair) => ({\n crt: keyPair.encoded_cert,\n key: keyPair.encoded_key,\n }))\n .filter((cert: any) => cert.crt && cert.key),\n minioCAsCertificates: minioCaCertificates\n .map((keyPair: KeyPair) => keyPair.encoded_cert)\n .filter((cert: any) => cert),\n };\n } else {\n payload[\"customCertificates\"] = {\n secretsToBeDeleted: [\n ...minioServerCertificateSecrets.map((cert) => cert.name),\n ...minioClientCertificateSecrets.map((cert) => cert.name),\n ...minioTLSCaCertificateSecrets.map((cert) => cert.name),\n ],\n minioServerCertificates: [],\n minioClientCertificates: [],\n minioCAsCertificates: [],\n };\n }\n api\n .invoke(\n \"POST\",\n `/api/v1/namespaces/${tenant?.namespace}/tenants/${tenant?.name}/security`,\n payload,\n )\n .then(() => {\n setIsSending(false);\n // Close confirmation modal\n setDialogOpen(false);\n // Refresh Information and reset forms\n setMinioServerCertificates([\n {\n cert: \"\",\n encoded_cert: \"\",\n encoded_key: \"\",\n id: Date.now().toString(),\n key: \"\",\n },\n ]);\n setMinioClientCertificates([\n {\n cert: \"\",\n encoded_cert: \"\",\n encoded_key: \"\",\n id: Date.now().toString(),\n key: \"\",\n },\n ]);\n setMinioCaCertificates([\n {\n cert: \"\",\n encoded_cert: \"\",\n encoded_key: \"\",\n id: Date.now().toString(),\n key: \"\",\n },\n ]);\n getTenantSecurityInfo();\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n setIsSending(false);\n });\n };\n\n const removeCertificate = (certificateInfo: ICertificateInfo) => {\n // TLS certificate secrets can be referenced MinIO, Console or KES, we need to remove the secret from all list and update\n // the arrays\n // Add certificate to the global list of secrets to be removed\n setCertificatesToBeRemoved([\n ...certificatesToBeRemoved,\n certificateInfo.name,\n ]);\n\n // Update MinIO server TLS certificate secrets\n const updatedMinioServerCertificateSecrets =\n minioServerCertificateSecrets.filter(\n (certificateSecret) => certificateSecret.name !== certificateInfo.name,\n );\n // Update MinIO client TLS certificate secrets\n const updatedMinioClientCertificateSecrets =\n minioClientCertificateSecrets.filter(\n (certificateSecret) => certificateSecret.name !== certificateInfo.name,\n );\n const updatedMinIOTLSCaCertificateSecrets =\n minioTLSCaCertificateSecrets.filter(\n (certificateSecret) => certificateSecret.name !== certificateInfo.name,\n );\n setMinioServerCertificateSecrets(updatedMinioServerCertificateSecrets);\n setMinioClientCertificateSecrets(updatedMinioClientCertificateSecrets);\n setMinioTLSCaCertificateSecrets(updatedMinIOTLSCaCertificateSecrets);\n };\n\n const addFileToKeyPair = (\n type: string,\n id: string,\n key: string,\n fileName: string,\n value: string,\n ) => {\n let certificates = minioServerCertificates;\n let updateCertificates: any = () => {};\n\n switch (type) {\n case \"minio\": {\n certificates = minioServerCertificates;\n updateCertificates = setMinioServerCertificates;\n break;\n }\n case \"client\": {\n certificates = minioClientCertificates;\n updateCertificates = setMinioClientCertificates;\n break;\n }\n case \"minioCAs\": {\n certificates = minioCaCertificates;\n updateCertificates = setMinioCaCertificates;\n break;\n }\n default:\n }\n\n const NCertList = certificates.map((item: KeyPair) => {\n if (item.id === id) {\n return {\n ...item,\n [key]: fileName,\n [`encoded_${key}`]: value,\n };\n }\n return item;\n });\n updateCertificates(NCertList);\n };\n\n const deleteKeyPair = (type: string, id: string) => {\n let certificates = minioServerCertificates;\n let updateCertificates: any = () => {};\n\n switch (type) {\n case \"minio\": {\n certificates = minioServerCertificates;\n updateCertificates = setMinioServerCertificates;\n break;\n }\n case \"client\": {\n certificates = minioClientCertificates;\n updateCertificates = setMinioClientCertificates;\n break;\n }\n case \"minioCAs\": {\n certificates = minioCaCertificates;\n updateCertificates = setMinioCaCertificates;\n break;\n }\n default:\n }\n\n if (certificates.length > 1) {\n const cleanCertsList = certificates.filter(\n (item: KeyPair) => item.id !== id,\n );\n updateCertificates(cleanCertsList);\n }\n };\n\n const addKeyPair = (type: string) => {\n let certificates = minioServerCertificates;\n let updateCertificates: any = () => {};\n\n switch (type) {\n case \"minio\": {\n certificates = minioServerCertificates;\n updateCertificates = setMinioServerCertificates;\n break;\n }\n case \"client\": {\n certificates = minioClientCertificates;\n updateCertificates = setMinioClientCertificates;\n break;\n }\n case \"minioCAs\": {\n certificates = minioCaCertificates;\n updateCertificates = setMinioCaCertificates;\n break;\n }\n default:\n }\n const updatedCertificates = [\n ...certificates,\n {\n id: Date.now().toString(),\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n ];\n updateCertificates(updatedCertificates);\n };\n\n return (\n \n }\n isLoading={isSending}\n onClose={() => setDialogOpen(false)}\n isOpen={dialogOpen}\n onConfirm={updateTenantSecurity}\n confirmationContent={\n \n Are you sure you want to save the changes and restart the service?\n \n }\n />\n {loadingTenant ? (\n \n \n \n ) : (\n \n \n \n Security\n \n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n setEnableTLS(checked);\n }}\n label={\"TLS\"}\n description={\n \"Securing all the traffic using TLS. This is required for Encryption Configuration\"\n }\n />\n {enableTLS && (\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n setEnableAutoCert(checked);\n }}\n label={\"AutoCert\"}\n description={\n \"The internode certificates will be generated and managed by MinIO Operator\"\n }\n />\n {\n const targetD = e.target;\n const checked = targetD.checked;\n setEnableCustomCerts(checked);\n }}\n label={\"Custom Certificates\"}\n description={\"Certificates used to terminated TLS at MinIO\"}\n />\n\n {enableCustomCerts && (\n \n {!enableAutoCert && (\n \n \n \n )}\n \n
MinIO Server Certificates
\n
\n \n {minioServerCertificateSecrets.map(\n (certificateInfo: ICertificateInfo) => (\n removeCertificate(certificateInfo)}\n />\n ),\n )}\n \n \n {minioServerCertificates.map((keyPair, index) => (\n \n {\n if (encodedValue) {\n addFileToKeyPair(\n \"minio\",\n keyPair.id,\n \"cert\",\n fileName,\n encodedValue,\n );\n }\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"tlsCert\"\n name=\"tlsCert\"\n label=\"Cert\"\n value={keyPair.cert}\n returnEncodedData\n />\n {\n if (encodedValue) {\n addFileToKeyPair(\n \"minio\",\n keyPair.id,\n \"key\",\n fileName,\n encodedValue,\n );\n }\n }}\n accept=\".key,.pem\"\n id=\"tlsKey\"\n name=\"tlsKey\"\n label=\"Key\"\n value={keyPair.key}\n returnEncodedData\n />\n \n
\n addKeyPair(\"minio\")}\n disabled={\n index !== minioServerCertificates.length - 1\n }\n >\n \n \n
\n
\n \n deleteKeyPair(\"minio\", keyPair.id)\n }\n disabled={minioServerCertificates.length <= 1}\n >\n \n \n
\n
\n
\n ))}\n \n\n \n
MinIO Client Certificates
\n
\n \n {minioClientCertificateSecrets.map(\n (certificateInfo: ICertificateInfo) => (\n removeCertificate(certificateInfo)}\n />\n ),\n )}\n \n \n {minioClientCertificates.map((keyPair, index) => (\n \n {\n if (encodedValue) {\n addFileToKeyPair(\n \"client\",\n keyPair.id,\n \"cert\",\n fileName,\n encodedValue,\n );\n }\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"tlsCert\"\n name=\"tlsCert\"\n label=\"Cert\"\n value={keyPair.cert}\n returnEncodedData\n />\n {\n if (encodedValue) {\n addFileToKeyPair(\n \"client\",\n keyPair.id,\n \"key\",\n fileName,\n encodedValue,\n );\n }\n }}\n accept=\".key,.pem\"\n id=\"tlsKey\"\n name=\"tlsKey\"\n label=\"Key\"\n value={keyPair.key}\n returnEncodedData\n />\n \n
\n addKeyPair(\"client\")}\n disabled={\n index !== minioClientCertificates.length - 1\n }\n >\n \n \n
\n
\n \n deleteKeyPair(\"client\", keyPair.id)\n }\n disabled={minioClientCertificates.length <= 1}\n >\n \n \n
\n
\n
\n ))}\n \n\n \n
MinIO CA Certificates
\n
\n \n {minioTLSCaCertificateSecrets.map(\n (certificateInfo: ICertificateInfo) => (\n removeCertificate(certificateInfo)}\n />\n ),\n )}\n \n \n {minioCaCertificates.map((keyPair: KeyPair, index) => (\n \n \n {\n if (encodedValue) {\n addFileToKeyPair(\n \"minioCAs\",\n keyPair.id,\n \"cert\",\n fileName,\n encodedValue,\n );\n }\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"tlsCert\"\n name=\"tlsCert\"\n label=\"Cert\"\n value={keyPair.cert}\n returnEncodedData\n />\n \n \n
\n
\n addKeyPair(\"minioCAs\")}\n disabled={\n index !== minioCaCertificates.length - 1\n }\n >\n \n \n
\n
\n \n deleteKeyPair(\"minioCAs\", keyPair.id)\n }\n disabled={minioCaCertificates.length <= 1}\n >\n \n \n
\n
\n
\n
\n ))}\n \n
\n )}\n
\n )}\n \n Security Context\n \n \n dispatch(setFSGroup(value))}\n setRunAsUser={(value: string) => dispatch(setRunAsUser(value))}\n setRunAsGroup={(value: string) =>\n dispatch(setRunAsGroup(value))\n }\n setRunAsNonRoot={(value: boolean) =>\n dispatch(setRunAsNonRoot(value))\n }\n setFSGroupChangePolicy={(value: fsGroupChangePolicyType) =>\n dispatch(setFSGroupChangePolicy(value))\n }\n />\n \n \n setDialogOpen(true)}\n label={\"Save\"}\n />\n \n \n
\n )}\n
\n );\n};\n\nexport default TenantSecurity;\n"],"names":["actionsTray","label","color","fontSize","alignSelf","whiteSpace","marginLeft","display","justifyContent","marginBottom","alignItems","flexGrow","modalStyleUtils","modalButtonBar","marginTop","marginRight","modalFormScrollable","maxHeight","overflowY","paddingTop","CertificateContainer","styled","div","_ref","theme","position","margin","userSelect","appearance","maxWidth","fontFamily","gap","border","concat","get","borderRadius","padding","fontWeight","backgroundColor","cursor","opacity","fill","width","height","minWidth","minHeight","flexWrap","textTransform","listStyle","content","borderBottom","transform","_ref2","certificateInfo","onDelete","certificates","domains","expiry","DateTime","fromISO","now","utc","daysToExpiry","daysToExpiryHuman","certificateExpiration","durationToExpiry","diff","as","minus","Duration","fromObject","days","shiftTo","toHuman","maximumFractionDigits","minutes","_jsxs","children","Box","className","_jsx","CertificateIcon","name","EventBusyIcon","toFormat","TimeIcon","style","length","map","dom","index","LanguageIcon","IconButton","size","onClick","AlertCloseIcon","FeatureItem","icon","description","sx","fontStyle","TLSHelpBox","params","useParams","tenantNameParam","tenantName","tenantNamespaceParam","tenantNamespace","namespace","useSelector","state","createTenant","fields","nameTenant","flex","flexFlow","breakPoints","sm","href","target","rel","runAsGroup","runAsUser","fsGroup","fsGroupChangePolicy","runAsNonRoot","setRunAsUser","setRunAsGroup","setFSGroup","setRunAsNonRoot","setFSGroupChangePolicy","dispatch","useDispatch","Fragment","flexDirection","Grid","item","xs","InputBox","type","id","onChange","e","value","required","min","Select","options","Switch","checked","TenantSecurity","useAppDispatch","tenant","tenants","tenantInfo","loadingTenant","isSending","setIsSending","useState","dialogOpen","setDialogOpen","enableTLS","setEnableTLS","enableAutoCert","setEnableAutoCert","enableCustomCerts","setEnableCustomCerts","certificatesToBeRemoved","setCertificatesToBeRemoved","minioServerCertificates","setMinioServerCertificates","Date","toString","key","cert","encoded_key","encoded_cert","minioClientCertificates","setMinioClientCertificates","minioCaCertificates","setMinioCaCertificates","minioServerCertificateSecrets","setMinioServerCertificateSecrets","minioClientCertificateSecrets","setMinioClientCertificateSecrets","minioTLSCaCertificateSecrets","setMinioTLSCaCertificateSecrets","editTenantSecurityContext","getTenantSecurityInfo","useCallback","api","invoke","then","res","autoCert","customCertificates","minio","client","minioCAs","securityContext","catch","err","setErrorSnackMessage","useEffect","removeCertificate","updatedMinioServerCertificateSecrets","filter","certificateSecret","updatedMinioClientCertificateSecrets","updatedMinIOTLSCaCertificateSecrets","addFileToKeyPair","fileName","updateCertificates","deleteKeyPair","addKeyPair","React","ConfirmDialog","title","confirmText","cancelText","titleIcon","ConfirmModalIcon","isLoading","onClose","isOpen","onConfirm","updateTenantSecurity","payload","secretsToBeDeleted","keyPair","crt","minioCAsCertificates","confirmationContent","textAlign","Loader","SectionTitle","separator","FormLayout","withBorders","containerPadding","TLSCertificate","FileSelector","event","encodedValue","accept","returnEncodedData","disabled","AddIcon","RemoveIcon","SecurityContextSelector","Button","variant"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/728.2edde3f9.chunk.js b/web-app/build/static/js/728.2edde3f9.chunk.js deleted file mode 100644 index 869f02dfdc0..00000000000 --- a/web-app/build/static/js/728.2edde3f9.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[728],{6746:(e,n,a)=>{a.d(n,{A:()=>o});var s=a(5043),t=a(9923),c=a(579);const l=e=>{const{event:n}=e,[a,l]=s.useState(!1);return(0,c.jsxs)(s.Fragment,{children:[(0,c.jsxs)(t.Hjg,{sx:{cursor:"pointer"},children:[(0,c.jsx)(t.TlP,{scope:"row",onClick:()=>l(!a),sx:{borderBottom:0},children:n.event_type}),(0,c.jsx)(t.nA6,{onClick:()=>l(!a),sx:{borderBottom:0},children:n.reason}),(0,c.jsx)(t.nA6,{onClick:()=>l(!a),sx:{borderBottom:0},children:n.seen}),(0,c.jsx)(t.nA6,{onClick:()=>l(!a),sx:{borderBottom:0},children:n.message.length>=30?"".concat(n.message.slice(0,30),"..."):n.message}),(0,c.jsx)(t.nA6,{onClick:()=>l(!a),sx:{borderBottom:0},children:a?(0,c.jsx)(t.FUY,{}):(0,c.jsx)(t.QpL,{})})]}),(0,c.jsx)(t.Hjg,{children:(0,c.jsx)(t.nA6,{style:{paddingBottom:0,paddingTop:0},colSpan:5,children:a&&(0,c.jsx)(t.azJ,{useBackground:!0,sx:{padding:10,marginBottom:10},children:n.message})})})]})},o=e=>{let{events:n,loading:a}=e;return a?(0,c.jsx)(t.z21,{}):(0,c.jsx)(t.azJ,{withBorders:!0,customBorderPadding:"0px",children:(0,c.jsxs)(t.XIK,{"aria-label":"collapsible table",children:[(0,c.jsx)(t.ndF,{children:(0,c.jsxs)(t.Hjg,{children:[(0,c.jsx)(t.nA6,{children:"Type"}),(0,c.jsx)(t.nA6,{children:"Reason"}),(0,c.jsx)(t.nA6,{children:"Age"}),(0,c.jsx)(t.nA6,{children:"Message"}),(0,c.jsx)(t.nA6,{})]})}),(0,c.jsx)(t.BFY,{children:n.map((e=>(0,c.jsx)(l,{event:e},"".concat(e.event_type,"-").concat(e.seen))))})]})})}},3728:(e,n,a)=>{a.r(n),a.d(n,{default:()=>v});var s=a(5043),t=a(9923),c=a(3216),l=a(5475),o=a(4159),r=a(2961),i=a(6483),d=a(6746),m=a(649),x=a(579);const j={display:"grid",gridTemplateColumns:"2fr 1fr",gridAutoFlow:"row",gap:2,padding:15,["@media (max-width: ".concat(t.nmC.sm,"px)")]:{gridTemplateColumns:"1fr",gridAutoFlow:"dense"}},p=e=>{let{title:n}=e;return(0,x.jsx)(t.azJ,{sx:{borderBottom:"1px solid #eaeaea",margin:0,marginBottom:"20px"},children:(0,x.jsx)("h3",{children:n})})},b=e=>{let{describeInfo:n}=e;return(0,x.jsx)(s.Fragment,{children:(0,x.jsxs)("div",{id:"pvc-describe-summary-content",children:[(0,x.jsx)(p,{title:"Summary"}),(0,x.jsxs)(t.azJ,{sx:{...j},children:[(0,x.jsx)(t.mZW,{label:"Name",value:n.name}),(0,x.jsx)(t.mZW,{label:"Namespace",value:n.namespace}),(0,x.jsx)(t.mZW,{label:"Capacity",value:n.capacity}),(0,x.jsx)(t.mZW,{label:"Status",value:n.status}),(0,x.jsx)(t.mZW,{label:"Storage Class",value:n.storageClass}),(0,x.jsx)(t.mZW,{label:"Access Modes",value:n.accessModes.join(", ")}),(0,x.jsx)(t.mZW,{label:"Finalizers",value:n.finalizers.join(", ")}),(0,x.jsx)(t.mZW,{label:"Volume",value:n.volume}),(0,x.jsx)(t.mZW,{label:"Volume Mode",value:n.volumeMode})]})]})})},u=e=>{let{annotations:n}=e;return(0,x.jsx)(s.Fragment,{children:(0,x.jsxs)("div",{id:"pvc-describe-annotations-content",children:[(0,x.jsx)(p,{title:"Annotations"}),(0,x.jsx)(t.azJ,{children:n.map(((e,n)=>(0,x.jsx)(t.vwO,{id:"".concat(e.key,"-").concat(e.value),sx:{margin:"0.5%"},label:"".concat(e.key,": ").concat(e.value)},n)))})]})})},h=e=>{let{labels:n}=e;return(0,x.jsx)(s.Fragment,{children:(0,x.jsxs)("div",{id:"pvc-describe-labels-content",children:[(0,x.jsx)(p,{title:"Labels"}),(0,x.jsx)(t.azJ,{children:n.map(((e,n)=>(0,x.jsx)(t.vwO,{id:"".concat(e.key,"-").concat(e.value),sx:{margin:"0.5%"},label:"".concat(e.key,": ").concat(e.value)},n)))})]})})},g=e=>{let{tenant:n,namespace:a,pvcName:c,propLoading:l}=e;const[i,d]=(0,s.useState)(),[j,p]=(0,s.useState)(!0),[g,v]=(0,s.useState)("pvc-describe-summary"),C=(0,r.jL)();return(0,s.useEffect)((()=>{l&&p(!0)}),[l]),(0,s.useEffect)((()=>{j&&m.A.invoke("GET","/api/v1/namespaces/".concat(a,"/tenants/").concat(n,"/pvcs/").concat(c,"/describe")).then((e=>{d(e),p(!1)})).catch((e=>{C((0,o.C9)(e)),p(!1)}))}),[j,c,a,n,C]),(0,x.jsx)(s.Fragment,{children:i&&(0,x.jsx)(t.tUM,{currentTabOrPath:g,onTabClick:e=>{v(e)},options:[{tabConfig:{id:"pvc-describe-summary",label:"Summary"},content:(0,x.jsx)(b,{describeInfo:i})},{tabConfig:{id:"pvc-describe-annotations",label:"Annotations"},content:(0,x.jsx)(u,{annotations:i.annotations})},{tabConfig:{id:"pvc-describe-labels",label:"Labels"},content:(0,x.jsx)(h,{labels:i.labels})}],horizontal:!0,horizontalBarBackground:!1})})},v=()=>{const e=(0,r.jL)(),{tenantName:n,PVCName:a,tenantNamespace:j}=(0,c.g)(),[p,b]=(0,s.useState)("simple-tab-0"),[u,h]=(0,s.useState)(!0),[v,C]=(0,s.useState)([]);return(0,s.useEffect)((()=>{u&&m.A.invoke("GET","/api/v1/namespaces/".concat(j,"/tenants/").concat(n,"/pvcs/").concat(a,"/events")).then((e=>{for(let n=0;n{e((0,o.C9)(n)),h(!1)}))}),[u,a,j,n,e]),(0,x.jsxs)(s.Fragment,{children:[(0,x.jsxs)(t._xt,{separator:!0,sx:{marginBottom:15},children:[(0,x.jsx)(l.N_,{to:"/namespaces/".concat(j,"/tenants/").concat(n,"/volumes"),children:"PVCs"})," ","> ",a]}),(0,x.jsx)(t.tUM,{options:[{tabConfig:{id:"simple-tab-0",label:"Events"},content:(0,x.jsxs)(s.Fragment,{children:[(0,x.jsx)(t._xt,{separator:!0,sx:{marginBottom:15},children:"Events"}),(0,x.jsx)(d.A,{events:v,loading:u})]})},{tabConfig:{id:"simple-tab-1",label:"Describe"},content:(0,x.jsx)(g,{tenant:n||"",namespace:j||"",pvcName:a||"",propLoading:u})}],currentTabOrPath:p,onTabClick:e=>{b(e)},horizontal:!0})]})}}}]); -//# sourceMappingURL=728.2edde3f9.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/728.2edde3f9.chunk.js.map b/web-app/build/static/js/728.2edde3f9.chunk.js.map deleted file mode 100644 index 83ddb78c992..00000000000 --- a/web-app/build/static/js/728.2edde3f9.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/728.2edde3f9.chunk.js","mappings":"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","sources":["screens/Console/Tenants/TenantDetails/events/EventsList.tsx","screens/Console/Tenants/TenantDetails/pvcs/PVCDescribe.tsx","screens/Console/Tenants/TenantDetails/pvcs/TenantVolumes.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport {\n ProgressBar,\n Table,\n TableBody,\n TableHeadCell,\n TableCell,\n TableHead,\n TableRow,\n Box,\n ExpandCaret,\n CollapseCaret,\n} from \"mds\";\nimport { IEvent } from \"../../ListTenants/types\";\n\ninterface IEventsListProps {\n events: IEvent[];\n loading: boolean;\n}\n\nconst Event = (props: { event: IEvent }) => {\n const { event } = props;\n const [open, setOpen] = React.useState(false);\n\n return (\n \n \n setOpen(!open)}\n sx={{ borderBottom: 0 }}\n >\n {event.event_type}\n \n setOpen(!open)} sx={{ borderBottom: 0 }}>\n {event.reason}\n \n setOpen(!open)} sx={{ borderBottom: 0 }}>\n {event.seen}\n \n setOpen(!open)} sx={{ borderBottom: 0 }}>\n {event.message.length >= 30\n ? `${event.message.slice(0, 30)}...`\n : event.message}\n \n setOpen(!open)} sx={{ borderBottom: 0 }}>\n {open ? : }\n \n \n \n \n {open && (\n \n {event.message}\n \n )}\n \n \n \n );\n};\n\nconst EventsList = ({ events, loading }: IEventsListProps) => {\n if (loading) {\n return ;\n }\n return (\n \n \n \n \n Type\n Reason\n Age\n Message\n \n \n \n \n {events.map((event) => (\n \n ))}\n \n
\n
\n );\n};\n\nexport default EventsList;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport { Box, breakPoints, Tabs, Tag, ValuePair } from \"mds\";\nimport { setErrorSnackMessage } from \"../../../../../systemSlice\";\nimport { ErrorResponseHandler } from \"../../../../../common/types\";\nimport { useAppDispatch } from \"../../../../../store\";\nimport {\n DescribeResponse,\n IPVCDescribeAnnotationsProps,\n IPVCDescribeLabelsProps,\n IPVCDescribeProps,\n IPVCDescribeSummaryProps,\n} from \"./pvcTypes\";\nimport api from \"../../../../../common/api\";\n\nconst twoColCssGridLayoutConfig = {\n display: \"grid\",\n gridTemplateColumns: \"2fr 1fr\",\n gridAutoFlow: \"row\",\n gap: 2,\n padding: 15,\n [`@media (max-width: ${breakPoints.sm}px)`]: {\n gridTemplateColumns: \"1fr\",\n gridAutoFlow: \"dense\",\n },\n};\n\nconst HeaderSection = ({ title }: { title: string }) => {\n return (\n \n

{title}

\n \n );\n};\n\nconst PVCDescribeSummary = ({ describeInfo }: IPVCDescribeSummaryProps) => {\n return (\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n );\n};\n\nconst PVCDescribeAnnotations = ({\n annotations,\n}: IPVCDescribeAnnotationsProps) => {\n return (\n \n
\n \n \n {annotations.map((annotation, index) => (\n \n ))}\n \n
\n
\n );\n};\n\nconst PVCDescribeLabels = ({ labels }: IPVCDescribeLabelsProps) => {\n return (\n \n
\n \n \n {labels.map((label, index) => (\n \n ))}\n \n
\n
\n );\n};\n\nconst PVCDescribe = ({\n tenant,\n namespace,\n pvcName,\n propLoading,\n}: IPVCDescribeProps) => {\n const [describeInfo, setDescribeInfo] = useState();\n const [loading, setLoading] = useState(true);\n const [curTab, setCurTab] = useState(\"pvc-describe-summary\");\n const dispatch = useAppDispatch();\n\n useEffect(() => {\n if (propLoading) {\n setLoading(true);\n }\n }, [propLoading]);\n\n useEffect(() => {\n if (loading) {\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${namespace}/tenants/${tenant}/pvcs/${pvcName}/describe`,\n )\n .then((res: DescribeResponse) => {\n setDescribeInfo(res);\n setLoading(false);\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n setLoading(false);\n });\n }\n }, [loading, pvcName, namespace, tenant, dispatch]);\n\n return (\n \n {describeInfo && (\n {\n setCurTab(newValue);\n }}\n options={[\n {\n tabConfig: { id: \"pvc-describe-summary\", label: \"Summary\" },\n content: ,\n },\n {\n tabConfig: {\n id: \"pvc-describe-annotations\",\n label: \"Annotations\",\n },\n content: (\n \n ),\n },\n {\n tabConfig: { id: \"pvc-describe-labels\", label: \"Labels\" },\n content: ,\n },\n ]}\n horizontal\n horizontalBarBackground={false}\n />\n )}\n \n );\n};\n\nexport default PVCDescribe;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport { Tabs, SectionTitle } from \"mds\";\nimport { Link, useParams } from \"react-router-dom\";\nimport { setErrorSnackMessage } from \"../../../../../systemSlice\";\nimport { useAppDispatch } from \"../../../../../store\";\nimport { IEvent } from \"../../ListTenants/types\";\nimport { niceDays } from \"../../../../../common/utils\";\nimport { ErrorResponseHandler } from \"../../../../../common/types\";\nimport EventsList from \"../events/EventsList\";\nimport PVCDescribe from \"./PVCDescribe\";\nimport api from \"../../../../../common/api\";\n\nconst TenantVolumes = () => {\n const dispatch = useAppDispatch();\n const { tenantName, PVCName, tenantNamespace } = useParams();\n\n const [curTab, setCurTab] = useState(\"simple-tab-0\");\n const [loading, setLoading] = useState(true);\n const [events, setEvents] = useState([]);\n\n useEffect(() => {\n if (loading) {\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${tenantNamespace}/tenants/${tenantName}/pvcs/${PVCName}/events`,\n )\n .then((res: IEvent[]) => {\n for (let i = 0; i < res.length; i++) {\n let currentTime = (Date.now() / 1000) | 0;\n\n res[i].seen = niceDays((currentTime - res[i].last_seen).toString());\n }\n setEvents(res);\n setLoading(false);\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n setLoading(false);\n });\n }\n }, [loading, PVCName, tenantNamespace, tenantName, dispatch]);\n\n return (\n \n \n \n PVCs\n {\" \"}\n > {PVCName}\n \n \n \n Events\n \n \n \n ),\n },\n {\n tabConfig: { id: \"simple-tab-1\", label: \"Describe\" },\n content: (\n \n ),\n },\n ]}\n currentTabOrPath={curTab}\n onTabClick={(tab) => {\n setCurTab(tab);\n }}\n horizontal\n />\n \n );\n};\n\nexport default TenantVolumes;\n"],"names":["Event","props","event","open","setOpen","React","_jsxs","children","TableRow","sx","cursor","_jsx","TableHeadCell","scope","onClick","borderBottom","event_type","TableCell","reason","seen","message","length","concat","slice","CollapseCaret","ExpandCaret","style","paddingBottom","paddingTop","colSpan","Box","useBackground","padding","marginBottom","_ref","events","loading","ProgressBar","withBorders","customBorderPadding","Table","TableHead","TableBody","map","twoColCssGridLayoutConfig","display","gridTemplateColumns","gridAutoFlow","gap","breakPoints","sm","HeaderSection","title","margin","PVCDescribeSummary","_ref2","describeInfo","Fragment","id","ValuePair","label","value","name","namespace","capacity","status","storageClass","accessModes","join","finalizers","volume","volumeMode","PVCDescribeAnnotations","_ref3","annotations","annotation","index","Tag","key","PVCDescribeLabels","_ref4","labels","_ref5","tenant","pvcName","propLoading","setDescribeInfo","useState","setLoading","curTab","setCurTab","dispatch","useAppDispatch","useEffect","api","invoke","then","res","catch","err","setErrorSnackMessage","Tabs","currentTabOrPath","onTabClick","newValue","options","tabConfig","content","horizontal","horizontalBarBackground","TenantVolumes","tenantName","PVCName","tenantNamespace","useParams","setEvents","i","currentTime","Date","now","niceDays","last_seen","toString","SectionTitle","separator","Link","to","EventsList","PVCDescribe","tab"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/729.386ba038.chunk.js b/web-app/build/static/js/729.386ba038.chunk.js deleted file mode 100644 index 5f7b3ba3150..00000000000 --- a/web-app/build/static/js/729.386ba038.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[729],{5448:(e,n,t)=>{t.d(n,{A:()=>c});var a=t(5043),s=t(649);const c=(e,n)=>{const[t,c]=(0,a.useState)(!1);return[t,(t,a,o,r)=>{c(!0),s.A.invoke(t,a,o,r).then((n=>{c(!1),e(n)})).catch((e=>{c(!1),n(e)}))}]}},1729:(e,n,t)=>{t.r(n),t.d(n,{default:()=>p});var a=t(5043),s=t(9923),c=t(5448),o=t(8661),r=t(4159),i=t(2961),l=t(579);const p=e=>{let{deleteOpen:n,selectedPVC:t,closeDeleteModalAndRefresh:p}=e;const d=(0,i.jL)(),[m,u]=(0,a.useState)(""),[C,x]=(0,c.A)((()=>p(!0)),(e=>d((0,r.C9)(e))));return(0,l.jsx)(o.A,{title:"Delete PVC",confirmText:"Delete",isOpen:n,titleIcon:(0,l.jsx)(s.xWY,{}),isLoading:C,onConfirm:()=>{m===t.name?x("DELETE","/api/v1/namespaces/".concat(t.namespace,"/tenants/").concat(t.tenant,"/pvc/").concat(t.name)):d((0,r.C9)({errorMessage:"PVC name is incorrect",detailedError:""}))},onClose:()=>p(!1),confirmButtonProps:{disabled:m!==t.name||C},confirmationContent:(0,l.jsxs)(a.Fragment,{children:["To continue please type ",(0,l.jsx)("b",{children:t.name})," in the box.",(0,l.jsx)(s.xA9,{item:!0,xs:12,sx:{marginTop:15},children:(0,l.jsx)(s.cl_,{id:"retype-PVC",name:"retype-PVC",onChange:e=>{u(e.target.value)},label:"",value:m})})]})})}}}]); -//# sourceMappingURL=729.386ba038.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/729.386ba038.chunk.js.map b/web-app/build/static/js/729.386ba038.chunk.js.map deleted file mode 100644 index 89f3da36886..00000000000 --- a/web-app/build/static/js/729.386ba038.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/729.386ba038.chunk.js","mappings":"yIAQA,MAuBA,EAvBeA,CACbC,EACAC,KAEA,MAAOC,EAAWC,IAAgBC,EAAAA,EAAAA,WAAkB,GAgBpD,MAAO,CAACF,EAdQG,CAACC,EAAgBC,EAAaC,EAAYC,KACxDN,GAAa,GACbO,EAAAA,EACGC,OAAOL,EAAQC,EAAKC,EAAMC,GAC1BG,MAAMC,IACLV,GAAa,GACbH,EAAUa,EAAI,IAEfC,OAAOC,IACNZ,GAAa,GACbF,EAAQc,EAAI,GACZ,EAGqB,C,wHCK7B,MA+DA,EA/DkBC,IAIC,IAJA,WACjBC,EAAU,YACVC,EAAW,2BACXC,GACWH,EACX,MAAMI,GAAWC,EAAAA,EAAAA,OACVC,EAAWC,IAAgBnB,EAAAA,EAAAA,UAAS,KAOpCoB,EAAeC,IAAmB1B,EAAAA,EAAAA,IALpB2B,IAAMP,GAA2B,KAClCJ,GAClBK,GAASO,EAAAA,EAAAA,IAAqBZ,MAqBhC,OACEa,EAAAA,EAAAA,KAACC,EAAAA,EAAa,CACZC,MAAK,aACLC,YAAa,SACbC,OAAQf,EACRgB,WAAWL,EAAAA,EAAAA,KAACM,EAAAA,IAAiB,IAC7BhC,UAAWsB,EACXW,UAvBoBC,KAClBd,IAAcJ,EAAYmB,KAS9BZ,EACE,SAAS,sBAADa,OACcpB,EAAYqB,UAAS,aAAAD,OAAYpB,EAAYsB,OAAM,SAAAF,OAAQpB,EAAYmB,OAV7FjB,GACEO,EAAAA,EAAAA,IAAqB,CACnBc,aAAc,wBACdC,cAAe,KAQpB,EAWCC,QA5BYA,IAAMxB,GAA2B,GA6B7CyB,mBAAoB,CAClBC,SAAUvB,IAAcJ,EAAYmB,MAAQb,GAE9CsB,qBACEC,EAAAA,EAAAA,MAACC,EAAAA,SAAQ,CAAAC,SAAA,CAAC,4BACgBrB,EAAAA,EAAAA,KAAA,KAAAqB,SAAI/B,EAAYmB,OAAS,gBACjDT,EAAAA,EAAAA,KAACsB,EAAAA,IAAI,CAACC,MAAI,EAACC,GAAI,GAAIC,GAAI,CAAEC,UAAW,IAAKL,UACvCrB,EAAAA,EAAAA,KAAC2B,EAAAA,IAAQ,CACPC,GAAG,aACHnB,KAAK,aACLoB,SAAWC,IACTnC,EAAamC,EAAMC,OAAOC,MAAM,EAElCC,MAAM,GACND,MAAOtC,UAKf,C","sources":["screens/Console/Common/Hooks/useApi.tsx","screens/Console/Tenants/TenantDetails/DeletePVC.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport api from \"../../../../common/api\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\n\ntype NoReturnFunction = (param?: any) => void;\ntype ApiMethodToInvoke = (method: string, url: string, data?: any) => void;\ntype IsApiInProgress = boolean;\n\nconst useApi = (\n onSuccess: NoReturnFunction,\n onError: NoReturnFunction,\n): [IsApiInProgress, ApiMethodToInvoke] => {\n const [isLoading, setIsLoading] = useState(false);\n\n const callApi = (method: string, url: string, data?: any, headers?: any) => {\n setIsLoading(true);\n api\n .invoke(method, url, data, headers)\n .then((res: any) => {\n setIsLoading(false);\n onSuccess(res);\n })\n .catch((err: ErrorResponseHandler) => {\n setIsLoading(false);\n onError(err);\n });\n };\n\n return [isLoading, callApi];\n};\n\nexport default useApi;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState, Fragment } from \"react\";\nimport { Grid, InputBox } from \"mds\";\n\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport useApi from \"../../Common/Hooks/useApi\";\nimport ConfirmDialog from \"../../Common/ModalWrapper/ConfirmDialog\";\nimport { ConfirmDeleteIcon } from \"mds\";\nimport { IStoragePVCs } from \"../../Storage/types\";\nimport { setErrorSnackMessage } from \"../../../../systemSlice\";\nimport { useAppDispatch } from \"../../../../store\";\n\ninterface IDeletePVC {\n deleteOpen: boolean;\n selectedPVC: IStoragePVCs;\n closeDeleteModalAndRefresh: (refreshList: boolean) => any;\n}\n\nconst DeletePVC = ({\n deleteOpen,\n selectedPVC,\n closeDeleteModalAndRefresh,\n}: IDeletePVC) => {\n const dispatch = useAppDispatch();\n const [retypePVC, setRetypePVC] = useState(\"\");\n\n const onDelSuccess = () => closeDeleteModalAndRefresh(true);\n const onDelError = (err: ErrorResponseHandler) =>\n dispatch(setErrorSnackMessage(err));\n const onClose = () => closeDeleteModalAndRefresh(false);\n\n const [deleteLoading, invokeDeleteApi] = useApi(onDelSuccess, onDelError);\n\n const onConfirmDelete = () => {\n if (retypePVC !== selectedPVC.name) {\n dispatch(\n setErrorSnackMessage({\n errorMessage: \"PVC name is incorrect\",\n detailedError: \"\",\n }),\n );\n return;\n }\n invokeDeleteApi(\n \"DELETE\",\n `/api/v1/namespaces/${selectedPVC.namespace}/tenants/${selectedPVC.tenant}/pvc/${selectedPVC.name}`,\n );\n };\n\n return (\n }\n isLoading={deleteLoading}\n onConfirm={onConfirmDelete}\n onClose={onClose}\n confirmButtonProps={{\n disabled: retypePVC !== selectedPVC.name || deleteLoading,\n }}\n confirmationContent={\n \n To continue please type {selectedPVC.name} in the box.\n \n ) => {\n setRetypePVC(event.target.value);\n }}\n label=\"\"\n value={retypePVC}\n />\n \n \n }\n />\n );\n};\n\nexport default DeletePVC;\n"],"names":["useApi","onSuccess","onError","isLoading","setIsLoading","useState","callApi","method","url","data","headers","api","invoke","then","res","catch","err","_ref","deleteOpen","selectedPVC","closeDeleteModalAndRefresh","dispatch","useAppDispatch","retypePVC","setRetypePVC","deleteLoading","invokeDeleteApi","onDelSuccess","setErrorSnackMessage","_jsx","ConfirmDialog","title","confirmText","isOpen","titleIcon","ConfirmDeleteIcon","onConfirm","onConfirmDelete","name","concat","namespace","tenant","errorMessage","detailedError","onClose","confirmButtonProps","disabled","confirmationContent","_jsxs","Fragment","children","Grid","item","xs","sx","marginTop","InputBox","id","onChange","event","target","value","label"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/732.33ddca24.chunk.js b/web-app/build/static/js/732.33ddca24.chunk.js deleted file mode 100644 index 9e6f6490e83..00000000000 --- a/web-app/build/static/js/732.33ddca24.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[732],{7403:(e,t,a)=>{a.d(t,{U:()=>s,_:()=>n});const n={label:{color:"#07193E",fontSize:13,alignSelf:"center",whiteSpace:"nowrap","&:not(:first-of-type)":{marginLeft:10}},actionsTray:{display:"flex",justifyContent:"space-between",marginBottom:"1rem",alignItems:"center","& button":{flexGrow:0,marginLeft:8}}},s={modalButtonBar:{marginTop:15,display:"flex",alignItems:"center",justifyContent:"flex-end","& button":{marginRight:10},"& button:last-child":{marginRight:0}},modalFormScrollable:{maxHeight:"calc(100vh - 300px)",overflowY:"auto",paddingTop:10}}},4681:(e,t,a)=>{a.d(t,{A:()=>l});a(5043);var n=a(9923),s=a(579);const l=e=>{let{placeholder:t="",onChange:a,overrideClass:l,value:c,id:o="search-resource",label:r="",sx:i}=e;return(0,s.jsx)(n.cl_,{placeholder:t,className:l||"",id:o,label:r,onChange:e=>{a(e.target.value)},value:c,startIcon:(0,s.jsx)(n.WIv,{}),sx:i})}},732:(e,t,a)=>{a.r(t),a.d(t,{default:()=>f});var n=a(5043),s=a(9923),l=a(9456),c=a(3097),o=a.n(c),r=a(7403),i=a(2961),m=a(4159),d=a(3216),p=a(649),u=a(2237),h=a(4681),x=a(579);const g=(0,u.A)(n.lazy((()=>a.e(729).then(a.bind(a,1729))))),f=()=>{const e=(0,i.jL)(),t=(0,d.Zp)(),{tenantName:a,tenantNamespace:c}=(0,d.g)(),u=(0,l.d4)((e=>e.tenants.loadingTenant)),[f,C]=(0,n.useState)([]),[b,v]=(0,n.useState)(""),[y,w]=(0,n.useState)(!0),[j,S]=(0,n.useState)(null),[A,k]=(0,n.useState)(!1);(0,n.useEffect)((()=>{y&&p.A.invoke("GET","/api/v1/namespaces/".concat(c,"/tenants/").concat(a,"/pvcs")).then((e=>{let t=o()(e,"pvcs",[]);C(t||[]),w(!1)})).catch((t=>{w(!1),e((0,m.C9)(t))}))}),[y,e,a,c]);const L=f.filter((e=>e.name.toLowerCase().includes(b.toLowerCase())));return(0,n.useEffect)((()=>{u&&w(!0)}),[u]),(0,x.jsxs)(n.Fragment,{children:[A&&(0,x.jsx)(g,{deleteOpen:A,selectedPVC:j,closeDeleteModalAndRefresh:e=>{k(!1),w(!0)}}),(0,x.jsxs)(s.azJ,{children:[(0,x.jsx)(s._xt,{separator:!0,sx:{marginBottom:15},children:"Volumes"}),(0,x.jsx)(s.xA9,{item:!0,xs:12,sx:r._.actionsTray,children:(0,x.jsx)(h.A,{value:b,onChange:e=>{v(e)},placeholder:"Search Volumes (PVCs)",id:"search-resource"})}),(0,x.jsx)(s.xA9,{item:!0,xs:12,children:(0,x.jsx)(s.bQt,{itemActions:[{type:"view",onClick:e=>{t("/namespaces/".concat(c||"","/tenants/").concat(a||"","/pvcs/").concat(e.name))}},{type:"delete",onClick:e=>{const t={...e,tenant:a,namespace:c};S(t),k(!0)}}],columns:[{label:"Name",elementKey:"name"},{label:"Status",elementKey:"status",width:120},{label:"Capacity",elementKey:"capacity",width:120},{label:"Storage Class",elementKey:"storageClass"}],isLoading:y,records:L,entityName:"PVCs",idField:"name",customPaperHeight:"calc(100vh - 400px)"})})]})]})}}}]); -//# sourceMappingURL=732.33ddca24.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/732.33ddca24.chunk.js.map b/web-app/build/static/js/732.33ddca24.chunk.js.map deleted file mode 100644 index 5e50057e68e..00000000000 --- a/web-app/build/static/js/732.33ddca24.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/732.33ddca24.chunk.js","mappings":"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","sources":["screens/Console/Common/FormComponents/common/styleLibrary.ts","screens/Console/Common/SearchBox.tsx","screens/Console/Tenants/TenantDetails/VolumesSummary.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\n// This object contains variables that will be used across form components.\n\nexport const actionsTray = {\n label: {\n color: \"#07193E\",\n fontSize: 13,\n alignSelf: \"center\" as const,\n whiteSpace: \"nowrap\" as const,\n \"&:not(:first-of-type)\": {\n marginLeft: 10,\n },\n },\n actionsTray: {\n display: \"flex\" as const,\n justifyContent: \"space-between\" as const,\n marginBottom: \"1rem\",\n alignItems: \"center\",\n \"& button\": {\n flexGrow: 0,\n marginLeft: 8,\n },\n },\n};\n\nexport const modalStyleUtils: any = {\n modalButtonBar: {\n marginTop: 15,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n\n \"& button\": {\n marginRight: 10,\n },\n \"& button:last-child\": {\n marginRight: 0,\n },\n },\n modalFormScrollable: {\n maxHeight: \"calc(100vh - 300px)\",\n overflowY: \"auto\",\n paddingTop: 10,\n },\n};\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { InputBox, SearchIcon } from \"mds\";\nimport { CSSObject } from \"styled-components\";\n\ntype SearchBoxProps = {\n placeholder?: string;\n value: string;\n onChange: (value: string) => void;\n overrideClass?: any;\n id?: string;\n label?: string;\n sx?: CSSObject;\n};\n\nconst SearchBox = ({\n placeholder = \"\",\n onChange,\n overrideClass,\n value,\n id = \"search-resource\",\n label = \"\",\n sx,\n}: SearchBoxProps) => {\n return (\n {\n onChange(e.target.value);\n }}\n value={value}\n startIcon={}\n sx={sx}\n />\n );\n};\n\nexport default SearchBox;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport { Box, DataTable, Grid, SectionTitle } from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport get from \"lodash/get\";\nimport { actionsTray } from \"../../Common/FormComponents/common/styleLibrary\";\nimport { IStoragePVCs } from \"../../Storage/types\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport { IPodListElement } from \"../ListTenants/types\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport { setErrorSnackMessage } from \"../../../../systemSlice\";\nimport { useNavigate, useParams } from \"react-router-dom\";\nimport api from \"../../../../common/api\";\nimport withSuspense from \"../../Common/Components/withSuspense\";\nimport SearchBox from \"../../Common/SearchBox\";\n\nconst DeletePVC = withSuspense(React.lazy(() => import(\"./DeletePVC\")));\n\nconst TenantVolumes = () => {\n const dispatch = useAppDispatch();\n const navigate = useNavigate();\n const { tenantName, tenantNamespace } = useParams();\n\n const loadingTenant = useSelector(\n (state: AppState) => state.tenants.loadingTenant,\n );\n\n const [records, setRecords] = useState([]);\n const [filter, setFilter] = useState(\"\");\n const [loading, setLoading] = useState(true);\n const [selectedPVC, setSelectedPVC] = useState(null);\n const [deleteOpen, setDeleteOpen] = useState(false);\n\n useEffect(() => {\n if (loading) {\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${tenantNamespace}/tenants/${tenantName}/pvcs`,\n )\n .then((res: IStoragePVCs) => {\n let volumes = get(res, \"pvcs\", []);\n setRecords(volumes ? volumes : []);\n setLoading(false);\n })\n .catch((err: ErrorResponseHandler) => {\n setLoading(false);\n dispatch(setErrorSnackMessage(err));\n });\n }\n }, [loading, dispatch, tenantName, tenantNamespace]);\n\n const confirmDeletePVC = (pvcItem: IStoragePVCs) => {\n const delPvc = {\n ...pvcItem,\n tenant: tenantName,\n namespace: tenantNamespace,\n };\n setSelectedPVC(delPvc);\n setDeleteOpen(true);\n };\n\n const filteredRecords: IStoragePVCs[] = records.filter((elementItem) =>\n elementItem.name.toLowerCase().includes(filter.toLowerCase()),\n );\n\n const PVCViewAction = (PVC: IPodListElement) => {\n navigate(\n `/namespaces/${tenantNamespace || \"\"}/tenants/${tenantName || \"\"}/pvcs/${\n PVC.name\n }`,\n );\n return;\n };\n\n const closeDeleteModalAndRefresh = (reloadData: boolean) => {\n setDeleteOpen(false);\n setLoading(true);\n };\n\n useEffect(() => {\n if (loadingTenant) {\n setLoading(true);\n }\n }, [loadingTenant]);\n\n return (\n \n {deleteOpen && (\n \n )}\n \n \n Volumes\n \n \n {\n setFilter(value);\n }}\n placeholder={\"Search Volumes (PVCs)\"}\n id=\"search-resource\"\n />\n \n \n \n \n \n \n );\n};\n\nexport default TenantVolumes;\n"],"names":["actionsTray","label","color","fontSize","alignSelf","whiteSpace","marginLeft","display","justifyContent","marginBottom","alignItems","flexGrow","modalStyleUtils","modalButtonBar","marginTop","marginRight","modalFormScrollable","maxHeight","overflowY","paddingTop","_ref","placeholder","onChange","overrideClass","value","id","sx","_jsx","InputBox","className","e","target","startIcon","SearchIcon","DeletePVC","withSuspense","React","TenantVolumes","dispatch","useAppDispatch","navigate","useNavigate","tenantName","tenantNamespace","useParams","loadingTenant","useSelector","state","tenants","records","setRecords","useState","filter","setFilter","loading","setLoading","selectedPVC","setSelectedPVC","deleteOpen","setDeleteOpen","useEffect","api","invoke","concat","then","res","volumes","get","catch","err","setErrorSnackMessage","filteredRecords","elementItem","name","toLowerCase","includes","_jsxs","Fragment","children","closeDeleteModalAndRefresh","reloadData","Box","SectionTitle","separator","Grid","item","xs","SearchBox","DataTable","itemActions","type","onClick","PVC","pvcItem","delPvc","tenant","namespace","columns","elementKey","width","isLoading","entityName","idField","customPaperHeight"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/799.359bf5c9.chunk.js b/web-app/build/static/js/799.359bf5c9.chunk.js deleted file mode 100644 index ea4c1886311..00000000000 --- a/web-app/build/static/js/799.359bf5c9.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[799],{5448:(e,t,i)=>{i.d(t,{A:()=>a});var n=i(5043),s=i(649);const a=(e,t)=>{const[i,a]=(0,n.useState)(!1);return[i,(i,n,l,o)=>{a(!0),s.A.invoke(i,n,l,o).then((t=>{a(!1),e(t)})).catch((e=>{a(!1),t(e)}))}]}},1799:(e,t,i)=>{i.r(t),i.d(t,{default:()=>C});var n=i(5043),s=i(9923),a=i(4574),l=i(3097),o=i.n(l),r=i(9827),x=i(579);const c=a.Ay.a((e=>{let{theme:t}=e;return{color:o()(t,"linkColor","#2781B0"),fontWeight:600}})),d=e=>{let{icon:t=null,title:i}=e;return(0,x.jsxs)(s.azJ,{sx:{display:"flex",alignItems:"center",justifyContent:"flex-start"},children:[t,(0,x.jsx)("div",{className:"title-text",children:i})]})},p=e=>{let{email:t}=e;return(0,x.jsxs)(n.Fragment,{children:[(0,x.jsx)(r.A,{email:t}),(0,x.jsx)(s.xA9,{item:!0,xs:12,sx:{marginTop:25},children:(0,x.jsxs)(s.azJ,{sx:{padding:"20px","& a":{color:"#2781B0",cursor:"pointer"}},children:["Login to"," ",(0,x.jsx)(c,{href:"https://subnet.min.io",target:"_blank",children:"SUBNET"})," ","to avail support for this MinIO cluster"]})})]})};var m=i(649),h=i(3216),f=i(2961),g=i(4159),u=i(9161),j=i(8661),b=i(5448);const y=e=>{let{open:t,closeModal:i,onSet:a}=e;const l=(0,f.jL)(),[o,r]=(0,n.useState)(""),[c,d]=(0,n.useState)(""),[p,m]=(0,n.useState)(""),[h,u]=(0,n.useState)(""),[y,w]=(0,b.A)((e=>{e.mfa_token?m(e.mfa_token):e.access_token?w("GET","/api/v1/subnet/apikey?token=".concat(e.access_token)):(a(e.apiKey),i())}),(e=>{l((0,g.C9)(e)),i(),r(""),d(""),m(""),u("")})),z=()=>(0,x.jsxs)(s.Hbc,{withBorders:!1,containerPadding:!1,children:[(0,x.jsx)(s.cl_,{id:"subnet-email",name:"subnet-email",onChange:e=>r(e.target.value),label:"Email",value:o,overlayIcon:(0,x.jsx)(s.c2u,{})}),(0,x.jsx)(s.cl_,{id:"subnet-password",name:"subnet-password",onChange:e=>d(e.target.value),label:"Password",type:"password",value:c})]}),S=()=>(0,x.jsx)(s.azJ,{sx:{display:"flex"},children:(0,x.jsxs)(s.azJ,{sx:{display:"flex",flexFlow:"column",flex:"2"},children:[(0,x.jsx)(s.azJ,{sx:{fontSize:14,display:"flex",flexFlow:"column",marginTop:20,marginBottom:20},children:"Two-Factor Authentication"}),(0,x.jsx)(s.azJ,{children:"Please enter the 6-digit verification code that was sent to your email address. This code will be valid for 5 minutes."}),(0,x.jsx)(s.azJ,{sx:{flex:"1",marginTop:"30px"},children:(0,x.jsx)(s.cl_,{overlayIcon:(0,x.jsx)(s.XAi,{}),id:"subnet-otp",name:"subnet-otp",onChange:e=>u(e.target.value),placeholder:"",label:"",value:h})})]})});return t?(0,x.jsx)(j.A,{title:"Get API Key from SUBNET",confirmText:"Get API Key",isOpen:t,titleIcon:(0,x.jsx)(s.mo0,{}),isLoading:y,cancelText:"Cancel",onConfirm:()=>{""!==p?w("POST","/api/v1/subnet/login/mfa",{username:o,otp:h,mfa_token:p}):w("POST","/api/v1/subnet/login",{username:o,password:c})},onClose:i,confirmButtonProps:{variant:"callAction",disabled:!o||!c||y,hidden:!0},cancelButtonProps:{disabled:y},confirmationContent:""===p?z():S()}):null},w=a.Ay.a((e=>{let{theme:t}=e;return{color:o()(t,"linkColor","#2781B0"),fontWeight:600}})),z=e=>{let{icon:t,description:i}=e;return(0,x.jsxs)(s.azJ,{sx:{display:"flex","& .min-icon":{marginRight:"10px",height:"23px",width:"23px",marginBottom:"10px"}},children:[t," ",(0,x.jsx)(s.azJ,{className:"muted",sx:{fontSize:"14px",fontStyle:"italic"},children:i})]})},S=e=>{let{hasMargin:t=!0}=e;return(0,x.jsxs)(s.azJ,{withBorders:!0,sx:{flex:1,display:"flex",flexFlow:"column",padding:"20px",marginLeft:t?"30px":"",["@media (max-width: ".concat(s.nmC.sm,"px)")]:{marginLeft:0,marginTop:0},["@media (max-width: ".concat(s.nmC.md,"px)")]:{marginLeft:0,marginTop:t?"30px":""}},children:[(0,x.jsxs)(s.azJ,{sx:{fontSize:"16px",fontWeight:600,display:"flex",alignItems:"center",marginBottom:"16px","& .min-icon":{height:"21px",width:"21px",marginRight:"15px"}},children:[(0,x.jsx)(s.nag,{}),(0,x.jsx)("div",{children:"Why should I register?"})]}),(0,x.jsx)(s.azJ,{sx:{fontSize:"14px",marginBottom:"15px"},children:"Registering this cluster with the MinIO Subscription Network (SUBNET) provides the following benefits in addition to the commercial license and SLA backed support."}),(0,x.jsxs)(s.azJ,{sx:{display:"flex",flexFlow:"column"},children:[(0,x.jsx)(z,{icon:(0,x.jsx)(s.fJb,{}),description:"Call Home Monitoring"}),(0,x.jsx)(z,{icon:(0,x.jsx)(s.uFi,{}),description:"Health Diagnostics"}),(0,x.jsx)(z,{icon:(0,x.jsx)(s.s5I,{}),description:"Performance Analysis"}),(0,x.jsx)(z,{icon:(0,x.jsx)(s.JHI,{}),description:(0,x.jsx)(w,{href:"https://min.io/signup?ref=op",target:"_blank",children:"More Features"})})]})]})},k=e=>{let{registerEndpoint:t}=e;const i=(0,h.Zp)(),[a,l]=(0,n.useState)(!1),[o,r]=(0,n.useState)(""),[c,p]=(0,n.useState)(!1),[j,b]=(0,n.useState)(!1),w=(0,f.jL)(),z=(0,n.useCallback)((()=>{if(c)return;p(!0);let e={apiKey:o};m.A.invoke("POST",t,e).then((e=>{p(!1),e&&e.registered&&i(u.zZ.LICENSE)})).catch((e=>{w((0,g.C9)(e)),p(!1),k()}))}),[o,w,c,t,i]);(0,n.useEffect)((()=>{j&&z()}),[j,z]);const k=()=>{r(""),b(!1)};return(0,x.jsxs)(n.Fragment,{children:[(0,x.jsx)(s.azJ,{sx:{"& .title-text":{marginLeft:"27px",fontWeight:600}},children:(0,x.jsx)(d,{icon:(0,x.jsx)(s.ESy,{}),title:"Register cluster with API key"})}),(0,x.jsxs)(s.azJ,{sx:{display:"flex",flexFlow:"row",["@media (max-width: ".concat(s.nmC.sm,"px)")]:{flexFlow:"column"}},children:[(0,x.jsxs)(s.azJ,{sx:{display:"flex",flexFlow:"column",flex:"2"},children:[(0,x.jsx)(s.azJ,{sx:{fontSize:16,display:"flex",flexFlow:"column",marginTop:30,marginBottom:30},children:"Use your MinIO Subscription Network API Key to register this cluster."}),(0,x.jsxs)(s.azJ,{sx:{flex:"1"},children:[(0,x.jsx)(s.cl_,{id:"api-key",name:"api-key",onChange:e=>r(e.target.value),label:"API Key",value:o,sx:{minWidth:"75px",marginBottom:15}}),(0,x.jsxs)(s.azJ,{sx:{display:"flex",alignItems:"center",justifyContent:"flex-end",gap:10},children:[(0,x.jsx)(s.$nd,{id:"get-from-subnet",variant:"regular",disabled:c,onClick:()=>l(!0),label:"Get from SUBNET"}),(0,x.jsx)(s.$nd,{id:"register",type:"submit",variant:"callAction",disabled:c||0===o.trim().length,onClick:()=>z(),label:"Register"}),(0,x.jsx)(y,{open:a,closeModal:()=>l(!1),onSet:e=>{r(e),b(!0)}})]})]})]}),(0,x.jsx)(S,{})]})]})};var v=i(4770);const C=()=>{const[e,t]=(0,n.useState)(!1),[i,a]=(0,n.useState)("simple-tab-0"),l=(0,n.useCallback)((()=>{m.A.invoke("GET","/api/v1/subnet/apikey/info").then((e=>{t(!0)})).catch((e=>{t(!1)}))}),[]);(0,n.useEffect)((()=>{l()}),[l]);const o=(0,x.jsx)(n.Fragment,{children:(0,x.jsx)(s.azJ,{withBorders:!0,sx:{display:"flex",flexFlow:"column",padding:"43px"},children:e?(0,x.jsx)(p,{email:"Operator"}):(0,x.jsx)(k,{registerEndpoint:"/api/v1/subnet/apikey/register"})})});return(0,x.jsxs)(n.Fragment,{children:[(0,x.jsx)(v.A,{label:"Register to MinIO Subscription Network"}),(0,x.jsx)(s.Mxu,{children:(0,x.jsx)(s.tUM,{currentTabOrPath:i,onTabClick:e=>{a(e)},options:[{tabConfig:{id:"simple-tab-0",label:"API Key"},content:o}],horizontal:!0})})]})}},9827:(e,t,i)=>{i.d(t,{A:()=>a});i(5043);var n=i(9923),s=i(579);const a=e=>{let{email:t=""}=e;return(0,s.jsxs)(n.azJ,{sx:{height:"67px",color:"#ffffff",display:"flex",position:"relative",top:"-30px",left:"-32px",width:"calc(100% + 64px)",alignItems:"center",justifyContent:"space-between",backgroundColor:"#2781B0",padding:"0 25px 0 25px","& .registered-box, .reg-badge-box":{display:"flex",alignItems:"center",justifyContent:"flex-start"},"& .reg-badge-box":{marginLeft:"20px","& .min-icon":{fill:"#2781B0"}}},children:[(0,s.jsxs)(n.azJ,{className:"registered-box",children:[(0,s.jsx)(n.azJ,{sx:{fontSize:"16px",fontWeight:400},children:"Register status:"}),(0,s.jsxs)(n.azJ,{className:"reg-badge-box",children:[(0,s.jsx)(n.M3H,{}),(0,s.jsx)(n.azJ,{sx:{fontWeight:600},children:"Registered"})]})]}),(0,s.jsxs)(n.azJ,{className:"registered-acc-box",sx:{alignItems:"center",justifyContent:"flex-start",display:"flex",["@media (max-width: ".concat(n.nmC.sm,"px)")]:{display:"none"}},children:[(0,s.jsx)(n.azJ,{sx:{fontSize:"16px",fontWeight:400},children:"Registered to:"}),(0,s.jsx)(n.azJ,{sx:{marginLeft:"8px",fontWeight:600},children:t})]})]})}}}]); -//# sourceMappingURL=799.359bf5c9.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/799.359bf5c9.chunk.js.map b/web-app/build/static/js/799.359bf5c9.chunk.js.map deleted file mode 100644 index 7cca7b9105b..00000000000 --- a/web-app/build/static/js/799.359bf5c9.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/799.359bf5c9.chunk.js","mappings":"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","sources":["screens/Console/Common/Hooks/useApi.tsx","screens/Console/Support/utils.tsx","screens/Console/Support/GetApiKeyModal.tsx","screens/Console/Support/RegisterHelpBox.tsx","screens/Console/Support/ApiKeyRegister.tsx","screens/Console/Support/RegisterOperator.tsx","screens/Console/Support/RegistrationStatusBanner.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport api from \"../../../../common/api\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\n\ntype NoReturnFunction = (param?: any) => void;\ntype ApiMethodToInvoke = (method: string, url: string, data?: any) => void;\ntype IsApiInProgress = boolean;\n\nconst useApi = (\n onSuccess: NoReturnFunction,\n onError: NoReturnFunction,\n): [IsApiInProgress, ApiMethodToInvoke] => {\n const [isLoading, setIsLoading] = useState(false);\n\n const callApi = (method: string, url: string, data?: any, headers?: any) => {\n setIsLoading(true);\n api\n .invoke(method, url, data, headers)\n .then((res: any) => {\n setIsLoading(false);\n onSuccess(res);\n })\n .catch((err: ErrorResponseHandler) => {\n setIsLoading(false);\n onError(err);\n });\n };\n\n return [isLoading, callApi];\n};\n\nexport default useApi;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public APIKey as published by\n// the Free Software Foundation, either version 3 of the APIKey, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public APIKey for more details.\n//\n// You should have received a copy of the GNU Affero General Public APIKey\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport { Box, Grid } from \"mds\";\nimport styled from \"styled-components\";\nimport get from \"lodash/get\";\nimport RegistrationStatusBanner from \"./RegistrationStatusBanner\";\n\nconst LinkElement = styled.a(({ theme }) => ({\n color: get(theme, \"linkColor\", \"#2781B0\"),\n fontWeight: 600,\n}));\n\nexport const FormTitle = ({\n icon = null,\n title,\n}: {\n icon?: any;\n title: any;\n}) => {\n return (\n \n {icon}\n
{title}
\n \n );\n};\n\nexport const ClusterRegistered = ({ email }: { email: string }) => {\n return (\n \n \n \n \n Login to{\" \"}\n \n SUBNET\n {\" \"}\n to avail support for this MinIO cluster\n \n \n \n );\n};\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport { Box, FormLayout, InfoIcon, InputBox, UsersIcon, LockIcon } from \"mds\";\nimport { ErrorResponseHandler } from \"../../../common/types\";\nimport { useAppDispatch } from \"../../../store\";\nimport { setErrorSnackMessage } from \"../../../systemSlice\";\nimport ConfirmDialog from \"../Common/ModalWrapper/ConfirmDialog\";\nimport useApi from \"../Common/Hooks/useApi\";\n\ninterface IGetApiKeyModalProps {\n open: boolean;\n closeModal: () => void;\n onSet: (apiKey: string) => void;\n}\n\nconst GetApiKeyModal = ({ open, closeModal, onSet }: IGetApiKeyModalProps) => {\n const dispatch = useAppDispatch();\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const [mfaToken, setMfaToken] = useState(\"\");\n const [subnetOTP, setSubnetOTP] = useState(\"\");\n\n const onError = (err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n closeModal();\n setEmail(\"\");\n setPassword(\"\");\n setMfaToken(\"\");\n setSubnetOTP(\"\");\n };\n\n const onSuccess = (res: any) => {\n if (res.mfa_token) {\n setMfaToken(res.mfa_token);\n } else if (res.access_token) {\n invokeApi(\"GET\", `/api/v1/subnet/apikey?token=${res.access_token}`);\n } else {\n onSet(res.apiKey);\n closeModal();\n }\n };\n\n const [isLoading, invokeApi] = useApi(onSuccess, onError);\n\n const onConfirm = () => {\n if (mfaToken !== \"\") {\n invokeApi(\"POST\", \"/api/v1/subnet/login/mfa\", {\n username: email,\n otp: subnetOTP,\n mfa_token: mfaToken,\n });\n } else {\n invokeApi(\"POST\", \"/api/v1/subnet/login\", { username: email, password });\n }\n };\n\n const getDialogContent = () => {\n if (mfaToken === \"\") {\n return getCredentialsDialog();\n }\n return getMFADialog();\n };\n\n const getCredentialsDialog = () => {\n return (\n \n ) =>\n setEmail(event.target.value)\n }\n label=\"Email\"\n value={email}\n overlayIcon={}\n />\n ) =>\n setPassword(event.target.value)\n }\n label=\"Password\"\n type={\"password\"}\n value={password}\n />\n \n );\n };\n\n const getMFADialog = () => {\n return (\n \n \n \n Two-Factor Authentication\n \n\n \n Please enter the 6-digit verification code that was sent to your\n email address. This code will be valid for 5 minutes.\n \n\n \n }\n id=\"subnet-otp\"\n name=\"subnet-otp\"\n onChange={(event: React.ChangeEvent) =>\n setSubnetOTP(event.target.value)\n }\n placeholder=\"\"\n label=\"\"\n value={subnetOTP}\n />\n \n \n \n );\n };\n\n return open ? (\n }\n isLoading={isLoading}\n cancelText={\"Cancel\"}\n onConfirm={onConfirm}\n onClose={closeModal}\n confirmButtonProps={{\n variant: \"callAction\",\n disabled: !email || !password || isLoading,\n hidden: true,\n }}\n cancelButtonProps={{\n disabled: isLoading,\n }}\n confirmationContent={getDialogContent()}\n />\n ) : null;\n};\n\nexport default GetApiKeyModal;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport {\n Box,\n breakPoints,\n CallHomeFeatureIcon,\n DiagnosticsFeatureIcon,\n ExtraFeaturesIcon,\n HelpIconFilled,\n PerformanceFeatureIcon,\n} from \"mds\";\nimport styled from \"styled-components\";\nimport get from \"lodash/get\";\n\nconst LinkElement = styled.a(({ theme }) => ({\n color: get(theme, \"linkColor\", \"#2781B0\"),\n fontWeight: 600,\n}));\n\nconst FeatureItem = ({\n icon,\n description,\n}: {\n icon: any;\n description: string | React.ReactNode;\n}) => {\n return (\n \n {icon}{\" \"}\n \n {description}\n \n \n );\n};\nconst RegisterHelpBox = ({ hasMargin = true }: { hasMargin?: boolean }) => {\n return (\n \n \n \n
Why should I register?
\n \n \n Registering this cluster with the MinIO Subscription Network (SUBNET)\n provides the following benefits in addition to the commercial license\n and SLA backed support.\n \n\n \n }\n description={`Call Home Monitoring`}\n />\n }\n description={`Health Diagnostics`}\n />\n }\n description={`Performance Analysis`}\n />\n }\n description={\n \n More Features\n \n }\n />\n \n \n );\n};\n\nexport default RegisterHelpBox;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport {\n Button,\n OnlineRegistrationIcon,\n Box,\n breakPoints,\n InputBox,\n} from \"mds\";\nimport { useNavigate } from \"react-router-dom\";\nimport { FormTitle } from \"./utils\";\nimport { SubnetLoginRequest, SubnetLoginResponse } from \"../License/types\";\nimport { useAppDispatch } from \"../../../store\";\nimport { setErrorSnackMessage } from \"../../../systemSlice\";\nimport { ErrorResponseHandler } from \"../../../common/types\";\nimport { IAM_PAGES } from \"../../../common/SecureComponent/permissions\";\nimport api from \"../../../common/api\";\nimport GetApiKeyModal from \"./GetApiKeyModal\";\nimport RegisterHelpBox from \"./RegisterHelpBox\";\n\ninterface IApiKeyRegister {\n registerEndpoint: string;\n}\n\nconst ApiKeyRegister = ({ registerEndpoint }: IApiKeyRegister) => {\n const navigate = useNavigate();\n\n const [showApiKeyModal, setShowApiKeyModal] = useState(false);\n const [apiKey, setApiKey] = useState(\"\");\n const [loading, setLoading] = useState(false);\n const [fromModal, setFromModal] = useState(false);\n const dispatch = useAppDispatch();\n\n const onRegister = useCallback(() => {\n if (loading) {\n return;\n }\n setLoading(true);\n let request: SubnetLoginRequest = { apiKey };\n api\n .invoke(\"POST\", registerEndpoint, request)\n .then((resp: SubnetLoginResponse) => {\n setLoading(false);\n if (resp && resp.registered) {\n navigate(IAM_PAGES.LICENSE);\n }\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n setLoading(false);\n reset();\n });\n }, [apiKey, dispatch, loading, registerEndpoint, navigate]);\n\n useEffect(() => {\n if (fromModal) {\n onRegister();\n }\n }, [fromModal, onRegister]);\n\n const reset = () => {\n setApiKey(\"\");\n setFromModal(false);\n };\n\n return (\n \n \n }\n title={`Register cluster with API key`}\n />\n \n \n \n \n Use your MinIO Subscription Network API Key to register this\n cluster.\n \n \n ) =>\n setApiKey(event.target.value)\n }\n label=\"API Key\"\n value={apiKey}\n sx={{\n minWidth: \"75px\",\n marginBottom: 15,\n }}\n />\n\n \n setShowApiKeyModal(true)}\n label={\"Get from SUBNET\"}\n />\n onRegister()}\n label={\"Register\"}\n />\n setShowApiKeyModal(false)}\n onSet={(value) => {\n setApiKey(value);\n setFromModal(true);\n }}\n />\n \n \n \n \n \n \n );\n};\n\nexport default ApiKeyRegister;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public APIKey as published by\n// the Free Software Foundation, either version 3 of the APIKey, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public APIKey for more details.\n//\n// You should have received a copy of the GNU Affero General Public APIKey\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { Box, PageLayout, Tabs } from \"mds\";\nimport { ErrorResponseHandler } from \"../../../common/types\";\nimport { ClusterRegistered } from \"./utils\";\nimport api from \"../../../common/api\";\nimport ApiKeyRegister from \"./ApiKeyRegister\";\nimport PageHeaderWrapper from \"../Common/PageHeaderWrapper/PageHeaderWrapper\";\n\nconst RegisterOperator = () => {\n const [apiKeyRegistered, setAPIKeyRegistered] = useState(false);\n const [curTab, setCurTab] = useState(\"simple-tab-0\");\n\n const fetchAPIKeyInfo = useCallback(() => {\n api\n .invoke(\"GET\", `/api/v1/subnet/apikey/info`)\n .then((res: any) => {\n setAPIKeyRegistered(true);\n })\n .catch((err: ErrorResponseHandler) => {\n setAPIKeyRegistered(false);\n });\n }, []);\n\n useEffect(() => {\n fetchAPIKeyInfo();\n }, [fetchAPIKeyInfo]);\n\n const apiKeyRegistration = (\n \n \n {apiKeyRegistered ? (\n \n ) : (\n \n )}\n \n \n );\n\n return (\n \n \n\n \n {\n setCurTab(nvTab);\n }}\n options={[\n {\n tabConfig: { id: \"simple-tab-0\", label: \"API Key\" },\n content: apiKeyRegistration,\n },\n ]}\n horizontal\n />\n \n \n );\n};\n\nexport default RegisterOperator;\n","import React from \"react\";\nimport { VerifiedIcon, Box, breakPoints } from \"mds\";\n\nconst RegistrationStatusBanner = ({ email = \"\" }: { email?: string }) => {\n return (\n \n \n Register status:\n \n \n \n Registered\n \n \n \n\n \n Registered to:\n {email}\n \n \n );\n};\nexport default RegistrationStatusBanner;\n"],"names":["useApi","onSuccess","onError","isLoading","setIsLoading","useState","callApi","method","url","data","headers","api","invoke","then","res","catch","err","LinkElement","styled","a","_ref","theme","color","get","fontWeight","FormTitle","_ref2","icon","title","_jsxs","Box","sx","display","alignItems","justifyContent","children","_jsx","className","ClusterRegistered","_ref3","email","Fragment","RegistrationStatusBanner","Grid","item","xs","marginTop","padding","cursor","href","target","open","closeModal","onSet","dispatch","useAppDispatch","setEmail","password","setPassword","mfaToken","setMfaToken","subnetOTP","setSubnetOTP","invokeApi","mfa_token","access_token","concat","apiKey","setErrorSnackMessage","getCredentialsDialog","FormLayout","withBorders","containerPadding","InputBox","id","name","onChange","event","value","label","overlayIcon","UsersIcon","type","getMFADialog","flexFlow","flex","fontSize","marginBottom","LockIcon","placeholder","ConfirmDialog","confirmText","isOpen","titleIcon","InfoIcon","cancelText","onConfirm","username","otp","onClose","confirmButtonProps","variant","disabled","hidden","cancelButtonProps","confirmationContent","FeatureItem","description","marginRight","height","width","fontStyle","hasMargin","marginLeft","breakPoints","sm","md","HelpIconFilled","CallHomeFeatureIcon","DiagnosticsFeatureIcon","PerformanceFeatureIcon","ExtraFeaturesIcon","registerEndpoint","navigate","useNavigate","showApiKeyModal","setShowApiKeyModal","setApiKey","loading","setLoading","fromModal","setFromModal","onRegister","useCallback","request","resp","registered","IAM_PAGES","LICENSE","reset","useEffect","OnlineRegistrationIcon","minWidth","gap","Button","onClick","trim","length","GetApiKeyModal","RegisterHelpBox","RegisterOperator","apiKeyRegistered","setAPIKeyRegistered","curTab","setCurTab","fetchAPIKeyInfo","apiKeyRegistration","ApiKeyRegister","PageHeaderWrapper","PageLayout","Tabs","currentTabOrPath","onTabClick","nvTab","options","tabConfig","content","horizontal","position","top","left","backgroundColor","fill","VerifiedIcon"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/829.67cb6474.chunk.js b/web-app/build/static/js/829.67cb6474.chunk.js deleted file mode 100644 index 54e6bb60f28..00000000000 --- a/web-app/build/static/js/829.67cb6474.chunk.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! For license information please see 829.67cb6474.chunk.js.LICENSE.txt */ -(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[829],{7821:t=>{var e={px:{px:1,cm:96/2.54,mm:96/25.4,in:96,pt:96/72,pc:16},cm:{px:2.54/96,cm:1,mm:.1,in:2.54,pt:2.54/72,pc:2.54/6},mm:{px:25.4/96,cm:10,mm:1,in:25.4,pt:25.4/72,pc:25.4/6},in:{px:1/96,cm:1/2.54,mm:1/25.4,in:1,pt:1/72,pc:1/6},pt:{px:.75,cm:72/2.54,mm:72/25.4,in:72,pt:1,pc:12},pc:{px:6/96,cm:6/2.54,mm:6/25.4,in:6,pt:6/72,pc:1},deg:{deg:1,grad:.9,rad:180/Math.PI,turn:360},grad:{deg:400/360,grad:1,rad:200/Math.PI,turn:400},rad:{deg:Math.PI/180,grad:Math.PI/200,rad:1,turn:2*Math.PI},turn:{deg:1/360,grad:1/400,rad:.5/Math.PI,turn:1},s:{s:1,ms:.001},ms:{s:1e3,ms:1},Hz:{Hz:1,kHz:1e3},kHz:{Hz:.001,kHz:1},dpi:{dpi:1,dpcm:1/2.54,dppx:1/96},dpcm:{dpi:2.54,dpcm:1,dppx:2.54/96},dppx:{dpi:96,dpcm:96/2.54,dppx:1}};t.exports=function(t,n,r,i){if(!e.hasOwnProperty(r))throw new Error("Cannot convert to "+r);if(!e[r].hasOwnProperty(n))throw new Error("Cannot convert from "+n+" to "+r);var o=e[r][n]*t;return!1!==i?(i=Math.pow(10,parseInt(i)||5),Math.round(o*i)/i):o}},8210:function(t,e,n){var r;!function(i){"use strict";var o,a=1e9,c={precision:20,rounding:4,toExpNeg:-7,toExpPos:21,LN10:"2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286"},u=!0,s="[DecimalError] ",l=s+"Invalid argument: ",f=s+"Exponent out of range: ",p=Math.floor,h=Math.pow,d=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,y=1e7,v=7,g=9007199254740991,m=p(g/v),b={};function x(t,e){var n,r,i,o,a,c,s,l,f=t.constructor,p=f.precision;if(!t.s||!e.s)return e.s||(e=new f(t)),u?P(e,p):e;if(s=t.d,l=e.d,a=t.e,i=e.e,s=s.slice(),o=a-i){for(o<0?(r=s,o=-o,c=l.length):(r=l,i=a,c=s.length),o>(c=(a=Math.ceil(p/v))>c?a+1:c+1)&&(o=c,r.length=1),r.reverse();o--;)r.push(0);r.reverse()}for((c=s.length)-(o=l.length)<0&&(o=c,r=l,l=s,s=r),n=0;o;)n=(s[--o]=s[o]+l[o]+n)/y|0,s[o]%=y;for(n&&(s.unshift(n),++i),c=s.length;0==s[--c];)s.pop();return e.d=s,e.e=i,u?P(e,p):e}function w(t,e,n){if(t!==~~t||tn)throw Error(l+t)}function O(t){var e,n,r,i=t.length-1,o="",a=t[0];if(i>0){for(o+=a,e=1;et.e^o.s<0?1:-1;for(e=0,n=(r=o.d.length)<(i=t.d.length)?r:i;et.d[e]^o.s<0?1:-1;return r===i?0:r>i^o.s<0?1:-1},b.decimalPlaces=b.dp=function(){var t=this,e=t.d.length-1,n=(e-t.e)*v;if(e=t.d[e])for(;e%10==0;e/=10)n--;return n<0?0:n},b.dividedBy=b.div=function(t){return S(this,new this.constructor(t))},b.dividedToIntegerBy=b.idiv=function(t){var e=this.constructor;return P(S(this,new e(t),0,1),e.precision)},b.equals=b.eq=function(t){return!this.cmp(t)},b.exponent=function(){return _(this)},b.greaterThan=b.gt=function(t){return this.cmp(t)>0},b.greaterThanOrEqualTo=b.gte=function(t){return this.cmp(t)>=0},b.isInteger=b.isint=function(){return this.e>this.d.length-2},b.isNegative=b.isneg=function(){return this.s<0},b.isPositive=b.ispos=function(){return this.s>0},b.isZero=function(){return 0===this.s},b.lessThan=b.lt=function(t){return this.cmp(t)<0},b.lessThanOrEqualTo=b.lte=function(t){return this.cmp(t)<1},b.logarithm=b.log=function(t){var e,n=this,r=n.constructor,i=r.precision,a=i+5;if(void 0===t)t=new r(10);else if((t=new r(t)).s<1||t.eq(o))throw Error(s+"NaN");if(n.s<1)throw Error(s+(n.s?"NaN":"-Infinity"));return n.eq(o)?new r(0):(u=!1,e=S(k(n,a),k(t,a),a),u=!0,P(e,i))},b.minus=b.sub=function(t){var e=this;return t=new e.constructor(t),e.s==t.s?T(e,t):x(e,(t.s=-t.s,t))},b.modulo=b.mod=function(t){var e,n=this,r=n.constructor,i=r.precision;if(!(t=new r(t)).s)throw Error(s+"NaN");return n.s?(u=!1,e=S(n,t,0,1).times(t),u=!0,n.minus(e)):P(new r(n),i)},b.naturalExponential=b.exp=function(){return E(this)},b.naturalLogarithm=b.ln=function(){return k(this)},b.negated=b.neg=function(){var t=new this.constructor(this);return t.s=-t.s||0,t},b.plus=b.add=function(t){var e=this;return t=new e.constructor(t),e.s==t.s?x(e,t):T(e,(t.s=-t.s,t))},b.precision=b.sd=function(t){var e,n,r,i=this;if(void 0!==t&&t!==!!t&&1!==t&&0!==t)throw Error(l+t);if(e=_(i)+1,n=(r=i.d.length-1)*v+1,r=i.d[r]){for(;r%10==0;r/=10)n--;for(r=i.d[0];r>=10;r/=10)n++}return t&&e>n?e:n},b.squareRoot=b.sqrt=function(){var t,e,n,r,i,o,a,c=this,l=c.constructor;if(c.s<1){if(!c.s)return new l(0);throw Error(s+"NaN")}for(t=_(c),u=!1,0==(i=Math.sqrt(+c))||i==1/0?(((e=O(c.d)).length+t)%2==0&&(e+="0"),i=Math.sqrt(e),t=p((t+1)/2)-(t<0||t%2),r=new l(e=i==1/0?"5e"+t:(e=i.toExponential()).slice(0,e.indexOf("e")+1)+t)):r=new l(i.toString()),i=a=(n=l.precision)+3;;)if(r=(o=r).plus(S(c,o,a+2)).times(.5),O(o.d).slice(0,a)===(e=O(r.d)).slice(0,a)){if(e=e.slice(a-3,a+1),i==a&&"4999"==e){if(P(o,n+1,0),o.times(o).eq(c)){r=o;break}}else if("9999"!=e)break;a+=4}return u=!0,P(r,n)},b.times=b.mul=function(t){var e,n,r,i,o,a,c,s,l,f=this,p=f.constructor,h=f.d,d=(t=new p(t)).d;if(!f.s||!t.s)return new p(0);for(t.s*=f.s,n=f.e+t.e,(s=h.length)<(l=d.length)&&(o=h,h=d,d=o,a=s,s=l,l=a),o=[],r=a=s+l;r--;)o.push(0);for(r=l;--r>=0;){for(e=0,i=s+r;i>r;)c=o[i]+d[r]*h[i-r-1]+e,o[i--]=c%y|0,e=c/y|0;o[i]=(o[i]+e)%y|0}for(;!o[--a];)o.pop();return e?++n:o.shift(),t.d=o,t.e=n,u?P(t,p.precision):t},b.toDecimalPlaces=b.todp=function(t,e){var n=this,r=n.constructor;return n=new r(n),void 0===t?n:(w(t,0,a),void 0===e?e=r.rounding:w(e,0,8),P(n,t+_(n)+1,e))},b.toExponential=function(t,e){var n,r=this,i=r.constructor;return void 0===t?n=C(r,!0):(w(t,0,a),void 0===e?e=i.rounding:w(e,0,8),n=C(r=P(new i(r),t+1,e),!0,t+1)),n},b.toFixed=function(t,e){var n,r,i=this,o=i.constructor;return void 0===t?C(i):(w(t,0,a),void 0===e?e=o.rounding:w(e,0,8),n=C((r=P(new o(i),t+_(i)+1,e)).abs(),!1,t+_(r)+1),i.isneg()&&!i.isZero()?"-"+n:n)},b.toInteger=b.toint=function(){var t=this,e=t.constructor;return P(new e(t),_(t)+1,e.rounding)},b.toNumber=function(){return+this},b.toPower=b.pow=function(t){var e,n,r,i,a,c,l=this,f=l.constructor,h=+(t=new f(t));if(!t.s)return new f(o);if(!(l=new f(l)).s){if(t.s<1)throw Error(s+"Infinity");return l}if(l.eq(o))return l;if(r=f.precision,t.eq(o))return P(l,r);if(c=(e=t.e)>=(n=t.d.length-1),a=l.s,c){if((n=h<0?-h:h)<=g){for(i=new f(o),e=Math.ceil(r/v+4),u=!1;n%2&&I((i=i.times(l)).d,e),0!==(n=p(n/2));)I((l=l.times(l)).d,e);return u=!0,t.s<0?new f(o).div(i):P(i,r)}}else if(a<0)throw Error(s+"NaN");return a=a<0&&1&t.d[Math.max(e,n)]?-1:1,l.s=1,u=!1,i=t.times(k(l,r+12)),u=!0,(i=E(i)).s=a,i},b.toPrecision=function(t,e){var n,r,i=this,o=i.constructor;return void 0===t?r=C(i,(n=_(i))<=o.toExpNeg||n>=o.toExpPos):(w(t,1,a),void 0===e?e=o.rounding:w(e,0,8),r=C(i=P(new o(i),t,e),t<=(n=_(i))||n<=o.toExpNeg,t)),r},b.toSignificantDigits=b.tosd=function(t,e){var n=this.constructor;return void 0===t?(t=n.precision,e=n.rounding):(w(t,1,a),void 0===e?e=n.rounding:w(e,0,8)),P(new n(this),t,e)},b.toString=b.valueOf=b.val=b.toJSON=function(){var t=this,e=_(t),n=t.constructor;return C(t,e<=n.toExpNeg||e>=n.toExpPos)};var S=function(){function t(t,e){var n,r=0,i=t.length;for(t=t.slice();i--;)n=t[i]*e+r,t[i]=n%y|0,r=n/y|0;return r&&t.unshift(r),t}function e(t,e,n,r){var i,o;if(n!=r)o=n>r?1:-1;else for(i=o=0;ie[i]?1:-1;break}return o}function n(t,e,n){for(var r=0;n--;)t[n]-=r,r=t[n]1;)t.shift()}return function(r,i,o,a){var c,u,l,f,p,h,d,g,m,b,x,w,O,S,E,A,j,k,M=r.constructor,T=r.s==i.s?1:-1,C=r.d,I=i.d;if(!r.s)return new M(r);if(!i.s)throw Error(s+"Division by zero");for(u=r.e-i.e,j=I.length,E=C.length,g=(d=new M(T)).d=[],l=0;I[l]==(C[l]||0);)++l;if(I[l]>(C[l]||0)&&--u,(w=null==o?o=M.precision:a?o+(_(r)-_(i))+1:o)<0)return new M(0);if(w=w/v+2|0,l=0,1==j)for(f=0,I=I[0],w++;(l1&&(I=t(I,f),C=t(C,f),j=I.length,E=C.length),S=j,b=(m=C.slice(0,j)).length;b=y/2&&++A;do{f=0,(c=e(I,m,j,b))<0?(x=m[0],j!=b&&(x=x*y+(m[1]||0)),(f=x/A|0)>1?(f>=y&&(f=y-1),1==(c=e(p=t(I,f),m,h=p.length,b=m.length))&&(f--,n(p,j16)throw Error(f+_(t));if(!t.s)return new p(o);for(null==e?(u=!1,c=d):c=e,a=new p(.03125);t.abs().gte(.1);)t=t.times(a),l+=5;for(c+=Math.log(h(2,l))/Math.LN10*2+5|0,n=r=i=new p(o),p.precision=c;;){if(r=P(r.times(t),c),n=n.times(++s),O((a=i.plus(S(r,n,c))).d).slice(0,c)===O(i.d).slice(0,c)){for(;l--;)i=P(i.times(i),c);return p.precision=d,null==e?(u=!0,P(i,d)):i}i=a}}function _(t){for(var e=t.e*v,n=t.d[0];n>=10;n/=10)e++;return e}function A(t,e,n){if(e>t.LN10.sd())throw u=!0,n&&(t.precision=n),Error(s+"LN10 precision limit exceeded");return P(new t(t.LN10),e)}function j(t){for(var e="";t--;)e+="0";return e}function k(t,e){var n,r,i,a,c,l,f,p,h,d=1,y=t,v=y.d,g=y.constructor,m=g.precision;if(y.s<1)throw Error(s+(y.s?"NaN":"-Infinity"));if(y.eq(o))return new g(0);if(null==e?(u=!1,p=m):p=e,y.eq(10))return null==e&&(u=!0),A(g,p);if(p+=10,g.precision=p,r=(n=O(v)).charAt(0),a=_(y),!(Math.abs(a)<15e14))return f=A(g,p+2,m).times(a+""),y=k(new g(r+"."+n.slice(1)),p-10).plus(f),g.precision=m,null==e?(u=!0,P(y,m)):y;for(;r<7&&1!=r||1==r&&n.charAt(1)>3;)r=(n=O((y=y.times(t)).d)).charAt(0),d++;for(a=_(y),r>1?(y=new g("0."+n),a++):y=new g(r+"."+n.slice(1)),l=c=y=S(y.minus(o),y.plus(o),p),h=P(y.times(y),p),i=3;;){if(c=P(c.times(h),p),O((f=l.plus(S(c,new g(i),p))).d).slice(0,p)===O(l.d).slice(0,p))return l=l.times(2),0!==a&&(l=l.plus(A(g,p+2,m).times(a+""))),l=S(l,new g(d),p),g.precision=m,null==e?(u=!0,P(l,m)):l;l=f,i+=2}}function M(t,e){var n,r,i;for((n=e.indexOf("."))>-1&&(e=e.replace(".","")),(r=e.search(/e/i))>0?(n<0&&(n=r),n+=+e.slice(r+1),e=e.substring(0,r)):n<0&&(n=e.length),r=0;48===e.charCodeAt(r);)++r;for(i=e.length;48===e.charCodeAt(i-1);)--i;if(e=e.slice(r,i)){if(i-=r,n=n-r-1,t.e=p(n/v),t.d=[],r=(n+1)%v,n<0&&(r+=v),rm||t.e<-m))throw Error(f+n)}else t.s=0,t.e=0,t.d=[0];return t}function P(t,e,n){var r,i,o,a,c,s,l,d,g=t.d;for(a=1,o=g[0];o>=10;o/=10)a++;if((r=e-a)<0)r+=v,i=e,l=g[d=0];else{if((d=Math.ceil((r+1)/v))>=(o=g.length))return t;for(l=o=g[d],a=1;o>=10;o/=10)a++;i=(r%=v)-v+a}if(void 0!==n&&(c=l/(o=h(10,a-i-1))%10|0,s=e<0||void 0!==g[d+1]||l%o,s=n<4?(c||s)&&(0==n||n==(t.s<0?3:2)):c>5||5==c&&(4==n||s||6==n&&(r>0?i>0?l/h(10,a-i):0:g[d-1])%10&1||n==(t.s<0?8:7))),e<1||!g[0])return s?(o=_(t),g.length=1,e=e-o-1,g[0]=h(10,(v-e%v)%v),t.e=p(-e/v)||0):(g.length=1,g[0]=t.e=t.s=0),t;if(0==r?(g.length=d,o=1,d--):(g.length=d+1,o=h(10,v-r),g[d]=i>0?(l/h(10,a-i)%h(10,i)|0)*o:0),s)for(;;){if(0==d){(g[0]+=o)==y&&(g[0]=1,++t.e);break}if(g[d]+=o,g[d]!=y)break;g[d--]=0,o=1}for(r=g.length;0===g[--r];)g.pop();if(u&&(t.e>m||t.e<-m))throw Error(f+_(t));return t}function T(t,e){var n,r,i,o,a,c,s,l,f,p,h=t.constructor,d=h.precision;if(!t.s||!e.s)return e.s?e.s=-e.s:e=new h(t),u?P(e,d):e;if(s=t.d,p=e.d,r=e.e,l=t.e,s=s.slice(),a=l-r){for((f=a<0)?(n=s,a=-a,c=p.length):(n=p,r=l,c=s.length),a>(i=Math.max(Math.ceil(d/v),c)+2)&&(a=i,n.length=1),n.reverse(),i=a;i--;)n.push(0);n.reverse()}else{for((f=(i=s.length)<(c=p.length))&&(c=i),i=0;i0;--i)s[c++]=0;for(i=p.length;i>a;){if(s[--i]0?o=o.charAt(0)+"."+o.slice(1)+j(r):a>1&&(o=o.charAt(0)+"."+o.slice(1)),o=o+(i<0?"e":"e+")+i):i<0?(o="0."+j(-i-1)+o,n&&(r=n-a)>0&&(o+=j(r))):i>=a?(o+=j(i+1-a),n&&(r=n-i-1)>0&&(o=o+"."+j(r))):((r=i+1)0&&(i+1===a&&(o+="."),o+=j(r))),t.s<0?"-"+o:o}function I(t,e){if(t.length>e)return t.length=e,!0}function N(t){if(!t||"object"!==typeof t)throw Error(s+"Object expected");var e,n,r,i=["precision",1,a,"rounding",0,8,"toExpNeg",-1/0,0,"toExpPos",0,1/0];for(e=0;e=i[e+1]&&r<=i[e+2]))throw Error(l+n+": "+r);this[n]=r}if(void 0!==(r=t[n="LN10"])){if(r!=Math.LN10)throw Error(l+n+": "+r);this[n]=new this(r)}return this}c=function t(e){var n,r,i;function o(t){var e=this;if(!(e instanceof o))return new o(t);if(e.constructor=o,t instanceof o)return e.s=t.s,e.e=t.e,void(e.d=(t=t.d)?t.slice():t);if("number"===typeof t){if(0*t!==0)throw Error(l+t);if(t>0)e.s=1;else{if(!(t<0))return e.s=0,e.e=0,void(e.d=[0]);t=-t,e.s=-1}return t===~~t&&t<1e7?(e.e=0,void(e.d=[t])):M(e,t.toString())}if("string"!==typeof t)throw Error(l+t);if(45===t.charCodeAt(0)?(t=t.slice(1),e.s=-1):e.s=1,!d.test(t))throw Error(l+t);M(e,t)}if(o.prototype=b,o.ROUND_UP=0,o.ROUND_DOWN=1,o.ROUND_CEIL=2,o.ROUND_FLOOR=3,o.ROUND_HALF_UP=4,o.ROUND_HALF_DOWN=5,o.ROUND_HALF_EVEN=6,o.ROUND_HALF_CEIL=7,o.ROUND_HALF_FLOOR=8,o.clone=t,o.config=o.set=N,void 0===e&&(e={}),e)for(i=["precision","rounding","toExpNeg","toExpPos","LN10"],n=0;n{"use strict";var e=Object.prototype.hasOwnProperty,n="~";function r(){}function i(t,e,n){this.fn=t,this.context=e,this.once=n||!1}function o(t,e,r,o,a){if("function"!==typeof r)throw new TypeError("The listener must be a function");var c=new i(r,o||t,a),u=n?n+e:e;return t._events[u]?t._events[u].fn?t._events[u]=[t._events[u],c]:t._events[u].push(c):(t._events[u]=c,t._eventsCount++),t}function a(t,e){0===--t._eventsCount?t._events=new r:delete t._events[e]}function c(){this._events=new r,this._eventsCount=0}Object.create&&(r.prototype=Object.create(null),(new r).__proto__||(n=!1)),c.prototype.eventNames=function(){var t,r,i=[];if(0===this._eventsCount)return i;for(r in t=this._events)e.call(t,r)&&i.push(n?r.slice(1):r);return Object.getOwnPropertySymbols?i.concat(Object.getOwnPropertySymbols(t)):i},c.prototype.listeners=function(t){var e=n?n+t:t,r=this._events[e];if(!r)return[];if(r.fn)return[r.fn];for(var i=0,o=r.length,a=new Array(o);i{var r=n(7937)(n(6552),"DataView");t.exports=r},5387:(t,e,n)=>{var r=n(7937)(n(6552),"Promise");t.exports=r},2070:(t,e,n)=>{var r=n(7937)(n(6552),"Set");t.exports=r},8902:(t,e,n)=>{var r=n(4816),i=n(6179),o=n(6704);function a(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new r;++e{var r=n(7160),i=n(4545),o=n(793),a=n(7760),c=n(3892),u=n(6788);function s(t){var e=this.__data__=new r(t);this.size=e.size}s.prototype.clear=i,s.prototype.delete=o,s.prototype.get=a,s.prototype.has=c,s.prototype.set=u,t.exports=s},2929:(t,e,n)=>{var r=n(6552).Uint8Array;t.exports=r},6600:(t,e,n)=>{var r=n(7937)(n(6552),"WeakMap");t.exports=r},1170:t=>{t.exports=function(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}},7676:t=>{t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length;++n{t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length,i=0,o=[];++n{var r=n(8468);t.exports=function(t,e){return!!(null==t?0:t.length)&&r(t,e,0)>-1}},1558:t=>{t.exports=function(t,e,n){for(var r=-1,i=null==t?0:t.length;++r{var r=n(3343),i=n(2777),o=n(4052),a=n(4543),c=n(9194),u=n(1268),s=Object.prototype.hasOwnProperty;t.exports=function(t,e){var n=o(t),l=!n&&i(t),f=!n&&!l&&a(t),p=!n&&!l&&!f&&u(t),h=n||l||f||p,d=h?r(t.length,String):[],y=d.length;for(var v in t)!e&&!s.call(t,v)||h&&("length"==v||f&&("offset"==v||"parent"==v)||p&&("buffer"==v||"byteLength"==v||"byteOffset"==v)||c(v,y))||d.push(v);return d}},8895:t=>{t.exports=function(t,e){for(var n=-1,r=e.length,i=t.length;++n{t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length;++n{t.exports=function(t){return t.split("")}},1775:(t,e,n)=>{var r=n(5654);t.exports=function(t,e,n){"__proto__"==e&&r?r(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}},5652:(t,e,n)=>{var r=n(4664),i=n(6516)(r);t.exports=i},4746:(t,e,n)=>{var r=n(5652);t.exports=function(t,e){var n=!0;return r(t,(function(t,r,i){return n=!!e(t,r,i)})),n}},9742:(t,e,n)=>{var r=n(9841);t.exports=function(t,e,n){for(var i=-1,o=t.length;++i{t.exports=function(t,e,n,r){for(var i=t.length,o=n+(r?1:-1);r?o--:++o{var r=n(8895),i=n(7116);t.exports=function t(e,n,o,a,c){var u=-1,s=e.length;for(o||(o=i),c||(c=[]);++u0&&o(l)?n>1?t(l,n-1,o,a,c):r(c,l):a||(c[c.length]=l)}return c}},4258:(t,e,n)=>{var r=n(5906)();t.exports=r},4664:(t,e,n)=>{var r=n(4258),i=n(8673);t.exports=function(t,e){return t&&r(t,e,i)}},4262:(t,e,n)=>{var r=n(8895),i=n(4052);t.exports=function(t,e,n){var o=e(t);return i(t)?o:r(o,n(t))}},7498:t=>{t.exports=function(t,e){return t>e}},7894:t=>{t.exports=function(t,e){return null!=t&&e in Object(t)}},8468:(t,e,n)=>{var r=n(5816),i=n(644),o=n(1639);t.exports=function(t,e,n){return e===e?o(t,e,n):r(t,i,n)}},5193:(t,e,n)=>{var r=n(6913),i=n(2761);t.exports=function(t){return i(t)&&"[object Arguments]"==r(t)}},6989:(t,e,n)=>{var r=n(6399),i=n(2761);t.exports=function t(e,n,o,a,c){return e===n||(null==e||null==n||!i(e)&&!i(n)?e!==e&&n!==n:r(e,n,o,a,t,c))}},6399:(t,e,n)=>{var r=n(5538),i=n(3668),o=n(9987),a=n(5752),c=n(6924),u=n(4052),s=n(4543),l=n(1268),f="[object Arguments]",p="[object Array]",h="[object Object]",d=Object.prototype.hasOwnProperty;t.exports=function(t,e,n,y,v,g){var m=u(t),b=u(e),x=m?p:c(t),w=b?p:c(e),O=(x=x==f?h:x)==h,S=(w=w==f?h:w)==h,E=x==w;if(E&&s(t)){if(!s(e))return!1;m=!0,O=!1}if(E&&!O)return g||(g=new r),m||l(t)?i(t,e,n,y,v,g):o(t,e,x,n,y,v,g);if(!(1&n)){var _=O&&d.call(t,"__wrapped__"),A=S&&d.call(e,"__wrapped__");if(_||A){var j=_?t.value():t,k=A?e.value():e;return g||(g=new r),v(j,k,n,y,g)}}return!!E&&(g||(g=new r),a(t,e,n,y,v,g))}},6532:(t,e,n)=>{var r=n(5538),i=n(6989);t.exports=function(t,e,n,o){var a=n.length,c=a,u=!o;if(null==t)return!c;for(t=Object(t);a--;){var s=n[a];if(u&&s[2]?s[1]!==t[s[0]]:!(s[0]in t))return!1}for(;++a{t.exports=function(t){return t!==t}},5428:(t,e,n)=>{var r=n(6913),i=n(6173),o=n(2761),a={};a["[object Float32Array]"]=a["[object Float64Array]"]=a["[object Int8Array]"]=a["[object Int16Array]"]=a["[object Int32Array]"]=a["[object Uint8Array]"]=a["[object Uint8ClampedArray]"]=a["[object Uint16Array]"]=a["[object Uint32Array]"]=!0,a["[object Arguments]"]=a["[object Array]"]=a["[object ArrayBuffer]"]=a["[object Boolean]"]=a["[object DataView]"]=a["[object Date]"]=a["[object Error]"]=a["[object Function]"]=a["[object Map]"]=a["[object Number]"]=a["[object Object]"]=a["[object RegExp]"]=a["[object Set]"]=a["[object String]"]=a["[object WeakMap]"]=!1,t.exports=function(t){return o(t)&&i(t.length)&&!!a[r(t)]}},9096:(t,e,n)=>{var r=n(9256),i=n(5029),o=n(3279),a=n(4052),c=n(3932);t.exports=function(t){return"function"==typeof t?t:null==t?o:"object"==typeof t?a(t)?i(t[0],t[1]):r(t):c(t)}},3713:(t,e,n)=>{var r=n(6140),i=n(1143),o=Object.prototype.hasOwnProperty;t.exports=function(t){if(!r(t))return i(t);var e=[];for(var n in Object(t))o.call(t,n)&&"constructor"!=n&&e.push(n);return e}},61:t=>{t.exports=function(t,e){return t{var r=n(5652),i=n(6571);t.exports=function(t,e){var n=-1,o=i(t)?Array(t.length):[];return r(t,(function(t,r,i){o[++n]=e(t,r,i)})),o}},9256:(t,e,n)=>{var r=n(6532),i=n(3781),o=n(1310);t.exports=function(t){var e=i(t);return 1==e.length&&e[0][2]?o(e[0][0],e[0][1]):function(n){return n===t||r(n,t,e)}}},5029:(t,e,n)=>{var r=n(6989),i=n(3097),o=n(3366),a=n(2597),c=n(9417),u=n(1310),s=n(914);t.exports=function(t,e){return a(t)&&c(e)?u(s(t),e):function(n){var a=i(n,t);return void 0===a&&a===e?o(n,t):r(e,a,3)}}},2536:(t,e,n)=>{var r=n(149),i=n(2969),o=n(9096),a=n(8883),c=n(320),u=n(7574),s=n(5893),l=n(3279),f=n(4052);t.exports=function(t,e,n){e=e.length?r(e,(function(t){return f(t)?function(e){return i(e,1===t.length?t[0]:t)}:t})):[l];var p=-1;e=r(e,u(o));var h=a(t,(function(t,n,i){return{criteria:r(e,(function(e){return e(t)})),index:++p,value:t}}));return c(h,(function(t,e){return s(t,e,n)}))}},396:t=>{t.exports=function(t){return function(e){return null==e?void 0:e[t]}}},2866:(t,e,n)=>{var r=n(2969);t.exports=function(t){return function(e){return r(e,t)}}},9676:t=>{var e=Math.ceil,n=Math.max;t.exports=function(t,r,i,o){for(var a=-1,c=n(e((r-t)/(i||1)),0),u=Array(c);c--;)u[o?c:++a]=t,t+=i;return u}},5647:(t,e,n)=>{var r=n(3279),i=n(5636),o=n(6350);t.exports=function(t,e){return o(i(t,e,r),t+"")}},8325:(t,e,n)=>{var r=n(2541),i=n(5654),o=n(3279),a=i?function(t,e){return i(t,"toString",{configurable:!0,enumerable:!1,value:r(e),writable:!0})}:o;t.exports=a},3871:t=>{t.exports=function(t,e,n){var r=-1,i=t.length;e<0&&(e=-e>i?0:i+e),(n=n>i?i:n)<0&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var o=Array(i);++r{var r=n(5652);t.exports=function(t,e){var n;return r(t,(function(t,r,i){return!(n=e(t,r,i))})),!!n}},320:t=>{t.exports=function(t,e){var n=t.length;for(t.sort(e);n--;)t[n]=t[n].value;return t}},3343:t=>{t.exports=function(t,e){for(var n=-1,r=Array(t);++n{t.exports=function(t){return function(e){return t(e)}}},4416:(t,e,n)=>{var r=n(8902),i=n(5866),o=n(1558),a=n(8114),c=n(8182),u=n(2074);t.exports=function(t,e,n){var s=-1,l=i,f=t.length,p=!0,h=[],d=h;if(n)p=!1,l=o;else if(f>=200){var y=e?null:c(t);if(y)return u(y);p=!1,l=a,d=new r}else d=e?[]:h;t:for(;++s{t.exports=function(t,e){return t.has(e)}},8189:(t,e,n)=>{var r=n(3871);t.exports=function(t,e,n){var i=t.length;return n=void 0===n?i:n,!e&&n>=i?t:r(t,e,n)}},6599:(t,e,n)=>{var r=n(9841);t.exports=function(t,e){if(t!==e){var n=void 0!==t,i=null===t,o=t===t,a=r(t),c=void 0!==e,u=null===e,s=e===e,l=r(e);if(!u&&!l&&!a&&t>e||a&&c&&s&&!u&&!l||i&&c&&s||!n&&s||!o)return 1;if(!i&&!a&&!l&&t{var r=n(6599);t.exports=function(t,e,n){for(var i=-1,o=t.criteria,a=e.criteria,c=o.length,u=n.length;++i=u?s:s*("desc"==n[i]?-1:1)}return t.index-e.index}},6516:(t,e,n)=>{var r=n(6571);t.exports=function(t,e){return function(n,i){if(null==n)return n;if(!r(n))return t(n,i);for(var o=n.length,a=e?o:-1,c=Object(n);(e?a--:++a{t.exports=function(t){return function(e,n,r){for(var i=-1,o=Object(e),a=r(e),c=a.length;c--;){var u=a[t?c:++i];if(!1===n(o[u],u,o))break}return e}}},5295:(t,e,n)=>{var r=n(8189),i=n(6311),o=n(9115),a=n(1069);t.exports=function(t){return function(e){e=a(e);var n=i(e)?o(e):void 0,c=n?n[0]:e.charAt(0),u=n?r(n,1).join(""):e.slice(1);return c[t]()+u}}},9995:(t,e,n)=>{var r=n(9096),i=n(6571),o=n(8673);t.exports=function(t){return function(e,n,a){var c=Object(e);if(!i(e)){var u=r(n,3);e=o(e),n=function(t){return u(c[t],t,c)}}var s=t(e,n,a);return s>-1?c[u?e[s]:s]:void 0}}},3331:(t,e,n)=>{var r=n(9676),i=n(929),o=n(7303);t.exports=function(t){return function(e,n,a){return a&&"number"!=typeof a&&i(e,n,a)&&(n=a=void 0),e=o(e),void 0===n?(n=e,e=0):n=o(n),a=void 0===a?e{var r=n(2070),i=n(5713),o=n(2074),a=r&&1/o(new r([,-0]))[1]==1/0?function(t){return new r(t)}:i;t.exports=a},5654:(t,e,n)=>{var r=n(7937),i=function(){try{var t=r(Object,"defineProperty");return t({},"",{}),t}catch(e){}}();t.exports=i},3668:(t,e,n)=>{var r=n(8902),i=n(2587),o=n(8114);t.exports=function(t,e,n,a,c,u){var s=1&n,l=t.length,f=e.length;if(l!=f&&!(s&&f>l))return!1;var p=u.get(t),h=u.get(e);if(p&&h)return p==e&&h==t;var d=-1,y=!0,v=2&n?new r:void 0;for(u.set(t,e),u.set(e,t);++d{var r=n(9812),i=n(2929),o=n(3211),a=n(3668),c=n(4160),u=n(2074),s=r?r.prototype:void 0,l=s?s.valueOf:void 0;t.exports=function(t,e,n,r,s,f,p){switch(n){case"[object DataView]":if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case"[object ArrayBuffer]":return!(t.byteLength!=e.byteLength||!f(new i(t),new i(e)));case"[object Boolean]":case"[object Date]":case"[object Number]":return o(+t,+e);case"[object Error]":return t.name==e.name&&t.message==e.message;case"[object RegExp]":case"[object String]":return t==e+"";case"[object Map]":var h=c;case"[object Set]":var d=1&r;if(h||(h=u),t.size!=e.size&&!d)return!1;var y=p.get(t);if(y)return y==e;r|=2,p.set(t,e);var v=a(h(t),h(e),r,s,f,p);return p.delete(t),v;case"[object Symbol]":if(l)return l.call(t)==l.call(e)}return!1}},5752:(t,e,n)=>{var r=n(9395),i=Object.prototype.hasOwnProperty;t.exports=function(t,e,n,o,a,c){var u=1&n,s=r(t),l=s.length;if(l!=r(e).length&&!u)return!1;for(var f=l;f--;){var p=s[f];if(!(u?p in e:i.call(e,p)))return!1}var h=c.get(t),d=c.get(e);if(h&&d)return h==e&&d==t;var y=!0;c.set(t,e),c.set(e,t);for(var v=u;++f{var r=n(4262),i=n(9621),o=n(8673);t.exports=function(t){return r(t,o,i)}},3781:(t,e,n)=>{var r=n(9417),i=n(8673);t.exports=function(t){for(var e=i(t),n=e.length;n--;){var o=e[n],a=t[o];e[n]=[o,a,r(a)]}return e}},5990:(t,e,n)=>{var r=n(3028)(Object.getPrototypeOf,Object);t.exports=r},9621:(t,e,n)=>{var r=n(7529),i=n(7828),o=Object.prototype.propertyIsEnumerable,a=Object.getOwnPropertySymbols,c=a?function(t){return null==t?[]:(t=Object(t),r(a(t),(function(e){return o.call(t,e)})))}:i;t.exports=c},6924:(t,e,n)=>{var r=n(7685),i=n(5204),o=n(5387),a=n(2070),c=n(6600),u=n(6913),s=n(6996),l="[object Map]",f="[object Promise]",p="[object Set]",h="[object WeakMap]",d="[object DataView]",y=s(r),v=s(i),g=s(o),m=s(a),b=s(c),x=u;(r&&x(new r(new ArrayBuffer(1)))!=d||i&&x(new i)!=l||o&&x(o.resolve())!=f||a&&x(new a)!=p||c&&x(new c)!=h)&&(x=function(t){var e=u(t),n="[object Object]"==e?t.constructor:void 0,r=n?s(n):"";if(r)switch(r){case y:return d;case v:return l;case g:return f;case m:return p;case b:return h}return e}),t.exports=x},9057:(t,e,n)=>{var r=n(5324),i=n(2777),o=n(4052),a=n(9194),c=n(6173),u=n(914);t.exports=function(t,e,n){for(var s=-1,l=(e=r(e,t)).length,f=!1;++s{var e=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");t.exports=function(t){return e.test(t)}},7116:(t,e,n)=>{var r=n(9812),i=n(2777),o=n(4052),a=r?r.isConcatSpreadable:void 0;t.exports=function(t){return o(t)||i(t)||!!(a&&t&&t[a])}},9194:t=>{var e=/^(?:0|[1-9]\d*)$/;t.exports=function(t,n){var r=typeof t;return!!(n=null==n?9007199254740991:n)&&("number"==r||"symbol"!=r&&e.test(t))&&t>-1&&t%1==0&&t{var r=n(3211),i=n(6571),o=n(9194),a=n(6686);t.exports=function(t,e,n){if(!a(n))return!1;var c=typeof e;return!!("number"==c?i(n)&&o(e,n.length):"string"==c&&e in n)&&r(n[e],t)}},6140:t=>{var e=Object.prototype;t.exports=function(t){var n=t&&t.constructor;return t===("function"==typeof n&&n.prototype||e)}},9417:(t,e,n)=>{var r=n(6686);t.exports=function(t){return t===t&&!r(t)}},4160:t=>{t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t,r){n[++e]=[r,t]})),n}},1310:t=>{t.exports=function(t,e){return function(n){return null!=n&&(n[t]===e&&(void 0!==e||t in Object(n)))}}},1143:(t,e,n)=>{var r=n(3028)(Object.keys,Object);t.exports=r},6832:(t,e,n)=>{t=n.nmd(t);var r=n(7105),i=e&&!e.nodeType&&e,o=i&&t&&!t.nodeType&&t,a=o&&o.exports===i&&r.process,c=function(){try{var t=o&&o.require&&o.require("util").types;return t||a&&a.binding&&a.binding("util")}catch(e){}}();t.exports=c},3028:t=>{t.exports=function(t,e){return function(n){return t(e(n))}}},5636:(t,e,n)=>{var r=n(1170),i=Math.max;t.exports=function(t,e,n){return e=i(void 0===e?t.length-1:e,0),function(){for(var o=arguments,a=-1,c=i(o.length-e,0),u=Array(c);++a{t.exports=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this}},6704:t=>{t.exports=function(t){return this.__data__.has(t)}},2074:t=>{t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t){n[++e]=t})),n}},6350:(t,e,n)=>{var r=n(8325),i=n(6578)(r);t.exports=i},6578:t=>{var e=Date.now;t.exports=function(t){var n=0,r=0;return function(){var i=e(),o=16-(i-r);if(r=i,o>0){if(++n>=800)return arguments[0]}else n=0;return t.apply(void 0,arguments)}}},4545:(t,e,n)=>{var r=n(7160);t.exports=function(){this.__data__=new r,this.size=0}},793:t=>{t.exports=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}},7760:t=>{t.exports=function(t){return this.__data__.get(t)}},3892:t=>{t.exports=function(t){return this.__data__.has(t)}},6788:(t,e,n)=>{var r=n(7160),i=n(5204),o=n(4816);t.exports=function(t,e){var n=this.__data__;if(n instanceof r){var a=n.__data__;if(!i||a.length<199)return a.push([t,e]),this.size=++n.size,this;n=this.__data__=new o(a)}return n.set(t,e),this.size=n.size,this}},1639:t=>{t.exports=function(t,e,n){for(var r=n-1,i=t.length;++r{var r=n(5967),i=n(6311),o=n(715);t.exports=function(t){return i(t)?o(t):r(t)}},715:t=>{var e="\\ud800-\\udfff",n="["+e+"]",r="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",i="\\ud83c[\\udffb-\\udfff]",o="[^"+e+"]",a="(?:\\ud83c[\\udde6-\\uddff]){2}",c="[\\ud800-\\udbff][\\udc00-\\udfff]",u="(?:"+r+"|"+i+")"+"?",s="[\\ufe0e\\ufe0f]?",l=s+u+("(?:\\u200d(?:"+[o,a,c].join("|")+")"+s+u+")*"),f="(?:"+[o+r+"?",r,a,c,n].join("|")+")",p=RegExp(i+"(?="+i+")|"+f+l,"g");t.exports=function(t){return t.match(p)||[]}},2541:t=>{t.exports=function(t){return function(){return t}}},7002:(t,e,n)=>{var r=n(7676),i=n(4746),o=n(9096),a=n(4052),c=n(929);t.exports=function(t,e,n){var u=a(t)?r:i;return n&&c(t,e,n)&&(e=void 0),u(t,o(e,3))}},8990:(t,e,n)=>{var r=n(9995)(n(2520));t.exports=r},2520:(t,e,n)=>{var r=n(5816),i=n(9096),o=n(9140),a=Math.max;t.exports=function(t,e,n){var c=null==t?0:t.length;if(!c)return-1;var u=null==n?0:o(n);return u<0&&(u=a(c+u,0)),r(t,i(e,3),u)}},3538:(t,e,n)=>{var r=n(755),i=n(3411);t.exports=function(t,e){return r(i(t,e),1)}},3366:(t,e,n)=>{var r=n(7894),i=n(9057);t.exports=function(t,e){return null!=t&&i(t,e,r)}},3279:t=>{t.exports=function(t){return t}},2777:(t,e,n)=>{var r=n(5193),i=n(2761),o=Object.prototype,a=o.hasOwnProperty,c=o.propertyIsEnumerable,u=r(function(){return arguments}())?r:function(t){return i(t)&&a.call(t,"callee")&&!c.call(t,"callee")};t.exports=u},6571:(t,e,n)=>{var r=n(1629),i=n(6173);t.exports=function(t){return null!=t&&i(t.length)&&!r(t)}},6361:(t,e,n)=>{var r=n(6913),i=n(2761);t.exports=function(t){return!0===t||!1===t||i(t)&&"[object Boolean]"==r(t)}},4543:(t,e,n)=>{t=n.nmd(t);var r=n(6552),i=n(14),o=e&&!e.nodeType&&e,a=o&&t&&!t.nodeType&&t,c=a&&a.exports===o?r.Buffer:void 0,u=(c?c.isBuffer:void 0)||i;t.exports=u},9853:(t,e,n)=>{var r=n(6989);t.exports=function(t,e){return r(t,e)}},6173:t=>{t.exports=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}},5268:(t,e,n)=>{var r=n(9160);t.exports=function(t){return r(t)&&t!=+t}},9686:t=>{t.exports=function(t){return null==t}},9160:(t,e,n)=>{var r=n(6913),i=n(2761);t.exports=function(t){return"number"==typeof t||i(t)&&"[object Number]"==r(t)}},2322:(t,e,n)=>{var r=n(6913),i=n(5990),o=n(2761),a=Function.prototype,c=Object.prototype,u=a.toString,s=c.hasOwnProperty,l=u.call(Object);t.exports=function(t){if(!o(t)||"[object Object]"!=r(t))return!1;var e=i(t);if(null===e)return!0;var n=s.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&u.call(n)==l}},620:(t,e,n)=>{var r=n(6913),i=n(4052),o=n(2761);t.exports=function(t){return"string"==typeof t||!i(t)&&o(t)&&"[object String]"==r(t)}},1268:(t,e,n)=>{var r=n(5428),i=n(7574),o=n(6832),a=o&&o.isTypedArray,c=a?i(a):r;t.exports=c},8673:(t,e,n)=>{var r=n(3204),i=n(3713),o=n(6571);t.exports=function(t){return o(t)?r(t):i(t)}},4065:t=>{t.exports=function(t){var e=null==t?0:t.length;return e?t[e-1]:void 0}},3411:(t,e,n)=>{var r=n(149),i=n(9096),o=n(8883),a=n(4052);t.exports=function(t,e){return(a(t)?r:o)(t,i(e,3))}},1733:(t,e,n)=>{var r=n(1775),i=n(4664),o=n(9096);t.exports=function(t,e){var n={};return e=o(e,3),i(t,(function(t,i,o){r(n,i,e(t,i,o))})),n}},539:(t,e,n)=>{var r=n(9742),i=n(7498),o=n(3279);t.exports=function(t){return t&&t.length?r(t,o,i):void 0}},2794:(t,e,n)=>{var r=n(9742),i=n(7498),o=n(9096);t.exports=function(t,e){return t&&t.length?r(t,o(e,2),i):void 0}},6745:(t,e,n)=>{var r=n(9742),i=n(61),o=n(3279);t.exports=function(t){return t&&t.length?r(t,o,i):void 0}},9364:(t,e,n)=>{var r=n(9742),i=n(9096),o=n(61);t.exports=function(t,e){return t&&t.length?r(t,i(e,2),o):void 0}},5713:t=>{t.exports=function(){}},3932:(t,e,n)=>{var r=n(396),i=n(2866),o=n(2597),a=n(914);t.exports=function(t){return o(t)?r(a(t)):i(t)}},6604:(t,e,n)=>{var r=n(3331)();t.exports=r},4597:(t,e,n)=>{var r=n(2587),i=n(9096),o=n(2165),a=n(4052),c=n(929);t.exports=function(t,e,n){var u=a(t)?r:o;return n&&c(t,e,n)&&(e=void 0),u(t,i(e,3))}},7424:(t,e,n)=>{var r=n(755),i=n(2536),o=n(5647),a=n(929),c=o((function(t,e){if(null==t)return[];var n=e.length;return n>1&&a(t,e[0],e[1])?e=[]:n>2&&a(e[0],e[1],e[2])&&(e=[e[0]]),i(t,r(e,1),[])}));t.exports=c},7828:t=>{t.exports=function(){return[]}},14:t=>{t.exports=function(){return!1}},9889:(t,e,n)=>{var r=n(3950),i=n(6686);t.exports=function(t,e,n){var o=!0,a=!0;if("function"!=typeof t)throw new TypeError("Expected a function");return i(n)&&(o="leading"in n?!!n.leading:o,a="trailing"in n?!!n.trailing:a),r(t,e,{leading:o,maxWait:e,trailing:a})}},977:(t,e,n)=>{var r=n(9096),i=n(4416);t.exports=function(t,e){return t&&t.length?i(t,r(e,2)):[]}},643:(t,e,n)=>{var r=n(5295)("toUpperCase");t.exports=r},1497:(t,e,n)=>{"use strict";var r=n(3218);function i(){}function o(){}o.resetWarningCache=i,t.exports=function(){function t(t,e,n,i,o,a){if(a!==r){var c=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw c.name="Invariant Violation",c}}function e(){return t}t.isRequired=t;var n={array:t,bigint:t,bool:t,func:t,number:t,object:t,string:t,symbol:t,any:t,arrayOf:e,element:t,elementType:t,instanceOf:e,node:t,objectOf:e,oneOf:e,oneOfType:e,shape:e,exact:e,checkPropTypes:o,resetWarningCache:i};return n.PropTypes=n,n}},5173:(t,e,n)=>{t.exports=n(1497)()},3218:t=>{"use strict";t.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},5484:(t,e,n)=>{"use strict";function r(){var t=this.constructor.getDerivedStateFromProps(this.props,this.state);null!==t&&void 0!==t&&this.setState(t)}function i(t){this.setState(function(e){var n=this.constructor.getDerivedStateFromProps(t,e);return null!==n&&void 0!==n?n:null}.bind(this))}function o(t,e){try{var n=this.props,r=this.state;this.props=t,this.state=e,this.__reactInternalSnapshotFlag=!0,this.__reactInternalSnapshot=this.getSnapshotBeforeUpdate(n,r)}finally{this.props=n,this.state=r}}function a(t){var e=t.prototype;if(!e||!e.isReactComponent)throw new Error("Can only polyfill class components");if("function"!==typeof t.getDerivedStateFromProps&&"function"!==typeof e.getSnapshotBeforeUpdate)return t;var n=null,a=null,c=null;if("function"===typeof e.componentWillMount?n="componentWillMount":"function"===typeof e.UNSAFE_componentWillMount&&(n="UNSAFE_componentWillMount"),"function"===typeof e.componentWillReceiveProps?a="componentWillReceiveProps":"function"===typeof e.UNSAFE_componentWillReceiveProps&&(a="UNSAFE_componentWillReceiveProps"),"function"===typeof e.componentWillUpdate?c="componentWillUpdate":"function"===typeof e.UNSAFE_componentWillUpdate&&(c="UNSAFE_componentWillUpdate"),null!==n||null!==a||null!==c){var u=t.displayName||t.name,s="function"===typeof t.getDerivedStateFromProps?"getDerivedStateFromProps()":"getSnapshotBeforeUpdate()";throw Error("Unsafe legacy lifecycles will not be called for components using new component APIs.\n\n"+u+" uses "+s+" but also contains the following legacy lifecycles:"+(null!==n?"\n "+n:"")+(null!==a?"\n "+a:"")+(null!==c?"\n "+c:"")+"\n\nThe above lifecycles should be removed. Learn more about this warning here:\nhttps://fb.me/react-async-component-lifecycle-hooks")}if("function"===typeof t.getDerivedStateFromProps&&(e.componentWillMount=r,e.componentWillReceiveProps=i),"function"===typeof e.getSnapshotBeforeUpdate){if("function"!==typeof e.componentDidUpdate)throw new Error("Cannot polyfill getSnapshotBeforeUpdate() for components that do not define componentDidUpdate() on the prototype");e.componentWillUpdate=o;var l=e.componentDidUpdate;e.componentDidUpdate=function(t,e,n){var r=this.__reactInternalSnapshotFlag?this.__reactInternalSnapshot:n;l.call(this,t,e,r)}}return t}n.r(e),n.d(e,{polyfill:()=>a}),r.__suppressDeprecationWarning=!0,i.__suppressDeprecationWarning=!0,o.__suppressDeprecationWarning=!0},7356:(t,e,n)=>{"use strict";n.d(e,{Ay:()=>ae,g6:()=>et});var r=n(5043),i=n(5173),o=n.n(i),a=Object.getOwnPropertyNames,c=Object.getOwnPropertySymbols,u=Object.prototype.hasOwnProperty;function s(t,e){return function(n,r,i){return t(n,r,i)&&e(n,r,i)}}function l(t){return function(e,n,r){if(!e||!n||"object"!==typeof e||"object"!==typeof n)return t(e,n,r);var i=r.cache,o=i.get(e),a=i.get(n);if(o&&a)return o===n&&a===e;i.set(e,n),i.set(n,e);var c=t(e,n,r);return i.delete(e),i.delete(n),c}}function f(t){return a(t).concat(c(t))}var p=Object.hasOwn||function(t,e){return u.call(t,e)};function h(t,e){return t||e?t===e:t===e||t!==t&&e!==e}var d="_owner",y=Object.getOwnPropertyDescriptor,v=Object.keys;function g(t,e,n){var r=t.length;if(e.length!==r)return!1;for(;r-- >0;)if(!n.equals(t[r],e[r],r,r,t,e,n))return!1;return!0}function m(t,e){return h(t.getTime(),e.getTime())}function b(t,e,n){if(t.size!==e.size)return!1;for(var r,i,o={},a=t.entries(),c=0;(r=a.next())&&!r.done;){for(var u=e.entries(),s=!1,l=0;(i=u.next())&&!i.done;){var f=r.value,p=f[0],h=f[1],d=i.value,y=d[0],v=d[1];s||o[l]||!(s=n.equals(p,y,c,l,t,e,n)&&n.equals(h,v,p,y,t,e,n))||(o[l]=!0),l++}if(!s)return!1;c++}return!0}function x(t,e,n){var r,i=v(t),o=i.length;if(v(e).length!==o)return!1;for(;o-- >0;){if((r=i[o])===d&&(t.$$typeof||e.$$typeof)&&t.$$typeof!==e.$$typeof)return!1;if(!p(e,r)||!n.equals(t[r],e[r],r,r,t,e,n))return!1}return!0}function w(t,e,n){var r,i,o,a=f(t),c=a.length;if(f(e).length!==c)return!1;for(;c-- >0;){if((r=a[c])===d&&(t.$$typeof||e.$$typeof)&&t.$$typeof!==e.$$typeof)return!1;if(!p(e,r))return!1;if(!n.equals(t[r],e[r],r,r,t,e,n))return!1;if(i=y(t,r),o=y(e,r),(i||o)&&(!i||!o||i.configurable!==o.configurable||i.enumerable!==o.enumerable||i.writable!==o.writable))return!1}return!0}function O(t,e){return h(t.valueOf(),e.valueOf())}function S(t,e){return t.source===e.source&&t.flags===e.flags}function E(t,e,n){if(t.size!==e.size)return!1;for(var r,i,o={},a=t.values();(r=a.next())&&!r.done;){for(var c=e.values(),u=!1,s=0;(i=c.next())&&!i.done;)u||o[s]||!(u=n.equals(r.value,i.value,r.value,i.value,t,e,n))||(o[s]=!0),s++;if(!u)return!1}return!0}function _(t,e){var n=t.length;if(e.length!==n)return!1;for(;n-- >0;)if(t[n]!==e[n])return!1;return!0}var A="[object Arguments]",j="[object Boolean]",k="[object Date]",M="[object Map]",P="[object Number]",T="[object Object]",C="[object RegExp]",I="[object Set]",N="[object String]",D=Array.isArray,R="function"===typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView:null,L=Object.assign,B=Object.prototype.toString.call.bind(Object.prototype.toString);var U=F();F({strict:!0}),F({circular:!0}),F({circular:!0,strict:!0}),F({createInternalComparator:function(){return h}}),F({strict:!0,createInternalComparator:function(){return h}}),F({circular:!0,createInternalComparator:function(){return h}}),F({circular:!0,createInternalComparator:function(){return h},strict:!0});function F(t){void 0===t&&(t={});var e,n=t.circular,r=void 0!==n&&n,i=t.createInternalComparator,o=t.createState,a=t.strict,c=void 0!==a&&a,u=function(t){var e=t.circular,n=t.createCustomConfig,r=t.strict,i={areArraysEqual:r?w:g,areDatesEqual:m,areMapsEqual:r?s(b,w):b,areObjectsEqual:r?w:x,arePrimitiveWrappersEqual:O,areRegExpsEqual:S,areSetsEqual:r?s(E,w):E,areTypedArraysEqual:r?w:_};if(n&&(i=L({},i,n(i))),e){var o=l(i.areArraysEqual),a=l(i.areMapsEqual),c=l(i.areObjectsEqual),u=l(i.areSetsEqual);i=L({},i,{areArraysEqual:o,areMapsEqual:a,areObjectsEqual:c,areSetsEqual:u})}return i}(t),f=function(t){var e=t.areArraysEqual,n=t.areDatesEqual,r=t.areMapsEqual,i=t.areObjectsEqual,o=t.arePrimitiveWrappersEqual,a=t.areRegExpsEqual,c=t.areSetsEqual,u=t.areTypedArraysEqual;return function(t,s,l){if(t===s)return!0;if(null==t||null==s||"object"!==typeof t||"object"!==typeof s)return t!==t&&s!==s;var f=t.constructor;if(f!==s.constructor)return!1;if(f===Object)return i(t,s,l);if(D(t))return e(t,s,l);if(null!=R&&R(t))return u(t,s,l);if(f===Date)return n(t,s,l);if(f===RegExp)return a(t,s,l);if(f===Map)return r(t,s,l);if(f===Set)return c(t,s,l);var p=B(t);return p===k?n(t,s,l):p===C?a(t,s,l):p===M?r(t,s,l):p===I?c(t,s,l):p===T?"function"!==typeof t.then&&"function"!==typeof s.then&&i(t,s,l):p===A?i(t,s,l):(p===j||p===P||p===N)&&o(t,s,l)}}(u);return function(t){var e=t.circular,n=t.comparator,r=t.createState,i=t.equals,o=t.strict;if(r)return function(t,a){var c=r(),u=c.cache,s=void 0===u?e?new WeakMap:void 0:u,l=c.meta;return n(t,a,{cache:s,equals:i,meta:l,strict:o})};if(e)return function(t,e){return n(t,e,{cache:new WeakMap,equals:i,meta:void 0,strict:o})};var a={cache:void 0,equals:i,meta:void 0,strict:o};return function(t,e){return n(t,e,a)}}({circular:r,comparator:f,createState:o,equals:i?i(f):(e=f,function(t,n,r,i,o,a,c){return e(t,n,c)}),strict:c})}function z(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=-1;requestAnimationFrame((function r(i){n<0&&(n=i),i-n>e?(t(i),n=-1):function(t){"undefined"!==typeof requestAnimationFrame&&requestAnimationFrame(t)}(r)}))}function V(t){return V="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},V(t)}function W(t){return function(t){if(Array.isArray(t))return t}(t)||function(t){if("undefined"!==typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(!t)return;if("string"===typeof t)return q(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return q(t,e)}(t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function q(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);nt.length)&&(e=t.length);for(var n=0,r=new Array(e);n=0&&t<=1}));var s,l,f=lt(r,o),p=lt(i,a),h=(s=r,l=o,function(t){var e=ut(s,l),n=[].concat(it(e.map((function(t,e){return t*e})).slice(1)),[0]);return st(n,t)}),d=function(t){for(var e,n=t>1?1:t,r=n,i=0;i<8;++i){var o=f(r)-n,a=h(r);if(Math.abs(o-n)1?1:e<0?0:e}return p(r)};return d.isStepper=!1,d},pt=function(){for(var t=arguments.length,e=new Array(t),n=0;n0&&void 0!==arguments[0]?arguments[0]:{},e=t.stiff,n=void 0===e?100:e,r=t.damping,i=void 0===r?8:r,o=t.dt,a=void 0===o?17:o,c=function(t,e,r){var o=r+(-(t-e)*n-r*i)*a/1e3,c=r*a/1e3+t;return Math.abs(c-e)t.length)&&(e=t.length);for(var n=0,r=new Array(e);n=0||(i[n]=t[n]);return i}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(i[n]=t[n])}return i}function kt(t){return function(t){if(Array.isArray(t))return Mt(t)}(t)||function(t){if("undefined"!==typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(!t)return;if("string"===typeof t)return Mt(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Mt(t,e)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Mt(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n0?n[i-1]:r,p=s||Object.keys(u);if("function"===typeof c||"spring"===c)return[].concat(kt(t),[e.runJSAnimation.bind(e,{from:f.style,to:u,duration:o,easing:c}),o]);var h=nt(p,o,c),d=Tt(Tt(Tt({},f.style),u),{},{transition:h});return[].concat(kt(t),[d,o,l]).filter(Q)}),[a,Math.max(u,r)])),[t.onAnimationEnd]))}},{key:"runAnimation",value:function(t){this.manager||(this.manager=X());var e=t.begin,n=t.duration,r=t.attributeName,i=t.to,o=t.easing,a=t.onAnimationStart,c=t.onAnimationEnd,u=t.steps,s=t.children,l=this.manager;if(this.unSubscribe=l.subscribe(this.handleStyleChange),"function"!==typeof o&&"function"!==typeof s&&"spring"!==o)if(u.length>1)this.runStepAnimation(t);else{var f=r?Ct({},r,i):i,p=nt(Object.keys(f),n,o);l.start([a,e,Tt(Tt({},f),{},{transition:p}),n,c])}else this.runJSAnimation(t)}},{key:"render",value:function(){var t=this.props,e=t.children,n=(t.begin,t.duration),i=(t.attributeName,t.easing,t.isActive),o=(t.steps,t.from,t.to,t.canBegin,t.onAnimationEnd,t.shouldReAnimate,t.onAnimationReStart,jt(t,At)),a=r.Children.count(e),c=et(this.state.style);if("function"===typeof e)return e(c);if(!i||0===a||n<=0)return e;var u=function(t){var e=t.props,n=e.style,i=void 0===n?{}:n,a=e.className;return(0,r.cloneElement)(t,Tt(Tt({},o),{},{style:Tt(Tt({},i),c),className:a}))};return 1===a?u(r.Children.only(e)):r.createElement("div",null,r.Children.map(e,(function(t){return u(t)})))}}])&&It(e.prototype,n),i&&It(e,i),Object.defineProperty(e,"prototype",{writable:!1}),a}(r.PureComponent);Ft.displayName="Animate",Ft.defaultProps={begin:0,duration:1e3,from:"",to:"",attributeName:"",easing:"ease",isActive:!0,canBegin:!0,steps:[],onAnimationEnd:function(){},onAnimationStart:function(){}},Ft.propTypes={from:o().oneOfType([o().object,o().string]),to:o().oneOfType([o().object,o().string]),attributeName:o().string,duration:o().number,begin:o().number,easing:o().oneOfType([o().string,o().func]),steps:o().arrayOf(o().shape({duration:o().number.isRequired,style:o().object.isRequired,easing:o().oneOfType([o().oneOf(["ease","ease-in","ease-out","ease-in-out","linear"]),o().func]),properties:o().arrayOf("string"),onAnimationEnd:o().func})),children:o().oneOfType([o().node,o().func]),isActive:o().bool,canBegin:o().bool,onAnimationEnd:o().func,shouldReAnimate:o().bool,onAnimationStart:o().func,onAnimationReStart:o().func};const zt=Ft;var Vt=n(7111),Wt=["children","appearOptions","enterOptions","leaveOptions"];function qt(t){return qt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},qt(t)}function Xt(){return Xt=Object.assign?Object.assign.bind():function(t){for(var e=1;e=0||(i[n]=t[n]);return i}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(i[n]=t[n])}return i}function Gt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function $t(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{},e=t.steps,n=t.duration;return e&&e.length?e.reduce((function(t,e){return t+(Number.isFinite(e.duration)&&e.duration>0?e.duration:0)}),0):Number.isFinite(n)?n:0},re=function(t){!function(t,e){if("function"!==typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&Yt(t,e)}(a,t);var e,n,i,o=Kt(a);function a(){var t;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,a),te(Zt(t=o.call(this)),"handleEnter",(function(e,n){var r=t.props,i=r.appearOptions,o=r.enterOptions;t.handleStyleActive(n?i:o)})),te(Zt(t),"handleExit",(function(){var e=t.props.leaveOptions;t.handleStyleActive(e)})),t.state={isActive:!1},t}return e=a,(n=[{key:"handleStyleActive",value:function(t){if(t){var e=t.onAnimationEnd?function(){t.onAnimationEnd()}:null;this.setState($t($t({},t),{},{onAnimationEnd:e,isActive:!0}))}}},{key:"parseTimeout",value:function(){var t=this.props,e=t.appearOptions,n=t.enterOptions,r=t.leaveOptions;return ne(e)+ne(n)+ne(r)}},{key:"render",value:function(){var t=this,e=this.props,n=e.children,i=(e.appearOptions,e.enterOptions,e.leaveOptions,Ht(e,Wt));return r.createElement(Vt.Transition,Xt({},i,{onEnter:this.handleEnter,onExit:this.handleExit,timeout:this.parseTimeout()}),(function(){return r.createElement(zt,t.state,r.Children.only(n))}))}}])&&Jt(e.prototype,n),i&&Jt(e,i),Object.defineProperty(e,"prototype",{writable:!1}),a}(r.Component);re.propTypes={appearOptions:o().object,enterOptions:o().object,leaveOptions:o().object,children:o().element};const ie=re;function oe(t){var e=t.component,n=t.children,i=t.appear,o=t.enter,a=t.leave;return r.createElement(Vt.TransitionGroup,{component:e},r.Children.map(n,(function(t,e){return r.createElement(ie,{appearOptions:i,enterOptions:o,leaveOptions:a,key:"child-".concat(e)},t)})))}oe.propTypes={appear:o().object,enter:o().object,leave:o().object,children:o().oneOfType([o().array,o().element]),component:o().any},oe.defaultProps={component:"span"};const ae=zt},9435:(t,e,n)=>{"use strict";e.__esModule=!0,e.default=void 0;!function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)if(Object.prototype.hasOwnProperty.call(t,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(t,n):{};r.get||r.set?Object.defineProperty(e,n,r):e[n]=t[n]}e.default=t}(n(5173));var r=c(n(1325)),i=c(n(2854)),o=c(n(5043)),a=c(n(4943));n(927);function c(t){return t&&t.__esModule?t:{default:t}}function u(){return u=Object.assign||function(t){for(var e=1;e{"use strict";e.__esModule=!0,e.default=void 0;a(n(5173));var r=a(n(5043)),i=n(7950),o=a(n(1665));function a(t){return t&&t.__esModule?t:{default:t}}var c=function(t){var e,n;function a(){for(var e,n=arguments.length,r=new Array(n),i=0;i=0||(i[n]=t[n]);return i}(t,["children","in"]),a=r.default.Children.toArray(e),c=a[0],u=a[1];return delete i.onEnter,delete i.onEntering,delete i.onEntered,delete i.onExit,delete i.onExiting,delete i.onExited,r.default.createElement(o.default,i,n?r.default.cloneElement(c,{key:"first",onEnter:this.handleEnter,onEntering:this.handleEntering,onEntered:this.handleEntered}):r.default.cloneElement(u,{key:"second",onEnter:this.handleExit,onEntering:this.handleExiting,onEntered:this.handleExited}))},a}(r.default.Component);c.propTypes={};var u=c;e.default=u,t.exports=e.default},4943:(t,e,n)=>{"use strict";e.__esModule=!0,e.default=e.EXITING=e.ENTERED=e.ENTERING=e.EXITED=e.UNMOUNTED=void 0;var r=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)if(Object.prototype.hasOwnProperty.call(t,n)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(t,n):{};r.get||r.set?Object.defineProperty(e,n,r):e[n]=t[n]}return e.default=t,e}(n(5173)),i=c(n(5043)),o=c(n(7950)),a=n(5484);n(927);function c(t){return t&&t.__esModule?t:{default:t}}var u="unmounted";e.UNMOUNTED=u;var s="exited";e.EXITED=s;var l="entering";e.ENTERING=l;var f="entered";e.ENTERED=f;var p="exiting";e.EXITING=p;var h=function(t){var e,n;function r(e,n){var r;r=t.call(this,e,n)||this;var i,o=n.transitionGroup,a=o&&!o.isMounting?e.enter:e.appear;return r.appearStatus=null,e.in?a?(i=s,r.appearStatus=l):i=f:i=e.unmountOnExit||e.mountOnEnter?u:s,r.state={status:i},r.nextCallback=null,r}n=t,(e=r).prototype=Object.create(n.prototype),e.prototype.constructor=e,e.__proto__=n;var a=r.prototype;return a.getChildContext=function(){return{transitionGroup:null}},r.getDerivedStateFromProps=function(t,e){return t.in&&e.status===u?{status:s}:null},a.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},a.componentDidUpdate=function(t){var e=null;if(t!==this.props){var n=this.state.status;this.props.in?n!==l&&n!==f&&(e=l):n!==l&&n!==f||(e=p)}this.updateStatus(!1,e)},a.componentWillUnmount=function(){this.cancelNextCallback()},a.getTimeouts=function(){var t,e,n,r=this.props.timeout;return t=e=n=r,null!=r&&"number"!==typeof r&&(t=r.exit,e=r.enter,n=void 0!==r.appear?r.appear:e),{exit:t,enter:e,appear:n}},a.updateStatus=function(t,e){if(void 0===t&&(t=!1),null!==e){this.cancelNextCallback();var n=o.default.findDOMNode(this);e===l?this.performEnter(n,t):this.performExit(n)}else this.props.unmountOnExit&&this.state.status===s&&this.setState({status:u})},a.performEnter=function(t,e){var n=this,r=this.props.enter,i=this.context.transitionGroup?this.context.transitionGroup.isMounting:e,o=this.getTimeouts(),a=i?o.appear:o.enter;e||r?(this.props.onEnter(t,i),this.safeSetState({status:l},(function(){n.props.onEntering(t,i),n.onTransitionEnd(t,a,(function(){n.safeSetState({status:f},(function(){n.props.onEntered(t,i)}))}))}))):this.safeSetState({status:f},(function(){n.props.onEntered(t)}))},a.performExit=function(t){var e=this,n=this.props.exit,r=this.getTimeouts();n?(this.props.onExit(t),this.safeSetState({status:p},(function(){e.props.onExiting(t),e.onTransitionEnd(t,r.exit,(function(){e.safeSetState({status:s},(function(){e.props.onExited(t)}))}))}))):this.safeSetState({status:s},(function(){e.props.onExited(t)}))},a.cancelNextCallback=function(){null!==this.nextCallback&&(this.nextCallback.cancel(),this.nextCallback=null)},a.safeSetState=function(t,e){e=this.setNextCallback(e),this.setState(t,e)},a.setNextCallback=function(t){var e=this,n=!0;return this.nextCallback=function(r){n&&(n=!1,e.nextCallback=null,t(r))},this.nextCallback.cancel=function(){n=!1},this.nextCallback},a.onTransitionEnd=function(t,e,n){this.setNextCallback(n);var r=null==e&&!this.props.addEndListener;t&&!r?(this.props.addEndListener&&this.props.addEndListener(t,this.nextCallback),null!=e&&setTimeout(this.nextCallback,e)):setTimeout(this.nextCallback,0)},a.render=function(){var t=this.state.status;if(t===u)return null;var e=this.props,n=e.children,r=function(t,e){if(null==t)return{};var n,r,i={},o=Object.keys(t);for(r=0;r=0||(i[n]=t[n]);return i}(e,["children"]);if(delete r.in,delete r.mountOnEnter,delete r.unmountOnExit,delete r.appear,delete r.enter,delete r.exit,delete r.timeout,delete r.addEndListener,delete r.onEnter,delete r.onEntering,delete r.onEntered,delete r.onExit,delete r.onExiting,delete r.onExited,"function"===typeof n)return n(t,r);var o=i.default.Children.only(n);return i.default.cloneElement(o,r)},r}(i.default.Component);function d(){}h.contextTypes={transitionGroup:r.object},h.childContextTypes={transitionGroup:function(){}},h.propTypes={},h.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:d,onEntering:d,onEntered:d,onExit:d,onExiting:d,onExited:d},h.UNMOUNTED=0,h.EXITED=1,h.ENTERING=2,h.ENTERED=3,h.EXITING=4;var y=(0,a.polyfill)(h);e.default=y},1665:(t,e,n)=>{"use strict";e.__esModule=!0,e.default=void 0;var r=c(n(5173)),i=c(n(5043)),o=n(5484),a=n(8377);function c(t){return t&&t.__esModule?t:{default:t}}function u(){return u=Object.assign||function(t){for(var e=1;e=0||(i[n]=t[n]);return i}(t,["component","childFactory"]),o=l(this.state.children).map(n);return delete r.appear,delete r.enter,delete r.exit,null===e?o:i.default.createElement(e,r,o)},r}(i.default.Component);f.childContextTypes={transitionGroup:r.default.object.isRequired},f.propTypes={},f.defaultProps={component:"div",childFactory:function(t){return t}};var p=(0,o.polyfill)(f);e.default=p,t.exports=e.default},7111:(t,e,n)=>{"use strict";var r=c(n(9435)),i=c(n(6324)),o=c(n(1665)),a=c(n(4943));function c(t){return t&&t.__esModule?t:{default:t}}t.exports={Transition:a.default,TransitionGroup:o.default,ReplaceTransition:i.default,CSSTransition:r.default}},1325:(t,e,n)=>{"use strict";var r=n(4994);e.__esModule=!0,e.default=function(t,e){t.classList?t.classList.add(e):(0,i.default)(t,e)||("string"===typeof t.className?t.className=t.className+" "+e:t.setAttribute("class",(t.className&&t.className.baseVal||"")+" "+e))};var i=r(n(8180));t.exports=e.default},8180:(t,e)=>{"use strict";e.__esModule=!0,e.default=function(t,e){return t.classList?!!e&&t.classList.contains(e):-1!==(" "+(t.className.baseVal||t.className)+" ").indexOf(" "+e+" ")},t.exports=e.default},2854:t=>{"use strict";function e(t,e){return t.replace(new RegExp("(^|\\s)"+e+"(?:\\s|$)","g"),"$1").replace(/\s+/g," ").replace(/^\s*|\s*$/g,"")}t.exports=function(t,n){t.classList?t.classList.remove(n):"string"===typeof t.className?t.className=e(t.className,n):t.setAttribute("class",e(t.className&&t.className.baseVal||"",n))}},8377:(t,e,n)=>{"use strict";e.__esModule=!0,e.getChildMapping=i,e.mergeChildMappings=o,e.getInitialChildMapping=function(t,e){return i(t.children,(function(n){return(0,r.cloneElement)(n,{onExited:e.bind(null,n),in:!0,appear:a(n,"appear",t),enter:a(n,"enter",t),exit:a(n,"exit",t)})}))},e.getNextChildMapping=function(t,e,n){var c=i(t.children),u=o(e,c);return Object.keys(u).forEach((function(i){var o=u[i];if((0,r.isValidElement)(o)){var s=i in e,l=i in c,f=e[i],p=(0,r.isValidElement)(f)&&!f.props.in;!l||s&&!p?l||!s||p?l&&s&&(0,r.isValidElement)(f)&&(u[i]=(0,r.cloneElement)(o,{onExited:n.bind(null,o),in:f.props.in,exit:a(o,"exit",t),enter:a(o,"enter",t)})):u[i]=(0,r.cloneElement)(o,{in:!1}):u[i]=(0,r.cloneElement)(o,{onExited:n.bind(null,o),in:!0,exit:a(o,"exit",t),enter:a(o,"enter",t)})}})),u};var r=n(5043);function i(t,e){var n=Object.create(null);return t&&r.Children.map(t,(function(t){return t})).forEach((function(t){n[t.key]=function(t){return e&&(0,r.isValidElement)(t)?e(t):t}(t)})),n}function o(t,e){function n(n){return n in e?e[n]:t[n]}t=t||{},e=e||{};var r,i=Object.create(null),o=[];for(var a in t)a in e?o.length&&(i[a]=o,o=[]):o.push(a);var c={};for(var u in e){if(i[u])for(r=0;r{"use strict";e.__esModule=!0,e.classNamesShape=e.timeoutsShape=void 0;var r;(r=n(5173))&&r.__esModule;e.timeoutsShape=null;e.classNamesShape=null},7829:(t,e,n)=>{"use strict";n.d(e,{r:()=>gr});var r=n(7002),i=n.n(r),o=n(8990),a=n.n(o),c=n(1629),u=n.n(c),s=n(9889),l=n.n(s),f=n(7424),p=n.n(f),h=n(3097),d=n.n(h),y=n(6604),v=n.n(y),g=n(9686),m=n.n(g),b=n(6361),x=n.n(b),w=n(4052),O=n.n(w),S=n(5043),E=n(8139),_=n.n(E),A=n(6307),j=n(7213),k=n(6015);function M(t,e,n){if(e<1)return[];if(1===e&&void 0===n)return t;for(var r=[],i=0;i1&&void 0!==arguments[1]?arguments[1]:{},n=e.bandAware,r=e.position;if(void 0!==t){if(r)switch(r){case"start":default:return this.scale(t);case"middle":var i=this.bandwidth?this.bandwidth()/2:0;return this.scale(t)+i;case"end":var o=this.bandwidth?this.bandwidth():0;return this.scale(t)+o}if(n){var a=this.bandwidth?this.bandwidth()/2:0;return this.scale(t)+a}return this.scale(t)}}},{key:"isInRange",value:function(t){var e=this.range(),n=e[0],r=e[e.length-1];return n<=r?t>=n&&t<=r:t>=r&&t<=n}}],r=[{key:"create",value:function(e){return new t(e)}}],n&&I(e.prototype,n),r&&I(e,r),Object.defineProperty(e,"prototype",{writable:!1}),t}();R(U,"EPS",1e-4);var F=function(t){var e=Object.keys(t).reduce((function(e,n){return D(D({},e),{},R({},n,U.create(t[n])))}),{});return D(D({},e),{},{apply:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=n.bandAware,i=n.position;return T()(t,(function(t,n){return e[n].apply(t,{bandAware:r,position:i})}))},isInRange:function(t){return i()(t,(function(t,n){return e[n].isInRange(t)}))}})};var z=function(t){var e=t.width,n=t.height,r=function(t){return(t%180+180)%180}(arguments.length>1&&void 0!==arguments[1]?arguments[1]:0),i=r*Math.PI/180,o=Math.atan(n/e),a=i>o&&i=2?(0,A.sA)(b[1].coordinate-b[0].coordinate):1;if(1===O?(n="width"===m?d:y,r="width"===m?d+v:y+g):(n="width"===m?d+v:y+g,r="width"===m?d:y),e){var S=o[w-1],E=u()(a)?a(S.value,w-1):S.value,_="width"===m?H((0,j.Pu)(E,{fontSize:p,letterSpacing:h}),x,i):(0,j.Pu)(E,{fontSize:p,letterSpacing:h})[m],k=O*(S.coordinate+O*_/2-r);b[w-1]=S=q(q({},S),{},{tickCoord:k>0?S.coordinate-k*O:S.coordinate}),O*(S.tickCoord-O*_/2-n)>=0&&O*(S.tickCoord+O*_/2-r)<=0&&(r=S.tickCoord-O*(_/2+l),b[w-1]=q(q({},S),{},{isShow:!0}))}for(var M=e?w-1:w,P=0;P=0&&O*(T.tickCoord+O*I/2-r)<=0&&(n=T.tickCoord+O*(I/2+l),b[P]=q(q({},T),{},{isShow:!0}))}return b}function $(t,e,n){var r=t.tick,i=t.ticks,o=t.viewBox,a=t.minTickGap,c=t.orientation,s=t.interval,l=t.tickFormatter,f=t.unit,p=t.angle;if(!i||!i.length||!r)return[];if((0,A.Et)(s)||k.m.isSsr)return function(t,e){return M(t,e+1)}(i,"number"===typeof s&&(0,A.Et)(s)?s:0);var h=[];return"equidistantPreserveStart"===s?function(t){for(var e=1,n=M(t,e,(function(t){return t.isShow}));e<=t.length;){if(void 0!==n)return n;n=M(t,++e,(function(t){return t.isShow}))}return t.slice(0,1)}(h=G({angle:p,ticks:i,tickFormatter:l,viewBox:o,orientation:c,minTickGap:a,unit:f,fontSize:e,letterSpacing:n})):(h="preserveStart"===s||"preserveStartEnd"===s?G({angle:p,ticks:i,tickFormatter:l,viewBox:o,orientation:c,minTickGap:a,unit:f,fontSize:e,letterSpacing:n},"preserveStartEnd"===s):function(t){var e,n,r=t.angle,i=t.ticks,o=t.tickFormatter,a=t.viewBox,c=t.orientation,s=t.minTickGap,l=t.unit,f=t.fontSize,p=t.letterSpacing,h=a.x,d=a.y,y=a.width,v=a.height,g="top"===c||"bottom"===c?"width":"height",m=l&&"width"===g?(0,j.Pu)(l,{fontSize:f,letterSpacing:p}):{width:0,height:0},b=(i||[]).slice(),x=b.length,w=x>=2?(0,A.sA)(b[1].coordinate-b[0].coordinate):1;1===w?(e="width"===g?h:d,n="width"===g?h+y:d+v):(e="width"===g?h+y:d+v,n="width"===g?h:d);for(var O=x-1;O>=0;O--){var S=b[O],E=u()(o)?o(S.value,x-O-1):S.value,_="width"===g?H((0,j.Pu)(E,{fontSize:f,letterSpacing:p}),m,r):(0,j.Pu)(E,{fontSize:f,letterSpacing:p})[g];if(O===x-1){var k=w*(S.coordinate+w*_/2-n);b[O]=S=q(q({},S),{},{tickCoord:k>0?S.coordinate-k*w:S.coordinate})}else b[O]=S=q(q({},S),{},{tickCoord:S.coordinate});w*(S.tickCoord-w*_/2-e)>=0&&w*(S.tickCoord+w*_/2-n)<=0&&(n=S.tickCoord-w*(_/2+s),b[O]=q(q({},S),{},{isShow:!0}))}return b}({angle:p,ticks:i,tickFormatter:l,viewBox:o,orientation:c,minTickGap:a,unit:f,fontSize:e,letterSpacing:n}),h.filter((function(t){return t.isShow})))}var J=n(4794),Y=n(4020),K=n(977),Z=n.n(K),Q=n(7356);function tt(t){return tt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},tt(t)}function et(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,i,o,a,c=[],u=!0,s=!1;try{if(o=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;u=!1}else for(;!(u=(r=o.call(n)).done)&&(c.push(r.value),c.length!==e);u=!0);}catch(l){s=!0,i=l}finally{try{if(!u&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(s)throw i}}return c}}(t,e)||function(t,e){if(!t)return;if("string"===typeof t)return nt(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return nt(t,e)}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function nt(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);nt.length)&&(e=t.length);for(var n=0,r=new Array(e);n1||Math.abs(t.height-a)>1)&&(i(t.width),c(t.height))}else-1===r&&-1===a||(i(-1),c(-1))}(),function(){document.removeEventListener("keydown",E)}}),[a,r,b,l,h.x,h.y,E]);var j,k,M=function(t){var e=t.key,n=t.tooltipDimension,r=t.viewBoxDimension;if(w&&(0,A.Et)(w[e]))return w[e];var i=b[e]-n-x,o=b[e]+x;return null!==v&&void 0!==v&&v[e]?g[e]?i:o:null!==g&&void 0!==g&&g[e]?iO[e]+r?Math.max(i,O[e]):Math.max(o,O[e])},P=t.payload,T=t.payloadUniqBy,C=t.filterNull,I=t.active,N=t.wrapperStyle,D=t.useTranslate3d,R=t.isAnimationActive,L=t.animationDuration,B=t.animationEasing,U=function(t,e){return!0===t?Z()(e,yt):u()(t)?Z()(e,t):e}(T,C&&P&&P.length?P.filter((function(t){return!m()(t.value)})):P),F=U&&U.length,z=t.content,V=lt({pointerEvents:"none",visibility:!l&&I&&F?"visible":"hidden",position:"absolute",top:0,left:0},N);w&&(0,A.Et)(w.x)&&(0,A.Et)(w.y)?(j=w.x,k=w.y):r>0&&a>0&&b?(j=M({key:"x",tooltipDimension:r,viewBoxDimension:O.width}),k=M({key:"y",tooltipDimension:a,viewBoxDimension:O.height})):V.visibility="hidden",V=lt(lt({},(0,Q.g6)({transform:D?"translate3d(".concat(j,"px, ").concat(k,"px, 0)"):"translate(".concat(j,"px, ").concat(k,"px)")})),V),R&&I&&(V=lt(lt({},(0,Q.g6)({transition:"transform ".concat(L,"ms ").concat(B)})),V));var W=_()(dt,(ft(e={},"".concat(dt,"-right"),(0,A.Et)(j)&&b&&(0,A.Et)(b.x)&&j>=b.x),ft(e,"".concat(dt,"-left"),(0,A.Et)(j)&&b&&(0,A.Et)(b.x)&&j=b.y),ft(e,"".concat(dt,"-top"),(0,A.Et)(k)&&b&&(0,A.Et)(b.y)&&kt.length)&&(e=t.length);for(var n=0,r=new Array(e);n=0?1:-1,u=n>=0?1:-1,s=r>=0&&n>=0||r<0&&n<0?1:0;if(a>0&&i instanceof Array){for(var l=[0,0,0,0],f=0;f<4;f++)l[f]=i[f]>a?a:i[f];o="M".concat(t,",").concat(e+c*l[0]),l[0]>0&&(o+="A ".concat(l[0],",").concat(l[0],",0,0,").concat(s,",").concat(t+u*l[0],",").concat(e)),o+="L ".concat(t+n-u*l[1],",").concat(e),l[1]>0&&(o+="A ".concat(l[1],",").concat(l[1],",0,0,").concat(s,",\n ").concat(t+n,",").concat(e+c*l[1])),o+="L ".concat(t+n,",").concat(e+r-c*l[2]),l[2]>0&&(o+="A ".concat(l[2],",").concat(l[2],",0,0,").concat(s,",\n ").concat(t+n-u*l[2],",").concat(e+r)),o+="L ".concat(t+u*l[3],",").concat(e+r),l[3]>0&&(o+="A ".concat(l[3],",").concat(l[3],",0,0,").concat(s,",\n ").concat(t,",").concat(e+r-c*l[3])),o+="Z"}else if(a>0&&i===+i&&i>0){var p=Math.min(a,i);o="M ".concat(t,",").concat(e+c*p,"\n A ").concat(p,",").concat(p,",0,0,").concat(s,",").concat(t+u*p,",").concat(e,"\n L ").concat(t+n-u*p,",").concat(e,"\n A ").concat(p,",").concat(p,",0,0,").concat(s,",").concat(t+n,",").concat(e+c*p,"\n L ").concat(t+n,",").concat(e+r-c*p,"\n A ").concat(p,",").concat(p,",0,0,").concat(s,",").concat(t+n-u*p,",").concat(e+r,"\n L ").concat(t+u*p,",").concat(e+r,"\n A ").concat(p,",").concat(p,",0,0,").concat(s,",").concat(t,",").concat(e+r-c*p," Z")}else o="M ".concat(t,",").concat(e," h ").concat(n," v ").concat(r," h ").concat(-n," Z");return o},Ct=function(t,e){if(!t||!e)return!1;var n=t.x,r=t.y,i=e.x,o=e.y,a=e.width,c=e.height;if(Math.abs(a)>0&&Math.abs(c)>0){var u=Math.min(i,i+a),s=Math.max(i,i+a),l=Math.min(o,o+c),f=Math.max(o,o+c);return n>=u&&n<=s&&r>=l&&r<=f}return!1},It=function(t){var e=(0,S.useRef)(),n=Mt((0,S.useState)(-1),2),r=n[0],i=n[1];(0,S.useLayoutEffect)((function(){if(e.current&&e.current.getTotalLength)try{var t=e.current.getTotalLength();t&&i(t)}catch(n){}}),[]);var o=t.x,a=t.y,c=t.width,u=t.height,s=t.radius,l=t.className,f=t.animationEasing,p=t.animationDuration,h=t.animationBegin,d=t.isAnimationActive,y=t.isUpdateAnimationActive;if(o!==+o||a!==+a||c!==+c||u!==+u||0===c||0===u)return null;var v=_()("recharts-rectangle",l);return y?S.createElement(Q.Ay,{canBegin:r>0,from:{width:c,height:u,x:o,y:a},to:{width:c,height:u,x:o,y:a},duration:p,animationEasing:f,isActive:y},(function(n){var i=n.width,o=n.height,a=n.x,c=n.y;return S.createElement(Q.Ay,{canBegin:r>0,from:"0px ".concat(-1===r?1:r,"px"),to:"".concat(r,"px 0px"),attributeName:"strokeDasharray",begin:h,duration:p,isActive:d,easing:f},S.createElement("path",kt({},(0,xt.J9)(t,!0),{className:v,d:Tt(a,c,i,o,s),ref:e})))})):S.createElement("path",kt({},(0,xt.J9)(t,!0),{className:v,d:Tt(o,a,c,u,s)}))};It.defaultProps={x:0,y:0,width:0,height:0,radius:0,isAnimationActive:!1,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"};var Nt=n(5248),Dt=n(2733),Rt=n(2647),Lt=["viewBox"],Bt=["viewBox"],Ut=["ticks"];function Ft(t){return Ft="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ft(t)}function zt(){return zt=Object.assign?Object.assign.bind():function(t){for(var e=1;e=0||(i[n]=t[n]);return i}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(i[n]=t[n])}return i}function Xt(t,e){for(var n=0;n0?o(this.props):o(l)),r<=0||i<=0||!f||!f.length?null:S.createElement(Y.W,{className:_()("recharts-cartesian-axis",a),ref:function(e){t.layerReference=e}},n&&this.renderAxisLine(),this.renderTicks(f,this.state.fontSize,this.state.letterSpacing),Rt.J.renderCallByParent(this.props))}}])&&Xt(e.prototype,n),r&&Xt(e,r),Object.defineProperty(e,"prototype",{writable:!1}),o}(S.Component);Jt(Kt,"displayName","CartesianAxis"),Jt(Kt,"defaultProps",{x:0,y:0,width:0,height:0,viewBox:{x:0,y:0,width:0,height:0},orientation:"bottom",ticks:[],stroke:"#666",tickLine:!0,axisLine:!0,tick:!0,mirror:!1,minTickGap:5,tickSize:6,tickMargin:2,interval:"preserveEnd"});var Zt=n(4480),Qt=n(1756);function te(t){return te="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},te(t)}function ee(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function ne(t){for(var e=1;e0&&e.handleDrag(t.changedTouches[0])})),de(pe(e),"handleDragEnd",(function(){e.setState({isTravellerMoving:!1,isSlideMoving:!1}),e.detachDragEndListener()})),de(pe(e),"handleLeaveWrapper",(function(){(e.state.isTravellerMoving||e.state.isSlideMoving)&&(e.leaveTimer=window.setTimeout(e.handleDragEnd,e.props.leaveTimeOut))})),de(pe(e),"handleEnterSlideOrTraveller",(function(){e.setState({isTextActive:!0})})),de(pe(e),"handleLeaveSlideOrTraveller",(function(){e.setState({isTextActive:!1})})),de(pe(e),"handleSlideDragStart",(function(t){var n=ve(t)?t.changedTouches[0]:t;e.setState({isTravellerMoving:!1,isSlideMoving:!0,slideMoveStartX:n.pageX}),e.attachDragEndListener()})),e.travellerDragStartHandlers={startX:e.handleTravellerDragStart.bind(pe(e),"startX"),endX:e.handleTravellerDragStart.bind(pe(e),"endX")},e.state={},e}return e=o,r=[{key:"renderDefaultTraveller",value:function(t){var e=t.x,n=t.y,r=t.width,i=t.height,o=t.stroke,a=Math.floor(n+i/2)-1;return S.createElement(S.Fragment,null,S.createElement("rect",{x:e,y:n,width:r,height:i,fill:o,stroke:"none"}),S.createElement("line",{x1:e+1,y1:a,x2:e+r-1,y2:a,fill:"none",stroke:"#fff"}),S.createElement("line",{x1:e+1,y1:a+2,x2:e+r-1,y2:a+2,fill:"none",stroke:"#fff"}))}},{key:"renderTraveller",value:function(t,e){return S.isValidElement(t)?S.cloneElement(t,e):u()(t)?t(e):o.renderDefaultTraveller(e)}},{key:"getDerivedStateFromProps",value:function(t,e){var n=t.data,r=t.width,i=t.x,o=t.travellerWidth,a=t.updateId,c=t.startIndex,u=t.endIndex;if(n!==e.prevData||a!==e.prevUpdateId)return ue({prevData:n,prevTravellerWidth:o,prevUpdateId:a,prevX:i,prevWidth:r},n&&n.length?function(t){var e=t.data,n=t.startIndex,r=t.endIndex,i=t.x,o=t.width,a=t.travellerWidth;if(!e||!e.length)return{};var c=e.length,u=(0,Zt.z)().domain(v()(0,c)).range([i,i+o-a]),s=u.domain().map((function(t){return u(t)}));return{isTextActive:!1,isSlideMoving:!1,isTravellerMoving:!1,startX:u(n),endX:u(r),scale:u,scaleValues:s}}({data:n,width:r,x:i,travellerWidth:o,startIndex:c,endIndex:u}):{scale:null,scaleValues:null});if(e.scale&&(r!==e.prevWidth||i!==e.prevX||o!==e.prevTravellerWidth)){e.scale.range([i,i+r-o]);var s=e.scale.domain().map((function(t){return e.scale(t)}));return{prevData:n,prevTravellerWidth:o,prevUpdateId:a,prevX:i,prevWidth:r,startX:e.scale(t.startIndex),endX:e.scale(t.endIndex),scaleValues:s}}return null}},{key:"getIndexInRange",value:function(t,e){for(var n=0,r=t.length-1;r-n>1;){var i=Math.floor((n+r)/2);t[i]>e?r=i:n=i}return e>=t[r]?r:n}}],(n=[{key:"componentWillUnmount",value:function(){this.leaveTimer&&(clearTimeout(this.leaveTimer),this.leaveTimer=null),this.detachDragEndListener()}},{key:"getIndex",value:function(t){var e=t.startX,n=t.endX,r=this.state.scaleValues,i=this.props,a=i.gap,c=i.data.length-1,u=Math.min(e,n),s=Math.max(e,n),l=o.getIndexInRange(r,u),f=o.getIndexInRange(r,s);return{startIndex:l-l%a,endIndex:f===c?c:f-f%a}}},{key:"getTextOfTick",value:function(t){var e=this.props,n=e.data,r=e.tickFormatter,i=e.dataKey,o=(0,Qt.kr)(n[t],i,t);return u()(r)?r(o,t):o}},{key:"attachDragEndListener",value:function(){window.addEventListener("mouseup",this.handleDragEnd,!0),window.addEventListener("touchend",this.handleDragEnd,!0),window.addEventListener("mousemove",this.handleDrag,!0)}},{key:"detachDragEndListener",value:function(){window.removeEventListener("mouseup",this.handleDragEnd,!0),window.removeEventListener("touchend",this.handleDragEnd,!0),window.removeEventListener("mousemove",this.handleDrag,!0)}},{key:"handleSlideDrag",value:function(t){var e=this.state,n=e.slideMoveStartX,r=e.startX,i=e.endX,o=this.props,a=o.x,c=o.width,u=o.travellerWidth,s=o.startIndex,l=o.endIndex,f=o.onChange,p=t.pageX-n;p>0?p=Math.min(p,a+c-u-i,a+c-u-r):p<0&&(p=Math.max(p,a-r,a-i));var h=this.getIndex({startX:r+p,endX:i+p});h.startIndex===s&&h.endIndex===l||!f||f(h),this.setState({startX:r+p,endX:i+p,slideMoveStartX:t.pageX})}},{key:"handleTravellerDragStart",value:function(t,e){var n=ve(e)?e.changedTouches[0]:e;this.setState({isSlideMoving:!1,isTravellerMoving:!0,movingTravellerId:t,brushMoveStartX:n.pageX}),this.attachDragEndListener()}},{key:"handleTravellerMove",value:function(t){var e,n=this.state,r=n.brushMoveStartX,i=n.movingTravellerId,o=n.endX,a=n.startX,c=this.state[i],u=this.props,s=u.x,l=u.width,f=u.travellerWidth,p=u.onChange,h=u.gap,d=u.data,y={startX:this.state.startX,endX:this.state.endX},v=t.pageX-r;v>0?v=Math.min(v,s+l-f-c):v<0&&(v=Math.max(v,s-c)),y[i]=c+v;var g=this.getIndex(y),m=g.startIndex,b=g.endIndex;this.setState((de(e={},i,c+v),de(e,"brushMoveStartX",t.pageX),e),(function(){p&&function(){var t=d.length-1;return"startX"===i&&(o>a?m%h===0:b%h===0)||oa?b%h===0:m%h===0)||o>a&&b===t}()&&p(g)}))}},{key:"renderBackground",value:function(){var t=this.props,e=t.x,n=t.y,r=t.width,i=t.height,o=t.fill,a=t.stroke;return S.createElement("rect",{stroke:a,fill:o,x:e,y:n,width:r,height:i})}},{key:"renderPanorama",value:function(){var t=this.props,e=t.x,n=t.y,r=t.width,i=t.height,o=t.data,a=t.children,c=t.padding,u=S.Children.only(a);return u?S.cloneElement(u,{x:e,y:n,width:r,height:i,margin:c,compact:!0,data:o}):null}},{key:"renderTravellerLayer",value:function(t,e){var n=this.props,r=n.y,i=n.travellerWidth,a=n.height,c=n.traveller,u=Math.max(t,this.props.x),s=ue(ue({},(0,xt.J9)(this.props)),{},{x:u,y:r,width:i,height:a});return S.createElement(Y.W,{className:"recharts-brush-traveller",onMouseEnter:this.handleEnterSlideOrTraveller,onMouseLeave:this.handleLeaveSlideOrTraveller,onMouseDown:this.travellerDragStartHandlers[e],onTouchStart:this.travellerDragStartHandlers[e],style:{cursor:"col-resize"}},o.renderTraveller(c,s))}},{key:"renderSlide",value:function(t,e){var n=this.props,r=n.y,i=n.height,o=n.stroke,a=n.travellerWidth,c=Math.min(t,e)+a,u=Math.max(Math.abs(e-t)-a,0);return S.createElement("rect",{className:"recharts-brush-slide",onMouseEnter:this.handleEnterSlideOrTraveller,onMouseLeave:this.handleLeaveSlideOrTraveller,onMouseDown:this.handleSlideDragStart,onTouchStart:this.handleSlideDragStart,style:{cursor:"move"},stroke:"none",fill:o,fillOpacity:.2,x:c,y:r,width:u,height:i})}},{key:"renderText",value:function(){var t=this.props,e=t.startIndex,n=t.endIndex,r=t.y,i=t.height,o=t.travellerWidth,a=t.stroke,c=this.state,u=c.startX,s=c.endX,l={pointerEvents:"none",fill:a};return S.createElement(Y.W,{className:"recharts-brush-texts"},S.createElement(Dt.E,ae({textAnchor:"end",verticalAnchor:"middle",x:Math.min(u,s)-5,y:r+i/2},l),this.getTextOfTick(e)),S.createElement(Dt.E,ae({textAnchor:"start",verticalAnchor:"middle",x:Math.max(u,s)+o+5,y:r+i/2},l),this.getTextOfTick(n)))}},{key:"render",value:function(){var t=this.props,e=t.data,n=t.className,r=t.children,i=t.x,o=t.y,a=t.width,c=t.height,u=t.alwaysShowText,s=this.state,l=s.startX,f=s.endX,p=s.isTextActive,h=s.isSlideMoving,d=s.isTravellerMoving;if(!e||!e.length||!(0,A.Et)(i)||!(0,A.Et)(o)||!(0,A.Et)(a)||!(0,A.Et)(c)||a<=0||c<=0)return null;var y=_()("recharts-brush",n),v=1===S.Children.count(r),g=function(t,e){if(!t)return null;var n=t.replace(/(\w)/,(function(t){return t.toUpperCase()})),r=ie.reduce((function(t,r){return ne(ne({},t),{},re({},r+n,e))}),{});return r[t]=e,r}("userSelect","none");return S.createElement(Y.W,{className:y,onMouseLeave:this.handleLeaveWrapper,onTouchMove:this.handleTouchMove,style:g},this.renderBackground(),v&&this.renderPanorama(),this.renderSlide(l,f),this.renderTravellerLayer(l,"startX"),this.renderTravellerLayer(f,"endX"),(p||h||d||u)&&this.renderText())}}])&&se(e.prototype,n),r&&se(e,r),Object.defineProperty(e,"prototype",{writable:!1}),o}(S.PureComponent);de(ge,"displayName","Brush"),de(ge,"defaultProps",{height:40,travellerWidth:5,gap:1,fill:"#fff",stroke:"#666",padding:{top:1,right:1,bottom:1,left:1},leaveTimeOut:1e3,alwaysShowText:!1});var me=function(t,e){var n=t.alwaysShow,r=t.ifOverflow;return n&&(r="extendDomain"),r===e},be=n(155);function xe(t){return xe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},xe(t)}function we(){return we=Object.assign?Object.assign.bind():function(t){for(var e=1;et.length)&&(e=t.length);for(var n=0,r=new Array(e);nt.length)&&(e=t.length);for(var n=0,r=new Array(e);n=0||(i[n]=t[n]);return i}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(i[n]=t[n])}return i}function cn(t,e){for(var n=0;nt.length)&&(e=t.length);for(var n=0,r=new Array(e);n0?a:n&&n.props&&n.props.data&&n.props.data.length>0?n.props.data:t&&t.length&&(0,A.Et)(i)&&(0,A.Et)(o)?t.slice(i,o+1):[]};function _n(t){return"number"===t?[0,"auto"]:void 0}var An=function(t,e,n,r){var i=t.graphicalItems,o=t.tooltipAxis,a=En(e,t);return n<0||!i||!i.length||n>=a.length?null:i.reduce((function(t,e){if(e.props.hide)return t;var i,c=e.props.data;if(o.dataKey&&!o.allowDuplicatedCategory){var u=void 0===c?a:c;i=(0,A.eP)(u,o.dataKey,r)}else i=c&&c[n]||a[n];return i?[].concat(pn(t),[(0,Qt.zb)(e,i)]):t}),[])},jn=function(t,e,n,r){var i=r||{x:t.chartX,y:t.chartY},o=function(t,e){return"horizontal"===e?t.x:"vertical"===e?t.y:"centric"===e?t.angle:t.radius}(i,n),a=t.orderedTooltipTicks,c=t.tooltipAxis,u=t.tooltipTicks,s=(0,Qt.gH)(o,a,u,c);if(s>=0&&u){var l=u[s]&&u[s].value,f=An(t,e,s,l),p=function(t,e,n,r){var i=e.find((function(t){return t&&t.index===n}));if(i){if("horizontal"===t)return{x:i.coordinate,y:r.y};if("vertical"===t)return{x:r.x,y:i.coordinate};if("centric"===t){var o=i.coordinate,a=r.radius;return vn(vn(vn({},r),(0,Xe.IZ)(r.cx,r.cy,a,o)),{},{angle:o,radius:a})}var c=i.coordinate,u=r.angle;return vn(vn(vn({},r),(0,Xe.IZ)(r.cx,r.cy,c,u)),{},{angle:u,radius:c})}return xn}(n,a,s,i);return{activeTooltipIndex:s,activeLabel:l,activePayload:f,activeCoordinate:p}}return null},kn=function(t,e){var n=e.axes,r=e.graphicalItems,i=e.axisType,o=e.axisIdKey,a=e.stackGroups,c=e.dataStartIndex,u=e.dataEndIndex,s=t.layout,l=t.children,f=t.stackOffset,p=(0,Qt._L)(s,i);return n.reduce((function(e,n){var h,d=n.props,y=d.type,g=d.dataKey,b=d.allowDataOverflow,x=d.allowDuplicatedCategory,w=d.scale,O=d.ticks,S=d.includeHidden,E=n.props[o];if(e[E])return e;var _,j,k,M=En(t.data,{graphicalItems:r.filter((function(t){return t.props[o]===E})),dataStartIndex:c,dataEndIndex:u}),P=M.length;(function(t,e,n){if("number"===n&&!0===e&&Array.isArray(t)){var r=null===t||void 0===t?void 0:t[0],i=null===t||void 0===t?void 0:t[1];if(r&&i&&(0,A.Et)(r)&&(0,A.Et)(i))return!0}return!1})(n.props.domain,b,y)&&(_=(0,Qt.AQ)(n.props.domain,null,b),!p||"number"!==y&&"auto"===w||(k=(0,Qt.Ay)(M,g,"category")));var T=_n(y);if(!_||0===_.length){var C,I=null!==(C=n.props.domain)&&void 0!==C?C:T;if(g){if(_=(0,Qt.Ay)(M,g,y),"category"===y&&p){var N=(0,A.CG)(_);x&&N?(j=_,_=v()(0,P)):x||(_=(0,Qt.KC)(I,_,n).reduce((function(t,e){return t.indexOf(e)>=0?t:[].concat(pn(t),[e])}),[]))}else if("category"===y)_=x?_.filter((function(t){return""!==t&&!m()(t)})):(0,Qt.KC)(I,_,n).reduce((function(t,e){return t.indexOf(e)>=0||""===e||m()(e)?t:[].concat(pn(t),[e])}),[]);else if("number"===y){var D=(0,Qt.A1)(M,r.filter((function(t){return t.props[o]===E&&(S||!t.props.hide)})),g,i,s);D&&(_=D)}!p||"number"!==y&&"auto"===w||(k=(0,Qt.Ay)(M,g,"category"))}else _=p?v()(0,P):a&&a[E]&&a[E].hasStack&&"number"===y?"expand"===f?[0,1]:(0,Qt.Mk)(a[E].stackGroups,c,u):(0,Qt.vf)(M,r.filter((function(t){return t.props[o]===E&&(S||!t.props.hide)})),y,s,!0);if("number"===y)_=qe(l,_,E,i,O),I&&(_=(0,Qt.AQ)(I,_,b));else if("category"===y&&I){var R=I;_.every((function(t){return R.indexOf(t)>=0}))&&(_=R)}}return vn(vn({},e),{},gn({},E,vn(vn({},n.props),{},{axisType:i,domain:_,categoricalDomain:k,duplicateDomain:j,originalDomain:null!==(h=n.props.domain)&&void 0!==h?h:T,isCategorical:p,layout:s})))}),{})},Mn=function(t,e){var n=e.axisType,r=void 0===n?"xAxis":n,i=e.AxisComp,o=e.graphicalItems,a=e.stackGroups,c=e.dataStartIndex,u=e.dataEndIndex,s=t.children,l="".concat(r,"Id"),f=(0,xt.aS)(s,i),p={};return f&&f.length?p=kn(t,{axes:f,graphicalItems:o,axisType:r,axisIdKey:l,stackGroups:a,dataStartIndex:c,dataEndIndex:u}):o&&o.length&&(p=function(t,e){var n=e.graphicalItems,r=e.Axis,i=e.axisType,o=e.axisIdKey,a=e.stackGroups,c=e.dataStartIndex,u=e.dataEndIndex,s=t.layout,l=t.children,f=En(t.data,{graphicalItems:n,dataStartIndex:c,dataEndIndex:u}),p=f.length,h=(0,Qt._L)(s,i),y=-1;return n.reduce((function(t,e){var g,m=e.props[o],b=_n("number");return t[m]?t:(y++,h?g=v()(0,p):a&&a[m]&&a[m].hasStack?(g=(0,Qt.Mk)(a[m].stackGroups,c,u),g=qe(l,g,m,i)):(g=(0,Qt.AQ)(b,(0,Qt.vf)(f,n.filter((function(t){return t.props[o]===m&&!t.props.hide})),"number",s),r.defaultProps.allowDataOverflow),g=qe(l,g,m,i)),vn(vn({},t),{},gn({},m,vn(vn({axisType:i},r.defaultProps),{},{hide:!0,orientation:d()(bn,"".concat(i,".").concat(y%2),null),domain:g,originalDomain:b,isCategorical:h,layout:s}))))}),{})}(t,{Axis:i,graphicalItems:o,axisType:r,axisIdKey:l,stackGroups:a,dataStartIndex:c,dataEndIndex:u})),p},Pn=function(t){var e,n,r=t.children,i=t.defaultShowTooltip,o=(0,xt.BU)(r,ge);return{chartX:0,chartY:0,dataStartIndex:o&&o.props&&o.props.startIndex||0,dataEndIndex:void 0!==(null===o||void 0===o||null===(e=o.props)||void 0===e?void 0:e.endIndex)?null===o||void 0===o||null===(n=o.props)||void 0===n?void 0:n.endIndex:t.data&&t.data.length-1||0,activeTooltipIndex:-1,isTooltipActive:!m()(i)&&i}},Tn=function(t){return"horizontal"===t?{numericAxisName:"yAxis",cateAxisName:"xAxis"}:"vertical"===t?{numericAxisName:"xAxis",cateAxisName:"yAxis"}:"centric"===t?{numericAxisName:"radiusAxis",cateAxisName:"angleAxis"}:{numericAxisName:"angleAxis",cateAxisName:"radiusAxis"}},Cn=["points","className","baseLinePoints","connectNulls"];function In(){return In=Object.assign?Object.assign.bind():function(t){for(var e=1;e=0||(i[n]=t[n]);return i}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(i[n]=t[n])}return i}function Dn(t){return function(t){if(Array.isArray(t))return Rn(t)}(t)||function(t){if("undefined"!==typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(!t)return;if("string"===typeof t)return Rn(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Rn(t,e)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Rn(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n0&&void 0!==arguments[0]?arguments[0]:[],e=[[]];return t.forEach((function(t){Ln(t)?e[e.length-1].push(t):e[e.length-1].length>0&&e.push([])})),Ln(t[0])&&e[e.length-1].push(t[0]),e[e.length-1].length<=0&&(e=e.slice(0,-1)),e}(t);e&&(n=[n.reduce((function(t,e){return[].concat(Dn(t),Dn(e))}),[])]);var r=n.map((function(t){return t.reduce((function(t,e,n){return"".concat(t).concat(0===n?"M":"L").concat(e.x,",").concat(e.y)}),"")})).join("");return 1===n.length?"".concat(r,"Z"):r},Un=function(t){var e=t.points,n=t.className,r=t.baseLinePoints,i=t.connectNulls,o=Nn(t,Cn);if(!e||!e.length)return null;var a=_()("recharts-polygon",n);if(r&&r.length){var c=o.stroke&&"none"!==o.stroke,u=function(t,e,n){var r=Bn(t,n);return"".concat("Z"===r.slice(-1)?r.slice(0,-1):r,"L").concat(Bn(e.reverse(),n).slice(1))}(e,r,i);return S.createElement("g",{className:a},S.createElement("path",In({},(0,xt.J9)(o,!0),{fill:"Z"===u.slice(-1)?o.fill:"none",stroke:"none",d:u})),c?S.createElement("path",In({},(0,xt.J9)(o,!0),{fill:"none",d:Bn(e,i)})):null,c?S.createElement("path",In({},(0,xt.J9)(o,!0),{fill:"none",d:Bn(r,i)})):null)}var s=Bn(e,i);return S.createElement("path",In({},(0,xt.J9)(o,!0),{fill:"Z"===s.slice(-1)?o.fill:"none",className:a,d:s}))};function Fn(t){return Fn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Fn(t)}function zn(){return zn=Object.assign?Object.assign.bind():function(t){for(var e=1;eKn?"outer"===e?"start":"end":n<-Kn?"outer"===e?"end":"start":"middle"}},{key:"renderAxisLine",value:function(){var t=this.props,e=t.cx,n=t.cy,r=t.radius,i=t.axisLine,o=t.axisLineType,a=Wn(Wn({},(0,xt.J9)(this.props)),{},{fill:"none"},(0,xt.J9)(i));if("circle"===o)return S.createElement(jt,zn({className:"recharts-polar-angle-axis-line"},a,{cx:e,cy:n,r:r}));var c=this.props.ticks.map((function(t){return(0,Xe.IZ)(e,n,r,t.coordinate)}));return S.createElement(Un,zn({className:"recharts-polar-angle-axis-line"},a,{points:c}))}},{key:"renderTicks",value:function(){var t=this,e=this.props,n=e.ticks,r=e.tick,i=e.tickLine,a=e.tickFormatter,c=e.stroke,u=(0,xt.J9)(this.props),s=(0,xt.J9)(r),l=Wn(Wn({},u),{},{fill:"none"},(0,xt.J9)(i)),f=n.map((function(e,n){var f=t.getTickLineCoord(e),p=Wn(Wn(Wn({textAnchor:t.getTickTextAnchor(e)},u),{},{stroke:"none",fill:c},s),{},{index:n,payload:e,x:f.x2,y:f.y2});return S.createElement(Y.W,zn({className:"recharts-polar-angle-axis-tick",key:"tick-".concat(n)},(0,_t.XC)(t.props,e,n)),i&&S.createElement("line",zn({className:"recharts-polar-angle-axis-tick-line"},l,f)),r&&o.renderTickItem(r,p,a?a(e.value,n):e.value))}));return S.createElement(Y.W,{className:"recharts-polar-angle-axis-ticks"},f)}},{key:"render",value:function(){var t=this.props,e=t.ticks,n=t.radius,r=t.axisLine;return n<=0||!e||!e.length?null:S.createElement(Y.W,{className:"recharts-polar-angle-axis"},r&&this.renderAxisLine(),this.renderTicks())}}])&&qn(e.prototype,n),r&&qn(e,r),Object.defineProperty(e,"prototype",{writable:!1}),o}(S.PureComponent);$n(Zn,"displayName","PolarAngleAxis"),$n(Zn,"axisType","angleAxis"),$n(Zn,"defaultProps",{type:"category",angleAxisId:0,scale:"auto",cx:0,cy:0,orientation:"outer",axisLine:!0,tickLine:!0,tickSize:8,tick:!0,hide:!1,allowDuplicatedCategory:!0});var Qn=n(9364),tr=n.n(Qn),er=n(2794),nr=n.n(er),rr=["cx","cy","angle","ticks","axisLine"],ir=["ticks","tick","angle","tickFormatter","stroke"];function or(t){return or="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},or(t)}function ar(){return ar=Object.assign?Object.assign.bind():function(t){for(var e=1;e=0||(i[n]=t[n]);return i}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(i[n]=t[n])}return i}function lr(t,e){for(var n=0;n=0}))}(n),b=g&&(0,Qt.tA)({barSize:u,stackGroups:r}),x=[];return n.forEach((function(n,u){var d=En(t.data,{dataStartIndex:a,dataEndIndex:c},n),g=n.props,w=g.dataKey,O=g.maxBarSize,S=n.props["".concat(y,"Id")],E=n.props["".concat(v,"Id")],_=h.reduce((function(t,r){var i,o=e["".concat(r.axisType,"Map")],a=n.props["".concat(r.axisType,"Id")],c=o&&o[a];return vn(vn({},t),{},(gn(i={},r.axisType,c),gn(i,"".concat(r.axisType,"Ticks"),(0,Qt.Rh)(c)),i))}),{}),A=_[v],j=_["".concat(v,"Ticks")],k=r&&r[S]&&r[S].hasStack&&(0,Qt.kA)(n,r[S].stackGroups),M=(0,xt.Mn)(n.type).indexOf("Bar")>=0,P=(0,Qt.Hj)(A,j),T=[];if(M){var C,I,N=m()(O)?p:O,D=null!==(C=null!==(I=(0,Qt.Hj)(A,j,!0))&&void 0!==I?I:N)&&void 0!==C?C:0;T=(0,Qt.BX)({barGap:l,barCategoryGap:f,bandSize:D!==P?D:P,sizeList:b[E],maxBarSize:N}),D!==P&&(T=T.map((function(t){return vn(vn({},t),{},{position:vn(vn({},t.position),{},{offset:t.position.offset-D/2})})})))}var R,L=n&&n.type&&n.type.getComposedData;L&&x.push({props:vn(vn({},L(vn(vn({},_),{},{displayedData:d,props:t,dataKey:w,item:n,bandSize:P,barPosition:T,offset:i,stackedData:k,layout:s,dataStartIndex:a,dataEndIndex:c}))),{},(R={key:n.key||"item-".concat(u)},gn(R,y,_[y]),gn(R,v,_[v]),gn(R,"animationId",o),R)),childIndex:(0,xt.AW)(n,t.children),item:n})})),x},w=function(t,e){var i=t.props,o=t.dataStartIndex,a=t.dataEndIndex,c=t.updateId;if(!(0,xt.Me)({props:i}))return null;var u=i.children,s=i.layout,l=i.stackOffset,f=i.data,y=i.reverseStackOrder,g=Tn(s),m=g.numericAxisName,x=g.cateAxisName,w=(0,xt.aS)(u,r),O=(0,Qt.Mn)(f,w,"".concat(m,"Id"),"".concat(x,"Id"),l,y),S=h.reduce((function(t,e){var n="".concat(e.axisType,"Map");return vn(vn({},t),{},gn({},n,Mn(i,vn(vn({},e),{},{graphicalItems:w,stackGroups:e.axisType===m&&O,dataStartIndex:o,dataEndIndex:a}))))}),{}),E=function(t,e){var n=t.props,r=t.graphicalItems,i=t.xAxisMap,o=void 0===i?{}:i,a=t.yAxisMap,c=void 0===a?{}:a,u=n.width,s=n.height,l=n.children,f=n.margin||{},p=(0,xt.BU)(l,ge),h=(0,xt.BU)(l,mt.s),y=Object.keys(c).reduce((function(t,e){var n=c[e],r=n.orientation;return n.mirror||n.hide?t:vn(vn({},t),{},gn({},r,t[r]+n.width))}),{left:f.left||0,right:f.right||0}),v=Object.keys(o).reduce((function(t,e){var n=o[e],r=n.orientation;return n.mirror||n.hide?t:vn(vn({},t),{},gn({},r,d()(t,"".concat(r))+n.height))}),{top:f.top||0,bottom:f.bottom||0}),g=vn(vn({},v),y),m=g.bottom;return p&&(g.bottom+=p.props.height||ge.defaultProps.height),h&&e&&(g=(0,Qt.s0)(g,r,n,e)),vn(vn({brushBottom:m},g),{},{width:u-g.left-g.right,height:s-g.top-g.bottom})}(vn(vn({},S),{},{props:i,graphicalItems:w}),null===e||void 0===e?void 0:e.legendBBox);Object.keys(S).forEach((function(t){S[t]=v(i,S[t],E,t.replace("Map",""),n)}));var _=function(t){var e=(0,A.lX)(t),n=(0,Qt.Rh)(e,!1,!0);return{tooltipTicks:n,orderedTooltipTicks:p()(n,(function(t){return t.coordinate})),tooltipAxis:e,tooltipAxisBandSize:(0,Qt.Hj)(e,n)}}(S["".concat(x,"Map")]),j=b(i,vn(vn({},S),{},{dataStartIndex:o,dataEndIndex:a,updateId:c,graphicalItems:w,stackGroups:O,offset:E}));return vn(vn({formattedGraphicalItems:j,graphicalItems:w,offset:E,stackGroups:O},_),S)};return e=function(t){!function(t,e){if("function"!==typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&un(t,e)}(p,t);var e,r,o,s=sn(p);function p(t){var e;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,p),gn(ln(e=s.call(this,t)),"accessibilityManager",new Qe),gn(ln(e),"clearDeferId",(function(){!m()(e.deferId)&&Sn&&Sn(e.deferId),e.deferId=null})),gn(ln(e),"handleLegendBBoxUpdate",(function(t){if(t){var n=e.state,r=n.dataStartIndex,i=n.dataEndIndex,o=n.updateId;e.setState(vn({legendBBox:t},w({props:e.props,dataStartIndex:r,dataEndIndex:i,updateId:o},vn(vn({},e.state),{},{legendBBox:t}))))}})),gn(ln(e),"handleReceiveSyncEvent",(function(t,n,r){e.props.syncId===t&&n!==e.uniqueChartId&&(e.clearDeferId(),e.deferId=On&&On(e.applySyncEvent.bind(ln(e),r)))})),gn(ln(e),"handleBrushChange",(function(t){var n=t.startIndex,r=t.endIndex;if(n!==e.state.dataStartIndex||r!==e.state.dataEndIndex){var i=e.state.updateId;e.setState((function(){return vn({dataStartIndex:n,dataEndIndex:r},w({props:e.props,dataStartIndex:n,dataEndIndex:r,updateId:i},e.state))})),e.triggerSyncEvent({dataStartIndex:n,dataEndIndex:r})}})),gn(ln(e),"handleMouseEnter",(function(t){var n=e.props.onMouseEnter,r=e.getMouseInfo(t);if(r){var i=vn(vn({},r),{},{isTooltipActive:!0});e.setState(i),e.triggerSyncEvent(i),u()(n)&&n(i,t)}})),gn(ln(e),"triggeredAfterMouseMove",(function(t){var n=e.props.onMouseMove,r=e.getMouseInfo(t),i=r?vn(vn({},r),{},{isTooltipActive:!0}):{isTooltipActive:!1};e.setState(i),e.triggerSyncEvent(i),u()(n)&&n(i,t)})),gn(ln(e),"handleItemMouseEnter",(function(t){e.setState((function(){return{isTooltipActive:!0,activeItem:t,activePayload:t.tooltipPayload,activeCoordinate:t.tooltipPosition||{x:t.cx,y:t.cy}}}))})),gn(ln(e),"handleItemMouseLeave",(function(){e.setState((function(){return{isTooltipActive:!1}}))})),gn(ln(e),"handleMouseMove",(function(t){t&&u()(t.persist)&&t.persist(),e.triggeredAfterMouseMove(t)})),gn(ln(e),"handleMouseLeave",(function(t){var n=e.props.onMouseLeave,r={isTooltipActive:!1};e.setState(r),e.triggerSyncEvent(r),u()(n)&&n(r,t),e.cancelThrottledTriggerAfterMouseMove()})),gn(ln(e),"handleOuterEvent",(function(t){var n=(0,xt.X_)(t),r=d()(e.props,"".concat(n));n&&u()(r)&&r(/.*touch.*/i.test(n)?e.getMouseInfo(t.changedTouches[0]):e.getMouseInfo(t),t)})),gn(ln(e),"handleClick",(function(t){var n=e.props.onClick,r=e.getMouseInfo(t);if(r){var i=vn(vn({},r),{},{isTooltipActive:!0});e.setState(i),e.triggerSyncEvent(i),u()(n)&&n(i,t)}})),gn(ln(e),"handleMouseDown",(function(t){var n=e.props.onMouseDown;u()(n)&&n(e.getMouseInfo(t),t)})),gn(ln(e),"handleMouseUp",(function(t){var n=e.props.onMouseUp;u()(n)&&n(e.getMouseInfo(t),t)})),gn(ln(e),"handleTouchMove",(function(t){null!=t.changedTouches&&t.changedTouches.length>0&&e.handleMouseMove(t.changedTouches[0])})),gn(ln(e),"handleTouchStart",(function(t){null!=t.changedTouches&&t.changedTouches.length>0&&e.handleMouseDown(t.changedTouches[0])})),gn(ln(e),"handleTouchEnd",(function(t){null!=t.changedTouches&&t.changedTouches.length>0&&e.handleMouseUp(t.changedTouches[0])})),gn(ln(e),"verticalCoordinatesGenerator",(function(t){var e=t.xAxis,n=t.width,r=t.height,i=t.offset;return(0,Qt.PW)($(vn(vn(vn({},Kt.defaultProps),e),{},{ticks:(0,Qt.Rh)(e,!0),viewBox:{x:0,y:0,width:n,height:r}})),i.left,i.left+i.width)})),gn(ln(e),"horizontalCoordinatesGenerator",(function(t){var e=t.yAxis,n=t.width,r=t.height,i=t.offset;return(0,Qt.PW)($(vn(vn(vn({},Kt.defaultProps),e),{},{ticks:(0,Qt.Rh)(e,!0),viewBox:{x:0,y:0,width:n,height:r}})),i.top,i.top+i.height)})),gn(ln(e),"axesTicksGenerator",(function(t){return(0,Qt.Rh)(t,!0)})),gn(ln(e),"renderCursor",(function(t){var r=e.state,i=r.isTooltipActive,o=r.activeCoordinate,a=r.activePayload,c=r.offset,u=r.activeTooltipIndex,s=e.getTooltipEventType();if(!t||!t.props.cursor||!i||!o||"ScatterChart"!==n&&"axis"!==s)return null;var l,f=e.props.layout,p=bt.I;if("ScatterChart"===n)l=o,p=St;else if("BarChart"===n)l=e.getCursorRectangle(),p=It;else if("radial"===f){var h=e.getCursorPoints(),d=h.cx,y=h.cy,v=h.radius;l={cx:d,cy:y,startAngle:h.startAngle,endAngle:h.endAngle,innerRadius:v,outerRadius:v},p=Et.h}else l={points:e.getCursorPoints()},p=bt.I;var g=t.key||"_recharts-cursor",m=vn(vn(vn(vn({stroke:"#ccc",pointerEvents:"none"},c),l),(0,xt.J9)(t.props.cursor)),{},{payload:a,payloadIndex:u,key:g,className:"recharts-tooltip-cursor"});return(0,S.isValidElement)(t.props.cursor)?(0,S.cloneElement)(t.props.cursor,m):(0,S.createElement)(p,m)})),gn(ln(e),"renderPolarAxis",(function(t,n,r){var i=d()(t,"type.axisType"),o=d()(e.state,"".concat(i,"Map")),a=o&&o[t.props["".concat(i,"Id")]];return(0,S.cloneElement)(t,vn(vn({},a),{},{className:i,key:t.key||"".concat(n,"-").concat(r),ticks:(0,Qt.Rh)(a,!0)}))})),gn(ln(e),"renderXAxis",(function(t,n,r){var i=e.state.xAxisMap[t.props.xAxisId];return e.renderAxis(i,t,n,r)})),gn(ln(e),"renderYAxis",(function(t,n,r){var i=e.state.yAxisMap[t.props.yAxisId];return e.renderAxis(i,t,n,r)})),gn(ln(e),"renderGrid",(function(t){var n=e.state,r=n.xAxisMap,o=n.yAxisMap,c=n.offset,u=e.props,s=u.width,l=u.height,f=(0,A.lX)(r),p=a()(o,(function(t){return i()(t.domain,wn)}))||(0,A.lX)(o),h=t.props||{};return(0,S.cloneElement)(t,{key:t.key||"grid",x:(0,A.Et)(h.x)?h.x:c.left,y:(0,A.Et)(h.y)?h.y:c.top,width:(0,A.Et)(h.width)?h.width:c.width,height:(0,A.Et)(h.height)?h.height:c.height,xAxis:f,yAxis:p,offset:c,chartWidth:s,chartHeight:l,verticalCoordinatesGenerator:h.verticalCoordinatesGenerator||e.verticalCoordinatesGenerator,horizontalCoordinatesGenerator:h.horizontalCoordinatesGenerator||e.horizontalCoordinatesGenerator})})),gn(ln(e),"renderPolarGrid",(function(t){var n=t.props,r=n.radialLines,i=n.polarAngles,o=n.polarRadius,a=e.state,c=a.radiusAxisMap,u=a.angleAxisMap,s=(0,A.lX)(c),l=(0,A.lX)(u),f=l.cx,p=l.cy,h=l.innerRadius,d=l.outerRadius;return(0,S.cloneElement)(t,{polarAngles:O()(i)?i:(0,Qt.Rh)(l,!0).map((function(t){return t.coordinate})),polarRadius:O()(o)?o:(0,Qt.Rh)(s,!0).map((function(t){return t.coordinate})),cx:f,cy:p,innerRadius:h,outerRadius:d,key:t.key||"polar-grid",radialLines:r})})),gn(ln(e),"renderLegend",(function(){var t=e.state.formattedGraphicalItems,n=e.props,r=n.children,i=n.width,o=n.height,a=e.props.margin||{},c=i-(a.left||0)-(a.right||0),u=(0,Qt.g1)({children:r,formattedGraphicalItems:t,legendWidth:c,legendContent:y});if(!u)return null;var s=u.item,l=an(u,tn);return(0,S.cloneElement)(s,vn(vn({},l),{},{chartWidth:i,chartHeight:o,margin:a,ref:function(t){e.legendInstance=t},onBBoxUpdate:e.handleLegendBBoxUpdate}))})),gn(ln(e),"renderTooltip",(function(){var t=e.props.children,n=(0,xt.BU)(t,gt);if(!n)return null;var r=e.state,i=r.isTooltipActive,o=r.activeCoordinate,a=r.activePayload,c=r.activeLabel,u=r.offset;return(0,S.cloneElement)(n,{viewBox:vn(vn({},u),{},{x:u.left,y:u.top}),active:i,label:c,payload:i?a:[],coordinate:o})})),gn(ln(e),"renderBrush",(function(t){var n=e.props,r=n.margin,i=n.data,o=e.state,a=o.offset,c=o.dataStartIndex,u=o.dataEndIndex,s=o.updateId;return(0,S.cloneElement)(t,{key:t.key||"_recharts-brush",onChange:(0,Qt.HQ)(e.handleBrushChange,null,t.props.onChange),data:i,x:(0,A.Et)(t.props.x)?t.props.x:a.left,y:(0,A.Et)(t.props.y)?t.props.y:a.top+a.height+a.brushBottom-(r.bottom||0),width:(0,A.Et)(t.props.width)?t.props.width:a.width,startIndex:c,endIndex:u,updateId:"brush-".concat(s)})})),gn(ln(e),"renderReferenceElement",(function(t,n,r){if(!t)return null;var i=ln(e).clipPathId,o=e.state,a=o.xAxisMap,c=o.yAxisMap,u=o.offset,s=t.props,l=s.xAxisId,f=s.yAxisId;return(0,S.cloneElement)(t,{key:t.key||"".concat(n,"-").concat(r),xAxis:a[l],yAxis:c[f],viewBox:{x:u.left,y:u.top,width:u.width,height:u.height},clipPathId:i})})),gn(ln(e),"renderActivePoints",(function(t){var e=t.item,n=t.activePoint,r=t.basePoint,i=t.childIndex,o=t.isRange,a=[],c=e.props.key,u=e.item.props,s=u.activeDot,l=vn(vn({index:i,dataKey:u.dataKey,cx:n.x,cy:n.y,r:4,fill:(0,Qt.Ps)(e.item),strokeWidth:2,stroke:"#fff",payload:n.payload,value:n.value,key:"".concat(c,"-activePoint-").concat(i)},(0,xt.J9)(s)),(0,_t._U)(s));return a.push(p.renderActiveDot(s,l)),r?a.push(p.renderActiveDot(s,vn(vn({},l),{},{cx:r.x,cy:r.y,key:"".concat(c,"-basePoint-").concat(i)}))):o&&a.push(null),a})),gn(ln(e),"renderGraphicChild",(function(t,n,r){var i=e.filterFormatItem(t,n,r);if(!i)return null;var o=e.getTooltipEventType(),a=e.state,c=a.isTooltipActive,u=a.tooltipAxis,s=a.activeTooltipIndex,l=a.activeLabel,f=e.props.children,p=(0,xt.BU)(f,gt),h=i.props,d=h.points,y=h.isRange,v=h.baseLine,g=i.item.props,b=g.activeDot,x=!g.hide&&c&&p&&b&&s>=0,w={};"axis"!==o&&p&&"click"===p.props.trigger?w={onClick:(0,Qt.HQ)(e.handleItemMouseEnter,null,t.props.onCLick)}:"axis"!==o&&(w={onMouseLeave:(0,Qt.HQ)(e.handleItemMouseLeave,null,t.props.onMouseLeave),onMouseEnter:(0,Qt.HQ)(e.handleItemMouseEnter,null,t.props.onMouseEnter)});var O=(0,S.cloneElement)(t,vn(vn({},i.props),w));if(x){var E,_;if(u.dataKey&&!u.allowDuplicatedCategory){var j="function"===typeof u.dataKey?function(t){return"function"===typeof u.dataKey?u.dataKey(t.payload):null}:"payload.".concat(u.dataKey.toString());E=(0,A.eP)(d,j,l),_=y&&v&&(0,A.eP)(v,j,l)}else E=d[s],_=y&&v&&v[s];if(!m()(E))return[O].concat(pn(e.renderActivePoints({item:i,activePoint:E,basePoint:_,childIndex:s,isRange:y})))}return y?[O,null,null]:[O,null]})),gn(ln(e),"renderCustomized",(function(t,n,r){return(0,S.cloneElement)(t,vn(vn({key:"recharts-customized-".concat(r)},e.props),e.state))})),e.uniqueChartId=m()(t.id)?(0,A.NF)("recharts"):t.id,e.clipPathId="".concat(e.uniqueChartId,"-clip"),t.throttleDelay&&(e.triggeredAfterMouseMove=l()(e.triggeredAfterMouseMove,t.throttleDelay)),e.state={},e}return e=p,(r=[{key:"componentDidMount",value:function(){var t,e;m()(this.props.syncId)||this.addListener(),this.accessibilityManager.setDetails({container:this.container,offset:{left:null!==(t=this.props.margin.left)&&void 0!==t?t:0,top:null!==(e=this.props.margin.top)&&void 0!==e?e:0},coordinateList:this.state.tooltipTicks,mouseHandlerCallback:this.handleMouseMove,layout:this.props.layout})}},{key:"getSnapshotBeforeUpdate",value:function(t,e){return this.props.accessibilityLayer?(this.state.tooltipTicks!==e.tooltipTicks&&this.accessibilityManager.setDetails({coordinateList:this.state.tooltipTicks}),this.props.layout!==t.layout&&this.accessibilityManager.setDetails({layout:this.props.layout}),this.props.margin!==t.margin&&this.accessibilityManager.setDetails({offset:{left:null!==(n=this.props.margin.left)&&void 0!==n?n:0,top:null!==(r=this.props.margin.top)&&void 0!==r?r:0}}),null):null;var n,r}},{key:"componentDidUpdate",value:function(t){m()(t.syncId)&&!m()(this.props.syncId)&&this.addListener(),!m()(t.syncId)&&m()(this.props.syncId)&&this.removeListener()}},{key:"componentWillUnmount",value:function(){this.clearDeferId(),m()(this.props.syncId)||this.removeListener(),this.cancelThrottledTriggerAfterMouseMove()}},{key:"cancelThrottledTriggerAfterMouseMove",value:function(){"function"===typeof this.triggeredAfterMouseMove.cancel&&this.triggeredAfterMouseMove.cancel()}},{key:"getTooltipEventType",value:function(){var t=(0,xt.BU)(this.props.children,gt);if(t&&x()(t.props.shared)){var e=t.props.shared?"axis":"item";return f.indexOf(e)>=0?e:c}return c}},{key:"getMouseInfo",value:function(t){if(!this.container)return null;var e=(0,j.A3)(this.container),n=(0,j.Xk)(t,e),r=this.inRange(n.chartX,n.chartY);if(!r)return null;var i=this.state,o=i.xAxisMap,a=i.yAxisMap;if("axis"!==this.getTooltipEventType()&&o&&a){var c=(0,A.lX)(o).scale,u=(0,A.lX)(a).scale,s=c&&c.invert?c.invert(n.chartX):null,l=u&&u.invert?u.invert(n.chartY):null;return vn(vn({},n),{},{xValue:s,yValue:l})}var f=jn(this.state,this.props.data,this.props.layout,r);return f?vn(vn({},n),f):null}},{key:"getCursorRectangle",value:function(){var t=this.props.layout,e=this.state,n=e.activeCoordinate,r=e.offset,i=e.tooltipAxisBandSize,o=i/2;return{stroke:"none",fill:"#ccc",x:"horizontal"===t?n.x-o:r.left+.5,y:"horizontal"===t?r.top+.5:n.y-o,width:"horizontal"===t?i:r.width-1,height:"horizontal"===t?r.height-1:i}}},{key:"getCursorPoints",value:function(){var t,e,n,r,i=this.props.layout,o=this.state,a=o.activeCoordinate,c=o.offset;if("horizontal"===i)n=t=a.x,e=c.top,r=c.top+c.height;else if("vertical"===i)r=e=a.y,t=c.left,n=c.left+c.width;else if(!m()(a.cx)||!m()(a.cy)){if("centric"!==i){var u=a.cx,s=a.cy,l=a.radius,f=a.startAngle,p=a.endAngle;return{points:[(0,Xe.IZ)(u,s,l,f),(0,Xe.IZ)(u,s,l,p)],cx:u,cy:s,radius:l,startAngle:f,endAngle:p}}var h=a.cx,d=a.cy,y=a.innerRadius,v=a.outerRadius,g=a.angle,b=(0,Xe.IZ)(h,d,y,g),x=(0,Xe.IZ)(h,d,v,g);t=b.x,e=b.y,n=x.x,r=x.y}return[{x:t,y:e},{x:n,y:r}]}},{key:"inRange",value:function(t,e){var n=this.props.layout;if("horizontal"===n||"vertical"===n){var r=this.state.offset;return t>=r.left&&t<=r.left+r.width&&e>=r.top&&e<=r.top+r.height?{x:t,y:e}:null}var i=this.state,o=i.angleAxisMap,a=i.radiusAxisMap;if(o&&a){var c=(0,A.lX)(o);return(0,Xe.yy)({x:t,y:e},c)}return null}},{key:"parseEventsOfWrapper",value:function(){var t=this.props.children,e=this.getTooltipEventType(),n=(0,xt.BU)(t,gt),r={};return n&&"axis"===e&&(r="click"===n.props.trigger?{onClick:this.handleClick}:{onMouseEnter:this.handleMouseEnter,onMouseMove:this.handleMouseMove,onMouseLeave:this.handleMouseLeave,onTouchMove:this.handleTouchMove,onTouchStart:this.handleTouchStart,onTouchEnd:this.handleTouchEnd}),vn(vn({},(0,_t._U)(this.props,this.handleOuterEvent)),r)}},{key:"addListener",value:function(){Ge.on($e,this.handleReceiveSyncEvent),Ge.setMaxListeners&&Ge._maxListeners&&Ge.setMaxListeners(Ge._maxListeners+1)}},{key:"removeListener",value:function(){Ge.removeListener($e,this.handleReceiveSyncEvent),Ge.setMaxListeners&&Ge._maxListeners&&Ge.setMaxListeners(Ge._maxListeners-1)}},{key:"triggerSyncEvent",value:function(t){var e=this.props.syncId;m()(e)||Ge.emit($e,e,this.uniqueChartId,t)}},{key:"applySyncEvent",value:function(t){var e=this.props,n=e.layout,r=e.syncMethod,i=this.state.updateId,o=t.dataStartIndex,a=t.dataEndIndex;if(m()(t.dataStartIndex)&&m()(t.dataEndIndex))if(m()(t.activeTooltipIndex))this.setState(t);else{var c=t.chartX,u=t.chartY,s=t.activeTooltipIndex,l=this.state,f=l.offset,p=l.tooltipTicks;if(!f)return;if("function"===typeof r)s=r(p,t);else if("value"===r){s=-1;for(var h=0;h{"use strict";n.d(e,{f:()=>r});var r=function(t){return null};r.displayName="Cell"},2647:(t,e,n)=>{"use strict";n.d(e,{J:()=>k});var r=n(6686),i=n.n(r),o=n(1629),a=n.n(o),c=n(9686),u=n.n(c),s=n(5043),l=n(8139),f=n.n(l),p=n(2733),h=n(240),d=n(6307),y=n(165);function v(t){return v="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},v(t)}function g(t){return function(t){if(Array.isArray(t))return m(t)}(t)||function(t){if("undefined"!==typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(!t)return;if("string"===typeof t)return m(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return m(t,e)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function m(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n=0?1:-1;"insideStart"===o?(r=b+_*c,i=w):"insideEnd"===o?(r=x-_*c,i=!w):"end"===o&&(r=x+_*c,i=w),i=E<=0?i:!i;var A=(0,y.IZ)(h,v,S,r),j=(0,y.IZ)(h,v,S,r+359*(i?1:-1)),k="M".concat(A.x,",").concat(A.y,"\n A").concat(S,",").concat(S,",0,1,").concat(i?0:1,",\n ").concat(j.x,",").concat(j.y),M=u()(t.id)?(0,d.NF)("recharts-radial-line-"):t.id;return s.createElement("text",O({},n,{dominantBaseline:"central",className:f()("recharts-radial-bar-label",l)}),s.createElement("defs",null,s.createElement("path",{id:M,d:k})),s.createElement("textPath",{xlinkHref:"#".concat(M)},e))},_=function(t){var e=t.viewBox,n=t.offset,r=t.position,i=e,o=i.cx,a=i.cy,c=i.innerRadius,u=i.outerRadius,s=(i.startAngle+i.endAngle)/2;if("outside"===r){var l=(0,y.IZ)(o,a,u+n,s),f=l.x;return{x:f,y:l.y,textAnchor:f>=o?"start":"end",verticalAnchor:"middle"}}if("center"===r)return{x:o,y:a,textAnchor:"middle",verticalAnchor:"middle"};if("centerTop"===r)return{x:o,y:a,textAnchor:"middle",verticalAnchor:"start"};if("centerBottom"===r)return{x:o,y:a,textAnchor:"middle",verticalAnchor:"end"};var p=(c+u)/2,h=(0,y.IZ)(o,a,p,s);return{x:h.x,y:h.y,textAnchor:"middle",verticalAnchor:"middle"}},A=function(t){var e=t.viewBox,n=t.parentViewBox,r=t.offset,o=t.position,a=e,c=a.x,u=a.y,s=a.width,l=a.height,f=l>=0?1:-1,p=f*r,h=f>0?"end":"start",y=f>0?"start":"end",v=s>=0?1:-1,g=v*r,m=v>0?"end":"start",b=v>0?"start":"end";if("top"===o)return x(x({},{x:c+s/2,y:u-f*r,textAnchor:"middle",verticalAnchor:h}),n?{height:Math.max(u-n.y,0),width:s}:{});if("bottom"===o)return x(x({},{x:c+s/2,y:u+l+p,textAnchor:"middle",verticalAnchor:y}),n?{height:Math.max(n.y+n.height-(u+l),0),width:s}:{});if("left"===o){var w={x:c-g,y:u+l/2,textAnchor:m,verticalAnchor:"middle"};return x(x({},w),n?{width:Math.max(w.x-n.x,0),height:l}:{})}if("right"===o){var O={x:c+s+g,y:u+l/2,textAnchor:b,verticalAnchor:"middle"};return x(x({},O),n?{width:Math.max(n.x+n.width-O.x,0),height:l}:{})}var S=n?{width:s,height:l}:{};return"insideLeft"===o?x({x:c+g,y:u+l/2,textAnchor:b,verticalAnchor:"middle"},S):"insideRight"===o?x({x:c+s-g,y:u+l/2,textAnchor:m,verticalAnchor:"middle"},S):"insideTop"===o?x({x:c+s/2,y:u+p,textAnchor:"middle",verticalAnchor:y},S):"insideBottom"===o?x({x:c+s/2,y:u+l-p,textAnchor:"middle",verticalAnchor:h},S):"insideTopLeft"===o?x({x:c+g,y:u+p,textAnchor:b,verticalAnchor:y},S):"insideTopRight"===o?x({x:c+s-g,y:u+p,textAnchor:m,verticalAnchor:y},S):"insideBottomLeft"===o?x({x:c+g,y:u+l-p,textAnchor:b,verticalAnchor:h},S):"insideBottomRight"===o?x({x:c+s-g,y:u+l-p,textAnchor:m,verticalAnchor:h},S):i()(o)&&((0,d.Et)(o.x)||(0,d._3)(o.x))&&((0,d.Et)(o.y)||(0,d._3)(o.y))?x({x:c+(0,d.F4)(o.x,s),y:u+(0,d.F4)(o.y,l),textAnchor:"end",verticalAnchor:"end"},S):x({x:c+s/2,y:u+l/2,textAnchor:"middle",verticalAnchor:"middle"},S)},j=function(t){return"cx"in t&&(0,d.Et)(t.cx)};function k(t){var e,n=t.viewBox,r=t.position,i=t.value,o=t.children,c=t.content,l=t.className,d=void 0===l?"":l,y=t.textBreakAll;if(!n||u()(i)&&u()(o)&&!(0,s.isValidElement)(c)&&!a()(c))return null;if((0,s.isValidElement)(c))return(0,s.cloneElement)(c,t);if(a()(c)){if(e=(0,s.createElement)(c,t),(0,s.isValidElement)(e))return e}else e=S(t);var v=j(n),g=(0,h.J9)(t,!0);if(v&&("insideStart"===r||"insideEnd"===r||"end"===r))return E(t,e,g);var m=v?_(t):A(t);return s.createElement(p.E,O({className:f()("recharts-label",d)},g,m,{breakAll:y}),e)}k.displayName="Label",k.defaultProps={offset:5};var M=function(t){var e=t.cx,n=t.cy,r=t.angle,i=t.startAngle,o=t.endAngle,a=t.r,c=t.radius,u=t.innerRadius,s=t.outerRadius,l=t.x,f=t.y,p=t.top,h=t.left,y=t.width,v=t.height,g=t.clockWise,m=t.labelViewBox;if(m)return m;if((0,d.Et)(y)&&(0,d.Et)(v)){if((0,d.Et)(l)&&(0,d.Et)(f))return{x:l,y:f,width:y,height:v};if((0,d.Et)(p)&&(0,d.Et)(h))return{x:p,y:h,width:y,height:v}}return(0,d.Et)(l)&&(0,d.Et)(f)?{x:l,y:f,width:0,height:0}:(0,d.Et)(e)&&(0,d.Et)(n)?{cx:e,cy:n,startAngle:i||r||0,endAngle:o||r||0,innerRadius:u||0,outerRadius:s||c||a||0,clockWise:g}:t.viewBox?t.viewBox:{}};k.parseViewBox=M,k.renderCallByParent=function(t,e){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(!t||!t.children&&n&&!t.label)return null;var r=t.children,o=M(t),c=(0,h.aS)(r,k).map((function(t,n){return(0,s.cloneElement)(t,{viewBox:e||o,key:"label-".concat(n)})}));if(!n)return c;var u=function(t,e){return t?!0===t?s.createElement(k,{key:"label-implicit",viewBox:e}):(0,d.vh)(t)?s.createElement(k,{key:"label-implicit",viewBox:e,value:t}):(0,s.isValidElement)(t)?t.type===k?(0,s.cloneElement)(t,{key:"label-implicit",viewBox:e}):s.createElement(k,{key:"label-implicit",content:t,viewBox:e}):a()(t)?s.createElement(k,{key:"label-implicit",content:t,viewBox:e}):i()(t)?s.createElement(k,O({viewBox:e},t,{key:"label-implicit"})):null:null}(t.label,e||o);return[u].concat(g(c))}},763:(t,e,n)=>{"use strict";n.d(e,{s:()=>yt});var r=n(1629),i=n.n(r),o=n(977),a=n.n(o),c=n(5043),u=n(8139),s=n.n(u),l=n(4794),f=n(643),p=n.n(f);Math.abs,Math.atan2;const h=Math.cos,d=(Math.max,Math.min,Math.sin),y=Math.sqrt,v=Math.PI,g=2*v;const m={draw(t,e){const n=y(e/v);t.moveTo(n,0),t.arc(0,0,n,0,g)}},b={draw(t,e){const n=y(e/5)/2;t.moveTo(-3*n,-n),t.lineTo(-n,-n),t.lineTo(-n,-3*n),t.lineTo(n,-3*n),t.lineTo(n,-n),t.lineTo(3*n,-n),t.lineTo(3*n,n),t.lineTo(n,n),t.lineTo(n,3*n),t.lineTo(-n,3*n),t.lineTo(-n,n),t.lineTo(-3*n,n),t.closePath()}},x=y(1/3),w=2*x,O={draw(t,e){const n=y(e/w),r=n*x;t.moveTo(0,-n),t.lineTo(r,0),t.lineTo(0,n),t.lineTo(-r,0),t.closePath()}},S={draw(t,e){const n=y(e),r=-n/2;t.rect(r,r,n,n)}},E=d(v/10)/d(7*v/10),_=d(g/10)*E,A=-h(g/10)*E,j={draw(t,e){const n=y(.8908130915292852*e),r=_*n,i=A*n;t.moveTo(0,-n),t.lineTo(r,i);for(let o=1;o<5;++o){const e=g*o/5,a=h(e),c=d(e);t.lineTo(c*n,-a*n),t.lineTo(a*r-c*i,c*r+a*i)}t.closePath()}},k=y(3),M={draw(t,e){const n=-y(e/(3*k));t.moveTo(0,2*n),t.lineTo(-k*n,-n),t.lineTo(k*n,-n),t.closePath()}},P=-.5,T=y(3)/2,C=1/y(12),I=3*(C/2+1),N={draw(t,e){const n=y(e/I),r=n/2,i=n*C,o=r,a=n*C+n,c=-o,u=a;t.moveTo(r,i),t.lineTo(o,a),t.lineTo(c,u),t.lineTo(P*r-T*i,T*r+P*i),t.lineTo(P*o-T*a,T*o+P*a),t.lineTo(P*c-T*u,T*c+P*u),t.lineTo(P*r+T*i,P*i-T*r),t.lineTo(P*o+T*a,P*a-T*o),t.lineTo(P*c+T*u,P*u-T*c),t.closePath()}};var D=n(3809),R=n(5722);y(3),y(3);var L=n(240);function B(){return B=Object.assign?Object.assign.bind():function(t){for(var e=1;e=0||(i[n]=t[n]);return i}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(i[n]=t[n])}return i}function ht(t){return t.value}function dt(t,e){return!0===t?a()(e,ht):i()(t)?a()(e,t):e}var yt=function(t){!function(t,e){if("function"!==typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&at(t,e)}(a,t);var e,n,r,o=ct(a);function a(){var t;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,a);for(var e=arguments.length,n=new Array(e),r=0;r=0&&n>=0?{width:e,height:n}:null}},{key:"getDefaultPosition",value:function(t){var e,n,r=this.props,i=r.layout,o=r.align,a=r.verticalAlign,c=r.margin,u=r.chartWidth,s=r.chartHeight;return t&&(void 0!==t.left&&null!==t.left||void 0!==t.right&&null!==t.right)||(e="center"===o&&"vertical"===i?{left:((u||0)-(this.getBBoxSnapshot()||{width:0}).width)/2}:"right"===o?{right:c&&c.right||0}:{left:c&&c.left||0}),t&&(void 0!==t.top&&null!==t.top||void 0!==t.bottom&&null!==t.bottom)||(n="middle"===a?{top:((s||0)-(this.getBBoxSnapshot()||{height:0}).height)/2}:"bottom"===a?{bottom:c&&c.bottom||0}:{top:c&&c.top||0}),it(it({},e),n)}},{key:"updateBBox",value:function(){var t=this.state,e=t.boxWidth,n=t.boxHeight,r=this.props.onBBoxUpdate;if(this.wrapperNode&&this.wrapperNode.getBoundingClientRect){var i=this.wrapperNode.getBoundingClientRect();(Math.abs(i.width-e)>1||Math.abs(i.height-n)>1)&&this.setState({boxWidth:i.width,boxHeight:i.height},(function(){r&&r(i)}))}else-1===e&&-1===n||this.setState({boxWidth:-1,boxHeight:-1},(function(){r&&r(null)}))}},{key:"render",value:function(){var t=this,e=this.props,n=e.content,r=e.width,o=e.height,a=e.wrapperStyle,u=e.payloadUniqBy,s=e.payload,l=it(it({position:"absolute",width:r||"auto",height:o||"auto"},this.getDefaultPosition(a)),a);return c.createElement("div",{className:"recharts-legend-wrapper",style:l,ref:function(e){t.wrapperNode=e}},function(t,e){if(c.isValidElement(t))return c.cloneElement(t,e);if(i()(t))return c.createElement(t,e);e.ref;var n=pt(e,nt);return c.createElement(Q,n)}(n,it(it({},this.props),{},{payload:dt(u,s)})))}}])&&ot(e.prototype,n),r&&ot(e,r),Object.defineProperty(e,"prototype",{writable:!1}),a}(c.PureComponent);lt(yt,"displayName","Legend"),lt(yt,"defaultProps",{iconSize:14,layout:"horizontal",align:"center",verticalAlign:"bottom"})},2733:(t,e,n)=>{"use strict";n.d(e,{E:()=>E});var r=n(9686),i=n.n(r),o=n(5043),a=n(4443),c=n.n(a),u=n(8139),s=n.n(u),l=n(6307),f=n(6015),p=n(240),h=n(7213),d=["dx","dy","textAnchor","verticalAnchor","scaleToFit","angle","lineHeight","capHeight","className","breakAll"];function y(){return y=Object.assign?Object.assign.bind():function(t){for(var e=1;e=0||(i[n]=t[n]);return i}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(i[n]=t[n])}return i}function g(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,i,o,a,c=[],u=!0,s=!1;try{if(o=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;u=!1}else for(;!(u=(r=o.call(n)).done)&&(c.push(r.value),c.length!==e);u=!0);}catch(l){s=!0,i=l}finally{try{if(!u&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(s)throw i}}return c}}(t,e)||function(t,e){if(!t)return;if("string"===typeof t)return m(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return m(t,e)}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function m(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n0&&void 0!==arguments[0]?arguments[0]:[]).reduce((function(t,e){var o=e.word,a=e.width,c=t[t.length-1];if(c&&(null==r||i||c.width+a+no||function(t){return t.reduce((function(t,e){return t.width>e.width?t:e}))}(i).width>Number(r);return[a,i]},v=0,m=f.length-1,b=0;v<=m&&b<=f.length-1;){var w=Math.floor((v+m)/2),O=g(y(w-1),2),S=O[0],E=O[1],_=g(y(w),1)[0];if(S||_||(v=w+1),S&&_&&(m=w-1),!S&&_){d=E;break}b++}return d||h}({breakAll:o,children:r,maxLines:a,style:i},c.wordsWithComputedWidth,c.spaceWidth,e,n):w(r)}return w(r)},S={x:0,y:0,lineHeight:"1em",capHeight:"0.71em",scaleToFit:!1,textAnchor:"start",verticalAnchor:"end",fill:"#808080"},E=function(t){var e=(0,o.useMemo)((function(){return O({breakAll:t.breakAll,children:t.children,maxLines:t.maxLines,scaleToFit:t.scaleToFit,style:t.style,width:t.width})}),[t.breakAll,t.children,t.maxLines,t.scaleToFit,t.style,t.width]),n=t.dx,r=t.dy,i=t.textAnchor,a=t.verticalAnchor,u=t.scaleToFit,f=t.angle,h=t.lineHeight,g=t.capHeight,m=t.className,b=t.breakAll,x=v(t,d);if(!(0,l.vh)(x.x)||!(0,l.vh)(x.y))return null;var w,E=x.x+((0,l.Et)(n)?n:0),_=x.y+((0,l.Et)(r)?r:0);switch(a){case"start":w=c()("calc(".concat(g,")"));break;case"middle":w=c()("calc(".concat((e.length-1)/2," * -").concat(h," + (").concat(g," / 2))"));break;default:w=c()("calc(".concat(e.length-1," * -").concat(h,")"))}var A=[];if(u){var j=e[0].width,k=t.width;A.push("scale(".concat(((0,l.Et)(k)?k/j:1)/j,")"))}return f&&A.push("rotate(".concat(f,", ").concat(E,", ").concat(_,")")),A.length&&(x.transform=A.join(" ")),o.createElement("text",y({},(0,p.J9)(x,!0),{x:E,y:_,className:s()("recharts-text",m),textAnchor:i,fill:x.fill.includes("url")?S.fill:x.fill}),e.map((function(t,e){return o.createElement("tspan",{x:E,dy:0===e?w:h,key:e},t.words.join(b?"":" "))})))};E.defaultProps=S},4020:(t,e,n)=>{"use strict";n.d(e,{W:()=>l});var r=n(5043),i=n(8139),o=n.n(i),a=n(240),c=["children","className"];function u(){return u=Object.assign?Object.assign.bind():function(t){for(var e=1;e=0||(i[n]=t[n]);return i}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(i[n]=t[n])}return i}var l=r.forwardRef((function(t,e){var n=t.children,i=t.className,l=s(t,c),f=o()("recharts-layer",i);return r.createElement("g",u({className:f},(0,a.J9)(l,!0),{ref:e}),n)}))},4794:(t,e,n)=>{"use strict";n.d(e,{u:()=>l});var r=n(5043),i=n(8139),o=n.n(i),a=n(240),c=["children","width","height","viewBox","className","style"];function u(){return u=Object.assign?Object.assign.bind():function(t){for(var e=1;e=0||(i[n]=t[n]);return i}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(i[n]=t[n])}return i}function l(t){var e=t.children,n=t.width,i=t.height,l=t.viewBox,f=t.className,p=t.style,h=s(t,c),d=l||{width:n,height:i,x:0,y:0},y=o()("recharts-surface",f);return r.createElement("svg",u({},(0,a.J9)(h,!0,"svg"),{className:y,width:n,height:i,style:p,viewBox:"".concat(d.x," ").concat(d.y," ").concat(d.width," ").concat(d.height)}),r.createElement("title",null,t.title),r.createElement("desc",null,t.desc),e)}},3439:(t,e,n)=>{"use strict";n.d(e,{F:()=>it});var r=n(9853),i=n.n(r),o=n(3097),a=n.n(o),c=n(2322),u=n.n(c),s=n(1629),l=n.n(s),f=n(9686),p=n.n(f),h=n(5043),d=n(7356),y=n(8139),v=n.n(y),g=n(4020),m=n(677),b=n(8471),x=n(2733),w=n(2647),O=n(6686),S=n.n(O),E=n(4065),_=n.n(E),A=n(4052),j=n.n(A),k=n(240),M=n(1756);function P(t){return P="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},P(t)}var T=["data","valueAccessor","dataKey","clockWise","id","textBreakAll"];function C(t){return function(t){if(Array.isArray(t))return I(t)}(t)||function(t){if("undefined"!==typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(!t)return;if("string"===typeof t)return I(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return I(t,e)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function I(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n=0||(i[n]=t[n]);return i}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(i[n]=t[n])}return i}var U={valueAccessor:function(t){return j()(t.value)?_()(t.value):t.value}};function F(t){var e=t.data,n=t.valueAccessor,r=t.dataKey,i=t.clockWise,o=t.id,a=t.textBreakAll,c=B(t,T);return e&&e.length?h.createElement(g.W,{className:"recharts-label-list"},e.map((function(t,e){var u=p()(r)?n(t,e):(0,M.kr)(t&&t.payload,r),s=p()(o)?{}:{id:"".concat(o,"-").concat(e)};return h.createElement(w.J,N({},(0,k.J9)(t,!0),c,s,{parentViewBox:t.parentViewBox,index:e,value:u,textBreakAll:a,viewBox:w.J.parseViewBox(p()(i)?t:R(R({},t),{},{clockWise:i})),key:"label-".concat(e)}))}))):null}F.displayName="LabelList",F.renderCallByParent=function(t,e){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(!t||!t.children&&n&&!t.label)return null;var r=t.children,i=(0,k.aS)(r,F).map((function(t,n){return(0,h.cloneElement)(t,{data:e,key:"labelList-".concat(n)})}));return n?[function(t,e){return t?!0===t?h.createElement(F,{key:"labelList-implicit",data:e}):h.isValidElement(t)||l()(t)?h.createElement(F,{key:"labelList-implicit",data:e,content:t}):S()(t)?h.createElement(F,N({data:e},t,{key:"labelList-implicit"})):null:null}(t.label,e)].concat(C(i)):i},F.defaultProps=U;var z=n(7869),V=n(6015),W=n(165),q=n(6307),X=n(155),H=n(7287);function G(t){return G="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},G(t)}function $(){return $=Object.assign?Object.assign.bind():function(t){for(var e=1;ee?"start":t0?a()(t,"paddingAngle",0):0;if(n){var u=(0,q.Dj)(n.endAngle-n.startAngle,t.endAngle-t.startAngle),s=Y(Y({},t),{},{startAngle:o+c,endAngle:o+u(r)+c});i.push(s),o=s.endAngle}else{var f=t.endAngle,p=t.startAngle,h=(0,q.Dj)(0,f-p)(r),d=Y(Y({},t),{},{startAngle:o+c,endAngle:o+h+c});i.push(d),o=d.endAngle}})),h.createElement(g.W,null,t.renderSectorsStatically(i))}))}},{key:"attachKeyboardHandlers",value:function(t){var e=this;t.onkeydown=function(t){if(!t.altKey)switch(t.key){case"ArrowLeft":var n=++e.state.sectorToFocus%e.sectorRefs.length;e.sectorRefs[n].focus(),e.setState({sectorToFocus:n});break;case"ArrowRight":var r=--e.state.sectorToFocus<0?e.sectorRefs.length-1:e.state.sectorToFocus%e.sectorRefs.length;e.sectorRefs[r].focus(),e.setState({sectorToFocus:r});break;case"Escape":e.sectorRefs[e.state.sectorToFocus].blur(),e.setState({sectorToFocus:0})}}}},{key:"renderSectors",value:function(){var t=this.props,e=t.sectors,n=t.isAnimationActive,r=this.state.prevSectors;return!(n&&e&&e.length)||r&&i()(r,e)?this.renderSectorsStatically(e):this.renderSectorsWithAnimation()}},{key:"componentDidMount",value:function(){this.pieRef&&this.attachKeyboardHandlers(this.pieRef)}},{key:"render",value:function(){var t=this,e=this.props,n=e.hide,r=e.sectors,i=e.className,o=e.label,a=e.cx,c=e.cy,u=e.innerRadius,s=e.outerRadius,l=e.isAnimationActive,f=this.state.isAnimationFinished;if(n||!r||!r.length||!(0,q.Et)(a)||!(0,q.Et)(c)||!(0,q.Et)(u)||!(0,q.Et)(s))return null;var p=v()("recharts-pie",i);return h.createElement(g.W,{tabIndex:0,className:p,ref:function(e){t.pieRef=e}},this.renderSectors(),o&&this.renderLabels(r),w.J.renderCallByParent(this.props,null,!1),(!l||f)&&F.renderCallByParent(this.props,r,!1))}}])&&K(e.prototype,n),r&&K(e,r),Object.defineProperty(e,"prototype",{writable:!1}),c}(h.PureComponent);nt(it,"displayName","Pie"),nt(it,"defaultProps",{stroke:"#fff",fill:"#808080",legendType:"rect",cx:"50%",cy:"50%",startAngle:0,endAngle:360,innerRadius:0,outerRadius:"80%",paddingAngle:0,labelLine:!0,hide:!1,minAngle:0,isAnimationActive:!V.m.isSsr,animationBegin:400,animationDuration:1500,animationEasing:"ease",nameKey:"name",blendStroke:!1}),nt(it,"parseDeltaAngle",(function(t,e){return(0,q.sA)(e-t)*Math.min(Math.abs(e-t),360)})),nt(it,"getRealPieData",(function(t){var e=t.props,n=e.data,r=e.children,i=(0,k.J9)(t.props),o=(0,k.aS)(r,z.f);return n&&n.length?n.map((function(t,e){return Y(Y(Y({payload:t},i),t),o&&o[e]&&o[e].props)})):o&&o.length?o.map((function(t){return Y(Y({},i),t.props)})):[]})),nt(it,"parseCoordinateOfPie",(function(t,e){var n=e.top,r=e.left,i=e.width,o=e.height,a=(0,W.lY)(i,o);return{cx:r+(0,q.F4)(t.props.cx,i,i/2),cy:n+(0,q.F4)(t.props.cy,o,o/2),innerRadius:(0,q.F4)(t.props.innerRadius,a,0),outerRadius:(0,q.F4)(t.props.outerRadius,a,.8*a),maxRadius:t.props.maxRadius||Math.sqrt(i*i+o*o)/2}})),nt(it,"getComposedData",(function(t){var e=t.item,n=t.offset,r=it.getRealPieData(e);if(!r||!r.length)return null;var i=e.props,o=i.cornerRadius,a=i.startAngle,c=i.endAngle,u=i.paddingAngle,s=i.dataKey,l=i.nameKey,f=i.valueKey,h=i.tooltipType,d=Math.abs(e.props.minAngle),y=it.parseCoordinateOfPie(e,n),v=it.parseDeltaAngle(a,c),g=Math.abs(v),m=s;p()(s)&&p()(f)?((0,X.R)(!1,'Use "dataKey" to specify the value of pie,\n the props "valueKey" will be deprecated in 1.1.0'),m="value"):p()(s)&&((0,X.R)(!1,'Use "dataKey" to specify the value of pie,\n the props "valueKey" will be deprecated in 1.1.0'),m=f);var b,x,w=r.filter((function(t){return 0!==(0,M.kr)(t,m,0)})).length,O=g-w*d-(g>=360?w:w-1)*u,S=r.reduce((function(t,e){var n=(0,M.kr)(e,m,0);return t+((0,q.Et)(n)?n:0)}),0);S>0&&(b=r.map((function(t,e){var n,r=(0,M.kr)(t,m,0),i=(0,M.kr)(t,l,e),c=((0,q.Et)(r)?r:0)/S,s=(n=e?x.endAngle+(0,q.sA)(v)*u*(0!==r?1:0):a)+(0,q.sA)(v)*((0!==r?d:0)+c*O),f=(n+s)/2,p=(y.innerRadius+y.outerRadius)/2,g=[{name:i,value:r,payload:t,dataKey:m,type:h}],b=(0,W.IZ)(y.cx,y.cy,p,f);return x=Y(Y(Y({percent:c,cornerRadius:o,name:i,tooltipPayload:g,midAngle:f,middleRadius:p,tooltipPosition:b},t),y),{},{value:(0,M.kr)(t,m),startAngle:n,endAngle:s,payload:t,paddingAngle:(0,q.sA)(v)*u})})));return Y(Y({},y),{},{sectors:b,data:r})}))},8471:(t,e,n)=>{"use strict";n.d(e,{I:()=>K});var r=n(4052),i=n.n(r),o=n(643),a=n.n(o),c=n(1629),u=n.n(c),s=n(5043);function l(){}function f(t,e,n){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+n)/6)}function p(t){this._context=t}function h(t){this._context=t}function d(t){this._context=t}p.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:f(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:f(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},h.prototype={areaStart:l,areaEnd:l,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:f(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},d.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:f(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};class y{constructor(t,e){this._context=t,this._x=e}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line}point(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,e,t,e):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+e)/2,t,this._y0,t,e)}this._x0=t,this._y0=e}}function v(t){this._context=t}function g(t){this._context=t}function m(t){return new g(t)}function b(t){return t<0?-1:1}function x(t,e,n){var r=t._x1-t._x0,i=e-t._x1,o=(t._y1-t._y0)/(r||i<0&&-0),a=(n-t._y1)/(i||r<0&&-0),c=(o*i+a*r)/(r+i);return(b(o)+b(a))*Math.min(Math.abs(o),Math.abs(a),.5*Math.abs(c))||0}function w(t,e){var n=t._x1-t._x0;return n?(3*(t._y1-t._y0)/n-e)/2:e}function O(t,e,n){var r=t._x0,i=t._y0,o=t._x1,a=t._y1,c=(o-r)/3;t._context.bezierCurveTo(r+c,i+c*e,o-c,a-c*n,o,a)}function S(t){this._context=t}function E(t){this._context=new _(t)}function _(t){this._context=t}function A(t){this._context=t}function j(t){var e,n,r=t.length-1,i=new Array(r),o=new Array(r),a=new Array(r);for(i[0]=0,o[0]=2,a[0]=t[0]+2*t[1],e=1;e=0;--e)i[e]=(a[e]-i[e+1])/o[e];for(o[r-1]=(t[r]+i[r-1])/2,e=0;e=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var n=this._x*(1-this._t)+t*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,e)}}this._x=t,this._y=e}};var M=n(9236),P=n(3809),T=n(5722);function C(t){return t[0]}function I(t){return t[1]}function N(t,e){var n=(0,P.A)(!0),r=null,i=m,o=null,a=(0,T.i)(c);function c(c){var u,s,l,f=(c=(0,M.A)(c)).length,p=!1;for(null==r&&(o=i(l=a())),u=0;u<=f;++u)!(u=f;--p)c.point(g[p],m[p]);c.lineEnd(),c.areaEnd()}v&&(g[l]=+t(h,l,s),m[l]=+e(h,l,s),c.point(r?+r(h,l,s):g[l],n?+n(h,l,s):m[l]))}if(d)return c=null,d+""||null}function l(){return N().defined(i).curve(a).context(o)}return t="function"===typeof t?t:void 0===t?C:(0,P.A)(+t),e="function"===typeof e?e:void 0===e?(0,P.A)(0):(0,P.A)(+e),n="function"===typeof n?n:void 0===n?I:(0,P.A)(+n),s.x=function(e){return arguments.length?(t="function"===typeof e?e:(0,P.A)(+e),r=null,s):t},s.x0=function(e){return arguments.length?(t="function"===typeof e?e:(0,P.A)(+e),s):t},s.x1=function(t){return arguments.length?(r=null==t?null:"function"===typeof t?t:(0,P.A)(+t),s):r},s.y=function(t){return arguments.length?(e="function"===typeof t?t:(0,P.A)(+t),n=null,s):e},s.y0=function(t){return arguments.length?(e="function"===typeof t?t:(0,P.A)(+t),s):e},s.y1=function(t){return arguments.length?(n=null==t?null:"function"===typeof t?t:(0,P.A)(+t),s):n},s.lineX0=s.lineY0=function(){return l().x(t).y(e)},s.lineY1=function(){return l().x(t).y(n)},s.lineX1=function(){return l().x(r).y(e)},s.defined=function(t){return arguments.length?(i="function"===typeof t?t:(0,P.A)(!!t),s):i},s.curve=function(t){return arguments.length?(a=t,null!=o&&(c=a(o)),s):a},s.context=function(t){return arguments.length?(null==t?o=c=null:c=a(o=t),s):o},s}var R=n(8139),L=n.n(R),B=n(7287),U=n(240),F=n(6307);function z(t){return z="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},z(t)}function V(){return V=Object.assign?Object.assign.bind():function(t){for(var e=1;e{"use strict";n.d(e,{h:()=>p});var r=n(5043),i=n(8139),o=n.n(i),a=n(240),c=n(165),u=n(6307);function s(){return s=Object.assign?Object.assign.bind():function(t){for(var e=1;e180),",").concat(+(o>s),",\n ").concat(f.x,",").concat(f.y,"\n ");if(r>0){var h=(0,c.IZ)(e,n,r,o),d=(0,c.IZ)(e,n,r,s);p+="L ".concat(d.x,",").concat(d.y,"\n A ").concat(r,",").concat(r,",0,\n ").concat(+(Math.abs(a)>180),",").concat(+(o<=s),",\n ").concat(h.x,",").concat(h.y," Z")}else p+="L ".concat(e,",").concat(n," Z");return p},p=function(t){var e=t.cx,n=t.cy,i=t.innerRadius,c=t.outerRadius,p=t.cornerRadius,h=t.forceCornerRadius,d=t.cornerIsExternal,y=t.startAngle,v=t.endAngle,g=t.className;if(c0&&Math.abs(y-v)<360?function(t){var e=t.cx,n=t.cy,r=t.innerRadius,i=t.outerRadius,o=t.cornerRadius,a=t.forceCornerRadius,c=t.cornerIsExternal,s=t.startAngle,p=t.endAngle,h=(0,u.sA)(p-s),d=l({cx:e,cy:n,radius:i,angle:s,sign:h,cornerRadius:o,cornerIsExternal:c}),y=d.circleTangency,v=d.lineTangency,g=d.theta,m=l({cx:e,cy:n,radius:i,angle:p,sign:-h,cornerRadius:o,cornerIsExternal:c}),b=m.circleTangency,x=m.lineTangency,w=m.theta,O=c?Math.abs(s-p):Math.abs(s-p)-g-w;if(O<0)return a?"M ".concat(v.x,",").concat(v.y,"\n a").concat(o,",").concat(o,",0,0,1,").concat(2*o,",0\n a").concat(o,",").concat(o,",0,0,1,").concat(2*-o,",0\n "):f({cx:e,cy:n,innerRadius:r,outerRadius:i,startAngle:s,endAngle:p});var S="M ".concat(v.x,",").concat(v.y,"\n A").concat(o,",").concat(o,",0,0,").concat(+(h<0),",").concat(y.x,",").concat(y.y,"\n A").concat(i,",").concat(i,",0,").concat(+(O>180),",").concat(+(h<0),",").concat(b.x,",").concat(b.y,"\n A").concat(o,",").concat(o,",0,0,").concat(+(h<0),",").concat(x.x,",").concat(x.y,"\n ");if(r>0){var E=l({cx:e,cy:n,radius:r,angle:s,sign:h,isExternal:!0,cornerRadius:o,cornerIsExternal:c}),_=E.circleTangency,A=E.lineTangency,j=E.theta,k=l({cx:e,cy:n,radius:r,angle:p,sign:-h,isExternal:!0,cornerRadius:o,cornerIsExternal:c}),M=k.circleTangency,P=k.lineTangency,T=k.theta,C=c?Math.abs(s-p):Math.abs(s-p)-j-T;if(C<0&&0===o)return"".concat(S,"L").concat(e,",").concat(n,"Z");S+="L".concat(P.x,",").concat(P.y,"\n A").concat(o,",").concat(o,",0,0,").concat(+(h<0),",").concat(M.x,",").concat(M.y,"\n A").concat(r,",").concat(r,",0,").concat(+(C>180),",").concat(+(h>0),",").concat(_.x,",").concat(_.y,"\n A").concat(o,",").concat(o,",0,0,").concat(+(h<0),",").concat(A.x,",").concat(A.y,"Z")}else S+="L".concat(e,",").concat(n,"Z");return S}({cx:e,cy:n,innerRadius:i,outerRadius:c,cornerRadius:Math.min(w,x/2),forceCornerRadius:h,cornerIsExternal:d,startAngle:y,endAngle:v}):f({cx:e,cy:n,innerRadius:i,outerRadius:c,startAngle:y,endAngle:v}),r.createElement("path",s({},(0,a.J9)(t,!0),{className:b,d:m,role:"img"}))};p.defaultProps={cx:0,cy:0,innerRadius:0,outerRadius:0,startAngle:0,endAngle:0,cornerRadius:0,forceCornerRadius:!1,cornerIsExternal:!1}},1756:(t,e,n)=>{"use strict";n.d(e,{s0:()=>To,gH:()=>Ao,YB:()=>zo,HQ:()=>Bo,Hj:()=>Ko,BX:()=>Po,tA:()=>Mo,PW:()=>Ro,Ay:()=>_o,vf:()=>No,Mk:()=>Go,g1:()=>ko,Ps:()=>jo,Mn:()=>qo,kA:()=>Ho,Rh:()=>Lo,w7:()=>Xo,zb:()=>Qo,kr:()=>Eo,_L:()=>Do,KC:()=>Zo,A1:()=>Io,W7:()=>Uo,AQ:()=>Yo});var r={};n.r(r),n.d(r,{scaleBand:()=>k.A,scaleDiverging:()=>Si,scaleDivergingLog:()=>Ei,scaleDivergingPow:()=>Ai,scaleDivergingSqrt:()=>ji,scaleDivergingSymlog:()=>_i,scaleIdentity:()=>ye,scaleImplicit:()=>Me.h,scaleLinear:()=>de,scaleLog:()=>Ee,scaleOrdinal:()=>Me.A,scalePoint:()=>k.z,scalePow:()=>Ne,scaleQuantile:()=>He,scaleQuantize:()=>Ge,scaleRadial:()=>Le,scaleSequential:()=>vi,scaleSequentialLog:()=>gi,scaleSequentialPow:()=>bi,scaleSequentialQuantile:()=>wi,scaleSequentialSqrt:()=>xi,scaleSequentialSymlog:()=>mi,scaleSqrt:()=>De,scaleSymlog:()=>ke,scaleThreshold:()=>$e,scaleTime:()=>pi,scaleUtc:()=>hi,tickFormat:()=>pe});var i=n(9853),o=n.n(i),a=n(7424),c=n.n(a),u=n(643),s=n.n(u),l=n(620),f=n.n(l),p=n(5268),h=n.n(p),d=n(4052),y=n.n(d),v=n(539),g=n.n(v),m=n(6745),b=n.n(m),x=n(3538),w=n.n(x),O=n(1629),S=n.n(O),E=n(3097),_=n.n(E),A=n(9686),j=n.n(A),k=n(4480);const M=Math.sqrt(50),P=Math.sqrt(10),T=Math.sqrt(2);function C(t,e,n){const r=(e-t)/Math.max(0,n),i=Math.floor(Math.log10(r)),o=r/Math.pow(10,i),a=o>=M?10:o>=P?5:o>=T?2:1;let c,u,s;return i<0?(s=Math.pow(10,-i)/a,c=Math.round(t*s),u=Math.round(e*s),c/se&&--u,s=-s):(s=Math.pow(10,i)*a,c=Math.round(t/s),u=Math.round(e/s),c*se&&--u),u0))return[];if((t=+t)===(e=+e))return[t];const r=e=i))return[];const c=o-i+1,u=new Array(c);if(r)if(a<0)for(let s=0;se?1:t>=e?0:NaN}function L(t,e){return null==t||null==e?NaN:et?1:e>=t?0:NaN}function B(t){let e,n,r;function i(t,r){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.length;if(i>>1;n(t[e],r)<0?i=e+1:o=e}while(iR(t(e),n),r=(e,n)=>t(e)-n):(e=t===R||t===L?t:U,n=t,r=t),{left:i,center:function(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;const o=i(t,e,n,(arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.length)-1);return o>n&&r(t[o-1],e)>-r(t[o],e)?o-1:o},right:function(t,r){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.length;if(i>>1;n(t[e],r)<=0?i=e+1:o=e}while(i>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?lt(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?lt(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=Q.exec(t))?new pt(e[1],e[2],e[3],1):(e=tt.exec(t))?new pt(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=et.exec(t))?lt(e[1],e[2],e[3],e[4]):(e=nt.exec(t))?lt(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=rt.exec(t))?mt(e[1],e[2]/100,e[3]/100,1):(e=it.exec(t))?mt(e[1],e[2]/100,e[3]/100,e[4]):ot.hasOwnProperty(t)?st(ot[t]):"transparent"===t?new pt(NaN,NaN,NaN,0):null}function st(t){return new pt(t>>16&255,t>>8&255,255&t,1)}function lt(t,e,n,r){return r<=0&&(t=e=n=NaN),new pt(t,e,n,r)}function ft(t,e,n,r){return 1===arguments.length?((i=t)instanceof H||(i=ut(i)),i?new pt((i=i.rgb()).r,i.g,i.b,i.opacity):new pt):new pt(t,e,n,null==r?1:r);var i}function pt(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function ht(){return"#".concat(gt(this.r)).concat(gt(this.g)).concat(gt(this.b))}function dt(){const t=yt(this.opacity);return"".concat(1===t?"rgb(":"rgba(").concat(vt(this.r),", ").concat(vt(this.g),", ").concat(vt(this.b)).concat(1===t?")":", ".concat(t,")"))}function yt(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function vt(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function gt(t){return((t=vt(t))<16?"0":"")+t.toString(16)}function mt(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new xt(t,e,n,r)}function bt(t){if(t instanceof xt)return new xt(t.h,t.s,t.l,t.opacity);if(t instanceof H||(t=ut(t)),!t)return new xt;if(t instanceof xt)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),o=Math.max(e,n,r),a=NaN,c=o-i,u=(o+i)/2;return c?(a=e===o?(n-r)/c+6*(n0&&u<1?0:a,new xt(a,c,u,t.opacity)}function xt(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function wt(t){return(t=(t||0)%360)<0?t+360:t}function Ot(t){return Math.max(0,Math.min(1,t||0))}function St(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}function Et(t,e,n,r,i){var o=t*t,a=o*t;return((1-3*t+3*o-a)*e+(4-6*o+3*a)*n+(1+3*t+3*o-3*a)*r+a*i)/6}q(H,ut,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:at,formatHex:at,formatHex8:function(){return this.rgb().formatHex8()},formatHsl:function(){return bt(this).formatHsl()},formatRgb:ct,toString:ct}),q(pt,ft,X(H,{brighter(t){return t=null==t?$:Math.pow($,t),new pt(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=null==t?G:Math.pow(G,t),new pt(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new pt(vt(this.r),vt(this.g),vt(this.b),yt(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:ht,formatHex:ht,formatHex8:function(){return"#".concat(gt(this.r)).concat(gt(this.g)).concat(gt(this.b)).concat(gt(255*(isNaN(this.opacity)?1:this.opacity)))},formatRgb:dt,toString:dt})),q(xt,(function(t,e,n,r){return 1===arguments.length?bt(t):new xt(t,e,n,null==r?1:r)}),X(H,{brighter(t){return t=null==t?$:Math.pow($,t),new xt(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=null==t?G:Math.pow(G,t),new xt(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new pt(St(t>=240?t-240:t+120,i,r),St(t,i,r),St(t<120?t+240:t-120,i,r),this.opacity)},clamp(){return new xt(wt(this.h),Ot(this.s),Ot(this.l),yt(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const t=yt(this.opacity);return"".concat(1===t?"hsl(":"hsla(").concat(wt(this.h),", ").concat(100*Ot(this.s),"%, ").concat(100*Ot(this.l),"%").concat(1===t?")":", ".concat(t,")"))}}));const _t=t=>()=>t;function At(t,e){return function(n){return t+n*e}}function jt(t){return 1===(t=+t)?kt:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}(e,n,t):_t(isNaN(e)?n:e)}}function kt(t,e){var n=e-t;return n?At(t,n):_t(isNaN(t)?e:t)}const Mt=function t(e){var n=jt(e);function r(t,e){var r=n((t=ft(t)).r,(e=ft(e)).r),i=n(t.g,e.g),o=n(t.b,e.b),a=kt(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=i(e),t.b=o(e),t.opacity=a(e),t+""}}return r.gamma=t,r}(1);function Pt(t){return function(e){var n,r,i=e.length,o=new Array(i),a=new Array(i),c=new Array(i);for(n=0;n=1?(n=1,e-1):Math.floor(n*e),i=t[r],o=t[r+1],a=r>0?t[r-1]:2*i-o,c=ro&&(i=e.slice(o,i),c[a]?c[a]+=i:c[++a]=i),(n=n[0])===(r=r[0])?c[a]?c[a]+=r:c[++a]=r:(c[++a]=null,u.push({i:a,x:It(n,r)})),o=Rt.lastIndex;return oe&&(n=t,t=e,e=n),function(n){return Math.max(t,Math.min(e,n))}}(a[0],a[t-1])),r=t>2?Ht:Xt,i=o=null,f}function f(e){return null==e||isNaN(e=+e)?n:(i||(i=r(a.map(t),c,u)))(t(s(e)))}return f.invert=function(n){return s(e((o||(o=r(c,a.map(t),It)))(n)))},f.domain=function(t){return arguments.length?(a=Array.from(t,zt),l()):a.slice()},f.range=function(t){return arguments.length?(c=Array.from(t),l()):c.slice()},f.rangeRound=function(t){return c=Array.from(t),u=Ft,l()},f.clamp=function(t){return arguments.length?(s=!!t||Wt,l()):s!==Wt},f.interpolate=function(t){return arguments.length?(u=t,l()):u},f.unknown=function(t){return arguments.length?(n=t,f):n},function(n,r){return t=n,e=r,l()}}function Jt(){return $t()(Wt,Wt)}var Yt,Kt=n(4402),Zt=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Qt(t){if(!(e=Zt.exec(t)))throw new Error("invalid format: "+t);var e;return new te({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function te(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}function ee(t,e){if((n=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var n,r=t.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+t.slice(n+1)]}function ne(t){return(t=ee(Math.abs(t)))?t[1]:NaN}function re(t,e){var n=ee(t,e);if(!n)return t+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}Qt.prototype=te.prototype,te.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};const ie={"%":(t,e)=>(100*t).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)},e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>re(100*t,e),r:re,s:function(t,e){var n=ee(t,e);if(!n)return t+"";var r=n[0],i=n[1],o=i-(Yt=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,a=r.length;return o===a?r:o>a?r+new Array(o-a+1).join("0"):o>0?r.slice(0,o)+"."+r.slice(o):"0."+new Array(1-o).join("0")+ee(t,Math.max(0,e+o-1))[0]},X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function oe(t){return t}var ae,ce,ue,se=Array.prototype.map,le=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"];function fe(t){var e,n,r=void 0===t.grouping||void 0===t.thousands?oe:(e=se.call(t.grouping,Number),n=t.thousands+"",function(t,r){for(var i=t.length,o=[],a=0,c=e[0],u=0;i>0&&c>0&&(u+c+1>r&&(c=Math.max(1,r-u)),o.push(t.substring(i-=c,i+c)),!((u+=c+1)>r));)c=e[a=(a+1)%e.length];return o.reverse().join(n)}),i=void 0===t.currency?"":t.currency[0]+"",o=void 0===t.currency?"":t.currency[1]+"",a=void 0===t.decimal?".":t.decimal+"",c=void 0===t.numerals?oe:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}(se.call(t.numerals,String)),u=void 0===t.percent?"%":t.percent+"",s=void 0===t.minus?"\u2212":t.minus+"",l=void 0===t.nan?"NaN":t.nan+"";function f(t){var e=(t=Qt(t)).fill,n=t.align,f=t.sign,p=t.symbol,h=t.zero,d=t.width,y=t.comma,v=t.precision,g=t.trim,m=t.type;"n"===m?(y=!0,m="g"):ie[m]||(void 0===v&&(v=12),g=!0,m="g"),(h||"0"===e&&"="===n)&&(h=!0,e="0",n="=");var b="$"===p?i:"#"===p&&/[boxX]/.test(m)?"0"+m.toLowerCase():"",x="$"===p?o:/[%p]/.test(m)?u:"",w=ie[m],O=/[defgprs%]/.test(m);function S(t){var i,o,u,p=b,S=x;if("c"===m)S=w(t)+S,t="";else{var E=(t=+t)<0||1/t<0;if(t=isNaN(t)?l:w(Math.abs(t),v),g&&(t=function(t){t:for(var e,n=t.length,r=1,i=-1;r0&&(i=0)}return i>0?t.slice(0,i)+t.slice(e+1):t}(t)),E&&0===+t&&"+"!==f&&(E=!1),p=(E?"("===f?f:s:"-"===f||"("===f?"":f)+p,S=("s"===m?le[8+Yt/3]:"")+S+(E&&"("===f?")":""),O)for(i=-1,o=t.length;++i(u=t.charCodeAt(i))||u>57){S=(46===u?a+t.slice(i+1):t.slice(i))+S,t=t.slice(0,i);break}}y&&!h&&(t=r(t,1/0));var _=p.length+t.length+S.length,A=_>1)+p+t+S+A.slice(_);break;default:t=A+p+t+S}return c(t)}return v=void 0===v?6:/[gprs]/.test(m)?Math.max(1,Math.min(21,v)):Math.max(0,Math.min(20,v)),S.toString=function(){return t+""},S}return{format:f,formatPrefix:function(t,e){var n=f(((t=Qt(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor(ne(e)/3))),i=Math.pow(10,-r),o=le[8+r/3];return function(t){return n(i*t)+o}}}}function pe(t,e,n,r){var i,o=D(t,e,n);switch((r=Qt(null==r?",f":r)).type){case"s":var a=Math.max(Math.abs(t),Math.abs(e));return null!=r.precision||isNaN(i=function(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(ne(e)/3)))-ne(Math.abs(t)))}(o,a))||(r.precision=i),ue(r,a);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(i=function(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,ne(e)-ne(t))+1}(o,Math.max(Math.abs(t),Math.abs(e))))||(r.precision=i-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(i=function(t){return Math.max(0,-ne(Math.abs(t)))}(o))||(r.precision=i-2*("%"===r.type))}return ce(r)}function he(t){var e=t.domain;return t.ticks=function(t){var n=e();return I(n[0],n[n.length-1],null==t?10:t)},t.tickFormat=function(t,n){var r=e();return pe(r[0],r[r.length-1],null==t?10:t,n)},t.nice=function(n){null==n&&(n=10);var r,i,o=e(),a=0,c=o.length-1,u=o[a],s=o[c],l=10;for(s0;){if((i=N(u,s,n))===r)return o[a]=u,o[c]=s,e(o);if(i>0)u=Math.floor(u/i)*i,s=Math.ceil(s/i)*i;else{if(!(i<0))break;u=Math.ceil(u*i)/i,s=Math.floor(s*i)/i}r=i}return t},t}function de(){var t=Jt();return t.copy=function(){return Gt(t,de())},Kt.C.apply(t,arguments),he(t)}function ye(t){var e;function n(t){return null==t||isNaN(t=+t)?e:t}return n.invert=n,n.domain=n.range=function(e){return arguments.length?(t=Array.from(e,zt),n):t.slice()},n.unknown=function(t){return arguments.length?(e=t,n):e},n.copy=function(){return ye(t).unknown(e)},t=arguments.length?Array.from(t,zt):[0,1],he(n)}function ve(t,e){var n,r=0,i=(t=t.slice()).length-1,o=t[r],a=t[i];return a-t(-e,n)}function Se(t){const e=t(ge,me),n=e.domain;let r,i,o=10;function a(){return r=function(t){return t===Math.E?Math.log:10===t&&Math.log10||2===t&&Math.log2||(t=Math.log(t),e=>Math.log(e)/t)}(o),i=function(t){return 10===t?we:t===Math.E?Math.exp:e=>Math.pow(t,e)}(o),n()[0]<0?(r=Oe(r),i=Oe(i),t(be,xe)):t(ge,me),e}return e.base=function(t){return arguments.length?(o=+t,a()):o},e.domain=function(t){return arguments.length?(n(t),a()):n()},e.ticks=t=>{const e=n();let a=e[0],c=e[e.length-1];const u=c0){for(;f<=p;++f)for(s=1;sc)break;d.push(l)}}else for(;f<=p;++f)for(s=o-1;s>=1;--s)if(l=f>0?s/i(-f):s*i(f),!(lc)break;d.push(l)}2*d.length{if(null==t&&(t=10),null==n&&(n=10===o?"s":","),"function"!==typeof n&&(o%1||null!=(n=Qt(n)).precision||(n.trim=!0),n=ce(n)),t===1/0)return n;const a=Math.max(1,o*t/e.ticks().length);return t=>{let e=t/i(Math.round(r(t)));return e*on(ve(n(),{floor:t=>i(Math.floor(r(t))),ceil:t=>i(Math.ceil(r(t)))})),e}function Ee(){const t=Se($t()).domain([1,10]);return t.copy=()=>Gt(t,Ee()).base(t.base()),Kt.C.apply(t,arguments),t}function _e(t){return function(e){return Math.sign(e)*Math.log1p(Math.abs(e/t))}}function Ae(t){return function(e){return Math.sign(e)*Math.expm1(Math.abs(e))*t}}function je(t){var e=1,n=t(_e(e),Ae(e));return n.constant=function(n){return arguments.length?t(_e(e=+n),Ae(e)):e},he(n)}function ke(){var t=je($t());return t.copy=function(){return Gt(t,ke()).constant(t.constant())},Kt.C.apply(t,arguments)}ae=fe({thousands:",",grouping:[3],currency:["$",""]}),ce=ae.format,ue=ae.formatPrefix;var Me=n(5186);function Pe(t){return function(e){return e<0?-Math.pow(-e,t):Math.pow(e,t)}}function Te(t){return t<0?-Math.sqrt(-t):Math.sqrt(t)}function Ce(t){return t<0?-t*t:t*t}function Ie(t){var e=t(Wt,Wt),n=1;return e.exponent=function(e){return arguments.length?1===(n=+e)?t(Wt,Wt):.5===n?t(Te,Ce):t(Pe(n),Pe(1/n)):n},he(e)}function Ne(){var t=Ie($t());return t.copy=function(){return Gt(t,Ne()).exponent(t.exponent())},Kt.C.apply(t,arguments),t}function De(){return Ne.apply(null,arguments).exponent(.5)}function Re(t){return Math.sign(t)*t*t}function Le(){var t,e=Jt(),n=[0,1],r=!1;function i(n){var i=function(t){return Math.sign(t)*Math.sqrt(Math.abs(t))}(e(n));return isNaN(i)?t:r?Math.round(i):i}return i.invert=function(t){return e.invert(Re(t))},i.domain=function(t){return arguments.length?(e.domain(t),i):e.domain()},i.range=function(t){return arguments.length?(e.range((n=Array.from(t,zt)).map(Re)),i):n.slice()},i.rangeRound=function(t){return i.range(t).round(!0)},i.round=function(t){return arguments.length?(r=!!t,i):r},i.clamp=function(t){return arguments.length?(e.clamp(t),i):e.clamp()},i.unknown=function(e){return arguments.length?(t=e,i):t},i.copy=function(){return Le(e.domain(),n).round(r).clamp(e.clamp()).unknown(t)},Kt.C.apply(i,arguments),he(i)}function Be(t,e){let n;if(void 0===e)for(const r of t)null!=r&&(n=r)&&(n=r);else{let r=-1;for(let i of t)null!=(i=e(i,++r,t))&&(n=i)&&(n=i)}return n}function Ue(t,e){let n;if(void 0===e)for(const r of t)null!=r&&(n>r||void 0===n&&r>=r)&&(n=r);else{let r=-1;for(let i of t)null!=(i=e(i,++r,t))&&(n>i||void 0===n&&i>=i)&&(n=i)}return n}function Fe(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:R;if(t===R)return ze;if("function"!==typeof t)throw new TypeError("compare is not a function");return(e,n)=>{const r=t(e,n);return r||0===r?r:(0===t(n,n))-(0===t(e,e))}}function ze(t,e){return(null==t||!(t>=t))-(null==e||!(e>=e))||(te?1:0)}function Ve(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1/0,i=arguments.length>4?arguments[4]:void 0;if(e=Math.floor(e),n=Math.floor(Math.max(0,n)),r=Math.floor(Math.min(t.length-1,r)),!(n<=e&&e<=r))return t;for(i=void 0===i?ze:Fe(i);r>n;){if(r-n>600){const o=r-n+1,a=e-n+1,c=Math.log(o),u=.5*Math.exp(2*c/3),s=.5*Math.sqrt(c*u*(o-u)/o)*(a-o/2<0?-1:1);Ve(t,e,Math.max(n,Math.floor(e-a*u/o+s)),Math.min(r,Math.floor(e+(o-a)*u/o+s)),i)}const o=t[e];let a=n,c=r;for(We(t,n,e),i(t[r],o)>0&&We(t,n,r);a0;)--c}0===i(t[n],o)?We(t,n,c):(++c,We(t,c,r)),c<=e&&(n=c+1),e<=c&&(r=c-1)}return t}function We(t,e,n){const r=t[e];t[e]=t[n],t[n]=r}function qe(t,e,n){if(t=Float64Array.from(function*(t,e){if(void 0===e)for(let n of t)null!=n&&(n=+n)>=n&&(yield n);else{let n=-1;for(let r of t)null!=(r=e(r,++n,t))&&(r=+r)>=r&&(yield r)}}(t,n)),(r=t.length)&&!isNaN(e=+e)){if(e<=0||r<2)return Ue(t);if(e>=1)return Be(t);var r,i=(r-1)*e,o=Math.floor(i),a=Be(Ve(t,o).subarray(0,o+1));return a+(Ue(t.subarray(o+1))-a)*(i-o)}}function Xe(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:F;if((r=t.length)&&!isNaN(e=+e)){if(e<=0||r<2)return+n(t[0],0,t);if(e>=1)return+n(t[r-1],r-1,t);var r,i=(r-1)*e,o=Math.floor(i),a=+n(t[o],o,t);return a+(+n(t[o+1],o+1,t)-a)*(i-o)}}function He(){var t,e=[],n=[],r=[];function i(){var t=0,i=Math.max(1,n.length);for(r=new Array(i-1);++t0?r[i-1]:e[0],i=r?[i[r-1],n]:[i[a-1],i[a]]},a.unknown=function(e){return arguments.length?(t=e,a):a},a.thresholds=function(){return i.slice()},a.copy=function(){return Ge().domain([e,n]).range(o).unknown(t)},Kt.C.apply(he(a),arguments)}function $e(){var t,e=[.5],n=[0,1],r=1;function i(i){return null!=i&&i<=i?n[W(e,i,0,r)]:t}return i.domain=function(t){return arguments.length?(e=Array.from(t),r=Math.min(e.length,n.length-1),i):e.slice()},i.range=function(t){return arguments.length?(n=Array.from(t),r=Math.min(e.length,n.length-1),i):n.slice()},i.invertExtent=function(t){var r=n.indexOf(t);return[e[r-1],e[r]]},i.unknown=function(e){return arguments.length?(t=e,i):t},i.copy=function(){return $e().domain(e).range(n).unknown(t)},Kt.C.apply(i,arguments)}const Je=1e3,Ye=6e4,Ke=36e5,Ze=864e5,Qe=6048e5,tn=2592e6,en=31536e6,nn=new Date,rn=new Date;function on(t,e,n,r){function i(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return i.floor=e=>(t(e=new Date(+e)),e),i.ceil=n=>(t(n=new Date(n-1)),e(n,1),t(n),n),i.round=t=>{const e=i(t),n=i.ceil(t);return t-e(e(t=new Date(+t),null==n?1:Math.floor(n)),t),i.range=(n,r,o)=>{const a=[];if(n=i.ceil(n),o=null==o?1:Math.floor(o),!(n0))return a;let c;do{a.push(c=new Date(+n)),e(n,o),t(n)}while(con((e=>{if(e>=e)for(;t(e),!n(e);)e.setTime(e-1)}),((t,r)=>{if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!n(t););else for(;--r>=0;)for(;e(t,1),!n(t););})),n&&(i.count=(e,r)=>(nn.setTime(+e),rn.setTime(+r),t(nn),t(rn),Math.floor(n(nn,rn))),i.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?e=>r(e)%t===0:e=>i.count(0,e)%t===0):i:null)),i}const an=on((()=>{}),((t,e)=>{t.setTime(+t+e)}),((t,e)=>e-t));an.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?on((e=>{e.setTime(Math.floor(e/t)*t)}),((e,n)=>{e.setTime(+e+n*t)}),((e,n)=>(n-e)/t)):an:null);an.range;const cn=on((t=>{t.setTime(t-t.getMilliseconds())}),((t,e)=>{t.setTime(+t+e*Je)}),((t,e)=>(e-t)/Je),(t=>t.getUTCSeconds())),un=(cn.range,on((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*Je)}),((t,e)=>{t.setTime(+t+e*Ye)}),((t,e)=>(e-t)/Ye),(t=>t.getMinutes()))),sn=(un.range,on((t=>{t.setUTCSeconds(0,0)}),((t,e)=>{t.setTime(+t+e*Ye)}),((t,e)=>(e-t)/Ye),(t=>t.getUTCMinutes()))),ln=(sn.range,on((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*Je-t.getMinutes()*Ye)}),((t,e)=>{t.setTime(+t+e*Ke)}),((t,e)=>(e-t)/Ke),(t=>t.getHours()))),fn=(ln.range,on((t=>{t.setUTCMinutes(0,0,0)}),((t,e)=>{t.setTime(+t+e*Ke)}),((t,e)=>(e-t)/Ke),(t=>t.getUTCHours()))),pn=(fn.range,on((t=>t.setHours(0,0,0,0)),((t,e)=>t.setDate(t.getDate()+e)),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*Ye)/Ze),(t=>t.getDate()-1))),hn=(pn.range,on((t=>{t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+e)}),((t,e)=>(e-t)/Ze),(t=>t.getUTCDate()-1))),dn=(hn.range,on((t=>{t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+e)}),((t,e)=>(e-t)/Ze),(t=>Math.floor(t/Ze))));dn.range;function yn(t){return on((e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),((t,e)=>{t.setDate(t.getDate()+7*e)}),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*Ye)/Qe))}const vn=yn(0),gn=yn(1),mn=yn(2),bn=yn(3),xn=yn(4),wn=yn(5),On=yn(6);vn.range,gn.range,mn.range,bn.range,xn.range,wn.range,On.range;function Sn(t){return on((e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+7*e)}),((t,e)=>(e-t)/Qe))}const En=Sn(0),_n=Sn(1),An=Sn(2),jn=Sn(3),kn=Sn(4),Mn=Sn(5),Pn=Sn(6),Tn=(En.range,_n.range,An.range,jn.range,kn.range,Mn.range,Pn.range,on((t=>{t.setDate(1),t.setHours(0,0,0,0)}),((t,e)=>{t.setMonth(t.getMonth()+e)}),((t,e)=>e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())),(t=>t.getMonth()))),Cn=(Tn.range,on((t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)}),((t,e)=>e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear())),(t=>t.getUTCMonth()))),In=(Cn.range,on((t=>{t.setMonth(0,1),t.setHours(0,0,0,0)}),((t,e)=>{t.setFullYear(t.getFullYear()+e)}),((t,e)=>e.getFullYear()-t.getFullYear()),(t=>t.getFullYear())));In.every=t=>isFinite(t=Math.floor(t))&&t>0?on((e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),((e,n)=>{e.setFullYear(e.getFullYear()+n*t)})):null;In.range;const Nn=on((t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)}),((t,e)=>e.getUTCFullYear()-t.getUTCFullYear()),(t=>t.getUTCFullYear()));Nn.every=t=>isFinite(t=Math.floor(t))&&t>0?on((e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),((e,n)=>{e.setUTCFullYear(e.getUTCFullYear()+n*t)})):null;Nn.range;function Dn(t,e,n,r,i,o){const a=[[cn,1,Je],[cn,5,5e3],[cn,15,15e3],[cn,30,3e4],[o,1,Ye],[o,5,3e5],[o,15,9e5],[o,30,18e5],[i,1,Ke],[i,3,108e5],[i,6,216e5],[i,12,432e5],[r,1,Ze],[r,2,1728e5],[n,1,Qe],[e,1,tn],[e,3,7776e6],[t,1,en]];function c(e,n,r){const i=Math.abs(n-e)/r,o=B((t=>{let[,,e]=t;return e})).right(a,i);if(o===a.length)return t.every(D(e/en,n/en,r));if(0===o)return an.every(Math.max(D(e,n,r),1));const[c,u]=a[i/a[o-1][2][t.toLowerCase(),e])))}function tr(t,e,n){var r=Gn.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function er(t,e,n){var r=Gn.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function nr(t,e,n){var r=Gn.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function rr(t,e,n){var r=Gn.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function ir(t,e,n){var r=Gn.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function or(t,e,n){var r=Gn.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function ar(t,e,n){var r=Gn.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function cr(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function ur(t,e,n){var r=Gn.exec(e.slice(n,n+1));return r?(t.q=3*r[0]-3,n+r[0].length):-1}function sr(t,e,n){var r=Gn.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function lr(t,e,n){var r=Gn.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function fr(t,e,n){var r=Gn.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function pr(t,e,n){var r=Gn.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function hr(t,e,n){var r=Gn.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function dr(t,e,n){var r=Gn.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function yr(t,e,n){var r=Gn.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function vr(t,e,n){var r=Gn.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function gr(t,e,n){var r=$n.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function mr(t,e,n){var r=Gn.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function br(t,e,n){var r=Gn.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function xr(t,e){return Yn(t.getDate(),e,2)}function wr(t,e){return Yn(t.getHours(),e,2)}function Or(t,e){return Yn(t.getHours()%12||12,e,2)}function Sr(t,e){return Yn(1+pn.count(In(t),t),e,3)}function Er(t,e){return Yn(t.getMilliseconds(),e,3)}function _r(t,e){return Er(t,e)+"000"}function Ar(t,e){return Yn(t.getMonth()+1,e,2)}function jr(t,e){return Yn(t.getMinutes(),e,2)}function kr(t,e){return Yn(t.getSeconds(),e,2)}function Mr(t){var e=t.getDay();return 0===e?7:e}function Pr(t,e){return Yn(vn.count(In(t)-1,t),e,2)}function Tr(t){var e=t.getDay();return e>=4||0===e?xn(t):xn.ceil(t)}function Cr(t,e){return t=Tr(t),Yn(xn.count(In(t),t)+(4===In(t).getDay()),e,2)}function Ir(t){return t.getDay()}function Nr(t,e){return Yn(gn.count(In(t)-1,t),e,2)}function Dr(t,e){return Yn(t.getFullYear()%100,e,2)}function Rr(t,e){return Yn((t=Tr(t)).getFullYear()%100,e,2)}function Lr(t,e){return Yn(t.getFullYear()%1e4,e,4)}function Br(t,e){var n=t.getDay();return Yn((t=n>=4||0===n?xn(t):xn.ceil(t)).getFullYear()%1e4,e,4)}function Ur(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+Yn(e/60|0,"0",2)+Yn(e%60,"0",2)}function Fr(t,e){return Yn(t.getUTCDate(),e,2)}function zr(t,e){return Yn(t.getUTCHours(),e,2)}function Vr(t,e){return Yn(t.getUTCHours()%12||12,e,2)}function Wr(t,e){return Yn(1+hn.count(Nn(t),t),e,3)}function qr(t,e){return Yn(t.getUTCMilliseconds(),e,3)}function Xr(t,e){return qr(t,e)+"000"}function Hr(t,e){return Yn(t.getUTCMonth()+1,e,2)}function Gr(t,e){return Yn(t.getUTCMinutes(),e,2)}function $r(t,e){return Yn(t.getUTCSeconds(),e,2)}function Jr(t){var e=t.getUTCDay();return 0===e?7:e}function Yr(t,e){return Yn(En.count(Nn(t)-1,t),e,2)}function Kr(t){var e=t.getUTCDay();return e>=4||0===e?kn(t):kn.ceil(t)}function Zr(t,e){return t=Kr(t),Yn(kn.count(Nn(t),t)+(4===Nn(t).getUTCDay()),e,2)}function Qr(t){return t.getUTCDay()}function ti(t,e){return Yn(_n.count(Nn(t)-1,t),e,2)}function ei(t,e){return Yn(t.getUTCFullYear()%100,e,2)}function ni(t,e){return Yn((t=Kr(t)).getUTCFullYear()%100,e,2)}function ri(t,e){return Yn(t.getUTCFullYear()%1e4,e,4)}function ii(t,e){var n=t.getUTCDay();return Yn((t=n>=4||0===n?kn(t):kn.ceil(t)).getUTCFullYear()%1e4,e,4)}function oi(){return"+0000"}function ai(){return"%"}function ci(t){return+t}function ui(t){return Math.floor(+t/1e3)}function si(t){return new Date(t)}function li(t){return t instanceof Date?+t:+new Date(+t)}function fi(t,e,n,r,i,o,a,c,u,s){var l=Jt(),f=l.invert,p=l.domain,h=s(".%L"),d=s(":%S"),y=s("%I:%M"),v=s("%I %p"),g=s("%a %d"),m=s("%b %d"),b=s("%B"),x=s("%Y");function w(t){return(u(t)e(r/(t.length-1))))},n.quantiles=function(e){return Array.from({length:e+1},((n,r)=>qe(t,r/e)))},n.copy=function(){return wi(e).domain(t)},Kt.K.apply(n,arguments)}function Oi(){var t,e,n,r,i,o,a,c=0,u=.5,s=1,l=1,f=Wt,p=!1;function h(t){return isNaN(t=+t)?a:(t=.5+((t=+o(t))-e)*(l*t1)for(var n,r,i,o=1,a=t[e[0]],c=a.length;o=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:ci,s:ui,S:kr,u:Mr,U:Pr,V:Cr,w:Ir,W:Nr,x:null,X:null,y:Dr,Y:Lr,Z:Ur,"%":ai},x={a:function(t){return a[t.getUTCDay()]},A:function(t){return o[t.getUTCDay()]},b:function(t){return u[t.getUTCMonth()]},B:function(t){return c[t.getUTCMonth()]},c:null,d:Fr,e:Fr,f:Xr,g:ni,G:ii,H:zr,I:Vr,j:Wr,L:qr,m:Hr,M:Gr,p:function(t){return i[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:ci,s:ui,S:$r,u:Jr,U:Yr,V:Zr,w:Qr,W:ti,x:null,X:null,y:ei,Y:ri,Z:oi,"%":ai},w={a:function(t,e,n){var r=h.exec(e.slice(n));return r?(t.w=d.get(r[0].toLowerCase()),n+r[0].length):-1},A:function(t,e,n){var r=f.exec(e.slice(n));return r?(t.w=p.get(r[0].toLowerCase()),n+r[0].length):-1},b:function(t,e,n){var r=g.exec(e.slice(n));return r?(t.m=m.get(r[0].toLowerCase()),n+r[0].length):-1},B:function(t,e,n){var r=y.exec(e.slice(n));return r?(t.m=v.get(r[0].toLowerCase()),n+r[0].length):-1},c:function(t,n,r){return E(t,e,n,r)},d:lr,e:lr,f:vr,g:ar,G:or,H:pr,I:pr,j:fr,L:yr,m:sr,M:hr,p:function(t,e,n){var r=s.exec(e.slice(n));return r?(t.p=l.get(r[0].toLowerCase()),n+r[0].length):-1},q:ur,Q:mr,s:br,S:dr,u:er,U:nr,V:rr,w:tr,W:ir,x:function(t,e,r){return E(t,n,e,r)},X:function(t,e,n){return E(t,r,e,n)},y:ar,Y:or,Z:cr,"%":gr};function O(t,e){return function(n){var r,i,o,a=[],c=-1,u=0,s=t.length;for(n instanceof Date||(n=new Date(+n));++c53)return null;"w"in o||(o.w=1),"Z"in o?(i=(r=zn(Vn(o.y,0,1))).getUTCDay(),r=i>4||0===i?_n.ceil(r):_n(r),r=hn.offset(r,7*(o.V-1)),o.y=r.getUTCFullYear(),o.m=r.getUTCMonth(),o.d=r.getUTCDate()+(o.w+6)%7):(i=(r=Fn(Vn(o.y,0,1))).getDay(),r=i>4||0===i?gn.ceil(r):gn(r),r=pn.offset(r,7*(o.V-1)),o.y=r.getFullYear(),o.m=r.getMonth(),o.d=r.getDate()+(o.w+6)%7)}else("W"in o||"U"in o)&&("w"in o||(o.w="u"in o?o.u%7:"W"in o?1:0),i="Z"in o?zn(Vn(o.y,0,1)).getUTCDay():Fn(Vn(o.y,0,1)).getDay(),o.m=0,o.d="W"in o?(o.w+6)%7+7*o.W-(i+5)%7:o.w+7*o.U-(i+6)%7);return"Z"in o?(o.H+=o.Z/100|0,o.M+=o.Z%100,zn(o)):Fn(o)}}function E(t,e,n,r){for(var i,o,a=0,c=e.length,u=n.length;a=u)return-1;if(37===(i=e.charCodeAt(a++))){if(i=e.charAt(a++),!(o=w[i in Hn?e.charAt(a++):i])||(r=o(t,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return b.x=O(n,b),b.X=O(r,b),b.c=O(e,b),x.x=O(n,x),x.X=O(r,x),x.c=O(e,x),{format:function(t){var e=O(t+="",b);return e.toString=function(){return t},e},parse:function(t){var e=S(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=O(t+="",x);return e.toString=function(){return t},e},utcParse:function(t){var e=S(t+="",!0);return e.toString=function(){return t},e}}}(t),qn=Wn.format,Wn.parse,Xn=Wn.utcFormat,Wn.utcParse}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});var Mi=n(9236),Pi=n(3809);function Ti(t){for(var e=t.length,n=new Array(e);--e>=0;)n[e]=e;return n}function Ci(t,e){return t[e]}function Ii(t){const e=[];return e.key=t,e}var Ni=n(8210),Di=n.n(Ni);function Ri(t){return function(t){if(Array.isArray(t))return Li(t)}(t)||function(t){if("undefined"!==typeof Symbol&&Symbol.iterator in Object(t))return Array.from(t)}(t)||function(t,e){if(!t)return;if("string"===typeof t)return Li(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Li(t,e)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Li(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n=e?n.apply(void 0,i):t(e-a,zi((function(){for(var t=arguments.length,e=new Array(t),r=0;rt.length)&&(e=t.length);for(var n=0,r=new Array(e);nr&&(i=r,o=n),[i,o]}function eo(t,e,n){if(t.lte(0))return new(Di())(0);var r=Ji.getDigitCount(t.toNumber()),i=new(Di())(10).pow(r),o=t.div(i),a=1!==r?.05:.1,c=new(Di())(Math.ceil(o.div(a).toNumber())).add(n).mul(a).mul(i);return e?c:new(Di())(Math.ceil(c))}function no(t,e,n){var r=1,i=new(Di())(t);if(!i.isint()&&n){var o=Math.abs(t);o<1?(r=new(Di())(10).pow(Ji.getDigitCount(t)-1),i=new(Di())(Math.floor(i.div(r).toNumber())).mul(r)):o>1&&(i=new(Di())(Math.floor(t)))}else 0===t?i=new(Di())(Math.floor((e-1)/2)):n||(i=new(Di())(Math.floor(t)));var a=Math.floor((e-1)/2);return Hi(Xi((function(t){return i.add(new(Di())(t-a).mul(r)).toNumber()})),qi)(0,e)}function ro(t,e,n,r){var i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0;if(!Number.isFinite((e-t)/(n-1)))return{step:new(Di())(0),tickMin:new(Di())(0),tickMax:new(Di())(0)};var o,a=eo(new(Di())(e).sub(t).div(n-1),r,i);o=t<=0&&e>=0?new(Di())(0):(o=new(Di())(t).add(e).div(2)).sub(new(Di())(o).mod(a));var c=Math.ceil(o.sub(t).div(a).toNumber()),u=Math.ceil(new(Di())(e).sub(o).div(a).toNumber()),s=c+u+1;return s>n?ro(t,e,n,r,i+1):(s0?u+(n-s):u,c=e>0?c:c+(n-s)),{step:a,tickMin:o.sub(new(Di())(c).mul(a)),tickMax:o.add(new(Di())(u).mul(a))})}var io=$i((function(t){var e=Ki(t,2),n=e[0],r=e[1],i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:6,o=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=Math.max(i,2),c=Ki(to([n,r]),2),u=c[0],s=c[1];if(u===-1/0||s===1/0){var l=s===1/0?[u].concat(Yi(qi(0,i-1).map((function(){return 1/0})))):[].concat(Yi(qi(0,i-1).map((function(){return-1/0}))),[s]);return n>r?Gi(l):l}if(u===s)return no(u,i,o);var f=ro(u,s,a,o),p=f.step,h=f.tickMin,d=f.tickMax,y=Ji.rangeStep(h,d.add(new(Di())(.1).mul(p)),p);return n>r?Gi(y):y})),oo=($i((function(t){var e=Ki(t,2),n=e[0],r=e[1],i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:6,o=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=Math.max(i,2),c=Ki(to([n,r]),2),u=c[0],s=c[1];if(u===-1/0||s===1/0)return[n,r];if(u===s)return no(u,i,o);var l=eo(new(Di())(s).sub(u).div(a-1),o,0),f=Hi(Xi((function(t){return new(Di())(u).add(new(Di())(t).mul(l)).toNumber()})),qi)(0,a).filter((function(t){return t>=u&&t<=s}));return n>r?Gi(f):f})),$i((function(t,e){var n=Ki(t,2),r=n[0],i=n[1],o=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=Ki(to([r,i]),2),c=a[0],u=a[1];if(c===-1/0||u===1/0)return[r,i];if(c===u)return[c];var s=Math.max(e,2),l=eo(new(Di())(u).sub(c).div(s-1),o,0),f=[].concat(Yi(Ji.rangeStep(new(Di())(c),new(Di())(u).sub(new(Di())(.99).mul(l)),l)),[u]);return r>i?Gi(f):f}))),ao=n(5043),co=n(4020),uo=n(240),so=["offset","layout","width","dataKey","data","dataPointFormatter","xAxis","yAxis"];function lo(){return lo=Object.assign?Object.assign.bind():function(t){for(var e=1;et.length)&&(e=t.length);for(var n=0,r=new Array(e);n=0||(i[n]=t[n]);return i}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(i[n]=t[n])}return i}function yo(t){var e=t.offset,n=t.layout,r=t.width,i=t.dataKey,o=t.data,a=t.dataPointFormatter,c=t.xAxis,u=t.yAxis,s=ho(t,so),l=(0,uo.J9)(s),f=o.map((function(t,o){var s=a(t,i),f=s.x,p=s.y,h=s.value,d=s.errorVal;if(!d)return null;var y,v,g=[];if(Array.isArray(d)){var m=fo(d,2);y=m[0],v=m[1]}else y=v=d;if("vertical"===n){var b=c.scale,x=p+e,w=x+r,O=x-r,S=b(h-y),E=b(h+v);g.push({x1:E,y1:w,x2:E,y2:O}),g.push({x1:S,y1:x,x2:E,y2:x}),g.push({x1:S,y1:w,x2:S,y2:O})}else if("horizontal"===n){var _=u.scale,A=f+e,j=A-r,k=A+r,M=_(h-y),P=_(h+v);g.push({x1:j,y1:P,x2:k,y2:P}),g.push({x1:A,y1:M,x2:A,y2:P}),g.push({x1:j,y1:M,x2:k,y2:M})}return ao.createElement(co.W,lo({className:"recharts-errorBar",key:"bar-".concat(o)},l),g.map((function(t,e){return ao.createElement("line",lo({},t,{key:"line-".concat(e)}))})))}));return ao.createElement(co.W,{className:"recharts-errorBars"},f)}yo.defaultProps={stroke:"black",strokeWidth:1.5,width:5,offset:0,layout:"horizontal"},yo.displayName="ErrorBar";var vo=n(763),go=n(6307);function mo(t){return mo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},mo(t)}function bo(t){return function(t){if(Array.isArray(t))return xo(t)}(t)||function(t){if("undefined"!==typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(!t)return;if("string"===typeof t)return xo(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return xo(t,e)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function xo(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n1&&void 0!==arguments[1]?arguments[1]:[],r=arguments.length>2?arguments[2]:void 0,i=arguments.length>3?arguments[3]:void 0,o=-1,a=null!==(e=null===n||void 0===n?void 0:n.length)&&void 0!==e?e:0;if(a<=1)return 0;if(i&&"angleAxis"===i.axisType&&Math.abs(Math.abs(i.range[1]-i.range[0])-360)<=1e-6)for(var c=i.range,u=0;u0?r[u-1].coordinate:r[a-1].coordinate,l=r[u].coordinate,f=u>=a-1?r[0].coordinate:r[u+1].coordinate,p=void 0;if((0,go.sA)(l-s)!==(0,go.sA)(f-l)){var h=[];if((0,go.sA)(f-l)===(0,go.sA)(c[1]-c[0])){p=f;var d=l+c[1]-c[0];h[0]=Math.min(d,(d+s)/2),h[1]=Math.max(d,(d+s)/2)}else{p=s;var y=f+c[1]-c[0];h[0]=Math.min(l,(y+l)/2),h[1]=Math.max(l,(y+l)/2)}var v=[Math.min(l,(p+l)/2),Math.max(l,(p+l)/2)];if(t>v[0]&&t<=v[1]||t>=h[0]&&t<=h[1]){o=r[u].index;break}}else{var g=Math.min(s,f),m=Math.max(s,f);if(t>(g+l)/2&&t<=(m+l)/2){o=r[u].index;break}}}else for(var b=0;b0&&b(n[b].coordinate+n[b-1].coordinate)/2&&t<=(n[b].coordinate+n[b+1].coordinate)/2||b===a-1&&t>(n[b].coordinate+n[b-1].coordinate)/2){o=n[b].index;break}return o},jo=function(t){var e,n=t.type.displayName,r=t.props,i=r.stroke,o=r.fill;switch(n){case"Line":e=i;break;case"Area":case"Radar":e=i&&"none"!==i?i:o;break;default:e=o}return e},ko=function(t){var e,n=t.children,r=t.formattedGraphicalItems,i=t.legendWidth,o=t.legendContent,a=(0,uo.BU)(n,vo.s);return a?(e=a.props&&a.props.payload?a.props&&a.props.payload:"children"===o?(r||[]).reduce((function(t,e){var n=e.item,r=e.props,i=r.sectors||r.data||[];return t.concat(i.map((function(t){return{type:a.props.iconType||n.props.legendType,value:t.name,color:t.fill,payload:t}})))}),[]):(r||[]).map((function(t){var e=t.item,n=e.props,r=n.dataKey,i=n.name,o=n.legendType;return{inactive:n.hide,dataKey:r,type:a.props.iconType||o||"square",color:jo(e),value:i||r,payload:e.props}})),Oo(Oo(Oo({},a.props),vo.s.getWithHeight(a,i)),{},{payload:e,item:a})):null},Mo=function(t){var e=t.barSize,n=t.stackGroups,r=void 0===n?{}:n;if(!r)return{};for(var i={},o=Object.keys(r),a=0,c=o.length;a=0}));if(y&&y.length){var v=y[0].props.barSize,g=y[0].props[d];i[g]||(i[g]=[]),i[g].push({item:y[0],stackList:y.slice(1),barSize:j()(v)?e:v})}}return i},Po=function(t){var e=t.barGap,n=t.barCategoryGap,r=t.bandSize,i=t.sizeList,o=void 0===i?[]:i,a=t.maxBarSize,c=o.length;if(c<1)return null;var u,s=(0,go.F4)(e,r,0,!0);if(o[0].barSize===+o[0].barSize){var l=!1,f=r/c,p=o.reduce((function(t,e){return t+e.barSize||0}),0);(p+=(c-1)*s)>=r&&(p-=(c-1)*s,s=0),p>=r&&f>0&&(l=!0,p=c*(f*=.9));var h={offset:((r-p)/2|0)-s,size:0};u=o.reduce((function(t,e){var n=[].concat(bo(t),[{item:e.item,position:{offset:h.offset+h.size+s,size:l?f:e.barSize}}]);return h=n[n.length-1].position,e.stackList&&e.stackList.length&&e.stackList.forEach((function(t){n.push({item:t,position:h})})),n}),[])}else{var d=(0,go.F4)(n,r,0,!0);r-2*d-(c-1)*s<=0&&(s=0);var y=(r-2*d-(c-1)*s)/c;y>1&&(y>>=0);var v=a===+a?Math.min(y,a):y;u=o.reduce((function(t,e,n){var r=[].concat(bo(t),[{item:e.item,position:{offset:d+(y+s)*n+(y-v)/2,size:v}}]);return e.stackList&&e.stackList.length&&e.stackList.forEach((function(t){r.push({item:t,position:r[r.length-1].position})})),r}),[])}return u},To=function(t,e,n,r){var i=n.children,o=n.width,a=n.margin,c=o-(a.left||0)-(a.right||0),u=ko({children:i,legendWidth:c}),s=t;if(u){var l=r||{},f=u.align,p=u.verticalAlign,h=u.layout;("vertical"===h||"horizontal"===h&&"middle"===p)&&(0,go.Et)(t[f])&&(s=Oo(Oo({},t),{},So({},f,s[f]+(l.width||0)))),("horizontal"===h||"vertical"===h&&"center"===f)&&(0,go.Et)(t[p])&&(s=Oo(Oo({},t),{},So({},p,s[p]+(l.height||0))))}return s},Co=function(t,e,n,r,i){var o=e.props.children,a=(0,uo.aS)(o,yo).filter((function(t){return function(t,e,n){return!!j()(e)||("horizontal"===t?"yAxis"===e:"vertical"===t||"x"===n?"xAxis"===e:"y"!==n||"yAxis"===e)}(r,i,t.props.direction)}));if(a&&a.length){var c=a.map((function(t){return t.props.dataKey}));return t.reduce((function(t,e){var r=Eo(e,n,0),i=y()(r)?[b()(r),g()(r)]:[r,r],o=c.reduce((function(t,n){var r=Eo(e,n,0),o=i[0]-Math.abs(y()(r)?r[0]:r),a=i[1]+Math.abs(y()(r)?r[1]:r);return[Math.min(o,t[0]),Math.max(a,t[1])]}),[1/0,-1/0]);return[Math.min(o[0],t[0]),Math.max(o[1],t[1])]}),[1/0,-1/0])}return null},Io=function(t,e,n,r,i){var o=e.map((function(e){return Co(t,e,n,i,r)})).filter((function(t){return!j()(t)}));return o&&o.length?o.reduce((function(t,e){return[Math.min(t[0],e[0]),Math.max(t[1],e[1])]}),[1/0,-1/0]):null},No=function(t,e,n,r,i){var o=e.map((function(e){var o=e.props.dataKey;return"number"===n&&o&&Co(t,e,o,r)||_o(t,o,n,i)}));if("number"===n)return o.reduce((function(t,e){return[Math.min(t[0],e[0]),Math.max(t[1],e[1])]}),[1/0,-1/0]);var a={};return o.reduce((function(t,e){for(var n=0,r=e.length;n=2?2*(0,go.sA)(a[0]-a[1])*u:u,e&&(t.ticks||t.niceTicks)?(t.ticks||t.niceTicks).map((function(t){var e=i?i.indexOf(t):t;return{coordinate:r(e)+u,value:t,offset:u}})).filter((function(t){return!h()(t.coordinate)})):t.isCategorical&&t.categoricalDomain?t.categoricalDomain.map((function(t,e){return{coordinate:r(t)+u,value:t,index:e,offset:u}})):r.ticks&&!n?r.ticks(t.tickCount).map((function(t){return{coordinate:r(t)+u,value:t,offset:u}})):r.domain().map((function(t,e){return{coordinate:r(t)+u,value:i?i[t]:t,index:e,offset:u}}))},Bo=function(t,e,n){var r;return S()(n)?r=n:S()(e)&&(r=e),S()(t)||r?function(e,n,i,o){S()(t)&&t(e,n,i,o),S()(r)&&r(e,n,i,o)}:null},Uo=function(t,e,n){var i=t.scale,o=t.type,a=t.layout,c=t.axisType;if("auto"===i)return"radial"===a&&"radiusAxis"===c?{scale:k.A(),realScaleType:"band"}:"radial"===a&&"angleAxis"===c?{scale:de(),realScaleType:"linear"}:"category"===o&&e&&(e.indexOf("LineChart")>=0||e.indexOf("AreaChart")>=0||e.indexOf("ComposedChart")>=0&&!n)?{scale:k.z(),realScaleType:"point"}:"category"===o?{scale:k.A(),realScaleType:"band"}:{scale:de(),realScaleType:"linear"};if(f()(i)){var u="scale".concat(s()(i));return{scale:(r[u]||k.z)(),realScaleType:r[u]?u:"point"}}return S()(i)?{scale:i}:{scale:k.z(),realScaleType:"point"}},Fo=1e-4,zo=function(t){var e=t.domain();if(e&&!(e.length<=2)){var n=e.length,r=t.range(),i=Math.min(r[0],r[1])-Fo,o=Math.max(r[0],r[1])+Fo,a=t(e[0]),c=t(e[n-1]);(ao||co)&&t.domain([e[0],e[n-1]])}},Vo={sign:function(t){var e=t.length;if(!(e<=0))for(var n=0,r=t[0].length;n=0?(t[a][n][0]=i,t[a][n][1]=i+c,i=t[a][n][1]):(t[a][n][0]=o,t[a][n][1]=o+c,o=t[a][n][1])}},expand:function(t,e){if((r=t.length)>0){for(var n,r,i,o=0,a=t[0].length;o0){for(var n,r=0,i=t[e[0]],o=i.length;r0&&(r=(n=t[e[0]]).length)>0){for(var n,r,i,o=0,a=1;a=0?(t[o][n][0]=i,t[o][n][1]=i+a,i=t[o][n][1]):(t[o][n][0]=0,t[o][n][1]=0)}}},Wo=function(t,e,n){var r=e.map((function(t){return t.props.dataKey})),i=function(){var t=(0,Pi.A)([]),e=Ti,n=ki,r=Ci;function i(i){var o,a,c=Array.from(t.apply(this,arguments),Ii),u=c.length,s=-1;for(const t of i)for(o=0,++s;o=0?r.stackedData[i]:null}}return null},Go=function(t,e,n){return Object.keys(t).reduce((function(r,i){var o=t[i].stackedData.reduce((function(t,r){var i=r.slice(e,n+1).reduce((function(t,e){return[b()(e.concat([t[0]]).filter(go.Et)),g()(e.concat([t[1]]).filter(go.Et))]}),[1/0,-1/0]);return[Math.min(t[0],i[0]),Math.max(t[1],i[1])]}),[1/0,-1/0]);return[Math.min(o[0],r[0]),Math.max(o[1],r[1])]}),[1/0,-1/0]).map((function(t){return t===1/0||t===-1/0?0:t}))},$o=/^dataMin[\s]*-[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,Jo=/^dataMax[\s]*\+[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,Yo=function(t,e,n){if(S()(t))return t(e,n);if(!y()(t))return e;var r=[];if((0,go.Et)(t[0]))r[0]=n?t[0]:Math.min(t[0],e[0]);else if($o.test(t[0])){var i=+$o.exec(t[0])[1];r[0]=e[0]-i}else S()(t[0])?r[0]=t[0](e[0]):r[0]=e[0];if((0,go.Et)(t[1]))r[1]=n?t[1]:Math.max(t[1],e[1]);else if(Jo.test(t[1])){var o=+Jo.exec(t[1])[1];r[1]=e[1]+o}else S()(t[1])?r[1]=t[1](e[1]):r[1]=e[1];return r},Ko=function(t,e,n){if(t&&t.scale&&t.scale.bandwidth){var r=t.scale.bandwidth();if(!n||r>0)return r}if(t&&e&&e.length>=2){for(var i=c()(e,(function(t){return t.coordinate})),o=1/0,a=1,u=i.length;a{"use strict";n.d(e,{A3:()=>v,Pu:()=>y,Xk:()=>g});var r=n(6015);function i(t){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i(t)}function o(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function a(t){for(var e=1;et.length)&&(e=t.length);for(var n=0,r=new Array(e);n=0&&i===+i?"".concat(i,"px"):i),";");var r,i,o}),"")},y=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(void 0===t||null===t||r.m.isSsr)return{width:0,height:0};var n="".concat(t),i=d(e),o="".concat(n,"-").concat(i);if(l.widthCache[o])return l.widthCache[o];try{var c=document.getElementById(h);c||((c=document.createElement("span")).setAttribute("id",h),c.setAttribute("aria-hidden","true"),document.body.appendChild(c));var u=a(a({},f),e);Object.keys(u).map((function(t){return c.style[t]=u[t],t})),c.textContent=n;var s=c.getBoundingClientRect(),p={width:s.width,height:s.height};return l.widthCache[o]=p,++l.cacheCount>2e3&&(l.cacheCount=0,l.widthCache={}),p}catch(y){return{width:0,height:0}}},v=function(t){var e=t.ownerDocument.documentElement,n={top:0,left:0};return"undefined"!==typeof t.getBoundingClientRect&&(n=t.getBoundingClientRect()),{top:n.top+window.pageYOffset-e.clientTop,left:n.left+window.pageXOffset-e.clientLeft}},g=function(t,e){return{chartX:Math.round(t.pageX-e.left),chartY:Math.round(t.pageY-e.top)}}},6307:(t,e,n)=>{"use strict";n.d(e,{CG:()=>w,Dj:()=>O,Et:()=>y,F4:()=>b,NF:()=>m,_3:()=>d,eP:()=>S,lX:()=>x,sA:()=>h,vh:()=>v});var r=n(3097),i=n.n(r),o=n(4052),a=n.n(o),c=n(5268),u=n.n(c),s=n(9160),l=n.n(s),f=n(620),p=n.n(f),h=function(t){return 0===t?0:t>0?1:-1},d=function(t){return p()(t)&&t.indexOf("%")===t.length-1},y=function(t){return l()(t)&&!u()(t)},v=function(t){return y(t)||p()(t)},g=0,m=function(t){var e=++g;return"".concat(t||"").concat(e)},b=function(t,e){var n,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,i=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(!y(t)&&!p()(t))return r;if(d(t)){var o=t.indexOf("%");n=e*parseFloat(t.slice(0,o))/100}else n=+t;return u()(n)&&(n=r),i&&n>e&&(n=e),n},x=function(t){if(!t)return null;var e=Object.keys(t);return e&&e.length?t[e[0]]:null},w=function(t){if(!a()(t))return!1;for(var e=t.length,n={},r=0;r{"use strict";n.d(e,{m:()=>r});var r={isSsr:!("undefined"!==typeof window&&window.document&&window.document.createElement&&window.setTimeout),get:function(t){return r[t]},set:function(t,e){if("string"===typeof t)r[t]=e;else{var n=Object.keys(t);n&&n.length&&n.forEach((function(e){r[e]=t[e]}))}}}},155:(t,e,n)=>{"use strict";n.d(e,{R:()=>r});var r=function(t,e){for(var n=arguments.length,r=new Array(n>2?n-2:0),i=2;i{"use strict";n.d(e,{IZ:()=>y,Kg:()=>h,lY:()=>v,pr:()=>g,yy:()=>x});var r=n(9686),i=n.n(r),o=n(6307),a=n(1756);function c(t){return c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},c(t)}function u(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function s(t){for(var e=1;et.length)&&(e=t.length);for(var n=0,r=new Array(e);n2&&void 0!==arguments[2]?arguments[2]:{top:0,right:0,bottom:0,left:0};return Math.min(Math.abs(t-(n.left||0)-(n.right||0)),Math.abs(e-(n.top||0)-(n.bottom||0)))/2},g=function(t,e,n,r,c){var u=t.width,p=t.height,h=t.startAngle,d=t.endAngle,y=(0,o.F4)(t.cx,u,u/2),g=(0,o.F4)(t.cy,p,p/2),m=v(u,p,n),b=(0,o.F4)(t.innerRadius,m,0),x=(0,o.F4)(t.outerRadius,m,.8*m);return Object.keys(e).reduce((function(t,n){var o,u=e[n],p=u.domain,v=u.reversed;if(i()(u.range))"angleAxis"===r?o=[h,d]:"radiusAxis"===r&&(o=[b,x]),v&&(o=[o[1],o[0]]);else{var m=f(o=u.range,2);h=m[0],d=m[1]}var w=(0,a.W7)(u,c),O=w.realScaleType,S=w.scale;S.domain(p).range(o),(0,a.YB)(S);var E=(0,a.w7)(S,s(s({},u),{},{realScaleType:O})),_=s(s(s({},u),E),{},{range:o,radius:x,realScaleType:O,scale:S,cx:y,cy:g,innerRadius:b,outerRadius:x,startAngle:h,endAngle:d});return s(s({},t),{},l({},n,_))}),{})},m=function(t,e){var n=t.x,r=t.y,i=e.cx,o=e.cy,a=function(t,e){var n=t.x,r=t.y,i=e.x,o=e.y;return Math.sqrt(Math.pow(n-i,2)+Math.pow(r-o,2))}({x:n,y:r},{x:i,y:o});if(a<=0)return{radius:a};var c=(n-i)/a,u=Math.acos(c);return r>o&&(u=2*Math.PI-u),{radius:a,angle:d(u),angleInRadian:u}},b=function(t,e){var n=e.startAngle,r=e.endAngle,i=Math.floor(n/360),o=Math.floor(r/360);return t+360*Math.min(i,o)},x=function(t,e){var n=t.x,r=t.y,i=m({x:n,y:r},e),o=i.radius,a=i.angle,c=e.innerRadius,u=e.outerRadius;if(ou)return!1;if(0===o)return!0;var l,f=function(t){var e=t.startAngle,n=t.endAngle,r=Math.floor(e/360),i=Math.floor(n/360),o=Math.min(r,i);return{startAngle:e-360*o,endAngle:n-360*o}}(e),p=f.startAngle,h=f.endAngle,d=a;if(p<=h){for(;d>h;)d-=360;for(;d=p&&d<=h}else{for(;d>p;)d-=360;for(;d=h&&d<=p}return l?s(s({},e),{},{radius:o,angle:b(d,e)}):null}},240:(t,e,n)=>{"use strict";n.d(e,{AW:()=>B,BU:()=>M,J9:()=>I,Me:()=>P,Mn:()=>E,OV:()=>N,X_:()=>L,aS:()=>k,ee:()=>R});var r=n(6686),i=n.n(r),o=n(1629),a=n.n(o),c=n(620),u=n.n(c),s=n(3097),l=n.n(s),f=n(9686),p=n.n(f),h=n(4052),d=n.n(h),y=n(5043),v=n(2086),g=n(6307),m=n(5248),b=n(7287),x=["children"],w=["children"];function O(t,e){if(null==t)return{};var n,r,i=function(t,e){if(null==t)return{};var n,r,i={},o=Object.keys(t);for(r=0;r=0||(i[n]=t[n]);return i}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(i[n]=t[n])}return i}var S={click:"onClick",mousedown:"onMouseDown",mouseup:"onMouseUp",mouseover:"onMouseOver",mousemove:"onMouseMove",mouseout:"onMouseOut",mouseenter:"onMouseEnter",mouseleave:"onMouseLeave",touchcancel:"onTouchCancel",touchend:"onTouchEnd",touchmove:"onTouchMove",touchstart:"onTouchStart"},E=function(t){return"string"===typeof t?t:t?t.displayName||t.name||"Component":""},_=null,A=null,j=function t(e){if(e===_&&d()(A))return A;var n=[];return y.Children.forEach(e,(function(e){p()(e)||((0,v.isFragment)(e)?n=n.concat(t(e.props.children)):n.push(e))})),A=n,_=e,n};function k(t,e){var n=[],r=[];return r=d()(e)?e.map((function(t){return E(t)})):[E(e)],j(t).forEach((function(t){var e=l()(t,"type.displayName")||l()(t,"type.name");-1!==r.indexOf(e)&&n.push(t)})),n}function M(t,e){var n=k(t,e);return n&&n[0]}var P=function(t){if(!t||!t.props)return!1;var e=t.props,n=e.width,r=e.height;return!(!(0,g.Et)(n)||n<=0||!(0,g.Et)(r)||r<=0)},T=["a","altGlyph","altGlyphDef","altGlyphItem","animate","animateColor","animateMotion","animateTransform","circle","clipPath","color-profile","cursor","defs","desc","ellipse","feBlend","feColormatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","filter","font","font-face","font-face-format","font-face-name","font-face-url","foreignObject","g","glyph","glyphRef","hkern","image","line","lineGradient","marker","mask","metadata","missing-glyph","mpath","path","pattern","polygon","polyline","radialGradient","rect","script","set","stop","style","svg","switch","symbol","text","textPath","title","tref","tspan","use","view","vkern"],C=function(t){return t&&t.type&&u()(t.type)&&T.indexOf(t.type)>=0},I=function(t,e,n){if(!t||"function"===typeof t||"boolean"===typeof t)return null;var r=t;if((0,y.isValidElement)(t)&&(r=t.props),!i()(r))return null;var o={};return Object.keys(r).forEach((function(t){var i;(function(t,e,n,r){var i,o=null!==(i=null===b.VU||void 0===b.VU?void 0:b.VU[r])&&void 0!==i?i:[];return!a()(t)&&(r&&o.includes(e)||b.QQ.includes(e))||n&&b.j2.includes(e)})(null===(i=r)||void 0===i?void 0:i[t],t,e,n)&&(o[t]=r[t])})),o},N=function t(e,n){if(e===n)return!0;var r=y.Children.count(e);if(r!==y.Children.count(n))return!1;if(0===r)return!0;if(1===r)return D(d()(e)?e[0]:e,d()(n)?n[0]:n);for(var i=0;i{"use strict";function r(t,e){for(var n in t)if({}.hasOwnProperty.call(t,n)&&(!{}.hasOwnProperty.call(e,n)||t[n]!==e[n]))return!1;for(var r in e)if({}.hasOwnProperty.call(e,r)&&!{}.hasOwnProperty.call(t,r))return!1;return!0}n.d(e,{b:()=>r})},7287:(t,e,n)=>{"use strict";n.d(e,{QQ:()=>c,VU:()=>s,XC:()=>p,_U:()=>f,j2:()=>l});var r=n(6686),i=n.n(r),o=n(5043);function a(t){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},a(t)}var c=["aria-activedescendant","aria-atomic","aria-autocomplete","aria-busy","aria-checked","aria-colcount","aria-colindex","aria-colspan","aria-controls","aria-current","aria-describedby","aria-details","aria-disabled","aria-errormessage","aria-expanded","aria-flowto","aria-haspopup","aria-hidden","aria-invalid","aria-keyshortcuts","aria-label","aria-labelledby","aria-level","aria-live","aria-modal","aria-multiline","aria-multiselectable","aria-orientation","aria-owns","aria-placeholder","aria-posinset","aria-pressed","aria-readonly","aria-relevant","aria-required","aria-roledescription","aria-rowcount","aria-rowindex","aria-rowspan","aria-selected","aria-setsize","aria-sort","aria-valuemax","aria-valuemin","aria-valuenow","aria-valuetext","className","color","height","id","lang","max","media","method","min","name","style","target","width","role","tabIndex","accentHeight","accumulate","additive","alignmentBaseline","allowReorder","alphabetic","amplitude","arabicForm","ascent","attributeName","attributeType","autoReverse","azimuth","baseFrequency","baselineShift","baseProfile","bbox","begin","bias","by","calcMode","capHeight","clip","clipPath","clipPathUnits","clipRule","colorInterpolation","colorInterpolationFilters","colorProfile","colorRendering","contentScriptType","contentStyleType","cursor","cx","cy","d","decelerate","descent","diffuseConstant","direction","display","divisor","dominantBaseline","dur","dx","dy","edgeMode","elevation","enableBackground","end","exponent","externalResourcesRequired","fill","fillOpacity","fillRule","filter","filterRes","filterUnits","floodColor","floodOpacity","focusable","fontFamily","fontSize","fontSizeAdjust","fontStretch","fontStyle","fontVariant","fontWeight","format","from","fx","fy","g1","g2","glyphName","glyphOrientationHorizontal","glyphOrientationVertical","glyphRef","gradientTransform","gradientUnits","hanging","horizAdvX","horizOriginX","href","ideographic","imageRendering","in2","in","intercept","k1","k2","k3","k4","k","kernelMatrix","kernelUnitLength","kerning","keyPoints","keySplines","keyTimes","lengthAdjust","letterSpacing","lightingColor","limitingConeAngle","local","markerEnd","markerHeight","markerMid","markerStart","markerUnits","markerWidth","mask","maskContentUnits","maskUnits","mathematical","mode","numOctaves","offset","opacity","operator","order","orient","orientation","origin","overflow","overlinePosition","overlineThickness","paintOrder","panose1","pathLength","patternContentUnits","patternTransform","patternUnits","pointerEvents","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","r","radius","refX","refY","renderingIntent","repeatCount","repeatDur","requiredExtensions","requiredFeatures","restart","result","rotate","rx","ry","seed","shapeRendering","slope","spacing","specularConstant","specularExponent","speed","spreadMethod","startOffset","stdDeviation","stemh","stemv","stitchTiles","stopColor","stopOpacity","strikethroughPosition","strikethroughThickness","string","stroke","strokeDasharray","strokeDashoffset","strokeLinecap","strokeLinejoin","strokeMiterlimit","strokeOpacity","strokeWidth","surfaceScale","systemLanguage","tableValues","targetX","targetY","textAnchor","textDecoration","textLength","textRendering","to","transform","u1","u2","underlinePosition","underlineThickness","unicode","unicodeBidi","unicodeRange","unitsPerEm","vAlphabetic","values","vectorEffect","version","vertAdvY","vertOriginX","vertOriginY","vHanging","vIdeographic","viewTarget","visibility","vMathematical","widths","wordSpacing","writingMode","x1","x2","x","xChannelSelector","xHeight","xlinkActuate","xlinkArcrole","xlinkHref","xlinkRole","xlinkShow","xlinkTitle","xlinkType","xmlBase","xmlLang","xmlns","xmlnsXlink","xmlSpace","y1","y2","y","yChannelSelector","z","zoomAndPan","ref","key","angle"],u=["points","pathLength"],s={svg:["viewBox","children"],polygon:u,polyline:u},l=["dangerouslySetInnerHTML","onCopy","onCopyCapture","onCut","onCutCapture","onPaste","onPasteCapture","onCompositionEnd","onCompositionEndCapture","onCompositionStart","onCompositionStartCapture","onCompositionUpdate","onCompositionUpdateCapture","onFocus","onFocusCapture","onBlur","onBlurCapture","onChange","onChangeCapture","onBeforeInput","onBeforeInputCapture","onInput","onInputCapture","onReset","onResetCapture","onSubmit","onSubmitCapture","onInvalid","onInvalidCapture","onLoad","onLoadCapture","onError","onErrorCapture","onKeyDown","onKeyDownCapture","onKeyPress","onKeyPressCapture","onKeyUp","onKeyUpCapture","onAbort","onAbortCapture","onCanPlay","onCanPlayCapture","onCanPlayThrough","onCanPlayThroughCapture","onDurationChange","onDurationChangeCapture","onEmptied","onEmptiedCapture","onEncrypted","onEncryptedCapture","onEnded","onEndedCapture","onLoadedData","onLoadedDataCapture","onLoadedMetadata","onLoadedMetadataCapture","onLoadStart","onLoadStartCapture","onPause","onPauseCapture","onPlay","onPlayCapture","onPlaying","onPlayingCapture","onProgress","onProgressCapture","onRateChange","onRateChangeCapture","onSeeked","onSeekedCapture","onSeeking","onSeekingCapture","onStalled","onStalledCapture","onSuspend","onSuspendCapture","onTimeUpdate","onTimeUpdateCapture","onVolumeChange","onVolumeChangeCapture","onWaiting","onWaitingCapture","onAuxClick","onAuxClickCapture","onClick","onClickCapture","onContextMenu","onContextMenuCapture","onDoubleClick","onDoubleClickCapture","onDrag","onDragCapture","onDragEnd","onDragEndCapture","onDragEnter","onDragEnterCapture","onDragExit","onDragExitCapture","onDragLeave","onDragLeaveCapture","onDragOver","onDragOverCapture","onDragStart","onDragStartCapture","onDrop","onDropCapture","onMouseDown","onMouseDownCapture","onMouseEnter","onMouseLeave","onMouseMove","onMouseMoveCapture","onMouseOut","onMouseOutCapture","onMouseOver","onMouseOverCapture","onMouseUp","onMouseUpCapture","onSelect","onSelectCapture","onTouchCancel","onTouchCancelCapture","onTouchEnd","onTouchEndCapture","onTouchMove","onTouchMoveCapture","onTouchStart","onTouchStartCapture","onPointerDown","onPointerDownCapture","onPointerMove","onPointerMoveCapture","onPointerUp","onPointerUpCapture","onPointerCancel","onPointerCancelCapture","onPointerEnter","onPointerEnterCapture","onPointerLeave","onPointerLeaveCapture","onPointerOver","onPointerOverCapture","onPointerOut","onPointerOutCapture","onGotPointerCapture","onGotPointerCaptureCapture","onLostPointerCapture","onLostPointerCaptureCapture","onScroll","onScrollCapture","onWheel","onWheelCapture","onAnimationStart","onAnimationStartCapture","onAnimationEnd","onAnimationEndCapture","onAnimationIteration","onAnimationIterationCapture","onTransitionEnd","onTransitionEndCapture"],f=function(t,e){if(!t||"function"===typeof t||"boolean"===typeof t)return null;var n=t;if((0,o.isValidElement)(t)&&(n=t.props),!i()(n))return null;var r={};return Object.keys(n).forEach((function(t){l.includes(t)&&(r[t]=e||function(e){return n[t](n,e)})})),r},p=function(t,e,n){if(!i()(t)||"object"!==a(t))return null;var r=null;return Object.keys(t).forEach((function(i){var o=t[i];l.includes(i)&&"function"===typeof o&&(r||(r={}),r[i]=function(t,e,n){return function(r){return t(e,n,r),null}}(o,e,n))})),r}},4443:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=c(n(7989)),i=n(8900),o=c(n(8507)),a=c(n(5909));function c(t){return t&&t.__esModule?t:{default:t}}var u=/((?:\-[a-z]+\-)?calc)/;e.default=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:5;return(0,r.default)(t).walk((function(t){if("function"===t.type&&u.test(t.value)){var n=r.default.stringify(t.nodes);if(!(n.indexOf("constant")>=0||n.indexOf("env")>=0)){var c=i.parser.parse(n),s=(0,o.default)(c,e);t.type="word",t.value=(0,a.default)(t.value,s,e)}}}),!0).toString()},t.exports=e.default},1796:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,i=n(7821),o=(r=i)&&r.__esModule?r:{default:r};e.default=function(t,e,n){switch(t.type){case"LengthValue":case"AngleValue":case"TimeValue":case"FrequencyValue":case"ResolutionValue":return function(t,e,n){e.type===t.type&&(e={type:t.type,value:(0,o.default)(e.value,e.unit,t.unit,n),unit:t.unit});return{left:t,right:e}}(t,e,n);default:return{left:t,right:e}}},t.exports=e.default},8507:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.flip=s;var r,i=n(1796),o=(r=i)&&r.__esModule?r:{default:r};function a(t,e){return"MathExpression"===t.type?function(t,e){switch(t=function(t,e){var n=(0,o.default)(t.left,t.right,e),r=a(n.left,e),i=a(n.right,e);"MathExpression"===r.type&&"MathExpression"===i.type&&("/"===r.operator&&"*"===i.operator||"-"===r.operator&&"+"===i.operator||"*"===r.operator&&"/"===i.operator||"+"===r.operator&&"-"===i.operator)&&(c(r.right,i.right)?n=(0,o.default)(r.left,i.left,e):c(r.right,i.left)&&(n=(0,o.default)(r.left,i.right,e)),r=a(n.left,e),i=a(n.right,e));return t.left=r,t.right=i,t}(t,e),t.operator){case"+":case"-":return function(t,e){var n=t,r=n.left,i=n.right,o=n.operator;if("CssVariable"===r.type||"CssVariable"===i.type)return t;if(0===i.value)return r;if(0===r.value&&"+"===o)return i;if(0===r.value&&"-"===o)return l(i);r.type===i.type&&u(r.type)&&((t=Object.assign({},r)).value="+"===o?r.value+i.value:r.value-i.value);if(u(r.type)&&("+"===i.operator||"-"===i.operator)&&"MathExpression"===i.type){if(r.type===i.left.type)return(t=Object.assign({},t)).left=a({type:"MathExpression",operator:o,left:r,right:i.left},e),t.right=i.right,t.operator="-"===o?s(i.operator):i.operator,a(t,e);if(r.type===i.right.type)return(t=Object.assign({},t)).left=a({type:"MathExpression",operator:"-"===o?s(i.operator):i.operator,left:r,right:i.right},e),t.right=i.left,a(t,e)}if("MathExpression"===r.type&&("+"===r.operator||"-"===r.operator)&&u(i.type)){if(i.type===r.left.type)return(t=Object.assign({},r)).left=a({type:"MathExpression",operator:o,left:r.left,right:i},e),a(t,e);if(i.type===r.right.type)return t=Object.assign({},r),"-"===r.operator?(t.right=a({type:"MathExpression",operator:"-"===o?"+":"-",left:i,right:r.right},e),t.operator="-"===o?"-":"+"):t.right=a({type:"MathExpression",operator:o,left:r.right,right:i},e),t.right.value<0&&(t.right.value*=-1,t.operator="-"===t.operator?"+":"-"),a(t,e)}return t}(t,e);case"/":return function(t,e){if(!u(t.right.type))return t;if("Value"!==t.right.type)throw new Error('Cannot divide by "'+t.right.unit+'", number expected');if(0===t.right.value)throw new Error("Cannot divide by zero");if("MathExpression"===t.left.type)return u(t.left.left.type)&&u(t.left.right.type)?(t.left.left.value/=t.right.value,t.left.right.value/=t.right.value,a(t.left,e)):t;if(u(t.left.type))return t.left.value/=t.right.value,t.left;return t}(t,e);case"*":return function(t){if("MathExpression"===t.left.type&&"Value"===t.right.type){if(u(t.left.left.type)&&u(t.left.right.type))return t.left.left.value*=t.right.value,t.left.right.value*=t.right.value,t.left}else{if(u(t.left.type)&&"Value"===t.right.type)return t.left.value*=t.right.value,t.left;if("Value"===t.left.type&&"MathExpression"===t.right.type){if(u(t.right.left.type)&&u(t.right.right.type))return t.right.left.value*=t.left.value,t.right.right.value*=t.left.value,t.right}else if("Value"===t.left.type&&u(t.right.type))return t.right.value*=t.left.value,t.right}return t}(t)}return t}(t,e):"Calc"===t.type?a(t.value,e):t}function c(t,e){return t.type===e.type&&t.value===e.value}function u(t){switch(t){case"LengthValue":case"AngleValue":case"TimeValue":case"FrequencyValue":case"ResolutionValue":case"EmValue":case"ExValue":case"ChValue":case"RemValue":case"VhValue":case"VwValue":case"VminValue":case"VmaxValue":case"PercentageValue":case"Value":return!0}return!1}function s(t){return"+"===t?"-":"+"}function l(t){return u(t.type)?t.value=-t.value:"MathExpression"==t.type&&(t.left=l(t.left),t.right=l(t.right)),t}e.default=a},5909:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,e,n){var r=a(e,n);return"MathExpression"===e.type&&(r=t+"("+r+")"),r};var r=n(8507),i={"*":0,"/":0,"+":1,"-":1};function o(t,e){if(!1!==e){var n=Math.pow(10,e);return Math.round(t*n)/n}return t}function a(t,e){switch(t.type){case"MathExpression":var n=t.left,c=t.right,u=t.operator,s="";return"MathExpression"===n.type&&i[u]{var n=function(){function t(t,e){var n;if(Object.defineProperty(this,"name",{enumerable:!1,writable:!1,value:"JisonParserError"}),null==t&&(t="???"),Object.defineProperty(this,"message",{enumerable:!1,writable:!0,value:t}),this.hash=e,e&&e.exception instanceof Error){var r=e.exception;this.message=r.message||t,n=r.stack}n||(Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,this.constructor):n=new Error(t).stack),n&&Object.defineProperty(this,"stack",{enumerable:!1,writable:!1,value:n})}function e(t,e,n){n=n||0;for(var r=0;r1)return t;if(e.cleanupAfterLex&&e.cleanupAfterLex(a),f&&(f.lexer=void 0,f.parser=void 0,e.yy===f&&(e.yy=void 0)),f=void 0,this.parseError=this.originalParseError,this.quoteName=this.originalQuoteName,r.length=0,i.length=0,o.length=0,c=0,!a){for(var l=this.__error_infos.length-1;l>=0;l--){var p=this.__error_infos[l];p&&"function"===typeof p.destroy&&p.destroy()}this.__error_infos.length=0}return t},this.constructParseErrorInfo=function(t,n,a,s){var l={errStr:t,exception:n,text:e.match,value:e.yytext,token:this.describeSymbol(u)||u,token_id:u,line:e.yylineno,expected:a,recoverable:s,state:h,action:d,new_state:x,symbol_stack:r,state_stack:i,value_stack:o,stack_pointer:c,yy:f,lexer:e,parser:this,destroy:function(){var t=!!this.recoverable;for(var e in this)this.hasOwnProperty(e)&&"object"===typeof e&&(this[e]=void 0);this.recoverable=t}};return this.__error_infos.push(l),l};var h,d,y,v,g,m,b,x,w=function(){var t=e.lex();return"number"!==typeof t&&(t=n.symbols_[t]||t),t||s},O={$:!0,_$:void 0,yy:f},S=!1;try{if(this.__reentrant_call_depth++,e.setInput(t,f),"function"===typeof e.canIUse)e.canIUse().fastLex&&(w=p);for(o[c]=null,i[c]=0,r[c]=0,++c,this.pre_parse&&this.pre_parse.call(this,f),f.pre_parse&&f.pre_parse.call(this,f),x=i[c-1];;){if(h=x,this.defaultActions[h])d=2,x=this.defaultActions[h];else if(u||(u=w()),v=a[h]&&a[h][u]||l,x=v[1],!(d=v[0])){var E,_=this.describeSymbol(u)||u,A=this.collect_expected_token_set(h);E="number"===typeof e.yylineno?"Parse error on line "+(e.yylineno+1)+": ":"Parse error: ","function"===typeof e.showPosition&&(E+="\n"+e.showPosition(69,10)+"\n"),A.length?E+="Expecting "+A.join(", ")+", got unexpected "+_:E+="Unexpected "+_,g=this.constructParseErrorInfo(E,null,A,!1),"undefined"!==typeof(y=this.parseError(g.errStr,g,this.JisonParserError))&&(S=y);break}switch(d){default:if(d instanceof Array){g=this.constructParseErrorInfo("Parse Error: multiple actions possible at state: "+h+", token: "+u,null,null,!1),"undefined"!==typeof(y=this.parseError(g.errStr,g,this.JisonParserError))&&(S=y);break}g=this.constructParseErrorInfo("Parsing halted. No viable error recovery approach available due to internal system failure.",null,null,!1),"undefined"!==typeof(y=this.parseError(g.errStr,g,this.JisonParserError))&&(S=y);break;case 1:r[c]=u,o[c]=e.yytext,i[c]=x,++c,u=0;continue;case 2:if(m=(b=this.productions_[x-1])[1],"undefined"!==typeof(y=this.performAction.call(O,x,c-1,o))){S=y;break}c-=m;var j=b[0];r[c]=j,o[c]=O.$,x=a[i[c-1]][j],i[c]=x,++c;continue;case 3:-2!==c&&(S=!0,c--,"undefined"!==typeof o[c]&&(S=o[c]))}break}}catch(k){if(k instanceof this.JisonParserError)throw k;if(e&&"function"===typeof e.JisonLexerError&&k instanceof e.JisonLexerError)throw k;g=this.constructParseErrorInfo("Parsing aborted due to exception.",k,null,!1),S=!1,"undefined"!==typeof(y=this.parseError(g.errStr,g,this.JisonParserError))&&(S=y)}finally{S=this.cleanupAfterParse(S,!0,!0),this.__reentrant_call_depth--}return S}};i.originalParseError=i.parseError,i.originalQuoteName=i.quoteName;var o=function(){function t(t,e){var n;if(Object.defineProperty(this,"name",{enumerable:!1,writable:!1,value:"JisonLexerError"}),null==t&&(t="???"),Object.defineProperty(this,"message",{enumerable:!1,writable:!0,value:t}),this.hash=e,e&&e.exception instanceof Error){var r=e.exception;this.message=r.message||t,n=r.stack}n||(Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,this.constructor):n=new Error(t).stack),n&&Object.defineProperty(this,"stack",{enumerable:!1,writable:!1,value:n})}"function"===typeof Object.setPrototypeOf?Object.setPrototypeOf(t.prototype,Error.prototype):t.prototype=Object.create(Error.prototype),t.prototype.constructor=t,t.prototype.name="JisonLexerError";var e={EOF:1,ERROR:2,__currentRuleSet__:null,__error_infos:[],__decompressed:!1,done:!1,_backtrack:!1,_input:"",_more:!1,_signaled_error_token:!1,conditionStack:[],match:"",matched:"",matches:!1,yytext:"",offset:0,yyleng:0,yylineno:0,yylloc:null,constructLexErrorInfo:function(t,e,n){if(t=""+t,void 0==n&&(n=!(t.indexOf("\n")>0&&t.indexOf("^")>0)),this.yylloc&&n)if("function"===typeof this.prettyPrintRange){this.prettyPrintRange(this.yylloc);/\n\s*$/.test(t)||(t+="\n"),t+="\n Erroneous area:\n"+this.prettyPrintRange(this.yylloc)}else if("function"===typeof this.showPosition){var r=this.showPosition();r&&(t.length&&"\n"!==t[t.length-1]&&"\n"!==r[0]?t+="\n"+r:t+=r)}var i={errStr:t,recoverable:!!e,text:this.match,token:null,line:this.yylineno,loc:this.yylloc,yy:this.yy,lexer:this,destroy:function(){var t=!!this.recoverable;for(var e in this)this.hasOwnProperty(e)&&"object"===typeof e&&(this[e]=void 0);this.recoverable=t}};return this.__error_infos.push(i),i},parseError:function(t,e,n){if(n||(n=this.JisonLexerError),this.yy){if(this.yy.parser&&"function"===typeof this.yy.parser.parseError)return this.yy.parser.parseError.call(this,t,e,n)||this.ERROR;if("function"===typeof this.yy.parseError)return this.yy.parseError.call(this,t,e,n)||this.ERROR}throw new n(t,e)},yyerror:function(t){var e="";this.yylloc&&(e=" on line "+(this.yylineno+1));var n=this.constructLexErrorInfo("Lexical error"+e+": "+t,this.options.lexerErrorsAreRecoverable),r=Array.prototype.slice.call(arguments,1);return r.length&&(n.extra_error_attributes=r),this.parseError(n.errStr,n,this.JisonLexerError)||this.ERROR},cleanupAfterLex:function(t){if(this.setInput("",{}),!t){for(var e=this.__error_infos.length-1;e>=0;e--){var n=this.__error_infos[e];n&&"function"===typeof n.destroy&&n.destroy()}this.__error_infos.length=0}return this},clear:function(){this.yytext="",this.yyleng=0,this.match="",this.matches=!1,this._more=!1,this._backtrack=!1;var t=this.yylloc?this.yylloc.last_column:0;this.yylloc={first_line:this.yylineno+1,first_column:t,last_line:this.yylineno+1,last_column:t,range:[this.offset,this.offset]}},setInput:function(t,e){if(this.yy=e||this.yy||{},!this.__decompressed){for(var n=this.rules,r=0,i=n.length;r1){this.yylineno-=n.length-1,this.yylloc.last_line=this.yylineno+1;var r=this.match,i=r.split(/(?:\r\n?|\n)/g);1===i.length&&(i=(r=this.matched).split(/(?:\r\n?|\n)/g)),this.yylloc.last_column=i[i.length-1].length}else this.yylloc.last_column-=e;return this.yylloc.range[1]=this.yylloc.range[0]+this.yyleng,this.done=!1,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else{var t="";this.yylloc&&(t=" on line "+(this.yylineno+1));var e=this.constructLexErrorInfo("Lexical error"+t+": You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).",!1);this._signaled_error_token=this.parseError(e.errStr,e,this.JisonLexerError)||this.ERROR}return this},less:function(t){return this.unput(this.match.slice(t))},pastInput:function(t,e){var n=this.matched.substring(0,this.matched.length-this.match.length);t<0?t=n.length:t||(t=20),e<0?e=n.length:e||(e=1);var r=(n=n.substr(2*-t-2)).replace(/\r\n|\r/g,"\n").split("\n");return(n=(r=r.slice(-e)).join("\n")).length>t&&(n="..."+n.substr(-t)),n},upcomingInput:function(t,e){var n=this.match;t<0?t=n.length+this._input.length:t||(t=20),e<0?e=t:e||(e=1),n.length<2*t+2&&(n+=this._input.substring(0,2*t+2));var r=n.replace(/\r\n|\r/g,"\n").split("\n");return(n=(r=r.slice(0,e)).join("\n")).length>t&&(n=n.substring(0,t)+"..."),n},showPosition:function(t,e){var n=this.pastInput(t).replace(/\s/g," "),r=new Array(n.length+1).join("-");return n+this.upcomingInput(e).replace(/\s/g," ")+"\n"+r+"^"},deriveLocationInfo:function(t,e,n,r){var i={first_line:1,first_column:0,last_line:1,last_column:0,range:[0,0]};return t&&(i.first_line=0|t.first_line,i.last_line=0|t.last_line,i.first_column=0|t.first_column,i.last_column=0|t.last_column,t.range&&(i.range[0]=0|t.range[0],i.range[1]=0|t.range[1])),(i.first_line<=0||i.last_line=i.first_line)&&(i.last_line=0|r.last_line,i.last_column=0|r.last_column,r.range&&(i.range[1]=0|r.range[1]))),i.last_line<=0&&(i.first_line<=0?(i.first_line=this.yylloc.first_line,i.last_line=this.yylloc.last_line,i.first_column=this.yylloc.first_column,i.last_column=this.yylloc.last_column,i.range[0]=this.yylloc.range[0],i.range[1]=this.yylloc.range[1]):(i.last_line=this.yylloc.last_line,i.last_column=this.yylloc.last_column,i.range[1]=this.yylloc.range[1])),i.first_line<=0&&(i.first_line=i.last_line,i.first_column=0,i.range[1]=i.range[0]),i.first_column<0&&(i.first_column=0),i.last_column<0&&(i.last_column=i.first_column>0?i.first_column:80),i},prettyPrintRange:function(t,e,n){t=this.deriveLocationInfo(t,e,n);var r=(this.matched+this._input).split("\n"),i=Math.max(1,e?e.first_line:t.first_line-3),o=Math.max(1,n?n.last_line:t.last_line+1),a=1+Math.log10(1|o)|0,c=new Array(a).join(" "),u=[],s=r.slice(i-1,o+1).map((function(e,n){var r=n+i,o=(c+r).substr(-a)+": "+e,s=new Array(a+1).join("^"),l=3,f=0;(r===t.first_line?(l+=t.first_column,f=Math.max(2,(r===t.last_line?t.last_column:e.length)-t.first_column+1)):r===t.last_line?f=Math.max(2,t.last_column+1):r>t.first_line&&r0&&u.push(n));return o=o.replace(/\t/g," ")}));if(u.length>4){var l=u[1]+1,f=u[u.length-2]-1,p=new Array(a+1).join(" ")+" (...continued...)";p+="\n"+new Array(a+1).join("-")+" (---------------)",s.splice(l,f-l+1,p)}return s.join("\n")},describeYYLLOC:function(t,e){var n,r=t.first_line,i=t.last_line,o=t.first_column,a=t.last_column;if(0===i-r?(n="line "+r+", ",n+=a-o<=1?"column "+o:"columns "+o+" .. "+a):n="lines "+r+"(column "+o+") .. "+i+"(column "+a+")",t.range&&e){var c=t.range[0],u=t.range[1]-1;n+=u<=c?" {String Offset: "+c+"}":" {String Offset range: "+c+" .. "+u+"}"}return n},test_match:function(t,e){var n,r,i,o,a;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.yylloc.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column,range:this.yylloc.range.slice(0)},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done}),a=(o=t[0]).length,(r=o.split(/(?:\r\n?|\n)/g)).length>1?(this.yylineno+=r.length-1,this.yylloc.last_line=this.yylineno+1,this.yylloc.last_column=r[r.length-1].length):this.yylloc.last_column+=a,this.yytext+=o,this.match+=o,this.matched+=o,this.matches=t,this.yyleng=this.yytext.length,this.yylloc.range[1]+=a,this.offset+=a,this._more=!1,this._backtrack=!1,this._input=this._input.slice(a),n=this.performAction.call(this,this.yy,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var c in i)this[c]=i[c];return this.__currentRuleSet__=null,!1}return!!this._signaled_error_token&&(n=this._signaled_error_token,this._signaled_error_token=!1,n)},next:function(){if(this.done)return this.clear(),this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||this.clear();var i=this.__currentRuleSet__;if(!i&&(!(i=this.__currentRuleSet__=this._currentRules())||!i.rules)){var o="";this.options.trackPosition&&(o=" on line "+(this.yylineno+1));var a=this.constructLexErrorInfo("Internal lexer engine error"+o+': The lex grammar programmer pushed a non-existing condition name "'+this.topState()+'"; this is a fatal error and should be reported to the application programmer team!',!1);return this.parseError(a.errStr,a,this.JisonLexerError)||this.ERROR}for(var c=i.rules,u=i.__rule_regexes,s=i.__rule_count,l=1;l<=s;l++)if((n=this._input.match(u[l]))&&(!e||n[0].length>e[0].length)){if(e=n,r=l,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,c[l])))return t;if(this._backtrack){e=void 0;continue}return!1}if(!this.options.flex)break}if(e)return!1!==(t=this.test_match(e,c[r]))&&t;if(this._input){o="";this.options.trackPosition&&(o=" on line "+(this.yylineno+1));a=this.constructLexErrorInfo("Lexical error"+o+": Unrecognized text.",this.options.lexerErrorsAreRecoverable);var f=this._input,p=this.topState(),h=this.conditionStack.length;return(t=this.parseError(a.errStr,a,this.JisonLexerError)||this.ERROR)===this.ERROR&&(this.matches||f!==this._input||p!==this.topState()||h!==this.conditionStack.length||this.input()),t}return this.done=!0,this.clear(),this.EOF},lex:function(){var t;for("function"===typeof this.pre_lex&&(t=this.pre_lex.call(this,0)),"function"===typeof this.options.pre_lex&&(t=this.options.pre_lex.call(this,t)||t),this.yy&&"function"===typeof this.yy.pre_lex&&(t=this.yy.pre_lex.call(this,t)||t);!t;)t=this.next();return this.yy&&"function"===typeof this.yy.post_lex&&(t=this.yy.post_lex.call(this,t)||t),"function"===typeof this.options.post_lex&&(t=this.options.post_lex.call(this,t)||t),"function"===typeof this.post_lex&&(t=this.post_lex.call(this,t)||t),t},fastLex:function(){for(var t;!t;)t=this.next();return t},canIUse:function(){return{fastLex:!("function"===typeof this.pre_lex||"function"===typeof this.options.pre_lex||this.yy&&"function"===typeof this.yy.pre_lex||this.yy&&"function"===typeof this.yy.post_lex||"function"===typeof this.options.post_lex||"function"===typeof this.post_lex)&&"function"===typeof this.fastLex}},begin:function(t){return this.pushState(t)},pushState:function(t){return this.conditionStack.push(t),this.__currentRuleSet__=null,this},popState:function(){return this.conditionStack.length-1>0?(this.__currentRuleSet__=null,this.conditionStack.pop()):this.conditionStack[0]},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]]:this.conditions.INITIAL},stateStackSize:function(){return this.conditionStack.length},options:{trackPosition:!0},JisonLexerError:t,performAction:function(t,e,n){if(1!==e)return this.simpleCaseActionClusters[e]},simpleCaseActionClusters:{0:13,2:5,3:6,4:3,5:4,6:15,7:15,8:15,9:15,10:15,11:15,12:16,13:16,14:16,15:16,16:17,17:17,18:18,19:18,20:19,21:19,22:19,23:20,24:21,25:22,26:23,27:25,28:24,29:26,30:27,31:28,32:11,33:9,34:12,35:10,36:7,37:8,38:14,39:1},rules:[/^(?:(--[\d\-A-Za-z]*))/,/^(?:\s+)/,/^(?:\*)/,/^(?:\/)/,/^(?:\+)/,/^(?:-)/,/^(?:(\d+(\.\d*)?|\.\d+)px\b)/,/^(?:(\d+(\.\d*)?|\.\d+)cm\b)/,/^(?:(\d+(\.\d*)?|\.\d+)mm\b)/,/^(?:(\d+(\.\d*)?|\.\d+)in\b)/,/^(?:(\d+(\.\d*)?|\.\d+)pt\b)/,/^(?:(\d+(\.\d*)?|\.\d+)pc\b)/,/^(?:(\d+(\.\d*)?|\.\d+)deg\b)/,/^(?:(\d+(\.\d*)?|\.\d+)grad\b)/,/^(?:(\d+(\.\d*)?|\.\d+)rad\b)/,/^(?:(\d+(\.\d*)?|\.\d+)turn\b)/,/^(?:(\d+(\.\d*)?|\.\d+)s\b)/,/^(?:(\d+(\.\d*)?|\.\d+)ms\b)/,/^(?:(\d+(\.\d*)?|\.\d+)Hz\b)/,/^(?:(\d+(\.\d*)?|\.\d+)kHz\b)/,/^(?:(\d+(\.\d*)?|\.\d+)dpi\b)/,/^(?:(\d+(\.\d*)?|\.\d+)dpcm\b)/,/^(?:(\d+(\.\d*)?|\.\d+)dppx\b)/,/^(?:(\d+(\.\d*)?|\.\d+)em\b)/,/^(?:(\d+(\.\d*)?|\.\d+)ex\b)/,/^(?:(\d+(\.\d*)?|\.\d+)ch\b)/,/^(?:(\d+(\.\d*)?|\.\d+)rem\b)/,/^(?:(\d+(\.\d*)?|\.\d+)vw\b)/,/^(?:(\d+(\.\d*)?|\.\d+)vh\b)/,/^(?:(\d+(\.\d*)?|\.\d+)vmin\b)/,/^(?:(\d+(\.\d*)?|\.\d+)vmax\b)/,/^(?:(\d+(\.\d*)?|\.\d+)%)/,/^(?:(\d+(\.\d*)?|\.\d+)\b)/,/^(?:(calc))/,/^(?:(var))/,/^(?:([a-z]+))/,/^(?:\()/,/^(?:\))/,/^(?:,)/,/^(?:$)/],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39],inclusive:!0}}};return e}();function a(){this.yy={}}return i.lexer=o,a.prototype=i,i.Parser=a,new a}();e.parser=n,e.Parser=n.Parser,e.parse=function(){return n.parse.apply(n,arguments)}},7989:(t,e,n)=>{var r=n(6266),i=n(8548),o=n(5988);function a(t){return this instanceof a?(this.nodes=r(t),this):new a(t)}a.prototype.toString=function(){return Array.isArray(this.nodes)?o(this.nodes):""},a.prototype.walk=function(t,e){return i(this.nodes,t,e),this},a.unit=n(8927),a.walk=i,a.stringify=o,t.exports=a},6266:t=>{var e="(".charCodeAt(0),n=")".charCodeAt(0),r="'".charCodeAt(0),i='"'.charCodeAt(0),o="\\".charCodeAt(0),a="/".charCodeAt(0),c=",".charCodeAt(0),u=":".charCodeAt(0),s="*".charCodeAt(0);t.exports=function(t){for(var l,f,p,h,d,y,v,g,m=[],b=t,x=0,w=b.charCodeAt(x),O=b.length,S=[{nodes:m}],E=0,_="",A="",j="";x{function e(t,e){var r,i,o=t.type,a=t.value;return e&&void 0!==(i=e(t))?i:"word"===o||"space"===o?a:"string"===o?(r=t.quote||"")+a+(t.unclosed?"":r):"comment"===o?"/*"+a+(t.unclosed?"":"*/"):"div"===o?(t.before||"")+a+(t.after||""):Array.isArray(t.nodes)?(r=n(t.nodes),"function"!==o?r:a+"("+(t.before||"")+r+(t.after||"")+(t.unclosed?"":")")):a}function n(t,n){var r,i;if(Array.isArray(t)){for(r="",i=t.length-1;~i;i-=1)r=e(t[i],n)+r;return r}return e(t,n)}t.exports=n},8927:t=>{var e="-".charCodeAt(0),n="+".charCodeAt(0),r=".".charCodeAt(0),i="e".charCodeAt(0),o="E".charCodeAt(0);t.exports=function(t){for(var a,c=0,u=t.length,s=!1,l=-1,f=!1;c=48&&a<=57)f=!0;else if(a===i||a===o){if(l>-1)break;l=c}else if(a===r){if(s)break;s=!0}else{if(a!==n&&a!==e)break;if(0!==c)break}c+=1}return l+1===c&&c--,!!f&&{number:t.slice(0,c),unit:t.slice(c)}}},8548:t=>{t.exports=function t(e,n,r){var i,o,a,c;for(i=0,o=e.length;i{t.exports=function(t){return t&&t.__esModule?t:{default:t}},t.exports.__esModule=!0,t.exports.default=t.exports},8139:(t,e)=>{var n;!function(){"use strict";var r={}.hasOwnProperty;function i(){for(var t="",e=0;e{"use strict";n.d(e,{A:()=>o,z:()=>c});var r=n(4402),i=n(5186);function o(){var t,e,n=(0,i.A)().unknown(void 0),a=n.domain,c=n.range,u=0,s=1,l=!1,f=0,p=0,h=.5;function d(){var n=a().length,r=s{"use strict";function r(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t)}return this}function i(t,e){switch(arguments.length){case 0:break;case 1:"function"===typeof t?this.interpolator(t):this.range(t);break;default:this.domain(t),"function"===typeof e?this.interpolator(e):this.range(e)}return this}n.d(e,{C:()=>r,K:()=>i})},5186:(t,e,n)=>{"use strict";n.d(e,{A:()=>l,h:()=>s});class r extends Map{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:c;if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:e}}),null!=t)for(const[n,r]of t)this.set(n,r)}get(t){return super.get(i(this,t))}has(t){return super.has(i(this,t))}set(t,e){return super.set(o(this,t),e)}delete(t){return super.delete(a(this,t))}}Set;function i(t,e){let{_intern:n,_key:r}=t;const i=r(e);return n.has(i)?n.get(i):e}function o(t,e){let{_intern:n,_key:r}=t;const i=r(e);return n.has(i)?n.get(i):(n.set(i,e),e)}function a(t,e){let{_intern:n,_key:r}=t;const i=r(e);return n.has(i)&&(e=n.get(i),n.delete(i)),e}function c(t){return null!==t&&"object"===typeof t?t.valueOf():t}var u=n(4402);const s=Symbol("implicit");function l(){var t=new r,e=[],n=[],i=s;function o(r){let o=t.get(r);if(void 0===o){if(i!==s)return i;t.set(r,o=e.push(r)-1)}return n[o%n.length]}return o.domain=function(n){if(!arguments.length)return e.slice();e=[],t=new r;for(const r of n)t.has(r)||t.set(r,e.push(r)-1);return o},o.range=function(t){return arguments.length?(n=Array.from(t),o):n.slice()},o.unknown=function(t){return arguments.length?(i=t,o):i},o.copy=function(){return l(e,n).unknown(i)},u.C.apply(o,arguments),o}},9236:(t,e,n)=>{"use strict";n.d(e,{A:()=>r});Array.prototype.slice;function r(t){return"object"===typeof t&&"length"in t?t:Array.from(t)}},3809:(t,e,n)=>{"use strict";function r(t){return function(){return t}}n.d(e,{A:()=>r})},5722:(t,e,n)=>{"use strict";function r(t,e){return e||(e=t.slice(0)),Object.freeze(Object.defineProperties(t,{raw:{value:Object.freeze(e)}}))}var i,o,a,c,u,s,l,f,p,h,d,y,v,g;n.d(e,{i:()=>E});const m=Math.PI,b=2*m,x=1e-6,w=b-x;function O(t){this._+=t[0];for(let e=1,n=t.length;e=0))throw new Error("invalid digits: ".concat(t));if(e>15)return O;const n=10**e;return function(t){this._+=t[0];for(let e=1,r=t.length;ex)if(Math.abs(y*u-h*d)>x&&o){let s=n-a,l=i-c,g=u*u+h*h,b=s*s+l*l,w=Math.sqrt(g),O=Math.sqrt(v),S=o*Math.tan((m-Math.acos((g+v-b)/(2*w*O)))/2),E=S/O,_=S/w;Math.abs(E-1)>x&&this._append(f||(f=r(["L",",",""])),t+E*d,e+E*y),this._append(p||(p=r(["A",",",",0,0,",",",",",""])),o,o,+(y*s>d*l),this._x1=t+_*u,this._y1=e+_*h)}else this._append(l||(l=r(["L",",",""])),this._x1=t,this._y1=e);else;}arc(t,e,n,i,o,a){if(t=+t,e=+e,a=!!a,(n=+n)<0)throw new Error("negative radius: ".concat(n));let c=n*Math.cos(i),u=n*Math.sin(i),s=t+c,l=e+u,f=1^a,p=a?i-o:o-i;null===this._x1?this._append(h||(h=r(["M",",",""])),s,l):(Math.abs(this._x1-s)>x||Math.abs(this._y1-l)>x)&&this._append(d||(d=r(["L",",",""])),s,l),n&&(p<0&&(p=p%b+b),p>w?this._append(y||(y=r(["A",",",",0,1,",",",",","A",",",",0,1,",",",",",""])),n,n,f,t-c,e-u,n,n,f,this._x1=s,this._y1=l):p>x&&this._append(v||(v=r(["A",",",",0,",",",",",",",""])),n,n,+(p>=m),f,this._x1=t+n*Math.cos(o),this._y1=e+n*Math.sin(o)))}rect(t,e,n,i){this._append(g||(g=r(["M",",","h","v","h","Z"])),this._x0=this._x1=+t,this._y0=this._y1=+e,n=+n,+i,-n)}toString(){return this._}}function E(t){let e=3;return t.digits=function(n){if(!arguments.length)return e;if(null==n)e=null;else{const t=Math.floor(n);if(!(t>=0))throw new RangeError("invalid digits: ".concat(n));e=t}return t},()=>new S(e)}S.prototype}}]); -//# sourceMappingURL=829.67cb6474.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/829.67cb6474.chunk.js.LICENSE.txt b/web-app/build/static/js/829.67cb6474.chunk.js.LICENSE.txt deleted file mode 100644 index dc839941c1d..00000000000 --- a/web-app/build/static/js/829.67cb6474.chunk.js.LICENSE.txt +++ /dev/null @@ -1,147 +0,0 @@ -/*! - Copyright (c) 2018 Jed Watson. - Licensed under the MIT License (MIT), see - http://jedwatson.github.io/classnames -*/ - -/*! Conditions:: INITIAL */ - -/*! Production:: css_value : ANGLE */ - -/*! Production:: css_value : CHS */ - -/*! Production:: css_value : EMS */ - -/*! Production:: css_value : EXS */ - -/*! Production:: css_value : FREQ */ - -/*! Production:: css_value : LENGTH */ - -/*! Production:: css_value : PERCENTAGE */ - -/*! Production:: css_value : REMS */ - -/*! Production:: css_value : RES */ - -/*! Production:: css_value : SUB css_value */ - -/*! Production:: css_value : TIME */ - -/*! Production:: css_value : VHS */ - -/*! Production:: css_value : VMAXS */ - -/*! Production:: css_value : VMINS */ - -/*! Production:: css_value : VWS */ - -/*! Production:: css_variable : CSS_VAR LPAREN CSS_CPROP COMMA math_expression RPAREN */ - -/*! Production:: css_variable : CSS_VAR LPAREN CSS_CPROP RPAREN */ - -/*! Production:: expression : math_expression EOF */ - -/*! Production:: math_expression : LPAREN math_expression RPAREN */ - -/*! Production:: math_expression : NESTED_CALC LPAREN math_expression RPAREN */ - -/*! Production:: math_expression : SUB PREFIX SUB NESTED_CALC LPAREN math_expression RPAREN */ - -/*! Production:: math_expression : css_value */ - -/*! Production:: math_expression : css_variable */ - -/*! Production:: math_expression : math_expression ADD math_expression */ - -/*! Production:: math_expression : math_expression DIV math_expression */ - -/*! Production:: math_expression : math_expression MUL math_expression */ - -/*! Production:: math_expression : math_expression SUB math_expression */ - -/*! Production:: math_expression : value */ - -/*! Production:: value : NUMBER */ - -/*! Production:: value : SUB NUMBER */ - -/*! Rule:: $ */ - -/*! Rule:: (--[0-9a-z-A-Z-]*) */ - -/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)% */ - -/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)Hz\b */ - -/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)\b */ - -/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)ch\b */ - -/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)cm\b */ - -/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)deg\b */ - -/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)dpcm\b */ - -/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)dpi\b */ - -/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)dppx\b */ - -/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)em\b */ - -/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)ex\b */ - -/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)grad\b */ - -/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)in\b */ - -/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)kHz\b */ - -/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)mm\b */ - -/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)ms\b */ - -/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)pc\b */ - -/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)pt\b */ - -/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)px\b */ - -/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)rad\b */ - -/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)rem\b */ - -/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)s\b */ - -/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)turn\b */ - -/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)vh\b */ - -/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)vmax\b */ - -/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)vmin\b */ - -/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)vw\b */ - -/*! Rule:: ([a-z]+) */ - -/*! Rule:: (calc) */ - -/*! Rule:: (var) */ - -/*! Rule:: , */ - -/*! Rule:: - */ - -/*! Rule:: \( */ - -/*! Rule:: \) */ - -/*! Rule:: \* */ - -/*! Rule:: \+ */ - -/*! Rule:: \/ */ - -/*! decimal.js-light v2.5.1 https://github.com/MikeMcl/decimal.js-light/LICENCE */ diff --git a/web-app/build/static/js/829.67cb6474.chunk.js.map b/web-app/build/static/js/829.67cb6474.chunk.js.map deleted file mode 100644 index 60cd9a9ac1c..00000000000 --- a/web-app/build/static/js/829.67cb6474.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/829.67cb6474.chunk.js","mappings":"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AAG,GACP0H,EACA,CAAC,GAAI,IACLA,EACA,CAAC,GAAI,GACL,EACA,EACA,GACA,GACAA,EACA,CAAC,GAAI,IACLA,EACA,CAAC,GAAI,GACLA,EACA,CAAC,GAAI,IACLA,EACA,CAAC,GAAI,IACLA,EACA,CAAC,IAAK,GACN,EACAA,EACA,CAAC,GAAI,IACL,EACAA,EACA,CAAC,IAAK,IACN,GACAA,EACA,CAAC,IAAK,GACN,EACAA,EACA,CAAC,EAAG,GACJA,EACA,CAAC,EAAG,GACJ,EACA,EACA,GACAA,EACA,CAAC,IAAK,IACNA,EACA,CAAC,GAAI,MAEL2U,KAAM0iE,EAAE,CACR/+E,EACA,CAAC,EAAG,IACJA,EACA,CAAC,EAAG,GACJ,EACAA,EACA,CAAC,EAAG,IACJA,EACA,CAAC,EAAG,GACJ0H,EACA,CAAC,GAAI,IACLA,EACA,CAAC,GAAI,IACLA,EACA,CAAC,GAAI,IACLA,EACA,CAAC,GAAI,IACLA,EACA,CAAC,GAAI,IACLA,EACA,CAAC,IAAK,MAEN6b,MAAOw7D,EAAE,CACT,EACA,EACA,EACA,EACA,EACA,GACAr3E,EACA,CAAC,EAAG,GACJ,GACA,GACAA,EACA,CAAC,EAAG,GACJ,GACAA,EACA,CAAC,EAAG,GACJ,GACAA,EACA,CAAC,EAAG,GACJ,GACAA,EACA,CAAC,EAAG,GACJ,GACAA,EACA,CAAC,GAAI,GACL,GACAA,EACA,CAAC,EAAG,GACJ,GACAA,EACA,CAAC,EAAG,KAEJiiG,KAAM5qB,EAAE,CACR/+E,EACA,CAAC,EAAG,KACJA,EACA,CAAC,EAAG,GACJ0H,EACA,CAAC,EAAG,GACJA,EACA,CAAC,EAAG,GACJ1H,EACA,CAAC,EAAG,MAEJ4pG,KAAM7qB,EAAE,CACR,EACA,EACA,EACA,GACA/+E,EACA,CAAC,EAAG,GAAI,GACRA,EACA,CAAC,GAAI,EAAG,GACR0H,EACA,CAAC,GAAI,IACL,GACA,GACA,GACA,GACAA,EACA,CAAC,GAAI,IACL,GACAA,EACA,CAAC,GAAI,IACLA,EACA,CAAC,GAAI,IACLA,EACA,CA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","sources":["../node_modules/css-unit-converter/index.js","../node_modules/decimal.js-light/decimal.js","../node_modules/eventemitter3/index.js","../node_modules/lodash/_DataView.js","../node_modules/lodash/_Promise.js","../node_modules/lodash/_Set.js","../node_modules/lodash/_SetCache.js","../node_modules/lodash/_Stack.js","../node_modules/lodash/_Uint8Array.js","../node_modules/lodash/_WeakMap.js","../node_modules/lodash/_apply.js","../node_modules/lodash/_arrayEvery.js","../node_modules/lodash/_arrayFilter.js","../node_modules/lodash/_arrayIncludes.js","../node_modules/lodash/_arrayIncludesWith.js","../node_modules/lodash/_arrayLikeKeys.js","../node_modules/lodash/_arrayPush.js","../node_modules/lodash/_arraySome.js","../node_modules/lodash/_asciiToArray.js","../node_modules/lodash/_baseAssignValue.js","../node_modules/lodash/_baseEach.js","../node_modules/lodash/_baseEvery.js","../node_modules/lodash/_baseExtremum.js","../node_modules/lodash/_baseFindIndex.js","../node_modules/lodash/_baseFlatten.js","../node_modules/lodash/_baseFor.js","../node_modules/lodash/_baseForOwn.js","../node_modules/lodash/_baseGetAllKeys.js","../node_modules/lodash/_baseGt.js","../node_modules/lodash/_baseHasIn.js","../node_modules/lodash/_baseIndexOf.js","../node_modules/lodash/_baseIsArguments.js","../node_modules/lodash/_baseIsEqual.js","../node_modules/lodash/_baseIsEqualDeep.js","../node_modules/lodash/_baseIsMatch.js","../node_modules/lodash/_baseIsNaN.js","../node_modules/lodash/_baseIsTypedArray.js","../node_modules/lodash/_baseIteratee.js","../node_modules/lodash/_baseKeys.js","../node_modules/lodash/_baseLt.js","../node_modules/lodash/_baseMap.js","../node_modules/lodash/_baseMatches.js","../node_modules/lodash/_baseMatchesProperty.js","../node_modules/lodash/_baseOrderBy.js","../node_modules/lodash/_baseProperty.js","../node_modules/lodash/_basePropertyDeep.js","../node_modules/lodash/_baseRange.js","../node_modules/lodash/_baseRest.js","../node_modules/lodash/_baseSetToString.js","../node_modules/lodash/_baseSlice.js","../node_modules/lodash/_baseSome.js","../node_modules/lodash/_baseSortBy.js","../node_modules/lodash/_baseTimes.js","../node_modules/lodash/_baseUnary.js","../node_modules/lodash/_baseUniq.js","../node_modules/lodash/_cacheHas.js","../node_modules/lodash/_castSlice.js","../node_modules/lodash/_compareAscending.js","../node_modules/lodash/_compareMultiple.js","../node_modules/lodash/_createBaseEach.js","../node_modules/lodash/_createBaseFor.js","../node_modules/lodash/_createCaseFirst.js","../node_modules/lodash/_createFind.js","../node_modules/lodash/_createRange.js","../node_modules/lodash/_createSet.js","../node_modules/lodash/_defineProperty.js","../node_modules/lodash/_equalArrays.js","../node_modules/lodash/_equalByTag.js","../node_modules/lodash/_equalObjects.js","../node_modules/lodash/_getAllKeys.js","../node_modules/lodash/_getMatchData.js","../node_modules/lodash/_getPrototype.js","../node_modules/lodash/_getSymbols.js","../node_modules/lodash/_getTag.js","../node_modules/lodash/_hasPath.js","../node_modules/lodash/_hasUnicode.js","../node_modules/lodash/_isFlattenable.js","../node_modules/lodash/_isIndex.js","../node_modules/lodash/_isIterateeCall.js","../node_modules/lodash/_isPrototype.js","../node_modules/lodash/_isStrictComparable.js","../node_modules/lodash/_mapToArray.js","../node_modules/lodash/_matchesStrictComparable.js","../node_modules/lodash/_nativeKeys.js","../node_modules/lodash/_nodeUtil.js","../node_modules/lodash/_overArg.js","../node_modules/lodash/_overRest.js","../node_modules/lodash/_setCacheAdd.js","../node_modules/lodash/_setCacheHas.js","../node_modules/lodash/_setToArray.js","../node_modules/lodash/_setToString.js","../node_modules/lodash/_shortOut.js","../node_modules/lodash/_stackClear.js","../node_modules/lodash/_stackDelete.js","../node_modules/lodash/_stackGet.js","../node_modules/lodash/_stackHas.js","../node_modules/lodash/_stackSet.js","../node_modules/lodash/_strictIndexOf.js","../node_modules/lodash/_stringToArray.js","../node_modules/lodash/_unicodeToArray.js","../node_modules/lodash/constant.js","../node_modules/lodash/every.js","../node_modules/lodash/find.js","../node_modules/lodash/findIndex.js","../node_modules/lodash/flatMap.js","../node_modules/lodash/hasIn.js","../node_modules/lodash/identity.js","../node_modules/lodash/isArguments.js","../node_modules/lodash/isArrayLike.js","../node_modules/lodash/isBoolean.js","../node_modules/lodash/isBuffer.js","../node_modules/lodash/isEqual.js","../node_modules/lodash/isLength.js","../node_modules/lodash/isNaN.js","../node_modules/lodash/isNil.js","../node_modules/lodash/isNumber.js","../node_modules/lodash/isPlainObject.js","../node_modules/lodash/isString.js","../node_modules/lodash/isTypedArray.js","../node_modules/lodash/keys.js","../node_modules/lodash/last.js","../node_modules/lodash/map.js","../node_modules/lodash/mapValues.js","../node_modules/lodash/max.js","../node_modules/lodash/maxBy.js","../node_modules/lodash/min.js","../node_modules/lodash/minBy.js","../node_modules/lodash/noop.js","../node_modules/lodash/property.js","../node_modules/lodash/range.js","../node_modules/lodash/some.js","../node_modules/lodash/sortBy.js","../node_modules/lodash/stubArray.js","../node_modules/lodash/stubFalse.js","../node_modules/lodash/throttle.js","../node_modules/lodash/uniqBy.js","../node_modules/lodash/upperFirst.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/react-lifecycles-compat/react-lifecycles-compat.es.js","../node_modules/react-smooth/node_modules/fast-equals/src/utils.ts","../node_modules/react-smooth/node_modules/fast-equals/src/equals.ts","../node_modules/react-smooth/node_modules/fast-equals/src/comparator.ts","../node_modules/react-smooth/node_modules/fast-equals/src/index.ts","../node_modules/react-smooth/es6/setRafTimeout.js","../node_modules/react-smooth/es6/AnimateManager.js","../node_modules/react-smooth/es6/util.js","../node_modules/react-smooth/es6/easing.js","../node_modules/react-smooth/es6/configUpdate.js","../node_modules/react-smooth/es6/Animate.js","../node_modules/react-smooth/es6/AnimateGroupChild.js","../node_modules/react-smooth/es6/AnimateGroup.js","../node_modules/react-smooth/es6/index.js","../node_modules/react-transition-group/CSSTransition.js","../node_modules/react-transition-group/ReplaceTransition.js","../node_modules/react-transition-group/Transition.js","../node_modules/react-transition-group/TransitionGroup.js","../node_modules/react-transition-group/index.js","../node_modules/react-transition-group/node_modules/dom-helpers/class/addClass.js","../node_modules/react-transition-group/node_modules/dom-helpers/class/hasClass.js","../node_modules/react-transition-group/node_modules/dom-helpers/class/removeClass.js","../node_modules/react-transition-group/utils/ChildMapping.js","../node_modules/react-transition-group/utils/PropTypes.js","../node_modules/recharts/es6/util/getEveryNthWithCondition.js","../node_modules/recharts/es6/util/CartesianUtils.js","../node_modules/recharts/es6/cartesian/getTicks.js","../node_modules/recharts/es6/component/DefaultTooltipContent.js","../node_modules/recharts/es6/component/Tooltip.js","../node_modules/recharts/es6/shape/Cross.js","../node_modules/recharts/es6/shape/Dot.js","../node_modules/recharts/es6/shape/Rectangle.js","../node_modules/recharts/es6/cartesian/CartesianAxis.js","../node_modules/recharts/es6/util/CssPrefixUtils.js","../node_modules/recharts/es6/cartesian/Brush.js","../node_modules/recharts/es6/util/IfOverflowMatches.js","../node_modules/recharts/es6/cartesian/ReferenceDot.js","../node_modules/recharts/es6/cartesian/ReferenceLine.js","../node_modules/recharts/es6/cartesian/ReferenceArea.js","../node_modules/recharts/es6/util/DetectReferenceElementsDomain.js","../node_modules/recharts/es6/util/Events.js","../node_modules/recharts/es6/chart/AccessibilityManager.js","../node_modules/recharts/es6/chart/generateCategoricalChart.js","../node_modules/recharts/es6/shape/Polygon.js","../node_modules/recharts/es6/polar/PolarAngleAxis.js","../node_modules/recharts/es6/polar/PolarRadiusAxis.js","../node_modules/recharts/es6/chart/PieChart.js","../node_modules/recharts/es6/component/Cell.js","../node_modules/recharts/es6/component/Label.js","../node_modules/d3-shape/src/math.js","../node_modules/d3-shape/src/symbol/circle.js","../node_modules/d3-shape/src/symbol/cross.js","../node_modules/d3-shape/src/symbol/diamond.js","../node_modules/d3-shape/src/symbol/square.js","../node_modules/d3-shape/src/symbol/star.js","../node_modules/d3-shape/src/symbol/triangle.js","../node_modules/d3-shape/src/symbol/wye.js","../node_modules/d3-shape/src/symbol/asterisk.js","../node_modules/d3-shape/src/symbol/triangle2.js","../node_modules/recharts/es6/shape/Symbols.js","../node_modules/d3-shape/src/symbol.js","../node_modules/recharts/es6/component/DefaultLegendContent.js","../node_modules/recharts/es6/component/Legend.js","../node_modules/recharts/es6/component/Text.js","../node_modules/recharts/es6/container/Layer.js","../node_modules/recharts/es6/container/Surface.js","../node_modules/recharts/es6/component/LabelList.js","../node_modules/recharts/es6/polar/Pie.js","../node_modules/d3-shape/src/noop.js","../node_modules/d3-shape/src/curve/basis.js","../node_modules/d3-shape/src/curve/basisClosed.js","../node_modules/d3-shape/src/curve/basisOpen.js","../node_modules/d3-shape/src/curve/bump.js","../node_modules/d3-shape/src/curve/linearClosed.js","../node_modules/d3-shape/src/curve/linear.js","../node_modules/d3-shape/src/curve/monotone.js","../node_modules/d3-shape/src/curve/natural.js","../node_modules/d3-shape/src/curve/step.js","../node_modules/d3-shape/src/point.js","../node_modules/d3-shape/src/line.js","../node_modules/d3-shape/src/area.js","../node_modules/recharts/es6/shape/Curve.js","../node_modules/recharts/es6/shape/Sector.js","../node_modules/d3-array/src/ticks.js","../node_modules/d3-array/src/ascending.js","../node_modules/d3-array/src/descending.js","../node_modules/d3-array/src/bisector.js","../node_modules/d3-array/src/number.js","../node_modules/d3-array/src/bisect.js","../node_modules/d3-color/src/define.js","../node_modules/d3-color/src/color.js","../node_modules/d3-interpolate/src/basis.js","../node_modules/d3-interpolate/src/constant.js","../node_modules/d3-interpolate/src/color.js","../node_modules/d3-interpolate/src/rgb.js","../node_modules/d3-interpolate/src/basisClosed.js","../node_modules/d3-interpolate/src/array.js","../node_modules/d3-interpolate/src/date.js","../node_modules/d3-interpolate/src/number.js","../node_modules/d3-interpolate/src/object.js","../node_modules/d3-interpolate/src/string.js","../node_modules/d3-interpolate/src/numberArray.js","../node_modules/d3-interpolate/src/value.js","../node_modules/d3-interpolate/src/round.js","../node_modules/d3-scale/src/number.js","../node_modules/d3-scale/src/continuous.js","../node_modules/d3-scale/src/constant.js","../node_modules/d3-format/src/formatPrefixAuto.js","../node_modules/d3-format/src/formatSpecifier.js","../node_modules/d3-format/src/formatDecimal.js","../node_modules/d3-format/src/exponent.js","../node_modules/d3-format/src/formatRounded.js","../node_modules/d3-format/src/formatTypes.js","../node_modules/d3-format/src/identity.js","../node_modules/d3-format/src/locale.js","../node_modules/d3-format/src/defaultLocale.js","../node_modules/d3-format/src/formatGroup.js","../node_modules/d3-format/src/formatNumerals.js","../node_modules/d3-format/src/formatTrim.js","../node_modules/d3-scale/src/tickFormat.js","../node_modules/d3-format/src/precisionPrefix.js","../node_modules/d3-format/src/precisionRound.js","../node_modules/d3-format/src/precisionFixed.js","../node_modules/d3-scale/src/linear.js","../node_modules/d3-scale/src/identity.js","../node_modules/d3-scale/src/nice.js","../node_modules/d3-scale/src/log.js","../node_modules/d3-scale/src/symlog.js","../node_modules/d3-scale/src/pow.js","../node_modules/d3-scale/src/radial.js","../node_modules/d3-array/src/max.js","../node_modules/d3-array/src/min.js","../node_modules/d3-array/src/sort.js","../node_modules/d3-array/src/quickselect.js","../node_modules/d3-array/src/quantile.js","../node_modules/d3-scale/src/quantile.js","../node_modules/d3-scale/src/quantize.js","../node_modules/d3-scale/src/threshold.js","../node_modules/d3-time/src/duration.js","../node_modules/d3-time/src/interval.js","../node_modules/d3-time/src/millisecond.js","../node_modules/d3-time/src/second.js","../node_modules/d3-time/src/minute.js","../node_modules/d3-time/src/hour.js","../node_modules/d3-time/src/day.js","../node_modules/d3-time/src/week.js","../node_modules/d3-time/src/month.js","../node_modules/d3-time/src/year.js","../node_modules/d3-time/src/ticks.js","../node_modules/d3-time-format/src/locale.js","../node_modules/d3-time-format/src/defaultLocale.js","../node_modules/d3-scale/src/time.js","../node_modules/d3-scale/src/utcTime.js","../node_modules/d3-scale/src/sequential.js","../node_modules/d3-scale/src/sequentialQuantile.js","../node_modules/d3-scale/src/diverging.js","../node_modules/d3-interpolate/src/piecewise.js","../node_modules/d3-shape/src/offset/none.js","../node_modules/d3-shape/src/order/none.js","../node_modules/d3-shape/src/stack.js","../node_modules/recharts-scale/es6/util/utils.js","../node_modules/recharts-scale/es6/util/arithmetic.js","../node_modules/recharts-scale/es6/getNiceTickValues.js","../node_modules/recharts/es6/cartesian/ErrorBar.js","../node_modules/recharts/es6/util/ChartUtils.js","../node_modules/d3-shape/src/offset/expand.js","../node_modules/d3-shape/src/offset/silhouette.js","../node_modules/d3-shape/src/offset/wiggle.js","../node_modules/recharts/es6/util/DOMUtils.js","../node_modules/recharts/es6/util/DataUtils.js","../node_modules/recharts/es6/util/Global.js","../node_modules/recharts/es6/util/LogUtils.js","../node_modules/recharts/es6/util/PolarUtils.js","../node_modules/recharts/es6/util/ReactUtils.js","../node_modules/recharts/es6/util/ShallowEqual.js","../node_modules/recharts/es6/util/types.js","../node_modules/reduce-css-calc/dist/index.js","../node_modules/reduce-css-calc/dist/lib/convert.js","../node_modules/reduce-css-calc/dist/lib/reducer.js","../node_modules/reduce-css-calc/dist/lib/stringifier.js","../node_modules/reduce-css-calc/dist/parser.js","../node_modules/reduce-css-calc/node_modules/postcss-value-parser/lib/index.js","../node_modules/reduce-css-calc/node_modules/postcss-value-parser/lib/parse.js","../node_modules/reduce-css-calc/node_modules/postcss-value-parser/lib/stringify.js","../node_modules/reduce-css-calc/node_modules/postcss-value-parser/lib/unit.js","../node_modules/reduce-css-calc/node_modules/postcss-value-parser/lib/walk.js","../node_modules/@babel/runtime/helpers/interopRequireDefault.js","../node_modules/classnames/index.js","../node_modules/d3-scale/src/band.js","../node_modules/d3-array/src/range.js","../node_modules/d3-scale/src/init.js","../node_modules/internmap/src/index.js","../node_modules/d3-scale/src/ordinal.js","../node_modules/d3-shape/src/array.js","../node_modules/d3-shape/src/constant.js","../node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js","../node_modules/d3-path/src/path.js","../node_modules/d3-shape/src/path.js"],"sourcesContent":["var conversions = {\r\n // length\r\n 'px': {\r\n 'px': 1,\r\n 'cm': 96.0/2.54,\r\n 'mm': 96.0/25.4,\r\n 'in': 96,\r\n 'pt': 96.0/72.0,\r\n 'pc': 16\r\n },\r\n 'cm': {\r\n 'px': 2.54/96.0,\r\n 'cm': 1,\r\n 'mm': 0.1,\r\n 'in': 2.54,\r\n 'pt': 2.54/72.0,\r\n 'pc': 2.54/6.0\r\n },\r\n 'mm': {\r\n 'px': 25.4/96.0,\r\n 'cm': 10,\r\n 'mm': 1,\r\n 'in': 25.4,\r\n 'pt': 25.4/72.0,\r\n 'pc': 25.4/6.0\r\n },\r\n 'in': {\r\n 'px': 1.0/96.0,\r\n 'cm': 1.0/2.54,\r\n 'mm': 1.0/25.4,\r\n 'in': 1,\r\n 'pt': 1.0/72.0,\r\n 'pc': 1.0/6.0\r\n },\r\n 'pt': {\r\n 'px': 0.75,\r\n 'cm': 72.0/2.54,\r\n 'mm': 72.0/25.4,\r\n 'in': 72,\r\n 'pt': 1,\r\n 'pc': 12\r\n },\r\n 'pc': {\r\n 'px': 6.0/96.0,\r\n 'cm': 6.0/2.54,\r\n 'mm': 6.0/25.4,\r\n 'in': 6,\r\n 'pt': 6.0/72.0,\r\n 'pc': 1\r\n },\r\n // angle\r\n 'deg': {\r\n 'deg': 1,\r\n 'grad': 0.9,\r\n 'rad': 180/Math.PI,\r\n 'turn': 360\r\n },\r\n 'grad': {\r\n 'deg': 400/360,\r\n 'grad': 1,\r\n 'rad': 200/Math.PI,\r\n 'turn': 400\r\n },\r\n 'rad': {\r\n 'deg': Math.PI/180,\r\n 'grad': Math.PI/200,\r\n 'rad': 1,\r\n 'turn': Math.PI*2\r\n },\r\n 'turn': {\r\n 'deg': 1/360,\r\n 'grad': 1/400,\r\n 'rad': 0.5/Math.PI,\r\n 'turn': 1\r\n },\r\n // time\r\n 's': {\r\n 's': 1,\r\n 'ms': 1/1000\r\n },\r\n 'ms': {\r\n 's': 1000,\r\n 'ms': 1\r\n },\r\n // frequency\r\n 'Hz': {\r\n 'Hz': 1,\r\n 'kHz': 1000\r\n },\r\n 'kHz': {\r\n 'Hz': 1/1000,\r\n 'kHz': 1\r\n },\r\n // resolution\r\n 'dpi': {\r\n 'dpi': 1,\r\n 'dpcm': 1.0/2.54,\r\n 'dppx': 1/96\r\n },\r\n 'dpcm': {\r\n 'dpi': 2.54,\r\n 'dpcm': 1,\r\n 'dppx': 2.54/96.0\r\n },\r\n 'dppx': {\r\n 'dpi': 96,\r\n 'dpcm': 96.0/2.54,\r\n 'dppx': 1\r\n }\r\n};\r\n\r\nmodule.exports = function (value, sourceUnit, targetUnit, precision) {\r\n if (!conversions.hasOwnProperty(targetUnit))\r\n throw new Error(\"Cannot convert to \" + targetUnit);\r\n\r\n if (!conversions[targetUnit].hasOwnProperty(sourceUnit))\r\n throw new Error(\"Cannot convert from \" + sourceUnit + \" to \" + targetUnit);\r\n \r\n var converted = conversions[targetUnit][sourceUnit] * value;\r\n \r\n if (precision !== false) {\r\n precision = Math.pow(10, parseInt(precision) || 5);\r\n return Math.round(converted * precision) / precision;\r\n }\r\n \r\n return converted;\r\n};\r\n","/*! decimal.js-light v2.5.1 https://github.com/MikeMcl/decimal.js-light/LICENCE */\r\n;(function (globalScope) {\r\n 'use strict';\r\n\r\n\r\n /*\r\n * decimal.js-light v2.5.1\r\n * An arbitrary-precision Decimal type for JavaScript.\r\n * https://github.com/MikeMcl/decimal.js-light\r\n * Copyright (c) 2020 Michael Mclaughlin \r\n * MIT Expat Licence\r\n */\r\n\r\n\r\n // ----------------------------------- EDITABLE DEFAULTS ------------------------------------ //\r\n\r\n\r\n // The limit on the value of `precision`, and on the value of the first argument to\r\n // `toDecimalPlaces`, `toExponential`, `toFixed`, `toPrecision` and `toSignificantDigits`.\r\n var MAX_DIGITS = 1e9, // 0 to 1e9\r\n\r\n\r\n // The initial configuration properties of the Decimal constructor.\r\n Decimal = {\r\n\r\n // These values must be integers within the stated ranges (inclusive).\r\n // Most of these values can be changed during run-time using `Decimal.config`.\r\n\r\n // The maximum number of significant digits of the result of a calculation or base conversion.\r\n // E.g. `Decimal.config({ precision: 20 });`\r\n precision: 20, // 1 to MAX_DIGITS\r\n\r\n // The rounding mode used by default by `toInteger`, `toDecimalPlaces`, `toExponential`,\r\n // `toFixed`, `toPrecision` and `toSignificantDigits`.\r\n //\r\n // ROUND_UP 0 Away from zero.\r\n // ROUND_DOWN 1 Towards zero.\r\n // ROUND_CEIL 2 Towards +Infinity.\r\n // ROUND_FLOOR 3 Towards -Infinity.\r\n // ROUND_HALF_UP 4 Towards nearest neighbour. If equidistant, up.\r\n // ROUND_HALF_DOWN 5 Towards nearest neighbour. If equidistant, down.\r\n // ROUND_HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour.\r\n // ROUND_HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity.\r\n // ROUND_HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\r\n //\r\n // E.g.\r\n // `Decimal.rounding = 4;`\r\n // `Decimal.rounding = Decimal.ROUND_HALF_UP;`\r\n rounding: 4, // 0 to 8\r\n\r\n // The exponent value at and beneath which `toString` returns exponential notation.\r\n // JavaScript numbers: -7\r\n toExpNeg: -7, // 0 to -MAX_E\r\n\r\n // The exponent value at and above which `toString` returns exponential notation.\r\n // JavaScript numbers: 21\r\n toExpPos: 21, // 0 to MAX_E\r\n\r\n // The natural logarithm of 10.\r\n // 115 digits\r\n LN10: '2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286'\r\n },\r\n\r\n\r\n // ----------------------------------- END OF EDITABLE DEFAULTS ------------------------------- //\r\n\r\n\r\n external = true,\r\n\r\n decimalError = '[DecimalError] ',\r\n invalidArgument = decimalError + 'Invalid argument: ',\r\n exponentOutOfRange = decimalError + 'Exponent out of range: ',\r\n\r\n mathfloor = Math.floor,\r\n mathpow = Math.pow,\r\n\r\n isDecimal = /^(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,\r\n\r\n ONE,\r\n BASE = 1e7,\r\n LOG_BASE = 7,\r\n MAX_SAFE_INTEGER = 9007199254740991,\r\n MAX_E = mathfloor(MAX_SAFE_INTEGER / LOG_BASE), // 1286742750677284\r\n\r\n // Decimal.prototype object\r\n P = {};\r\n\r\n\r\n // Decimal prototype methods\r\n\r\n\r\n /*\r\n * absoluteValue abs\r\n * comparedTo cmp\r\n * decimalPlaces dp\r\n * dividedBy div\r\n * dividedToIntegerBy idiv\r\n * equals eq\r\n * exponent\r\n * greaterThan gt\r\n * greaterThanOrEqualTo gte\r\n * isInteger isint\r\n * isNegative isneg\r\n * isPositive ispos\r\n * isZero\r\n * lessThan lt\r\n * lessThanOrEqualTo lte\r\n * logarithm log\r\n * minus sub\r\n * modulo mod\r\n * naturalExponential exp\r\n * naturalLogarithm ln\r\n * negated neg\r\n * plus add\r\n * precision sd\r\n * squareRoot sqrt\r\n * times mul\r\n * toDecimalPlaces todp\r\n * toExponential\r\n * toFixed\r\n * toInteger toint\r\n * toNumber\r\n * toPower pow\r\n * toPrecision\r\n * toSignificantDigits tosd\r\n * toString\r\n * valueOf val\r\n */\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the absolute value of this Decimal.\r\n *\r\n */\r\n P.absoluteValue = P.abs = function () {\r\n var x = new this.constructor(this);\r\n if (x.s) x.s = 1;\r\n return x;\r\n };\r\n\r\n\r\n /*\r\n * Return\r\n * 1 if the value of this Decimal is greater than the value of `y`,\r\n * -1 if the value of this Decimal is less than the value of `y`,\r\n * 0 if they have the same value\r\n *\r\n */\r\n P.comparedTo = P.cmp = function (y) {\r\n var i, j, xdL, ydL,\r\n x = this;\r\n\r\n y = new x.constructor(y);\r\n\r\n // Signs differ?\r\n if (x.s !== y.s) return x.s || -y.s;\r\n\r\n // Compare exponents.\r\n if (x.e !== y.e) return x.e > y.e ^ x.s < 0 ? 1 : -1;\r\n\r\n xdL = x.d.length;\r\n ydL = y.d.length;\r\n\r\n // Compare digit by digit.\r\n for (i = 0, j = xdL < ydL ? xdL : ydL; i < j; ++i) {\r\n if (x.d[i] !== y.d[i]) return x.d[i] > y.d[i] ^ x.s < 0 ? 1 : -1;\r\n }\r\n\r\n // Compare lengths.\r\n return xdL === ydL ? 0 : xdL > ydL ^ x.s < 0 ? 1 : -1;\r\n };\r\n\r\n\r\n /*\r\n * Return the number of decimal places of the value of this Decimal.\r\n *\r\n */\r\n P.decimalPlaces = P.dp = function () {\r\n var x = this,\r\n w = x.d.length - 1,\r\n dp = (w - x.e) * LOG_BASE;\r\n\r\n // Subtract the number of trailing zeros of the last word.\r\n w = x.d[w];\r\n if (w) for (; w % 10 == 0; w /= 10) dp--;\r\n\r\n return dp < 0 ? 0 : dp;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal divided by `y`, truncated to\r\n * `precision` significant digits.\r\n *\r\n */\r\n P.dividedBy = P.div = function (y) {\r\n return divide(this, new this.constructor(y));\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the integer part of dividing the value of this Decimal\r\n * by the value of `y`, truncated to `precision` significant digits.\r\n *\r\n */\r\n P.dividedToIntegerBy = P.idiv = function (y) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n return round(divide(x, new Ctor(y), 0, 1), Ctor.precision);\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is equal to the value of `y`, otherwise return false.\r\n *\r\n */\r\n P.equals = P.eq = function (y) {\r\n return !this.cmp(y);\r\n };\r\n\r\n\r\n /*\r\n * Return the (base 10) exponent value of this Decimal (this.e is the base 10000000 exponent).\r\n *\r\n */\r\n P.exponent = function () {\r\n return getBase10Exponent(this);\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is greater than the value of `y`, otherwise return\r\n * false.\r\n *\r\n */\r\n P.greaterThan = P.gt = function (y) {\r\n return this.cmp(y) > 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is greater than or equal to the value of `y`,\r\n * otherwise return false.\r\n *\r\n */\r\n P.greaterThanOrEqualTo = P.gte = function (y) {\r\n return this.cmp(y) >= 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is an integer, otherwise return false.\r\n *\r\n */\r\n P.isInteger = P.isint = function () {\r\n return this.e > this.d.length - 2;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is negative, otherwise return false.\r\n *\r\n */\r\n P.isNegative = P.isneg = function () {\r\n return this.s < 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is positive, otherwise return false.\r\n *\r\n */\r\n P.isPositive = P.ispos = function () {\r\n return this.s > 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is 0, otherwise return false.\r\n *\r\n */\r\n P.isZero = function () {\r\n return this.s === 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is less than `y`, otherwise return false.\r\n *\r\n */\r\n P.lessThan = P.lt = function (y) {\r\n return this.cmp(y) < 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is less than or equal to `y`, otherwise return false.\r\n *\r\n */\r\n P.lessThanOrEqualTo = P.lte = function (y) {\r\n return this.cmp(y) < 1;\r\n };\r\n\r\n\r\n /*\r\n * Return the logarithm of the value of this Decimal to the specified base, truncated to\r\n * `precision` significant digits.\r\n *\r\n * If no base is specified, return log[10](x).\r\n *\r\n * log[base](x) = ln(x) / ln(base)\r\n *\r\n * The maximum error of the result is 1 ulp (unit in the last place).\r\n *\r\n * [base] {number|string|Decimal} The base of the logarithm.\r\n *\r\n */\r\n P.logarithm = P.log = function (base) {\r\n var r,\r\n x = this,\r\n Ctor = x.constructor,\r\n pr = Ctor.precision,\r\n wpr = pr + 5;\r\n\r\n // Default base is 10.\r\n if (base === void 0) {\r\n base = new Ctor(10);\r\n } else {\r\n base = new Ctor(base);\r\n\r\n // log[-b](x) = NaN\r\n // log[0](x) = NaN\r\n // log[1](x) = NaN\r\n if (base.s < 1 || base.eq(ONE)) throw Error(decimalError + 'NaN');\r\n }\r\n\r\n // log[b](-x) = NaN\r\n // log[b](0) = -Infinity\r\n if (x.s < 1) throw Error(decimalError + (x.s ? 'NaN' : '-Infinity'));\r\n\r\n // log[b](1) = 0\r\n if (x.eq(ONE)) return new Ctor(0);\r\n\r\n external = false;\r\n r = divide(ln(x, wpr), ln(base, wpr), wpr);\r\n external = true;\r\n\r\n return round(r, pr);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal minus `y`, truncated to\r\n * `precision` significant digits.\r\n *\r\n */\r\n P.minus = P.sub = function (y) {\r\n var x = this;\r\n y = new x.constructor(y);\r\n return x.s == y.s ? subtract(x, y) : add(x, (y.s = -y.s, y));\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal modulo `y`, truncated to\r\n * `precision` significant digits.\r\n *\r\n */\r\n P.modulo = P.mod = function (y) {\r\n var q,\r\n x = this,\r\n Ctor = x.constructor,\r\n pr = Ctor.precision;\r\n\r\n y = new Ctor(y);\r\n\r\n // x % 0 = NaN\r\n if (!y.s) throw Error(decimalError + 'NaN');\r\n\r\n // Return x if x is 0.\r\n if (!x.s) return round(new Ctor(x), pr);\r\n\r\n // Prevent rounding of intermediate calculations.\r\n external = false;\r\n q = divide(x, y, 0, 1).times(y);\r\n external = true;\r\n\r\n return x.minus(q);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the natural exponential of the value of this Decimal,\r\n * i.e. the base e raised to the power the value of this Decimal, truncated to `precision`\r\n * significant digits.\r\n *\r\n */\r\n P.naturalExponential = P.exp = function () {\r\n return exp(this);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the natural logarithm of the value of this Decimal,\r\n * truncated to `precision` significant digits.\r\n *\r\n */\r\n P.naturalLogarithm = P.ln = function () {\r\n return ln(this);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal negated, i.e. as if multiplied by\r\n * -1.\r\n *\r\n */\r\n P.negated = P.neg = function () {\r\n var x = new this.constructor(this);\r\n x.s = -x.s || 0;\r\n return x;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal plus `y`, truncated to\r\n * `precision` significant digits.\r\n *\r\n */\r\n P.plus = P.add = function (y) {\r\n var x = this;\r\n y = new x.constructor(y);\r\n return x.s == y.s ? add(x, y) : subtract(x, (y.s = -y.s, y));\r\n };\r\n\r\n\r\n /*\r\n * Return the number of significant digits of the value of this Decimal.\r\n *\r\n * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0.\r\n *\r\n */\r\n P.precision = P.sd = function (z) {\r\n var e, sd, w,\r\n x = this;\r\n\r\n if (z !== void 0 && z !== !!z && z !== 1 && z !== 0) throw Error(invalidArgument + z);\r\n\r\n e = getBase10Exponent(x) + 1;\r\n w = x.d.length - 1;\r\n sd = w * LOG_BASE + 1;\r\n w = x.d[w];\r\n\r\n // If non-zero...\r\n if (w) {\r\n\r\n // Subtract the number of trailing zeros of the last word.\r\n for (; w % 10 == 0; w /= 10) sd--;\r\n\r\n // Add the number of digits of the first word.\r\n for (w = x.d[0]; w >= 10; w /= 10) sd++;\r\n }\r\n\r\n return z && e > sd ? e : sd;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the square root of this Decimal, truncated to `precision`\r\n * significant digits.\r\n *\r\n */\r\n P.squareRoot = P.sqrt = function () {\r\n var e, n, pr, r, s, t, wpr,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n // Negative or zero?\r\n if (x.s < 1) {\r\n if (!x.s) return new Ctor(0);\r\n\r\n // sqrt(-x) = NaN\r\n throw Error(decimalError + 'NaN');\r\n }\r\n\r\n e = getBase10Exponent(x);\r\n external = false;\r\n\r\n // Initial estimate.\r\n s = Math.sqrt(+x);\r\n\r\n // Math.sqrt underflow/overflow?\r\n // Pass x to Math.sqrt as integer, then adjust the exponent of the result.\r\n if (s == 0 || s == 1 / 0) {\r\n n = digitsToString(x.d);\r\n if ((n.length + e) % 2 == 0) n += '0';\r\n s = Math.sqrt(n);\r\n e = mathfloor((e + 1) / 2) - (e < 0 || e % 2);\r\n\r\n if (s == 1 / 0) {\r\n n = '5e' + e;\r\n } else {\r\n n = s.toExponential();\r\n n = n.slice(0, n.indexOf('e') + 1) + e;\r\n }\r\n\r\n r = new Ctor(n);\r\n } else {\r\n r = new Ctor(s.toString());\r\n }\r\n\r\n pr = Ctor.precision;\r\n s = wpr = pr + 3;\r\n\r\n // Newton-Raphson iteration.\r\n for (;;) {\r\n t = r;\r\n r = t.plus(divide(x, t, wpr + 2)).times(0.5);\r\n\r\n if (digitsToString(t.d).slice(0, wpr) === (n = digitsToString(r.d)).slice(0, wpr)) {\r\n n = n.slice(wpr - 3, wpr + 1);\r\n\r\n // The 4th rounding digit may be in error by -1 so if the 4 rounding digits are 9999 or\r\n // 4999, i.e. approaching a rounding boundary, continue the iteration.\r\n if (s == wpr && n == '4999') {\r\n\r\n // On the first iteration only, check to see if rounding up gives the exact result as the\r\n // nines may infinitely repeat.\r\n round(t, pr + 1, 0);\r\n\r\n if (t.times(t).eq(x)) {\r\n r = t;\r\n break;\r\n }\r\n } else if (n != '9999') {\r\n break;\r\n }\r\n\r\n wpr += 4;\r\n }\r\n }\r\n\r\n external = true;\r\n\r\n return round(r, pr);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal times `y`, truncated to\r\n * `precision` significant digits.\r\n *\r\n */\r\n P.times = P.mul = function (y) {\r\n var carry, e, i, k, r, rL, t, xdL, ydL,\r\n x = this,\r\n Ctor = x.constructor,\r\n xd = x.d,\r\n yd = (y = new Ctor(y)).d;\r\n\r\n // Return 0 if either is 0.\r\n if (!x.s || !y.s) return new Ctor(0);\r\n\r\n y.s *= x.s;\r\n e = x.e + y.e;\r\n xdL = xd.length;\r\n ydL = yd.length;\r\n\r\n // Ensure xd points to the longer array.\r\n if (xdL < ydL) {\r\n r = xd;\r\n xd = yd;\r\n yd = r;\r\n rL = xdL;\r\n xdL = ydL;\r\n ydL = rL;\r\n }\r\n\r\n // Initialise the result array with zeros.\r\n r = [];\r\n rL = xdL + ydL;\r\n for (i = rL; i--;) r.push(0);\r\n\r\n // Multiply!\r\n for (i = ydL; --i >= 0;) {\r\n carry = 0;\r\n for (k = xdL + i; k > i;) {\r\n t = r[k] + yd[i] * xd[k - i - 1] + carry;\r\n r[k--] = t % BASE | 0;\r\n carry = t / BASE | 0;\r\n }\r\n\r\n r[k] = (r[k] + carry) % BASE | 0;\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (; !r[--rL];) r.pop();\r\n\r\n if (carry) ++e;\r\n else r.shift();\r\n\r\n y.d = r;\r\n y.e = e;\r\n\r\n return external ? round(y, Ctor.precision) : y;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `dp`\r\n * decimal places using rounding mode `rm` or `rounding` if `rm` is omitted.\r\n *\r\n * If `dp` is omitted, return a new Decimal whose value is the value of this Decimal.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\n P.toDecimalPlaces = P.todp = function (dp, rm) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n\r\n x = new Ctor(x);\r\n if (dp === void 0) return x;\r\n\r\n checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n return round(x, dp + getBase10Exponent(x) + 1, rm);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Decimal in exponential notation rounded to\r\n * `dp` fixed decimal places using rounding mode `rounding`.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\n P.toExponential = function (dp, rm) {\r\n var str,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (dp === void 0) {\r\n str = toString(x, true);\r\n } else {\r\n checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n x = round(new Ctor(x), dp + 1, rm);\r\n str = toString(x, true, dp + 1);\r\n }\r\n\r\n return str;\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Decimal in normal (fixed-point) notation to\r\n * `dp` fixed decimal places and rounded using rounding mode `rm` or `rounding` if `rm` is\r\n * omitted.\r\n *\r\n * As with JavaScript numbers, (-0).toFixed(0) is '0', but e.g. (-0.00001).toFixed(0) is '-0'.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.\r\n * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.\r\n * (-0).toFixed(3) is '0.000'.\r\n * (-0.5).toFixed(0) is '-0'.\r\n *\r\n */\r\n P.toFixed = function (dp, rm) {\r\n var str, y,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (dp === void 0) return toString(x);\r\n\r\n checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n y = round(new Ctor(x), dp + getBase10Exponent(x) + 1, rm);\r\n str = toString(y.abs(), false, dp + getBase10Exponent(y) + 1);\r\n\r\n // To determine whether to add the minus sign look at the value before it was rounded,\r\n // i.e. look at `x` rather than `y`.\r\n return x.isneg() && !x.isZero() ? '-' + str : str;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a whole number using\r\n * rounding mode `rounding`.\r\n *\r\n */\r\n P.toInteger = P.toint = function () {\r\n var x = this,\r\n Ctor = x.constructor;\r\n return round(new Ctor(x), getBase10Exponent(x) + 1, Ctor.rounding);\r\n };\r\n\r\n\r\n /*\r\n * Return the value of this Decimal converted to a number primitive.\r\n *\r\n */\r\n P.toNumber = function () {\r\n return +this;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal raised to the power `y`,\r\n * truncated to `precision` significant digits.\r\n *\r\n * For non-integer or very large exponents pow(x, y) is calculated using\r\n *\r\n * x^y = exp(y*ln(x))\r\n *\r\n * The maximum error is 1 ulp (unit in last place).\r\n *\r\n * y {number|string|Decimal} The power to which to raise this Decimal.\r\n *\r\n */\r\n P.toPower = P.pow = function (y) {\r\n var e, k, pr, r, sign, yIsInt,\r\n x = this,\r\n Ctor = x.constructor,\r\n guard = 12,\r\n yn = +(y = new Ctor(y));\r\n\r\n // pow(x, 0) = 1\r\n if (!y.s) return new Ctor(ONE);\r\n\r\n x = new Ctor(x);\r\n\r\n // pow(0, y > 0) = 0\r\n // pow(0, y < 0) = Infinity\r\n if (!x.s) {\r\n if (y.s < 1) throw Error(decimalError + 'Infinity');\r\n return x;\r\n }\r\n\r\n // pow(1, y) = 1\r\n if (x.eq(ONE)) return x;\r\n\r\n pr = Ctor.precision;\r\n\r\n // pow(x, 1) = x\r\n if (y.eq(ONE)) return round(x, pr);\r\n\r\n e = y.e;\r\n k = y.d.length - 1;\r\n yIsInt = e >= k;\r\n sign = x.s;\r\n\r\n if (!yIsInt) {\r\n\r\n // pow(x < 0, y non-integer) = NaN\r\n if (sign < 0) throw Error(decimalError + 'NaN');\r\n\r\n // If y is a small integer use the 'exponentiation by squaring' algorithm.\r\n } else if ((k = yn < 0 ? -yn : yn) <= MAX_SAFE_INTEGER) {\r\n r = new Ctor(ONE);\r\n\r\n // Max k of 9007199254740991 takes 53 loop iterations.\r\n // Maximum digits array length; leaves [28, 34] guard digits.\r\n e = Math.ceil(pr / LOG_BASE + 4);\r\n\r\n external = false;\r\n\r\n for (;;) {\r\n if (k % 2) {\r\n r = r.times(x);\r\n truncate(r.d, e);\r\n }\r\n\r\n k = mathfloor(k / 2);\r\n if (k === 0) break;\r\n\r\n x = x.times(x);\r\n truncate(x.d, e);\r\n }\r\n\r\n external = true;\r\n\r\n return y.s < 0 ? new Ctor(ONE).div(r) : round(r, pr);\r\n }\r\n\r\n // Result is negative if x is negative and the last digit of integer y is odd.\r\n sign = sign < 0 && y.d[Math.max(e, k)] & 1 ? -1 : 1;\r\n\r\n x.s = 1;\r\n external = false;\r\n r = y.times(ln(x, pr + guard));\r\n external = true;\r\n r = exp(r);\r\n r.s = sign;\r\n\r\n return r;\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Decimal rounded to `sd` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * Return exponential notation if `sd` is less than the number of digits necessary to represent\r\n * the integer part of the value in normal notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\n P.toPrecision = function (sd, rm) {\r\n var e, str,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (sd === void 0) {\r\n e = getBase10Exponent(x);\r\n str = toString(x, e <= Ctor.toExpNeg || e >= Ctor.toExpPos);\r\n } else {\r\n checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n x = round(new Ctor(x), sd, rm);\r\n e = getBase10Exponent(x);\r\n str = toString(x, sd <= e || e <= Ctor.toExpNeg, sd);\r\n }\r\n\r\n return str;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `sd`\r\n * significant digits using rounding mode `rm`, or to `precision` and `rounding` respectively if\r\n * omitted.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\n P.toSignificantDigits = P.tosd = function (sd, rm) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n\r\n if (sd === void 0) {\r\n sd = Ctor.precision;\r\n rm = Ctor.rounding;\r\n } else {\r\n checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n }\r\n\r\n return round(new Ctor(x), sd, rm);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Decimal.\r\n *\r\n * Return exponential notation if this Decimal has a positive exponent equal to or greater than\r\n * `toExpPos`, or a negative exponent equal to or less than `toExpNeg`.\r\n *\r\n */\r\n P.toString = P.valueOf = P.val = P.toJSON = function () {\r\n var x = this,\r\n e = getBase10Exponent(x),\r\n Ctor = x.constructor;\r\n\r\n return toString(x, e <= Ctor.toExpNeg || e >= Ctor.toExpPos);\r\n };\r\n\r\n\r\n // Helper functions for Decimal.prototype (P) and/or Decimal methods, and their callers.\r\n\r\n\r\n /*\r\n * add P.minus, P.plus\r\n * checkInt32 P.todp, P.toExponential, P.toFixed, P.toPrecision, P.tosd\r\n * digitsToString P.log, P.sqrt, P.pow, toString, exp, ln\r\n * divide P.div, P.idiv, P.log, P.mod, P.sqrt, exp, ln\r\n * exp P.exp, P.pow\r\n * getBase10Exponent P.exponent, P.sd, P.toint, P.sqrt, P.todp, P.toFixed, P.toPrecision,\r\n * P.toString, divide, round, toString, exp, ln\r\n * getLn10 P.log, ln\r\n * getZeroString digitsToString, toString\r\n * ln P.log, P.ln, P.pow, exp\r\n * parseDecimal Decimal\r\n * round P.abs, P.idiv, P.log, P.minus, P.mod, P.neg, P.plus, P.toint, P.sqrt,\r\n * P.times, P.todp, P.toExponential, P.toFixed, P.pow, P.toPrecision, P.tosd,\r\n * divide, getLn10, exp, ln\r\n * subtract P.minus, P.plus\r\n * toString P.toExponential, P.toFixed, P.toPrecision, P.toString, P.valueOf\r\n * truncate P.pow\r\n *\r\n * Throws: P.log, P.mod, P.sd, P.sqrt, P.pow, checkInt32, divide, round,\r\n * getLn10, exp, ln, parseDecimal, Decimal, config\r\n */\r\n\r\n\r\n function add(x, y) {\r\n var carry, d, e, i, k, len, xd, yd,\r\n Ctor = x.constructor,\r\n pr = Ctor.precision;\r\n\r\n // If either is zero...\r\n if (!x.s || !y.s) {\r\n\r\n // Return x if y is zero.\r\n // Return y if y is non-zero.\r\n if (!y.s) y = new Ctor(x);\r\n return external ? round(y, pr) : y;\r\n }\r\n\r\n xd = x.d;\r\n yd = y.d;\r\n\r\n // x and y are finite, non-zero numbers with the same sign.\r\n\r\n k = x.e;\r\n e = y.e;\r\n xd = xd.slice();\r\n i = k - e;\r\n\r\n // If base 1e7 exponents differ...\r\n if (i) {\r\n if (i < 0) {\r\n d = xd;\r\n i = -i;\r\n len = yd.length;\r\n } else {\r\n d = yd;\r\n e = k;\r\n len = xd.length;\r\n }\r\n\r\n // Limit number of zeros prepended to max(ceil(pr / LOG_BASE), len) + 1.\r\n k = Math.ceil(pr / LOG_BASE);\r\n len = k > len ? k + 1 : len + 1;\r\n\r\n if (i > len) {\r\n i = len;\r\n d.length = 1;\r\n }\r\n\r\n // Prepend zeros to equalise exponents. Note: Faster to use reverse then do unshifts.\r\n d.reverse();\r\n for (; i--;) d.push(0);\r\n d.reverse();\r\n }\r\n\r\n len = xd.length;\r\n i = yd.length;\r\n\r\n // If yd is longer than xd, swap xd and yd so xd points to the longer array.\r\n if (len - i < 0) {\r\n i = len;\r\n d = yd;\r\n yd = xd;\r\n xd = d;\r\n }\r\n\r\n // Only start adding at yd.length - 1 as the further digits of xd can be left as they are.\r\n for (carry = 0; i;) {\r\n carry = (xd[--i] = xd[i] + yd[i] + carry) / BASE | 0;\r\n xd[i] %= BASE;\r\n }\r\n\r\n if (carry) {\r\n xd.unshift(carry);\r\n ++e;\r\n }\r\n\r\n // Remove trailing zeros.\r\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n for (len = xd.length; xd[--len] == 0;) xd.pop();\r\n\r\n y.d = xd;\r\n y.e = e;\r\n\r\n return external ? round(y, pr) : y;\r\n }\r\n\r\n\r\n function checkInt32(i, min, max) {\r\n if (i !== ~~i || i < min || i > max) {\r\n throw Error(invalidArgument + i);\r\n }\r\n }\r\n\r\n\r\n function digitsToString(d) {\r\n var i, k, ws,\r\n indexOfLastWord = d.length - 1,\r\n str = '',\r\n w = d[0];\r\n\r\n if (indexOfLastWord > 0) {\r\n str += w;\r\n for (i = 1; i < indexOfLastWord; i++) {\r\n ws = d[i] + '';\r\n k = LOG_BASE - ws.length;\r\n if (k) str += getZeroString(k);\r\n str += ws;\r\n }\r\n\r\n w = d[i];\r\n ws = w + '';\r\n k = LOG_BASE - ws.length;\r\n if (k) str += getZeroString(k);\r\n } else if (w === 0) {\r\n return '0';\r\n }\r\n\r\n // Remove trailing zeros of last w.\r\n for (; w % 10 === 0;) w /= 10;\r\n\r\n return str + w;\r\n }\r\n\r\n\r\n var divide = (function () {\r\n\r\n // Assumes non-zero x and k, and hence non-zero result.\r\n function multiplyInteger(x, k) {\r\n var temp,\r\n carry = 0,\r\n i = x.length;\r\n\r\n for (x = x.slice(); i--;) {\r\n temp = x[i] * k + carry;\r\n x[i] = temp % BASE | 0;\r\n carry = temp / BASE | 0;\r\n }\r\n\r\n if (carry) x.unshift(carry);\r\n\r\n return x;\r\n }\r\n\r\n function compare(a, b, aL, bL) {\r\n var i, r;\r\n\r\n if (aL != bL) {\r\n r = aL > bL ? 1 : -1;\r\n } else {\r\n for (i = r = 0; i < aL; i++) {\r\n if (a[i] != b[i]) {\r\n r = a[i] > b[i] ? 1 : -1;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return r;\r\n }\r\n\r\n function subtract(a, b, aL) {\r\n var i = 0;\r\n\r\n // Subtract b from a.\r\n for (; aL--;) {\r\n a[aL] -= i;\r\n i = a[aL] < b[aL] ? 1 : 0;\r\n a[aL] = i * BASE + a[aL] - b[aL];\r\n }\r\n\r\n // Remove leading zeros.\r\n for (; !a[0] && a.length > 1;) a.shift();\r\n }\r\n\r\n return function (x, y, pr, dp) {\r\n var cmp, e, i, k, prod, prodL, q, qd, rem, remL, rem0, sd, t, xi, xL, yd0, yL, yz,\r\n Ctor = x.constructor,\r\n sign = x.s == y.s ? 1 : -1,\r\n xd = x.d,\r\n yd = y.d;\r\n\r\n // Either 0?\r\n if (!x.s) return new Ctor(x);\r\n if (!y.s) throw Error(decimalError + 'Division by zero');\r\n\r\n e = x.e - y.e;\r\n yL = yd.length;\r\n xL = xd.length;\r\n q = new Ctor(sign);\r\n qd = q.d = [];\r\n\r\n // Result exponent may be one less than e.\r\n for (i = 0; yd[i] == (xd[i] || 0); ) ++i;\r\n if (yd[i] > (xd[i] || 0)) --e;\r\n\r\n if (pr == null) {\r\n sd = pr = Ctor.precision;\r\n } else if (dp) {\r\n sd = pr + (getBase10Exponent(x) - getBase10Exponent(y)) + 1;\r\n } else {\r\n sd = pr;\r\n }\r\n\r\n if (sd < 0) return new Ctor(0);\r\n\r\n // Convert precision in number of base 10 digits to base 1e7 digits.\r\n sd = sd / LOG_BASE + 2 | 0;\r\n i = 0;\r\n\r\n // divisor < 1e7\r\n if (yL == 1) {\r\n k = 0;\r\n yd = yd[0];\r\n sd++;\r\n\r\n // k is the carry.\r\n for (; (i < xL || k) && sd--; i++) {\r\n t = k * BASE + (xd[i] || 0);\r\n qd[i] = t / yd | 0;\r\n k = t % yd | 0;\r\n }\r\n\r\n // divisor >= 1e7\r\n } else {\r\n\r\n // Normalise xd and yd so highest order digit of yd is >= BASE/2\r\n k = BASE / (yd[0] + 1) | 0;\r\n\r\n if (k > 1) {\r\n yd = multiplyInteger(yd, k);\r\n xd = multiplyInteger(xd, k);\r\n yL = yd.length;\r\n xL = xd.length;\r\n }\r\n\r\n xi = yL;\r\n rem = xd.slice(0, yL);\r\n remL = rem.length;\r\n\r\n // Add zeros to make remainder as long as divisor.\r\n for (; remL < yL;) rem[remL++] = 0;\r\n\r\n yz = yd.slice();\r\n yz.unshift(0);\r\n yd0 = yd[0];\r\n\r\n if (yd[1] >= BASE / 2) ++yd0;\r\n\r\n do {\r\n k = 0;\r\n\r\n // Compare divisor and remainder.\r\n cmp = compare(yd, rem, yL, remL);\r\n\r\n // If divisor < remainder.\r\n if (cmp < 0) {\r\n\r\n // Calculate trial digit, k.\r\n rem0 = rem[0];\r\n if (yL != remL) rem0 = rem0 * BASE + (rem[1] || 0);\r\n\r\n // k will be how many times the divisor goes into the current remainder.\r\n k = rem0 / yd0 | 0;\r\n\r\n // Algorithm:\r\n // 1. product = divisor * trial digit (k)\r\n // 2. if product > remainder: product -= divisor, k--\r\n // 3. remainder -= product\r\n // 4. if product was < remainder at 2:\r\n // 5. compare new remainder and divisor\r\n // 6. If remainder > divisor: remainder -= divisor, k++\r\n\r\n if (k > 1) {\r\n if (k >= BASE) k = BASE - 1;\r\n\r\n // product = divisor * trial digit.\r\n prod = multiplyInteger(yd, k);\r\n prodL = prod.length;\r\n remL = rem.length;\r\n\r\n // Compare product and remainder.\r\n cmp = compare(prod, rem, prodL, remL);\r\n\r\n // product > remainder.\r\n if (cmp == 1) {\r\n k--;\r\n\r\n // Subtract divisor from product.\r\n subtract(prod, yL < prodL ? yz : yd, prodL);\r\n }\r\n } else {\r\n\r\n // cmp is -1.\r\n // If k is 0, there is no need to compare yd and rem again below, so change cmp to 1\r\n // to avoid it. If k is 1 there is a need to compare yd and rem again below.\r\n if (k == 0) cmp = k = 1;\r\n prod = yd.slice();\r\n }\r\n\r\n prodL = prod.length;\r\n if (prodL < remL) prod.unshift(0);\r\n\r\n // Subtract product from remainder.\r\n subtract(rem, prod, remL);\r\n\r\n // If product was < previous remainder.\r\n if (cmp == -1) {\r\n remL = rem.length;\r\n\r\n // Compare divisor and new remainder.\r\n cmp = compare(yd, rem, yL, remL);\r\n\r\n // If divisor < new remainder, subtract divisor from remainder.\r\n if (cmp < 1) {\r\n k++;\r\n\r\n // Subtract divisor from remainder.\r\n subtract(rem, yL < remL ? yz : yd, remL);\r\n }\r\n }\r\n\r\n remL = rem.length;\r\n } else if (cmp === 0) {\r\n k++;\r\n rem = [0];\r\n } // if cmp === 1, k will be 0\r\n\r\n // Add the next digit, k, to the result array.\r\n qd[i++] = k;\r\n\r\n // Update the remainder.\r\n if (cmp && rem[0]) {\r\n rem[remL++] = xd[xi] || 0;\r\n } else {\r\n rem = [xd[xi]];\r\n remL = 1;\r\n }\r\n\r\n } while ((xi++ < xL || rem[0] !== void 0) && sd--);\r\n }\r\n\r\n // Leading zero?\r\n if (!qd[0]) qd.shift();\r\n\r\n q.e = e;\r\n\r\n return round(q, dp ? pr + getBase10Exponent(q) + 1 : pr);\r\n };\r\n })();\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the natural exponential of `x` truncated to `sd`\r\n * significant digits.\r\n *\r\n * Taylor/Maclaurin series.\r\n *\r\n * exp(x) = x^0/0! + x^1/1! + x^2/2! + x^3/3! + ...\r\n *\r\n * Argument reduction:\r\n * Repeat x = x / 32, k += 5, until |x| < 0.1\r\n * exp(x) = exp(x / 2^k)^(2^k)\r\n *\r\n * Previously, the argument was initially reduced by\r\n * exp(x) = exp(r) * 10^k where r = x - k * ln10, k = floor(x / ln10)\r\n * to first put r in the range [0, ln10], before dividing by 32 until |x| < 0.1, but this was\r\n * found to be slower than just dividing repeatedly by 32 as above.\r\n *\r\n * (Math object integer min/max: Math.exp(709) = 8.2e+307, Math.exp(-745) = 5e-324)\r\n *\r\n * exp(x) is non-terminating for any finite, non-zero x.\r\n *\r\n */\r\n function exp(x, sd) {\r\n var denominator, guard, pow, sum, t, wpr,\r\n i = 0,\r\n k = 0,\r\n Ctor = x.constructor,\r\n pr = Ctor.precision;\r\n\r\n if (getBase10Exponent(x) > 16) throw Error(exponentOutOfRange + getBase10Exponent(x));\r\n\r\n // exp(0) = 1\r\n if (!x.s) return new Ctor(ONE);\r\n\r\n if (sd == null) {\r\n external = false;\r\n wpr = pr;\r\n } else {\r\n wpr = sd;\r\n }\r\n\r\n t = new Ctor(0.03125);\r\n\r\n while (x.abs().gte(0.1)) {\r\n x = x.times(t); // x = x / 2^5\r\n k += 5;\r\n }\r\n\r\n // Estimate the precision increase necessary to ensure the first 4 rounding digits are correct.\r\n guard = Math.log(mathpow(2, k)) / Math.LN10 * 2 + 5 | 0;\r\n wpr += guard;\r\n denominator = pow = sum = new Ctor(ONE);\r\n Ctor.precision = wpr;\r\n\r\n for (;;) {\r\n pow = round(pow.times(x), wpr);\r\n denominator = denominator.times(++i);\r\n t = sum.plus(divide(pow, denominator, wpr));\r\n\r\n if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n while (k--) sum = round(sum.times(sum), wpr);\r\n Ctor.precision = pr;\r\n return sd == null ? (external = true, round(sum, pr)) : sum;\r\n }\r\n\r\n sum = t;\r\n }\r\n }\r\n\r\n\r\n // Calculate the base 10 exponent from the base 1e7 exponent.\r\n function getBase10Exponent(x) {\r\n var e = x.e * LOG_BASE,\r\n w = x.d[0];\r\n\r\n // Add the number of digits of the first word of the digits array.\r\n for (; w >= 10; w /= 10) e++;\r\n return e;\r\n }\r\n\r\n\r\n function getLn10(Ctor, sd, pr) {\r\n\r\n if (sd > Ctor.LN10.sd()) {\r\n\r\n\r\n // Reset global state in case the exception is caught.\r\n external = true;\r\n if (pr) Ctor.precision = pr;\r\n throw Error(decimalError + 'LN10 precision limit exceeded');\r\n }\r\n\r\n return round(new Ctor(Ctor.LN10), sd);\r\n }\r\n\r\n\r\n function getZeroString(k) {\r\n var zs = '';\r\n for (; k--;) zs += '0';\r\n return zs;\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the natural logarithm of `x` truncated to `sd` significant\r\n * digits.\r\n *\r\n * ln(n) is non-terminating (n != 1)\r\n *\r\n */\r\n function ln(y, sd) {\r\n var c, c0, denominator, e, numerator, sum, t, wpr, x2,\r\n n = 1,\r\n guard = 10,\r\n x = y,\r\n xd = x.d,\r\n Ctor = x.constructor,\r\n pr = Ctor.precision;\r\n\r\n // ln(-x) = NaN\r\n // ln(0) = -Infinity\r\n if (x.s < 1) throw Error(decimalError + (x.s ? 'NaN' : '-Infinity'));\r\n\r\n // ln(1) = 0\r\n if (x.eq(ONE)) return new Ctor(0);\r\n\r\n if (sd == null) {\r\n external = false;\r\n wpr = pr;\r\n } else {\r\n wpr = sd;\r\n }\r\n\r\n if (x.eq(10)) {\r\n if (sd == null) external = true;\r\n return getLn10(Ctor, wpr);\r\n }\r\n\r\n wpr += guard;\r\n Ctor.precision = wpr;\r\n c = digitsToString(xd);\r\n c0 = c.charAt(0);\r\n e = getBase10Exponent(x);\r\n\r\n if (Math.abs(e) < 1.5e15) {\r\n\r\n // Argument reduction.\r\n // The series converges faster the closer the argument is to 1, so using\r\n // ln(a^b) = b * ln(a), ln(a) = ln(a^b) / b\r\n // multiply the argument by itself until the leading digits of the significand are 7, 8, 9,\r\n // 10, 11, 12 or 13, recording the number of multiplications so the sum of the series can\r\n // later be divided by this number, then separate out the power of 10 using\r\n // ln(a*10^b) = ln(a) + b*ln(10).\r\n\r\n // max n is 21 (gives 0.9, 1.0 or 1.1) (9e15 / 21 = 4.2e14).\r\n //while (c0 < 9 && c0 != 1 || c0 == 1 && c.charAt(1) > 1) {\r\n // max n is 6 (gives 0.7 - 1.3)\r\n while (c0 < 7 && c0 != 1 || c0 == 1 && c.charAt(1) > 3) {\r\n x = x.times(y);\r\n c = digitsToString(x.d);\r\n c0 = c.charAt(0);\r\n n++;\r\n }\r\n\r\n e = getBase10Exponent(x);\r\n\r\n if (c0 > 1) {\r\n x = new Ctor('0.' + c);\r\n e++;\r\n } else {\r\n x = new Ctor(c0 + '.' + c.slice(1));\r\n }\r\n } else {\r\n\r\n // The argument reduction method above may result in overflow if the argument y is a massive\r\n // number with exponent >= 1500000000000000 (9e15 / 6 = 1.5e15), so instead recall this\r\n // function using ln(x*10^e) = ln(x) + e*ln(10).\r\n t = getLn10(Ctor, wpr + 2, pr).times(e + '');\r\n x = ln(new Ctor(c0 + '.' + c.slice(1)), wpr - guard).plus(t);\r\n\r\n Ctor.precision = pr;\r\n return sd == null ? (external = true, round(x, pr)) : x;\r\n }\r\n\r\n // x is reduced to a value near 1.\r\n\r\n // Taylor series.\r\n // ln(y) = ln((1 + x)/(1 - x)) = 2(x + x^3/3 + x^5/5 + x^7/7 + ...)\r\n // where x = (y - 1)/(y + 1) (|x| < 1)\r\n sum = numerator = x = divide(x.minus(ONE), x.plus(ONE), wpr);\r\n x2 = round(x.times(x), wpr);\r\n denominator = 3;\r\n\r\n for (;;) {\r\n numerator = round(numerator.times(x2), wpr);\r\n t = sum.plus(divide(numerator, new Ctor(denominator), wpr));\r\n\r\n if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n sum = sum.times(2);\r\n\r\n // Reverse the argument reduction.\r\n if (e !== 0) sum = sum.plus(getLn10(Ctor, wpr + 2, pr).times(e + ''));\r\n sum = divide(sum, new Ctor(n), wpr);\r\n\r\n Ctor.precision = pr;\r\n return sd == null ? (external = true, round(sum, pr)) : sum;\r\n }\r\n\r\n sum = t;\r\n denominator += 2;\r\n }\r\n }\r\n\r\n\r\n /*\r\n * Parse the value of a new Decimal `x` from string `str`.\r\n */\r\n function parseDecimal(x, str) {\r\n var e, i, len;\r\n\r\n // Decimal point?\r\n if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n\r\n // Exponential form?\r\n if ((i = str.search(/e/i)) > 0) {\r\n\r\n // Determine exponent.\r\n if (e < 0) e = i;\r\n e += +str.slice(i + 1);\r\n str = str.substring(0, i);\r\n } else if (e < 0) {\r\n\r\n // Integer.\r\n e = str.length;\r\n }\r\n\r\n // Determine leading zeros.\r\n for (i = 0; str.charCodeAt(i) === 48;) ++i;\r\n\r\n // Determine trailing zeros.\r\n for (len = str.length; str.charCodeAt(len - 1) === 48;) --len;\r\n str = str.slice(i, len);\r\n\r\n if (str) {\r\n len -= i;\r\n e = e - i - 1;\r\n x.e = mathfloor(e / LOG_BASE);\r\n x.d = [];\r\n\r\n // Transform base\r\n\r\n // e is the base 10 exponent.\r\n // i is where to slice str to get the first word of the digits array.\r\n i = (e + 1) % LOG_BASE;\r\n if (e < 0) i += LOG_BASE;\r\n\r\n if (i < len) {\r\n if (i) x.d.push(+str.slice(0, i));\r\n for (len -= LOG_BASE; i < len;) x.d.push(+str.slice(i, i += LOG_BASE));\r\n str = str.slice(i);\r\n i = LOG_BASE - str.length;\r\n } else {\r\n i -= len;\r\n }\r\n\r\n for (; i--;) str += '0';\r\n x.d.push(+str);\r\n\r\n if (external && (x.e > MAX_E || x.e < -MAX_E)) throw Error(exponentOutOfRange + e);\r\n } else {\r\n\r\n // Zero.\r\n x.s = 0;\r\n x.e = 0;\r\n x.d = [0];\r\n }\r\n\r\n return x;\r\n }\r\n\r\n\r\n /*\r\n * Round `x` to `sd` significant digits, using rounding mode `rm` if present (truncate otherwise).\r\n */\r\n function round(x, sd, rm) {\r\n var i, j, k, n, rd, doRound, w, xdi,\r\n xd = x.d;\r\n\r\n // rd: the rounding digit, i.e. the digit after the digit that may be rounded up.\r\n // w: the word of xd which contains the rounding digit, a base 1e7 number.\r\n // xdi: the index of w within xd.\r\n // n: the number of digits of w.\r\n // i: what would be the index of rd within w if all the numbers were 7 digits long (i.e. if\r\n // they had leading zeros)\r\n // j: if > 0, the actual index of rd within w (if < 0, rd is a leading zero).\r\n\r\n // Get the length of the first word of the digits array xd.\r\n for (n = 1, k = xd[0]; k >= 10; k /= 10) n++;\r\n i = sd - n;\r\n\r\n // Is the rounding digit in the first word of xd?\r\n if (i < 0) {\r\n i += LOG_BASE;\r\n j = sd;\r\n w = xd[xdi = 0];\r\n } else {\r\n xdi = Math.ceil((i + 1) / LOG_BASE);\r\n k = xd.length;\r\n if (xdi >= k) return x;\r\n w = k = xd[xdi];\r\n\r\n // Get the number of digits of w.\r\n for (n = 1; k >= 10; k /= 10) n++;\r\n\r\n // Get the index of rd within w.\r\n i %= LOG_BASE;\r\n\r\n // Get the index of rd within w, adjusted for leading zeros.\r\n // The number of leading zeros of w is given by LOG_BASE - n.\r\n j = i - LOG_BASE + n;\r\n }\r\n\r\n if (rm !== void 0) {\r\n k = mathpow(10, n - j - 1);\r\n\r\n // Get the rounding digit at index j of w.\r\n rd = w / k % 10 | 0;\r\n\r\n // Are there any non-zero digits after the rounding digit?\r\n doRound = sd < 0 || xd[xdi + 1] !== void 0 || w % k;\r\n\r\n // The expression `w % mathpow(10, n - j - 1)` returns all the digits of w to the right of the\r\n // digit at (left-to-right) index j, e.g. if w is 908714 and j is 2, the expression will give\r\n // 714.\r\n\r\n doRound = rm < 4\r\n ? (rd || doRound) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n : rd > 5 || rd == 5 && (rm == 4 || doRound || rm == 6 &&\r\n\r\n // Check whether the digit to the left of the rounding digit is odd.\r\n ((i > 0 ? j > 0 ? w / mathpow(10, n - j) : 0 : xd[xdi - 1]) % 10) & 1 ||\r\n rm == (x.s < 0 ? 8 : 7));\r\n }\r\n\r\n if (sd < 1 || !xd[0]) {\r\n if (doRound) {\r\n k = getBase10Exponent(x);\r\n xd.length = 1;\r\n\r\n // Convert sd to decimal places.\r\n sd = sd - k - 1;\r\n\r\n // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n xd[0] = mathpow(10, (LOG_BASE - sd % LOG_BASE) % LOG_BASE);\r\n x.e = mathfloor(-sd / LOG_BASE) || 0;\r\n } else {\r\n xd.length = 1;\r\n\r\n // Zero.\r\n xd[0] = x.e = x.s = 0;\r\n }\r\n\r\n return x;\r\n }\r\n\r\n // Remove excess digits.\r\n if (i == 0) {\r\n xd.length = xdi;\r\n k = 1;\r\n xdi--;\r\n } else {\r\n xd.length = xdi + 1;\r\n k = mathpow(10, LOG_BASE - i);\r\n\r\n // E.g. 56700 becomes 56000 if 7 is the rounding digit.\r\n // j > 0 means i > number of leading zeros of w.\r\n xd[xdi] = j > 0 ? (w / mathpow(10, n - j) % mathpow(10, j) | 0) * k : 0;\r\n }\r\n\r\n if (doRound) {\r\n for (;;) {\r\n\r\n // Is the digit to be rounded up in the first word of xd?\r\n if (xdi == 0) {\r\n if ((xd[0] += k) == BASE) {\r\n xd[0] = 1;\r\n ++x.e;\r\n }\r\n\r\n break;\r\n } else {\r\n xd[xdi] += k;\r\n if (xd[xdi] != BASE) break;\r\n xd[xdi--] = 0;\r\n k = 1;\r\n }\r\n }\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (i = xd.length; xd[--i] === 0;) xd.pop();\r\n\r\n if (external && (x.e > MAX_E || x.e < -MAX_E)) {\r\n throw Error(exponentOutOfRange + getBase10Exponent(x));\r\n }\r\n\r\n return x;\r\n }\r\n\r\n\r\n function subtract(x, y) {\r\n var d, e, i, j, k, len, xd, xe, xLTy, yd,\r\n Ctor = x.constructor,\r\n pr = Ctor.precision;\r\n\r\n // Return y negated if x is zero.\r\n // Return x if y is zero and x is non-zero.\r\n if (!x.s || !y.s) {\r\n if (y.s) y.s = -y.s;\r\n else y = new Ctor(x);\r\n return external ? round(y, pr) : y;\r\n }\r\n\r\n xd = x.d;\r\n yd = y.d;\r\n\r\n // x and y are non-zero numbers with the same sign.\r\n\r\n e = y.e;\r\n xe = x.e;\r\n xd = xd.slice();\r\n k = xe - e;\r\n\r\n // If exponents differ...\r\n if (k) {\r\n xLTy = k < 0;\r\n\r\n if (xLTy) {\r\n d = xd;\r\n k = -k;\r\n len = yd.length;\r\n } else {\r\n d = yd;\r\n e = xe;\r\n len = xd.length;\r\n }\r\n\r\n // Numbers with massively different exponents would result in a very high number of zeros\r\n // needing to be prepended, but this can be avoided while still ensuring correct rounding by\r\n // limiting the number of zeros to `Math.ceil(pr / LOG_BASE) + 2`.\r\n i = Math.max(Math.ceil(pr / LOG_BASE), len) + 2;\r\n\r\n if (k > i) {\r\n k = i;\r\n d.length = 1;\r\n }\r\n\r\n // Prepend zeros to equalise exponents.\r\n d.reverse();\r\n for (i = k; i--;) d.push(0);\r\n d.reverse();\r\n\r\n // Base 1e7 exponents equal.\r\n } else {\r\n\r\n // Check digits to determine which is the bigger number.\r\n\r\n i = xd.length;\r\n len = yd.length;\r\n xLTy = i < len;\r\n if (xLTy) len = i;\r\n\r\n for (i = 0; i < len; i++) {\r\n if (xd[i] != yd[i]) {\r\n xLTy = xd[i] < yd[i];\r\n break;\r\n }\r\n }\r\n\r\n k = 0;\r\n }\r\n\r\n if (xLTy) {\r\n d = xd;\r\n xd = yd;\r\n yd = d;\r\n y.s = -y.s;\r\n }\r\n\r\n len = xd.length;\r\n\r\n // Append zeros to xd if shorter.\r\n // Don't add zeros to yd if shorter as subtraction only needs to start at yd length.\r\n for (i = yd.length - len; i > 0; --i) xd[len++] = 0;\r\n\r\n // Subtract yd from xd.\r\n for (i = yd.length; i > k;) {\r\n if (xd[--i] < yd[i]) {\r\n for (j = i; j && xd[--j] === 0;) xd[j] = BASE - 1;\r\n --xd[j];\r\n xd[i] += BASE;\r\n }\r\n\r\n xd[i] -= yd[i];\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (; xd[--len] === 0;) xd.pop();\r\n\r\n // Remove leading zeros and adjust exponent accordingly.\r\n for (; xd[0] === 0; xd.shift()) --e;\r\n\r\n // Zero?\r\n if (!xd[0]) return new Ctor(0);\r\n\r\n y.d = xd;\r\n y.e = e;\r\n\r\n //return external && xd.length >= pr / LOG_BASE ? round(y, pr) : y;\r\n return external ? round(y, pr) : y;\r\n }\r\n\r\n\r\n function toString(x, isExp, sd) {\r\n var k,\r\n e = getBase10Exponent(x),\r\n str = digitsToString(x.d),\r\n len = str.length;\r\n\r\n if (isExp) {\r\n if (sd && (k = sd - len) > 0) {\r\n str = str.charAt(0) + '.' + str.slice(1) + getZeroString(k);\r\n } else if (len > 1) {\r\n str = str.charAt(0) + '.' + str.slice(1);\r\n }\r\n\r\n str = str + (e < 0 ? 'e' : 'e+') + e;\r\n } else if (e < 0) {\r\n str = '0.' + getZeroString(-e - 1) + str;\r\n if (sd && (k = sd - len) > 0) str += getZeroString(k);\r\n } else if (e >= len) {\r\n str += getZeroString(e + 1 - len);\r\n if (sd && (k = sd - e - 1) > 0) str = str + '.' + getZeroString(k);\r\n } else {\r\n if ((k = e + 1) < len) str = str.slice(0, k) + '.' + str.slice(k);\r\n if (sd && (k = sd - len) > 0) {\r\n if (e + 1 === len) str += '.';\r\n str += getZeroString(k);\r\n }\r\n }\r\n\r\n return x.s < 0 ? '-' + str : str;\r\n }\r\n\r\n\r\n // Does not strip trailing zeros.\r\n function truncate(arr, len) {\r\n if (arr.length > len) {\r\n arr.length = len;\r\n return true;\r\n }\r\n }\r\n\r\n\r\n // Decimal methods\r\n\r\n\r\n /*\r\n * clone\r\n * config/set\r\n */\r\n\r\n\r\n /*\r\n * Create and return a Decimal constructor with the same configuration properties as this Decimal\r\n * constructor.\r\n *\r\n */\r\n function clone(obj) {\r\n var i, p, ps;\r\n\r\n /*\r\n * The Decimal constructor and exported function.\r\n * Return a new Decimal instance.\r\n *\r\n * value {number|string|Decimal} A numeric value.\r\n *\r\n */\r\n function Decimal(value) {\r\n var x = this;\r\n\r\n // Decimal called without new.\r\n if (!(x instanceof Decimal)) return new Decimal(value);\r\n\r\n // Retain a reference to this Decimal constructor, and shadow Decimal.prototype.constructor\r\n // which points to Object.\r\n x.constructor = Decimal;\r\n\r\n // Duplicate.\r\n if (value instanceof Decimal) {\r\n x.s = value.s;\r\n x.e = value.e;\r\n x.d = (value = value.d) ? value.slice() : value;\r\n return;\r\n }\r\n\r\n if (typeof value === 'number') {\r\n\r\n // Reject Infinity/NaN.\r\n if (value * 0 !== 0) {\r\n throw Error(invalidArgument + value);\r\n }\r\n\r\n if (value > 0) {\r\n x.s = 1;\r\n } else if (value < 0) {\r\n value = -value;\r\n x.s = -1;\r\n } else {\r\n x.s = 0;\r\n x.e = 0;\r\n x.d = [0];\r\n return;\r\n }\r\n\r\n // Fast path for small integers.\r\n if (value === ~~value && value < 1e7) {\r\n x.e = 0;\r\n x.d = [value];\r\n return;\r\n }\r\n\r\n return parseDecimal(x, value.toString());\r\n } else if (typeof value !== 'string') {\r\n throw Error(invalidArgument + value);\r\n }\r\n\r\n // Minus sign?\r\n if (value.charCodeAt(0) === 45) {\r\n value = value.slice(1);\r\n x.s = -1;\r\n } else {\r\n x.s = 1;\r\n }\r\n\r\n if (isDecimal.test(value)) parseDecimal(x, value);\r\n else throw Error(invalidArgument + value);\r\n }\r\n\r\n Decimal.prototype = P;\r\n\r\n Decimal.ROUND_UP = 0;\r\n Decimal.ROUND_DOWN = 1;\r\n Decimal.ROUND_CEIL = 2;\r\n Decimal.ROUND_FLOOR = 3;\r\n Decimal.ROUND_HALF_UP = 4;\r\n Decimal.ROUND_HALF_DOWN = 5;\r\n Decimal.ROUND_HALF_EVEN = 6;\r\n Decimal.ROUND_HALF_CEIL = 7;\r\n Decimal.ROUND_HALF_FLOOR = 8;\r\n\r\n Decimal.clone = clone;\r\n Decimal.config = Decimal.set = config;\r\n\r\n if (obj === void 0) obj = {};\r\n if (obj) {\r\n ps = ['precision', 'rounding', 'toExpNeg', 'toExpPos', 'LN10'];\r\n for (i = 0; i < ps.length;) if (!obj.hasOwnProperty(p = ps[i++])) obj[p] = this[p];\r\n }\r\n\r\n Decimal.config(obj);\r\n\r\n return Decimal;\r\n }\r\n\r\n\r\n /*\r\n * Configure global settings for a Decimal constructor.\r\n *\r\n * `obj` is an object with one or more of the following properties,\r\n *\r\n * precision {number}\r\n * rounding {number}\r\n * toExpNeg {number}\r\n * toExpPos {number}\r\n *\r\n * E.g. Decimal.config({ precision: 20, rounding: 4 })\r\n *\r\n */\r\n function config(obj) {\r\n if (!obj || typeof obj !== 'object') {\r\n throw Error(decimalError + 'Object expected');\r\n }\r\n var i, p, v,\r\n ps = [\r\n 'precision', 1, MAX_DIGITS,\r\n 'rounding', 0, 8,\r\n 'toExpNeg', -1 / 0, 0,\r\n 'toExpPos', 0, 1 / 0\r\n ];\r\n\r\n for (i = 0; i < ps.length; i += 3) {\r\n if ((v = obj[p = ps[i]]) !== void 0) {\r\n if (mathfloor(v) === v && v >= ps[i + 1] && v <= ps[i + 2]) this[p] = v;\r\n else throw Error(invalidArgument + p + ': ' + v);\r\n }\r\n }\r\n\r\n if ((v = obj[p = 'LN10']) !== void 0) {\r\n if (v == Math.LN10) this[p] = new this(v);\r\n else throw Error(invalidArgument + p + ': ' + v);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n\r\n // Create and configure initial Decimal constructor.\r\n Decimal = clone(Decimal);\r\n\r\n Decimal['default'] = Decimal.Decimal = Decimal;\r\n\r\n // Internal constant.\r\n ONE = new Decimal(1);\r\n\r\n\r\n // Export.\r\n\r\n\r\n // AMD.\r\n if (typeof define == 'function' && define.amd) {\r\n define(function () {\r\n return Decimal;\r\n });\r\n\r\n // Node and other environments that support module.exports.\r\n } else if (typeof module != 'undefined' && module.exports) {\r\n module.exports = Decimal;\r\n\r\n // Browser.\r\n } else {\r\n if (!globalScope) {\r\n globalScope = typeof self != 'undefined' && self && self.self == self\r\n ? self : Function('return this')();\r\n }\r\n\r\n globalScope.Decimal = Decimal;\r\n }\r\n})(this);\r\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n","/**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\nfunction arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n}\n\nmodule.exports = arrayEvery;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nmodule.exports = arrayFilter;\n","var baseIndexOf = require('./_baseIndexOf');\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nmodule.exports = arrayIncludes;\n","/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arrayIncludesWith;\n","var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nmodule.exports = arrayPush;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arraySome;\n","/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n return string.split('');\n}\n\nmodule.exports = asciiToArray;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n","var baseForOwn = require('./_baseForOwn'),\n createBaseEach = require('./_createBaseEach');\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nmodule.exports = baseEach;\n","var baseEach = require('./_baseEach');\n\n/**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\nfunction baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n}\n\nmodule.exports = baseEvery;\n","var isSymbol = require('./isSymbol');\n\n/**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\nfunction baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n}\n\nmodule.exports = baseExtremum;\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = baseFindIndex;\n","var arrayPush = require('./_arrayPush'),\n isFlattenable = require('./_isFlattenable');\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nmodule.exports = baseFlatten;\n","var createBaseFor = require('./_createBaseFor');\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n","var baseFor = require('./_baseFor'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;\n","var arrayPush = require('./_arrayPush'),\n isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n","/**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\nfunction baseGt(value, other) {\n return value > other;\n}\n\nmodule.exports = baseGt;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n","var baseFindIndex = require('./_baseFindIndex'),\n baseIsNaN = require('./_baseIsNaN'),\n strictIndexOf = require('./_strictIndexOf');\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nmodule.exports = baseIndexOf;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n","var Stack = require('./_Stack'),\n equalArrays = require('./_equalArrays'),\n equalByTag = require('./_equalByTag'),\n equalObjects = require('./_equalObjects'),\n getTag = require('./_getTag'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n","var Stack = require('./_Stack'),\n baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nmodule.exports = baseIsMatch;\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\nmodule.exports = baseIsNaN;\n","var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","var baseMatches = require('./_baseMatches'),\n baseMatchesProperty = require('./_baseMatchesProperty'),\n identity = require('./identity'),\n isArray = require('./isArray'),\n property = require('./property');\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nmodule.exports = baseIteratee;\n","var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n","/**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\nfunction baseLt(value, other) {\n return value < other;\n}\n\nmodule.exports = baseLt;\n","var baseEach = require('./_baseEach'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n}\n\nmodule.exports = baseMap;\n","var baseIsMatch = require('./_baseIsMatch'),\n getMatchData = require('./_getMatchData'),\n matchesStrictComparable = require('./_matchesStrictComparable');\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nmodule.exports = baseMatches;\n","var baseIsEqual = require('./_baseIsEqual'),\n get = require('./get'),\n hasIn = require('./hasIn'),\n isKey = require('./_isKey'),\n isStrictComparable = require('./_isStrictComparable'),\n matchesStrictComparable = require('./_matchesStrictComparable'),\n toKey = require('./_toKey');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nmodule.exports = baseMatchesProperty;\n","var arrayMap = require('./_arrayMap'),\n baseGet = require('./_baseGet'),\n baseIteratee = require('./_baseIteratee'),\n baseMap = require('./_baseMap'),\n baseSortBy = require('./_baseSortBy'),\n baseUnary = require('./_baseUnary'),\n compareMultiple = require('./_compareMultiple'),\n identity = require('./identity'),\n isArray = require('./isArray');\n\n/**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\nfunction baseOrderBy(collection, iteratees, orders) {\n if (iteratees.length) {\n iteratees = arrayMap(iteratees, function(iteratee) {\n if (isArray(iteratee)) {\n return function(value) {\n return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n }\n }\n return iteratee;\n });\n } else {\n iteratees = [identity];\n }\n\n var index = -1;\n iteratees = arrayMap(iteratees, baseUnary(baseIteratee));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n}\n\nmodule.exports = baseOrderBy;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = baseProperty;\n","var baseGet = require('./_baseGet');\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nmodule.exports = basePropertyDeep;\n","/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeCeil = Math.ceil,\n nativeMax = Math.max;\n\n/**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\nfunction baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n}\n\nmodule.exports = baseRange;\n","var identity = require('./identity'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n","var constant = require('./constant'),\n defineProperty = require('./_defineProperty'),\n identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nmodule.exports = baseSetToString;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\nmodule.exports = baseSlice;\n","var baseEach = require('./_baseEach');\n\n/**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n}\n\nmodule.exports = baseSome;\n","/**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\nfunction baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n}\n\nmodule.exports = baseSortBy;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nmodule.exports = baseTimes;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n","var SetCache = require('./_SetCache'),\n arrayIncludes = require('./_arrayIncludes'),\n arrayIncludesWith = require('./_arrayIncludesWith'),\n cacheHas = require('./_cacheHas'),\n createSet = require('./_createSet'),\n setToArray = require('./_setToArray');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nmodule.exports = baseUniq;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n","var baseSlice = require('./_baseSlice');\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\nmodule.exports = castSlice;\n","var isSymbol = require('./isSymbol');\n\n/**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\nfunction compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n}\n\nmodule.exports = compareAscending;\n","var compareAscending = require('./_compareAscending');\n\n/**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\nfunction compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n}\n\nmodule.exports = compareMultiple;\n","var isArrayLike = require('./isArrayLike');\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\nmodule.exports = createBaseEach;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nmodule.exports = createBaseFor;\n","var castSlice = require('./_castSlice'),\n hasUnicode = require('./_hasUnicode'),\n stringToArray = require('./_stringToArray'),\n toString = require('./toString');\n\n/**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\nfunction createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n}\n\nmodule.exports = createCaseFirst;\n","var baseIteratee = require('./_baseIteratee'),\n isArrayLike = require('./isArrayLike'),\n keys = require('./keys');\n\n/**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\nfunction createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = baseIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n}\n\nmodule.exports = createFind;\n","var baseRange = require('./_baseRange'),\n isIterateeCall = require('./_isIterateeCall'),\n toFinite = require('./toFinite');\n\n/**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\nfunction createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n}\n\nmodule.exports = createRange;\n","var Set = require('./_Set'),\n noop = require('./noop'),\n setToArray = require('./_setToArray');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\nmodule.exports = createSet;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var SetCache = require('./_SetCache'),\n arraySome = require('./_arraySome'),\n cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalArrays;\n","var Symbol = require('./_Symbol'),\n Uint8Array = require('./_Uint8Array'),\n eq = require('./eq'),\n equalArrays = require('./_equalArrays'),\n mapToArray = require('./_mapToArray'),\n setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nmodule.exports = equalByTag;\n","var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalObjects;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbols = require('./_getSymbols'),\n keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n","var isStrictComparable = require('./_isStrictComparable'),\n keys = require('./keys');\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nmodule.exports = getMatchData;\n","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n","var arrayFilter = require('./_arrayFilter'),\n stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nmodule.exports = getSymbols;\n","var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nmodule.exports = getTag;\n","var castPath = require('./_castPath'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isIndex = require('./_isIndex'),\n isLength = require('./isLength'),\n toKey = require('./_toKey');\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n return reHasUnicode.test(string);\n}\n\nmodule.exports = hasUnicode;\n","var Symbol = require('./_Symbol'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray');\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nmodule.exports = isFlattenable;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","var eq = require('./eq'),\n isArrayLike = require('./isArrayLike'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n","var isObject = require('./isObject');\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nmodule.exports = isStrictComparable;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nmodule.exports = mapToArray;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nmodule.exports = matchesStrictComparable;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nmodule.exports = overRest;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nmodule.exports = setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nmodule.exports = setToArray;\n","var baseSetToString = require('./_baseSetToString'),\n shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nmodule.exports = shortOut;\n","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nmodule.exports = stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nmodule.exports = stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","var ListCache = require('./_ListCache'),\n Map = require('./_Map'),\n MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nmodule.exports = stackSet;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = strictIndexOf;\n","var asciiToArray = require('./_asciiToArray'),\n hasUnicode = require('./_hasUnicode'),\n unicodeToArray = require('./_unicodeToArray');\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n}\n\nmodule.exports = stringToArray;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction unicodeToArray(string) {\n return string.match(reUnicode) || [];\n}\n\nmodule.exports = unicodeToArray;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nmodule.exports = constant;\n","var arrayEvery = require('./_arrayEvery'),\n baseEvery = require('./_baseEvery'),\n baseIteratee = require('./_baseIteratee'),\n isArray = require('./isArray'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\nfunction every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, baseIteratee(predicate, 3));\n}\n\nmodule.exports = every;\n","var createFind = require('./_createFind'),\n findIndex = require('./findIndex');\n\n/**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\nvar find = createFind(findIndex);\n\nmodule.exports = find;\n","var baseFindIndex = require('./_baseFindIndex'),\n baseIteratee = require('./_baseIteratee'),\n toInteger = require('./toInteger');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\nfunction findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, baseIteratee(predicate, 3), index);\n}\n\nmodule.exports = findIndex;\n","var baseFlatten = require('./_baseFlatten'),\n map = require('./map');\n\n/**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\nfunction flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n}\n\nmodule.exports = flatMap;\n","var baseHasIn = require('./_baseHasIn'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]';\n\n/**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\nfunction isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n}\n\nmodule.exports = isBoolean;\n","var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","var baseIsEqual = require('./_baseIsEqual');\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\nmodule.exports = isEqual;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","var isNumber = require('./isNumber');\n\n/**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\nfunction isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n}\n\nmodule.exports = isNaN;\n","/**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\nfunction isNil(value) {\n return value == null;\n}\n\nmodule.exports = isNil;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar numberTag = '[object Number]';\n\n/**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\nfunction isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n}\n\nmodule.exports = isNumber;\n","var baseGetTag = require('./_baseGetTag'),\n getPrototype = require('./_getPrototype'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n","var baseGetTag = require('./_baseGetTag'),\n isArray = require('./isArray'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nmodule.exports = isString;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n}\n\nmodule.exports = last;\n","var arrayMap = require('./_arrayMap'),\n baseIteratee = require('./_baseIteratee'),\n baseMap = require('./_baseMap'),\n isArray = require('./isArray');\n\n/**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\nfunction map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, baseIteratee(iteratee, 3));\n}\n\nmodule.exports = map;\n","var baseAssignValue = require('./_baseAssignValue'),\n baseForOwn = require('./_baseForOwn'),\n baseIteratee = require('./_baseIteratee');\n\n/**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\nfunction mapValues(object, iteratee) {\n var result = {};\n iteratee = baseIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n}\n\nmodule.exports = mapValues;\n","var baseExtremum = require('./_baseExtremum'),\n baseGt = require('./_baseGt'),\n identity = require('./identity');\n\n/**\n * Computes the maximum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * _.max([4, 2, 8, 6]);\n * // => 8\n *\n * _.max([]);\n * // => undefined\n */\nfunction max(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseGt)\n : undefined;\n}\n\nmodule.exports = max;\n","var baseExtremum = require('./_baseExtremum'),\n baseGt = require('./_baseGt'),\n baseIteratee = require('./_baseIteratee');\n\n/**\n * This method is like `_.max` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.maxBy(objects, function(o) { return o.n; });\n * // => { 'n': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.maxBy(objects, 'n');\n * // => { 'n': 2 }\n */\nfunction maxBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, baseIteratee(iteratee, 2), baseGt)\n : undefined;\n}\n\nmodule.exports = maxBy;\n","var baseExtremum = require('./_baseExtremum'),\n baseLt = require('./_baseLt'),\n identity = require('./identity');\n\n/**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\nfunction min(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseLt)\n : undefined;\n}\n\nmodule.exports = min;\n","var baseExtremum = require('./_baseExtremum'),\n baseIteratee = require('./_baseIteratee'),\n baseLt = require('./_baseLt');\n\n/**\n * This method is like `_.min` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.minBy(objects, function(o) { return o.n; });\n * // => { 'n': 1 }\n *\n * // The `_.property` iteratee shorthand.\n * _.minBy(objects, 'n');\n * // => { 'n': 1 }\n */\nfunction minBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, baseIteratee(iteratee, 2), baseLt)\n : undefined;\n}\n\nmodule.exports = minBy;\n","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nmodule.exports = noop;\n","var baseProperty = require('./_baseProperty'),\n basePropertyDeep = require('./_basePropertyDeep'),\n isKey = require('./_isKey'),\n toKey = require('./_toKey');\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = property;\n","var createRange = require('./_createRange');\n\n/**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\nvar range = createRange();\n\nmodule.exports = range;\n","var arraySome = require('./_arraySome'),\n baseIteratee = require('./_baseIteratee'),\n baseSome = require('./_baseSome'),\n isArray = require('./isArray'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\nfunction some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, baseIteratee(predicate, 3));\n}\n\nmodule.exports = some;\n","var baseFlatten = require('./_baseFlatten'),\n baseOrderBy = require('./_baseOrderBy'),\n baseRest = require('./_baseRest'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 30 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\nvar sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n});\n\nmodule.exports = sortBy;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = stubArray;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n","var debounce = require('./debounce'),\n isObject = require('./isObject');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nmodule.exports = throttle;\n","var baseIteratee = require('./_baseIteratee'),\n baseUniq = require('./_baseUniq');\n\n/**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\nfunction uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, baseIteratee(iteratee, 2)) : [];\n}\n\nmodule.exports = uniqBy;\n","var createCaseFirst = require('./_createCaseFirst');\n\n/**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\nvar upperFirst = createCaseFirst('toUpperCase');\n\nmodule.exports = upperFirst;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nfunction componentWillMount() {\n // Call this.constructor.gDSFP to support sub-classes.\n var state = this.constructor.getDerivedStateFromProps(this.props, this.state);\n if (state !== null && state !== undefined) {\n this.setState(state);\n }\n}\n\nfunction componentWillReceiveProps(nextProps) {\n // Call this.constructor.gDSFP to support sub-classes.\n // Use the setState() updater to ensure state isn't stale in certain edge cases.\n function updater(prevState) {\n var state = this.constructor.getDerivedStateFromProps(nextProps, prevState);\n return state !== null && state !== undefined ? state : null;\n }\n // Binding \"this\" is important for shallow renderer support.\n this.setState(updater.bind(this));\n}\n\nfunction componentWillUpdate(nextProps, nextState) {\n try {\n var prevProps = this.props;\n var prevState = this.state;\n this.props = nextProps;\n this.state = nextState;\n this.__reactInternalSnapshotFlag = true;\n this.__reactInternalSnapshot = this.getSnapshotBeforeUpdate(\n prevProps,\n prevState\n );\n } finally {\n this.props = prevProps;\n this.state = prevState;\n }\n}\n\n// React may warn about cWM/cWRP/cWU methods being deprecated.\n// Add a flag to suppress these warnings for this special case.\ncomponentWillMount.__suppressDeprecationWarning = true;\ncomponentWillReceiveProps.__suppressDeprecationWarning = true;\ncomponentWillUpdate.__suppressDeprecationWarning = true;\n\nfunction polyfill(Component) {\n var prototype = Component.prototype;\n\n if (!prototype || !prototype.isReactComponent) {\n throw new Error('Can only polyfill class components');\n }\n\n if (\n typeof Component.getDerivedStateFromProps !== 'function' &&\n typeof prototype.getSnapshotBeforeUpdate !== 'function'\n ) {\n return Component;\n }\n\n // If new component APIs are defined, \"unsafe\" lifecycles won't be called.\n // Error if any of these lifecycles are present,\n // Because they would work differently between older and newer (16.3+) versions of React.\n var foundWillMountName = null;\n var foundWillReceivePropsName = null;\n var foundWillUpdateName = null;\n if (typeof prototype.componentWillMount === 'function') {\n foundWillMountName = 'componentWillMount';\n } else if (typeof prototype.UNSAFE_componentWillMount === 'function') {\n foundWillMountName = 'UNSAFE_componentWillMount';\n }\n if (typeof prototype.componentWillReceiveProps === 'function') {\n foundWillReceivePropsName = 'componentWillReceiveProps';\n } else if (typeof prototype.UNSAFE_componentWillReceiveProps === 'function') {\n foundWillReceivePropsName = 'UNSAFE_componentWillReceiveProps';\n }\n if (typeof prototype.componentWillUpdate === 'function') {\n foundWillUpdateName = 'componentWillUpdate';\n } else if (typeof prototype.UNSAFE_componentWillUpdate === 'function') {\n foundWillUpdateName = 'UNSAFE_componentWillUpdate';\n }\n if (\n foundWillMountName !== null ||\n foundWillReceivePropsName !== null ||\n foundWillUpdateName !== null\n ) {\n var componentName = Component.displayName || Component.name;\n var newApiName =\n typeof Component.getDerivedStateFromProps === 'function'\n ? 'getDerivedStateFromProps()'\n : 'getSnapshotBeforeUpdate()';\n\n throw Error(\n 'Unsafe legacy lifecycles will not be called for components using new component APIs.\\n\\n' +\n componentName +\n ' uses ' +\n newApiName +\n ' but also contains the following legacy lifecycles:' +\n (foundWillMountName !== null ? '\\n ' + foundWillMountName : '') +\n (foundWillReceivePropsName !== null\n ? '\\n ' + foundWillReceivePropsName\n : '') +\n (foundWillUpdateName !== null ? '\\n ' + foundWillUpdateName : '') +\n '\\n\\nThe above lifecycles should be removed. Learn more about this warning here:\\n' +\n 'https://fb.me/react-async-component-lifecycle-hooks'\n );\n }\n\n // React <= 16.2 does not support static getDerivedStateFromProps.\n // As a workaround, use cWM and cWRP to invoke the new static lifecycle.\n // Newer versions of React will ignore these lifecycles if gDSFP exists.\n if (typeof Component.getDerivedStateFromProps === 'function') {\n prototype.componentWillMount = componentWillMount;\n prototype.componentWillReceiveProps = componentWillReceiveProps;\n }\n\n // React <= 16.2 does not support getSnapshotBeforeUpdate.\n // As a workaround, use cWU to invoke the new lifecycle.\n // Newer versions of React will ignore that lifecycle if gSBU exists.\n if (typeof prototype.getSnapshotBeforeUpdate === 'function') {\n if (typeof prototype.componentDidUpdate !== 'function') {\n throw new Error(\n 'Cannot polyfill getSnapshotBeforeUpdate() for components that do not define componentDidUpdate() on the prototype'\n );\n }\n\n prototype.componentWillUpdate = componentWillUpdate;\n\n var componentDidUpdate = prototype.componentDidUpdate;\n\n prototype.componentDidUpdate = function componentDidUpdatePolyfill(\n prevProps,\n prevState,\n maybeSnapshot\n ) {\n // 16.3+ will not execute our will-update method;\n // It will pass a snapshot value to did-update though.\n // Older versions will require our polyfilled will-update value.\n // We need to handle both cases, but can't just check for the presence of \"maybeSnapshot\",\n // Because for <= 15.x versions this might be a \"prevContext\" object.\n // We also can't just check \"__reactInternalSnapshot\",\n // Because get-snapshot might return a falsy value.\n // So check for the explicit __reactInternalSnapshotFlag flag to determine behavior.\n var snapshot = this.__reactInternalSnapshotFlag\n ? this.__reactInternalSnapshot\n : maybeSnapshot;\n\n componentDidUpdate.call(this, prevProps, prevState, snapshot);\n };\n }\n\n return Component;\n}\n\nexport { polyfill };\n","import {\n AnyEqualityComparator,\n Cache,\n CircularState,\n Dictionary,\n State,\n TypeEqualityComparator,\n} from './internalTypes';\n\nconst { getOwnPropertyNames, getOwnPropertySymbols } = Object;\nconst { hasOwnProperty } = Object.prototype;\n\n/**\n * Combine two comparators into a single comparators.\n */\nexport function combineComparators(\n comparatorA: AnyEqualityComparator,\n comparatorB: AnyEqualityComparator,\n) {\n return function isEqual(a: A, b: B, state: State) {\n return comparatorA(a, b, state) && comparatorB(a, b, state);\n };\n}\n\n/**\n * Wrap the provided `areItemsEqual` method to manage the circular state, allowing\n * for circular references to be safely included in the comparison without creating\n * stack overflows.\n */\nexport function createIsCircular<\n AreItemsEqual extends TypeEqualityComparator,\n>(areItemsEqual: AreItemsEqual): AreItemsEqual {\n return function isCircular(\n a: any,\n b: any,\n state: CircularState>,\n ) {\n if (!a || !b || typeof a !== 'object' || typeof b !== 'object') {\n return areItemsEqual(a, b, state);\n }\n\n const { cache } = state;\n\n const cachedA = cache.get(a);\n const cachedB = cache.get(b);\n\n if (cachedA && cachedB) {\n return cachedA === b && cachedB === a;\n }\n\n cache.set(a, b);\n cache.set(b, a);\n\n const result = areItemsEqual(a, b, state);\n\n cache.delete(a);\n cache.delete(b);\n\n return result;\n } as AreItemsEqual;\n}\n\n/**\n * Get the properties to strictly examine, which include both own properties that are\n * not enumerable and symbol properties.\n */\nexport function getStrictProperties(\n object: Dictionary,\n): Array {\n return (getOwnPropertyNames(object) as Array).concat(\n getOwnPropertySymbols(object),\n );\n}\n\n/**\n * Whether the object contains the property passed as an own property.\n */\nexport const hasOwn =\n Object.hasOwn ||\n ((object: Dictionary, property: number | string | symbol) =>\n hasOwnProperty.call(object, property));\n\n/**\n * Whether the values passed are strictly equal or both NaN.\n */\nexport function sameValueZeroEqual(a: any, b: any): boolean {\n return a || b ? a === b : a === b || (a !== a && b !== b);\n}\n","import { getStrictProperties, hasOwn, sameValueZeroEqual } from './utils';\nimport type {\n Dictionary,\n PrimitiveWrapper,\n State,\n TypedArray,\n} from './internalTypes';\n\nconst OWNER = '_owner';\n\nconst { getOwnPropertyDescriptor, keys } = Object;\n\n/**\n * Whether the arrays are equal in value.\n */\nexport function areArraysEqual(a: any[], b: any[], state: State) {\n let index = a.length;\n\n if (b.length !== index) {\n return false;\n }\n\n while (index-- > 0) {\n if (!state.equals(a[index], b[index], index, index, a, b, state)) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Whether the dates passed are equal in value.\n */\nexport function areDatesEqual(a: Date, b: Date): boolean {\n return sameValueZeroEqual(a.getTime(), b.getTime());\n}\n\n/**\n * Whether the `Map`s are equal in value.\n */\nexport function areMapsEqual(\n a: Map,\n b: Map,\n state: State,\n): boolean {\n if (a.size !== b.size) {\n return false;\n }\n\n const matchedIndices: Record = {};\n const aIterable = a.entries();\n\n let index = 0;\n let aResult: IteratorResult<[any, any]>;\n let bResult: IteratorResult<[any, any]>;\n\n while ((aResult = aIterable.next())) {\n if (aResult.done) {\n break;\n }\n\n const bIterable = b.entries();\n\n let hasMatch = false;\n let matchIndex = 0;\n\n while ((bResult = bIterable.next())) {\n if (bResult.done) {\n break;\n }\n\n const [aKey, aValue] = aResult.value;\n const [bKey, bValue] = bResult.value;\n\n if (\n !hasMatch &&\n !matchedIndices[matchIndex] &&\n (hasMatch =\n state.equals(aKey, bKey, index, matchIndex, a, b, state) &&\n state.equals(aValue, bValue, aKey, bKey, a, b, state))\n ) {\n matchedIndices[matchIndex] = true;\n }\n\n matchIndex++;\n }\n\n if (!hasMatch) {\n return false;\n }\n\n index++;\n }\n\n return true;\n}\n\n/**\n * Whether the objects are equal in value.\n */\nexport function areObjectsEqual(\n a: Dictionary,\n b: Dictionary,\n state: State,\n): boolean {\n const properties = keys(a);\n\n let index = properties.length;\n\n if (keys(b).length !== index) {\n return false;\n }\n\n let property: string;\n\n // Decrementing `while` showed faster results than either incrementing or\n // decrementing `for` loop and than an incrementing `while` loop. Declarative\n // methods like `some` / `every` were not used to avoid incurring the garbage\n // cost of anonymous callbacks.\n while (index-- > 0) {\n property = properties[index]!;\n\n if (\n property === OWNER &&\n (a.$$typeof || b.$$typeof) &&\n a.$$typeof !== b.$$typeof\n ) {\n return false;\n }\n\n if (\n !hasOwn(b, property) ||\n !state.equals(a[property], b[property], property, property, a, b, state)\n ) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Whether the objects are equal in value with strict property checking.\n */\nexport function areObjectsEqualStrict(\n a: Dictionary,\n b: Dictionary,\n state: State,\n): boolean {\n const properties = getStrictProperties(a);\n\n let index = properties.length;\n\n if (getStrictProperties(b).length !== index) {\n return false;\n }\n\n let property: string | symbol;\n let descriptorA: ReturnType;\n let descriptorB: ReturnType;\n\n // Decrementing `while` showed faster results than either incrementing or\n // decrementing `for` loop and than an incrementing `while` loop. Declarative\n // methods like `some` / `every` were not used to avoid incurring the garbage\n // cost of anonymous callbacks.\n while (index-- > 0) {\n property = properties[index]!;\n\n if (\n property === OWNER &&\n (a.$$typeof || b.$$typeof) &&\n a.$$typeof !== b.$$typeof\n ) {\n return false;\n }\n\n if (!hasOwn(b, property)) {\n return false;\n }\n\n if (\n !state.equals(a[property], b[property], property, property, a, b, state)\n ) {\n return false;\n }\n\n descriptorA = getOwnPropertyDescriptor(a, property);\n descriptorB = getOwnPropertyDescriptor(b, property);\n\n if (\n (descriptorA || descriptorB) &&\n (!descriptorA ||\n !descriptorB ||\n descriptorA.configurable !== descriptorB.configurable ||\n descriptorA.enumerable !== descriptorB.enumerable ||\n descriptorA.writable !== descriptorB.writable)\n ) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Whether the primitive wrappers passed are equal in value.\n */\nexport function arePrimitiveWrappersEqual(\n a: PrimitiveWrapper,\n b: PrimitiveWrapper,\n): boolean {\n return sameValueZeroEqual(a.valueOf(), b.valueOf());\n}\n\n/**\n * Whether the regexps passed are equal in value.\n */\nexport function areRegExpsEqual(a: RegExp, b: RegExp): boolean {\n return a.source === b.source && a.flags === b.flags;\n}\n\n/**\n * Whether the `Set`s are equal in value.\n */\nexport function areSetsEqual(\n a: Set,\n b: Set,\n state: State,\n): boolean {\n if (a.size !== b.size) {\n return false;\n }\n\n const matchedIndices: Record = {};\n const aIterable = a.values();\n\n let aResult: IteratorResult;\n let bResult: IteratorResult;\n\n while ((aResult = aIterable.next())) {\n if (aResult.done) {\n break;\n }\n\n const bIterable = b.values();\n\n let hasMatch = false;\n let matchIndex = 0;\n\n while ((bResult = bIterable.next())) {\n if (bResult.done) {\n break;\n }\n\n if (\n !hasMatch &&\n !matchedIndices[matchIndex] &&\n (hasMatch = state.equals(\n aResult.value,\n bResult.value,\n aResult.value,\n bResult.value,\n a,\n b,\n state,\n ))\n ) {\n matchedIndices[matchIndex] = true;\n }\n\n matchIndex++;\n }\n\n if (!hasMatch) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Whether the TypedArray instances are equal in value.\n */\nexport function areTypedArraysEqual(a: TypedArray, b: TypedArray) {\n let index = a.length;\n\n if (b.length !== index) {\n return false;\n }\n\n while (index-- > 0) {\n if (a[index] !== b[index]) {\n return false;\n }\n }\n\n return true;\n}\n","import {\n areArraysEqual as areArraysEqualDefault,\n areDatesEqual as areDatesEqualDefault,\n areMapsEqual as areMapsEqualDefault,\n areObjectsEqual as areObjectsEqualDefault,\n areObjectsEqualStrict as areObjectsEqualStrictDefault,\n arePrimitiveWrappersEqual as arePrimitiveWrappersEqualDefault,\n areRegExpsEqual as areRegExpsEqualDefault,\n areSetsEqual as areSetsEqualDefault,\n areTypedArraysEqual,\n} from './equals';\nimport { combineComparators, createIsCircular } from './utils';\nimport type {\n ComparatorConfig,\n CreateState,\n CustomEqualCreatorOptions,\n EqualityComparator,\n InternalEqualityComparator,\n State,\n} from './internalTypes';\n\nconst ARGUMENTS_TAG = '[object Arguments]';\nconst BOOLEAN_TAG = '[object Boolean]';\nconst DATE_TAG = '[object Date]';\nconst MAP_TAG = '[object Map]';\nconst NUMBER_TAG = '[object Number]';\nconst OBJECT_TAG = '[object Object]';\nconst REG_EXP_TAG = '[object RegExp]';\nconst SET_TAG = '[object Set]';\nconst STRING_TAG = '[object String]';\n\nconst { isArray } = Array;\nconst isTypedArray =\n typeof ArrayBuffer === 'function' && ArrayBuffer.isView\n ? ArrayBuffer.isView\n : null;\nconst { assign } = Object;\nconst getTag = Object.prototype.toString.call.bind(\n Object.prototype.toString,\n) as (a: object) => string;\n\ninterface CreateIsEqualOptions {\n circular: boolean;\n comparator: EqualityComparator;\n createState: CreateState | undefined;\n equals: InternalEqualityComparator;\n strict: boolean;\n}\n\n/**\n * Create a comparator method based on the type-specific equality comparators passed.\n */\nexport function createEqualityComparator({\n areArraysEqual,\n areDatesEqual,\n areMapsEqual,\n areObjectsEqual,\n arePrimitiveWrappersEqual,\n areRegExpsEqual,\n areSetsEqual,\n areTypedArraysEqual,\n}: ComparatorConfig): EqualityComparator {\n /**\n * compare the value of the two objects and return true if they are equivalent in values\n */\n return function comparator(a: any, b: any, state: State): boolean {\n // If the items are strictly equal, no need to do a value comparison.\n if (a === b) {\n return true;\n }\n\n // If the items are not non-nullish objects, then the only possibility\n // of them being equal but not strictly is if they are both `NaN`. Since\n // `NaN` is uniquely not equal to itself, we can use self-comparison of\n // both objects, which is faster than `isNaN()`.\n if (\n a == null ||\n b == null ||\n typeof a !== 'object' ||\n typeof b !== 'object'\n ) {\n return a !== a && b !== b;\n }\n\n const constructor = a.constructor;\n\n // Checks are listed in order of commonality of use-case:\n // 1. Common complex object types (plain object, array)\n // 2. Common data values (date, regexp)\n // 3. Less-common complex object types (map, set)\n // 4. Less-common data values (promise, primitive wrappers)\n // Inherently this is both subjective and assumptive, however\n // when reviewing comparable libraries in the wild this order\n // appears to be generally consistent.\n\n // Constructors should match, otherwise there is potential for false positives\n // between class and subclass or custom object and POJO.\n if (constructor !== b.constructor) {\n return false;\n }\n\n // `isPlainObject` only checks against the object's own realm. Cross-realm\n // comparisons are rare, and will be handled in the ultimate fallback, so\n // we can avoid capturing the string tag.\n if (constructor === Object) {\n return areObjectsEqual(a, b, state);\n }\n\n // `isArray()` works on subclasses and is cross-realm, so we can avoid capturing\n // the string tag or doing an `instanceof` check.\n if (isArray(a)) {\n return areArraysEqual(a, b, state);\n }\n\n // `isTypedArray()` works on all possible TypedArray classes, so we can avoid\n // capturing the string tag or comparing against all possible constructors.\n if (isTypedArray != null && isTypedArray(a)) {\n return areTypedArraysEqual(a, b, state);\n }\n\n // Try to fast-path equality checks for other complex object types in the\n // same realm to avoid capturing the string tag. Strict equality is used\n // instead of `instanceof` because it is more performant for the common\n // use-case. If someone is subclassing a native class, it will be handled\n // with the string tag comparison.\n\n if (constructor === Date) {\n return areDatesEqual(a, b, state);\n }\n\n if (constructor === RegExp) {\n return areRegExpsEqual(a, b, state);\n }\n\n if (constructor === Map) {\n return areMapsEqual(a, b, state);\n }\n\n if (constructor === Set) {\n return areSetsEqual(a, b, state);\n }\n\n // Since this is a custom object, capture the string tag to determing its type.\n // This is reasonably performant in modern environments like v8 and SpiderMonkey.\n const tag = getTag(a);\n\n if (tag === DATE_TAG) {\n return areDatesEqual(a, b, state);\n }\n\n if (tag === REG_EXP_TAG) {\n return areRegExpsEqual(a, b, state);\n }\n\n if (tag === MAP_TAG) {\n return areMapsEqual(a, b, state);\n }\n\n if (tag === SET_TAG) {\n return areSetsEqual(a, b, state);\n }\n\n if (tag === OBJECT_TAG) {\n // The exception for value comparison is custom `Promise`-like class instances. These should\n // be treated the same as standard `Promise` objects, which means strict equality, and if\n // it reaches this point then that strict equality comparison has already failed.\n return (\n typeof a.then !== 'function' &&\n typeof b.then !== 'function' &&\n areObjectsEqual(a, b, state)\n );\n }\n\n // If an arguments tag, it should be treated as a standard object.\n if (tag === ARGUMENTS_TAG) {\n return areObjectsEqual(a, b, state);\n }\n\n // As the penultimate fallback, check if the values passed are primitive wrappers. This\n // is very rare in modern JS, which is why it is deprioritized compared to all other object\n // types.\n if (tag === BOOLEAN_TAG || tag === NUMBER_TAG || tag === STRING_TAG) {\n return arePrimitiveWrappersEqual(a, b, state);\n }\n\n // If not matching any tags that require a specific type of comparison, then we hard-code false because\n // the only thing remaining is strict equality, which has already been compared. This is for a few reasons:\n // - Certain types that cannot be introspected (e.g., `WeakMap`). For these types, this is the only\n // comparison that can be made.\n // - For types that can be introspected, but rarely have requirements to be compared\n // (`ArrayBuffer`, `DataView`, etc.), the cost is avoided to prioritize the common\n // use-cases (may be included in a future release, if requested enough).\n // - For types that can be introspected but do not have an objective definition of what\n // equality is (`Error`, etc.), the subjective decision is to be conservative and strictly compare.\n // In all cases, these decisions should be reevaluated based on changes to the language and\n // common development practices.\n return false;\n };\n}\n\n/**\n * Create the configuration object used for building comparators.\n */\nexport function createEqualityComparatorConfig({\n circular,\n createCustomConfig,\n strict,\n}: CustomEqualCreatorOptions): ComparatorConfig {\n let config = {\n areArraysEqual: strict\n ? areObjectsEqualStrictDefault\n : areArraysEqualDefault,\n areDatesEqual: areDatesEqualDefault,\n areMapsEqual: strict\n ? combineComparators(areMapsEqualDefault, areObjectsEqualStrictDefault)\n : areMapsEqualDefault,\n areObjectsEqual: strict\n ? areObjectsEqualStrictDefault\n : areObjectsEqualDefault,\n arePrimitiveWrappersEqual: arePrimitiveWrappersEqualDefault,\n areRegExpsEqual: areRegExpsEqualDefault,\n areSetsEqual: strict\n ? combineComparators(areSetsEqualDefault, areObjectsEqualStrictDefault)\n : areSetsEqualDefault,\n areTypedArraysEqual: strict\n ? areObjectsEqualStrictDefault\n : areTypedArraysEqual,\n };\n\n if (createCustomConfig) {\n config = assign({}, config, createCustomConfig(config));\n }\n\n if (circular) {\n const areArraysEqual = createIsCircular(config.areArraysEqual);\n const areMapsEqual = createIsCircular(config.areMapsEqual);\n const areObjectsEqual = createIsCircular(config.areObjectsEqual);\n const areSetsEqual = createIsCircular(config.areSetsEqual);\n\n config = assign({}, config, {\n areArraysEqual,\n areMapsEqual,\n areObjectsEqual,\n areSetsEqual,\n });\n }\n\n return config;\n}\n\n/**\n * Default equality comparator pass-through, used as the standard `isEqual` creator for\n * use inside the built comparator.\n */\nexport function createInternalEqualityComparator(\n compare: EqualityComparator,\n): InternalEqualityComparator {\n return function (\n a: any,\n b: any,\n _indexOrKeyA: any,\n _indexOrKeyB: any,\n _parentA: any,\n _parentB: any,\n state: State,\n ) {\n return compare(a, b, state);\n };\n}\n\n/**\n * Create the `isEqual` function used by the consuming application.\n */\nexport function createIsEqual({\n circular,\n comparator,\n createState,\n equals,\n strict,\n}: CreateIsEqualOptions) {\n if (createState) {\n return function isEqual(a: A, b: B): boolean {\n const { cache = circular ? new WeakMap() : undefined, meta } =\n createState!();\n\n return comparator(a, b, {\n cache,\n equals,\n meta,\n strict,\n } as State);\n };\n }\n\n if (circular) {\n return function isEqual(a: A, b: B): boolean {\n return comparator(a, b, {\n cache: new WeakMap(),\n equals,\n meta: undefined as Meta,\n strict,\n } as State);\n };\n }\n\n const state = {\n cache: undefined,\n equals,\n meta: undefined,\n strict,\n } as State;\n\n return function isEqual(a: A, b: B): boolean {\n return comparator(a, b, state);\n };\n}\n","import {\n createEqualityComparatorConfig,\n createEqualityComparator,\n createInternalEqualityComparator,\n createIsEqual,\n} from './comparator';\nimport type { CustomEqualCreatorOptions } from './internalTypes';\nimport { sameValueZeroEqual } from './utils';\n\nexport { sameValueZeroEqual };\nexport * from './internalTypes';\n\n/**\n * Whether the items passed are deeply-equal in value.\n */\nexport const deepEqual = createCustomEqual();\n\n/**\n * Whether the items passed are deeply-equal in value based on strict comparison.\n */\nexport const strictDeepEqual = createCustomEqual({ strict: true });\n\n/**\n * Whether the items passed are deeply-equal in value, including circular references.\n */\nexport const circularDeepEqual = createCustomEqual({ circular: true });\n\n/**\n * Whether the items passed are deeply-equal in value, including circular references,\n * based on strict comparison.\n */\nexport const strictCircularDeepEqual = createCustomEqual({\n circular: true,\n strict: true,\n});\n\n/**\n * Whether the items passed are shallowly-equal in value.\n */\nexport const shallowEqual = createCustomEqual({\n createInternalComparator: () => sameValueZeroEqual,\n});\n\n/**\n * Whether the items passed are shallowly-equal in value based on strict comparison\n */\nexport const strictShallowEqual = createCustomEqual({\n strict: true,\n createInternalComparator: () => sameValueZeroEqual,\n});\n\n/**\n * Whether the items passed are shallowly-equal in value, including circular references.\n */\nexport const circularShallowEqual = createCustomEqual({\n circular: true,\n createInternalComparator: () => sameValueZeroEqual,\n});\n\n/**\n * Whether the items passed are shallowly-equal in value, including circular references,\n * based on strict comparison.\n */\nexport const strictCircularShallowEqual = createCustomEqual({\n circular: true,\n createInternalComparator: () => sameValueZeroEqual,\n strict: true,\n});\n\n/**\n * Create a custom equality comparison method.\n *\n * This can be done to create very targeted comparisons in extreme hot-path scenarios\n * where the standard methods are not performant enough, but can also be used to provide\n * support for legacy environments that do not support expected features like\n * `RegExp.prototype.flags` out of the box.\n */\nexport function createCustomEqual(\n options: CustomEqualCreatorOptions = {},\n) {\n const {\n circular = false,\n createInternalComparator: createCustomInternalComparator,\n createState,\n strict = false,\n } = options;\n\n const config = createEqualityComparatorConfig(options);\n const comparator = createEqualityComparator(config);\n const equals = createCustomInternalComparator\n ? createCustomInternalComparator(comparator)\n : createInternalEqualityComparator(comparator);\n\n return createIsEqual({ circular, comparator, createState, equals, strict });\n}\n","function safeRequestAnimationFrame(callback) {\n if (typeof requestAnimationFrame !== 'undefined') requestAnimationFrame(callback);\n}\nexport default function setRafTimeout(callback) {\n var timeout = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var currTime = -1;\n var shouldUpdate = function shouldUpdate(now) {\n if (currTime < 0) {\n currTime = now;\n }\n if (now - currTime > timeout) {\n callback(now);\n currTime = -1;\n } else {\n safeRequestAnimationFrame(shouldUpdate);\n }\n };\n requestAnimationFrame(shouldUpdate);\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\nimport setRafTimeout from './setRafTimeout';\nexport default function createAnimateManager() {\n var currStyle = {};\n var handleChange = function handleChange() {\n return null;\n };\n var shouldStop = false;\n var setStyle = function setStyle(_style) {\n if (shouldStop) {\n return;\n }\n if (Array.isArray(_style)) {\n if (!_style.length) {\n return;\n }\n var styles = _style;\n var _styles = _toArray(styles),\n curr = _styles[0],\n restStyles = _styles.slice(1);\n if (typeof curr === 'number') {\n setRafTimeout(setStyle.bind(null, restStyles), curr);\n return;\n }\n setStyle(curr);\n setRafTimeout(setStyle.bind(null, restStyles));\n return;\n }\n if (_typeof(_style) === 'object') {\n currStyle = _style;\n handleChange(currStyle);\n }\n if (typeof _style === 'function') {\n _style();\n }\n };\n return {\n stop: function stop() {\n shouldStop = true;\n },\n start: function start(style) {\n shouldStop = false;\n setStyle(style);\n },\n subscribe: function subscribe(_handleChange) {\n handleChange = _handleChange;\n return function () {\n handleChange = function handleChange() {\n return null;\n };\n };\n }\n };\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint no-console: 0 */\nvar PREFIX_LIST = ['Webkit', 'Moz', 'O', 'ms'];\nvar IN_LINE_PREFIX_LIST = ['-webkit-', '-moz-', '-o-', '-ms-'];\nvar IN_COMPATIBLE_PROPERTY = ['transform', 'transformOrigin', 'transition'];\nexport var getIntersectionKeys = function getIntersectionKeys(preObj, nextObj) {\n return [Object.keys(preObj), Object.keys(nextObj)].reduce(function (a, b) {\n return a.filter(function (c) {\n return b.includes(c);\n });\n });\n};\nexport var identity = function identity(param) {\n return param;\n};\n\n/*\n * @description: convert camel case to dash case\n * string => string\n */\nexport var getDashCase = function getDashCase(name) {\n return name.replace(/([A-Z])/g, function (v) {\n return \"-\".concat(v.toLowerCase());\n });\n};\n\n/*\n * @description: add compatible style prefix\n * (string, string) => object\n */\nexport var generatePrefixStyle = function generatePrefixStyle(name, value) {\n if (IN_COMPATIBLE_PROPERTY.indexOf(name) === -1) {\n return _defineProperty({}, name, Number.isNaN(value) ? 0 : value);\n }\n var isTransition = name === 'transition';\n var camelName = name.replace(/(\\w)/, function (v) {\n return v.toUpperCase();\n });\n var styleVal = value;\n return PREFIX_LIST.reduce(function (result, property, i) {\n if (isTransition) {\n styleVal = value.replace(/(transform|transform-origin)/gim, \"\".concat(IN_LINE_PREFIX_LIST[i], \"$1\"));\n }\n return _objectSpread(_objectSpread({}, result), {}, _defineProperty({}, property + camelName, styleVal));\n }, {});\n};\nexport var log = function log() {\n var _console;\n (_console = console).log.apply(_console, arguments);\n};\n\n/*\n * @description: log the value of a varible\n * string => any => any\n */\nexport var debug = function debug(name) {\n return function (item) {\n log(name, item);\n return item;\n };\n};\n\n/*\n * @description: log name, args, return value of a function\n * function => function\n */\nexport var debugf = function debugf(tag, f) {\n return function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n var res = f.apply(void 0, args);\n var name = tag || f.name || 'anonymous function';\n var argNames = \"(\".concat(args.map(JSON.stringify).join(', '), \")\");\n log(\"\".concat(name, \": \").concat(argNames, \" => \").concat(JSON.stringify(res)));\n return res;\n };\n};\n\n/*\n * @description: map object on every element in this object.\n * (function, object) => object\n */\nexport var mapObject = function mapObject(fn, obj) {\n return Object.keys(obj).reduce(function (res, key) {\n return _objectSpread(_objectSpread({}, res), {}, _defineProperty({}, key, fn(key, obj[key])));\n }, {});\n};\n\n/*\n * @description: add compatible prefix to style\n * object => object\n */\nexport var translateStyle = function translateStyle(style) {\n return Object.keys(style).reduce(function (res, key) {\n return _objectSpread(_objectSpread({}, res), generatePrefixStyle(key, res[key]));\n }, style);\n};\nexport var compose = function compose() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n if (!args.length) {\n return identity;\n }\n var fns = args.reverse();\n // first function can receive multiply arguments\n var firstFn = fns[0];\n var tailsFn = fns.slice(1);\n return function () {\n return tailsFn.reduce(function (res, fn) {\n return fn(res);\n }, firstFn.apply(void 0, arguments));\n };\n};\nexport var getTransitionVal = function getTransitionVal(props, duration, easing) {\n return props.map(function (prop) {\n return \"\".concat(getDashCase(prop), \" \").concat(duration, \"ms \").concat(easing);\n }).join(',');\n};\nvar isDev = process.env.NODE_ENV !== 'production';\nexport var warn = function warn(condition, format, a, b, c, d, e, f) {\n if (isDev && typeof console !== 'undefined' && console.warn) {\n if (format === undefined) {\n console.warn('LogUtils requires an error message argument');\n }\n if (!condition) {\n if (format === undefined) {\n console.warn('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n console.warn(format.replace(/%s/g, function () {\n return args[argIndex++];\n }));\n }\n }\n }\n};","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nimport { warn } from './util';\nvar ACCURACY = 1e-4;\nvar cubicBezierFactor = function cubicBezierFactor(c1, c2) {\n return [0, 3 * c1, 3 * c2 - 6 * c1, 3 * c1 - 3 * c2 + 1];\n};\nvar multyTime = function multyTime(params, t) {\n return params.map(function (param, i) {\n return param * Math.pow(t, i);\n }).reduce(function (pre, curr) {\n return pre + curr;\n });\n};\nvar cubicBezier = function cubicBezier(c1, c2) {\n return function (t) {\n var params = cubicBezierFactor(c1, c2);\n return multyTime(params, t);\n };\n};\nvar derivativeCubicBezier = function derivativeCubicBezier(c1, c2) {\n return function (t) {\n var params = cubicBezierFactor(c1, c2);\n var newParams = [].concat(_toConsumableArray(params.map(function (param, i) {\n return param * i;\n }).slice(1)), [0]);\n return multyTime(newParams, t);\n };\n};\n\n// calculate cubic-bezier using Newton's method\nexport var configBezier = function configBezier() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n var x1 = args[0],\n y1 = args[1],\n x2 = args[2],\n y2 = args[3];\n if (args.length === 1) {\n switch (args[0]) {\n case 'linear':\n x1 = 0.0;\n y1 = 0.0;\n x2 = 1.0;\n y2 = 1.0;\n break;\n case 'ease':\n x1 = 0.25;\n y1 = 0.1;\n x2 = 0.25;\n y2 = 1.0;\n break;\n case 'ease-in':\n x1 = 0.42;\n y1 = 0.0;\n x2 = 1.0;\n y2 = 1.0;\n break;\n case 'ease-out':\n x1 = 0.42;\n y1 = 0.0;\n x2 = 0.58;\n y2 = 1.0;\n break;\n case 'ease-in-out':\n x1 = 0.0;\n y1 = 0.0;\n x2 = 0.58;\n y2 = 1.0;\n break;\n default:\n {\n var easing = args[0].split('(');\n if (easing[0] === 'cubic-bezier' && easing[1].split(')')[0].split(',').length === 4) {\n var _easing$1$split$0$spl = easing[1].split(')')[0].split(',').map(function (x) {\n return parseFloat(x);\n });\n var _easing$1$split$0$spl2 = _slicedToArray(_easing$1$split$0$spl, 4);\n x1 = _easing$1$split$0$spl2[0];\n y1 = _easing$1$split$0$spl2[1];\n x2 = _easing$1$split$0$spl2[2];\n y2 = _easing$1$split$0$spl2[3];\n } else {\n warn(false, '[configBezier]: arguments should be one of ' + \"oneOf 'linear', 'ease', 'ease-in', 'ease-out', \" + \"'ease-in-out','cubic-bezier(x1,y1,x2,y2)', instead received %s\", args);\n }\n }\n }\n }\n warn([x1, x2, y1, y2].every(function (num) {\n return typeof num === 'number' && num >= 0 && num <= 1;\n }), '[configBezier]: arguments should be x1, y1, x2, y2 of [0, 1] instead received %s', args);\n var curveX = cubicBezier(x1, x2);\n var curveY = cubicBezier(y1, y2);\n var derCurveX = derivativeCubicBezier(x1, x2);\n var rangeValue = function rangeValue(value) {\n if (value > 1) {\n return 1;\n }\n if (value < 0) {\n return 0;\n }\n return value;\n };\n var bezier = function bezier(_t) {\n var t = _t > 1 ? 1 : _t;\n var x = t;\n for (var i = 0; i < 8; ++i) {\n var evalT = curveX(x) - t;\n var derVal = derCurveX(x);\n if (Math.abs(evalT - t) < ACCURACY || derVal < ACCURACY) {\n return curveY(x);\n }\n x = rangeValue(x - evalT / derVal);\n }\n return curveY(x);\n };\n bezier.isStepper = false;\n return bezier;\n};\nexport var configSpring = function configSpring() {\n var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var _config$stiff = config.stiff,\n stiff = _config$stiff === void 0 ? 100 : _config$stiff,\n _config$damping = config.damping,\n damping = _config$damping === void 0 ? 8 : _config$damping,\n _config$dt = config.dt,\n dt = _config$dt === void 0 ? 17 : _config$dt;\n var stepper = function stepper(currX, destX, currV) {\n var FSpring = -(currX - destX) * stiff;\n var FDamping = currV * damping;\n var newV = currV + (FSpring - FDamping) * dt / 1000;\n var newX = currV * dt / 1000 + currX;\n if (Math.abs(newX - destX) < ACCURACY && Math.abs(newV) < ACCURACY) {\n return [destX, 0];\n }\n return [newX, newV];\n };\n stepper.isStepper = true;\n stepper.dt = dt;\n return stepper;\n};\nexport var configEasing = function configEasing() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n var easing = args[0];\n if (typeof easing === 'string') {\n switch (easing) {\n case 'ease':\n case 'ease-in-out':\n case 'ease-out':\n case 'ease-in':\n case 'linear':\n return configBezier(easing);\n case 'spring':\n return configSpring();\n default:\n if (easing.split('(')[0] === 'cubic-bezier') {\n return configBezier(easing);\n }\n warn(false, \"[configEasing]: first argument should be one of 'ease', 'ease-in', \" + \"'ease-out', 'ease-in-out','cubic-bezier(x1,y1,x2,y2)', 'linear' and 'spring', instead received %s\", args);\n }\n }\n if (typeof easing === 'function') {\n return easing;\n }\n warn(false, '[configEasing]: first argument type should be function or string, instead received %s', args);\n return null;\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\nimport { getIntersectionKeys, mapObject } from './util';\nvar alpha = function alpha(begin, end, k) {\n return begin + (end - begin) * k;\n};\nvar needContinue = function needContinue(_ref) {\n var from = _ref.from,\n to = _ref.to;\n return from !== to;\n};\n\n/*\n * @description: cal new from value and velocity in each stepper\n * @return: { [styleProperty]: { from, to, velocity } }\n */\nvar calStepperVals = function calStepperVals(easing, preVals, steps) {\n var nextStepVals = mapObject(function (key, val) {\n if (needContinue(val)) {\n var _easing = easing(val.from, val.to, val.velocity),\n _easing2 = _slicedToArray(_easing, 2),\n newX = _easing2[0],\n newV = _easing2[1];\n return _objectSpread(_objectSpread({}, val), {}, {\n from: newX,\n velocity: newV\n });\n }\n return val;\n }, preVals);\n if (steps < 1) {\n return mapObject(function (key, val) {\n if (needContinue(val)) {\n return _objectSpread(_objectSpread({}, val), {}, {\n velocity: alpha(val.velocity, nextStepVals[key].velocity, steps),\n from: alpha(val.from, nextStepVals[key].from, steps)\n });\n }\n return val;\n }, preVals);\n }\n return calStepperVals(easing, nextStepVals, steps - 1);\n};\n\n// configure update function\nexport default (function (from, to, easing, duration, render) {\n var interKeys = getIntersectionKeys(from, to);\n var timingStyle = interKeys.reduce(function (res, key) {\n return _objectSpread(_objectSpread({}, res), {}, _defineProperty({}, key, [from[key], to[key]]));\n }, {});\n var stepperStyle = interKeys.reduce(function (res, key) {\n return _objectSpread(_objectSpread({}, res), {}, _defineProperty({}, key, {\n from: from[key],\n velocity: 0,\n to: to[key]\n }));\n }, {});\n var cafId = -1;\n var preTime;\n var beginTime;\n var update = function update() {\n return null;\n };\n var getCurrStyle = function getCurrStyle() {\n return mapObject(function (key, val) {\n return val.from;\n }, stepperStyle);\n };\n var shouldStopAnimation = function shouldStopAnimation() {\n return !Object.values(stepperStyle).filter(needContinue).length;\n };\n\n // stepper timing function like spring\n var stepperUpdate = function stepperUpdate(now) {\n if (!preTime) {\n preTime = now;\n }\n var deltaTime = now - preTime;\n var steps = deltaTime / easing.dt;\n stepperStyle = calStepperVals(easing, stepperStyle, steps);\n // get union set and add compatible prefix\n render(_objectSpread(_objectSpread(_objectSpread({}, from), to), getCurrStyle(stepperStyle)));\n preTime = now;\n if (!shouldStopAnimation()) {\n cafId = requestAnimationFrame(update);\n }\n };\n\n // t => val timing function like cubic-bezier\n var timingUpdate = function timingUpdate(now) {\n if (!beginTime) {\n beginTime = now;\n }\n var t = (now - beginTime) / duration;\n var currStyle = mapObject(function (key, val) {\n return alpha.apply(void 0, _toConsumableArray(val).concat([easing(t)]));\n }, timingStyle);\n\n // get union set and add compatible prefix\n render(_objectSpread(_objectSpread(_objectSpread({}, from), to), currStyle));\n if (t < 1) {\n cafId = requestAnimationFrame(update);\n } else {\n var finalStyle = mapObject(function (key, val) {\n return alpha.apply(void 0, _toConsumableArray(val).concat([easing(1)]));\n }, timingStyle);\n render(_objectSpread(_objectSpread(_objectSpread({}, from), to), finalStyle));\n }\n };\n update = easing.isStepper ? stepperUpdate : timingUpdate;\n\n // return start animation method\n return function () {\n requestAnimationFrame(update);\n\n // return stop animation method\n return function () {\n cancelAnimationFrame(cafId);\n };\n };\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"children\", \"begin\", \"duration\", \"attributeName\", \"easing\", \"isActive\", \"steps\", \"from\", \"to\", \"canBegin\", \"onAnimationEnd\", \"shouldReAnimate\", \"onAnimationReStart\"];\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nimport React, { PureComponent, cloneElement, Children } from 'react';\nimport PropTypes from 'prop-types';\nimport { deepEqual } from 'fast-equals';\nimport createAnimateManager from './AnimateManager';\nimport { configEasing } from './easing';\nimport configUpdate from './configUpdate';\nimport { getTransitionVal, identity, translateStyle } from './util';\nvar Animate = /*#__PURE__*/function (_PureComponent) {\n _inherits(Animate, _PureComponent);\n var _super = _createSuper(Animate);\n function Animate(props, context) {\n var _this;\n _classCallCheck(this, Animate);\n _this = _super.call(this, props, context);\n var _this$props = _this.props,\n isActive = _this$props.isActive,\n attributeName = _this$props.attributeName,\n from = _this$props.from,\n to = _this$props.to,\n steps = _this$props.steps,\n children = _this$props.children,\n duration = _this$props.duration;\n _this.handleStyleChange = _this.handleStyleChange.bind(_assertThisInitialized(_this));\n _this.changeStyle = _this.changeStyle.bind(_assertThisInitialized(_this));\n if (!isActive || duration <= 0) {\n _this.state = {\n style: {}\n };\n\n // if children is a function and animation is not active, set style to 'to'\n if (typeof children === 'function') {\n _this.state = {\n style: to\n };\n }\n return _possibleConstructorReturn(_this);\n }\n if (steps && steps.length) {\n _this.state = {\n style: steps[0].style\n };\n } else if (from) {\n if (typeof children === 'function') {\n _this.state = {\n style: from\n };\n return _possibleConstructorReturn(_this);\n }\n _this.state = {\n style: attributeName ? _defineProperty({}, attributeName, from) : from\n };\n } else {\n _this.state = {\n style: {}\n };\n }\n return _this;\n }\n _createClass(Animate, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this$props2 = this.props,\n isActive = _this$props2.isActive,\n canBegin = _this$props2.canBegin;\n this.mounted = true;\n if (!isActive || !canBegin) {\n return;\n }\n this.runAnimation(this.props);\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n var _this$props3 = this.props,\n isActive = _this$props3.isActive,\n canBegin = _this$props3.canBegin,\n attributeName = _this$props3.attributeName,\n shouldReAnimate = _this$props3.shouldReAnimate,\n to = _this$props3.to,\n currentFrom = _this$props3.from;\n var style = this.state.style;\n if (!canBegin) {\n return;\n }\n if (!isActive) {\n var newState = {\n style: attributeName ? _defineProperty({}, attributeName, to) : to\n };\n if (this.state && style) {\n if (attributeName && style[attributeName] !== to || !attributeName && style !== to) {\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState(newState);\n }\n }\n return;\n }\n if (deepEqual(prevProps.to, to) && prevProps.canBegin && prevProps.isActive) {\n return;\n }\n var isTriggered = !prevProps.canBegin || !prevProps.isActive;\n if (this.manager) {\n this.manager.stop();\n }\n if (this.stopJSAnimation) {\n this.stopJSAnimation();\n }\n var from = isTriggered || shouldReAnimate ? currentFrom : prevProps.to;\n if (this.state && style) {\n var _newState = {\n style: attributeName ? _defineProperty({}, attributeName, from) : from\n };\n if (attributeName && [attributeName] !== from || !attributeName && style !== from) {\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState(_newState);\n }\n }\n this.runAnimation(_objectSpread(_objectSpread({}, this.props), {}, {\n from: from,\n begin: 0\n }));\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.mounted = false;\n var onAnimationEnd = this.props.onAnimationEnd;\n if (this.unSubscribe) {\n this.unSubscribe();\n }\n if (this.manager) {\n this.manager.stop();\n this.manager = null;\n }\n if (this.stopJSAnimation) {\n this.stopJSAnimation();\n }\n if (onAnimationEnd) {\n onAnimationEnd();\n }\n }\n }, {\n key: \"handleStyleChange\",\n value: function handleStyleChange(style) {\n this.changeStyle(style);\n }\n }, {\n key: \"changeStyle\",\n value: function changeStyle(style) {\n if (this.mounted) {\n this.setState({\n style: style\n });\n }\n }\n }, {\n key: \"runJSAnimation\",\n value: function runJSAnimation(props) {\n var _this2 = this;\n var from = props.from,\n to = props.to,\n duration = props.duration,\n easing = props.easing,\n begin = props.begin,\n onAnimationEnd = props.onAnimationEnd,\n onAnimationStart = props.onAnimationStart;\n var startAnimation = configUpdate(from, to, configEasing(easing), duration, this.changeStyle);\n var finalStartAnimation = function finalStartAnimation() {\n _this2.stopJSAnimation = startAnimation();\n };\n this.manager.start([onAnimationStart, begin, finalStartAnimation, duration, onAnimationEnd]);\n }\n }, {\n key: \"runStepAnimation\",\n value: function runStepAnimation(props) {\n var _this3 = this;\n var steps = props.steps,\n begin = props.begin,\n onAnimationStart = props.onAnimationStart;\n var _steps$ = steps[0],\n initialStyle = _steps$.style,\n _steps$$duration = _steps$.duration,\n initialTime = _steps$$duration === void 0 ? 0 : _steps$$duration;\n var addStyle = function addStyle(sequence, nextItem, index) {\n if (index === 0) {\n return sequence;\n }\n var duration = nextItem.duration,\n _nextItem$easing = nextItem.easing,\n easing = _nextItem$easing === void 0 ? 'ease' : _nextItem$easing,\n style = nextItem.style,\n nextProperties = nextItem.properties,\n onAnimationEnd = nextItem.onAnimationEnd;\n var preItem = index > 0 ? steps[index - 1] : nextItem;\n var properties = nextProperties || Object.keys(style);\n if (typeof easing === 'function' || easing === 'spring') {\n return [].concat(_toConsumableArray(sequence), [_this3.runJSAnimation.bind(_this3, {\n from: preItem.style,\n to: style,\n duration: duration,\n easing: easing\n }), duration]);\n }\n var transition = getTransitionVal(properties, duration, easing);\n var newStyle = _objectSpread(_objectSpread(_objectSpread({}, preItem.style), style), {}, {\n transition: transition\n });\n return [].concat(_toConsumableArray(sequence), [newStyle, duration, onAnimationEnd]).filter(identity);\n };\n return this.manager.start([onAnimationStart].concat(_toConsumableArray(steps.reduce(addStyle, [initialStyle, Math.max(initialTime, begin)])), [props.onAnimationEnd]));\n }\n }, {\n key: \"runAnimation\",\n value: function runAnimation(props) {\n if (!this.manager) {\n this.manager = createAnimateManager();\n }\n var begin = props.begin,\n duration = props.duration,\n attributeName = props.attributeName,\n propsTo = props.to,\n easing = props.easing,\n onAnimationStart = props.onAnimationStart,\n onAnimationEnd = props.onAnimationEnd,\n steps = props.steps,\n children = props.children;\n var manager = this.manager;\n this.unSubscribe = manager.subscribe(this.handleStyleChange);\n if (typeof easing === 'function' || typeof children === 'function' || easing === 'spring') {\n this.runJSAnimation(props);\n return;\n }\n if (steps.length > 1) {\n this.runStepAnimation(props);\n return;\n }\n var to = attributeName ? _defineProperty({}, attributeName, propsTo) : propsTo;\n var transition = getTransitionVal(Object.keys(to), duration, easing);\n manager.start([onAnimationStart, begin, _objectSpread(_objectSpread({}, to), {}, {\n transition: transition\n }), duration, onAnimationEnd]);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props4 = this.props,\n children = _this$props4.children,\n begin = _this$props4.begin,\n duration = _this$props4.duration,\n attributeName = _this$props4.attributeName,\n easing = _this$props4.easing,\n isActive = _this$props4.isActive,\n steps = _this$props4.steps,\n from = _this$props4.from,\n to = _this$props4.to,\n canBegin = _this$props4.canBegin,\n onAnimationEnd = _this$props4.onAnimationEnd,\n shouldReAnimate = _this$props4.shouldReAnimate,\n onAnimationReStart = _this$props4.onAnimationReStart,\n others = _objectWithoutProperties(_this$props4, _excluded);\n var count = Children.count(children);\n // eslint-disable-next-line react/destructuring-assignment\n var stateStyle = translateStyle(this.state.style);\n if (typeof children === 'function') {\n return children(stateStyle);\n }\n if (!isActive || count === 0 || duration <= 0) {\n return children;\n }\n var cloneContainer = function cloneContainer(container) {\n var _container$props = container.props,\n _container$props$styl = _container$props.style,\n style = _container$props$styl === void 0 ? {} : _container$props$styl,\n className = _container$props.className;\n var res = /*#__PURE__*/cloneElement(container, _objectSpread(_objectSpread({}, others), {}, {\n style: _objectSpread(_objectSpread({}, style), stateStyle),\n className: className\n }));\n return res;\n };\n if (count === 1) {\n return cloneContainer(Children.only(children));\n }\n return /*#__PURE__*/React.createElement(\"div\", null, Children.map(children, function (child) {\n return cloneContainer(child);\n }));\n }\n }]);\n return Animate;\n}(PureComponent);\nAnimate.displayName = 'Animate';\nAnimate.defaultProps = {\n begin: 0,\n duration: 1000,\n from: '',\n to: '',\n attributeName: '',\n easing: 'ease',\n isActive: true,\n canBegin: true,\n steps: [],\n onAnimationEnd: function onAnimationEnd() {},\n onAnimationStart: function onAnimationStart() {}\n};\nAnimate.propTypes = {\n from: PropTypes.oneOfType([PropTypes.object, PropTypes.string]),\n to: PropTypes.oneOfType([PropTypes.object, PropTypes.string]),\n attributeName: PropTypes.string,\n // animation duration\n duration: PropTypes.number,\n begin: PropTypes.number,\n easing: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),\n steps: PropTypes.arrayOf(PropTypes.shape({\n duration: PropTypes.number.isRequired,\n style: PropTypes.object.isRequired,\n easing: PropTypes.oneOfType([PropTypes.oneOf(['ease', 'ease-in', 'ease-out', 'ease-in-out', 'linear']), PropTypes.func]),\n // transition css properties(dash case), optional\n properties: PropTypes.arrayOf('string'),\n onAnimationEnd: PropTypes.func\n })),\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n isActive: PropTypes.bool,\n canBegin: PropTypes.bool,\n onAnimationEnd: PropTypes.func,\n // decide if it should reanimate with initial from style when props change\n shouldReAnimate: PropTypes.bool,\n onAnimationStart: PropTypes.func,\n onAnimationReStart: PropTypes.func\n};\nexport default Animate;","var _excluded = [\"children\", \"appearOptions\", \"enterOptions\", \"leaveOptions\"];\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { Component, Children } from 'react';\nimport { Transition } from 'react-transition-group';\nimport PropTypes from 'prop-types';\nimport Animate from './Animate';\nif (Number.isFinite === undefined) {\n Number.isFinite = function (value) {\n return typeof value === 'number' && isFinite(value);\n };\n}\nvar parseDurationOfSingleTransition = function parseDurationOfSingleTransition() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var steps = options.steps,\n duration = options.duration;\n if (steps && steps.length) {\n return steps.reduce(function (result, entry) {\n return result + (Number.isFinite(entry.duration) && entry.duration > 0 ? entry.duration : 0);\n }, 0);\n }\n if (Number.isFinite(duration)) {\n return duration;\n }\n return 0;\n};\nvar AnimateGroupChild = /*#__PURE__*/function (_Component) {\n _inherits(AnimateGroupChild, _Component);\n var _super = _createSuper(AnimateGroupChild);\n function AnimateGroupChild() {\n var _this;\n _classCallCheck(this, AnimateGroupChild);\n _this = _super.call(this);\n _defineProperty(_assertThisInitialized(_this), \"handleEnter\", function (node, isAppearing) {\n var _this$props = _this.props,\n appearOptions = _this$props.appearOptions,\n enterOptions = _this$props.enterOptions;\n _this.handleStyleActive(isAppearing ? appearOptions : enterOptions);\n });\n _defineProperty(_assertThisInitialized(_this), \"handleExit\", function () {\n var leaveOptions = _this.props.leaveOptions;\n _this.handleStyleActive(leaveOptions);\n });\n _this.state = {\n isActive: false\n };\n return _this;\n }\n _createClass(AnimateGroupChild, [{\n key: \"handleStyleActive\",\n value: function handleStyleActive(style) {\n if (style) {\n var onAnimationEnd = style.onAnimationEnd ? function () {\n style.onAnimationEnd();\n } : null;\n this.setState(_objectSpread(_objectSpread({}, style), {}, {\n onAnimationEnd: onAnimationEnd,\n isActive: true\n }));\n }\n }\n }, {\n key: \"parseTimeout\",\n value: function parseTimeout() {\n var _this$props2 = this.props,\n appearOptions = _this$props2.appearOptions,\n enterOptions = _this$props2.enterOptions,\n leaveOptions = _this$props2.leaveOptions;\n return parseDurationOfSingleTransition(appearOptions) + parseDurationOfSingleTransition(enterOptions) + parseDurationOfSingleTransition(leaveOptions);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n var _this$props3 = this.props,\n children = _this$props3.children,\n appearOptions = _this$props3.appearOptions,\n enterOptions = _this$props3.enterOptions,\n leaveOptions = _this$props3.leaveOptions,\n props = _objectWithoutProperties(_this$props3, _excluded);\n return /*#__PURE__*/React.createElement(Transition, _extends({}, props, {\n onEnter: this.handleEnter,\n onExit: this.handleExit,\n timeout: this.parseTimeout()\n }), function () {\n return /*#__PURE__*/React.createElement(Animate, _this2.state, Children.only(children));\n });\n }\n }]);\n return AnimateGroupChild;\n}(Component);\nAnimateGroupChild.propTypes = {\n appearOptions: PropTypes.object,\n enterOptions: PropTypes.object,\n leaveOptions: PropTypes.object,\n children: PropTypes.element\n};\nexport default AnimateGroupChild;","import React, { Children } from 'react';\nimport { TransitionGroup } from 'react-transition-group';\nimport PropTypes from 'prop-types';\nimport AnimateGroupChild from './AnimateGroupChild';\nfunction AnimateGroup(props) {\n var component = props.component,\n children = props.children,\n appear = props.appear,\n enter = props.enter,\n leave = props.leave;\n return /*#__PURE__*/React.createElement(TransitionGroup, {\n component: component\n }, Children.map(children, function (child, index) {\n return /*#__PURE__*/React.createElement(AnimateGroupChild, {\n appearOptions: appear,\n enterOptions: enter,\n leaveOptions: leave,\n key: \"child-\".concat(index) // eslint-disable-line\n }, child);\n }));\n}\nAnimateGroup.propTypes = {\n appear: PropTypes.object,\n enter: PropTypes.object,\n leave: PropTypes.object,\n children: PropTypes.oneOfType([PropTypes.array, PropTypes.element]),\n component: PropTypes.any\n};\nAnimateGroup.defaultProps = {\n component: 'span'\n};\nexport default AnimateGroup;","import Animate from './Animate';\nimport { configBezier, configSpring } from './easing';\nimport { translateStyle } from './util';\nimport AnimateGroup from './AnimateGroup';\nexport { configSpring, configBezier, AnimateGroup, translateStyle };\nexport default Animate;","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar PropTypes = _interopRequireWildcard(require(\"prop-types\"));\n\nvar _addClass = _interopRequireDefault(require(\"dom-helpers/class/addClass\"));\n\nvar _removeClass = _interopRequireDefault(require(\"dom-helpers/class/removeClass\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Transition = _interopRequireDefault(require(\"./Transition\"));\n\nvar _PropTypes = require(\"./utils/PropTypes\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar addClass = function addClass(node, classes) {\n return node && classes && classes.split(' ').forEach(function (c) {\n return (0, _addClass.default)(node, c);\n });\n};\n\nvar removeClass = function removeClass(node, classes) {\n return node && classes && classes.split(' ').forEach(function (c) {\n return (0, _removeClass.default)(node, c);\n });\n};\n/**\n * A transition component inspired by the excellent\n * [ng-animate](http://www.nganimate.org/) library, you should use it if you're\n * using CSS transitions or animations. It's built upon the\n * [`Transition`](https://reactcommunity.org/react-transition-group/transition)\n * component, so it inherits all of its props.\n *\n * `CSSTransition` applies a pair of class names during the `appear`, `enter`,\n * and `exit` states of the transition. The first class is applied and then a\n * second `*-active` class in order to activate the CSSS transition. After the\n * transition, matching `*-done` class names are applied to persist the\n * transition state.\n *\n * ```jsx\n * function App() {\n * const [inProp, setInProp] = useState(false);\n * return (\n *
\n * \n *
\n * {\"I'll receive my-node-* classes\"}\n *
\n *
\n * \n *
\n * );\n * }\n * ```\n *\n * When the `in` prop is set to `true`, the child component will first receive\n * the class `example-enter`, then the `example-enter-active` will be added in\n * the next tick. `CSSTransition` [forces a\n * reflow](https://github.com/reactjs/react-transition-group/blob/5007303e729a74be66a21c3e2205e4916821524b/src/CSSTransition.js#L208-L215)\n * between before adding the `example-enter-active`. This is an important trick\n * because it allows us to transition between `example-enter` and\n * `example-enter-active` even though they were added immediately one after\n * another. Most notably, this is what makes it possible for us to animate\n * _appearance_.\n *\n * ```css\n * .my-node-enter {\n * opacity: 0;\n * }\n * .my-node-enter-active {\n * opacity: 1;\n * transition: opacity 200ms;\n * }\n * .my-node-exit {\n * opacity: 1;\n * }\n * .my-node-exit-active {\n * opacity: 0;\n * transition: opacity: 200ms;\n * }\n * ```\n *\n * `*-active` classes represent which styles you want to animate **to**.\n */\n\n\nvar CSSTransition =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(CSSTransition, _React$Component);\n\n function CSSTransition() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n\n _this.onEnter = function (node, appearing) {\n var _this$getClassNames = _this.getClassNames(appearing ? 'appear' : 'enter'),\n className = _this$getClassNames.className;\n\n _this.removeClasses(node, 'exit');\n\n addClass(node, className);\n\n if (_this.props.onEnter) {\n _this.props.onEnter(node, appearing);\n }\n };\n\n _this.onEntering = function (node, appearing) {\n var _this$getClassNames2 = _this.getClassNames(appearing ? 'appear' : 'enter'),\n activeClassName = _this$getClassNames2.activeClassName;\n\n _this.reflowAndAddClass(node, activeClassName);\n\n if (_this.props.onEntering) {\n _this.props.onEntering(node, appearing);\n }\n };\n\n _this.onEntered = function (node, appearing) {\n var appearClassName = _this.getClassNames('appear').doneClassName;\n\n var enterClassName = _this.getClassNames('enter').doneClassName;\n\n var doneClassName = appearing ? appearClassName + \" \" + enterClassName : enterClassName;\n\n _this.removeClasses(node, appearing ? 'appear' : 'enter');\n\n addClass(node, doneClassName);\n\n if (_this.props.onEntered) {\n _this.props.onEntered(node, appearing);\n }\n };\n\n _this.onExit = function (node) {\n var _this$getClassNames3 = _this.getClassNames('exit'),\n className = _this$getClassNames3.className;\n\n _this.removeClasses(node, 'appear');\n\n _this.removeClasses(node, 'enter');\n\n addClass(node, className);\n\n if (_this.props.onExit) {\n _this.props.onExit(node);\n }\n };\n\n _this.onExiting = function (node) {\n var _this$getClassNames4 = _this.getClassNames('exit'),\n activeClassName = _this$getClassNames4.activeClassName;\n\n _this.reflowAndAddClass(node, activeClassName);\n\n if (_this.props.onExiting) {\n _this.props.onExiting(node);\n }\n };\n\n _this.onExited = function (node) {\n var _this$getClassNames5 = _this.getClassNames('exit'),\n doneClassName = _this$getClassNames5.doneClassName;\n\n _this.removeClasses(node, 'exit');\n\n addClass(node, doneClassName);\n\n if (_this.props.onExited) {\n _this.props.onExited(node);\n }\n };\n\n _this.getClassNames = function (type) {\n var classNames = _this.props.classNames;\n var isStringClassNames = typeof classNames === 'string';\n var prefix = isStringClassNames && classNames ? classNames + '-' : '';\n var className = isStringClassNames ? prefix + type : classNames[type];\n var activeClassName = isStringClassNames ? className + '-active' : classNames[type + 'Active'];\n var doneClassName = isStringClassNames ? className + '-done' : classNames[type + 'Done'];\n return {\n className: className,\n activeClassName: activeClassName,\n doneClassName: doneClassName\n };\n };\n\n return _this;\n }\n\n var _proto = CSSTransition.prototype;\n\n _proto.removeClasses = function removeClasses(node, type) {\n var _this$getClassNames6 = this.getClassNames(type),\n className = _this$getClassNames6.className,\n activeClassName = _this$getClassNames6.activeClassName,\n doneClassName = _this$getClassNames6.doneClassName;\n\n className && removeClass(node, className);\n activeClassName && removeClass(node, activeClassName);\n doneClassName && removeClass(node, doneClassName);\n };\n\n _proto.reflowAndAddClass = function reflowAndAddClass(node, className) {\n // This is for to force a repaint,\n // which is necessary in order to transition styles when adding a class name.\n if (className) {\n /* eslint-disable no-unused-expressions */\n node && node.scrollTop;\n /* eslint-enable no-unused-expressions */\n\n addClass(node, className);\n }\n };\n\n _proto.render = function render() {\n var props = _extends({}, this.props);\n\n delete props.classNames;\n return _react.default.createElement(_Transition.default, _extends({}, props, {\n onEnter: this.onEnter,\n onEntered: this.onEntered,\n onEntering: this.onEntering,\n onExit: this.onExit,\n onExiting: this.onExiting,\n onExited: this.onExited\n }));\n };\n\n return CSSTransition;\n}(_react.default.Component);\n\nCSSTransition.defaultProps = {\n classNames: ''\n};\nCSSTransition.propTypes = process.env.NODE_ENV !== \"production\" ? _extends({}, _Transition.default.propTypes, {\n /**\n * The animation classNames applied to the component as it enters, exits or\n * has finished the transition. A single name can be provided and it will be\n * suffixed for each stage: e.g.\n *\n * `classNames=\"fade\"` applies `fade-enter`, `fade-enter-active`,\n * `fade-enter-done`, `fade-exit`, `fade-exit-active`, `fade-exit-done`,\n * `fade-appear`, `fade-appear-active`, and `fade-appear-done`.\n *\n * **Note**: `fade-appear-done` and `fade-enter-done` will _both_ be applied.\n * This allows you to define different behavior for when appearing is done and\n * when regular entering is done, using selectors like\n * `.fade-enter-done:not(.fade-appear-done)`. For example, you could apply an\n * epic entrance animation when element first appears in the DOM using\n * [Animate.css](https://daneden.github.io/animate.css/). Otherwise you can\n * simply use `fade-enter-done` for defining both cases.\n *\n * Each individual classNames can also be specified independently like:\n *\n * ```js\n * classNames={{\n * appear: 'my-appear',\n * appearActive: 'my-active-appear',\n * appearDone: 'my-done-appear',\n * enter: 'my-enter',\n * enterActive: 'my-active-enter',\n * enterDone: 'my-done-enter',\n * exit: 'my-exit',\n * exitActive: 'my-active-exit',\n * exitDone: 'my-done-exit',\n * }}\n * ```\n *\n * If you want to set these classes using CSS Modules:\n *\n * ```js\n * import styles from './styles.css';\n * ```\n *\n * you might want to use camelCase in your CSS file, that way could simply\n * spread them instead of listing them one by one:\n *\n * ```js\n * classNames={{ ...styles }}\n * ```\n *\n * @type {string | {\n * appear?: string,\n * appearActive?: string,\n * appearDone?: string,\n * enter?: string,\n * enterActive?: string,\n * enterDone?: string,\n * exit?: string,\n * exitActive?: string,\n * exitDone?: string,\n * }}\n */\n classNames: _PropTypes.classNamesShape,\n\n /**\n * A `` callback fired immediately after the 'enter' or 'appear' class is\n * applied.\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEnter: PropTypes.func,\n\n /**\n * A `` callback fired immediately after the 'enter-active' or\n * 'appear-active' class is applied.\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEntering: PropTypes.func,\n\n /**\n * A `` callback fired immediately after the 'enter' or\n * 'appear' classes are **removed** and the `done` class is added to the DOM node.\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEntered: PropTypes.func,\n\n /**\n * A `` callback fired immediately after the 'exit' class is\n * applied.\n *\n * @type Function(node: HtmlElement)\n */\n onExit: PropTypes.func,\n\n /**\n * A `` callback fired immediately after the 'exit-active' is applied.\n *\n * @type Function(node: HtmlElement)\n */\n onExiting: PropTypes.func,\n\n /**\n * A `` callback fired immediately after the 'exit' classes\n * are **removed** and the `exit-done` class is added to the DOM node.\n *\n * @type Function(node: HtmlElement)\n */\n onExited: PropTypes.func\n}) : {};\nvar _default = CSSTransition;\nexports.default = _default;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reactDom = require(\"react-dom\");\n\nvar _TransitionGroup = _interopRequireDefault(require(\"./TransitionGroup\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\n/**\n * The `` component is a specialized `Transition` component\n * that animates between two children.\n *\n * ```jsx\n * \n *
I appear first
\n *
I replace the above
\n *
\n * ```\n */\nvar ReplaceTransition =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(ReplaceTransition, _React$Component);\n\n function ReplaceTransition() {\n var _this;\n\n for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {\n _args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(_args)) || this;\n\n _this.handleEnter = function () {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return _this.handleLifecycle('onEnter', 0, args);\n };\n\n _this.handleEntering = function () {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n return _this.handleLifecycle('onEntering', 0, args);\n };\n\n _this.handleEntered = function () {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n return _this.handleLifecycle('onEntered', 0, args);\n };\n\n _this.handleExit = function () {\n for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n args[_key5] = arguments[_key5];\n }\n\n return _this.handleLifecycle('onExit', 1, args);\n };\n\n _this.handleExiting = function () {\n for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n args[_key6] = arguments[_key6];\n }\n\n return _this.handleLifecycle('onExiting', 1, args);\n };\n\n _this.handleExited = function () {\n for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n args[_key7] = arguments[_key7];\n }\n\n return _this.handleLifecycle('onExited', 1, args);\n };\n\n return _this;\n }\n\n var _proto = ReplaceTransition.prototype;\n\n _proto.handleLifecycle = function handleLifecycle(handler, idx, originalArgs) {\n var _child$props;\n\n var children = this.props.children;\n\n var child = _react.default.Children.toArray(children)[idx];\n\n if (child.props[handler]) (_child$props = child.props)[handler].apply(_child$props, originalArgs);\n if (this.props[handler]) this.props[handler]((0, _reactDom.findDOMNode)(this));\n };\n\n _proto.render = function render() {\n var _this$props = this.props,\n children = _this$props.children,\n inProp = _this$props.in,\n props = _objectWithoutPropertiesLoose(_this$props, [\"children\", \"in\"]);\n\n var _React$Children$toArr = _react.default.Children.toArray(children),\n first = _React$Children$toArr[0],\n second = _React$Children$toArr[1];\n\n delete props.onEnter;\n delete props.onEntering;\n delete props.onEntered;\n delete props.onExit;\n delete props.onExiting;\n delete props.onExited;\n return _react.default.createElement(_TransitionGroup.default, props, inProp ? _react.default.cloneElement(first, {\n key: 'first',\n onEnter: this.handleEnter,\n onEntering: this.handleEntering,\n onEntered: this.handleEntered\n }) : _react.default.cloneElement(second, {\n key: 'second',\n onEnter: this.handleExit,\n onEntering: this.handleExiting,\n onEntered: this.handleExited\n }));\n };\n\n return ReplaceTransition;\n}(_react.default.Component);\n\nReplaceTransition.propTypes = process.env.NODE_ENV !== \"production\" ? {\n in: _propTypes.default.bool.isRequired,\n children: function children(props, propName) {\n if (_react.default.Children.count(props[propName]) !== 2) return new Error(\"\\\"\" + propName + \"\\\" must be exactly two transition components.\");\n return null;\n }\n} : {};\nvar _default = ReplaceTransition;\nexports.default = _default;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = exports.EXITING = exports.ENTERED = exports.ENTERING = exports.EXITED = exports.UNMOUNTED = void 0;\n\nvar PropTypes = _interopRequireWildcard(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\n\nvar _reactLifecyclesCompat = require(\"react-lifecycles-compat\");\n\nvar _PropTypes = require(\"./utils/PropTypes\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar UNMOUNTED = 'unmounted';\nexports.UNMOUNTED = UNMOUNTED;\nvar EXITED = 'exited';\nexports.EXITED = EXITED;\nvar ENTERING = 'entering';\nexports.ENTERING = ENTERING;\nvar ENTERED = 'entered';\nexports.ENTERED = ENTERED;\nvar EXITING = 'exiting';\n/**\n * The Transition component lets you describe a transition from one component\n * state to another _over time_ with a simple declarative API. Most commonly\n * it's used to animate the mounting and unmounting of a component, but can also\n * be used to describe in-place transition states as well.\n *\n * ---\n *\n * **Note**: `Transition` is a platform-agnostic base component. If you're using\n * transitions in CSS, you'll probably want to use\n * [`CSSTransition`](https://reactcommunity.org/react-transition-group/css-transition)\n * instead. It inherits all the features of `Transition`, but contains\n * additional features necessary to play nice with CSS transitions (hence the\n * name of the component).\n *\n * ---\n *\n * By default the `Transition` component does not alter the behavior of the\n * component it renders, it only tracks \"enter\" and \"exit\" states for the\n * components. It's up to you to give meaning and effect to those states. For\n * example we can add styles to a component when it enters or exits:\n *\n * ```jsx\n * import { Transition } from 'react-transition-group';\n *\n * const duration = 300;\n *\n * const defaultStyle = {\n * transition: `opacity ${duration}ms ease-in-out`,\n * opacity: 0,\n * }\n *\n * const transitionStyles = {\n * entering: { opacity: 0 },\n * entered: { opacity: 1 },\n * };\n *\n * const Fade = ({ in: inProp }) => (\n * \n * {state => (\n *
\n * I'm a fade Transition!\n *
\n * )}\n *
\n * );\n * ```\n *\n * There are 4 main states a Transition can be in:\n * - `'entering'`\n * - `'entered'`\n * - `'exiting'`\n * - `'exited'`\n *\n * Transition state is toggled via the `in` prop. When `true` the component\n * begins the \"Enter\" stage. During this stage, the component will shift from\n * its current transition state, to `'entering'` for the duration of the\n * transition and then to the `'entered'` stage once it's complete. Let's take\n * the following example (we'll use the\n * [useState](https://reactjs.org/docs/hooks-reference.html#usestate) hook):\n *\n * ```jsx\n * function App() {\n * const [inProp, setInProp] = useState(false);\n * return (\n *
\n * \n * {state => (\n * // ...\n * )}\n * \n * \n *
\n * );\n * }\n * ```\n *\n * When the button is clicked the component will shift to the `'entering'` state\n * and stay there for 500ms (the value of `timeout`) before it finally switches\n * to `'entered'`.\n *\n * When `in` is `false` the same thing happens except the state moves from\n * `'exiting'` to `'exited'`.\n */\n\nexports.EXITING = EXITING;\n\nvar Transition =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(Transition, _React$Component);\n\n function Transition(props, context) {\n var _this;\n\n _this = _React$Component.call(this, props, context) || this;\n var parentGroup = context.transitionGroup; // In the context of a TransitionGroup all enters are really appears\n\n var appear = parentGroup && !parentGroup.isMounting ? props.enter : props.appear;\n var initialStatus;\n _this.appearStatus = null;\n\n if (props.in) {\n if (appear) {\n initialStatus = EXITED;\n _this.appearStatus = ENTERING;\n } else {\n initialStatus = ENTERED;\n }\n } else {\n if (props.unmountOnExit || props.mountOnEnter) {\n initialStatus = UNMOUNTED;\n } else {\n initialStatus = EXITED;\n }\n }\n\n _this.state = {\n status: initialStatus\n };\n _this.nextCallback = null;\n return _this;\n }\n\n var _proto = Transition.prototype;\n\n _proto.getChildContext = function getChildContext() {\n return {\n transitionGroup: null // allows for nested Transitions\n\n };\n };\n\n Transition.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) {\n var nextIn = _ref.in;\n\n if (nextIn && prevState.status === UNMOUNTED) {\n return {\n status: EXITED\n };\n }\n\n return null;\n }; // getSnapshotBeforeUpdate(prevProps) {\n // let nextStatus = null\n // if (prevProps !== this.props) {\n // const { status } = this.state\n // if (this.props.in) {\n // if (status !== ENTERING && status !== ENTERED) {\n // nextStatus = ENTERING\n // }\n // } else {\n // if (status === ENTERING || status === ENTERED) {\n // nextStatus = EXITING\n // }\n // }\n // }\n // return { nextStatus }\n // }\n\n\n _proto.componentDidMount = function componentDidMount() {\n this.updateStatus(true, this.appearStatus);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var nextStatus = null;\n\n if (prevProps !== this.props) {\n var status = this.state.status;\n\n if (this.props.in) {\n if (status !== ENTERING && status !== ENTERED) {\n nextStatus = ENTERING;\n }\n } else {\n if (status === ENTERING || status === ENTERED) {\n nextStatus = EXITING;\n }\n }\n }\n\n this.updateStatus(false, nextStatus);\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.cancelNextCallback();\n };\n\n _proto.getTimeouts = function getTimeouts() {\n var timeout = this.props.timeout;\n var exit, enter, appear;\n exit = enter = appear = timeout;\n\n if (timeout != null && typeof timeout !== 'number') {\n exit = timeout.exit;\n enter = timeout.enter; // TODO: remove fallback for next major\n\n appear = timeout.appear !== undefined ? timeout.appear : enter;\n }\n\n return {\n exit: exit,\n enter: enter,\n appear: appear\n };\n };\n\n _proto.updateStatus = function updateStatus(mounting, nextStatus) {\n if (mounting === void 0) {\n mounting = false;\n }\n\n if (nextStatus !== null) {\n // nextStatus will always be ENTERING or EXITING.\n this.cancelNextCallback();\n\n var node = _reactDom.default.findDOMNode(this);\n\n if (nextStatus === ENTERING) {\n this.performEnter(node, mounting);\n } else {\n this.performExit(node);\n }\n } else if (this.props.unmountOnExit && this.state.status === EXITED) {\n this.setState({\n status: UNMOUNTED\n });\n }\n };\n\n _proto.performEnter = function performEnter(node, mounting) {\n var _this2 = this;\n\n var enter = this.props.enter;\n var appearing = this.context.transitionGroup ? this.context.transitionGroup.isMounting : mounting;\n var timeouts = this.getTimeouts();\n var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED\n // if we are mounting and running this it means appear _must_ be set\n\n if (!mounting && !enter) {\n this.safeSetState({\n status: ENTERED\n }, function () {\n _this2.props.onEntered(node);\n });\n return;\n }\n\n this.props.onEnter(node, appearing);\n this.safeSetState({\n status: ENTERING\n }, function () {\n _this2.props.onEntering(node, appearing);\n\n _this2.onTransitionEnd(node, enterTimeout, function () {\n _this2.safeSetState({\n status: ENTERED\n }, function () {\n _this2.props.onEntered(node, appearing);\n });\n });\n });\n };\n\n _proto.performExit = function performExit(node) {\n var _this3 = this;\n\n var exit = this.props.exit;\n var timeouts = this.getTimeouts(); // no exit animation skip right to EXITED\n\n if (!exit) {\n this.safeSetState({\n status: EXITED\n }, function () {\n _this3.props.onExited(node);\n });\n return;\n }\n\n this.props.onExit(node);\n this.safeSetState({\n status: EXITING\n }, function () {\n _this3.props.onExiting(node);\n\n _this3.onTransitionEnd(node, timeouts.exit, function () {\n _this3.safeSetState({\n status: EXITED\n }, function () {\n _this3.props.onExited(node);\n });\n });\n });\n };\n\n _proto.cancelNextCallback = function cancelNextCallback() {\n if (this.nextCallback !== null) {\n this.nextCallback.cancel();\n this.nextCallback = null;\n }\n };\n\n _proto.safeSetState = function safeSetState(nextState, callback) {\n // This shouldn't be necessary, but there are weird race conditions with\n // setState callbacks and unmounting in testing, so always make sure that\n // we can cancel any pending setState callbacks after we unmount.\n callback = this.setNextCallback(callback);\n this.setState(nextState, callback);\n };\n\n _proto.setNextCallback = function setNextCallback(callback) {\n var _this4 = this;\n\n var active = true;\n\n this.nextCallback = function (event) {\n if (active) {\n active = false;\n _this4.nextCallback = null;\n callback(event);\n }\n };\n\n this.nextCallback.cancel = function () {\n active = false;\n };\n\n return this.nextCallback;\n };\n\n _proto.onTransitionEnd = function onTransitionEnd(node, timeout, handler) {\n this.setNextCallback(handler);\n var doesNotHaveTimeoutOrListener = timeout == null && !this.props.addEndListener;\n\n if (!node || doesNotHaveTimeoutOrListener) {\n setTimeout(this.nextCallback, 0);\n return;\n }\n\n if (this.props.addEndListener) {\n this.props.addEndListener(node, this.nextCallback);\n }\n\n if (timeout != null) {\n setTimeout(this.nextCallback, timeout);\n }\n };\n\n _proto.render = function render() {\n var status = this.state.status;\n\n if (status === UNMOUNTED) {\n return null;\n }\n\n var _this$props = this.props,\n children = _this$props.children,\n childProps = _objectWithoutPropertiesLoose(_this$props, [\"children\"]); // filter props for Transtition\n\n\n delete childProps.in;\n delete childProps.mountOnEnter;\n delete childProps.unmountOnExit;\n delete childProps.appear;\n delete childProps.enter;\n delete childProps.exit;\n delete childProps.timeout;\n delete childProps.addEndListener;\n delete childProps.onEnter;\n delete childProps.onEntering;\n delete childProps.onEntered;\n delete childProps.onExit;\n delete childProps.onExiting;\n delete childProps.onExited;\n\n if (typeof children === 'function') {\n return children(status, childProps);\n }\n\n var child = _react.default.Children.only(children);\n\n return _react.default.cloneElement(child, childProps);\n };\n\n return Transition;\n}(_react.default.Component);\n\nTransition.contextTypes = {\n transitionGroup: PropTypes.object\n};\nTransition.childContextTypes = {\n transitionGroup: function transitionGroup() {}\n};\nTransition.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /**\n * A `function` child can be used instead of a React element. This function is\n * called with the current transition status (`'entering'`, `'entered'`,\n * `'exiting'`, `'exited'`, `'unmounted'`), which can be used to apply context\n * specific props to a component.\n *\n * ```jsx\n * \n * {state => (\n * \n * )}\n * \n * ```\n */\n children: PropTypes.oneOfType([PropTypes.func.isRequired, PropTypes.element.isRequired]).isRequired,\n\n /**\n * Show the component; triggers the enter or exit states\n */\n in: PropTypes.bool,\n\n /**\n * By default the child component is mounted immediately along with\n * the parent `Transition` component. If you want to \"lazy mount\" the component on the\n * first `in={true}` you can set `mountOnEnter`. After the first enter transition the component will stay\n * mounted, even on \"exited\", unless you also specify `unmountOnExit`.\n */\n mountOnEnter: PropTypes.bool,\n\n /**\n * By default the child component stays mounted after it reaches the `'exited'` state.\n * Set `unmountOnExit` if you'd prefer to unmount the component after it finishes exiting.\n */\n unmountOnExit: PropTypes.bool,\n\n /**\n * Normally a component is not transitioned if it is shown when the `` component mounts.\n * If you want to transition on the first mount set `appear` to `true`, and the\n * component will transition in as soon as the `` mounts.\n *\n * > Note: there are no specific \"appear\" states. `appear` only adds an additional `enter` transition.\n */\n appear: PropTypes.bool,\n\n /**\n * Enable or disable enter transitions.\n */\n enter: PropTypes.bool,\n\n /**\n * Enable or disable exit transitions.\n */\n exit: PropTypes.bool,\n\n /**\n * The duration of the transition, in milliseconds.\n * Required unless `addEndListener` is provided.\n *\n * You may specify a single timeout for all transitions:\n *\n * ```jsx\n * timeout={500}\n * ```\n *\n * or individually:\n *\n * ```jsx\n * timeout={{\n * appear: 500,\n * enter: 300,\n * exit: 500,\n * }}\n * ```\n *\n * - `appear` defaults to the value of `enter`\n * - `enter` defaults to `0`\n * - `exit` defaults to `0`\n *\n * @type {number | { enter?: number, exit?: number, appear?: number }}\n */\n timeout: function timeout(props) {\n var pt = _PropTypes.timeoutsShape;\n if (!props.addEndListener) pt = pt.isRequired;\n\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return pt.apply(void 0, [props].concat(args));\n },\n\n /**\n * Add a custom transition end trigger. Called with the transitioning\n * DOM node and a `done` callback. Allows for more fine grained transition end\n * logic. **Note:** Timeouts are still used as a fallback if provided.\n *\n * ```jsx\n * addEndListener={(node, done) => {\n * // use the css transitionend event to mark the finish of a transition\n * node.addEventListener('transitionend', done, false);\n * }}\n * ```\n */\n addEndListener: PropTypes.func,\n\n /**\n * Callback fired before the \"entering\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * @type Function(node: HtmlElement, isAppearing: bool) -> void\n */\n onEnter: PropTypes.func,\n\n /**\n * Callback fired after the \"entering\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEntering: PropTypes.func,\n\n /**\n * Callback fired after the \"entered\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * @type Function(node: HtmlElement, isAppearing: bool) -> void\n */\n onEntered: PropTypes.func,\n\n /**\n * Callback fired before the \"exiting\" status is applied.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExit: PropTypes.func,\n\n /**\n * Callback fired after the \"exiting\" status is applied.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExiting: PropTypes.func,\n\n /**\n * Callback fired after the \"exited\" status is applied.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExited: PropTypes.func // Name the function so it is clearer in the documentation\n\n} : {};\n\nfunction noop() {}\n\nTransition.defaultProps = {\n in: false,\n mountOnEnter: false,\n unmountOnExit: false,\n appear: false,\n enter: true,\n exit: true,\n onEnter: noop,\n onEntering: noop,\n onEntered: noop,\n onExit: noop,\n onExiting: noop,\n onExited: noop\n};\nTransition.UNMOUNTED = 0;\nTransition.EXITED = 1;\nTransition.ENTERING = 2;\nTransition.ENTERED = 3;\nTransition.EXITING = 4;\n\nvar _default = (0, _reactLifecyclesCompat.polyfill)(Transition);\n\nexports.default = _default;","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reactLifecyclesCompat = require(\"react-lifecycles-compat\");\n\nvar _ChildMapping = require(\"./utils/ChildMapping\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nvar values = Object.values || function (obj) {\n return Object.keys(obj).map(function (k) {\n return obj[k];\n });\n};\n\nvar defaultProps = {\n component: 'div',\n childFactory: function childFactory(child) {\n return child;\n }\n /**\n * The `` component manages a set of transition components\n * (`` and ``) in a list. Like with the transition\n * components, `` is a state machine for managing the mounting\n * and unmounting of components over time.\n *\n * Consider the example below. As items are removed or added to the TodoList the\n * `in` prop is toggled automatically by the ``.\n *\n * Note that `` does not define any animation behavior!\n * Exactly _how_ a list item animates is up to the individual transition\n * component. This means you can mix and match animations across different list\n * items.\n */\n\n};\n\nvar TransitionGroup =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(TransitionGroup, _React$Component);\n\n function TransitionGroup(props, context) {\n var _this;\n\n _this = _React$Component.call(this, props, context) || this;\n\n var handleExited = _this.handleExited.bind(_assertThisInitialized(_assertThisInitialized(_this))); // Initial children should all be entering, dependent on appear\n\n\n _this.state = {\n handleExited: handleExited,\n firstRender: true\n };\n return _this;\n }\n\n var _proto = TransitionGroup.prototype;\n\n _proto.getChildContext = function getChildContext() {\n return {\n transitionGroup: {\n isMounting: !this.appeared\n }\n };\n };\n\n _proto.componentDidMount = function componentDidMount() {\n this.appeared = true;\n this.mounted = true;\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.mounted = false;\n };\n\n TransitionGroup.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, _ref) {\n var prevChildMapping = _ref.children,\n handleExited = _ref.handleExited,\n firstRender = _ref.firstRender;\n return {\n children: firstRender ? (0, _ChildMapping.getInitialChildMapping)(nextProps, handleExited) : (0, _ChildMapping.getNextChildMapping)(nextProps, prevChildMapping, handleExited),\n firstRender: false\n };\n };\n\n _proto.handleExited = function handleExited(child, node) {\n var currentChildMapping = (0, _ChildMapping.getChildMapping)(this.props.children);\n if (child.key in currentChildMapping) return;\n\n if (child.props.onExited) {\n child.props.onExited(node);\n }\n\n if (this.mounted) {\n this.setState(function (state) {\n var children = _extends({}, state.children);\n\n delete children[child.key];\n return {\n children: children\n };\n });\n }\n };\n\n _proto.render = function render() {\n var _this$props = this.props,\n Component = _this$props.component,\n childFactory = _this$props.childFactory,\n props = _objectWithoutPropertiesLoose(_this$props, [\"component\", \"childFactory\"]);\n\n var children = values(this.state.children).map(childFactory);\n delete props.appear;\n delete props.enter;\n delete props.exit;\n\n if (Component === null) {\n return children;\n }\n\n return _react.default.createElement(Component, props, children);\n };\n\n return TransitionGroup;\n}(_react.default.Component);\n\nTransitionGroup.childContextTypes = {\n transitionGroup: _propTypes.default.object.isRequired\n};\nTransitionGroup.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /**\n * `` renders a `
` by default. You can change this\n * behavior by providing a `component` prop.\n * If you use React v16+ and would like to avoid a wrapping `
` element\n * you can pass in `component={null}`. This is useful if the wrapping div\n * borks your css styles.\n */\n component: _propTypes.default.any,\n\n /**\n * A set of `` components, that are toggled `in` and out as they\n * leave. the `` will inject specific transition props, so\n * remember to spread them through if you are wrapping the `` as\n * with our `` example.\n *\n * While this component is meant for multiple `Transition` or `CSSTransition`\n * children, sometimes you may want to have a single transition child with\n * content that you want to be transitioned out and in when you change it\n * (e.g. routes, images etc.) In that case you can change the `key` prop of\n * the transition child as you change its content, this will cause\n * `TransitionGroup` to transition the child out and back in.\n */\n children: _propTypes.default.node,\n\n /**\n * A convenience prop that enables or disables appear animations\n * for all children. Note that specifying this will override any defaults set\n * on individual children Transitions.\n */\n appear: _propTypes.default.bool,\n\n /**\n * A convenience prop that enables or disables enter animations\n * for all children. Note that specifying this will override any defaults set\n * on individual children Transitions.\n */\n enter: _propTypes.default.bool,\n\n /**\n * A convenience prop that enables or disables exit animations\n * for all children. Note that specifying this will override any defaults set\n * on individual children Transitions.\n */\n exit: _propTypes.default.bool,\n\n /**\n * You may need to apply reactive updates to a child as it is exiting.\n * This is generally done by using `cloneElement` however in the case of an exiting\n * child the element has already been removed and not accessible to the consumer.\n *\n * If you do need to update a child as it leaves you can provide a `childFactory`\n * to wrap every child, even the ones that are leaving.\n *\n * @type Function(child: ReactElement) -> ReactElement\n */\n childFactory: _propTypes.default.func\n} : {};\nTransitionGroup.defaultProps = defaultProps;\n\nvar _default = (0, _reactLifecyclesCompat.polyfill)(TransitionGroup);\n\nexports.default = _default;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nvar _CSSTransition = _interopRequireDefault(require(\"./CSSTransition\"));\n\nvar _ReplaceTransition = _interopRequireDefault(require(\"./ReplaceTransition\"));\n\nvar _TransitionGroup = _interopRequireDefault(require(\"./TransitionGroup\"));\n\nvar _Transition = _interopRequireDefault(require(\"./Transition\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = {\n Transition: _Transition.default,\n TransitionGroup: _TransitionGroup.default,\n ReplaceTransition: _ReplaceTransition.default,\n CSSTransition: _CSSTransition.default\n};","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = addClass;\n\nvar _hasClass = _interopRequireDefault(require(\"./hasClass\"));\n\nfunction addClass(element, className) {\n if (element.classList) element.classList.add(className);else if (!(0, _hasClass.default)(element, className)) if (typeof element.className === 'string') element.className = element.className + ' ' + className;else element.setAttribute('class', (element.className && element.className.baseVal || '') + ' ' + className);\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.default = hasClass;\n\nfunction hasClass(element, className) {\n if (element.classList) return !!className && element.classList.contains(className);else return (\" \" + (element.className.baseVal || element.className) + \" \").indexOf(\" \" + className + \" \") !== -1;\n}\n\nmodule.exports = exports[\"default\"];","'use strict';\n\nfunction replaceClassName(origClass, classToRemove) {\n return origClass.replace(new RegExp('(^|\\\\s)' + classToRemove + '(?:\\\\s|$)', 'g'), '$1').replace(/\\s+/g, ' ').replace(/^\\s*|\\s*$/g, '');\n}\n\nmodule.exports = function removeClass(element, className) {\n if (element.classList) element.classList.remove(className);else if (typeof element.className === 'string') element.className = replaceClassName(element.className, className);else element.setAttribute('class', replaceClassName(element.className && element.className.baseVal || '', className));\n};","\"use strict\";\n\nexports.__esModule = true;\nexports.getChildMapping = getChildMapping;\nexports.mergeChildMappings = mergeChildMappings;\nexports.getInitialChildMapping = getInitialChildMapping;\nexports.getNextChildMapping = getNextChildMapping;\n\nvar _react = require(\"react\");\n\n/**\n * Given `this.props.children`, return an object mapping key to child.\n *\n * @param {*} children `this.props.children`\n * @return {object} Mapping of key to child\n */\nfunction getChildMapping(children, mapFn) {\n var mapper = function mapper(child) {\n return mapFn && (0, _react.isValidElement)(child) ? mapFn(child) : child;\n };\n\n var result = Object.create(null);\n if (children) _react.Children.map(children, function (c) {\n return c;\n }).forEach(function (child) {\n // run the map function here instead so that the key is the computed one\n result[child.key] = mapper(child);\n });\n return result;\n}\n/**\n * When you're adding or removing children some may be added or removed in the\n * same render pass. We want to show *both* since we want to simultaneously\n * animate elements in and out. This function takes a previous set of keys\n * and a new set of keys and merges them with its best guess of the correct\n * ordering. In the future we may expose some of the utilities in\n * ReactMultiChild to make this easy, but for now React itself does not\n * directly have this concept of the union of prevChildren and nextChildren\n * so we implement it here.\n *\n * @param {object} prev prev children as returned from\n * `ReactTransitionChildMapping.getChildMapping()`.\n * @param {object} next next children as returned from\n * `ReactTransitionChildMapping.getChildMapping()`.\n * @return {object} a key set that contains all keys in `prev` and all keys\n * in `next` in a reasonable order.\n */\n\n\nfunction mergeChildMappings(prev, next) {\n prev = prev || {};\n next = next || {};\n\n function getValueForKey(key) {\n return key in next ? next[key] : prev[key];\n } // For each key of `next`, the list of keys to insert before that key in\n // the combined list\n\n\n var nextKeysPending = Object.create(null);\n var pendingKeys = [];\n\n for (var prevKey in prev) {\n if (prevKey in next) {\n if (pendingKeys.length) {\n nextKeysPending[prevKey] = pendingKeys;\n pendingKeys = [];\n }\n } else {\n pendingKeys.push(prevKey);\n }\n }\n\n var i;\n var childMapping = {};\n\n for (var nextKey in next) {\n if (nextKeysPending[nextKey]) {\n for (i = 0; i < nextKeysPending[nextKey].length; i++) {\n var pendingNextKey = nextKeysPending[nextKey][i];\n childMapping[nextKeysPending[nextKey][i]] = getValueForKey(pendingNextKey);\n }\n }\n\n childMapping[nextKey] = getValueForKey(nextKey);\n } // Finally, add the keys which didn't appear before any key in `next`\n\n\n for (i = 0; i < pendingKeys.length; i++) {\n childMapping[pendingKeys[i]] = getValueForKey(pendingKeys[i]);\n }\n\n return childMapping;\n}\n\nfunction getProp(child, prop, props) {\n return props[prop] != null ? props[prop] : child.props[prop];\n}\n\nfunction getInitialChildMapping(props, onExited) {\n return getChildMapping(props.children, function (child) {\n return (0, _react.cloneElement)(child, {\n onExited: onExited.bind(null, child),\n in: true,\n appear: getProp(child, 'appear', props),\n enter: getProp(child, 'enter', props),\n exit: getProp(child, 'exit', props)\n });\n });\n}\n\nfunction getNextChildMapping(nextProps, prevChildMapping, onExited) {\n var nextChildMapping = getChildMapping(nextProps.children);\n var children = mergeChildMappings(prevChildMapping, nextChildMapping);\n Object.keys(children).forEach(function (key) {\n var child = children[key];\n if (!(0, _react.isValidElement)(child)) return;\n var hasPrev = key in prevChildMapping;\n var hasNext = key in nextChildMapping;\n var prevChild = prevChildMapping[key];\n var isLeaving = (0, _react.isValidElement)(prevChild) && !prevChild.props.in; // item is new (entering)\n\n if (hasNext && (!hasPrev || isLeaving)) {\n // console.log('entering', key)\n children[key] = (0, _react.cloneElement)(child, {\n onExited: onExited.bind(null, child),\n in: true,\n exit: getProp(child, 'exit', nextProps),\n enter: getProp(child, 'enter', nextProps)\n });\n } else if (!hasNext && hasPrev && !isLeaving) {\n // item is old (exiting)\n // console.log('leaving', key)\n children[key] = (0, _react.cloneElement)(child, {\n in: false\n });\n } else if (hasNext && hasPrev && (0, _react.isValidElement)(prevChild)) {\n // item hasn't changed transition states\n // copy over the last transition props;\n // console.log('unchanged', key)\n children[key] = (0, _react.cloneElement)(child, {\n onExited: onExited.bind(null, child),\n in: prevChild.props.in,\n exit: getProp(child, 'exit', nextProps),\n enter: getProp(child, 'enter', nextProps)\n });\n }\n });\n return children;\n}","\"use strict\";\n\nexports.__esModule = true;\nexports.classNamesShape = exports.timeoutsShape = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar timeoutsShape = process.env.NODE_ENV !== 'production' ? _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.shape({\n enter: _propTypes.default.number,\n exit: _propTypes.default.number,\n appear: _propTypes.default.number\n}).isRequired]) : null;\nexports.timeoutsShape = timeoutsShape;\nvar classNamesShape = process.env.NODE_ENV !== 'production' ? _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.shape({\n enter: _propTypes.default.string,\n exit: _propTypes.default.string,\n active: _propTypes.default.string\n}), _propTypes.default.shape({\n enter: _propTypes.default.string,\n enterDone: _propTypes.default.string,\n enterActive: _propTypes.default.string,\n exit: _propTypes.default.string,\n exitDone: _propTypes.default.string,\n exitActive: _propTypes.default.string\n})]) : null;\nexports.classNamesShape = classNamesShape;","/**\n * Given an array and a number N, return a new array which contains every nTh\n * element of the input array. For n below 1, an empty array is returned.\n * If isValid is provided, all candidates must suffice the condition, else undefined is returned.\n * @param {T[]} array An input array.\n * @param {integer} n A number\n * @param {Function} isValid A function to evaluate a candidate form the array\n * @returns {T[]} The result array of the same type as the input array.\n */\nexport function getEveryNthWithCondition(array, n, isValid) {\n if (n < 1) {\n return [];\n }\n if (n === 1 && isValid === undefined) {\n return array;\n }\n var result = [];\n for (var i = 0; i < array.length; i += n) {\n if (isValid === undefined || isValid(array[i]) === true) {\n result.push(array[i]);\n } else {\n return undefined;\n }\n }\n return result;\n}","import _every from \"lodash/every\";\nimport _mapValues from \"lodash/mapValues\";\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { getTicksOfScale, parseScale, checkDomainOfScale, getBandSizeOfAxis } from './ChartUtils';\nimport { findChildByType } from './ReactUtils';\nimport { getPercentValue } from './DataUtils';\nimport { Bar } from '../cartesian/Bar';\n\n/**\n * Calculate the scale function, position, width, height of axes\n * @param {Object} props Latest props\n * @param {Object} axisMap The configuration of axes\n * @param {Object} offset The offset of main part in the svg element\n * @param {String} axisType The type of axes, x-axis or y-axis\n * @param {String} chartName The name of chart\n * @return {Object} Configuration\n */\nexport var formatAxisMap = function formatAxisMap(props, axisMap, offset, axisType, chartName) {\n var width = props.width,\n height = props.height,\n layout = props.layout,\n children = props.children;\n var ids = Object.keys(axisMap);\n var steps = {\n left: offset.left,\n leftMirror: offset.left,\n right: width - offset.right,\n rightMirror: width - offset.right,\n top: offset.top,\n topMirror: offset.top,\n bottom: height - offset.bottom,\n bottomMirror: height - offset.bottom\n };\n var hasBar = !!findChildByType(children, Bar);\n return ids.reduce(function (result, id) {\n var axis = axisMap[id];\n var orientation = axis.orientation,\n domain = axis.domain,\n _axis$padding = axis.padding,\n padding = _axis$padding === void 0 ? {} : _axis$padding,\n mirror = axis.mirror,\n reversed = axis.reversed;\n var offsetKey = \"\".concat(orientation).concat(mirror ? 'Mirror' : '');\n var calculatedPadding, range, x, y, needSpace;\n if (axis.type === 'number' && (axis.padding === 'gap' || axis.padding === 'no-gap')) {\n var diff = domain[1] - domain[0];\n var smallestDistanceBetweenValues = Infinity;\n var sortedValues = axis.categoricalDomain.sort();\n sortedValues.forEach(function (value, index) {\n if (index > 0) {\n smallestDistanceBetweenValues = Math.min((value || 0) - (sortedValues[index - 1] || 0), smallestDistanceBetweenValues);\n }\n });\n var smallestDistanceInPercent = smallestDistanceBetweenValues / diff;\n var rangeWidth = axis.layout === 'vertical' ? offset.height : offset.width;\n if (axis.padding === 'gap') {\n calculatedPadding = smallestDistanceInPercent * rangeWidth / 2;\n }\n if (axis.padding === 'no-gap') {\n var gap = getPercentValue(props.barCategoryGap, smallestDistanceInPercent * rangeWidth);\n var halfBand = smallestDistanceInPercent * rangeWidth / 2;\n calculatedPadding = halfBand - gap - (halfBand - gap) / rangeWidth * gap;\n }\n }\n if (axisType === 'xAxis') {\n range = [offset.left + (padding.left || 0) + (calculatedPadding || 0), offset.left + offset.width - (padding.right || 0) - (calculatedPadding || 0)];\n } else if (axisType === 'yAxis') {\n range = layout === 'horizontal' ? [offset.top + offset.height - (padding.bottom || 0), offset.top + (padding.top || 0)] : [offset.top + (padding.top || 0) + (calculatedPadding || 0), offset.top + offset.height - (padding.bottom || 0) - (calculatedPadding || 0)];\n } else {\n range = axis.range;\n }\n if (reversed) {\n range = [range[1], range[0]];\n }\n var _parseScale = parseScale(axis, chartName, hasBar),\n scale = _parseScale.scale,\n realScaleType = _parseScale.realScaleType;\n scale.domain(domain).range(range);\n checkDomainOfScale(scale);\n var ticks = getTicksOfScale(scale, _objectSpread(_objectSpread({}, axis), {}, {\n realScaleType: realScaleType\n }));\n if (axisType === 'xAxis') {\n needSpace = orientation === 'top' && !mirror || orientation === 'bottom' && mirror;\n x = offset.left;\n y = steps[offsetKey] - needSpace * axis.height;\n } else if (axisType === 'yAxis') {\n needSpace = orientation === 'left' && !mirror || orientation === 'right' && mirror;\n x = steps[offsetKey] - needSpace * axis.width;\n y = offset.top;\n }\n var finalAxis = _objectSpread(_objectSpread(_objectSpread({}, axis), ticks), {}, {\n realScaleType: realScaleType,\n x: x,\n y: y,\n scale: scale,\n width: axisType === 'xAxis' ? offset.width : axis.width,\n height: axisType === 'yAxis' ? offset.height : axis.height\n });\n finalAxis.bandSize = getBandSizeOfAxis(finalAxis, ticks);\n if (!axis.hide && axisType === 'xAxis') {\n steps[offsetKey] += (needSpace ? -1 : 1) * finalAxis.height;\n } else if (!axis.hide) {\n steps[offsetKey] += (needSpace ? -1 : 1) * finalAxis.width;\n }\n return _objectSpread(_objectSpread({}, result), {}, _defineProperty({}, id, finalAxis));\n }, {});\n};\nexport var rectWithPoints = function rectWithPoints(_ref, _ref2) {\n var x1 = _ref.x,\n y1 = _ref.y;\n var x2 = _ref2.x,\n y2 = _ref2.y;\n return {\n x: Math.min(x1, x2),\n y: Math.min(y1, y2),\n width: Math.abs(x2 - x1),\n height: Math.abs(y2 - y1)\n };\n};\n\n/**\n * Compute the x, y, width, and height of a box from two reference points.\n * @param {Object} coords x1, x2, y1, and y2\n * @return {Object} object\n */\nexport var rectWithCoords = function rectWithCoords(_ref3) {\n var x1 = _ref3.x1,\n y1 = _ref3.y1,\n x2 = _ref3.x2,\n y2 = _ref3.y2;\n return rectWithPoints({\n x: x1,\n y: y1\n }, {\n x: x2,\n y: y2\n });\n};\nexport var ScaleHelper = /*#__PURE__*/function () {\n function ScaleHelper(scale) {\n _classCallCheck(this, ScaleHelper);\n this.scale = scale;\n }\n _createClass(ScaleHelper, [{\n key: \"domain\",\n get: function get() {\n return this.scale.domain;\n }\n }, {\n key: \"range\",\n get: function get() {\n return this.scale.range;\n }\n }, {\n key: \"rangeMin\",\n get: function get() {\n return this.range()[0];\n }\n }, {\n key: \"rangeMax\",\n get: function get() {\n return this.range()[1];\n }\n }, {\n key: \"bandwidth\",\n get: function get() {\n return this.scale.bandwidth;\n }\n }, {\n key: \"apply\",\n value: function apply(value) {\n var _ref4 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n bandAware = _ref4.bandAware,\n position = _ref4.position;\n if (value === undefined) {\n return undefined;\n }\n if (position) {\n switch (position) {\n case 'start':\n {\n return this.scale(value);\n }\n case 'middle':\n {\n var offset = this.bandwidth ? this.bandwidth() / 2 : 0;\n return this.scale(value) + offset;\n }\n case 'end':\n {\n var _offset = this.bandwidth ? this.bandwidth() : 0;\n return this.scale(value) + _offset;\n }\n default:\n {\n return this.scale(value);\n }\n }\n }\n if (bandAware) {\n var _offset2 = this.bandwidth ? this.bandwidth() / 2 : 0;\n return this.scale(value) + _offset2;\n }\n return this.scale(value);\n }\n }, {\n key: \"isInRange\",\n value: function isInRange(value) {\n var range = this.range();\n var first = range[0];\n var last = range[range.length - 1];\n return first <= last ? value >= first && value <= last : value >= last && value <= first;\n }\n }], [{\n key: \"create\",\n value: function create(obj) {\n return new ScaleHelper(obj);\n }\n }]);\n return ScaleHelper;\n}();\n_defineProperty(ScaleHelper, \"EPS\", 1e-4);\nexport var createLabeledScales = function createLabeledScales(options) {\n var scales = Object.keys(options).reduce(function (res, key) {\n return _objectSpread(_objectSpread({}, res), {}, _defineProperty({}, key, ScaleHelper.create(options[key])));\n }, {});\n return _objectSpread(_objectSpread({}, scales), {}, {\n apply: function apply(coord) {\n var _ref5 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n bandAware = _ref5.bandAware,\n position = _ref5.position;\n return _mapValues(coord, function (value, label) {\n return scales[label].apply(value, {\n bandAware: bandAware,\n position: position\n });\n });\n },\n isInRange: function isInRange(coord) {\n return _every(coord, function (value, label) {\n return scales[label].isInRange(value);\n });\n }\n });\n};\n\n/** Normalizes the angle so that 0 <= angle < 180.\n * @param {number} angle Angle in degrees.\n * @return {number} the normalized angle with a value of at least 0 and never greater or equal to 180. */\nexport function normalizeAngle(angle) {\n return (angle % 180 + 180) % 180;\n}\n\n/** Calculates the width of the largest horizontal line that fits inside a rectangle that is displayed at an angle.\n * @param {Object} size Width and height of the text in a horizontal position.\n * @param {number} angle Angle in degrees in which the text is displayed.\n * @return {number} The width of the largest horizontal line that fits inside a rectangle that is displayed at an angle.\n */\nexport var getAngledRectangleWidth = function getAngledRectangleWidth(_ref6) {\n var width = _ref6.width,\n height = _ref6.height;\n var angle = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Ensure angle is >= 0 && < 180\n var normalizedAngle = normalizeAngle(angle);\n var angleRadians = normalizedAngle * Math.PI / 180;\n\n /* Depending on the height and width of the rectangle, we may need to use different formulas to calculate the angled\n * width. This threshold defines when each formula should kick in. */\n var angleThreshold = Math.atan(height / width);\n var angledWidth = angleRadians > angleThreshold && angleRadians < Math.PI - angleThreshold ? height / Math.sin(angleRadians) : width / Math.cos(angleRadians);\n return Math.abs(angledWidth);\n};","import _isFunction from \"lodash/isFunction\";\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { mathSign, isNumber } from '../util/DataUtils';\nimport { getStringSize } from '../util/DOMUtils';\nimport { Global } from '../util/Global';\nimport { getEveryNthWithCondition } from '../util/getEveryNthWithCondition';\nimport { getAngledRectangleWidth } from '../util/CartesianUtils';\n\n/**\n * Given an array of ticks, find N, the lowest possible number for which every\n * nTH tick in the ticks array isShow == true and return the array of every nTh tick.\n * @param {CartesianTickItem[]} ticks An array of CartesianTickItem with the\n * information whether they can be shown without overlapping with their neighbour isShow.\n * @returns {CartesianTickItem[]} Every nTh tick in an array.\n */\nexport function getEveryNThTick(ticks) {\n var N = 1;\n var previous = getEveryNthWithCondition(ticks, N, function (tickItem) {\n return tickItem.isShow;\n });\n while (N <= ticks.length) {\n if (previous !== undefined) {\n return previous;\n }\n N++;\n previous = getEveryNthWithCondition(ticks, N, function (tickItem) {\n return tickItem.isShow;\n });\n }\n return ticks.slice(0, 1);\n}\nexport function getNumberIntervalTicks(ticks, interval) {\n return getEveryNthWithCondition(ticks, interval + 1);\n}\nfunction getAngledTickWidth(contentSize, unitSize, angle) {\n var size = {\n width: contentSize.width + unitSize.width,\n height: contentSize.height + unitSize.height\n };\n return getAngledRectangleWidth(size, angle);\n}\nfunction getTicksEnd(_ref) {\n var angle = _ref.angle,\n ticks = _ref.ticks,\n tickFormatter = _ref.tickFormatter,\n viewBox = _ref.viewBox,\n orientation = _ref.orientation,\n minTickGap = _ref.minTickGap,\n unit = _ref.unit,\n fontSize = _ref.fontSize,\n letterSpacing = _ref.letterSpacing;\n var x = viewBox.x,\n y = viewBox.y,\n width = viewBox.width,\n height = viewBox.height;\n var sizeKey = orientation === 'top' || orientation === 'bottom' ? 'width' : 'height';\n // we need add the width of 'unit' only when sizeKey === 'width'\n var unitSize = unit && sizeKey === 'width' ? getStringSize(unit, {\n fontSize: fontSize,\n letterSpacing: letterSpacing\n }) : {\n width: 0,\n height: 0\n };\n var result = (ticks || []).slice();\n var len = result.length;\n var sign = len >= 2 ? mathSign(result[1].coordinate - result[0].coordinate) : 1;\n var start, end;\n if (sign === 1) {\n start = sizeKey === 'width' ? x : y;\n end = sizeKey === 'width' ? x + width : y + height;\n } else {\n start = sizeKey === 'width' ? x + width : y + height;\n end = sizeKey === 'width' ? x : y;\n }\n for (var i = len - 1; i >= 0; i--) {\n var entry = result[i];\n var content = _isFunction(tickFormatter) ? tickFormatter(entry.value, len - i - 1) : entry.value;\n // Recharts only supports angles when sizeKey === 'width'\n var size = sizeKey === 'width' ? getAngledTickWidth(getStringSize(content, {\n fontSize: fontSize,\n letterSpacing: letterSpacing\n }), unitSize, angle) : getStringSize(content, {\n fontSize: fontSize,\n letterSpacing: letterSpacing\n })[sizeKey];\n if (i === len - 1) {\n var gap = sign * (entry.coordinate + sign * size / 2 - end);\n result[i] = entry = _objectSpread(_objectSpread({}, entry), {}, {\n tickCoord: gap > 0 ? entry.coordinate - gap * sign : entry.coordinate\n });\n } else {\n result[i] = entry = _objectSpread(_objectSpread({}, entry), {}, {\n tickCoord: entry.coordinate\n });\n }\n var isShow = sign * (entry.tickCoord - sign * size / 2 - start) >= 0 && sign * (entry.tickCoord + sign * size / 2 - end) <= 0;\n if (isShow) {\n end = entry.tickCoord - sign * (size / 2 + minTickGap);\n result[i] = _objectSpread(_objectSpread({}, entry), {}, {\n isShow: true\n });\n }\n }\n return result;\n}\nfunction getTicksStart(_ref2, preserveEnd) {\n var angle = _ref2.angle,\n ticks = _ref2.ticks,\n tickFormatter = _ref2.tickFormatter,\n viewBox = _ref2.viewBox,\n orientation = _ref2.orientation,\n minTickGap = _ref2.minTickGap,\n unit = _ref2.unit,\n fontSize = _ref2.fontSize,\n letterSpacing = _ref2.letterSpacing;\n var x = viewBox.x,\n y = viewBox.y,\n width = viewBox.width,\n height = viewBox.height;\n var sizeKey = orientation === 'top' || orientation === 'bottom' ? 'width' : 'height';\n var result = (ticks || []).slice();\n // we need add the width of 'unit' only when sizeKey === 'width'\n var unitSize = unit && sizeKey === 'width' ? getStringSize(unit, {\n fontSize: fontSize,\n letterSpacing: letterSpacing\n }) : {\n width: 0,\n height: 0\n };\n var len = result.length;\n var sign = len >= 2 ? mathSign(result[1].coordinate - result[0].coordinate) : 1;\n var start, end;\n if (sign === 1) {\n start = sizeKey === 'width' ? x : y;\n end = sizeKey === 'width' ? x + width : y + height;\n } else {\n start = sizeKey === 'width' ? x + width : y + height;\n end = sizeKey === 'width' ? x : y;\n }\n if (preserveEnd) {\n // Try to guarantee the tail to be displayed\n var tail = ticks[len - 1];\n var tailContent = _isFunction(tickFormatter) ? tickFormatter(tail.value, len - 1) : tail.value;\n // Recharts only supports angles when sizeKey === 'width'\n var tailSize = sizeKey === 'width' ? getAngledTickWidth(getStringSize(tailContent, {\n fontSize: fontSize,\n letterSpacing: letterSpacing\n }), unitSize, angle) : getStringSize(tailContent, {\n fontSize: fontSize,\n letterSpacing: letterSpacing\n })[sizeKey];\n var tailGap = sign * (tail.coordinate + sign * tailSize / 2 - end);\n result[len - 1] = tail = _objectSpread(_objectSpread({}, tail), {}, {\n tickCoord: tailGap > 0 ? tail.coordinate - tailGap * sign : tail.coordinate\n });\n var isTailShow = sign * (tail.tickCoord - sign * tailSize / 2 - start) >= 0 && sign * (tail.tickCoord + sign * tailSize / 2 - end) <= 0;\n if (isTailShow) {\n end = tail.tickCoord - sign * (tailSize / 2 + minTickGap);\n result[len - 1] = _objectSpread(_objectSpread({}, tail), {}, {\n isShow: true\n });\n }\n }\n var count = preserveEnd ? len - 1 : len;\n for (var i = 0; i < count; i++) {\n var entry = result[i];\n var content = _isFunction(tickFormatter) ? tickFormatter(entry.value, i) : entry.value;\n var size = sizeKey === 'width' ? getAngledTickWidth(getStringSize(content, {\n fontSize: fontSize,\n letterSpacing: letterSpacing\n }), unitSize, angle) : getStringSize(content, {\n fontSize: fontSize,\n letterSpacing: letterSpacing\n })[sizeKey];\n if (i === 0) {\n var gap = sign * (entry.coordinate - sign * size / 2 - start);\n result[i] = entry = _objectSpread(_objectSpread({}, entry), {}, {\n tickCoord: gap < 0 ? entry.coordinate - gap * sign : entry.coordinate\n });\n } else {\n result[i] = entry = _objectSpread(_objectSpread({}, entry), {}, {\n tickCoord: entry.coordinate\n });\n }\n var isShow = sign * (entry.tickCoord - sign * size / 2 - start) >= 0 && sign * (entry.tickCoord + sign * size / 2 - end) <= 0;\n if (isShow) {\n start = entry.tickCoord + sign * (size / 2 + minTickGap);\n result[i] = _objectSpread(_objectSpread({}, entry), {}, {\n isShow: true\n });\n }\n }\n return result;\n}\nexport function getTicks(props, fontSize, letterSpacing) {\n var tick = props.tick,\n ticks = props.ticks,\n viewBox = props.viewBox,\n minTickGap = props.minTickGap,\n orientation = props.orientation,\n interval = props.interval,\n tickFormatter = props.tickFormatter,\n unit = props.unit,\n angle = props.angle;\n if (!ticks || !ticks.length || !tick) {\n return [];\n }\n if (isNumber(interval) || Global.isSsr) {\n return getNumberIntervalTicks(ticks, typeof interval === 'number' && isNumber(interval) ? interval : 0);\n }\n var candidates = [];\n if (interval === 'equidistantPreserveStart') {\n candidates = getTicksStart({\n angle: angle,\n ticks: ticks,\n tickFormatter: tickFormatter,\n viewBox: viewBox,\n orientation: orientation,\n minTickGap: minTickGap,\n unit: unit,\n fontSize: fontSize,\n letterSpacing: letterSpacing\n });\n return getEveryNThTick(candidates);\n }\n if (interval === 'preserveStart' || interval === 'preserveStartEnd') {\n candidates = getTicksStart({\n angle: angle,\n ticks: ticks,\n tickFormatter: tickFormatter,\n viewBox: viewBox,\n orientation: orientation,\n minTickGap: minTickGap,\n unit: unit,\n fontSize: fontSize,\n letterSpacing: letterSpacing\n }, interval === 'preserveStartEnd');\n } else {\n candidates = getTicksEnd({\n angle: angle,\n ticks: ticks,\n tickFormatter: tickFormatter,\n viewBox: viewBox,\n orientation: orientation,\n minTickGap: minTickGap,\n unit: unit,\n fontSize: fontSize,\n letterSpacing: letterSpacing\n });\n }\n return candidates.filter(function (entry) {\n return entry.isShow;\n });\n}","import _isNil from \"lodash/isNil\";\nimport _sortBy from \"lodash/sortBy\";\nimport _isArray from \"lodash/isArray\";\n/**\n * @fileOverview Default Tooltip Content\n */\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i[\"return\"] && (_r = _i[\"return\"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React from 'react';\nimport classNames from 'classnames';\nimport { isNumOrStr } from '../util/DataUtils';\nfunction defaultFormatter(value) {\n return _isArray(value) && isNumOrStr(value[0]) && isNumOrStr(value[1]) ? value.join(' ~ ') : value;\n}\nexport var DefaultTooltipContent = function DefaultTooltipContent(props) {\n var _props$separator = props.separator,\n separator = _props$separator === void 0 ? ' : ' : _props$separator,\n _props$contentStyle = props.contentStyle,\n contentStyle = _props$contentStyle === void 0 ? {} : _props$contentStyle,\n _props$itemStyle = props.itemStyle,\n itemStyle = _props$itemStyle === void 0 ? {} : _props$itemStyle,\n _props$labelStyle = props.labelStyle,\n labelStyle = _props$labelStyle === void 0 ? {} : _props$labelStyle,\n payload = props.payload,\n formatter = props.formatter,\n itemSorter = props.itemSorter,\n wrapperClassName = props.wrapperClassName,\n labelClassName = props.labelClassName,\n label = props.label,\n labelFormatter = props.labelFormatter;\n var renderContent = function renderContent() {\n if (payload && payload.length) {\n var listStyle = {\n padding: 0,\n margin: 0\n };\n var items = (itemSorter ? _sortBy(payload, itemSorter) : payload).map(function (entry, i) {\n if (entry.type === 'none') {\n return null;\n }\n var finalItemStyle = _objectSpread({\n display: 'block',\n paddingTop: 4,\n paddingBottom: 4,\n color: entry.color || '#000'\n }, itemStyle);\n var finalFormatter = entry.formatter || formatter || defaultFormatter;\n var value = entry.value,\n name = entry.name;\n var finalValue = value;\n var finalName = name;\n if (finalFormatter && finalValue != null && finalName != null) {\n var formatted = finalFormatter(value, name, entry, i, payload);\n if (Array.isArray(formatted)) {\n var _formatted = _slicedToArray(formatted, 2);\n finalValue = _formatted[0];\n finalName = _formatted[1];\n } else {\n finalValue = formatted;\n }\n }\n return (\n /*#__PURE__*/\n // eslint-disable-next-line react/no-array-index-key\n React.createElement(\"li\", {\n className: \"recharts-tooltip-item\",\n key: \"tooltip-item-\".concat(i),\n style: finalItemStyle\n }, isNumOrStr(finalName) ? /*#__PURE__*/React.createElement(\"span\", {\n className: \"recharts-tooltip-item-name\"\n }, finalName) : null, isNumOrStr(finalName) ? /*#__PURE__*/React.createElement(\"span\", {\n className: \"recharts-tooltip-item-separator\"\n }, separator) : null, /*#__PURE__*/React.createElement(\"span\", {\n className: \"recharts-tooltip-item-value\"\n }, finalValue), /*#__PURE__*/React.createElement(\"span\", {\n className: \"recharts-tooltip-item-unit\"\n }, entry.unit || ''))\n );\n });\n return /*#__PURE__*/React.createElement(\"ul\", {\n className: \"recharts-tooltip-item-list\",\n style: listStyle\n }, items);\n }\n return null;\n };\n var finalStyle = _objectSpread({\n margin: 0,\n padding: 10,\n backgroundColor: '#fff',\n border: '1px solid #ccc',\n whiteSpace: 'nowrap'\n }, contentStyle);\n var finalLabelStyle = _objectSpread({\n margin: 0\n }, labelStyle);\n var hasLabel = !_isNil(label);\n var finalLabel = hasLabel ? label : '';\n var wrapperCN = classNames('recharts-default-tooltip', wrapperClassName);\n var labelCN = classNames('recharts-tooltip-label', labelClassName);\n if (hasLabel && labelFormatter && payload !== undefined && payload !== null) {\n finalLabel = labelFormatter(label, payload);\n }\n return /*#__PURE__*/React.createElement(\"div\", {\n className: wrapperCN,\n style: finalStyle\n }, /*#__PURE__*/React.createElement(\"p\", {\n className: labelCN,\n style: finalLabelStyle\n }, /*#__PURE__*/React.isValidElement(finalLabel) ? finalLabel : \"\".concat(finalLabel)), renderContent());\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nimport _isNil from \"lodash/isNil\";\nimport _isFunction from \"lodash/isFunction\";\nimport _uniqBy from \"lodash/uniqBy\";\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i[\"return\"] && (_r = _i[\"return\"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n/**\n * @fileOverview Tooltip\n */\nimport React, { useEffect, useState, useRef, useCallback } from 'react';\nimport { translateStyle } from 'react-smooth';\nimport classNames from 'classnames';\nimport { DefaultTooltipContent } from './DefaultTooltipContent';\nimport { Global } from '../util/Global';\nimport { isNumber } from '../util/DataUtils';\nvar CLS_PREFIX = 'recharts-tooltip-wrapper';\nvar EPS = 1;\nfunction defaultUniqBy(entry) {\n return entry.dataKey;\n}\nfunction getUniqPayload(option, payload) {\n if (option === true) {\n return _uniqBy(payload, defaultUniqBy);\n }\n if (_isFunction(option)) {\n return _uniqBy(payload, option);\n }\n return payload;\n}\nfunction renderContent(content, props) {\n if ( /*#__PURE__*/React.isValidElement(content)) {\n return /*#__PURE__*/React.cloneElement(content, props);\n }\n if (_isFunction(content)) {\n return /*#__PURE__*/React.createElement(content, props);\n }\n return /*#__PURE__*/React.createElement(DefaultTooltipContent, props);\n}\nvar tooltipDefaultProps = {\n active: false,\n allowEscapeViewBox: {\n x: false,\n y: false\n },\n reverseDirection: {\n x: false,\n y: false\n },\n offset: 10,\n viewBox: {\n x: 0,\n y: 0,\n height: 0,\n width: 0\n },\n coordinate: {\n x: 0,\n y: 0\n },\n // this doesn't exist on TooltipProps\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n cursorStyle: {},\n separator: ' : ',\n wrapperStyle: {},\n contentStyle: {},\n itemStyle: {},\n labelStyle: {},\n cursor: true,\n trigger: 'hover',\n isAnimationActive: !Global.isSsr,\n animationEasing: 'ease',\n animationDuration: 400,\n filterNull: true,\n useTranslate3d: false\n};\nexport var Tooltip = function Tooltip(props) {\n var _classNames;\n var _useState = useState(-1),\n _useState2 = _slicedToArray(_useState, 2),\n boxWidth = _useState2[0],\n setBoxWidth = _useState2[1];\n var _useState3 = useState(-1),\n _useState4 = _slicedToArray(_useState3, 2),\n boxHeight = _useState4[0],\n setBoxHeight = _useState4[1];\n var _useState5 = useState(false),\n _useState6 = _slicedToArray(_useState5, 2),\n dismissed = _useState6[0],\n setDismissed = _useState6[1];\n var _useState7 = useState({\n x: 0,\n y: 0\n }),\n _useState8 = _slicedToArray(_useState7, 2),\n dismissedAtCoordinate = _useState8[0],\n setDismissedAtCoordinate = _useState8[1];\n var wrapperNode = useRef();\n var allowEscapeViewBox = props.allowEscapeViewBox,\n reverseDirection = props.reverseDirection,\n coordinate = props.coordinate,\n offset = props.offset,\n position = props.position,\n viewBox = props.viewBox;\n var handleKeyDown = useCallback(function (event) {\n if (event.key === 'Escape') {\n setDismissed(true);\n setDismissedAtCoordinate(function (prev) {\n return _objectSpread(_objectSpread({}, prev), {}, {\n x: coordinate === null || coordinate === void 0 ? void 0 : coordinate.x,\n y: coordinate === null || coordinate === void 0 ? void 0 : coordinate.y\n });\n });\n }\n }, [coordinate === null || coordinate === void 0 ? void 0 : coordinate.x, coordinate === null || coordinate === void 0 ? void 0 : coordinate.y]);\n useEffect(function () {\n var updateBBox = function updateBBox() {\n if (dismissed) {\n document.removeEventListener('keydown', handleKeyDown);\n if ((coordinate === null || coordinate === void 0 ? void 0 : coordinate.x) !== dismissedAtCoordinate.x || (coordinate === null || coordinate === void 0 ? void 0 : coordinate.y) !== dismissedAtCoordinate.y) {\n setDismissed(false);\n }\n } else {\n document.addEventListener('keydown', handleKeyDown);\n }\n if (wrapperNode.current && wrapperNode.current.getBoundingClientRect) {\n var box = wrapperNode.current.getBoundingClientRect();\n if (Math.abs(box.width - boxWidth) > EPS || Math.abs(box.height - boxHeight) > EPS) {\n setBoxWidth(box.width);\n setBoxHeight(box.height);\n }\n } else if (boxWidth !== -1 || boxHeight !== -1) {\n setBoxWidth(-1);\n setBoxHeight(-1);\n }\n };\n updateBBox();\n return function () {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [boxHeight, boxWidth, coordinate, dismissed, dismissedAtCoordinate.x, dismissedAtCoordinate.y, handleKeyDown]);\n var getTranslate = function getTranslate(_ref) {\n var key = _ref.key,\n tooltipDimension = _ref.tooltipDimension,\n viewBoxDimension = _ref.viewBoxDimension;\n if (position && isNumber(position[key])) {\n return position[key];\n }\n var negative = coordinate[key] - tooltipDimension - offset;\n var positive = coordinate[key] + offset;\n if (allowEscapeViewBox !== null && allowEscapeViewBox !== void 0 && allowEscapeViewBox[key]) {\n return reverseDirection[key] ? negative : positive;\n }\n if (reverseDirection !== null && reverseDirection !== void 0 && reverseDirection[key]) {\n var _tooltipBoundary = negative;\n var _viewBoxBoundary = viewBox[key];\n if (_tooltipBoundary < _viewBoxBoundary) {\n return Math.max(positive, viewBox[key]);\n }\n return Math.max(negative, viewBox[key]);\n }\n var tooltipBoundary = positive + tooltipDimension;\n var viewBoxBoundary = viewBox[key] + viewBoxDimension;\n if (tooltipBoundary > viewBoxBoundary) {\n return Math.max(negative, viewBox[key]);\n }\n return Math.max(positive, viewBox[key]);\n };\n var payload = props.payload,\n payloadUniqBy = props.payloadUniqBy,\n filterNull = props.filterNull,\n active = props.active,\n wrapperStyle = props.wrapperStyle,\n useTranslate3d = props.useTranslate3d,\n isAnimationActive = props.isAnimationActive,\n animationDuration = props.animationDuration,\n animationEasing = props.animationEasing;\n var finalPayload = getUniqPayload(payloadUniqBy, filterNull && payload && payload.length ? payload.filter(function (entry) {\n return !_isNil(entry.value);\n }) : payload);\n var hasPayload = finalPayload && finalPayload.length;\n var content = props.content;\n var outerStyle = _objectSpread({\n pointerEvents: 'none',\n visibility: !dismissed && active && hasPayload ? 'visible' : 'hidden',\n position: 'absolute',\n top: 0,\n left: 0\n }, wrapperStyle);\n var translateX, translateY;\n if (position && isNumber(position.x) && isNumber(position.y)) {\n translateX = position.x;\n translateY = position.y;\n } else if (boxWidth > 0 && boxHeight > 0 && coordinate) {\n translateX = getTranslate({\n key: 'x',\n tooltipDimension: boxWidth,\n viewBoxDimension: viewBox.width\n });\n translateY = getTranslate({\n key: 'y',\n tooltipDimension: boxHeight,\n viewBoxDimension: viewBox.height\n });\n } else {\n outerStyle.visibility = 'hidden';\n }\n outerStyle = _objectSpread(_objectSpread({}, translateStyle({\n transform: useTranslate3d ? \"translate3d(\".concat(translateX, \"px, \").concat(translateY, \"px, 0)\") : \"translate(\".concat(translateX, \"px, \").concat(translateY, \"px)\")\n })), outerStyle);\n if (isAnimationActive && active) {\n outerStyle = _objectSpread(_objectSpread({}, translateStyle({\n transition: \"transform \".concat(animationDuration, \"ms \").concat(animationEasing)\n })), outerStyle);\n }\n var cls = classNames(CLS_PREFIX, (_classNames = {}, _defineProperty(_classNames, \"\".concat(CLS_PREFIX, \"-right\"), isNumber(translateX) && coordinate && isNumber(coordinate.x) && translateX >= coordinate.x), _defineProperty(_classNames, \"\".concat(CLS_PREFIX, \"-left\"), isNumber(translateX) && coordinate && isNumber(coordinate.x) && translateX < coordinate.x), _defineProperty(_classNames, \"\".concat(CLS_PREFIX, \"-bottom\"), isNumber(translateY) && coordinate && isNumber(coordinate.y) && translateY >= coordinate.y), _defineProperty(_classNames, \"\".concat(CLS_PREFIX, \"-top\"), isNumber(translateY) && coordinate && isNumber(coordinate.y) && translateY < coordinate.y), _classNames));\n return (\n /*#__PURE__*/\n // ESLint is disabled to allow listening to the `Escape` key. Refer to\n // https://github.com/recharts/recharts/pull/2925\n // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions\n React.createElement(\"div\", {\n tabIndex: -1,\n role: \"dialog\",\n className: cls,\n style: outerStyle,\n ref: wrapperNode\n }, renderContent(content, _objectSpread(_objectSpread({}, props), {}, {\n payload: finalPayload\n })))\n );\n};\n\n// needs to be set so that renderByOrder can find the correct handler function\nTooltip.displayName = 'Tooltip';\n\n/**\n * needs to be set so that renderByOrder can access an have default values for\n * children.props when there are no props set by the consumer\n * doesn't work if using default parameters\n */\nTooltip.defaultProps = tooltipDefaultProps;","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/**\n * @fileOverview Cross\n */\nimport React from 'react';\nimport classNames from 'classnames';\nimport { isNumber } from '../util/DataUtils';\nimport { filterProps } from '../util/ReactUtils';\nvar getPath = function getPath(x, y, width, height, top, left) {\n return \"M\".concat(x, \",\").concat(top, \"v\").concat(height, \"M\").concat(left, \",\").concat(y, \"h\").concat(width);\n};\nexport var Cross = function Cross(props) {\n var x = props.x,\n y = props.y,\n width = props.width,\n height = props.height,\n top = props.top,\n left = props.left,\n className = props.className;\n if (!isNumber(x) || !isNumber(y) || !isNumber(width) || !isNumber(height) || !isNumber(top) || !isNumber(left)) {\n return null;\n }\n return /*#__PURE__*/React.createElement(\"path\", _extends({}, filterProps(props, true), {\n className: classNames('recharts-cross', className),\n d: getPath(x, y, width, height, top, left)\n }));\n};\nCross.defaultProps = {\n x: 0,\n y: 0,\n top: 0,\n left: 0,\n width: 0,\n height: 0\n};","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/**\n * @fileOverview Dot\n */\nimport React from 'react';\nimport classNames from 'classnames';\nimport { adaptEventHandlers } from '../util/types';\nimport { filterProps } from '../util/ReactUtils';\nexport var Dot = function Dot(props) {\n var cx = props.cx,\n cy = props.cy,\n r = props.r,\n className = props.className;\n var layerClass = classNames('recharts-dot', className);\n if (cx === +cx && cy === +cy && r === +r) {\n return /*#__PURE__*/React.createElement(\"circle\", _extends({}, filterProps(props), adaptEventHandlers(props), {\n className: layerClass,\n cx: cx,\n cy: cy,\n r: r\n }));\n }\n return null;\n};","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i[\"return\"] && (_r = _i[\"return\"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n/**\n * @fileOverview Rectangle\n */\nimport React, { useLayoutEffect, useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport Animate from 'react-smooth';\nimport { filterProps } from '../util/ReactUtils';\nvar getRectanglePath = function getRectanglePath(x, y, width, height, radius) {\n var maxRadius = Math.min(Math.abs(width) / 2, Math.abs(height) / 2);\n var ySign = height >= 0 ? 1 : -1;\n var xSign = width >= 0 ? 1 : -1;\n var clockWise = height >= 0 && width >= 0 || height < 0 && width < 0 ? 1 : 0;\n var path;\n if (maxRadius > 0 && radius instanceof Array) {\n var newRadius = [0, 0, 0, 0];\n for (var i = 0, len = 4; i < len; i++) {\n newRadius[i] = radius[i] > maxRadius ? maxRadius : radius[i];\n }\n path = \"M\".concat(x, \",\").concat(y + ySign * newRadius[0]);\n if (newRadius[0] > 0) {\n path += \"A \".concat(newRadius[0], \",\").concat(newRadius[0], \",0,0,\").concat(clockWise, \",\").concat(x + xSign * newRadius[0], \",\").concat(y);\n }\n path += \"L \".concat(x + width - xSign * newRadius[1], \",\").concat(y);\n if (newRadius[1] > 0) {\n path += \"A \".concat(newRadius[1], \",\").concat(newRadius[1], \",0,0,\").concat(clockWise, \",\\n \").concat(x + width, \",\").concat(y + ySign * newRadius[1]);\n }\n path += \"L \".concat(x + width, \",\").concat(y + height - ySign * newRadius[2]);\n if (newRadius[2] > 0) {\n path += \"A \".concat(newRadius[2], \",\").concat(newRadius[2], \",0,0,\").concat(clockWise, \",\\n \").concat(x + width - xSign * newRadius[2], \",\").concat(y + height);\n }\n path += \"L \".concat(x + xSign * newRadius[3], \",\").concat(y + height);\n if (newRadius[3] > 0) {\n path += \"A \".concat(newRadius[3], \",\").concat(newRadius[3], \",0,0,\").concat(clockWise, \",\\n \").concat(x, \",\").concat(y + height - ySign * newRadius[3]);\n }\n path += 'Z';\n } else if (maxRadius > 0 && radius === +radius && radius > 0) {\n var _newRadius = Math.min(maxRadius, radius);\n path = \"M \".concat(x, \",\").concat(y + ySign * _newRadius, \"\\n A \").concat(_newRadius, \",\").concat(_newRadius, \",0,0,\").concat(clockWise, \",\").concat(x + xSign * _newRadius, \",\").concat(y, \"\\n L \").concat(x + width - xSign * _newRadius, \",\").concat(y, \"\\n A \").concat(_newRadius, \",\").concat(_newRadius, \",0,0,\").concat(clockWise, \",\").concat(x + width, \",\").concat(y + ySign * _newRadius, \"\\n L \").concat(x + width, \",\").concat(y + height - ySign * _newRadius, \"\\n A \").concat(_newRadius, \",\").concat(_newRadius, \",0,0,\").concat(clockWise, \",\").concat(x + width - xSign * _newRadius, \",\").concat(y + height, \"\\n L \").concat(x + xSign * _newRadius, \",\").concat(y + height, \"\\n A \").concat(_newRadius, \",\").concat(_newRadius, \",0,0,\").concat(clockWise, \",\").concat(x, \",\").concat(y + height - ySign * _newRadius, \" Z\");\n } else {\n path = \"M \".concat(x, \",\").concat(y, \" h \").concat(width, \" v \").concat(height, \" h \").concat(-width, \" Z\");\n }\n return path;\n};\nexport var isInRectangle = function isInRectangle(point, rect) {\n if (!point || !rect) {\n return false;\n }\n var px = point.x,\n py = point.y;\n var x = rect.x,\n y = rect.y,\n width = rect.width,\n height = rect.height;\n if (Math.abs(width) > 0 && Math.abs(height) > 0) {\n var minX = Math.min(x, x + width);\n var maxX = Math.max(x, x + width);\n var minY = Math.min(y, y + height);\n var maxY = Math.max(y, y + height);\n return px >= minX && px <= maxX && py >= minY && py <= maxY;\n }\n return false;\n};\nexport var Rectangle = function Rectangle(props) {\n var pathRef = useRef();\n var _useState = useState(-1),\n _useState2 = _slicedToArray(_useState, 2),\n totalLength = _useState2[0],\n setTotalLength = _useState2[1];\n useLayoutEffect(function () {\n if (pathRef.current && pathRef.current.getTotalLength) {\n try {\n var pathTotalLength = pathRef.current.getTotalLength();\n if (pathTotalLength) {\n setTotalLength(pathTotalLength);\n }\n } catch (err) {\n // calculate total length error\n }\n }\n }, []);\n var x = props.x,\n y = props.y,\n width = props.width,\n height = props.height,\n radius = props.radius,\n className = props.className;\n var animationEasing = props.animationEasing,\n animationDuration = props.animationDuration,\n animationBegin = props.animationBegin,\n isAnimationActive = props.isAnimationActive,\n isUpdateAnimationActive = props.isUpdateAnimationActive;\n if (x !== +x || y !== +y || width !== +width || height !== +height || width === 0 || height === 0) {\n return null;\n }\n var layerClass = classNames('recharts-rectangle', className);\n if (!isUpdateAnimationActive) {\n return /*#__PURE__*/React.createElement(\"path\", _extends({}, filterProps(props, true), {\n className: layerClass,\n d: getRectanglePath(x, y, width, height, radius)\n }));\n }\n return /*#__PURE__*/React.createElement(Animate, {\n canBegin: totalLength > 0,\n from: {\n width: width,\n height: height,\n x: x,\n y: y\n },\n to: {\n width: width,\n height: height,\n x: x,\n y: y\n },\n duration: animationDuration,\n animationEasing: animationEasing,\n isActive: isUpdateAnimationActive\n }, function (_ref) {\n var currWidth = _ref.width,\n currHeight = _ref.height,\n currX = _ref.x,\n currY = _ref.y;\n return /*#__PURE__*/React.createElement(Animate, {\n canBegin: totalLength > 0,\n from: \"0px \".concat(totalLength === -1 ? 1 : totalLength, \"px\"),\n to: \"\".concat(totalLength, \"px 0px\"),\n attributeName: \"strokeDasharray\",\n begin: animationBegin,\n duration: animationDuration,\n isActive: isAnimationActive,\n easing: animationEasing\n }, /*#__PURE__*/React.createElement(\"path\", _extends({}, filterProps(props, true), {\n className: layerClass,\n d: getRectanglePath(currX, currY, currWidth, currHeight, radius),\n ref: pathRef\n })));\n });\n};\nRectangle.defaultProps = {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n // The radius of border\n // The radius of four corners when radius is a number\n // The radius of left-top, right-top, right-bottom, left-bottom when radius is an array\n radius: 0,\n isAnimationActive: false,\n isUpdateAnimationActive: false,\n animationBegin: 0,\n animationDuration: 1500,\n animationEasing: 'ease'\n};","import _isFunction from \"lodash/isFunction\";\nimport _get from \"lodash/get\";\nvar _excluded = [\"viewBox\"],\n _excluded2 = [\"viewBox\"],\n _excluded3 = [\"ticks\"];\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/**\n * @fileOverview Cartesian Axis\n */\nimport React, { Component } from 'react';\nimport classNames from 'classnames';\nimport { shallowEqual } from '../util/ShallowEqual';\nimport { Layer } from '../container/Layer';\nimport { Text } from '../component/Text';\nimport { Label } from '../component/Label';\nimport { isNumber } from '../util/DataUtils';\nimport { adaptEventsOfChild } from '../util/types';\nimport { filterProps } from '../util/ReactUtils';\nimport { getTicks } from './getTicks';\nexport var CartesianAxis = /*#__PURE__*/function (_Component) {\n _inherits(CartesianAxis, _Component);\n var _super = _createSuper(CartesianAxis);\n function CartesianAxis(props) {\n var _this;\n _classCallCheck(this, CartesianAxis);\n _this = _super.call(this, props);\n _this.state = {\n fontSize: '',\n letterSpacing: ''\n };\n return _this;\n }\n _createClass(CartesianAxis, [{\n key: \"shouldComponentUpdate\",\n value: function shouldComponentUpdate(_ref, nextState) {\n var viewBox = _ref.viewBox,\n restProps = _objectWithoutProperties(_ref, _excluded);\n // props.viewBox is sometimes generated every time -\n // check that specially as object equality is likely to fail\n var _this$props = this.props,\n viewBoxOld = _this$props.viewBox,\n restPropsOld = _objectWithoutProperties(_this$props, _excluded2);\n return !shallowEqual(viewBox, viewBoxOld) || !shallowEqual(restProps, restPropsOld) || !shallowEqual(nextState, this.state);\n }\n }, {\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var htmlLayer = this.layerReference;\n if (!htmlLayer) return;\n var tick = htmlLayer.getElementsByClassName('recharts-cartesian-axis-tick-value')[0];\n if (tick) {\n this.setState({\n fontSize: window.getComputedStyle(tick).fontSize,\n letterSpacing: window.getComputedStyle(tick).letterSpacing\n });\n }\n }\n\n /**\n * Calculate the coordinates of endpoints in ticks\n * @param {Object} data The data of a simple tick\n * @return {Object} (x1, y1): The coordinate of endpoint close to tick text\n * (x2, y2): The coordinate of endpoint close to axis\n */\n }, {\n key: \"getTickLineCoord\",\n value: function getTickLineCoord(data) {\n var _this$props2 = this.props,\n x = _this$props2.x,\n y = _this$props2.y,\n width = _this$props2.width,\n height = _this$props2.height,\n orientation = _this$props2.orientation,\n tickSize = _this$props2.tickSize,\n mirror = _this$props2.mirror,\n tickMargin = _this$props2.tickMargin;\n var x1, x2, y1, y2, tx, ty;\n var sign = mirror ? -1 : 1;\n var finalTickSize = data.tickSize || tickSize;\n var tickCoord = isNumber(data.tickCoord) ? data.tickCoord : data.coordinate;\n switch (orientation) {\n case 'top':\n x1 = x2 = data.coordinate;\n y2 = y + +!mirror * height;\n y1 = y2 - sign * finalTickSize;\n ty = y1 - sign * tickMargin;\n tx = tickCoord;\n break;\n case 'left':\n y1 = y2 = data.coordinate;\n x2 = x + +!mirror * width;\n x1 = x2 - sign * finalTickSize;\n tx = x1 - sign * tickMargin;\n ty = tickCoord;\n break;\n case 'right':\n y1 = y2 = data.coordinate;\n x2 = x + +mirror * width;\n x1 = x2 + sign * finalTickSize;\n tx = x1 + sign * tickMargin;\n ty = tickCoord;\n break;\n default:\n x1 = x2 = data.coordinate;\n y2 = y + +mirror * height;\n y1 = y2 + sign * finalTickSize;\n ty = y1 + sign * tickMargin;\n tx = tickCoord;\n break;\n }\n return {\n line: {\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2\n },\n tick: {\n x: tx,\n y: ty\n }\n };\n }\n }, {\n key: \"getTickTextAnchor\",\n value: function getTickTextAnchor() {\n var _this$props3 = this.props,\n orientation = _this$props3.orientation,\n mirror = _this$props3.mirror;\n var textAnchor;\n switch (orientation) {\n case 'left':\n textAnchor = mirror ? 'start' : 'end';\n break;\n case 'right':\n textAnchor = mirror ? 'end' : 'start';\n break;\n default:\n textAnchor = 'middle';\n break;\n }\n return textAnchor;\n }\n }, {\n key: \"getTickVerticalAnchor\",\n value: function getTickVerticalAnchor() {\n var _this$props4 = this.props,\n orientation = _this$props4.orientation,\n mirror = _this$props4.mirror;\n var verticalAnchor = 'end';\n switch (orientation) {\n case 'left':\n case 'right':\n verticalAnchor = 'middle';\n break;\n case 'top':\n verticalAnchor = mirror ? 'start' : 'end';\n break;\n default:\n verticalAnchor = mirror ? 'end' : 'start';\n break;\n }\n return verticalAnchor;\n }\n }, {\n key: \"renderAxisLine\",\n value: function renderAxisLine() {\n var _this$props5 = this.props,\n x = _this$props5.x,\n y = _this$props5.y,\n width = _this$props5.width,\n height = _this$props5.height,\n orientation = _this$props5.orientation,\n mirror = _this$props5.mirror,\n axisLine = _this$props5.axisLine;\n var props = _objectSpread(_objectSpread(_objectSpread({}, filterProps(this.props)), filterProps(axisLine)), {}, {\n fill: 'none'\n });\n if (orientation === 'top' || orientation === 'bottom') {\n var needHeight = +(orientation === 'top' && !mirror || orientation === 'bottom' && mirror);\n props = _objectSpread(_objectSpread({}, props), {}, {\n x1: x,\n y1: y + needHeight * height,\n x2: x + width,\n y2: y + needHeight * height\n });\n } else {\n var needWidth = +(orientation === 'left' && !mirror || orientation === 'right' && mirror);\n props = _objectSpread(_objectSpread({}, props), {}, {\n x1: x + needWidth * width,\n y1: y,\n x2: x + needWidth * width,\n y2: y + height\n });\n }\n return /*#__PURE__*/React.createElement(\"line\", _extends({}, props, {\n className: classNames('recharts-cartesian-axis-line', _get(axisLine, 'className'))\n }));\n }\n }, {\n key: \"renderTicks\",\n value:\n /**\n * render the ticks\n * @param {Array} ticks The ticks to actually render (overrides what was passed in props)\n * @param {string} fontSize Fontsize to consider for tick spacing\n * @param {string} letterSpacing Letterspacing to consider for tick spacing\n * @return {ReactComponent} renderedTicks\n */\n function renderTicks(ticks, fontSize, letterSpacing) {\n var _this2 = this;\n var _this$props6 = this.props,\n tickLine = _this$props6.tickLine,\n stroke = _this$props6.stroke,\n tick = _this$props6.tick,\n tickFormatter = _this$props6.tickFormatter,\n unit = _this$props6.unit;\n var finalTicks = getTicks(_objectSpread(_objectSpread({}, this.props), {}, {\n ticks: ticks\n }), fontSize, letterSpacing);\n var textAnchor = this.getTickTextAnchor();\n var verticalAnchor = this.getTickVerticalAnchor();\n var axisProps = filterProps(this.props);\n var customTickProps = filterProps(tick);\n var tickLineProps = _objectSpread(_objectSpread({}, axisProps), {}, {\n fill: 'none'\n }, filterProps(tickLine));\n var items = finalTicks.map(function (entry, i) {\n var _this2$getTickLineCoo = _this2.getTickLineCoord(entry),\n lineCoord = _this2$getTickLineCoo.line,\n tickCoord = _this2$getTickLineCoo.tick;\n var tickProps = _objectSpread(_objectSpread(_objectSpread(_objectSpread({\n textAnchor: textAnchor,\n verticalAnchor: verticalAnchor\n }, axisProps), {}, {\n stroke: 'none',\n fill: stroke\n }, customTickProps), tickCoord), {}, {\n index: i,\n payload: entry,\n visibleTicksCount: finalTicks.length,\n tickFormatter: tickFormatter\n });\n return /*#__PURE__*/React.createElement(Layer, _extends({\n className: \"recharts-cartesian-axis-tick\",\n key: \"tick-\".concat(i) // eslint-disable-line react/no-array-index-key\n }, adaptEventsOfChild(_this2.props, entry, i)), tickLine && /*#__PURE__*/React.createElement(\"line\", _extends({}, tickLineProps, lineCoord, {\n className: classNames('recharts-cartesian-axis-tick-line', _get(tickLine, 'className'))\n })), tick && CartesianAxis.renderTickItem(tick, tickProps, \"\".concat(_isFunction(tickFormatter) ? tickFormatter(entry.value, i) : entry.value).concat(unit || '')));\n });\n return /*#__PURE__*/React.createElement(\"g\", {\n className: \"recharts-cartesian-axis-ticks\"\n }, items);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this3 = this;\n var _this$props7 = this.props,\n axisLine = _this$props7.axisLine,\n width = _this$props7.width,\n height = _this$props7.height,\n ticksGenerator = _this$props7.ticksGenerator,\n className = _this$props7.className,\n hide = _this$props7.hide;\n if (hide) {\n return null;\n }\n var _this$props8 = this.props,\n ticks = _this$props8.ticks,\n noTicksProps = _objectWithoutProperties(_this$props8, _excluded3);\n var finalTicks = ticks;\n if (_isFunction(ticksGenerator)) {\n finalTicks = ticks && ticks.length > 0 ? ticksGenerator(this.props) : ticksGenerator(noTicksProps);\n }\n if (width <= 0 || height <= 0 || !finalTicks || !finalTicks.length) {\n return null;\n }\n return /*#__PURE__*/React.createElement(Layer, {\n className: classNames('recharts-cartesian-axis', className),\n ref: function ref(_ref2) {\n _this3.layerReference = _ref2;\n }\n }, axisLine && this.renderAxisLine(), this.renderTicks(finalTicks, this.state.fontSize, this.state.letterSpacing), Label.renderCallByParent(this.props));\n }\n }], [{\n key: \"renderTickItem\",\n value: function renderTickItem(option, props, value) {\n var tickItem;\n if ( /*#__PURE__*/React.isValidElement(option)) {\n tickItem = /*#__PURE__*/React.cloneElement(option, props);\n } else if (_isFunction(option)) {\n tickItem = option(props);\n } else {\n tickItem = /*#__PURE__*/React.createElement(Text, _extends({}, props, {\n className: \"recharts-cartesian-axis-tick-value\"\n }), value);\n }\n return tickItem;\n }\n }]);\n return CartesianAxis;\n}(Component);\n_defineProperty(CartesianAxis, \"displayName\", 'CartesianAxis');\n_defineProperty(CartesianAxis, \"defaultProps\", {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n viewBox: {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n },\n // The orientation of axis\n orientation: 'bottom',\n // The ticks\n ticks: [],\n stroke: '#666',\n tickLine: true,\n axisLine: true,\n tick: true,\n mirror: false,\n minTickGap: 5,\n // The width or height of tick\n tickSize: 6,\n tickMargin: 2,\n interval: 'preserveEnd'\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar PREFIX_LIST = ['Webkit', 'Moz', 'O', 'ms'];\nexport var generatePrefixStyle = function generatePrefixStyle(name, value) {\n if (!name) {\n return null;\n }\n var camelName = name.replace(/(\\w)/, function (v) {\n return v.toUpperCase();\n });\n var result = PREFIX_LIST.reduce(function (res, entry) {\n return _objectSpread(_objectSpread({}, res), {}, _defineProperty({}, entry + camelName, value));\n }, {});\n result[name] = value;\n return result;\n};","import _isFunction from \"lodash/isFunction\";\nimport _range from \"lodash/range\";\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/**\n * @fileOverview Brush\n */\nimport React, { PureComponent, Children } from 'react';\nimport classNames from 'classnames';\nimport { scalePoint } from 'victory-vendor/d3-scale';\nimport { Layer } from '../container/Layer';\nimport { Text } from '../component/Text';\nimport { getValueByDataKey } from '../util/ChartUtils';\nimport { isNumber } from '../util/DataUtils';\nimport { generatePrefixStyle } from '../util/CssPrefixUtils';\nimport { filterProps } from '../util/ReactUtils';\nvar createScale = function createScale(_ref) {\n var data = _ref.data,\n startIndex = _ref.startIndex,\n endIndex = _ref.endIndex,\n x = _ref.x,\n width = _ref.width,\n travellerWidth = _ref.travellerWidth;\n if (!data || !data.length) {\n return {};\n }\n var len = data.length;\n var scale = scalePoint().domain(_range(0, len)).range([x, x + width - travellerWidth]);\n var scaleValues = scale.domain().map(function (entry) {\n return scale(entry);\n });\n return {\n isTextActive: false,\n isSlideMoving: false,\n isTravellerMoving: false,\n startX: scale(startIndex),\n endX: scale(endIndex),\n scale: scale,\n scaleValues: scaleValues\n };\n};\nvar isTouch = function isTouch(e) {\n return e.changedTouches && !!e.changedTouches.length;\n};\nexport var Brush = /*#__PURE__*/function (_PureComponent) {\n _inherits(Brush, _PureComponent);\n var _super = _createSuper(Brush);\n function Brush(props) {\n var _this;\n _classCallCheck(this, Brush);\n _this = _super.call(this, props);\n _defineProperty(_assertThisInitialized(_this), \"handleDrag\", function (e) {\n if (_this.leaveTimer) {\n clearTimeout(_this.leaveTimer);\n _this.leaveTimer = null;\n }\n if (_this.state.isTravellerMoving) {\n _this.handleTravellerMove(e);\n } else if (_this.state.isSlideMoving) {\n _this.handleSlideDrag(e);\n }\n });\n _defineProperty(_assertThisInitialized(_this), \"handleTouchMove\", function (e) {\n if (e.changedTouches != null && e.changedTouches.length > 0) {\n _this.handleDrag(e.changedTouches[0]);\n }\n });\n _defineProperty(_assertThisInitialized(_this), \"handleDragEnd\", function () {\n _this.setState({\n isTravellerMoving: false,\n isSlideMoving: false\n });\n _this.detachDragEndListener();\n });\n _defineProperty(_assertThisInitialized(_this), \"handleLeaveWrapper\", function () {\n if (_this.state.isTravellerMoving || _this.state.isSlideMoving) {\n _this.leaveTimer = window.setTimeout(_this.handleDragEnd, _this.props.leaveTimeOut);\n }\n });\n _defineProperty(_assertThisInitialized(_this), \"handleEnterSlideOrTraveller\", function () {\n _this.setState({\n isTextActive: true\n });\n });\n _defineProperty(_assertThisInitialized(_this), \"handleLeaveSlideOrTraveller\", function () {\n _this.setState({\n isTextActive: false\n });\n });\n _defineProperty(_assertThisInitialized(_this), \"handleSlideDragStart\", function (e) {\n var event = isTouch(e) ? e.changedTouches[0] : e;\n _this.setState({\n isTravellerMoving: false,\n isSlideMoving: true,\n slideMoveStartX: event.pageX\n });\n _this.attachDragEndListener();\n });\n _this.travellerDragStartHandlers = {\n startX: _this.handleTravellerDragStart.bind(_assertThisInitialized(_this), 'startX'),\n endX: _this.handleTravellerDragStart.bind(_assertThisInitialized(_this), 'endX')\n };\n _this.state = {};\n return _this;\n }\n _createClass(Brush, [{\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n if (this.leaveTimer) {\n clearTimeout(this.leaveTimer);\n this.leaveTimer = null;\n }\n this.detachDragEndListener();\n }\n }, {\n key: \"getIndex\",\n value: function getIndex(_ref2) {\n var startX = _ref2.startX,\n endX = _ref2.endX;\n var scaleValues = this.state.scaleValues;\n var _this$props = this.props,\n gap = _this$props.gap,\n data = _this$props.data;\n var lastIndex = data.length - 1;\n var min = Math.min(startX, endX);\n var max = Math.max(startX, endX);\n var minIndex = Brush.getIndexInRange(scaleValues, min);\n var maxIndex = Brush.getIndexInRange(scaleValues, max);\n return {\n startIndex: minIndex - minIndex % gap,\n endIndex: maxIndex === lastIndex ? lastIndex : maxIndex - maxIndex % gap\n };\n }\n }, {\n key: \"getTextOfTick\",\n value: function getTextOfTick(index) {\n var _this$props2 = this.props,\n data = _this$props2.data,\n tickFormatter = _this$props2.tickFormatter,\n dataKey = _this$props2.dataKey;\n var text = getValueByDataKey(data[index], dataKey, index);\n return _isFunction(tickFormatter) ? tickFormatter(text, index) : text;\n }\n }, {\n key: \"attachDragEndListener\",\n value: function attachDragEndListener() {\n window.addEventListener('mouseup', this.handleDragEnd, true);\n window.addEventListener('touchend', this.handleDragEnd, true);\n window.addEventListener('mousemove', this.handleDrag, true);\n }\n }, {\n key: \"detachDragEndListener\",\n value: function detachDragEndListener() {\n window.removeEventListener('mouseup', this.handleDragEnd, true);\n window.removeEventListener('touchend', this.handleDragEnd, true);\n window.removeEventListener('mousemove', this.handleDrag, true);\n }\n }, {\n key: \"handleSlideDrag\",\n value: function handleSlideDrag(e) {\n var _this$state = this.state,\n slideMoveStartX = _this$state.slideMoveStartX,\n startX = _this$state.startX,\n endX = _this$state.endX;\n var _this$props3 = this.props,\n x = _this$props3.x,\n width = _this$props3.width,\n travellerWidth = _this$props3.travellerWidth,\n startIndex = _this$props3.startIndex,\n endIndex = _this$props3.endIndex,\n onChange = _this$props3.onChange;\n var delta = e.pageX - slideMoveStartX;\n if (delta > 0) {\n delta = Math.min(delta, x + width - travellerWidth - endX, x + width - travellerWidth - startX);\n } else if (delta < 0) {\n delta = Math.max(delta, x - startX, x - endX);\n }\n var newIndex = this.getIndex({\n startX: startX + delta,\n endX: endX + delta\n });\n if ((newIndex.startIndex !== startIndex || newIndex.endIndex !== endIndex) && onChange) {\n onChange(newIndex);\n }\n this.setState({\n startX: startX + delta,\n endX: endX + delta,\n slideMoveStartX: e.pageX\n });\n }\n }, {\n key: \"handleTravellerDragStart\",\n value: function handleTravellerDragStart(id, e) {\n var event = isTouch(e) ? e.changedTouches[0] : e;\n this.setState({\n isSlideMoving: false,\n isTravellerMoving: true,\n movingTravellerId: id,\n brushMoveStartX: event.pageX\n });\n this.attachDragEndListener();\n }\n }, {\n key: \"handleTravellerMove\",\n value: function handleTravellerMove(e) {\n var _this$setState;\n var _this$state2 = this.state,\n brushMoveStartX = _this$state2.brushMoveStartX,\n movingTravellerId = _this$state2.movingTravellerId,\n endX = _this$state2.endX,\n startX = _this$state2.startX;\n var prevValue = this.state[movingTravellerId];\n var _this$props4 = this.props,\n x = _this$props4.x,\n width = _this$props4.width,\n travellerWidth = _this$props4.travellerWidth,\n onChange = _this$props4.onChange,\n gap = _this$props4.gap,\n data = _this$props4.data;\n var params = {\n startX: this.state.startX,\n endX: this.state.endX\n };\n var delta = e.pageX - brushMoveStartX;\n if (delta > 0) {\n delta = Math.min(delta, x + width - travellerWidth - prevValue);\n } else if (delta < 0) {\n delta = Math.max(delta, x - prevValue);\n }\n params[movingTravellerId] = prevValue + delta;\n var newIndex = this.getIndex(params);\n var startIndex = newIndex.startIndex,\n endIndex = newIndex.endIndex;\n var isFullGap = function isFullGap() {\n var lastIndex = data.length - 1;\n if (movingTravellerId === 'startX' && (endX > startX ? startIndex % gap === 0 : endIndex % gap === 0) || endX < startX && endIndex === lastIndex || movingTravellerId === 'endX' && (endX > startX ? endIndex % gap === 0 : startIndex % gap === 0) || endX > startX && endIndex === lastIndex) {\n return true;\n }\n return false;\n };\n this.setState((_this$setState = {}, _defineProperty(_this$setState, movingTravellerId, prevValue + delta), _defineProperty(_this$setState, \"brushMoveStartX\", e.pageX), _this$setState), function () {\n if (onChange) {\n if (isFullGap()) {\n onChange(newIndex);\n }\n }\n });\n }\n }, {\n key: \"renderBackground\",\n value: function renderBackground() {\n var _this$props5 = this.props,\n x = _this$props5.x,\n y = _this$props5.y,\n width = _this$props5.width,\n height = _this$props5.height,\n fill = _this$props5.fill,\n stroke = _this$props5.stroke;\n return /*#__PURE__*/React.createElement(\"rect\", {\n stroke: stroke,\n fill: fill,\n x: x,\n y: y,\n width: width,\n height: height\n });\n }\n }, {\n key: \"renderPanorama\",\n value: function renderPanorama() {\n var _this$props6 = this.props,\n x = _this$props6.x,\n y = _this$props6.y,\n width = _this$props6.width,\n height = _this$props6.height,\n data = _this$props6.data,\n children = _this$props6.children,\n padding = _this$props6.padding;\n var chartElement = Children.only(children);\n if (!chartElement) {\n return null;\n }\n return /*#__PURE__*/React.cloneElement(chartElement, {\n x: x,\n y: y,\n width: width,\n height: height,\n margin: padding,\n compact: true,\n data: data\n });\n }\n }, {\n key: \"renderTravellerLayer\",\n value: function renderTravellerLayer(travellerX, id) {\n var _this$props7 = this.props,\n y = _this$props7.y,\n travellerWidth = _this$props7.travellerWidth,\n height = _this$props7.height,\n traveller = _this$props7.traveller;\n var x = Math.max(travellerX, this.props.x);\n var travellerProps = _objectSpread(_objectSpread({}, filterProps(this.props)), {}, {\n x: x,\n y: y,\n width: travellerWidth,\n height: height\n });\n return /*#__PURE__*/React.createElement(Layer, {\n className: \"recharts-brush-traveller\",\n onMouseEnter: this.handleEnterSlideOrTraveller,\n onMouseLeave: this.handleLeaveSlideOrTraveller,\n onMouseDown: this.travellerDragStartHandlers[id],\n onTouchStart: this.travellerDragStartHandlers[id],\n style: {\n cursor: 'col-resize'\n }\n }, Brush.renderTraveller(traveller, travellerProps));\n }\n }, {\n key: \"renderSlide\",\n value: function renderSlide(startX, endX) {\n var _this$props8 = this.props,\n y = _this$props8.y,\n height = _this$props8.height,\n stroke = _this$props8.stroke,\n travellerWidth = _this$props8.travellerWidth;\n var x = Math.min(startX, endX) + travellerWidth;\n var width = Math.max(Math.abs(endX - startX) - travellerWidth, 0);\n return /*#__PURE__*/React.createElement(\"rect\", {\n className: \"recharts-brush-slide\",\n onMouseEnter: this.handleEnterSlideOrTraveller,\n onMouseLeave: this.handleLeaveSlideOrTraveller,\n onMouseDown: this.handleSlideDragStart,\n onTouchStart: this.handleSlideDragStart,\n style: {\n cursor: 'move'\n },\n stroke: \"none\",\n fill: stroke,\n fillOpacity: 0.2,\n x: x,\n y: y,\n width: width,\n height: height\n });\n }\n }, {\n key: \"renderText\",\n value: function renderText() {\n var _this$props9 = this.props,\n startIndex = _this$props9.startIndex,\n endIndex = _this$props9.endIndex,\n y = _this$props9.y,\n height = _this$props9.height,\n travellerWidth = _this$props9.travellerWidth,\n stroke = _this$props9.stroke;\n var _this$state3 = this.state,\n startX = _this$state3.startX,\n endX = _this$state3.endX;\n var offset = 5;\n var attrs = {\n pointerEvents: 'none',\n fill: stroke\n };\n return /*#__PURE__*/React.createElement(Layer, {\n className: \"recharts-brush-texts\"\n }, /*#__PURE__*/React.createElement(Text, _extends({\n textAnchor: \"end\",\n verticalAnchor: \"middle\",\n x: Math.min(startX, endX) - offset,\n y: y + height / 2\n }, attrs), this.getTextOfTick(startIndex)), /*#__PURE__*/React.createElement(Text, _extends({\n textAnchor: \"start\",\n verticalAnchor: \"middle\",\n x: Math.max(startX, endX) + travellerWidth + offset,\n y: y + height / 2\n }, attrs), this.getTextOfTick(endIndex)));\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props10 = this.props,\n data = _this$props10.data,\n className = _this$props10.className,\n children = _this$props10.children,\n x = _this$props10.x,\n y = _this$props10.y,\n width = _this$props10.width,\n height = _this$props10.height,\n alwaysShowText = _this$props10.alwaysShowText;\n var _this$state4 = this.state,\n startX = _this$state4.startX,\n endX = _this$state4.endX,\n isTextActive = _this$state4.isTextActive,\n isSlideMoving = _this$state4.isSlideMoving,\n isTravellerMoving = _this$state4.isTravellerMoving;\n if (!data || !data.length || !isNumber(x) || !isNumber(y) || !isNumber(width) || !isNumber(height) || width <= 0 || height <= 0) {\n return null;\n }\n var layerClass = classNames('recharts-brush', className);\n var isPanoramic = React.Children.count(children) === 1;\n var style = generatePrefixStyle('userSelect', 'none');\n return /*#__PURE__*/React.createElement(Layer, {\n className: layerClass,\n onMouseLeave: this.handleLeaveWrapper,\n onTouchMove: this.handleTouchMove,\n style: style\n }, this.renderBackground(), isPanoramic && this.renderPanorama(), this.renderSlide(startX, endX), this.renderTravellerLayer(startX, 'startX'), this.renderTravellerLayer(endX, 'endX'), (isTextActive || isSlideMoving || isTravellerMoving || alwaysShowText) && this.renderText());\n }\n }], [{\n key: \"renderDefaultTraveller\",\n value: function renderDefaultTraveller(props) {\n var x = props.x,\n y = props.y,\n width = props.width,\n height = props.height,\n stroke = props.stroke;\n var lineY = Math.floor(y + height / 2) - 1;\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"rect\", {\n x: x,\n y: y,\n width: width,\n height: height,\n fill: stroke,\n stroke: \"none\"\n }), /*#__PURE__*/React.createElement(\"line\", {\n x1: x + 1,\n y1: lineY,\n x2: x + width - 1,\n y2: lineY,\n fill: \"none\",\n stroke: \"#fff\"\n }), /*#__PURE__*/React.createElement(\"line\", {\n x1: x + 1,\n y1: lineY + 2,\n x2: x + width - 1,\n y2: lineY + 2,\n fill: \"none\",\n stroke: \"#fff\"\n }));\n }\n }, {\n key: \"renderTraveller\",\n value: function renderTraveller(option, props) {\n var rectangle;\n if ( /*#__PURE__*/React.isValidElement(option)) {\n rectangle = /*#__PURE__*/React.cloneElement(option, props);\n } else if (_isFunction(option)) {\n rectangle = option(props);\n } else {\n rectangle = Brush.renderDefaultTraveller(props);\n }\n return rectangle;\n }\n }, {\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(nextProps, prevState) {\n var data = nextProps.data,\n width = nextProps.width,\n x = nextProps.x,\n travellerWidth = nextProps.travellerWidth,\n updateId = nextProps.updateId,\n startIndex = nextProps.startIndex,\n endIndex = nextProps.endIndex;\n if (data !== prevState.prevData || updateId !== prevState.prevUpdateId) {\n return _objectSpread({\n prevData: data,\n prevTravellerWidth: travellerWidth,\n prevUpdateId: updateId,\n prevX: x,\n prevWidth: width\n }, data && data.length ? createScale({\n data: data,\n width: width,\n x: x,\n travellerWidth: travellerWidth,\n startIndex: startIndex,\n endIndex: endIndex\n }) : {\n scale: null,\n scaleValues: null\n });\n }\n if (prevState.scale && (width !== prevState.prevWidth || x !== prevState.prevX || travellerWidth !== prevState.prevTravellerWidth)) {\n prevState.scale.range([x, x + width - travellerWidth]);\n var scaleValues = prevState.scale.domain().map(function (entry) {\n return prevState.scale(entry);\n });\n return {\n prevData: data,\n prevTravellerWidth: travellerWidth,\n prevUpdateId: updateId,\n prevX: x,\n prevWidth: width,\n startX: prevState.scale(nextProps.startIndex),\n endX: prevState.scale(nextProps.endIndex),\n scaleValues: scaleValues\n };\n }\n return null;\n }\n }, {\n key: \"getIndexInRange\",\n value: function getIndexInRange(range, x) {\n var len = range.length;\n var start = 0;\n var end = len - 1;\n while (end - start > 1) {\n var middle = Math.floor((start + end) / 2);\n if (range[middle] > x) {\n end = middle;\n } else {\n start = middle;\n }\n }\n return x >= range[end] ? end : start;\n }\n }]);\n return Brush;\n}(PureComponent);\n_defineProperty(Brush, \"displayName\", 'Brush');\n_defineProperty(Brush, \"defaultProps\", {\n height: 40,\n travellerWidth: 5,\n gap: 1,\n fill: '#fff',\n stroke: '#666',\n padding: {\n top: 1,\n right: 1,\n bottom: 1,\n left: 1\n },\n leaveTimeOut: 1000,\n alwaysShowText: false\n});","export var ifOverflowMatches = function ifOverflowMatches(props, value) {\n var alwaysShow = props.alwaysShow;\n var ifOverflow = props.ifOverflow;\n if (alwaysShow) {\n ifOverflow = 'extendDomain';\n }\n return ifOverflow === value;\n};","import _isFunction from \"lodash/isFunction\";\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/**\n * @fileOverview Reference Dot\n */\nimport React from 'react';\nimport classNames from 'classnames';\nimport { Layer } from '../container/Layer';\nimport { Dot } from '../shape/Dot';\nimport { Label } from '../component/Label';\nimport { isNumOrStr } from '../util/DataUtils';\nimport { ifOverflowMatches } from '../util/IfOverflowMatches';\nimport { createLabeledScales } from '../util/CartesianUtils';\nimport { warn } from '../util/LogUtils';\nimport { filterProps } from '../util/ReactUtils';\nvar getCoordinate = function getCoordinate(props) {\n var x = props.x,\n y = props.y,\n xAxis = props.xAxis,\n yAxis = props.yAxis;\n var scales = createLabeledScales({\n x: xAxis.scale,\n y: yAxis.scale\n });\n var result = scales.apply({\n x: x,\n y: y\n }, {\n bandAware: true\n });\n if (ifOverflowMatches(props, 'discard') && !scales.isInRange(result)) {\n return null;\n }\n return result;\n};\nexport function ReferenceDot(props) {\n var x = props.x,\n y = props.y,\n r = props.r,\n alwaysShow = props.alwaysShow,\n clipPathId = props.clipPathId;\n var isX = isNumOrStr(x);\n var isY = isNumOrStr(y);\n warn(alwaysShow === undefined, 'The alwaysShow prop is deprecated. Please use ifOverflow=\"extendDomain\" instead.');\n if (!isX || !isY) {\n return null;\n }\n var coordinate = getCoordinate(props);\n if (!coordinate) {\n return null;\n }\n var cx = coordinate.x,\n cy = coordinate.y;\n var shape = props.shape,\n className = props.className;\n var clipPath = ifOverflowMatches(props, 'hidden') ? \"url(#\".concat(clipPathId, \")\") : undefined;\n var dotProps = _objectSpread(_objectSpread({\n clipPath: clipPath\n }, filterProps(props, true)), {}, {\n cx: cx,\n cy: cy\n });\n return /*#__PURE__*/React.createElement(Layer, {\n className: classNames('recharts-reference-dot', className)\n }, ReferenceDot.renderDot(shape, dotProps), Label.renderCallByParent(props, {\n x: cx - r,\n y: cy - r,\n width: 2 * r,\n height: 2 * r\n }));\n}\nReferenceDot.displayName = 'ReferenceDot';\nReferenceDot.defaultProps = {\n isFront: false,\n ifOverflow: 'discard',\n xAxisId: 0,\n yAxisId: 0,\n r: 10,\n fill: '#fff',\n stroke: '#ccc',\n fillOpacity: 1,\n strokeWidth: 1\n};\nReferenceDot.renderDot = function (option, props) {\n var dot;\n if ( /*#__PURE__*/React.isValidElement(option)) {\n dot = /*#__PURE__*/React.cloneElement(option, props);\n } else if (_isFunction(option)) {\n dot = option(props);\n } else {\n dot = /*#__PURE__*/React.createElement(Dot, _extends({}, props, {\n cx: props.cx,\n cy: props.cy,\n className: \"recharts-reference-dot-dot\"\n }));\n }\n return dot;\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nimport _some from \"lodash/some\";\nimport _isFunction from \"lodash/isFunction\";\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i[\"return\"] && (_r = _i[\"return\"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/**\n * @fileOverview Reference Line\n */\nimport React from 'react';\nimport classNames from 'classnames';\nimport { Layer } from '../container/Layer';\nimport { Label } from '../component/Label';\nimport { ifOverflowMatches } from '../util/IfOverflowMatches';\nimport { isNumOrStr } from '../util/DataUtils';\nimport { createLabeledScales, rectWithCoords } from '../util/CartesianUtils';\nimport { warn } from '../util/LogUtils';\nimport { filterProps } from '../util/ReactUtils';\nvar renderLine = function renderLine(option, props) {\n var line;\n if ( /*#__PURE__*/React.isValidElement(option)) {\n line = /*#__PURE__*/React.cloneElement(option, props);\n } else if (_isFunction(option)) {\n line = option(props);\n } else {\n line = /*#__PURE__*/React.createElement(\"line\", _extends({}, props, {\n className: \"recharts-reference-line-line\"\n }));\n }\n return line;\n};\n\n// TODO: ScaleHelper\nvar getEndPoints = function getEndPoints(scales, isFixedX, isFixedY, isSegment, props) {\n var _props$viewBox = props.viewBox,\n x = _props$viewBox.x,\n y = _props$viewBox.y,\n width = _props$viewBox.width,\n height = _props$viewBox.height,\n position = props.position;\n if (isFixedY) {\n var yCoord = props.y,\n orientation = props.yAxis.orientation;\n var coord = scales.y.apply(yCoord, {\n position: position\n });\n if (ifOverflowMatches(props, 'discard') && !scales.y.isInRange(coord)) {\n return null;\n }\n var points = [{\n x: x + width,\n y: coord\n }, {\n x: x,\n y: coord\n }];\n return orientation === 'left' ? points.reverse() : points;\n }\n if (isFixedX) {\n var xCoord = props.x,\n _orientation = props.xAxis.orientation;\n var _coord = scales.x.apply(xCoord, {\n position: position\n });\n if (ifOverflowMatches(props, 'discard') && !scales.x.isInRange(_coord)) {\n return null;\n }\n var _points = [{\n x: _coord,\n y: y + height\n }, {\n x: _coord,\n y: y\n }];\n return _orientation === 'top' ? _points.reverse() : _points;\n }\n if (isSegment) {\n var segment = props.segment;\n var _points2 = segment.map(function (p) {\n return scales.apply(p, {\n position: position\n });\n });\n if (ifOverflowMatches(props, 'discard') && _some(_points2, function (p) {\n return !scales.isInRange(p);\n })) {\n return null;\n }\n return _points2;\n }\n return null;\n};\nexport function ReferenceLine(props) {\n var fixedX = props.x,\n fixedY = props.y,\n segment = props.segment,\n xAxis = props.xAxis,\n yAxis = props.yAxis,\n shape = props.shape,\n className = props.className,\n alwaysShow = props.alwaysShow,\n clipPathId = props.clipPathId;\n warn(alwaysShow === undefined, 'The alwaysShow prop is deprecated. Please use ifOverflow=\"extendDomain\" instead.');\n var scales = createLabeledScales({\n x: xAxis.scale,\n y: yAxis.scale\n });\n var isX = isNumOrStr(fixedX);\n var isY = isNumOrStr(fixedY);\n var isSegment = segment && segment.length === 2;\n var endPoints = getEndPoints(scales, isX, isY, isSegment, props);\n if (!endPoints) {\n return null;\n }\n var _endPoints = _slicedToArray(endPoints, 2),\n _endPoints$ = _endPoints[0],\n x1 = _endPoints$.x,\n y1 = _endPoints$.y,\n _endPoints$2 = _endPoints[1],\n x2 = _endPoints$2.x,\n y2 = _endPoints$2.y;\n var clipPath = ifOverflowMatches(props, 'hidden') ? \"url(#\".concat(clipPathId, \")\") : undefined;\n var lineProps = _objectSpread(_objectSpread({\n clipPath: clipPath\n }, filterProps(props, true)), {}, {\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2\n });\n return /*#__PURE__*/React.createElement(Layer, {\n className: classNames('recharts-reference-line', className)\n }, renderLine(shape, lineProps), Label.renderCallByParent(props, rectWithCoords({\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2\n })));\n}\nReferenceLine.displayName = 'ReferenceLine';\nReferenceLine.defaultProps = {\n isFront: false,\n ifOverflow: 'discard',\n xAxisId: 0,\n yAxisId: 0,\n fill: 'none',\n stroke: '#ccc',\n fillOpacity: 1,\n strokeWidth: 1,\n position: 'middle'\n};","import _isFunction from \"lodash/isFunction\";\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/**\n * @fileOverview Reference Line\n */\nimport React from 'react';\nimport classNames from 'classnames';\nimport { Layer } from '../container/Layer';\nimport { Label } from '../component/Label';\nimport { createLabeledScales, rectWithPoints } from '../util/CartesianUtils';\nimport { ifOverflowMatches } from '../util/IfOverflowMatches';\nimport { isNumOrStr } from '../util/DataUtils';\nimport { warn } from '../util/LogUtils';\nimport { Rectangle } from '../shape/Rectangle';\nimport { filterProps } from '../util/ReactUtils';\nvar getRect = function getRect(hasX1, hasX2, hasY1, hasY2, props) {\n var xValue1 = props.x1,\n xValue2 = props.x2,\n yValue1 = props.y1,\n yValue2 = props.y2,\n xAxis = props.xAxis,\n yAxis = props.yAxis;\n if (!xAxis || !yAxis) return null;\n var scales = createLabeledScales({\n x: xAxis.scale,\n y: yAxis.scale\n });\n var p1 = {\n x: hasX1 ? scales.x.apply(xValue1, {\n position: 'start'\n }) : scales.x.rangeMin,\n y: hasY1 ? scales.y.apply(yValue1, {\n position: 'start'\n }) : scales.y.rangeMin\n };\n var p2 = {\n x: hasX2 ? scales.x.apply(xValue2, {\n position: 'end'\n }) : scales.x.rangeMax,\n y: hasY2 ? scales.y.apply(yValue2, {\n position: 'end'\n }) : scales.y.rangeMax\n };\n if (ifOverflowMatches(props, 'discard') && (!scales.isInRange(p1) || !scales.isInRange(p2))) {\n return null;\n }\n return rectWithPoints(p1, p2);\n};\nexport function ReferenceArea(props) {\n var x1 = props.x1,\n x2 = props.x2,\n y1 = props.y1,\n y2 = props.y2,\n className = props.className,\n alwaysShow = props.alwaysShow,\n clipPathId = props.clipPathId;\n warn(alwaysShow === undefined, 'The alwaysShow prop is deprecated. Please use ifOverflow=\"extendDomain\" instead.');\n var hasX1 = isNumOrStr(x1);\n var hasX2 = isNumOrStr(x2);\n var hasY1 = isNumOrStr(y1);\n var hasY2 = isNumOrStr(y2);\n var shape = props.shape;\n if (!hasX1 && !hasX2 && !hasY1 && !hasY2 && !shape) {\n return null;\n }\n var rect = getRect(hasX1, hasX2, hasY1, hasY2, props);\n if (!rect && !shape) {\n return null;\n }\n var clipPath = ifOverflowMatches(props, 'hidden') ? \"url(#\".concat(clipPathId, \")\") : undefined;\n return /*#__PURE__*/React.createElement(Layer, {\n className: classNames('recharts-reference-area', className)\n }, ReferenceArea.renderRect(shape, _objectSpread(_objectSpread({\n clipPath: clipPath\n }, filterProps(props, true)), rect)), Label.renderCallByParent(props, rect));\n}\nReferenceArea.displayName = 'ReferenceArea';\nReferenceArea.defaultProps = {\n isFront: false,\n ifOverflow: 'discard',\n xAxisId: 0,\n yAxisId: 0,\n r: 10,\n fill: '#ccc',\n fillOpacity: 0.5,\n stroke: 'none',\n strokeWidth: 1\n};\nReferenceArea.renderRect = function (option, props) {\n var rect;\n if ( /*#__PURE__*/React.isValidElement(option)) {\n rect = /*#__PURE__*/React.cloneElement(option, props);\n } else if (_isFunction(option)) {\n rect = option(props);\n } else {\n rect = /*#__PURE__*/React.createElement(Rectangle, _extends({}, props, {\n className: \"recharts-reference-area-rect\"\n }));\n }\n return rect;\n};","function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nimport { ReferenceDot } from '../cartesian/ReferenceDot';\nimport { ReferenceLine } from '../cartesian/ReferenceLine';\nimport { ReferenceArea } from '../cartesian/ReferenceArea';\nimport { ifOverflowMatches } from './IfOverflowMatches';\nimport { findAllByType } from './ReactUtils';\nimport { isNumber } from './DataUtils';\nexport var detectReferenceElementsDomain = function detectReferenceElementsDomain(children, domain, axisId, axisType, specifiedTicks) {\n var lines = findAllByType(children, ReferenceLine);\n var dots = findAllByType(children, ReferenceDot);\n var elements = [].concat(_toConsumableArray(lines), _toConsumableArray(dots));\n var areas = findAllByType(children, ReferenceArea);\n var idKey = \"\".concat(axisType, \"Id\");\n var valueKey = axisType[0];\n var finalDomain = domain;\n if (elements.length) {\n finalDomain = elements.reduce(function (result, el) {\n if (el.props[idKey] === axisId && ifOverflowMatches(el.props, 'extendDomain') && isNumber(el.props[valueKey])) {\n var value = el.props[valueKey];\n return [Math.min(result[0], value), Math.max(result[1], value)];\n }\n return result;\n }, finalDomain);\n }\n if (areas.length) {\n var key1 = \"\".concat(valueKey, \"1\");\n var key2 = \"\".concat(valueKey, \"2\");\n finalDomain = areas.reduce(function (result, el) {\n if (el.props[idKey] === axisId && ifOverflowMatches(el.props, 'extendDomain') && isNumber(el.props[key1]) && isNumber(el.props[key2])) {\n var value1 = el.props[key1];\n var value2 = el.props[key2];\n return [Math.min(result[0], value1, value2), Math.max(result[1], value1, value2)];\n }\n return result;\n }, finalDomain);\n }\n if (specifiedTicks && specifiedTicks.length) {\n finalDomain = specifiedTicks.reduce(function (result, tick) {\n if (isNumber(tick)) {\n return [Math.min(result[0], tick), Math.max(result[1], tick)];\n }\n return result;\n }, finalDomain);\n }\n return finalDomain;\n};","import EventEmitter from 'eventemitter3';\nvar eventCenter = new EventEmitter();\nif (eventCenter.setMaxListeners) {\n eventCenter.setMaxListeners(10);\n}\nexport { eventCenter };\nexport var SYNC_EVENT = 'recharts.syncMouseEvents';","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nexport var AccessibilityManager = /*#__PURE__*/function () {\n function AccessibilityManager() {\n _classCallCheck(this, AccessibilityManager);\n _defineProperty(this, \"activeIndex\", 0);\n _defineProperty(this, \"coordinateList\", []);\n _defineProperty(this, \"layout\", 'horizontal');\n }\n _createClass(AccessibilityManager, [{\n key: \"setDetails\",\n value: function setDetails(_ref) {\n var _ref$coordinateList = _ref.coordinateList,\n coordinateList = _ref$coordinateList === void 0 ? [] : _ref$coordinateList,\n _ref$container = _ref.container,\n container = _ref$container === void 0 ? null : _ref$container,\n _ref$layout = _ref.layout,\n layout = _ref$layout === void 0 ? null : _ref$layout,\n _ref$offset = _ref.offset,\n offset = _ref$offset === void 0 ? null : _ref$offset,\n _ref$mouseHandlerCall = _ref.mouseHandlerCallback,\n mouseHandlerCallback = _ref$mouseHandlerCall === void 0 ? null : _ref$mouseHandlerCall;\n this.coordinateList = coordinateList !== null && coordinateList !== void 0 ? coordinateList : this.coordinateList;\n this.container = container !== null && container !== void 0 ? container : this.container;\n this.layout = layout !== null && layout !== void 0 ? layout : this.layout;\n this.offset = offset !== null && offset !== void 0 ? offset : this.offset;\n this.mouseHandlerCallback = mouseHandlerCallback !== null && mouseHandlerCallback !== void 0 ? mouseHandlerCallback : this.mouseHandlerCallback;\n\n // Keep activeIndex in the bounds between 0 and the last coordinate index\n this.activeIndex = Math.min(Math.max(this.activeIndex, 0), this.coordinateList.length - 1);\n }\n }, {\n key: \"focus\",\n value: function focus() {\n this.spoofMouse();\n }\n }, {\n key: \"keyboardEvent\",\n value: function keyboardEvent(e) {\n // The AccessibilityManager relies on the Tooltip component. When tooltips suddenly stop existing,\n // it can cause errors. We use this function to check. We don't want arrow keys to be processed\n // if there are no tooltips, since that will cause unexpected behavior of users.\n if (this.coordinateList.length === 0) {\n return;\n }\n switch (e.key) {\n case 'ArrowRight':\n {\n if (this.layout !== 'horizontal') {\n return;\n }\n this.activeIndex = Math.min(this.activeIndex + 1, this.coordinateList.length - 1);\n this.spoofMouse();\n break;\n }\n case 'ArrowLeft':\n {\n if (this.layout !== 'horizontal') {\n return;\n }\n this.activeIndex = Math.max(this.activeIndex - 1, 0);\n this.spoofMouse();\n break;\n }\n default:\n {\n break;\n }\n }\n }\n }, {\n key: \"spoofMouse\",\n value: function spoofMouse() {\n if (this.layout !== 'horizontal') {\n return;\n }\n\n // This can happen when the tooltips suddenly stop existing as children of the component\n // That update doesn't otherwise fire events, so we have to double check here.\n if (this.coordinateList.length === 0) {\n return;\n }\n var _this$container$getBo = this.container.getBoundingClientRect(),\n x = _this$container$getBo.x,\n y = _this$container$getBo.y;\n var coordinate = this.coordinateList[this.activeIndex].coordinate;\n var pageX = x + coordinate;\n var pageY = y + this.offset.top;\n this.mouseHandlerCallback({\n pageX: pageX,\n pageY: pageY\n });\n }\n }]);\n return AccessibilityManager;\n}();","import _every from \"lodash/every\";\nimport _find from \"lodash/find\";\nimport _isFunction from \"lodash/isFunction\";\nimport _throttle from \"lodash/throttle\";\nimport _sortBy from \"lodash/sortBy\";\nimport _get from \"lodash/get\";\nimport _range from \"lodash/range\";\nimport _isNil from \"lodash/isNil\";\nimport _isBoolean from \"lodash/isBoolean\";\nimport _isArray from \"lodash/isArray\";\nvar _excluded = [\"item\"],\n _excluded2 = [\"children\", \"className\", \"width\", \"height\", \"style\", \"compact\", \"title\", \"desc\"];\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i[\"return\"] && (_r = _i[\"return\"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { Component, cloneElement, isValidElement, createElement } from 'react';\nimport classNames from 'classnames';\nimport { getTicks } from '../cartesian/getTicks';\nimport { Surface } from '../container/Surface';\nimport { Layer } from '../container/Layer';\nimport { Tooltip } from '../component/Tooltip';\nimport { Legend } from '../component/Legend';\nimport { Curve } from '../shape/Curve';\nimport { Cross } from '../shape/Cross';\nimport { Sector } from '../shape/Sector';\nimport { Dot } from '../shape/Dot';\nimport { isInRectangle, Rectangle } from '../shape/Rectangle';\nimport { findAllByType, findChildByType, getDisplayName, parseChildIndex, validateWidthHeight, isChildrenEqual, renderByOrder, getReactEventByType, filterProps } from '../util/ReactUtils';\nimport { CartesianAxis } from '../cartesian/CartesianAxis';\nimport { Brush } from '../cartesian/Brush';\nimport { getOffset, calculateChartCoordinate } from '../util/DOMUtils';\nimport { getAnyElementOfObject, hasDuplicate, uniqueId, isNumber, findEntryInArray } from '../util/DataUtils';\nimport { calculateActiveTickIndex, getMainColorOfGraphicItem, getBarSizeList, getBarPosition, appendOffsetOfLegend, getLegendProps, combineEventHandlers, getTicksOfAxis, getCoordinatesOfGrid, getStackedDataOfItem, parseErrorBarsOfAxis, getBandSizeOfAxis, getStackGroupsByAxisId, isCategoricalAxis, getDomainOfItemsWithSameAxis, getDomainOfStackGroups, getDomainOfDataByKey, parseSpecifiedDomain, parseDomainOfCategoryAxis, getTooltipItem } from '../util/ChartUtils';\nimport { detectReferenceElementsDomain } from '../util/DetectReferenceElementsDomain';\nimport { inRangeOfSector, polarToCartesian } from '../util/PolarUtils';\nimport { shallowEqual } from '../util/ShallowEqual';\nimport { eventCenter, SYNC_EVENT } from '../util/Events';\nimport { adaptEventHandlers } from '../util/types';\nimport { AccessibilityManager } from './AccessibilityManager';\nvar ORIENT_MAP = {\n xAxis: ['bottom', 'top'],\n yAxis: ['left', 'right']\n};\nvar originCoordinate = {\n x: 0,\n y: 0\n};\n\n// use legacy isFinite only if there is a problem (aka IE)\n// eslint-disable-next-line no-restricted-globals\nvar isFinit = Number.isFinite ? Number.isFinite : isFinite;\nvar defer =\n// eslint-disable-next-line no-nested-ternary\ntypeof requestAnimationFrame === 'function' ? requestAnimationFrame : typeof setImmediate === 'function' ? setImmediate : setTimeout;\nvar deferClear =\n// eslint-disable-next-line no-nested-ternary\ntypeof cancelAnimationFrame === 'function' ? cancelAnimationFrame : typeof clearImmediate === 'function' ? clearImmediate : clearTimeout;\nvar calculateTooltipPos = function calculateTooltipPos(rangeObj, layout) {\n if (layout === 'horizontal') {\n return rangeObj.x;\n }\n if (layout === 'vertical') {\n return rangeObj.y;\n }\n if (layout === 'centric') {\n return rangeObj.angle;\n }\n return rangeObj.radius;\n};\nvar getActiveCoordinate = function getActiveCoordinate(layout, tooltipTicks, activeIndex, rangeObj) {\n var entry = tooltipTicks.find(function (tick) {\n return tick && tick.index === activeIndex;\n });\n if (entry) {\n if (layout === 'horizontal') {\n return {\n x: entry.coordinate,\n y: rangeObj.y\n };\n }\n if (layout === 'vertical') {\n return {\n x: rangeObj.x,\n y: entry.coordinate\n };\n }\n if (layout === 'centric') {\n var _angle = entry.coordinate;\n var _radius = rangeObj.radius;\n return _objectSpread(_objectSpread(_objectSpread({}, rangeObj), polarToCartesian(rangeObj.cx, rangeObj.cy, _radius, _angle)), {}, {\n angle: _angle,\n radius: _radius\n });\n }\n var radius = entry.coordinate;\n var angle = rangeObj.angle;\n return _objectSpread(_objectSpread(_objectSpread({}, rangeObj), polarToCartesian(rangeObj.cx, rangeObj.cy, radius, angle)), {}, {\n angle: angle,\n radius: radius\n });\n }\n return originCoordinate;\n};\nvar getDisplayedData = function getDisplayedData(data, _ref, item) {\n var graphicalItems = _ref.graphicalItems,\n dataStartIndex = _ref.dataStartIndex,\n dataEndIndex = _ref.dataEndIndex;\n var itemsData = (graphicalItems || []).reduce(function (result, child) {\n var itemData = child.props.data;\n if (itemData && itemData.length) {\n return [].concat(_toConsumableArray(result), _toConsumableArray(itemData));\n }\n return result;\n }, []);\n if (itemsData && itemsData.length > 0) {\n return itemsData;\n }\n if (item && item.props && item.props.data && item.props.data.length > 0) {\n return item.props.data;\n }\n if (data && data.length && isNumber(dataStartIndex) && isNumber(dataEndIndex)) {\n return data.slice(dataStartIndex, dataEndIndex + 1);\n }\n return [];\n};\n\n/**\n * Takes a domain and user props to determine whether he provided the domain via props or if we need to calculate it.\n * @param {AxisDomain} domain The potential domain from props\n * @param {Boolean} allowDataOverflow from props\n * @param {String} axisType from props\n * @returns {Boolean} `true` if domain is specified by user\n */\nfunction isDomainSpecifiedByUser(domain, allowDataOverflow, axisType) {\n if (axisType === 'number' && allowDataOverflow === true && Array.isArray(domain)) {\n var domainStart = domain === null || domain === void 0 ? void 0 : domain[0];\n var domainEnd = domain === null || domain === void 0 ? void 0 : domain[1];\n\n /*\n * The `isNumber` check is needed because the user could also provide strings like \"dataMin\" via the domain props.\n * In such case, we have to compute the domain from the data.\n */\n if (!!domainStart && !!domainEnd && isNumber(domainStart) && isNumber(domainEnd)) {\n return true;\n }\n }\n return false;\n}\nfunction getDefaultDomainByAxisType(axisType) {\n return axisType === 'number' ? [0, 'auto'] : undefined;\n}\n\n/**\n * Get the content to be displayed in the tooltip\n * @param {Object} state Current state\n * @param {Array} chartData The data defined in chart\n * @param {Number} activeIndex Active index of data\n * @param {String} activeLabel Active label of data\n * @return {Array} The content of tooltip\n */\nvar getTooltipContent = function getTooltipContent(state, chartData, activeIndex, activeLabel) {\n var graphicalItems = state.graphicalItems,\n tooltipAxis = state.tooltipAxis;\n var displayedData = getDisplayedData(chartData, state);\n if (activeIndex < 0 || !graphicalItems || !graphicalItems.length || activeIndex >= displayedData.length) {\n return null;\n }\n // get data by activeIndex when the axis don't allow duplicated category\n return graphicalItems.reduce(function (result, child) {\n var hide = child.props.hide;\n if (hide) {\n return result;\n }\n var data = child.props.data;\n var payload;\n if (tooltipAxis.dataKey && !tooltipAxis.allowDuplicatedCategory) {\n // graphic child has data props\n var entries = data === undefined ? displayedData : data;\n payload = findEntryInArray(entries, tooltipAxis.dataKey, activeLabel);\n } else {\n payload = data && data[activeIndex] || displayedData[activeIndex];\n }\n if (!payload) {\n return result;\n }\n return [].concat(_toConsumableArray(result), [getTooltipItem(child, payload)]);\n }, []);\n};\n\n/**\n * Returns tooltip data based on a mouse position (as a parameter or in state)\n * @param {Object} state current state\n * @param {Array} chartData the data defined in chart\n * @param {String} layout The layout type of chart\n * @param {Object} rangeObj { x, y } coordinates\n * @return {Object} Tooltip data data\n */\nvar getTooltipData = function getTooltipData(state, chartData, layout, rangeObj) {\n var rangeData = rangeObj || {\n x: state.chartX,\n y: state.chartY\n };\n var pos = calculateTooltipPos(rangeData, layout);\n var ticks = state.orderedTooltipTicks,\n axis = state.tooltipAxis,\n tooltipTicks = state.tooltipTicks;\n var activeIndex = calculateActiveTickIndex(pos, ticks, tooltipTicks, axis);\n if (activeIndex >= 0 && tooltipTicks) {\n var activeLabel = tooltipTicks[activeIndex] && tooltipTicks[activeIndex].value;\n var activePayload = getTooltipContent(state, chartData, activeIndex, activeLabel);\n var activeCoordinate = getActiveCoordinate(layout, ticks, activeIndex, rangeData);\n return {\n activeTooltipIndex: activeIndex,\n activeLabel: activeLabel,\n activePayload: activePayload,\n activeCoordinate: activeCoordinate\n };\n }\n return null;\n};\n\n/**\n * Get the configuration of axis by the options of axis instance\n * @param {Object} props Latest props\n * @param {Array} axes The instance of axes\n * @param {Array} graphicalItems The instances of item\n * @param {String} axisType The type of axis, xAxis - x-axis, yAxis - y-axis\n * @param {String} axisIdKey The unique id of an axis\n * @param {Object} stackGroups The items grouped by axisId and stackId\n * @param {Number} dataStartIndex The start index of the data series when a brush is applied\n * @param {Number} dataEndIndex The end index of the data series when a brush is applied\n * @return {Object} Configuration\n */\nexport var getAxisMapByAxes = function getAxisMapByAxes(props, _ref2) {\n var axes = _ref2.axes,\n graphicalItems = _ref2.graphicalItems,\n axisType = _ref2.axisType,\n axisIdKey = _ref2.axisIdKey,\n stackGroups = _ref2.stackGroups,\n dataStartIndex = _ref2.dataStartIndex,\n dataEndIndex = _ref2.dataEndIndex;\n var layout = props.layout,\n children = props.children,\n stackOffset = props.stackOffset;\n var isCategorical = isCategoricalAxis(layout, axisType);\n\n // Eliminate duplicated axes\n var axisMap = axes.reduce(function (result, child) {\n var _child$props$domain2;\n var _child$props = child.props,\n type = _child$props.type,\n dataKey = _child$props.dataKey,\n allowDataOverflow = _child$props.allowDataOverflow,\n allowDuplicatedCategory = _child$props.allowDuplicatedCategory,\n scale = _child$props.scale,\n ticks = _child$props.ticks,\n includeHidden = _child$props.includeHidden;\n var axisId = child.props[axisIdKey];\n if (result[axisId]) {\n return result;\n }\n var displayedData = getDisplayedData(props.data, {\n graphicalItems: graphicalItems.filter(function (item) {\n return item.props[axisIdKey] === axisId;\n }),\n dataStartIndex: dataStartIndex,\n dataEndIndex: dataEndIndex\n });\n var len = displayedData.length;\n var domain, duplicateDomain, categoricalDomain;\n\n /*\n * This is a hack to short-circuit the domain creation here to enhance performance.\n * Usually, the data is used to determine the domain, but when the user specifies\n * a domain upfront (via props), there is no need to calculate the domain start and end,\n * which is very expensive for a larger amount of data.\n * The only thing that would prohibit short-circuiting is when the user doesn't allow data overflow,\n * because the axis is supposed to ignore the specified domain that way.\n */\n if (isDomainSpecifiedByUser(child.props.domain, allowDataOverflow, type)) {\n domain = parseSpecifiedDomain(child.props.domain, null, allowDataOverflow);\n /* The chart can be categorical and have the domain specified in numbers\n * we still need to calculate the categorical domain\n * TODO: refactor this more\n */\n if (isCategorical && (type === 'number' || scale !== 'auto')) {\n categoricalDomain = getDomainOfDataByKey(displayedData, dataKey, 'category');\n }\n }\n\n // if the domain is defaulted we need this for `originalDomain` as well\n var defaultDomain = getDefaultDomainByAxisType(type);\n\n // we didn't create the domain from user's props above, so we need to calculate it\n if (!domain || domain.length === 0) {\n var _child$props$domain;\n var childDomain = (_child$props$domain = child.props.domain) !== null && _child$props$domain !== void 0 ? _child$props$domain : defaultDomain;\n if (dataKey) {\n // has dataKey in \n domain = getDomainOfDataByKey(displayedData, dataKey, type);\n if (type === 'category' && isCategorical) {\n // the field type is category data and this axis is categorical axis\n var duplicate = hasDuplicate(domain);\n if (allowDuplicatedCategory && duplicate) {\n duplicateDomain = domain;\n // When category axis has duplicated text, serial numbers are used to generate scale\n domain = _range(0, len);\n } else if (!allowDuplicatedCategory) {\n // remove duplicated category\n domain = parseDomainOfCategoryAxis(childDomain, domain, child).reduce(function (finalDomain, entry) {\n return finalDomain.indexOf(entry) >= 0 ? finalDomain : [].concat(_toConsumableArray(finalDomain), [entry]);\n }, []);\n }\n } else if (type === 'category') {\n // the field type is category data and this axis is numerical axis\n if (!allowDuplicatedCategory) {\n domain = parseDomainOfCategoryAxis(childDomain, domain, child).reduce(function (finalDomain, entry) {\n return finalDomain.indexOf(entry) >= 0 || entry === '' || _isNil(entry) ? finalDomain : [].concat(_toConsumableArray(finalDomain), [entry]);\n }, []);\n } else {\n // eliminate undefined or null or empty string\n domain = domain.filter(function (entry) {\n return entry !== '' && !_isNil(entry);\n });\n }\n } else if (type === 'number') {\n // the field type is numerical\n var errorBarsDomain = parseErrorBarsOfAxis(displayedData, graphicalItems.filter(function (item) {\n return item.props[axisIdKey] === axisId && (includeHidden || !item.props.hide);\n }), dataKey, axisType, layout);\n if (errorBarsDomain) {\n domain = errorBarsDomain;\n }\n }\n if (isCategorical && (type === 'number' || scale !== 'auto')) {\n categoricalDomain = getDomainOfDataByKey(displayedData, dataKey, 'category');\n }\n } else if (isCategorical) {\n // the axis is a categorical axis\n domain = _range(0, len);\n } else if (stackGroups && stackGroups[axisId] && stackGroups[axisId].hasStack && type === 'number') {\n // when stackOffset is 'expand', the domain may be calculated as [0, 1.000000000002]\n domain = stackOffset === 'expand' ? [0, 1] : getDomainOfStackGroups(stackGroups[axisId].stackGroups, dataStartIndex, dataEndIndex);\n } else {\n domain = getDomainOfItemsWithSameAxis(displayedData, graphicalItems.filter(function (item) {\n return item.props[axisIdKey] === axisId && (includeHidden || !item.props.hide);\n }), type, layout, true);\n }\n if (type === 'number') {\n // To detect wether there is any reference lines whose props alwaysShow is true\n domain = detectReferenceElementsDomain(children, domain, axisId, axisType, ticks);\n if (childDomain) {\n domain = parseSpecifiedDomain(childDomain, domain, allowDataOverflow);\n }\n } else if (type === 'category' && childDomain) {\n var axisDomain = childDomain;\n var isDomainValid = domain.every(function (entry) {\n return axisDomain.indexOf(entry) >= 0;\n });\n if (isDomainValid) {\n domain = axisDomain;\n }\n }\n }\n return _objectSpread(_objectSpread({}, result), {}, _defineProperty({}, axisId, _objectSpread(_objectSpread({}, child.props), {}, {\n axisType: axisType,\n domain: domain,\n categoricalDomain: categoricalDomain,\n duplicateDomain: duplicateDomain,\n originalDomain: (_child$props$domain2 = child.props.domain) !== null && _child$props$domain2 !== void 0 ? _child$props$domain2 : defaultDomain,\n isCategorical: isCategorical,\n layout: layout\n })));\n }, {});\n return axisMap;\n};\n\n/**\n * Get the configuration of axis by the options of item,\n * this kind of axis does not display in chart\n * @param {Object} props Latest props\n * @param {Array} graphicalItems The instances of item\n * @param {ReactElement} Axis Axis Component\n * @param {String} axisType The type of axis, xAxis - x-axis, yAxis - y-axis\n * @param {String} axisIdKey The unique id of an axis\n * @param {Object} stackGroups The items grouped by axisId and stackId\n * @param {Number} dataStartIndex The start index of the data series when a brush is applied\n * @param {Number} dataEndIndex The end index of the data series when a brush is applied\n * @return {Object} Configuration\n */\nvar getAxisMapByItems = function getAxisMapByItems(props, _ref3) {\n var graphicalItems = _ref3.graphicalItems,\n Axis = _ref3.Axis,\n axisType = _ref3.axisType,\n axisIdKey = _ref3.axisIdKey,\n stackGroups = _ref3.stackGroups,\n dataStartIndex = _ref3.dataStartIndex,\n dataEndIndex = _ref3.dataEndIndex;\n var layout = props.layout,\n children = props.children;\n var displayedData = getDisplayedData(props.data, {\n graphicalItems: graphicalItems,\n dataStartIndex: dataStartIndex,\n dataEndIndex: dataEndIndex\n });\n var len = displayedData.length;\n var isCategorical = isCategoricalAxis(layout, axisType);\n var index = -1;\n\n // The default type of x-axis is category axis,\n // The default contents of x-axis is the serial numbers of data\n // The default type of y-axis is number axis\n // The default contents of y-axis is the domain of data\n var axisMap = graphicalItems.reduce(function (result, child) {\n var axisId = child.props[axisIdKey];\n var originalDomain = getDefaultDomainByAxisType('number');\n if (!result[axisId]) {\n index++;\n var domain;\n if (isCategorical) {\n domain = _range(0, len);\n } else if (stackGroups && stackGroups[axisId] && stackGroups[axisId].hasStack) {\n domain = getDomainOfStackGroups(stackGroups[axisId].stackGroups, dataStartIndex, dataEndIndex);\n domain = detectReferenceElementsDomain(children, domain, axisId, axisType);\n } else {\n domain = parseSpecifiedDomain(originalDomain, getDomainOfItemsWithSameAxis(displayedData, graphicalItems.filter(function (item) {\n return item.props[axisIdKey] === axisId && !item.props.hide;\n }), 'number', layout), Axis.defaultProps.allowDataOverflow);\n domain = detectReferenceElementsDomain(children, domain, axisId, axisType);\n }\n return _objectSpread(_objectSpread({}, result), {}, _defineProperty({}, axisId, _objectSpread(_objectSpread({\n axisType: axisType\n }, Axis.defaultProps), {}, {\n hide: true,\n orientation: _get(ORIENT_MAP, \"\".concat(axisType, \".\").concat(index % 2), null),\n domain: domain,\n originalDomain: originalDomain,\n isCategorical: isCategorical,\n layout: layout\n // specify scale when no Axis\n // scale: isCategorical ? 'band' : 'linear',\n })));\n }\n\n return result;\n }, {});\n return axisMap;\n};\n\n/**\n * Get the configuration of all x-axis or y-axis\n * @param {Object} props Latest props\n * @param {String} axisType The type of axis\n * @param {Array} graphicalItems The instances of item\n * @param {Object} stackGroups The items grouped by axisId and stackId\n * @param {Number} dataStartIndex The start index of the data series when a brush is applied\n * @param {Number} dataEndIndex The end index of the data series when a brush is applied\n * @return {Object} Configuration\n */\nvar getAxisMap = function getAxisMap(props, _ref4) {\n var _ref4$axisType = _ref4.axisType,\n axisType = _ref4$axisType === void 0 ? 'xAxis' : _ref4$axisType,\n AxisComp = _ref4.AxisComp,\n graphicalItems = _ref4.graphicalItems,\n stackGroups = _ref4.stackGroups,\n dataStartIndex = _ref4.dataStartIndex,\n dataEndIndex = _ref4.dataEndIndex;\n var children = props.children;\n var axisIdKey = \"\".concat(axisType, \"Id\");\n // Get all the instance of Axis\n var axes = findAllByType(children, AxisComp);\n var axisMap = {};\n if (axes && axes.length) {\n axisMap = getAxisMapByAxes(props, {\n axes: axes,\n graphicalItems: graphicalItems,\n axisType: axisType,\n axisIdKey: axisIdKey,\n stackGroups: stackGroups,\n dataStartIndex: dataStartIndex,\n dataEndIndex: dataEndIndex\n });\n } else if (graphicalItems && graphicalItems.length) {\n axisMap = getAxisMapByItems(props, {\n Axis: AxisComp,\n graphicalItems: graphicalItems,\n axisType: axisType,\n axisIdKey: axisIdKey,\n stackGroups: stackGroups,\n dataStartIndex: dataStartIndex,\n dataEndIndex: dataEndIndex\n });\n }\n return axisMap;\n};\nvar tooltipTicksGenerator = function tooltipTicksGenerator(axisMap) {\n var axis = getAnyElementOfObject(axisMap);\n var tooltipTicks = getTicksOfAxis(axis, false, true);\n return {\n tooltipTicks: tooltipTicks,\n orderedTooltipTicks: _sortBy(tooltipTicks, function (o) {\n return o.coordinate;\n }),\n tooltipAxis: axis,\n tooltipAxisBandSize: getBandSizeOfAxis(axis, tooltipTicks)\n };\n};\n\n/**\n * Returns default, reset state for the categorical chart.\n * @param {Object} props Props object to use when creating the default state\n * @return {Object} Whole new state\n */\nvar createDefaultState = function createDefaultState(props) {\n var _brushItem$props, _brushItem$props2;\n var children = props.children,\n defaultShowTooltip = props.defaultShowTooltip;\n var brushItem = findChildByType(children, Brush);\n var startIndex = brushItem && brushItem.props && brushItem.props.startIndex || 0;\n var endIndex = (brushItem === null || brushItem === void 0 ? void 0 : (_brushItem$props = brushItem.props) === null || _brushItem$props === void 0 ? void 0 : _brushItem$props.endIndex) !== undefined ? brushItem === null || brushItem === void 0 ? void 0 : (_brushItem$props2 = brushItem.props) === null || _brushItem$props2 === void 0 ? void 0 : _brushItem$props2.endIndex : props.data && props.data.length - 1 || 0;\n return {\n chartX: 0,\n chartY: 0,\n dataStartIndex: startIndex,\n dataEndIndex: endIndex,\n activeTooltipIndex: -1,\n isTooltipActive: !_isNil(defaultShowTooltip) ? defaultShowTooltip : false\n };\n};\nvar hasGraphicalBarItem = function hasGraphicalBarItem(graphicalItems) {\n if (!graphicalItems || !graphicalItems.length) {\n return false;\n }\n return graphicalItems.some(function (item) {\n var name = getDisplayName(item && item.type);\n return name && name.indexOf('Bar') >= 0;\n });\n};\nvar getAxisNameByLayout = function getAxisNameByLayout(layout) {\n if (layout === 'horizontal') {\n return {\n numericAxisName: 'yAxis',\n cateAxisName: 'xAxis'\n };\n }\n if (layout === 'vertical') {\n return {\n numericAxisName: 'xAxis',\n cateAxisName: 'yAxis'\n };\n }\n if (layout === 'centric') {\n return {\n numericAxisName: 'radiusAxis',\n cateAxisName: 'angleAxis'\n };\n }\n return {\n numericAxisName: 'angleAxis',\n cateAxisName: 'radiusAxis'\n };\n};\n\n/**\n * Calculate the offset of main part in the svg element\n * @param {Object} props Latest props\n * graphicalItems The instances of item\n * xAxisMap The configuration of x-axis\n * yAxisMap The configuration of y-axis\n * @param {Object} prevLegendBBox the boundary box of legend\n * @return {Object} The offset of main part in the svg element\n */\nvar calculateOffset = function calculateOffset(_ref5, prevLegendBBox) {\n var props = _ref5.props,\n graphicalItems = _ref5.graphicalItems,\n _ref5$xAxisMap = _ref5.xAxisMap,\n xAxisMap = _ref5$xAxisMap === void 0 ? {} : _ref5$xAxisMap,\n _ref5$yAxisMap = _ref5.yAxisMap,\n yAxisMap = _ref5$yAxisMap === void 0 ? {} : _ref5$yAxisMap;\n var width = props.width,\n height = props.height,\n children = props.children;\n var margin = props.margin || {};\n var brushItem = findChildByType(children, Brush);\n var legendItem = findChildByType(children, Legend);\n var offsetH = Object.keys(yAxisMap).reduce(function (result, id) {\n var entry = yAxisMap[id];\n var orientation = entry.orientation;\n if (!entry.mirror && !entry.hide) {\n return _objectSpread(_objectSpread({}, result), {}, _defineProperty({}, orientation, result[orientation] + entry.width));\n }\n return result;\n }, {\n left: margin.left || 0,\n right: margin.right || 0\n });\n var offsetV = Object.keys(xAxisMap).reduce(function (result, id) {\n var entry = xAxisMap[id];\n var orientation = entry.orientation;\n if (!entry.mirror && !entry.hide) {\n return _objectSpread(_objectSpread({}, result), {}, _defineProperty({}, orientation, _get(result, \"\".concat(orientation)) + entry.height));\n }\n return result;\n }, {\n top: margin.top || 0,\n bottom: margin.bottom || 0\n });\n var offset = _objectSpread(_objectSpread({}, offsetV), offsetH);\n var brushBottom = offset.bottom;\n if (brushItem) {\n offset.bottom += brushItem.props.height || Brush.defaultProps.height;\n }\n if (legendItem && prevLegendBBox) {\n offset = appendOffsetOfLegend(offset, graphicalItems, props, prevLegendBBox);\n }\n return _objectSpread(_objectSpread({\n brushBottom: brushBottom\n }, offset), {}, {\n width: width - offset.left - offset.right,\n height: height - offset.top - offset.bottom\n });\n};\nexport var generateCategoricalChart = function generateCategoricalChart(_ref6) {\n var _class;\n var chartName = _ref6.chartName,\n GraphicalChild = _ref6.GraphicalChild,\n _ref6$defaultTooltipE = _ref6.defaultTooltipEventType,\n defaultTooltipEventType = _ref6$defaultTooltipE === void 0 ? 'axis' : _ref6$defaultTooltipE,\n _ref6$validateTooltip = _ref6.validateTooltipEventTypes,\n validateTooltipEventTypes = _ref6$validateTooltip === void 0 ? ['axis'] : _ref6$validateTooltip,\n axisComponents = _ref6.axisComponents,\n legendContent = _ref6.legendContent,\n formatAxisMap = _ref6.formatAxisMap,\n defaultProps = _ref6.defaultProps;\n var getFormatItems = function getFormatItems(props, currentState) {\n var graphicalItems = currentState.graphicalItems,\n stackGroups = currentState.stackGroups,\n offset = currentState.offset,\n updateId = currentState.updateId,\n dataStartIndex = currentState.dataStartIndex,\n dataEndIndex = currentState.dataEndIndex;\n var barSize = props.barSize,\n layout = props.layout,\n barGap = props.barGap,\n barCategoryGap = props.barCategoryGap,\n globalMaxBarSize = props.maxBarSize;\n var _getAxisNameByLayout = getAxisNameByLayout(layout),\n numericAxisName = _getAxisNameByLayout.numericAxisName,\n cateAxisName = _getAxisNameByLayout.cateAxisName;\n var hasBar = hasGraphicalBarItem(graphicalItems);\n var sizeList = hasBar && getBarSizeList({\n barSize: barSize,\n stackGroups: stackGroups\n });\n var formattedItems = [];\n graphicalItems.forEach(function (item, index) {\n var displayedData = getDisplayedData(props.data, {\n dataStartIndex: dataStartIndex,\n dataEndIndex: dataEndIndex\n }, item);\n var _item$props = item.props,\n dataKey = _item$props.dataKey,\n childMaxBarSize = _item$props.maxBarSize;\n var numericAxisId = item.props[\"\".concat(numericAxisName, \"Id\")];\n var cateAxisId = item.props[\"\".concat(cateAxisName, \"Id\")];\n var axisObj = axisComponents.reduce(function (result, entry) {\n var _objectSpread6;\n var axisMap = currentState[\"\".concat(entry.axisType, \"Map\")];\n var id = item.props[\"\".concat(entry.axisType, \"Id\")];\n var axis = axisMap && axisMap[id];\n return _objectSpread(_objectSpread({}, result), {}, (_objectSpread6 = {}, _defineProperty(_objectSpread6, entry.axisType, axis), _defineProperty(_objectSpread6, \"\".concat(entry.axisType, \"Ticks\"), getTicksOfAxis(axis)), _objectSpread6));\n }, {});\n var cateAxis = axisObj[cateAxisName];\n var cateTicks = axisObj[\"\".concat(cateAxisName, \"Ticks\")];\n var stackedData = stackGroups && stackGroups[numericAxisId] && stackGroups[numericAxisId].hasStack && getStackedDataOfItem(item, stackGroups[numericAxisId].stackGroups);\n var itemIsBar = getDisplayName(item.type).indexOf('Bar') >= 0;\n var bandSize = getBandSizeOfAxis(cateAxis, cateTicks);\n var barPosition = [];\n if (itemIsBar) {\n var _ref7, _getBandSizeOfAxis;\n // 如果是bar,计算bar的位置\n var maxBarSize = _isNil(childMaxBarSize) ? globalMaxBarSize : childMaxBarSize;\n var barBandSize = (_ref7 = (_getBandSizeOfAxis = getBandSizeOfAxis(cateAxis, cateTicks, true)) !== null && _getBandSizeOfAxis !== void 0 ? _getBandSizeOfAxis : maxBarSize) !== null && _ref7 !== void 0 ? _ref7 : 0;\n barPosition = getBarPosition({\n barGap: barGap,\n barCategoryGap: barCategoryGap,\n bandSize: barBandSize !== bandSize ? barBandSize : bandSize,\n sizeList: sizeList[cateAxisId],\n maxBarSize: maxBarSize\n });\n if (barBandSize !== bandSize) {\n barPosition = barPosition.map(function (pos) {\n return _objectSpread(_objectSpread({}, pos), {}, {\n position: _objectSpread(_objectSpread({}, pos.position), {}, {\n offset: pos.position.offset - barBandSize / 2\n })\n });\n });\n }\n }\n var composedFn = item && item.type && item.type.getComposedData;\n if (composedFn) {\n var _objectSpread7;\n formattedItems.push({\n props: _objectSpread(_objectSpread({}, composedFn(_objectSpread(_objectSpread({}, axisObj), {}, {\n displayedData: displayedData,\n props: props,\n dataKey: dataKey,\n item: item,\n bandSize: bandSize,\n barPosition: barPosition,\n offset: offset,\n stackedData: stackedData,\n layout: layout,\n dataStartIndex: dataStartIndex,\n dataEndIndex: dataEndIndex\n }))), {}, (_objectSpread7 = {\n key: item.key || \"item-\".concat(index)\n }, _defineProperty(_objectSpread7, numericAxisName, axisObj[numericAxisName]), _defineProperty(_objectSpread7, cateAxisName, axisObj[cateAxisName]), _defineProperty(_objectSpread7, \"animationId\", updateId), _objectSpread7)),\n childIndex: parseChildIndex(item, props.children),\n item: item\n });\n }\n });\n return formattedItems;\n };\n\n /**\n * The AxisMaps are expensive to render on large data sets\n * so provide the ability to store them in state and only update them when necessary\n * they are dependent upon the start and end index of\n * the brush so it's important that this method is called _after_\n * the state is updated with any new start/end indices\n *\n * @param {Object} props The props object to be used for updating the axismaps\n * dataStartIndex: The start index of the data series when a brush is applied\n * dataEndIndex: The end index of the data series when a brush is applied\n * updateId: The update id\n * @param {Object} prevState Prev state\n * @return {Object} state New state to set\n */\n var updateStateOfAxisMapsOffsetAndStackGroups = function updateStateOfAxisMapsOffsetAndStackGroups(_ref8, prevState) {\n var props = _ref8.props,\n dataStartIndex = _ref8.dataStartIndex,\n dataEndIndex = _ref8.dataEndIndex,\n updateId = _ref8.updateId;\n if (!validateWidthHeight({\n props: props\n })) {\n return null;\n }\n var children = props.children,\n layout = props.layout,\n stackOffset = props.stackOffset,\n data = props.data,\n reverseStackOrder = props.reverseStackOrder;\n var _getAxisNameByLayout2 = getAxisNameByLayout(layout),\n numericAxisName = _getAxisNameByLayout2.numericAxisName,\n cateAxisName = _getAxisNameByLayout2.cateAxisName;\n var graphicalItems = findAllByType(children, GraphicalChild);\n var stackGroups = getStackGroupsByAxisId(data, graphicalItems, \"\".concat(numericAxisName, \"Id\"), \"\".concat(cateAxisName, \"Id\"), stackOffset, reverseStackOrder);\n var axisObj = axisComponents.reduce(function (result, entry) {\n var name = \"\".concat(entry.axisType, \"Map\");\n return _objectSpread(_objectSpread({}, result), {}, _defineProperty({}, name, getAxisMap(props, _objectSpread(_objectSpread({}, entry), {}, {\n graphicalItems: graphicalItems,\n stackGroups: entry.axisType === numericAxisName && stackGroups,\n dataStartIndex: dataStartIndex,\n dataEndIndex: dataEndIndex\n }))));\n }, {});\n var offset = calculateOffset(_objectSpread(_objectSpread({}, axisObj), {}, {\n props: props,\n graphicalItems: graphicalItems\n }), prevState === null || prevState === void 0 ? void 0 : prevState.legendBBox);\n Object.keys(axisObj).forEach(function (key) {\n axisObj[key] = formatAxisMap(props, axisObj[key], offset, key.replace('Map', ''), chartName);\n });\n var cateAxisMap = axisObj[\"\".concat(cateAxisName, \"Map\")];\n var ticksObj = tooltipTicksGenerator(cateAxisMap);\n var formattedGraphicalItems = getFormatItems(props, _objectSpread(_objectSpread({}, axisObj), {}, {\n dataStartIndex: dataStartIndex,\n dataEndIndex: dataEndIndex,\n updateId: updateId,\n graphicalItems: graphicalItems,\n stackGroups: stackGroups,\n offset: offset\n }));\n return _objectSpread(_objectSpread({\n formattedGraphicalItems: formattedGraphicalItems,\n graphicalItems: graphicalItems,\n offset: offset,\n stackGroups: stackGroups\n }, ticksObj), axisObj);\n };\n return _class = /*#__PURE__*/function (_Component) {\n _inherits(CategoricalChartWrapper, _Component);\n var _super = _createSuper(CategoricalChartWrapper);\n function CategoricalChartWrapper(_props) {\n var _this;\n _classCallCheck(this, CategoricalChartWrapper);\n _this = _super.call(this, _props);\n _defineProperty(_assertThisInitialized(_this), \"accessibilityManager\", new AccessibilityManager());\n _defineProperty(_assertThisInitialized(_this), \"clearDeferId\", function () {\n if (!_isNil(_this.deferId) && deferClear) {\n deferClear(_this.deferId);\n }\n _this.deferId = null;\n });\n _defineProperty(_assertThisInitialized(_this), \"handleLegendBBoxUpdate\", function (box) {\n if (box) {\n var _this$state = _this.state,\n dataStartIndex = _this$state.dataStartIndex,\n dataEndIndex = _this$state.dataEndIndex,\n updateId = _this$state.updateId;\n _this.setState(_objectSpread({\n legendBBox: box\n }, updateStateOfAxisMapsOffsetAndStackGroups({\n props: _this.props,\n dataStartIndex: dataStartIndex,\n dataEndIndex: dataEndIndex,\n updateId: updateId\n }, _objectSpread(_objectSpread({}, _this.state), {}, {\n legendBBox: box\n }))));\n }\n });\n _defineProperty(_assertThisInitialized(_this), \"handleReceiveSyncEvent\", function (cId, chartId, data) {\n var syncId = _this.props.syncId;\n if (syncId === cId && chartId !== _this.uniqueChartId) {\n _this.clearDeferId();\n _this.deferId = defer && defer(_this.applySyncEvent.bind(_assertThisInitialized(_this), data));\n }\n });\n _defineProperty(_assertThisInitialized(_this), \"handleBrushChange\", function (_ref9) {\n var startIndex = _ref9.startIndex,\n endIndex = _ref9.endIndex;\n // Only trigger changes if the extents of the brush have actually changed\n if (startIndex !== _this.state.dataStartIndex || endIndex !== _this.state.dataEndIndex) {\n var updateId = _this.state.updateId;\n _this.setState(function () {\n return _objectSpread({\n dataStartIndex: startIndex,\n dataEndIndex: endIndex\n }, updateStateOfAxisMapsOffsetAndStackGroups({\n props: _this.props,\n dataStartIndex: startIndex,\n dataEndIndex: endIndex,\n updateId: updateId\n }, _this.state));\n });\n _this.triggerSyncEvent({\n dataStartIndex: startIndex,\n dataEndIndex: endIndex\n });\n }\n });\n /**\n * The handler of mouse entering chart\n * @param {Object} e Event object\n * @return {Null} null\n */\n _defineProperty(_assertThisInitialized(_this), \"handleMouseEnter\", function (e) {\n var onMouseEnter = _this.props.onMouseEnter;\n var mouse = _this.getMouseInfo(e);\n if (mouse) {\n var _nextState = _objectSpread(_objectSpread({}, mouse), {}, {\n isTooltipActive: true\n });\n _this.setState(_nextState);\n _this.triggerSyncEvent(_nextState);\n if (_isFunction(onMouseEnter)) {\n onMouseEnter(_nextState, e);\n }\n }\n });\n _defineProperty(_assertThisInitialized(_this), \"triggeredAfterMouseMove\", function (e) {\n var onMouseMove = _this.props.onMouseMove;\n var mouse = _this.getMouseInfo(e);\n var nextState = mouse ? _objectSpread(_objectSpread({}, mouse), {}, {\n isTooltipActive: true\n }) : {\n isTooltipActive: false\n };\n _this.setState(nextState);\n _this.triggerSyncEvent(nextState);\n if (_isFunction(onMouseMove)) {\n onMouseMove(nextState, e);\n }\n });\n /**\n * The handler of mouse entering a scatter\n * @param {Object} el The active scatter\n * @return {Object} no return\n */\n _defineProperty(_assertThisInitialized(_this), \"handleItemMouseEnter\", function (el) {\n _this.setState(function () {\n return {\n isTooltipActive: true,\n activeItem: el,\n activePayload: el.tooltipPayload,\n activeCoordinate: el.tooltipPosition || {\n x: el.cx,\n y: el.cy\n }\n };\n });\n });\n /**\n * The handler of mouse leaving a scatter\n * @return {Object} no return\n */\n _defineProperty(_assertThisInitialized(_this), \"handleItemMouseLeave\", function () {\n _this.setState(function () {\n return {\n isTooltipActive: false\n };\n });\n });\n /**\n * The handler of mouse moving in chart\n * @param {Object} e Event object\n * @return {Null} no return\n */\n _defineProperty(_assertThisInitialized(_this), \"handleMouseMove\", function (e) {\n if (e && _isFunction(e.persist)) {\n e.persist();\n }\n _this.triggeredAfterMouseMove(e);\n });\n /**\n * The handler if mouse leaving chart\n * @param {Object} e Event object\n * @return {Null} no return\n */\n _defineProperty(_assertThisInitialized(_this), \"handleMouseLeave\", function (e) {\n var onMouseLeave = _this.props.onMouseLeave;\n var nextState = {\n isTooltipActive: false\n };\n _this.setState(nextState);\n _this.triggerSyncEvent(nextState);\n if (_isFunction(onMouseLeave)) {\n onMouseLeave(nextState, e);\n }\n _this.cancelThrottledTriggerAfterMouseMove();\n });\n _defineProperty(_assertThisInitialized(_this), \"handleOuterEvent\", function (e) {\n var eventName = getReactEventByType(e);\n var event = _get(_this.props, \"\".concat(eventName));\n if (eventName && _isFunction(event)) {\n var mouse;\n if (/.*touch.*/i.test(eventName)) {\n mouse = _this.getMouseInfo(e.changedTouches[0]);\n } else {\n mouse = _this.getMouseInfo(e);\n }\n var handler = event;\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n handler(mouse, e);\n }\n });\n _defineProperty(_assertThisInitialized(_this), \"handleClick\", function (e) {\n var onClick = _this.props.onClick;\n var mouse = _this.getMouseInfo(e);\n if (mouse) {\n var _nextState2 = _objectSpread(_objectSpread({}, mouse), {}, {\n isTooltipActive: true\n });\n _this.setState(_nextState2);\n _this.triggerSyncEvent(_nextState2);\n if (_isFunction(onClick)) {\n onClick(_nextState2, e);\n }\n }\n });\n _defineProperty(_assertThisInitialized(_this), \"handleMouseDown\", function (e) {\n var onMouseDown = _this.props.onMouseDown;\n if (_isFunction(onMouseDown)) {\n var _nextState3 = _this.getMouseInfo(e);\n onMouseDown(_nextState3, e);\n }\n });\n _defineProperty(_assertThisInitialized(_this), \"handleMouseUp\", function (e) {\n var onMouseUp = _this.props.onMouseUp;\n if (_isFunction(onMouseUp)) {\n var _nextState4 = _this.getMouseInfo(e);\n onMouseUp(_nextState4, e);\n }\n });\n _defineProperty(_assertThisInitialized(_this), \"handleTouchMove\", function (e) {\n if (e.changedTouches != null && e.changedTouches.length > 0) {\n _this.handleMouseMove(e.changedTouches[0]);\n }\n });\n _defineProperty(_assertThisInitialized(_this), \"handleTouchStart\", function (e) {\n if (e.changedTouches != null && e.changedTouches.length > 0) {\n _this.handleMouseDown(e.changedTouches[0]);\n }\n });\n _defineProperty(_assertThisInitialized(_this), \"handleTouchEnd\", function (e) {\n if (e.changedTouches != null && e.changedTouches.length > 0) {\n _this.handleMouseUp(e.changedTouches[0]);\n }\n });\n _defineProperty(_assertThisInitialized(_this), \"verticalCoordinatesGenerator\", function (_ref10) {\n var xAxis = _ref10.xAxis,\n width = _ref10.width,\n height = _ref10.height,\n offset = _ref10.offset;\n return getCoordinatesOfGrid(getTicks(_objectSpread(_objectSpread(_objectSpread({}, CartesianAxis.defaultProps), xAxis), {}, {\n ticks: getTicksOfAxis(xAxis, true),\n viewBox: {\n x: 0,\n y: 0,\n width: width,\n height: height\n }\n })), offset.left, offset.left + offset.width);\n });\n _defineProperty(_assertThisInitialized(_this), \"horizontalCoordinatesGenerator\", function (_ref11) {\n var yAxis = _ref11.yAxis,\n width = _ref11.width,\n height = _ref11.height,\n offset = _ref11.offset;\n return getCoordinatesOfGrid(getTicks(_objectSpread(_objectSpread(_objectSpread({}, CartesianAxis.defaultProps), yAxis), {}, {\n ticks: getTicksOfAxis(yAxis, true),\n viewBox: {\n x: 0,\n y: 0,\n width: width,\n height: height\n }\n })), offset.top, offset.top + offset.height);\n });\n _defineProperty(_assertThisInitialized(_this), \"axesTicksGenerator\", function (axis) {\n return getTicksOfAxis(axis, true);\n });\n _defineProperty(_assertThisInitialized(_this), \"renderCursor\", function (element) {\n var _this$state2 = _this.state,\n isTooltipActive = _this$state2.isTooltipActive,\n activeCoordinate = _this$state2.activeCoordinate,\n activePayload = _this$state2.activePayload,\n offset = _this$state2.offset,\n activeTooltipIndex = _this$state2.activeTooltipIndex;\n var tooltipEventType = _this.getTooltipEventType();\n if (!element || !element.props.cursor || !isTooltipActive || !activeCoordinate || chartName !== 'ScatterChart' && tooltipEventType !== 'axis') {\n return null;\n }\n var layout = _this.props.layout;\n var restProps;\n var cursorComp = Curve;\n if (chartName === 'ScatterChart') {\n restProps = activeCoordinate;\n cursorComp = Cross;\n } else if (chartName === 'BarChart') {\n restProps = _this.getCursorRectangle();\n cursorComp = Rectangle;\n } else if (layout === 'radial') {\n var _this$getCursorPoints = _this.getCursorPoints(),\n cx = _this$getCursorPoints.cx,\n cy = _this$getCursorPoints.cy,\n radius = _this$getCursorPoints.radius,\n startAngle = _this$getCursorPoints.startAngle,\n endAngle = _this$getCursorPoints.endAngle;\n restProps = {\n cx: cx,\n cy: cy,\n startAngle: startAngle,\n endAngle: endAngle,\n innerRadius: radius,\n outerRadius: radius\n };\n cursorComp = Sector;\n } else {\n restProps = {\n points: _this.getCursorPoints()\n };\n cursorComp = Curve;\n }\n var key = element.key || '_recharts-cursor';\n var cursorProps = _objectSpread(_objectSpread(_objectSpread(_objectSpread({\n stroke: '#ccc',\n pointerEvents: 'none'\n }, offset), restProps), filterProps(element.props.cursor)), {}, {\n payload: activePayload,\n payloadIndex: activeTooltipIndex,\n key: key,\n className: 'recharts-tooltip-cursor'\n });\n return /*#__PURE__*/isValidElement(element.props.cursor) ? /*#__PURE__*/cloneElement(element.props.cursor, cursorProps) : /*#__PURE__*/createElement(cursorComp, cursorProps);\n });\n _defineProperty(_assertThisInitialized(_this), \"renderPolarAxis\", function (element, displayName, index) {\n var axisType = _get(element, 'type.axisType');\n var axisMap = _get(_this.state, \"\".concat(axisType, \"Map\"));\n var axisOption = axisMap && axisMap[element.props[\"\".concat(axisType, \"Id\")]];\n return /*#__PURE__*/cloneElement(element, _objectSpread(_objectSpread({}, axisOption), {}, {\n className: axisType,\n key: element.key || \"\".concat(displayName, \"-\").concat(index),\n ticks: getTicksOfAxis(axisOption, true)\n }));\n });\n _defineProperty(_assertThisInitialized(_this), \"renderXAxis\", function (element, displayName, index) {\n var xAxisMap = _this.state.xAxisMap;\n var axisObj = xAxisMap[element.props.xAxisId];\n return _this.renderAxis(axisObj, element, displayName, index);\n });\n _defineProperty(_assertThisInitialized(_this), \"renderYAxis\", function (element, displayName, index) {\n var yAxisMap = _this.state.yAxisMap;\n var axisObj = yAxisMap[element.props.yAxisId];\n return _this.renderAxis(axisObj, element, displayName, index);\n });\n /**\n * Draw grid\n * @param {ReactElement} element the grid item\n * @return {ReactElement} The instance of grid\n */\n _defineProperty(_assertThisInitialized(_this), \"renderGrid\", function (element) {\n var _this$state3 = _this.state,\n xAxisMap = _this$state3.xAxisMap,\n yAxisMap = _this$state3.yAxisMap,\n offset = _this$state3.offset;\n var _this$props = _this.props,\n width = _this$props.width,\n height = _this$props.height;\n var xAxis = getAnyElementOfObject(xAxisMap);\n var yAxisWithFiniteDomain = _find(yAxisMap, function (axis) {\n return _every(axis.domain, isFinit);\n });\n var yAxis = yAxisWithFiniteDomain || getAnyElementOfObject(yAxisMap);\n var props = element.props || {};\n return /*#__PURE__*/cloneElement(element, {\n key: element.key || 'grid',\n x: isNumber(props.x) ? props.x : offset.left,\n y: isNumber(props.y) ? props.y : offset.top,\n width: isNumber(props.width) ? props.width : offset.width,\n height: isNumber(props.height) ? props.height : offset.height,\n xAxis: xAxis,\n yAxis: yAxis,\n offset: offset,\n chartWidth: width,\n chartHeight: height,\n verticalCoordinatesGenerator: props.verticalCoordinatesGenerator || _this.verticalCoordinatesGenerator,\n horizontalCoordinatesGenerator: props.horizontalCoordinatesGenerator || _this.horizontalCoordinatesGenerator\n });\n });\n _defineProperty(_assertThisInitialized(_this), \"renderPolarGrid\", function (element) {\n var _element$props = element.props,\n radialLines = _element$props.radialLines,\n polarAngles = _element$props.polarAngles,\n polarRadius = _element$props.polarRadius;\n var _this$state4 = _this.state,\n radiusAxisMap = _this$state4.radiusAxisMap,\n angleAxisMap = _this$state4.angleAxisMap;\n var radiusAxis = getAnyElementOfObject(radiusAxisMap);\n var angleAxis = getAnyElementOfObject(angleAxisMap);\n var cx = angleAxis.cx,\n cy = angleAxis.cy,\n innerRadius = angleAxis.innerRadius,\n outerRadius = angleAxis.outerRadius;\n return /*#__PURE__*/cloneElement(element, {\n polarAngles: _isArray(polarAngles) ? polarAngles : getTicksOfAxis(angleAxis, true).map(function (entry) {\n return entry.coordinate;\n }),\n polarRadius: _isArray(polarRadius) ? polarRadius : getTicksOfAxis(radiusAxis, true).map(function (entry) {\n return entry.coordinate;\n }),\n cx: cx,\n cy: cy,\n innerRadius: innerRadius,\n outerRadius: outerRadius,\n key: element.key || 'polar-grid',\n radialLines: radialLines\n });\n });\n /**\n * Draw legend\n * @return {ReactElement} The instance of Legend\n */\n _defineProperty(_assertThisInitialized(_this), \"renderLegend\", function () {\n var formattedGraphicalItems = _this.state.formattedGraphicalItems;\n var _this$props2 = _this.props,\n children = _this$props2.children,\n width = _this$props2.width,\n height = _this$props2.height;\n var margin = _this.props.margin || {};\n var legendWidth = width - (margin.left || 0) - (margin.right || 0);\n var props = getLegendProps({\n children: children,\n formattedGraphicalItems: formattedGraphicalItems,\n legendWidth: legendWidth,\n legendContent: legendContent\n });\n if (!props) {\n return null;\n }\n var item = props.item,\n otherProps = _objectWithoutProperties(props, _excluded);\n return /*#__PURE__*/cloneElement(item, _objectSpread(_objectSpread({}, otherProps), {}, {\n chartWidth: width,\n chartHeight: height,\n margin: margin,\n ref: function ref(legend) {\n _this.legendInstance = legend;\n },\n onBBoxUpdate: _this.handleLegendBBoxUpdate\n }));\n });\n /**\n * Draw Tooltip\n * @return {ReactElement} The instance of Tooltip\n */\n _defineProperty(_assertThisInitialized(_this), \"renderTooltip\", function () {\n var children = _this.props.children;\n var tooltipItem = findChildByType(children, Tooltip);\n if (!tooltipItem) {\n return null;\n }\n var _this$state5 = _this.state,\n isTooltipActive = _this$state5.isTooltipActive,\n activeCoordinate = _this$state5.activeCoordinate,\n activePayload = _this$state5.activePayload,\n activeLabel = _this$state5.activeLabel,\n offset = _this$state5.offset;\n return /*#__PURE__*/cloneElement(tooltipItem, {\n viewBox: _objectSpread(_objectSpread({}, offset), {}, {\n x: offset.left,\n y: offset.top\n }),\n active: isTooltipActive,\n label: activeLabel,\n payload: isTooltipActive ? activePayload : [],\n coordinate: activeCoordinate\n });\n });\n _defineProperty(_assertThisInitialized(_this), \"renderBrush\", function (element) {\n var _this$props3 = _this.props,\n margin = _this$props3.margin,\n data = _this$props3.data;\n var _this$state6 = _this.state,\n offset = _this$state6.offset,\n dataStartIndex = _this$state6.dataStartIndex,\n dataEndIndex = _this$state6.dataEndIndex,\n updateId = _this$state6.updateId;\n\n // TODO: update brush when children update\n return /*#__PURE__*/cloneElement(element, {\n key: element.key || '_recharts-brush',\n onChange: combineEventHandlers(_this.handleBrushChange, null, element.props.onChange),\n data: data,\n x: isNumber(element.props.x) ? element.props.x : offset.left,\n y: isNumber(element.props.y) ? element.props.y : offset.top + offset.height + offset.brushBottom - (margin.bottom || 0),\n width: isNumber(element.props.width) ? element.props.width : offset.width,\n startIndex: dataStartIndex,\n endIndex: dataEndIndex,\n updateId: \"brush-\".concat(updateId)\n });\n });\n _defineProperty(_assertThisInitialized(_this), \"renderReferenceElement\", function (element, displayName, index) {\n if (!element) {\n return null;\n }\n var _assertThisInitialize = _assertThisInitialized(_this),\n clipPathId = _assertThisInitialize.clipPathId;\n var _this$state7 = _this.state,\n xAxisMap = _this$state7.xAxisMap,\n yAxisMap = _this$state7.yAxisMap,\n offset = _this$state7.offset;\n var _element$props2 = element.props,\n xAxisId = _element$props2.xAxisId,\n yAxisId = _element$props2.yAxisId;\n return /*#__PURE__*/cloneElement(element, {\n key: element.key || \"\".concat(displayName, \"-\").concat(index),\n xAxis: xAxisMap[xAxisId],\n yAxis: yAxisMap[yAxisId],\n viewBox: {\n x: offset.left,\n y: offset.top,\n width: offset.width,\n height: offset.height\n },\n clipPathId: clipPathId\n });\n });\n _defineProperty(_assertThisInitialized(_this), \"renderActivePoints\", function (_ref12) {\n var item = _ref12.item,\n activePoint = _ref12.activePoint,\n basePoint = _ref12.basePoint,\n childIndex = _ref12.childIndex,\n isRange = _ref12.isRange;\n var result = [];\n var key = item.props.key;\n var _item$item$props = item.item.props,\n activeDot = _item$item$props.activeDot,\n dataKey = _item$item$props.dataKey;\n var dotProps = _objectSpread(_objectSpread({\n index: childIndex,\n dataKey: dataKey,\n cx: activePoint.x,\n cy: activePoint.y,\n r: 4,\n fill: getMainColorOfGraphicItem(item.item),\n strokeWidth: 2,\n stroke: '#fff',\n payload: activePoint.payload,\n value: activePoint.value,\n key: \"\".concat(key, \"-activePoint-\").concat(childIndex)\n }, filterProps(activeDot)), adaptEventHandlers(activeDot));\n result.push(CategoricalChartWrapper.renderActiveDot(activeDot, dotProps));\n if (basePoint) {\n result.push(CategoricalChartWrapper.renderActiveDot(activeDot, _objectSpread(_objectSpread({}, dotProps), {}, {\n cx: basePoint.x,\n cy: basePoint.y,\n key: \"\".concat(key, \"-basePoint-\").concat(childIndex)\n })));\n } else if (isRange) {\n result.push(null);\n }\n return result;\n });\n _defineProperty(_assertThisInitialized(_this), \"renderGraphicChild\", function (element, displayName, index) {\n var item = _this.filterFormatItem(element, displayName, index);\n if (!item) {\n return null;\n }\n var tooltipEventType = _this.getTooltipEventType();\n var _this$state8 = _this.state,\n isTooltipActive = _this$state8.isTooltipActive,\n tooltipAxis = _this$state8.tooltipAxis,\n activeTooltipIndex = _this$state8.activeTooltipIndex,\n activeLabel = _this$state8.activeLabel;\n var children = _this.props.children;\n var tooltipItem = findChildByType(children, Tooltip);\n var _item$props2 = item.props,\n points = _item$props2.points,\n isRange = _item$props2.isRange,\n baseLine = _item$props2.baseLine;\n var _item$item$props2 = item.item.props,\n activeDot = _item$item$props2.activeDot,\n hide = _item$item$props2.hide;\n var hasActive = !hide && isTooltipActive && tooltipItem && activeDot && activeTooltipIndex >= 0;\n var itemEvents = {};\n if (tooltipEventType !== 'axis' && tooltipItem && tooltipItem.props.trigger === 'click') {\n itemEvents = {\n onClick: combineEventHandlers(_this.handleItemMouseEnter, null, element.props.onCLick)\n };\n } else if (tooltipEventType !== 'axis') {\n itemEvents = {\n onMouseLeave: combineEventHandlers(_this.handleItemMouseLeave, null, element.props.onMouseLeave),\n onMouseEnter: combineEventHandlers(_this.handleItemMouseEnter, null, element.props.onMouseEnter)\n };\n }\n var graphicalItem = /*#__PURE__*/cloneElement(element, _objectSpread(_objectSpread({}, item.props), itemEvents));\n function findWithPayload(entry) {\n // TODO needs to verify dataKey is Function\n return typeof tooltipAxis.dataKey === 'function' ? tooltipAxis.dataKey(entry.payload) : null;\n }\n if (hasActive) {\n var activePoint, basePoint;\n if (tooltipAxis.dataKey && !tooltipAxis.allowDuplicatedCategory) {\n // number transform to string\n var specifiedKey = typeof tooltipAxis.dataKey === 'function' ? findWithPayload : 'payload.'.concat(tooltipAxis.dataKey.toString());\n activePoint = findEntryInArray(points, specifiedKey, activeLabel);\n basePoint = isRange && baseLine && findEntryInArray(baseLine, specifiedKey, activeLabel);\n } else {\n activePoint = points[activeTooltipIndex];\n basePoint = isRange && baseLine && baseLine[activeTooltipIndex];\n }\n if (!_isNil(activePoint)) {\n return [graphicalItem].concat(_toConsumableArray(_this.renderActivePoints({\n item: item,\n activePoint: activePoint,\n basePoint: basePoint,\n childIndex: activeTooltipIndex,\n isRange: isRange\n })));\n }\n }\n if (isRange) {\n return [graphicalItem, null, null];\n }\n return [graphicalItem, null];\n });\n _defineProperty(_assertThisInitialized(_this), \"renderCustomized\", function (element, displayName, index) {\n return /*#__PURE__*/cloneElement(element, _objectSpread(_objectSpread({\n key: \"recharts-customized-\".concat(index)\n }, _this.props), _this.state));\n });\n _this.uniqueChartId = _isNil(_props.id) ? uniqueId('recharts') : _props.id;\n _this.clipPathId = \"\".concat(_this.uniqueChartId, \"-clip\");\n if (_props.throttleDelay) {\n _this.triggeredAfterMouseMove = _throttle(_this.triggeredAfterMouseMove, _props.throttleDelay);\n }\n _this.state = {};\n return _this;\n }\n _createClass(CategoricalChartWrapper, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this$props$margin$le, _this$props$margin$to;\n if (!_isNil(this.props.syncId)) {\n this.addListener();\n }\n this.accessibilityManager.setDetails({\n container: this.container,\n offset: {\n left: (_this$props$margin$le = this.props.margin.left) !== null && _this$props$margin$le !== void 0 ? _this$props$margin$le : 0,\n top: (_this$props$margin$to = this.props.margin.top) !== null && _this$props$margin$to !== void 0 ? _this$props$margin$to : 0\n },\n coordinateList: this.state.tooltipTicks,\n mouseHandlerCallback: this.handleMouseMove,\n layout: this.props.layout\n });\n }\n }, {\n key: \"getSnapshotBeforeUpdate\",\n value: function getSnapshotBeforeUpdate(prevProps, prevState) {\n if (!this.props.accessibilityLayer) {\n return null;\n }\n if (this.state.tooltipTicks !== prevState.tooltipTicks) {\n this.accessibilityManager.setDetails({\n coordinateList: this.state.tooltipTicks\n });\n }\n if (this.props.layout !== prevProps.layout) {\n this.accessibilityManager.setDetails({\n layout: this.props.layout\n });\n }\n if (this.props.margin !== prevProps.margin) {\n var _this$props$margin$le2, _this$props$margin$to2;\n this.accessibilityManager.setDetails({\n offset: {\n left: (_this$props$margin$le2 = this.props.margin.left) !== null && _this$props$margin$le2 !== void 0 ? _this$props$margin$le2 : 0,\n top: (_this$props$margin$to2 = this.props.margin.top) !== null && _this$props$margin$to2 !== void 0 ? _this$props$margin$to2 : 0\n }\n });\n }\n\n // Something has to be returned for getSnapshotBeforeUpdate\n return null;\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n // add syncId\n if (_isNil(prevProps.syncId) && !_isNil(this.props.syncId)) {\n this.addListener();\n }\n // remove syncId\n if (!_isNil(prevProps.syncId) && _isNil(this.props.syncId)) {\n this.removeListener();\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.clearDeferId();\n if (!_isNil(this.props.syncId)) {\n this.removeListener();\n }\n this.cancelThrottledTriggerAfterMouseMove();\n }\n }, {\n key: \"cancelThrottledTriggerAfterMouseMove\",\n value: function cancelThrottledTriggerAfterMouseMove() {\n if (typeof this.triggeredAfterMouseMove.cancel === 'function') {\n this.triggeredAfterMouseMove.cancel();\n }\n }\n }, {\n key: \"getTooltipEventType\",\n value: function getTooltipEventType() {\n var tooltipItem = findChildByType(this.props.children, Tooltip);\n if (tooltipItem && _isBoolean(tooltipItem.props.shared)) {\n var eventType = tooltipItem.props.shared ? 'axis' : 'item';\n return validateTooltipEventTypes.indexOf(eventType) >= 0 ? eventType : defaultTooltipEventType;\n }\n return defaultTooltipEventType;\n }\n\n /**\n * Get the information of mouse in chart, return null when the mouse is not in the chart\n * @param {Object} event The event object\n * @return {Object} Mouse data\n */\n }, {\n key: \"getMouseInfo\",\n value: function getMouseInfo(event) {\n if (!this.container) {\n return null;\n }\n var containerOffset = getOffset(this.container);\n var e = calculateChartCoordinate(event, containerOffset);\n var rangeObj = this.inRange(e.chartX, e.chartY);\n if (!rangeObj) {\n return null;\n }\n var _this$state9 = this.state,\n xAxisMap = _this$state9.xAxisMap,\n yAxisMap = _this$state9.yAxisMap;\n var tooltipEventType = this.getTooltipEventType();\n if (tooltipEventType !== 'axis' && xAxisMap && yAxisMap) {\n var xScale = getAnyElementOfObject(xAxisMap).scale;\n var yScale = getAnyElementOfObject(yAxisMap).scale;\n var xValue = xScale && xScale.invert ? xScale.invert(e.chartX) : null;\n var yValue = yScale && yScale.invert ? yScale.invert(e.chartY) : null;\n return _objectSpread(_objectSpread({}, e), {}, {\n xValue: xValue,\n yValue: yValue\n });\n }\n var toolTipData = getTooltipData(this.state, this.props.data, this.props.layout, rangeObj);\n if (toolTipData) {\n return _objectSpread(_objectSpread({}, e), toolTipData);\n }\n return null;\n }\n }, {\n key: \"getCursorRectangle\",\n value: function getCursorRectangle() {\n var layout = this.props.layout;\n var _this$state10 = this.state,\n activeCoordinate = _this$state10.activeCoordinate,\n offset = _this$state10.offset,\n tooltipAxisBandSize = _this$state10.tooltipAxisBandSize;\n var halfSize = tooltipAxisBandSize / 2;\n return {\n stroke: 'none',\n fill: '#ccc',\n x: layout === 'horizontal' ? activeCoordinate.x - halfSize : offset.left + 0.5,\n y: layout === 'horizontal' ? offset.top + 0.5 : activeCoordinate.y - halfSize,\n width: layout === 'horizontal' ? tooltipAxisBandSize : offset.width - 1,\n height: layout === 'horizontal' ? offset.height - 1 : tooltipAxisBandSize\n };\n }\n }, {\n key: \"getCursorPoints\",\n value: function getCursorPoints() {\n var layout = this.props.layout;\n var _this$state11 = this.state,\n activeCoordinate = _this$state11.activeCoordinate,\n offset = _this$state11.offset;\n var x1, y1, x2, y2;\n if (layout === 'horizontal') {\n x1 = activeCoordinate.x;\n x2 = x1;\n y1 = offset.top;\n y2 = offset.top + offset.height;\n } else if (layout === 'vertical') {\n y1 = activeCoordinate.y;\n y2 = y1;\n x1 = offset.left;\n x2 = offset.left + offset.width;\n } else if (!_isNil(activeCoordinate.cx) || !_isNil(activeCoordinate.cy)) {\n if (layout === 'centric') {\n var cx = activeCoordinate.cx,\n cy = activeCoordinate.cy,\n innerRadius = activeCoordinate.innerRadius,\n outerRadius = activeCoordinate.outerRadius,\n angle = activeCoordinate.angle;\n var innerPoint = polarToCartesian(cx, cy, innerRadius, angle);\n var outerPoint = polarToCartesian(cx, cy, outerRadius, angle);\n x1 = innerPoint.x;\n y1 = innerPoint.y;\n x2 = outerPoint.x;\n y2 = outerPoint.y;\n } else {\n var _cx = activeCoordinate.cx,\n _cy = activeCoordinate.cy,\n radius = activeCoordinate.radius,\n startAngle = activeCoordinate.startAngle,\n endAngle = activeCoordinate.endAngle;\n var startPoint = polarToCartesian(_cx, _cy, radius, startAngle);\n var endPoint = polarToCartesian(_cx, _cy, radius, endAngle);\n return {\n points: [startPoint, endPoint],\n cx: _cx,\n cy: _cy,\n radius: radius,\n startAngle: startAngle,\n endAngle: endAngle\n };\n }\n }\n return [{\n x: x1,\n y: y1\n }, {\n x: x2,\n y: y2\n }];\n }\n }, {\n key: \"inRange\",\n value: function inRange(x, y) {\n var layout = this.props.layout;\n if (layout === 'horizontal' || layout === 'vertical') {\n var offset = this.state.offset;\n var isInRange = x >= offset.left && x <= offset.left + offset.width && y >= offset.top && y <= offset.top + offset.height;\n return isInRange ? {\n x: x,\n y: y\n } : null;\n }\n var _this$state12 = this.state,\n angleAxisMap = _this$state12.angleAxisMap,\n radiusAxisMap = _this$state12.radiusAxisMap;\n if (angleAxisMap && radiusAxisMap) {\n var angleAxis = getAnyElementOfObject(angleAxisMap);\n return inRangeOfSector({\n x: x,\n y: y\n }, angleAxis);\n }\n return null;\n }\n }, {\n key: \"parseEventsOfWrapper\",\n value: function parseEventsOfWrapper() {\n var children = this.props.children;\n var tooltipEventType = this.getTooltipEventType();\n var tooltipItem = findChildByType(children, Tooltip);\n var tooltipEvents = {};\n if (tooltipItem && tooltipEventType === 'axis') {\n if (tooltipItem.props.trigger === 'click') {\n tooltipEvents = {\n onClick: this.handleClick\n };\n } else {\n tooltipEvents = {\n onMouseEnter: this.handleMouseEnter,\n onMouseMove: this.handleMouseMove,\n onMouseLeave: this.handleMouseLeave,\n onTouchMove: this.handleTouchMove,\n onTouchStart: this.handleTouchStart,\n onTouchEnd: this.handleTouchEnd\n };\n }\n }\n var outerEvents = adaptEventHandlers(this.props, this.handleOuterEvent);\n return _objectSpread(_objectSpread({}, outerEvents), tooltipEvents);\n }\n\n /* eslint-disable no-underscore-dangle */\n }, {\n key: \"addListener\",\n value: function addListener() {\n eventCenter.on(SYNC_EVENT, this.handleReceiveSyncEvent);\n if (eventCenter.setMaxListeners && eventCenter._maxListeners) {\n eventCenter.setMaxListeners(eventCenter._maxListeners + 1);\n }\n }\n }, {\n key: \"removeListener\",\n value: function removeListener() {\n eventCenter.removeListener(SYNC_EVENT, this.handleReceiveSyncEvent);\n if (eventCenter.setMaxListeners && eventCenter._maxListeners) {\n eventCenter.setMaxListeners(eventCenter._maxListeners - 1);\n }\n }\n }, {\n key: \"triggerSyncEvent\",\n value: function triggerSyncEvent(data) {\n var syncId = this.props.syncId;\n if (!_isNil(syncId)) {\n eventCenter.emit(SYNC_EVENT, syncId, this.uniqueChartId, data);\n }\n }\n }, {\n key: \"applySyncEvent\",\n value: function applySyncEvent(data) {\n var _this$props4 = this.props,\n layout = _this$props4.layout,\n syncMethod = _this$props4.syncMethod;\n var updateId = this.state.updateId;\n var dataStartIndex = data.dataStartIndex,\n dataEndIndex = data.dataEndIndex;\n if (!_isNil(data.dataStartIndex) || !_isNil(data.dataEndIndex)) {\n this.setState(_objectSpread({\n dataStartIndex: dataStartIndex,\n dataEndIndex: dataEndIndex\n }, updateStateOfAxisMapsOffsetAndStackGroups({\n props: this.props,\n dataStartIndex: dataStartIndex,\n dataEndIndex: dataEndIndex,\n updateId: updateId\n }, this.state)));\n } else if (!_isNil(data.activeTooltipIndex)) {\n var chartX = data.chartX,\n chartY = data.chartY;\n var activeTooltipIndex = data.activeTooltipIndex;\n var _this$state13 = this.state,\n offset = _this$state13.offset,\n tooltipTicks = _this$state13.tooltipTicks;\n if (!offset) {\n return;\n }\n if (typeof syncMethod === 'function') {\n // Call a callback function. If there is an application specific algorithm\n activeTooltipIndex = syncMethod(tooltipTicks, data);\n } else if (syncMethod === 'value') {\n // Set activeTooltipIndex to the index with the same value as data.activeLabel\n // For loop instead of findIndex because the latter is very slow in some browsers\n activeTooltipIndex = -1; // in case we cannot find the element\n for (var i = 0; i < tooltipTicks.length; i++) {\n if (tooltipTicks[i].value === data.activeLabel) {\n activeTooltipIndex = i;\n break;\n }\n }\n }\n var viewBox = _objectSpread(_objectSpread({}, offset), {}, {\n x: offset.left,\n y: offset.top\n });\n // When a categorical chart is combined with another chart, the value of chartX\n // and chartY may beyond the boundaries.\n var validateChartX = Math.min(chartX, viewBox.x + viewBox.width);\n var validateChartY = Math.min(chartY, viewBox.y + viewBox.height);\n var activeLabel = tooltipTicks[activeTooltipIndex] && tooltipTicks[activeTooltipIndex].value;\n var activePayload = getTooltipContent(this.state, this.props.data, activeTooltipIndex);\n var activeCoordinate = tooltipTicks[activeTooltipIndex] ? {\n x: layout === 'horizontal' ? tooltipTicks[activeTooltipIndex].coordinate : validateChartX,\n y: layout === 'horizontal' ? validateChartY : tooltipTicks[activeTooltipIndex].coordinate\n } : originCoordinate;\n this.setState(_objectSpread(_objectSpread({}, data), {}, {\n activeLabel: activeLabel,\n activeCoordinate: activeCoordinate,\n activePayload: activePayload,\n activeTooltipIndex: activeTooltipIndex\n }));\n } else {\n this.setState(data);\n }\n }\n }, {\n key: \"filterFormatItem\",\n value: function filterFormatItem(item, displayName, childIndex) {\n var formattedGraphicalItems = this.state.formattedGraphicalItems;\n for (var i = 0, len = formattedGraphicalItems.length; i < len; i++) {\n var entry = formattedGraphicalItems[i];\n if (entry.item === item || entry.props.key === item.key || displayName === getDisplayName(entry.item.type) && childIndex === entry.childIndex) {\n return entry;\n }\n }\n return null;\n }\n }, {\n key: \"renderAxis\",\n value:\n /**\n * Draw axis\n * @param {Object} axisOptions The options of axis\n * @param {Object} element The axis element\n * @param {String} displayName The display name of axis\n * @param {Number} index The index of element\n * @return {ReactElement} The instance of x-axes\n */\n function renderAxis(axisOptions, element, displayName, index) {\n var _this$props5 = this.props,\n width = _this$props5.width,\n height = _this$props5.height;\n return /*#__PURE__*/React.createElement(CartesianAxis, _extends({}, axisOptions, {\n className: classNames(\"recharts-\".concat(axisOptions.axisType, \" \").concat(axisOptions.axisType), axisOptions.className),\n key: element.key || \"\".concat(displayName, \"-\").concat(index),\n viewBox: {\n x: 0,\n y: 0,\n width: width,\n height: height\n },\n ticksGenerator: this.axesTicksGenerator\n }));\n }\n }, {\n key: \"renderClipPath\",\n value: function renderClipPath() {\n var clipPathId = this.clipPathId;\n var _this$state$offset = this.state.offset,\n left = _this$state$offset.left,\n top = _this$state$offset.top,\n height = _this$state$offset.height,\n width = _this$state$offset.width;\n return /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n id: clipPathId\n }, /*#__PURE__*/React.createElement(\"rect\", {\n x: left,\n y: top,\n height: height,\n width: width\n })));\n }\n }, {\n key: \"getXScales\",\n value: function getXScales() {\n var xAxisMap = this.state.xAxisMap;\n return xAxisMap ? Object.entries(xAxisMap).reduce(function (res, _ref13) {\n var _ref14 = _slicedToArray(_ref13, 2),\n axisId = _ref14[0],\n axisProps = _ref14[1];\n return _objectSpread(_objectSpread({}, res), {}, _defineProperty({}, axisId, axisProps.scale));\n }, {}) : null;\n }\n }, {\n key: \"getYScales\",\n value: function getYScales() {\n var yAxisMap = this.state.yAxisMap;\n return yAxisMap ? Object.entries(yAxisMap).reduce(function (res, _ref15) {\n var _ref16 = _slicedToArray(_ref15, 2),\n axisId = _ref16[0],\n axisProps = _ref16[1];\n return _objectSpread(_objectSpread({}, res), {}, _defineProperty({}, axisId, axisProps.scale));\n }, {}) : null;\n }\n }, {\n key: \"getXScaleByAxisId\",\n value: function getXScaleByAxisId(axisId) {\n var _this$state$xAxisMap, _this$state$xAxisMap$;\n return (_this$state$xAxisMap = this.state.xAxisMap) === null || _this$state$xAxisMap === void 0 ? void 0 : (_this$state$xAxisMap$ = _this$state$xAxisMap[axisId]) === null || _this$state$xAxisMap$ === void 0 ? void 0 : _this$state$xAxisMap$.scale;\n }\n }, {\n key: \"getYScaleByAxisId\",\n value: function getYScaleByAxisId(axisId) {\n var _this$state$yAxisMap, _this$state$yAxisMap$;\n return (_this$state$yAxisMap = this.state.yAxisMap) === null || _this$state$yAxisMap === void 0 ? void 0 : (_this$state$yAxisMap$ = _this$state$yAxisMap[axisId]) === null || _this$state$yAxisMap$ === void 0 ? void 0 : _this$state$yAxisMap$.scale;\n }\n }, {\n key: \"getItemByXY\",\n value: function getItemByXY(chartXY) {\n var formattedGraphicalItems = this.state.formattedGraphicalItems;\n if (formattedGraphicalItems && formattedGraphicalItems.length) {\n for (var i = 0, len = formattedGraphicalItems.length; i < len; i++) {\n var graphicalItem = formattedGraphicalItems[i];\n var props = graphicalItem.props,\n item = graphicalItem.item;\n var itemDisplayName = getDisplayName(item.type);\n if (itemDisplayName === 'Bar') {\n var activeBarItem = (props.data || []).find(function (entry) {\n return isInRectangle(chartXY, entry);\n });\n if (activeBarItem) {\n return {\n graphicalItem: graphicalItem,\n payload: activeBarItem\n };\n }\n } else if (itemDisplayName === 'RadialBar') {\n var _activeBarItem = (props.data || []).find(function (entry) {\n return inRangeOfSector(chartXY, entry);\n });\n if (_activeBarItem) {\n return {\n graphicalItem: graphicalItem,\n payload: _activeBarItem\n };\n }\n }\n }\n }\n return null;\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n if (!validateWidthHeight(this)) {\n return null;\n }\n var _this$props6 = this.props,\n children = _this$props6.children,\n className = _this$props6.className,\n width = _this$props6.width,\n height = _this$props6.height,\n style = _this$props6.style,\n compact = _this$props6.compact,\n title = _this$props6.title,\n desc = _this$props6.desc,\n others = _objectWithoutProperties(_this$props6, _excluded2);\n var attrs = filterProps(others);\n var map = {\n CartesianGrid: {\n handler: this.renderGrid,\n once: true\n },\n ReferenceArea: {\n handler: this.renderReferenceElement\n },\n ReferenceLine: {\n handler: this.renderReferenceElement\n },\n ReferenceDot: {\n handler: this.renderReferenceElement\n },\n XAxis: {\n handler: this.renderXAxis\n },\n YAxis: {\n handler: this.renderYAxis\n },\n Brush: {\n handler: this.renderBrush,\n once: true\n },\n Bar: {\n handler: this.renderGraphicChild\n },\n Line: {\n handler: this.renderGraphicChild\n },\n Area: {\n handler: this.renderGraphicChild\n },\n Radar: {\n handler: this.renderGraphicChild\n },\n RadialBar: {\n handler: this.renderGraphicChild\n },\n Scatter: {\n handler: this.renderGraphicChild\n },\n Pie: {\n handler: this.renderGraphicChild\n },\n Funnel: {\n handler: this.renderGraphicChild\n },\n Tooltip: {\n handler: this.renderCursor,\n once: true\n },\n PolarGrid: {\n handler: this.renderPolarGrid,\n once: true\n },\n PolarAngleAxis: {\n handler: this.renderPolarAxis\n },\n PolarRadiusAxis: {\n handler: this.renderPolarAxis\n },\n Customized: {\n handler: this.renderCustomized\n }\n };\n\n // The \"compact\" mode is mainly used as the panorama within Brush\n if (compact) {\n return /*#__PURE__*/React.createElement(Surface, _extends({}, attrs, {\n width: width,\n height: height,\n title: title,\n desc: desc\n }), this.renderClipPath(), renderByOrder(children, map));\n }\n if (this.props.accessibilityLayer) {\n var _2, _img;\n // Set tabIndex to 0 by default (can be overwritten)\n attrs.tabIndex = (_2 = 0) !== null && _2 !== void 0 ? _2 : this.props.tabIndex;\n // Set role to img by default (can be overwritten)\n attrs.role = (_img = 'img') !== null && _img !== void 0 ? _img : this.props.role;\n attrs.onKeyDown = function (e) {\n _this2.accessibilityManager.keyboardEvent(e);\n // 'onKeyDown' is not currently a supported prop that can be passed through\n // if it's added, this should be added: this.props.onKeyDown(e);\n };\n\n attrs.onFocus = function () {\n _this2.accessibilityManager.focus();\n // 'onFocus' is not currently a supported prop that can be passed through\n // if it's added, the focus event should be forwarded to the prop\n };\n }\n\n var events = this.parseEventsOfWrapper();\n return /*#__PURE__*/React.createElement(\"div\", _extends({\n className: classNames('recharts-wrapper', className),\n style: _objectSpread({\n position: 'relative',\n cursor: 'default',\n width: width,\n height: height\n }, style)\n }, events, {\n ref: function ref(node) {\n _this2.container = node;\n },\n role: \"region\"\n }), /*#__PURE__*/React.createElement(Surface, _extends({}, attrs, {\n width: width,\n height: height,\n title: title,\n desc: desc\n }), this.renderClipPath(), renderByOrder(children, map)), this.renderLegend(), this.renderTooltip());\n }\n }]);\n return CategoricalChartWrapper;\n }(Component), _defineProperty(_class, \"displayName\", chartName), _defineProperty(_class, \"defaultProps\", _objectSpread({\n layout: 'horizontal',\n stackOffset: 'none',\n barCategoryGap: '10%',\n barGap: 4,\n margin: {\n top: 5,\n right: 5,\n bottom: 5,\n left: 5\n },\n reverseStackOrder: false,\n syncMethod: 'index'\n }, defaultProps)), _defineProperty(_class, \"getDerivedStateFromProps\", function (nextProps, prevState) {\n var data = nextProps.data,\n children = nextProps.children,\n width = nextProps.width,\n height = nextProps.height,\n layout = nextProps.layout,\n stackOffset = nextProps.stackOffset,\n margin = nextProps.margin;\n if (_isNil(prevState.updateId)) {\n var defaultState = createDefaultState(nextProps);\n return _objectSpread(_objectSpread(_objectSpread({}, defaultState), {}, {\n updateId: 0\n }, updateStateOfAxisMapsOffsetAndStackGroups(_objectSpread(_objectSpread({\n props: nextProps\n }, defaultState), {}, {\n updateId: 0\n }), prevState)), {}, {\n prevData: data,\n prevWidth: width,\n prevHeight: height,\n prevLayout: layout,\n prevStackOffset: stackOffset,\n prevMargin: margin,\n prevChildren: children\n });\n }\n if (data !== prevState.prevData || width !== prevState.prevWidth || height !== prevState.prevHeight || layout !== prevState.prevLayout || stackOffset !== prevState.prevStackOffset || !shallowEqual(margin, prevState.prevMargin)) {\n var _defaultState = createDefaultState(nextProps);\n\n // Fixes https://github.com/recharts/recharts/issues/2143\n var keepFromPrevState = {\n // (chartX, chartY) are (0,0) in default state, but we want to keep the last mouse position to avoid\n // any flickering\n chartX: prevState.chartX,\n chartY: prevState.chartY,\n // The tooltip should stay active when it was active in the previous render. If this is not\n // the case, the tooltip disappears and immediately re-appears, causing a flickering effect\n isTooltipActive: prevState.isTooltipActive\n };\n var updatesToState = _objectSpread(_objectSpread({}, getTooltipData(prevState, data, layout)), {}, {\n updateId: prevState.updateId + 1\n });\n var newState = _objectSpread(_objectSpread(_objectSpread({}, _defaultState), keepFromPrevState), updatesToState);\n return _objectSpread(_objectSpread(_objectSpread({}, newState), updateStateOfAxisMapsOffsetAndStackGroups(_objectSpread({\n props: nextProps\n }, newState), prevState)), {}, {\n prevData: data,\n prevWidth: width,\n prevHeight: height,\n prevLayout: layout,\n prevStackOffset: stackOffset,\n prevMargin: margin,\n prevChildren: children\n });\n }\n if (!isChildrenEqual(children, prevState.prevChildren)) {\n // update configuration in children\n var hasGlobalData = !_isNil(data);\n var newUpdateId = hasGlobalData ? prevState.updateId : prevState.updateId + 1;\n return _objectSpread(_objectSpread({\n updateId: newUpdateId\n }, updateStateOfAxisMapsOffsetAndStackGroups(_objectSpread(_objectSpread({\n props: nextProps\n }, prevState), {}, {\n updateId: newUpdateId\n }), prevState)), {}, {\n prevChildren: children\n });\n }\n return null;\n }), _defineProperty(_class, \"renderActiveDot\", function (option, props) {\n var dot;\n if ( /*#__PURE__*/isValidElement(option)) {\n dot = /*#__PURE__*/cloneElement(option, props);\n } else if (_isFunction(option)) {\n dot = option(props);\n } else {\n dot = /*#__PURE__*/React.createElement(Dot, props);\n }\n return /*#__PURE__*/React.createElement(Layer, {\n className: \"recharts-active-dot\",\n key: props.key\n }, dot);\n }), _class;\n};","var _excluded = [\"points\", \"className\", \"baseLinePoints\", \"connectNulls\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\n/**\n * @fileOverview Polygon\n */\nimport React from 'react';\nimport classNames from 'classnames';\nimport { filterProps } from '../util/ReactUtils';\nvar isValidatePoint = function isValidatePoint(point) {\n return point && point.x === +point.x && point.y === +point.y;\n};\nvar getParsedPoints = function getParsedPoints() {\n var points = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var segmentPoints = [[]];\n points.forEach(function (entry) {\n if (isValidatePoint(entry)) {\n segmentPoints[segmentPoints.length - 1].push(entry);\n } else if (segmentPoints[segmentPoints.length - 1].length > 0) {\n // add another path\n segmentPoints.push([]);\n }\n });\n if (isValidatePoint(points[0])) {\n segmentPoints[segmentPoints.length - 1].push(points[0]);\n }\n if (segmentPoints[segmentPoints.length - 1].length <= 0) {\n segmentPoints = segmentPoints.slice(0, -1);\n }\n return segmentPoints;\n};\nvar getSinglePolygonPath = function getSinglePolygonPath(points, connectNulls) {\n var segmentPoints = getParsedPoints(points);\n if (connectNulls) {\n segmentPoints = [segmentPoints.reduce(function (res, segPoints) {\n return [].concat(_toConsumableArray(res), _toConsumableArray(segPoints));\n }, [])];\n }\n var polygonPath = segmentPoints.map(function (segPoints) {\n return segPoints.reduce(function (path, point, index) {\n return \"\".concat(path).concat(index === 0 ? 'M' : 'L').concat(point.x, \",\").concat(point.y);\n }, '');\n }).join('');\n return segmentPoints.length === 1 ? \"\".concat(polygonPath, \"Z\") : polygonPath;\n};\nvar getRanglePath = function getRanglePath(points, baseLinePoints, connectNulls) {\n var outerPath = getSinglePolygonPath(points, connectNulls);\n return \"\".concat(outerPath.slice(-1) === 'Z' ? outerPath.slice(0, -1) : outerPath, \"L\").concat(getSinglePolygonPath(baseLinePoints.reverse(), connectNulls).slice(1));\n};\nexport var Polygon = function Polygon(props) {\n var points = props.points,\n className = props.className,\n baseLinePoints = props.baseLinePoints,\n connectNulls = props.connectNulls,\n others = _objectWithoutProperties(props, _excluded);\n if (!points || !points.length) {\n return null;\n }\n var layerClass = classNames('recharts-polygon', className);\n if (baseLinePoints && baseLinePoints.length) {\n var hasStroke = others.stroke && others.stroke !== 'none';\n var rangePath = getRanglePath(points, baseLinePoints, connectNulls);\n return /*#__PURE__*/React.createElement(\"g\", {\n className: layerClass\n }, /*#__PURE__*/React.createElement(\"path\", _extends({}, filterProps(others, true), {\n fill: rangePath.slice(-1) === 'Z' ? others.fill : 'none',\n stroke: \"none\",\n d: rangePath\n })), hasStroke ? /*#__PURE__*/React.createElement(\"path\", _extends({}, filterProps(others, true), {\n fill: \"none\",\n d: getSinglePolygonPath(points, connectNulls)\n })) : null, hasStroke ? /*#__PURE__*/React.createElement(\"path\", _extends({}, filterProps(others, true), {\n fill: \"none\",\n d: getSinglePolygonPath(baseLinePoints, connectNulls)\n })) : null);\n }\n var singlePath = getSinglePolygonPath(points, connectNulls);\n return /*#__PURE__*/React.createElement(\"path\", _extends({}, filterProps(others, true), {\n fill: singlePath.slice(-1) === 'Z' ? others.fill : 'none',\n className: layerClass,\n d: singlePath\n }));\n};","import _isFunction from \"lodash/isFunction\";\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/**\n * @fileOverview Axis of radial direction\n */\nimport React, { PureComponent } from 'react';\nimport { Layer } from '../container/Layer';\nimport { Dot } from '../shape/Dot';\nimport { Polygon } from '../shape/Polygon';\nimport { Text } from '../component/Text';\nimport { adaptEventsOfChild } from '../util/types';\nimport { filterProps } from '../util/ReactUtils';\nimport { polarToCartesian } from '../util/PolarUtils';\nvar RADIAN = Math.PI / 180;\nvar eps = 1e-5;\nexport var PolarAngleAxis = /*#__PURE__*/function (_PureComponent) {\n _inherits(PolarAngleAxis, _PureComponent);\n var _super = _createSuper(PolarAngleAxis);\n function PolarAngleAxis() {\n _classCallCheck(this, PolarAngleAxis);\n return _super.apply(this, arguments);\n }\n _createClass(PolarAngleAxis, [{\n key: \"getTickLineCoord\",\n value:\n /**\n * Calculate the coordinate of line endpoint\n * @param {Object} data The Data if ticks\n * @return {Object} (x0, y0): The start point of text,\n * (x1, y1): The end point close to text,\n * (x2, y2): The end point close to axis\n */\n function getTickLineCoord(data) {\n var _this$props = this.props,\n cx = _this$props.cx,\n cy = _this$props.cy,\n radius = _this$props.radius,\n orientation = _this$props.orientation,\n tickSize = _this$props.tickSize;\n var tickLineSize = tickSize || 8;\n var p1 = polarToCartesian(cx, cy, radius, data.coordinate);\n var p2 = polarToCartesian(cx, cy, radius + (orientation === 'inner' ? -1 : 1) * tickLineSize, data.coordinate);\n return {\n x1: p1.x,\n y1: p1.y,\n x2: p2.x,\n y2: p2.y\n };\n }\n\n /**\n * Get the text-anchor of each tick\n * @param {Object} data Data of ticks\n * @return {String} text-anchor\n */\n }, {\n key: \"getTickTextAnchor\",\n value: function getTickTextAnchor(data) {\n var orientation = this.props.orientation;\n var cos = Math.cos(-data.coordinate * RADIAN);\n var textAnchor;\n if (cos > eps) {\n textAnchor = orientation === 'outer' ? 'start' : 'end';\n } else if (cos < -eps) {\n textAnchor = orientation === 'outer' ? 'end' : 'start';\n } else {\n textAnchor = 'middle';\n }\n return textAnchor;\n }\n }, {\n key: \"renderAxisLine\",\n value: function renderAxisLine() {\n var _this$props2 = this.props,\n cx = _this$props2.cx,\n cy = _this$props2.cy,\n radius = _this$props2.radius,\n axisLine = _this$props2.axisLine,\n axisLineType = _this$props2.axisLineType;\n var props = _objectSpread(_objectSpread({}, filterProps(this.props)), {}, {\n fill: 'none'\n }, filterProps(axisLine));\n if (axisLineType === 'circle') {\n return /*#__PURE__*/React.createElement(Dot, _extends({\n className: \"recharts-polar-angle-axis-line\"\n }, props, {\n cx: cx,\n cy: cy,\n r: radius\n }));\n }\n var ticks = this.props.ticks;\n var points = ticks.map(function (entry) {\n return polarToCartesian(cx, cy, radius, entry.coordinate);\n });\n return /*#__PURE__*/React.createElement(Polygon, _extends({\n className: \"recharts-polar-angle-axis-line\"\n }, props, {\n points: points\n }));\n }\n }, {\n key: \"renderTicks\",\n value: function renderTicks() {\n var _this = this;\n var _this$props3 = this.props,\n ticks = _this$props3.ticks,\n tick = _this$props3.tick,\n tickLine = _this$props3.tickLine,\n tickFormatter = _this$props3.tickFormatter,\n stroke = _this$props3.stroke;\n var axisProps = filterProps(this.props);\n var customTickProps = filterProps(tick);\n var tickLineProps = _objectSpread(_objectSpread({}, axisProps), {}, {\n fill: 'none'\n }, filterProps(tickLine));\n var items = ticks.map(function (entry, i) {\n var lineCoord = _this.getTickLineCoord(entry);\n var textAnchor = _this.getTickTextAnchor(entry);\n var tickProps = _objectSpread(_objectSpread(_objectSpread({\n textAnchor: textAnchor\n }, axisProps), {}, {\n stroke: 'none',\n fill: stroke\n }, customTickProps), {}, {\n index: i,\n payload: entry,\n x: lineCoord.x2,\n y: lineCoord.y2\n });\n return /*#__PURE__*/React.createElement(Layer, _extends({\n className: \"recharts-polar-angle-axis-tick\",\n key: \"tick-\".concat(i) // eslint-disable-line react/no-array-index-key\n }, adaptEventsOfChild(_this.props, entry, i)), tickLine && /*#__PURE__*/React.createElement(\"line\", _extends({\n className: \"recharts-polar-angle-axis-tick-line\"\n }, tickLineProps, lineCoord)), tick && PolarAngleAxis.renderTickItem(tick, tickProps, tickFormatter ? tickFormatter(entry.value, i) : entry.value));\n });\n return /*#__PURE__*/React.createElement(Layer, {\n className: \"recharts-polar-angle-axis-ticks\"\n }, items);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props4 = this.props,\n ticks = _this$props4.ticks,\n radius = _this$props4.radius,\n axisLine = _this$props4.axisLine;\n if (radius <= 0 || !ticks || !ticks.length) {\n return null;\n }\n return /*#__PURE__*/React.createElement(Layer, {\n className: \"recharts-polar-angle-axis\"\n }, axisLine && this.renderAxisLine(), this.renderTicks());\n }\n }], [{\n key: \"renderTickItem\",\n value: function renderTickItem(option, props, value) {\n var tickItem;\n if ( /*#__PURE__*/React.isValidElement(option)) {\n tickItem = /*#__PURE__*/React.cloneElement(option, props);\n } else if (_isFunction(option)) {\n tickItem = option(props);\n } else {\n tickItem = /*#__PURE__*/React.createElement(Text, _extends({}, props, {\n className: \"recharts-polar-angle-axis-tick-value\"\n }), value);\n }\n return tickItem;\n }\n }]);\n return PolarAngleAxis;\n}(PureComponent);\n_defineProperty(PolarAngleAxis, \"displayName\", 'PolarAngleAxis');\n_defineProperty(PolarAngleAxis, \"axisType\", 'angleAxis');\n_defineProperty(PolarAngleAxis, \"defaultProps\", {\n type: 'category',\n angleAxisId: 0,\n scale: 'auto',\n cx: 0,\n cy: 0,\n orientation: 'outer',\n axisLine: true,\n tickLine: true,\n tickSize: 8,\n tick: true,\n hide: false,\n allowDuplicatedCategory: true\n});","import _isFunction from \"lodash/isFunction\";\nimport _minBy from \"lodash/minBy\";\nimport _maxBy from \"lodash/maxBy\";\nvar _excluded = [\"cx\", \"cy\", \"angle\", \"ticks\", \"axisLine\"],\n _excluded2 = [\"ticks\", \"tick\", \"angle\", \"tickFormatter\", \"stroke\"];\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/**\n * @fileOverview The axis of polar coordinate system\n */\nimport React, { PureComponent } from 'react';\nimport { Text } from '../component/Text';\nimport { Label } from '../component/Label';\nimport { Layer } from '../container/Layer';\nimport { polarToCartesian } from '../util/PolarUtils';\nimport { adaptEventsOfChild } from '../util/types';\nimport { filterProps } from '../util/ReactUtils';\nexport var PolarRadiusAxis = /*#__PURE__*/function (_PureComponent) {\n _inherits(PolarRadiusAxis, _PureComponent);\n var _super = _createSuper(PolarRadiusAxis);\n function PolarRadiusAxis() {\n _classCallCheck(this, PolarRadiusAxis);\n return _super.apply(this, arguments);\n }\n _createClass(PolarRadiusAxis, [{\n key: \"getTickValueCoord\",\n value:\n /**\n * Calculate the coordinate of tick\n * @param {Number} coordinate The radius of tick\n * @return {Object} (x, y)\n */\n function getTickValueCoord(_ref) {\n var coordinate = _ref.coordinate;\n var _this$props = this.props,\n angle = _this$props.angle,\n cx = _this$props.cx,\n cy = _this$props.cy;\n return polarToCartesian(cx, cy, coordinate, angle);\n }\n }, {\n key: \"getTickTextAnchor\",\n value: function getTickTextAnchor() {\n var orientation = this.props.orientation;\n var textAnchor;\n switch (orientation) {\n case 'left':\n textAnchor = 'end';\n break;\n case 'right':\n textAnchor = 'start';\n break;\n default:\n textAnchor = 'middle';\n break;\n }\n return textAnchor;\n }\n }, {\n key: \"getViewBox\",\n value: function getViewBox() {\n var _this$props2 = this.props,\n cx = _this$props2.cx,\n cy = _this$props2.cy,\n angle = _this$props2.angle,\n ticks = _this$props2.ticks;\n var maxRadiusTick = _maxBy(ticks, function (entry) {\n return entry.coordinate || 0;\n });\n var minRadiusTick = _minBy(ticks, function (entry) {\n return entry.coordinate || 0;\n });\n return {\n cx: cx,\n cy: cy,\n startAngle: angle,\n endAngle: angle,\n innerRadius: minRadiusTick.coordinate || 0,\n outerRadius: maxRadiusTick.coordinate || 0\n };\n }\n }, {\n key: \"renderAxisLine\",\n value: function renderAxisLine() {\n var _this$props3 = this.props,\n cx = _this$props3.cx,\n cy = _this$props3.cy,\n angle = _this$props3.angle,\n ticks = _this$props3.ticks,\n axisLine = _this$props3.axisLine,\n others = _objectWithoutProperties(_this$props3, _excluded);\n var extent = ticks.reduce(function (result, entry) {\n return [Math.min(result[0], entry.coordinate), Math.max(result[1], entry.coordinate)];\n }, [Infinity, -Infinity]);\n var point0 = polarToCartesian(cx, cy, extent[0], angle);\n var point1 = polarToCartesian(cx, cy, extent[1], angle);\n var props = _objectSpread(_objectSpread(_objectSpread({}, filterProps(others)), {}, {\n fill: 'none'\n }, filterProps(axisLine)), {}, {\n x1: point0.x,\n y1: point0.y,\n x2: point1.x,\n y2: point1.y\n });\n return /*#__PURE__*/React.createElement(\"line\", _extends({\n className: \"recharts-polar-radius-axis-line\"\n }, props));\n }\n }, {\n key: \"renderTicks\",\n value: function renderTicks() {\n var _this = this;\n var _this$props4 = this.props,\n ticks = _this$props4.ticks,\n tick = _this$props4.tick,\n angle = _this$props4.angle,\n tickFormatter = _this$props4.tickFormatter,\n stroke = _this$props4.stroke,\n others = _objectWithoutProperties(_this$props4, _excluded2);\n var textAnchor = this.getTickTextAnchor();\n var axisProps = filterProps(others);\n var customTickProps = filterProps(tick);\n var items = ticks.map(function (entry, i) {\n var coord = _this.getTickValueCoord(entry);\n var tickProps = _objectSpread(_objectSpread(_objectSpread(_objectSpread({\n textAnchor: textAnchor,\n transform: \"rotate(\".concat(90 - angle, \", \").concat(coord.x, \", \").concat(coord.y, \")\")\n }, axisProps), {}, {\n stroke: 'none',\n fill: stroke\n }, customTickProps), {}, {\n index: i\n }, coord), {}, {\n payload: entry\n });\n return /*#__PURE__*/React.createElement(Layer, _extends({\n className: \"recharts-polar-radius-axis-tick\",\n key: \"tick-\".concat(i) // eslint-disable-line react/no-array-index-key\n }, adaptEventsOfChild(_this.props, entry, i)), PolarRadiusAxis.renderTickItem(tick, tickProps, tickFormatter ? tickFormatter(entry.value, i) : entry.value));\n });\n return /*#__PURE__*/React.createElement(Layer, {\n className: \"recharts-polar-radius-axis-ticks\"\n }, items);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props5 = this.props,\n ticks = _this$props5.ticks,\n axisLine = _this$props5.axisLine,\n tick = _this$props5.tick;\n if (!ticks || !ticks.length) {\n return null;\n }\n return /*#__PURE__*/React.createElement(Layer, {\n className: \"recharts-polar-radius-axis\"\n }, axisLine && this.renderAxisLine(), tick && this.renderTicks(), Label.renderCallByParent(this.props, this.getViewBox()));\n }\n }], [{\n key: \"renderTickItem\",\n value: function renderTickItem(option, props, value) {\n var tickItem;\n if ( /*#__PURE__*/React.isValidElement(option)) {\n tickItem = /*#__PURE__*/React.cloneElement(option, props);\n } else if (_isFunction(option)) {\n tickItem = option(props);\n } else {\n tickItem = /*#__PURE__*/React.createElement(Text, _extends({}, props, {\n className: \"recharts-polar-radius-axis-tick-value\"\n }), value);\n }\n return tickItem;\n }\n }]);\n return PolarRadiusAxis;\n}(PureComponent);\n_defineProperty(PolarRadiusAxis, \"displayName\", 'PolarRadiusAxis');\n_defineProperty(PolarRadiusAxis, \"axisType\", 'radiusAxis');\n_defineProperty(PolarRadiusAxis, \"defaultProps\", {\n type: 'number',\n radiusAxisId: 0,\n cx: 0,\n cy: 0,\n angle: 0,\n orientation: 'right',\n stroke: '#ccc',\n axisLine: true,\n tick: true,\n tickCount: 5,\n allowDataOverflow: false,\n scale: 'auto',\n allowDuplicatedCategory: true\n});","/**\n * @fileOverview Pie Chart\n */\nimport { generateCategoricalChart } from './generateCategoricalChart';\nimport { PolarAngleAxis } from '../polar/PolarAngleAxis';\nimport { PolarRadiusAxis } from '../polar/PolarRadiusAxis';\nimport { formatAxisMap } from '../util/PolarUtils';\nimport { Pie } from '../polar/Pie';\nexport var PieChart = generateCategoricalChart({\n chartName: 'PieChart',\n GraphicalChild: Pie,\n validateTooltipEventTypes: ['item'],\n defaultTooltipEventType: 'item',\n legendContent: 'children',\n axisComponents: [{\n axisType: 'angleAxis',\n AxisComp: PolarAngleAxis\n }, {\n axisType: 'radiusAxis',\n AxisComp: PolarRadiusAxis\n }],\n formatAxisMap: formatAxisMap,\n defaultProps: {\n layout: 'centric',\n startAngle: 0,\n endAngle: 360,\n cx: '50%',\n cy: '50%',\n innerRadius: 0,\n outerRadius: '80%'\n }\n});","/**\n * @fileOverview Cross\n */\n\nexport var Cell = function Cell(_props) {\n return null;\n};\nCell.displayName = 'Cell';","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nimport _isObject from \"lodash/isObject\";\nimport _isFunction from \"lodash/isFunction\";\nimport _isNil from \"lodash/isNil\";\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React, { cloneElement, isValidElement, createElement } from 'react';\nimport classNames from 'classnames';\nimport { Text } from './Text';\nimport { findAllByType, filterProps } from '../util/ReactUtils';\nimport { isNumOrStr, isNumber, isPercent, getPercentValue, uniqueId, mathSign } from '../util/DataUtils';\nimport { polarToCartesian } from '../util/PolarUtils';\nvar getLabel = function getLabel(props) {\n var value = props.value,\n formatter = props.formatter;\n var label = _isNil(props.children) ? value : props.children;\n if (_isFunction(formatter)) {\n return formatter(label);\n }\n return label;\n};\nvar getDeltaAngle = function getDeltaAngle(startAngle, endAngle) {\n var sign = mathSign(endAngle - startAngle);\n var deltaAngle = Math.min(Math.abs(endAngle - startAngle), 360);\n return sign * deltaAngle;\n};\nvar renderRadialLabel = function renderRadialLabel(labelProps, label, attrs) {\n var position = labelProps.position,\n viewBox = labelProps.viewBox,\n offset = labelProps.offset,\n className = labelProps.className;\n var _ref = viewBox,\n cx = _ref.cx,\n cy = _ref.cy,\n innerRadius = _ref.innerRadius,\n outerRadius = _ref.outerRadius,\n startAngle = _ref.startAngle,\n endAngle = _ref.endAngle,\n clockWise = _ref.clockWise;\n var radius = (innerRadius + outerRadius) / 2;\n var deltaAngle = getDeltaAngle(startAngle, endAngle);\n var sign = deltaAngle >= 0 ? 1 : -1;\n var labelAngle, direction;\n if (position === 'insideStart') {\n labelAngle = startAngle + sign * offset;\n direction = clockWise;\n } else if (position === 'insideEnd') {\n labelAngle = endAngle - sign * offset;\n direction = !clockWise;\n } else if (position === 'end') {\n labelAngle = endAngle + sign * offset;\n direction = clockWise;\n }\n direction = deltaAngle <= 0 ? direction : !direction;\n var startPoint = polarToCartesian(cx, cy, radius, labelAngle);\n var endPoint = polarToCartesian(cx, cy, radius, labelAngle + (direction ? 1 : -1) * 359);\n var path = \"M\".concat(startPoint.x, \",\").concat(startPoint.y, \"\\n A\").concat(radius, \",\").concat(radius, \",0,1,\").concat(direction ? 0 : 1, \",\\n \").concat(endPoint.x, \",\").concat(endPoint.y);\n var id = _isNil(labelProps.id) ? uniqueId('recharts-radial-line-') : labelProps.id;\n return /*#__PURE__*/React.createElement(\"text\", _extends({}, attrs, {\n dominantBaseline: \"central\",\n className: classNames('recharts-radial-bar-label', className)\n }), /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"path\", {\n id: id,\n d: path\n })), /*#__PURE__*/React.createElement(\"textPath\", {\n xlinkHref: \"#\".concat(id)\n }, label));\n};\nvar getAttrsOfPolarLabel = function getAttrsOfPolarLabel(props) {\n var viewBox = props.viewBox,\n offset = props.offset,\n position = props.position;\n var _ref2 = viewBox,\n cx = _ref2.cx,\n cy = _ref2.cy,\n innerRadius = _ref2.innerRadius,\n outerRadius = _ref2.outerRadius,\n startAngle = _ref2.startAngle,\n endAngle = _ref2.endAngle;\n var midAngle = (startAngle + endAngle) / 2;\n if (position === 'outside') {\n var _polarToCartesian = polarToCartesian(cx, cy, outerRadius + offset, midAngle),\n _x = _polarToCartesian.x,\n _y = _polarToCartesian.y;\n return {\n x: _x,\n y: _y,\n textAnchor: _x >= cx ? 'start' : 'end',\n verticalAnchor: 'middle'\n };\n }\n if (position === 'center') {\n return {\n x: cx,\n y: cy,\n textAnchor: 'middle',\n verticalAnchor: 'middle'\n };\n }\n if (position === 'centerTop') {\n return {\n x: cx,\n y: cy,\n textAnchor: 'middle',\n verticalAnchor: 'start'\n };\n }\n if (position === 'centerBottom') {\n return {\n x: cx,\n y: cy,\n textAnchor: 'middle',\n verticalAnchor: 'end'\n };\n }\n var r = (innerRadius + outerRadius) / 2;\n var _polarToCartesian2 = polarToCartesian(cx, cy, r, midAngle),\n x = _polarToCartesian2.x,\n y = _polarToCartesian2.y;\n return {\n x: x,\n y: y,\n textAnchor: 'middle',\n verticalAnchor: 'middle'\n };\n};\nvar getAttrsOfCartesianLabel = function getAttrsOfCartesianLabel(props) {\n var viewBox = props.viewBox,\n parentViewBox = props.parentViewBox,\n offset = props.offset,\n position = props.position;\n var _ref3 = viewBox,\n x = _ref3.x,\n y = _ref3.y,\n width = _ref3.width,\n height = _ref3.height;\n\n // Define vertical offsets and position inverts based on the value being positive or negative\n var verticalSign = height >= 0 ? 1 : -1;\n var verticalOffset = verticalSign * offset;\n var verticalEnd = verticalSign > 0 ? 'end' : 'start';\n var verticalStart = verticalSign > 0 ? 'start' : 'end';\n\n // Define horizontal offsets and position inverts based on the value being positive or negative\n var horizontalSign = width >= 0 ? 1 : -1;\n var horizontalOffset = horizontalSign * offset;\n var horizontalEnd = horizontalSign > 0 ? 'end' : 'start';\n var horizontalStart = horizontalSign > 0 ? 'start' : 'end';\n if (position === 'top') {\n var attrs = {\n x: x + width / 2,\n y: y - verticalSign * offset,\n textAnchor: 'middle',\n verticalAnchor: verticalEnd\n };\n return _objectSpread(_objectSpread({}, attrs), parentViewBox ? {\n height: Math.max(y - parentViewBox.y, 0),\n width: width\n } : {});\n }\n if (position === 'bottom') {\n var _attrs = {\n x: x + width / 2,\n y: y + height + verticalOffset,\n textAnchor: 'middle',\n verticalAnchor: verticalStart\n };\n return _objectSpread(_objectSpread({}, _attrs), parentViewBox ? {\n height: Math.max(parentViewBox.y + parentViewBox.height - (y + height), 0),\n width: width\n } : {});\n }\n if (position === 'left') {\n var _attrs2 = {\n x: x - horizontalOffset,\n y: y + height / 2,\n textAnchor: horizontalEnd,\n verticalAnchor: 'middle'\n };\n return _objectSpread(_objectSpread({}, _attrs2), parentViewBox ? {\n width: Math.max(_attrs2.x - parentViewBox.x, 0),\n height: height\n } : {});\n }\n if (position === 'right') {\n var _attrs3 = {\n x: x + width + horizontalOffset,\n y: y + height / 2,\n textAnchor: horizontalStart,\n verticalAnchor: 'middle'\n };\n return _objectSpread(_objectSpread({}, _attrs3), parentViewBox ? {\n width: Math.max(parentViewBox.x + parentViewBox.width - _attrs3.x, 0),\n height: height\n } : {});\n }\n var sizeAttrs = parentViewBox ? {\n width: width,\n height: height\n } : {};\n if (position === 'insideLeft') {\n return _objectSpread({\n x: x + horizontalOffset,\n y: y + height / 2,\n textAnchor: horizontalStart,\n verticalAnchor: 'middle'\n }, sizeAttrs);\n }\n if (position === 'insideRight') {\n return _objectSpread({\n x: x + width - horizontalOffset,\n y: y + height / 2,\n textAnchor: horizontalEnd,\n verticalAnchor: 'middle'\n }, sizeAttrs);\n }\n if (position === 'insideTop') {\n return _objectSpread({\n x: x + width / 2,\n y: y + verticalOffset,\n textAnchor: 'middle',\n verticalAnchor: verticalStart\n }, sizeAttrs);\n }\n if (position === 'insideBottom') {\n return _objectSpread({\n x: x + width / 2,\n y: y + height - verticalOffset,\n textAnchor: 'middle',\n verticalAnchor: verticalEnd\n }, sizeAttrs);\n }\n if (position === 'insideTopLeft') {\n return _objectSpread({\n x: x + horizontalOffset,\n y: y + verticalOffset,\n textAnchor: horizontalStart,\n verticalAnchor: verticalStart\n }, sizeAttrs);\n }\n if (position === 'insideTopRight') {\n return _objectSpread({\n x: x + width - horizontalOffset,\n y: y + verticalOffset,\n textAnchor: horizontalEnd,\n verticalAnchor: verticalStart\n }, sizeAttrs);\n }\n if (position === 'insideBottomLeft') {\n return _objectSpread({\n x: x + horizontalOffset,\n y: y + height - verticalOffset,\n textAnchor: horizontalStart,\n verticalAnchor: verticalEnd\n }, sizeAttrs);\n }\n if (position === 'insideBottomRight') {\n return _objectSpread({\n x: x + width - horizontalOffset,\n y: y + height - verticalOffset,\n textAnchor: horizontalEnd,\n verticalAnchor: verticalEnd\n }, sizeAttrs);\n }\n if (_isObject(position) && (isNumber(position.x) || isPercent(position.x)) && (isNumber(position.y) || isPercent(position.y))) {\n return _objectSpread({\n x: x + getPercentValue(position.x, width),\n y: y + getPercentValue(position.y, height),\n textAnchor: 'end',\n verticalAnchor: 'end'\n }, sizeAttrs);\n }\n return _objectSpread({\n x: x + width / 2,\n y: y + height / 2,\n textAnchor: 'middle',\n verticalAnchor: 'middle'\n }, sizeAttrs);\n};\nvar isPolar = function isPolar(viewBox) {\n return 'cx' in viewBox && isNumber(viewBox.cx);\n};\nexport function Label(props) {\n var viewBox = props.viewBox,\n position = props.position,\n value = props.value,\n children = props.children,\n content = props.content,\n _props$className = props.className,\n className = _props$className === void 0 ? '' : _props$className,\n textBreakAll = props.textBreakAll;\n if (!viewBox || _isNil(value) && _isNil(children) && ! /*#__PURE__*/isValidElement(content) && !_isFunction(content)) {\n return null;\n }\n if ( /*#__PURE__*/isValidElement(content)) {\n return /*#__PURE__*/cloneElement(content, props);\n }\n var label;\n if (_isFunction(content)) {\n label = /*#__PURE__*/createElement(content, props);\n if ( /*#__PURE__*/isValidElement(label)) {\n return label;\n }\n } else {\n label = getLabel(props);\n }\n var isPolarLabel = isPolar(viewBox);\n var attrs = filterProps(props, true);\n if (isPolarLabel && (position === 'insideStart' || position === 'insideEnd' || position === 'end')) {\n return renderRadialLabel(props, label, attrs);\n }\n var positionAttrs = isPolarLabel ? getAttrsOfPolarLabel(props) : getAttrsOfCartesianLabel(props);\n return /*#__PURE__*/React.createElement(Text, _extends({\n className: classNames('recharts-label', className)\n }, attrs, positionAttrs, {\n breakAll: textBreakAll\n }), label);\n}\nLabel.displayName = 'Label';\nLabel.defaultProps = {\n offset: 5\n};\nvar parseViewBox = function parseViewBox(props) {\n var cx = props.cx,\n cy = props.cy,\n angle = props.angle,\n startAngle = props.startAngle,\n endAngle = props.endAngle,\n r = props.r,\n radius = props.radius,\n innerRadius = props.innerRadius,\n outerRadius = props.outerRadius,\n x = props.x,\n y = props.y,\n top = props.top,\n left = props.left,\n width = props.width,\n height = props.height,\n clockWise = props.clockWise,\n labelViewBox = props.labelViewBox;\n if (labelViewBox) {\n return labelViewBox;\n }\n if (isNumber(width) && isNumber(height)) {\n if (isNumber(x) && isNumber(y)) {\n return {\n x: x,\n y: y,\n width: width,\n height: height\n };\n }\n if (isNumber(top) && isNumber(left)) {\n return {\n x: top,\n y: left,\n width: width,\n height: height\n };\n }\n }\n if (isNumber(x) && isNumber(y)) {\n return {\n x: x,\n y: y,\n width: 0,\n height: 0\n };\n }\n if (isNumber(cx) && isNumber(cy)) {\n return {\n cx: cx,\n cy: cy,\n startAngle: startAngle || angle || 0,\n endAngle: endAngle || angle || 0,\n innerRadius: innerRadius || 0,\n outerRadius: outerRadius || radius || r || 0,\n clockWise: clockWise\n };\n }\n if (props.viewBox) {\n return props.viewBox;\n }\n return {};\n};\nvar parseLabel = function parseLabel(label, viewBox) {\n if (!label) {\n return null;\n }\n if (label === true) {\n return /*#__PURE__*/React.createElement(Label, {\n key: \"label-implicit\",\n viewBox: viewBox\n });\n }\n if (isNumOrStr(label)) {\n return /*#__PURE__*/React.createElement(Label, {\n key: \"label-implicit\",\n viewBox: viewBox,\n value: label\n });\n }\n if ( /*#__PURE__*/isValidElement(label)) {\n if (label.type === Label) {\n return /*#__PURE__*/cloneElement(label, {\n key: 'label-implicit',\n viewBox: viewBox\n });\n }\n return /*#__PURE__*/React.createElement(Label, {\n key: \"label-implicit\",\n content: label,\n viewBox: viewBox\n });\n }\n if (_isFunction(label)) {\n return /*#__PURE__*/React.createElement(Label, {\n key: \"label-implicit\",\n content: label,\n viewBox: viewBox\n });\n }\n if (_isObject(label)) {\n return /*#__PURE__*/React.createElement(Label, _extends({\n viewBox: viewBox\n }, label, {\n key: \"label-implicit\"\n }));\n }\n return null;\n};\nvar renderCallByParent = function renderCallByParent(parentProps, viewBox) {\n var checkPropsLabel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n if (!parentProps || !parentProps.children && checkPropsLabel && !parentProps.label) {\n return null;\n }\n var children = parentProps.children;\n var parentViewBox = parseViewBox(parentProps);\n var explicitChildren = findAllByType(children, Label).map(function (child, index) {\n return /*#__PURE__*/cloneElement(child, {\n viewBox: viewBox || parentViewBox,\n // eslint-disable-next-line react/no-array-index-key\n key: \"label-\".concat(index)\n });\n });\n if (!checkPropsLabel) {\n return explicitChildren;\n }\n var implicitLabel = parseLabel(parentProps.label, viewBox || parentViewBox);\n return [implicitLabel].concat(_toConsumableArray(explicitChildren));\n};\nLabel.parseViewBox = parseViewBox;\nLabel.renderCallByParent = renderCallByParent;","export const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\n\nexport const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {pi, sqrt, tau} from \"../math.js\";\n\nexport default {\n draw(context, size) {\n const r = sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n","import {sqrt} from \"../math.js\";\n\nexport default {\n draw(context, size) {\n const r = sqrt(size / 5) / 2;\n context.moveTo(-3 * r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, -3 * r);\n context.lineTo(r, -3 * r);\n context.lineTo(r, -r);\n context.lineTo(3 * r, -r);\n context.lineTo(3 * r, r);\n context.lineTo(r, r);\n context.lineTo(r, 3 * r);\n context.lineTo(-r, 3 * r);\n context.lineTo(-r, r);\n context.lineTo(-3 * r, r);\n context.closePath();\n }\n};\n","import {sqrt} from \"../math.js\";\n\nconst tan30 = sqrt(1 / 3);\nconst tan30_2 = tan30 * 2;\n\nexport default {\n draw(context, size) {\n const y = sqrt(size / tan30_2);\n const x = y * tan30;\n context.moveTo(0, -y);\n context.lineTo(x, 0);\n context.lineTo(0, y);\n context.lineTo(-x, 0);\n context.closePath();\n }\n};\n","import {sqrt} from \"../math.js\";\n\nexport default {\n draw(context, size) {\n const w = sqrt(size);\n const x = -w / 2;\n context.rect(x, x, w, w);\n }\n};\n","import {sin, cos, sqrt, pi, tau} from \"../math.js\";\n\nconst ka = 0.89081309152928522810;\nconst kr = sin(pi / 10) / sin(7 * pi / 10);\nconst kx = sin(tau / 10) * kr;\nconst ky = -cos(tau / 10) * kr;\n\nexport default {\n draw(context, size) {\n const r = sqrt(size * ka);\n const x = kx * r;\n const y = ky * r;\n context.moveTo(0, -r);\n context.lineTo(x, y);\n for (let i = 1; i < 5; ++i) {\n const a = tau * i / 5;\n const c = cos(a);\n const s = sin(a);\n context.lineTo(s * r, -c * r);\n context.lineTo(c * x - s * y, s * x + c * y);\n }\n context.closePath();\n }\n};\n","import {sqrt} from \"../math.js\";\n\nconst sqrt3 = sqrt(3);\n\nexport default {\n draw(context, size) {\n const y = -sqrt(size / (sqrt3 * 3));\n context.moveTo(0, y * 2);\n context.lineTo(-sqrt3 * y, -y);\n context.lineTo(sqrt3 * y, -y);\n context.closePath();\n }\n};\n","import {sqrt} from \"../math.js\";\n\nconst c = -0.5;\nconst s = sqrt(3) / 2;\nconst k = 1 / sqrt(12);\nconst a = (k / 2 + 1) * 3;\n\nexport default {\n draw(context, size) {\n const r = sqrt(size / a);\n const x0 = r / 2, y0 = r * k;\n const x1 = x0, y1 = r * k + r;\n const x2 = -x1, y2 = y1;\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n context.lineTo(x2, y2);\n context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n context.closePath();\n }\n};\n","import {min, sqrt} from \"../math.js\";\n\nconst sqrt3 = sqrt(3);\n\nexport default {\n draw(context, size) {\n const r = sqrt(size + min(size / 28, 0.75)) * 0.59436;\n const t = r / 2;\n const u = t * sqrt3;\n context.moveTo(0, r);\n context.lineTo(0, -r);\n context.moveTo(-u, -t);\n context.lineTo(u, t);\n context.moveTo(-u, t);\n context.lineTo(u, -t);\n }\n};\n","import {sqrt} from \"../math.js\";\n\nconst sqrt3 = sqrt(3);\n\nexport default {\n draw(context, size) {\n const s = sqrt(size) * 0.6824;\n const t = s / 2;\n const u = (s * sqrt3) / 2; // cos(Math.PI / 6)\n context.moveTo(0, -s);\n context.lineTo(u, t);\n context.lineTo(-u, t);\n context.closePath();\n }\n};\n","import _upperFirst from \"lodash/upperFirst\";\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/**\n * @fileOverview Curve\n */\nimport React from 'react';\nimport { symbol as shapeSymbol, symbolCircle, symbolCross, symbolDiamond, symbolSquare, symbolStar, symbolTriangle, symbolWye } from 'victory-vendor/d3-shape';\nimport classNames from 'classnames';\nimport { filterProps } from '../util/ReactUtils';\nvar symbolFactories = {\n symbolCircle: symbolCircle,\n symbolCross: symbolCross,\n symbolDiamond: symbolDiamond,\n symbolSquare: symbolSquare,\n symbolStar: symbolStar,\n symbolTriangle: symbolTriangle,\n symbolWye: symbolWye\n};\nvar RADIAN = Math.PI / 180;\nvar getSymbolFactory = function getSymbolFactory(type) {\n var name = \"symbol\".concat(_upperFirst(type));\n return symbolFactories[name] || symbolCircle;\n};\nvar calculateAreaSize = function calculateAreaSize(size, sizeType, type) {\n if (sizeType === 'area') {\n return size;\n }\n switch (type) {\n case 'cross':\n return 5 * size * size / 9;\n case 'diamond':\n return 0.5 * size * size / Math.sqrt(3);\n case 'square':\n return size * size;\n case 'star':\n {\n var angle = 18 * RADIAN;\n return 1.25 * size * size * (Math.tan(angle) - Math.tan(angle * 2) * Math.pow(Math.tan(angle), 2));\n }\n case 'triangle':\n return Math.sqrt(3) * size * size / 4;\n case 'wye':\n return (21 - 10 * Math.sqrt(3)) * size * size / 8;\n default:\n return Math.PI * size * size / 4;\n }\n};\nvar symbolsDefaultProps = {\n type: 'circle',\n size: 64,\n sizeType: 'area'\n};\nvar registerSymbol = function registerSymbol(key, factory) {\n symbolFactories[\"symbol\".concat(_upperFirst(key))] = factory;\n};\nexport var Symbols = function Symbols(props) {\n /**\n * Calculate the path of curve\n * @return {String} path\n */\n var getPath = function getPath() {\n var size = props.size,\n sizeType = props.sizeType,\n type = props.type;\n var symbolFactory = getSymbolFactory(type);\n var symbol = shapeSymbol().type(symbolFactory).size(calculateAreaSize(size, sizeType, type));\n return symbol();\n };\n var className = props.className,\n cx = props.cx,\n cy = props.cy,\n size = props.size;\n var filteredProps = filterProps(props, true);\n if (cx === +cx && cy === +cy && size === +size) {\n return /*#__PURE__*/React.createElement(\"path\", _extends({}, filteredProps, {\n className: classNames('recharts-symbols', className),\n transform: \"translate(\".concat(cx, \", \").concat(cy, \")\"),\n d: getPath()\n }));\n }\n return null;\n};\nSymbols.defaultProps = symbolsDefaultProps;\nSymbols.registerSymbol = registerSymbol;","import constant from \"./constant.js\";\nimport {withPath} from \"./path.js\";\nimport asterisk from \"./symbol/asterisk.js\";\nimport circle from \"./symbol/circle.js\";\nimport cross from \"./symbol/cross.js\";\nimport diamond from \"./symbol/diamond.js\";\nimport diamond2 from \"./symbol/diamond2.js\";\nimport plus from \"./symbol/plus.js\";\nimport square from \"./symbol/square.js\";\nimport square2 from \"./symbol/square2.js\";\nimport star from \"./symbol/star.js\";\nimport triangle from \"./symbol/triangle.js\";\nimport triangle2 from \"./symbol/triangle2.js\";\nimport wye from \"./symbol/wye.js\";\nimport times from \"./symbol/times.js\";\n\n// These symbols are designed to be filled.\nexport const symbolsFill = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\n// These symbols are designed to be stroked (with a width of 1.5px and round caps).\nexport const symbolsStroke = [\n circle,\n plus,\n times,\n triangle2,\n asterisk,\n square2,\n diamond2\n];\n\nexport default function Symbol(type, size) {\n let context = null,\n path = withPath(symbol);\n\n type = typeof type === \"function\" ? type : constant(type || circle);\n size = typeof size === \"function\" ? size : constant(size === undefined ? 64 : +size);\n\n function symbol() {\n let buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/**\n * @fileOverview Default Legend Content\n */\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport { Surface } from '../container/Surface';\nimport { Symbols } from '../shape/Symbols';\nimport { adaptEventsOfChild } from '../util/types';\nvar SIZE = 32;\nexport var DefaultLegendContent = /*#__PURE__*/function (_PureComponent) {\n _inherits(DefaultLegendContent, _PureComponent);\n var _super = _createSuper(DefaultLegendContent);\n function DefaultLegendContent() {\n _classCallCheck(this, DefaultLegendContent);\n return _super.apply(this, arguments);\n }\n _createClass(DefaultLegendContent, [{\n key: \"renderIcon\",\n value:\n /**\n * Render the path of icon\n * @param {Object} data Data of each legend item\n * @return {String} Path element\n */\n function renderIcon(data) {\n var inactiveColor = this.props.inactiveColor;\n var halfSize = SIZE / 2;\n var sixthSize = SIZE / 6;\n var thirdSize = SIZE / 3;\n var color = data.inactive ? inactiveColor : data.color;\n if (data.type === 'plainline') {\n return /*#__PURE__*/React.createElement(\"line\", {\n strokeWidth: 4,\n fill: \"none\",\n stroke: color,\n strokeDasharray: data.payload.strokeDasharray,\n x1: 0,\n y1: halfSize,\n x2: SIZE,\n y2: halfSize,\n className: \"recharts-legend-icon\"\n });\n }\n if (data.type === 'line') {\n return /*#__PURE__*/React.createElement(\"path\", {\n strokeWidth: 4,\n fill: \"none\",\n stroke: color,\n d: \"M0,\".concat(halfSize, \"h\").concat(thirdSize, \"\\n A\").concat(sixthSize, \",\").concat(sixthSize, \",0,1,1,\").concat(2 * thirdSize, \",\").concat(halfSize, \"\\n H\").concat(SIZE, \"M\").concat(2 * thirdSize, \",\").concat(halfSize, \"\\n A\").concat(sixthSize, \",\").concat(sixthSize, \",0,1,1,\").concat(thirdSize, \",\").concat(halfSize),\n className: \"recharts-legend-icon\"\n });\n }\n if (data.type === 'rect') {\n return /*#__PURE__*/React.createElement(\"path\", {\n stroke: \"none\",\n fill: color,\n d: \"M0,\".concat(SIZE / 8, \"h\").concat(SIZE, \"v\").concat(SIZE * 3 / 4, \"h\").concat(-SIZE, \"z\"),\n className: \"recharts-legend-icon\"\n });\n }\n if ( /*#__PURE__*/React.isValidElement(data.legendIcon)) {\n var iconProps = _objectSpread({}, data);\n delete iconProps.legendIcon;\n return /*#__PURE__*/React.cloneElement(data.legendIcon, iconProps);\n }\n return /*#__PURE__*/React.createElement(Symbols, {\n fill: color,\n cx: halfSize,\n cy: halfSize,\n size: SIZE,\n sizeType: \"diameter\",\n type: data.type\n });\n }\n\n /**\n * Draw items of legend\n * @return {ReactElement} Items\n */\n }, {\n key: \"renderItems\",\n value: function renderItems() {\n var _this = this;\n var _this$props = this.props,\n payload = _this$props.payload,\n iconSize = _this$props.iconSize,\n layout = _this$props.layout,\n formatter = _this$props.formatter,\n inactiveColor = _this$props.inactiveColor;\n var viewBox = {\n x: 0,\n y: 0,\n width: SIZE,\n height: SIZE\n };\n var itemStyle = {\n display: layout === 'horizontal' ? 'inline-block' : 'block',\n marginRight: 10\n };\n var svgStyle = {\n display: 'inline-block',\n verticalAlign: 'middle',\n marginRight: 4\n };\n return payload.map(function (entry, i) {\n var _classNames;\n var finalFormatter = entry.formatter || formatter;\n var className = classNames((_classNames = {\n 'recharts-legend-item': true\n }, _defineProperty(_classNames, \"legend-item-\".concat(i), true), _defineProperty(_classNames, \"inactive\", entry.inactive), _classNames));\n if (entry.type === 'none') {\n return null;\n }\n var color = entry.inactive ? inactiveColor : entry.color;\n return /*#__PURE__*/React.createElement(\"li\", _extends({\n className: className,\n style: itemStyle,\n key: \"legend-item-\".concat(i) // eslint-disable-line react/no-array-index-key\n }, adaptEventsOfChild(_this.props, entry, i)), /*#__PURE__*/React.createElement(Surface, {\n width: iconSize,\n height: iconSize,\n viewBox: viewBox,\n style: svgStyle\n }, _this.renderIcon(entry)), /*#__PURE__*/React.createElement(\"span\", {\n className: \"recharts-legend-item-text\",\n style: {\n color: color\n }\n }, finalFormatter ? finalFormatter(entry.value, entry, i) : entry.value));\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n payload = _this$props2.payload,\n layout = _this$props2.layout,\n align = _this$props2.align;\n if (!payload || !payload.length) {\n return null;\n }\n var finalStyle = {\n padding: 0,\n margin: 0,\n textAlign: layout === 'horizontal' ? align : 'left'\n };\n return /*#__PURE__*/React.createElement(\"ul\", {\n className: \"recharts-default-legend\",\n style: finalStyle\n }, this.renderItems());\n }\n }]);\n return DefaultLegendContent;\n}(PureComponent);\n_defineProperty(DefaultLegendContent, \"displayName\", 'Legend');\n_defineProperty(DefaultLegendContent, \"defaultProps\", {\n iconSize: 14,\n layout: 'horizontal',\n align: 'center',\n verticalAlign: 'middle',\n inactiveColor: '#ccc'\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nimport _isFunction from \"lodash/isFunction\";\nimport _uniqBy from \"lodash/uniqBy\";\nvar _excluded = [\"ref\"];\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n/**\n * @fileOverview Legend\n */\nimport React, { PureComponent } from 'react';\nimport { DefaultLegendContent } from './DefaultLegendContent';\nimport { isNumber } from '../util/DataUtils';\nfunction defaultUniqBy(entry) {\n return entry.value;\n}\nfunction getUniqPayload(option, payload) {\n if (option === true) {\n return _uniqBy(payload, defaultUniqBy);\n }\n if (_isFunction(option)) {\n return _uniqBy(payload, option);\n }\n return payload;\n}\nfunction renderContent(content, props) {\n if ( /*#__PURE__*/React.isValidElement(content)) {\n return /*#__PURE__*/React.cloneElement(content, props);\n }\n if (_isFunction(content)) {\n return /*#__PURE__*/React.createElement(content, props);\n }\n var ref = props.ref,\n otherProps = _objectWithoutProperties(props, _excluded);\n return /*#__PURE__*/React.createElement(DefaultLegendContent, otherProps);\n}\nvar EPS = 1;\nexport var Legend = /*#__PURE__*/function (_PureComponent) {\n _inherits(Legend, _PureComponent);\n var _super = _createSuper(Legend);\n function Legend() {\n var _this;\n _classCallCheck(this, Legend);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _defineProperty(_assertThisInitialized(_this), \"state\", {\n boxWidth: -1,\n boxHeight: -1\n });\n return _this;\n }\n _createClass(Legend, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.updateBBox();\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n this.updateBBox();\n }\n }, {\n key: \"getBBox\",\n value: function getBBox() {\n if (this.wrapperNode && this.wrapperNode.getBoundingClientRect) {\n return this.wrapperNode.getBoundingClientRect();\n }\n return null;\n }\n }, {\n key: \"getBBoxSnapshot\",\n value: function getBBoxSnapshot() {\n var _this$state = this.state,\n boxWidth = _this$state.boxWidth,\n boxHeight = _this$state.boxHeight;\n if (boxWidth >= 0 && boxHeight >= 0) {\n return {\n width: boxWidth,\n height: boxHeight\n };\n }\n return null;\n }\n }, {\n key: \"getDefaultPosition\",\n value: function getDefaultPosition(style) {\n var _this$props = this.props,\n layout = _this$props.layout,\n align = _this$props.align,\n verticalAlign = _this$props.verticalAlign,\n margin = _this$props.margin,\n chartWidth = _this$props.chartWidth,\n chartHeight = _this$props.chartHeight;\n var hPos, vPos;\n if (!style || (style.left === undefined || style.left === null) && (style.right === undefined || style.right === null)) {\n if (align === 'center' && layout === 'vertical') {\n var _box = this.getBBoxSnapshot() || {\n width: 0\n };\n hPos = {\n left: ((chartWidth || 0) - _box.width) / 2\n };\n } else {\n hPos = align === 'right' ? {\n right: margin && margin.right || 0\n } : {\n left: margin && margin.left || 0\n };\n }\n }\n if (!style || (style.top === undefined || style.top === null) && (style.bottom === undefined || style.bottom === null)) {\n if (verticalAlign === 'middle') {\n var _box2 = this.getBBoxSnapshot() || {\n height: 0\n };\n vPos = {\n top: ((chartHeight || 0) - _box2.height) / 2\n };\n } else {\n vPos = verticalAlign === 'bottom' ? {\n bottom: margin && margin.bottom || 0\n } : {\n top: margin && margin.top || 0\n };\n }\n }\n return _objectSpread(_objectSpread({}, hPos), vPos);\n }\n }, {\n key: \"updateBBox\",\n value: function updateBBox() {\n var _this$state2 = this.state,\n boxWidth = _this$state2.boxWidth,\n boxHeight = _this$state2.boxHeight;\n var onBBoxUpdate = this.props.onBBoxUpdate;\n if (this.wrapperNode && this.wrapperNode.getBoundingClientRect) {\n var _box3 = this.wrapperNode.getBoundingClientRect();\n if (Math.abs(_box3.width - boxWidth) > EPS || Math.abs(_box3.height - boxHeight) > EPS) {\n this.setState({\n boxWidth: _box3.width,\n boxHeight: _box3.height\n }, function () {\n if (onBBoxUpdate) {\n onBBoxUpdate(_box3);\n }\n });\n }\n } else if (boxWidth !== -1 || boxHeight !== -1) {\n this.setState({\n boxWidth: -1,\n boxHeight: -1\n }, function () {\n if (onBBoxUpdate) {\n onBBoxUpdate(null);\n }\n });\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n var _this$props2 = this.props,\n content = _this$props2.content,\n width = _this$props2.width,\n height = _this$props2.height,\n wrapperStyle = _this$props2.wrapperStyle,\n payloadUniqBy = _this$props2.payloadUniqBy,\n payload = _this$props2.payload;\n var outerStyle = _objectSpread(_objectSpread({\n position: 'absolute',\n width: width || 'auto',\n height: height || 'auto'\n }, this.getDefaultPosition(wrapperStyle)), wrapperStyle);\n return /*#__PURE__*/React.createElement(\"div\", {\n className: \"recharts-legend-wrapper\",\n style: outerStyle,\n ref: function ref(node) {\n _this2.wrapperNode = node;\n }\n }, renderContent(content, _objectSpread(_objectSpread({}, this.props), {}, {\n payload: getUniqPayload(payloadUniqBy, payload)\n })));\n }\n }], [{\n key: \"getWithHeight\",\n value: function getWithHeight(item, chartWidth) {\n var layout = item.props.layout;\n if (layout === 'vertical' && isNumber(item.props.height)) {\n return {\n height: item.props.height\n };\n }\n if (layout === 'horizontal') {\n return {\n width: item.props.width || chartWidth\n };\n }\n return null;\n }\n }]);\n return Legend;\n}(PureComponent);\n_defineProperty(Legend, \"displayName\", 'Legend');\n_defineProperty(Legend, \"defaultProps\", {\n iconSize: 14,\n layout: 'horizontal',\n align: 'center',\n verticalAlign: 'bottom'\n});","import _isNil from \"lodash/isNil\";\nvar _excluded = [\"dx\", \"dy\", \"textAnchor\", \"verticalAnchor\", \"scaleToFit\", \"angle\", \"lineHeight\", \"capHeight\", \"className\", \"breakAll\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i[\"return\"] && (_r = _i[\"return\"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\nimport React, { useMemo } from 'react';\nimport reduceCSSCalc from 'reduce-css-calc';\nimport classNames from 'classnames';\nimport { isNumber, isNumOrStr } from '../util/DataUtils';\nimport { Global } from '../util/Global';\nimport { filterProps } from '../util/ReactUtils';\nimport { getStringSize } from '../util/DOMUtils';\nvar BREAKING_SPACES = /[ \\f\\n\\r\\t\\v\\u2028\\u2029]+/;\nvar calculateWordWidths = function calculateWordWidths(_ref) {\n var children = _ref.children,\n breakAll = _ref.breakAll,\n style = _ref.style;\n try {\n var words = [];\n if (!_isNil(children)) {\n if (breakAll) {\n words = children.toString().split('');\n } else {\n words = children.toString().split(BREAKING_SPACES);\n }\n }\n var wordsWithComputedWidth = words.map(function (word) {\n return {\n word: word,\n width: getStringSize(word, style).width\n };\n });\n var spaceWidth = breakAll ? 0 : getStringSize(\"\\xA0\", style).width;\n return {\n wordsWithComputedWidth: wordsWithComputedWidth,\n spaceWidth: spaceWidth\n };\n } catch (e) {\n return null;\n }\n};\nvar calculateWordsByLines = function calculateWordsByLines(_ref2, initialWordsWithComputedWith, spaceWidth, lineWidth, scaleToFit) {\n var maxLines = _ref2.maxLines,\n children = _ref2.children,\n style = _ref2.style,\n breakAll = _ref2.breakAll;\n var shouldLimitLines = isNumber(maxLines);\n var text = children;\n var calculate = function calculate() {\n var words = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n return words.reduce(function (result, _ref3) {\n var word = _ref3.word,\n width = _ref3.width;\n var currentLine = result[result.length - 1];\n if (currentLine && (lineWidth == null || scaleToFit || currentLine.width + width + spaceWidth < Number(lineWidth))) {\n // Word can be added to an existing line\n currentLine.words.push(word);\n currentLine.width += width + spaceWidth;\n } else {\n // Add first word to line or word is too long to scaleToFit on existing line\n var newLine = {\n words: [word],\n width: width\n };\n result.push(newLine);\n }\n return result;\n }, []);\n };\n var originalResult = calculate(initialWordsWithComputedWith);\n var findLongestLine = function findLongestLine(words) {\n return words.reduce(function (a, b) {\n return a.width > b.width ? a : b;\n });\n };\n if (!shouldLimitLines) {\n return originalResult;\n }\n var suffix = '…';\n var checkOverflow = function checkOverflow(index) {\n var tempText = text.slice(0, index);\n var words = calculateWordWidths({\n breakAll: breakAll,\n style: style,\n children: tempText + suffix\n }).wordsWithComputedWidth;\n var result = calculate(words);\n var doesOverflow = result.length > maxLines || findLongestLine(result).width > Number(lineWidth);\n return [doesOverflow, result];\n };\n var start = 0;\n var end = text.length - 1;\n var iterations = 0;\n var trimmedResult;\n while (start <= end && iterations <= text.length - 1) {\n var middle = Math.floor((start + end) / 2);\n var prev = middle - 1;\n var _checkOverflow = checkOverflow(prev),\n _checkOverflow2 = _slicedToArray(_checkOverflow, 2),\n doesPrevOverflow = _checkOverflow2[0],\n result = _checkOverflow2[1];\n var _checkOverflow3 = checkOverflow(middle),\n _checkOverflow4 = _slicedToArray(_checkOverflow3, 1),\n doesMiddleOverflow = _checkOverflow4[0];\n if (!doesPrevOverflow && !doesMiddleOverflow) {\n start = middle + 1;\n }\n if (doesPrevOverflow && doesMiddleOverflow) {\n end = middle - 1;\n }\n if (!doesPrevOverflow && doesMiddleOverflow) {\n trimmedResult = result;\n break;\n }\n iterations++;\n }\n\n // Fallback to originalResult (result without trimming) if we cannot find the\n // where to trim. This should not happen :tm:\n return trimmedResult || originalResult;\n};\nvar getWordsWithoutCalculate = function getWordsWithoutCalculate(children) {\n var words = !_isNil(children) ? children.toString().split(BREAKING_SPACES) : [];\n return [{\n words: words\n }];\n};\nvar getWordsByLines = function getWordsByLines(_ref4) {\n var width = _ref4.width,\n scaleToFit = _ref4.scaleToFit,\n children = _ref4.children,\n style = _ref4.style,\n breakAll = _ref4.breakAll,\n maxLines = _ref4.maxLines;\n // Only perform calculations if using features that require them (multiline, scaleToFit)\n if ((width || scaleToFit) && !Global.isSsr) {\n var wordsWithComputedWidth, spaceWidth;\n var wordWidths = calculateWordWidths({\n breakAll: breakAll,\n children: children,\n style: style\n });\n if (wordWidths) {\n var wcw = wordWidths.wordsWithComputedWidth,\n sw = wordWidths.spaceWidth;\n wordsWithComputedWidth = wcw;\n spaceWidth = sw;\n } else {\n return getWordsWithoutCalculate(children);\n }\n return calculateWordsByLines({\n breakAll: breakAll,\n children: children,\n maxLines: maxLines,\n style: style\n }, wordsWithComputedWidth, spaceWidth, width, scaleToFit);\n }\n return getWordsWithoutCalculate(children);\n};\nvar textDefaultProps = {\n x: 0,\n y: 0,\n lineHeight: '1em',\n capHeight: '0.71em',\n // Magic number from d3\n scaleToFit: false,\n textAnchor: 'start',\n verticalAnchor: 'end',\n // Maintain compat with existing charts / default SVG behavior\n fill: '#808080'\n};\nexport var Text = function Text(props) {\n var wordsByLines = useMemo(function () {\n return getWordsByLines({\n breakAll: props.breakAll,\n children: props.children,\n maxLines: props.maxLines,\n scaleToFit: props.scaleToFit,\n style: props.style,\n width: props.width\n });\n }, [props.breakAll, props.children, props.maxLines, props.scaleToFit, props.style, props.width]);\n var dx = props.dx,\n dy = props.dy,\n textAnchor = props.textAnchor,\n verticalAnchor = props.verticalAnchor,\n scaleToFit = props.scaleToFit,\n angle = props.angle,\n lineHeight = props.lineHeight,\n capHeight = props.capHeight,\n className = props.className,\n breakAll = props.breakAll,\n textProps = _objectWithoutProperties(props, _excluded);\n if (!isNumOrStr(textProps.x) || !isNumOrStr(textProps.y)) {\n return null;\n }\n var x = textProps.x + (isNumber(dx) ? dx : 0);\n var y = textProps.y + (isNumber(dy) ? dy : 0);\n var startDy;\n switch (verticalAnchor) {\n case 'start':\n startDy = reduceCSSCalc(\"calc(\".concat(capHeight, \")\"));\n break;\n case 'middle':\n startDy = reduceCSSCalc(\"calc(\".concat((wordsByLines.length - 1) / 2, \" * -\").concat(lineHeight, \" + (\").concat(capHeight, \" / 2))\"));\n break;\n default:\n startDy = reduceCSSCalc(\"calc(\".concat(wordsByLines.length - 1, \" * -\").concat(lineHeight, \")\"));\n break;\n }\n var transforms = [];\n if (scaleToFit) {\n var lineWidth = wordsByLines[0].width;\n var width = props.width;\n transforms.push(\"scale(\".concat((isNumber(width) ? width / lineWidth : 1) / lineWidth, \")\"));\n }\n if (angle) {\n transforms.push(\"rotate(\".concat(angle, \", \").concat(x, \", \").concat(y, \")\"));\n }\n if (transforms.length) {\n textProps.transform = transforms.join(' ');\n }\n return /*#__PURE__*/React.createElement(\"text\", _extends({}, filterProps(textProps, true), {\n x: x,\n y: y,\n className: classNames('recharts-text', className),\n textAnchor: textAnchor,\n fill: textProps.fill.includes('url') ? textDefaultProps.fill : textProps.fill\n }), wordsByLines.map(function (line, index) {\n return (\n /*#__PURE__*/\n // eslint-disable-next-line react/no-array-index-key\n React.createElement(\"tspan\", {\n x: x,\n dy: index === 0 ? startDy : lineHeight,\n key: index\n }, line.words.join(breakAll ? '' : ' '))\n );\n }));\n};\nText.defaultProps = textDefaultProps;","var _excluded = [\"children\", \"className\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n/**\n * @fileOverview Layer\n */\nimport React from 'react';\nimport classNames from 'classnames';\nimport { filterProps } from '../util/ReactUtils';\nexport var Layer = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var children = props.children,\n className = props.className,\n others = _objectWithoutProperties(props, _excluded);\n var layerClass = classNames('recharts-layer', className);\n return /*#__PURE__*/React.createElement(\"g\", _extends({\n className: layerClass\n }, filterProps(others, true), {\n ref: ref\n }), children);\n});","var _excluded = [\"children\", \"width\", \"height\", \"viewBox\", \"className\", \"style\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n/**\n * @fileOverview Surface\n */\nimport React from 'react';\nimport classNames from 'classnames';\nimport { filterProps } from '../util/ReactUtils';\nexport function Surface(props) {\n var children = props.children,\n width = props.width,\n height = props.height,\n viewBox = props.viewBox,\n className = props.className,\n style = props.style,\n others = _objectWithoutProperties(props, _excluded);\n var svgView = viewBox || {\n width: width,\n height: height,\n x: 0,\n y: 0\n };\n var layerClass = classNames('recharts-surface', className);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({}, filterProps(others, true, 'svg'), {\n className: layerClass,\n width: width,\n height: height,\n style: style,\n viewBox: \"\".concat(svgView.x, \" \").concat(svgView.y, \" \").concat(svgView.width, \" \").concat(svgView.height)\n }), /*#__PURE__*/React.createElement(\"title\", null, props.title), /*#__PURE__*/React.createElement(\"desc\", null, props.desc), children);\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nimport _isObject from \"lodash/isObject\";\nimport _isFunction from \"lodash/isFunction\";\nimport _isNil from \"lodash/isNil\";\nimport _last from \"lodash/last\";\nimport _isArray from \"lodash/isArray\";\nvar _excluded = [\"data\", \"valueAccessor\", \"dataKey\", \"clockWise\", \"id\", \"textBreakAll\"];\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React, { cloneElement } from 'react';\nimport { Label } from './Label';\nimport { Layer } from '../container/Layer';\nimport { findAllByType, filterProps } from '../util/ReactUtils';\nimport { getValueByDataKey } from '../util/ChartUtils';\nvar defaultProps = {\n valueAccessor: function valueAccessor(entry) {\n return _isArray(entry.value) ? _last(entry.value) : entry.value;\n }\n};\nexport function LabelList(props) {\n var data = props.data,\n valueAccessor = props.valueAccessor,\n dataKey = props.dataKey,\n clockWise = props.clockWise,\n id = props.id,\n textBreakAll = props.textBreakAll,\n others = _objectWithoutProperties(props, _excluded);\n if (!data || !data.length) {\n return null;\n }\n return /*#__PURE__*/React.createElement(Layer, {\n className: \"recharts-label-list\"\n }, data.map(function (entry, index) {\n var value = _isNil(dataKey) ? valueAccessor(entry, index) : getValueByDataKey(entry && entry.payload, dataKey);\n var idProps = _isNil(id) ? {} : {\n id: \"\".concat(id, \"-\").concat(index)\n };\n return /*#__PURE__*/React.createElement(Label, _extends({}, filterProps(entry, true), others, idProps, {\n parentViewBox: entry.parentViewBox,\n index: index,\n value: value,\n textBreakAll: textBreakAll,\n viewBox: Label.parseViewBox(_isNil(clockWise) ? entry : _objectSpread(_objectSpread({}, entry), {}, {\n clockWise: clockWise\n })),\n key: \"label-\".concat(index) // eslint-disable-line react/no-array-index-key\n }));\n }));\n}\n\nLabelList.displayName = 'LabelList';\nfunction parseLabelList(label, data) {\n if (!label) {\n return null;\n }\n if (label === true) {\n return /*#__PURE__*/React.createElement(LabelList, {\n key: \"labelList-implicit\",\n data: data\n });\n }\n if ( /*#__PURE__*/React.isValidElement(label) || _isFunction(label)) {\n return /*#__PURE__*/React.createElement(LabelList, {\n key: \"labelList-implicit\",\n data: data,\n content: label\n });\n }\n if (_isObject(label)) {\n return /*#__PURE__*/React.createElement(LabelList, _extends({\n data: data\n }, label, {\n key: \"labelList-implicit\"\n }));\n }\n return null;\n}\nfunction renderCallByParent(parentProps, data) {\n var checkPropsLabel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n if (!parentProps || !parentProps.children && checkPropsLabel && !parentProps.label) {\n return null;\n }\n var children = parentProps.children;\n var explicitChildren = findAllByType(children, LabelList).map(function (child, index) {\n return /*#__PURE__*/cloneElement(child, {\n data: data,\n // eslint-disable-next-line react/no-array-index-key\n key: \"labelList-\".concat(index)\n });\n });\n if (!checkPropsLabel) {\n return explicitChildren;\n }\n var implicitLabelList = parseLabelList(parentProps.label, data);\n return [implicitLabelList].concat(_toConsumableArray(explicitChildren));\n}\nLabelList.renderCallByParent = renderCallByParent;\nLabelList.defaultProps = defaultProps;","import _isEqual from \"lodash/isEqual\";\nimport _get from \"lodash/get\";\nimport _isPlainObject from \"lodash/isPlainObject\";\nimport _isFunction from \"lodash/isFunction\";\nimport _isNil from \"lodash/isNil\";\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/**\n * @fileOverview Render sectors of a pie\n */\nimport React, { PureComponent } from 'react';\nimport Animate from 'react-smooth';\nimport classNames from 'classnames';\nimport { Layer } from '../container/Layer';\nimport { Sector } from '../shape/Sector';\nimport { Curve } from '../shape/Curve';\nimport { Text } from '../component/Text';\nimport { Label } from '../component/Label';\nimport { LabelList } from '../component/LabelList';\nimport { Cell } from '../component/Cell';\nimport { findAllByType, filterProps } from '../util/ReactUtils';\nimport { Global } from '../util/Global';\nimport { polarToCartesian, getMaxRadius } from '../util/PolarUtils';\nimport { isNumber, getPercentValue, mathSign, interpolateNumber, uniqueId } from '../util/DataUtils';\nimport { getValueByDataKey } from '../util/ChartUtils';\nimport { warn } from '../util/LogUtils';\nimport { adaptEventsOfChild } from '../util/types';\nexport var Pie = /*#__PURE__*/function (_PureComponent) {\n _inherits(Pie, _PureComponent);\n var _super = _createSuper(Pie);\n function Pie(props) {\n var _this;\n _classCallCheck(this, Pie);\n _this = _super.call(this, props);\n _defineProperty(_assertThisInitialized(_this), \"pieRef\", null);\n _defineProperty(_assertThisInitialized(_this), \"sectorRefs\", []);\n _defineProperty(_assertThisInitialized(_this), \"id\", uniqueId('recharts-pie-'));\n _defineProperty(_assertThisInitialized(_this), \"handleAnimationEnd\", function () {\n var onAnimationEnd = _this.props.onAnimationEnd;\n _this.setState({\n isAnimationFinished: true\n });\n if (_isFunction(onAnimationEnd)) {\n onAnimationEnd();\n }\n });\n _defineProperty(_assertThisInitialized(_this), \"handleAnimationStart\", function () {\n var onAnimationStart = _this.props.onAnimationStart;\n _this.setState({\n isAnimationFinished: false\n });\n if (_isFunction(onAnimationStart)) {\n onAnimationStart();\n }\n });\n _this.state = {\n isAnimationFinished: !props.isAnimationActive,\n prevIsAnimationActive: props.isAnimationActive,\n prevAnimationId: props.animationId,\n sectorToFocus: 0\n };\n return _this;\n }\n _createClass(Pie, [{\n key: \"isActiveIndex\",\n value: function isActiveIndex(i) {\n var activeIndex = this.props.activeIndex;\n if (Array.isArray(activeIndex)) {\n return activeIndex.indexOf(i) !== -1;\n }\n return i === activeIndex;\n }\n }, {\n key: \"hasActiveIndex\",\n value: function hasActiveIndex() {\n var activeIndex = this.props.activeIndex;\n return Array.isArray(activeIndex) ? activeIndex.length !== 0 : activeIndex || activeIndex === 0;\n }\n }, {\n key: \"renderLabels\",\n value: function renderLabels(sectors) {\n var isAnimationActive = this.props.isAnimationActive;\n if (isAnimationActive && !this.state.isAnimationFinished) {\n return null;\n }\n var _this$props = this.props,\n label = _this$props.label,\n labelLine = _this$props.labelLine,\n dataKey = _this$props.dataKey,\n valueKey = _this$props.valueKey;\n var pieProps = filterProps(this.props);\n var customLabelProps = filterProps(label);\n var customLabelLineProps = filterProps(labelLine);\n var offsetRadius = label && label.offsetRadius || 20;\n var labels = sectors.map(function (entry, i) {\n var midAngle = (entry.startAngle + entry.endAngle) / 2;\n var endPoint = polarToCartesian(entry.cx, entry.cy, entry.outerRadius + offsetRadius, midAngle);\n var labelProps = _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, pieProps), entry), {}, {\n stroke: 'none'\n }, customLabelProps), {}, {\n index: i,\n textAnchor: Pie.getTextAnchor(endPoint.x, entry.cx)\n }, endPoint);\n var lineProps = _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, pieProps), entry), {}, {\n fill: 'none',\n stroke: entry.fill\n }, customLabelLineProps), {}, {\n index: i,\n points: [polarToCartesian(entry.cx, entry.cy, entry.outerRadius, midAngle), endPoint],\n key: 'line'\n });\n var realDataKey = dataKey;\n // TODO: compatible to lower versions\n if (_isNil(dataKey) && _isNil(valueKey)) {\n realDataKey = 'value';\n } else if (_isNil(dataKey)) {\n realDataKey = valueKey;\n }\n return (\n /*#__PURE__*/\n // eslint-disable-next-line react/no-array-index-key\n React.createElement(Layer, {\n key: \"label-\".concat(i)\n }, labelLine && Pie.renderLabelLineItem(labelLine, lineProps), Pie.renderLabelItem(label, labelProps, getValueByDataKey(entry, realDataKey)))\n );\n });\n return /*#__PURE__*/React.createElement(Layer, {\n className: \"recharts-pie-labels\"\n }, labels);\n }\n }, {\n key: \"renderSectorsStatically\",\n value: function renderSectorsStatically(sectors) {\n var _this2 = this;\n var _this$props2 = this.props,\n activeShape = _this$props2.activeShape,\n blendStroke = _this$props2.blendStroke,\n inactiveShapeProp = _this$props2.inactiveShape;\n return sectors.map(function (entry, i) {\n var inactiveShape = inactiveShapeProp && _this2.hasActiveIndex() ? inactiveShapeProp : null;\n var sectorOptions = _this2.isActiveIndex(i) ? activeShape : inactiveShape;\n var sectorProps = _objectSpread(_objectSpread({}, entry), {}, {\n stroke: blendStroke ? entry.fill : entry.stroke\n });\n return /*#__PURE__*/React.createElement(Layer, _extends({\n ref: function ref(_ref) {\n if (_ref && !_this2.sectorRefs.includes(_ref)) {\n _this2.sectorRefs.push(_ref);\n }\n },\n tabIndex: -1,\n className: \"recharts-pie-sector\"\n }, adaptEventsOfChild(_this2.props, entry, i), {\n key: \"sector-\".concat(i) // eslint-disable-line react/no-array-index-key\n }), Pie.renderSectorItem(sectorOptions, sectorProps));\n });\n }\n }, {\n key: \"renderSectorsWithAnimation\",\n value: function renderSectorsWithAnimation() {\n var _this3 = this;\n var _this$props3 = this.props,\n sectors = _this$props3.sectors,\n isAnimationActive = _this$props3.isAnimationActive,\n animationBegin = _this$props3.animationBegin,\n animationDuration = _this$props3.animationDuration,\n animationEasing = _this$props3.animationEasing,\n animationId = _this$props3.animationId;\n var _this$state = this.state,\n prevSectors = _this$state.prevSectors,\n prevIsAnimationActive = _this$state.prevIsAnimationActive;\n return /*#__PURE__*/React.createElement(Animate, {\n begin: animationBegin,\n duration: animationDuration,\n isActive: isAnimationActive,\n easing: animationEasing,\n from: {\n t: 0\n },\n to: {\n t: 1\n },\n key: \"pie-\".concat(animationId, \"-\").concat(prevIsAnimationActive),\n onAnimationStart: this.handleAnimationStart,\n onAnimationEnd: this.handleAnimationEnd\n }, function (_ref2) {\n var t = _ref2.t;\n var stepData = [];\n var first = sectors && sectors[0];\n var curAngle = first.startAngle;\n sectors.forEach(function (entry, index) {\n var prev = prevSectors && prevSectors[index];\n var paddingAngle = index > 0 ? _get(entry, 'paddingAngle', 0) : 0;\n if (prev) {\n var angleIp = interpolateNumber(prev.endAngle - prev.startAngle, entry.endAngle - entry.startAngle);\n var latest = _objectSpread(_objectSpread({}, entry), {}, {\n startAngle: curAngle + paddingAngle,\n endAngle: curAngle + angleIp(t) + paddingAngle\n });\n stepData.push(latest);\n curAngle = latest.endAngle;\n } else {\n var endAngle = entry.endAngle,\n startAngle = entry.startAngle;\n var interpolatorAngle = interpolateNumber(0, endAngle - startAngle);\n var deltaAngle = interpolatorAngle(t);\n var _latest = _objectSpread(_objectSpread({}, entry), {}, {\n startAngle: curAngle + paddingAngle,\n endAngle: curAngle + deltaAngle + paddingAngle\n });\n stepData.push(_latest);\n curAngle = _latest.endAngle;\n }\n });\n return /*#__PURE__*/React.createElement(Layer, null, _this3.renderSectorsStatically(stepData));\n });\n }\n }, {\n key: \"attachKeyboardHandlers\",\n value: function attachKeyboardHandlers(pieRef) {\n var _this4 = this;\n // eslint-disable-next-line no-param-reassign\n pieRef.onkeydown = function (e) {\n if (!e.altKey) {\n switch (e.key) {\n case 'ArrowLeft':\n {\n var next = ++_this4.state.sectorToFocus % _this4.sectorRefs.length;\n _this4.sectorRefs[next].focus();\n _this4.setState({\n sectorToFocus: next\n });\n break;\n }\n case 'ArrowRight':\n {\n var _next = --_this4.state.sectorToFocus < 0 ? _this4.sectorRefs.length - 1 : _this4.state.sectorToFocus % _this4.sectorRefs.length;\n _this4.sectorRefs[_next].focus();\n _this4.setState({\n sectorToFocus: _next\n });\n break;\n }\n case 'Escape':\n {\n _this4.sectorRefs[_this4.state.sectorToFocus].blur();\n _this4.setState({\n sectorToFocus: 0\n });\n break;\n }\n default:\n {\n // There is nothing to do here\n }\n }\n }\n };\n }\n }, {\n key: \"renderSectors\",\n value: function renderSectors() {\n var _this$props4 = this.props,\n sectors = _this$props4.sectors,\n isAnimationActive = _this$props4.isAnimationActive;\n var prevSectors = this.state.prevSectors;\n if (isAnimationActive && sectors && sectors.length && (!prevSectors || !_isEqual(prevSectors, sectors))) {\n return this.renderSectorsWithAnimation();\n }\n return this.renderSectorsStatically(sectors);\n }\n }, {\n key: \"componentDidMount\",\n value: function componentDidMount() {\n if (this.pieRef) {\n this.attachKeyboardHandlers(this.pieRef);\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this5 = this;\n var _this$props5 = this.props,\n hide = _this$props5.hide,\n sectors = _this$props5.sectors,\n className = _this$props5.className,\n label = _this$props5.label,\n cx = _this$props5.cx,\n cy = _this$props5.cy,\n innerRadius = _this$props5.innerRadius,\n outerRadius = _this$props5.outerRadius,\n isAnimationActive = _this$props5.isAnimationActive;\n var isAnimationFinished = this.state.isAnimationFinished;\n if (hide || !sectors || !sectors.length || !isNumber(cx) || !isNumber(cy) || !isNumber(innerRadius) || !isNumber(outerRadius)) {\n return null;\n }\n var layerClass = classNames('recharts-pie', className);\n return /*#__PURE__*/React.createElement(Layer, {\n tabIndex: 0,\n className: layerClass,\n ref: function ref(_ref3) {\n _this5.pieRef = _ref3;\n }\n }, this.renderSectors(), label && this.renderLabels(sectors), Label.renderCallByParent(this.props, null, false), (!isAnimationActive || isAnimationFinished) && LabelList.renderCallByParent(this.props, sectors, false));\n }\n }], [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(nextProps, prevState) {\n if (prevState.prevIsAnimationActive !== nextProps.isAnimationActive) {\n return {\n prevIsAnimationActive: nextProps.isAnimationActive,\n prevAnimationId: nextProps.animationId,\n curSectors: nextProps.sectors,\n prevSectors: [],\n isAnimationFinished: true\n };\n }\n if (nextProps.isAnimationActive && nextProps.animationId !== prevState.prevAnimationId) {\n return {\n prevAnimationId: nextProps.animationId,\n curSectors: nextProps.sectors,\n prevSectors: prevState.curSectors,\n isAnimationFinished: true\n };\n }\n if (nextProps.sectors !== prevState.curSectors) {\n return {\n curSectors: nextProps.sectors,\n isAnimationFinished: true\n };\n }\n return null;\n }\n }, {\n key: \"getTextAnchor\",\n value: function getTextAnchor(x, cx) {\n if (x > cx) {\n return 'start';\n }\n if (x < cx) {\n return 'end';\n }\n return 'middle';\n }\n }, {\n key: \"renderLabelLineItem\",\n value: function renderLabelLineItem(option, props) {\n if ( /*#__PURE__*/React.isValidElement(option)) {\n return /*#__PURE__*/React.cloneElement(option, props);\n }\n if (_isFunction(option)) {\n return option(props);\n }\n return /*#__PURE__*/React.createElement(Curve, _extends({}, props, {\n type: \"linear\",\n className: \"recharts-pie-label-line\"\n }));\n }\n }, {\n key: \"renderLabelItem\",\n value: function renderLabelItem(option, props, value) {\n if ( /*#__PURE__*/React.isValidElement(option)) {\n return /*#__PURE__*/React.cloneElement(option, props);\n }\n var label = value;\n if (_isFunction(option)) {\n label = option(props);\n if ( /*#__PURE__*/React.isValidElement(label)) {\n return label;\n }\n }\n return /*#__PURE__*/React.createElement(Text, _extends({}, props, {\n alignmentBaseline: \"middle\",\n className: \"recharts-pie-label-text\"\n }), label);\n }\n }, {\n key: \"renderSectorItem\",\n value: function renderSectorItem(option, props) {\n if ( /*#__PURE__*/React.isValidElement(option)) {\n return /*#__PURE__*/React.cloneElement(option, props);\n }\n if (_isFunction(option)) {\n return option(props);\n }\n if (_isPlainObject(option)) {\n return /*#__PURE__*/React.createElement(Sector, _extends({\n tabIndex: -1\n }, props, option));\n }\n return /*#__PURE__*/React.createElement(Sector, _extends({\n tabIndex: -1\n }, props));\n }\n }]);\n return Pie;\n}(PureComponent);\n_defineProperty(Pie, \"displayName\", 'Pie');\n_defineProperty(Pie, \"defaultProps\", {\n stroke: '#fff',\n fill: '#808080',\n legendType: 'rect',\n cx: '50%',\n cy: '50%',\n startAngle: 0,\n endAngle: 360,\n innerRadius: 0,\n outerRadius: '80%',\n paddingAngle: 0,\n labelLine: true,\n hide: false,\n minAngle: 0,\n isAnimationActive: !Global.isSsr,\n animationBegin: 400,\n animationDuration: 1500,\n animationEasing: 'ease',\n nameKey: 'name',\n blendStroke: false\n});\n_defineProperty(Pie, \"parseDeltaAngle\", function (startAngle, endAngle) {\n var sign = mathSign(endAngle - startAngle);\n var deltaAngle = Math.min(Math.abs(endAngle - startAngle), 360);\n return sign * deltaAngle;\n});\n_defineProperty(Pie, \"getRealPieData\", function (item) {\n var _item$props = item.props,\n data = _item$props.data,\n children = _item$props.children;\n var presentationProps = filterProps(item.props);\n var cells = findAllByType(children, Cell);\n if (data && data.length) {\n return data.map(function (entry, index) {\n return _objectSpread(_objectSpread(_objectSpread({\n payload: entry\n }, presentationProps), entry), cells && cells[index] && cells[index].props);\n });\n }\n if (cells && cells.length) {\n return cells.map(function (cell) {\n return _objectSpread(_objectSpread({}, presentationProps), cell.props);\n });\n }\n return [];\n});\n_defineProperty(Pie, \"parseCoordinateOfPie\", function (item, offset) {\n var top = offset.top,\n left = offset.left,\n width = offset.width,\n height = offset.height;\n var maxPieRadius = getMaxRadius(width, height);\n var cx = left + getPercentValue(item.props.cx, width, width / 2);\n var cy = top + getPercentValue(item.props.cy, height, height / 2);\n var innerRadius = getPercentValue(item.props.innerRadius, maxPieRadius, 0);\n var outerRadius = getPercentValue(item.props.outerRadius, maxPieRadius, maxPieRadius * 0.8);\n var maxRadius = item.props.maxRadius || Math.sqrt(width * width + height * height) / 2;\n return {\n cx: cx,\n cy: cy,\n innerRadius: innerRadius,\n outerRadius: outerRadius,\n maxRadius: maxRadius\n };\n});\n_defineProperty(Pie, \"getComposedData\", function (_ref4) {\n var item = _ref4.item,\n offset = _ref4.offset;\n var pieData = Pie.getRealPieData(item);\n if (!pieData || !pieData.length) {\n return null;\n }\n var _item$props2 = item.props,\n cornerRadius = _item$props2.cornerRadius,\n startAngle = _item$props2.startAngle,\n endAngle = _item$props2.endAngle,\n paddingAngle = _item$props2.paddingAngle,\n dataKey = _item$props2.dataKey,\n nameKey = _item$props2.nameKey,\n valueKey = _item$props2.valueKey,\n tooltipType = _item$props2.tooltipType;\n var minAngle = Math.abs(item.props.minAngle);\n var coordinate = Pie.parseCoordinateOfPie(item, offset);\n var deltaAngle = Pie.parseDeltaAngle(startAngle, endAngle);\n var absDeltaAngle = Math.abs(deltaAngle);\n var realDataKey = dataKey;\n if (_isNil(dataKey) && _isNil(valueKey)) {\n warn(false, \"Use \\\"dataKey\\\" to specify the value of pie,\\n the props \\\"valueKey\\\" will be deprecated in 1.1.0\");\n realDataKey = 'value';\n } else if (_isNil(dataKey)) {\n warn(false, \"Use \\\"dataKey\\\" to specify the value of pie,\\n the props \\\"valueKey\\\" will be deprecated in 1.1.0\");\n realDataKey = valueKey;\n }\n var notZeroItemCount = pieData.filter(function (entry) {\n return getValueByDataKey(entry, realDataKey, 0) !== 0;\n }).length;\n var totalPadingAngle = (absDeltaAngle >= 360 ? notZeroItemCount : notZeroItemCount - 1) * paddingAngle;\n var realTotalAngle = absDeltaAngle - notZeroItemCount * minAngle - totalPadingAngle;\n var sum = pieData.reduce(function (result, entry) {\n var val = getValueByDataKey(entry, realDataKey, 0);\n return result + (isNumber(val) ? val : 0);\n }, 0);\n var sectors;\n if (sum > 0) {\n var prev;\n sectors = pieData.map(function (entry, i) {\n var val = getValueByDataKey(entry, realDataKey, 0);\n var name = getValueByDataKey(entry, nameKey, i);\n var percent = (isNumber(val) ? val : 0) / sum;\n var tempStartAngle;\n if (i) {\n tempStartAngle = prev.endAngle + mathSign(deltaAngle) * paddingAngle * (val !== 0 ? 1 : 0);\n } else {\n tempStartAngle = startAngle;\n }\n var tempEndAngle = tempStartAngle + mathSign(deltaAngle) * ((val !== 0 ? minAngle : 0) + percent * realTotalAngle);\n var midAngle = (tempStartAngle + tempEndAngle) / 2;\n var middleRadius = (coordinate.innerRadius + coordinate.outerRadius) / 2;\n var tooltipPayload = [{\n name: name,\n value: val,\n payload: entry,\n dataKey: realDataKey,\n type: tooltipType\n }];\n var tooltipPosition = polarToCartesian(coordinate.cx, coordinate.cy, middleRadius, midAngle);\n prev = _objectSpread(_objectSpread(_objectSpread({\n percent: percent,\n cornerRadius: cornerRadius,\n name: name,\n tooltipPayload: tooltipPayload,\n midAngle: midAngle,\n middleRadius: middleRadius,\n tooltipPosition: tooltipPosition\n }, entry), coordinate), {}, {\n value: getValueByDataKey(entry, realDataKey),\n startAngle: tempStartAngle,\n endAngle: tempEndAngle,\n payload: entry,\n paddingAngle: mathSign(deltaAngle) * paddingAngle\n });\n return prev;\n });\n }\n return _objectSpread(_objectSpread({}, coordinate), {}, {\n sectors: sectors,\n data: pieData\n });\n});","export default function() {}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // falls through\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","import noop from \"../noop.js\";\nimport {point} from \"./basis.js\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisClosed(context);\n}\n","import {point} from \"./basis.js\";\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisOpen(context);\n}\n","import pointRadial from \"../pointRadial.js\";\n\nclass Bump {\n constructor(context, x) {\n this._context = context;\n this._x = x;\n }\n areaStart() {\n this._line = 0;\n }\n areaEnd() {\n this._line = NaN;\n }\n lineStart() {\n this._point = 0;\n }\n lineEnd() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n }\n point(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: {\n this._point = 1;\n if (this._line) this._context.lineTo(x, y);\n else this._context.moveTo(x, y);\n break;\n }\n case 1: this._point = 2; // falls through\n default: {\n if (this._x) this._context.bezierCurveTo(this._x0 = (this._x0 + x) / 2, this._y0, this._x0, y, x, y);\n else this._context.bezierCurveTo(this._x0, this._y0 = (this._y0 + y) / 2, x, this._y0, x, y);\n break;\n }\n }\n this._x0 = x, this._y0 = y;\n }\n}\n\nclass BumpRadial {\n constructor(context) {\n this._context = context;\n }\n lineStart() {\n this._point = 0;\n }\n lineEnd() {}\n point(x, y) {\n x = +x, y = +y;\n if (this._point === 0) {\n this._point = 1;\n } else {\n const p0 = pointRadial(this._x0, this._y0);\n const p1 = pointRadial(this._x0, this._y0 = (this._y0 + y) / 2);\n const p2 = pointRadial(x, this._y0);\n const p3 = pointRadial(x, y);\n this._context.moveTo(...p0);\n this._context.bezierCurveTo(...p1, ...p2, ...p3);\n }\n this._x0 = x, this._y0 = y;\n }\n}\n\nexport function bumpX(context) {\n return new Bump(context, true);\n}\n\nexport function bumpY(context) {\n return new Bump(context, false);\n}\n\nexport function bumpRadial(context) {\n return new BumpRadial(context);\n}\n","import noop from \"../noop.js\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n var defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(line);\n\n x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n function line(data) {\n var i,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport line from \"./line.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x0, y0, y1) {\n var x1 = null,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(area);\n\n x0 = typeof x0 === \"function\" ? x0 : (x0 === undefined) ? pointX : constant(+x0);\n y0 = typeof y0 === \"function\" ? y0 : (y0 === undefined) ? constant(0) : constant(+y0);\n y1 = typeof y1 === \"function\" ? y1 : (y1 === undefined) ? pointY : constant(+y1);\n\n function area(data) {\n var i,\n j,\n k,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","import _isArray from \"lodash/isArray\";\nimport _upperFirst from \"lodash/upperFirst\";\nimport _isFunction from \"lodash/isFunction\";\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/**\n * @fileOverview Curve\n */\nimport React from 'react';\nimport { line as shapeLine, area as shapeArea, curveBasisClosed, curveBasisOpen, curveBasis, curveBumpX, curveBumpY, curveLinearClosed, curveLinear, curveMonotoneX, curveMonotoneY, curveNatural, curveStep, curveStepAfter, curveStepBefore } from 'victory-vendor/d3-shape';\nimport classNames from 'classnames';\nimport { adaptEventHandlers } from '../util/types';\nimport { filterProps } from '../util/ReactUtils';\nimport { isNumber } from '../util/DataUtils';\nvar CURVE_FACTORIES = {\n curveBasisClosed: curveBasisClosed,\n curveBasisOpen: curveBasisOpen,\n curveBasis: curveBasis,\n curveBumpX: curveBumpX,\n curveBumpY: curveBumpY,\n curveLinearClosed: curveLinearClosed,\n curveLinear: curveLinear,\n curveMonotoneX: curveMonotoneX,\n curveMonotoneY: curveMonotoneY,\n curveNatural: curveNatural,\n curveStep: curveStep,\n curveStepAfter: curveStepAfter,\n curveStepBefore: curveStepBefore\n};\nvar defined = function defined(p) {\n return p.x === +p.x && p.y === +p.y;\n};\nvar getX = function getX(p) {\n return p.x;\n};\nvar getY = function getY(p) {\n return p.y;\n};\nvar getCurveFactory = function getCurveFactory(type, layout) {\n if (_isFunction(type)) {\n return type;\n }\n var name = \"curve\".concat(_upperFirst(type));\n if ((name === 'curveMonotone' || name === 'curveBump') && layout) {\n return CURVE_FACTORIES[\"\".concat(name).concat(layout === 'vertical' ? 'Y' : 'X')];\n }\n return CURVE_FACTORIES[name] || curveLinear;\n};\n/**\n * Calculate the path of curve\n * @return {String} path\n */\nvar getPath = function getPath(_ref) {\n var type = _ref.type,\n points = _ref.points,\n baseLine = _ref.baseLine,\n layout = _ref.layout,\n connectNulls = _ref.connectNulls;\n var curveFactory = getCurveFactory(type, layout);\n var formatPoints = connectNulls ? points.filter(function (entry) {\n return defined(entry);\n }) : points;\n var lineFunction;\n if (_isArray(baseLine)) {\n var formatBaseLine = connectNulls ? baseLine.filter(function (base) {\n return defined(base);\n }) : baseLine;\n var areaPoints = formatPoints.map(function (entry, index) {\n return _objectSpread(_objectSpread({}, entry), {}, {\n base: formatBaseLine[index]\n });\n });\n if (layout === 'vertical') {\n lineFunction = shapeArea().y(getY).x1(getX).x0(function (d) {\n return d.base.x;\n });\n } else {\n lineFunction = shapeArea().x(getX).y1(getY).y0(function (d) {\n return d.base.y;\n });\n }\n lineFunction.defined(defined).curve(curveFactory);\n return lineFunction(areaPoints);\n }\n if (layout === 'vertical' && isNumber(baseLine)) {\n lineFunction = shapeArea().y(getY).x1(getX).x0(baseLine);\n } else if (isNumber(baseLine)) {\n lineFunction = shapeArea().x(getX).y1(getY).y0(baseLine);\n } else {\n lineFunction = shapeLine().x(getX).y(getY);\n }\n lineFunction.defined(defined).curve(curveFactory);\n return lineFunction(formatPoints);\n};\nexport var Curve = function Curve(props) {\n var className = props.className,\n points = props.points,\n path = props.path,\n pathRef = props.pathRef;\n if ((!points || !points.length) && !path) {\n return null;\n }\n var realPath = points && points.length ? getPath(props) : path;\n return /*#__PURE__*/React.createElement(\"path\", _extends({}, filterProps(props), adaptEventHandlers(props), {\n className: classNames('recharts-curve', className),\n d: realPath,\n ref: pathRef\n }));\n};\nCurve.defaultProps = {\n type: 'linear',\n points: [],\n connectNulls: false\n};","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/**\n * @fileOverview Sector\n */\nimport React from 'react';\nimport classNames from 'classnames';\nimport { filterProps } from '../util/ReactUtils';\nimport { polarToCartesian, RADIAN } from '../util/PolarUtils';\nimport { getPercentValue, mathSign } from '../util/DataUtils';\nvar getDeltaAngle = function getDeltaAngle(startAngle, endAngle) {\n var sign = mathSign(endAngle - startAngle);\n var deltaAngle = Math.min(Math.abs(endAngle - startAngle), 359.999);\n return sign * deltaAngle;\n};\nvar getTangentCircle = function getTangentCircle(_ref) {\n var cx = _ref.cx,\n cy = _ref.cy,\n radius = _ref.radius,\n angle = _ref.angle,\n sign = _ref.sign,\n isExternal = _ref.isExternal,\n cornerRadius = _ref.cornerRadius,\n cornerIsExternal = _ref.cornerIsExternal;\n var centerRadius = cornerRadius * (isExternal ? 1 : -1) + radius;\n var theta = Math.asin(cornerRadius / centerRadius) / RADIAN;\n var centerAngle = cornerIsExternal ? angle : angle + sign * theta;\n var center = polarToCartesian(cx, cy, centerRadius, centerAngle);\n // The coordinate of point which is tangent to the circle\n var circleTangency = polarToCartesian(cx, cy, radius, centerAngle);\n // The coordinate of point which is tangent to the radius line\n var lineTangencyAngle = cornerIsExternal ? angle - sign * theta : angle;\n var lineTangency = polarToCartesian(cx, cy, centerRadius * Math.cos(theta * RADIAN), lineTangencyAngle);\n return {\n center: center,\n circleTangency: circleTangency,\n lineTangency: lineTangency,\n theta: theta\n };\n};\nvar getSectorPath = function getSectorPath(_ref2) {\n var cx = _ref2.cx,\n cy = _ref2.cy,\n innerRadius = _ref2.innerRadius,\n outerRadius = _ref2.outerRadius,\n startAngle = _ref2.startAngle,\n endAngle = _ref2.endAngle;\n var angle = getDeltaAngle(startAngle, endAngle);\n\n // When the angle of sector equals to 360, star point and end point coincide\n var tempEndAngle = startAngle + angle;\n var outerStartPoint = polarToCartesian(cx, cy, outerRadius, startAngle);\n var outerEndPoint = polarToCartesian(cx, cy, outerRadius, tempEndAngle);\n var path = \"M \".concat(outerStartPoint.x, \",\").concat(outerStartPoint.y, \"\\n A \").concat(outerRadius, \",\").concat(outerRadius, \",0,\\n \").concat(+(Math.abs(angle) > 180), \",\").concat(+(startAngle > tempEndAngle), \",\\n \").concat(outerEndPoint.x, \",\").concat(outerEndPoint.y, \"\\n \");\n if (innerRadius > 0) {\n var innerStartPoint = polarToCartesian(cx, cy, innerRadius, startAngle);\n var innerEndPoint = polarToCartesian(cx, cy, innerRadius, tempEndAngle);\n path += \"L \".concat(innerEndPoint.x, \",\").concat(innerEndPoint.y, \"\\n A \").concat(innerRadius, \",\").concat(innerRadius, \",0,\\n \").concat(+(Math.abs(angle) > 180), \",\").concat(+(startAngle <= tempEndAngle), \",\\n \").concat(innerStartPoint.x, \",\").concat(innerStartPoint.y, \" Z\");\n } else {\n path += \"L \".concat(cx, \",\").concat(cy, \" Z\");\n }\n return path;\n};\nvar getSectorWithCorner = function getSectorWithCorner(_ref3) {\n var cx = _ref3.cx,\n cy = _ref3.cy,\n innerRadius = _ref3.innerRadius,\n outerRadius = _ref3.outerRadius,\n cornerRadius = _ref3.cornerRadius,\n forceCornerRadius = _ref3.forceCornerRadius,\n cornerIsExternal = _ref3.cornerIsExternal,\n startAngle = _ref3.startAngle,\n endAngle = _ref3.endAngle;\n var sign = mathSign(endAngle - startAngle);\n var _getTangentCircle = getTangentCircle({\n cx: cx,\n cy: cy,\n radius: outerRadius,\n angle: startAngle,\n sign: sign,\n cornerRadius: cornerRadius,\n cornerIsExternal: cornerIsExternal\n }),\n soct = _getTangentCircle.circleTangency,\n solt = _getTangentCircle.lineTangency,\n sot = _getTangentCircle.theta;\n var _getTangentCircle2 = getTangentCircle({\n cx: cx,\n cy: cy,\n radius: outerRadius,\n angle: endAngle,\n sign: -sign,\n cornerRadius: cornerRadius,\n cornerIsExternal: cornerIsExternal\n }),\n eoct = _getTangentCircle2.circleTangency,\n eolt = _getTangentCircle2.lineTangency,\n eot = _getTangentCircle2.theta;\n var outerArcAngle = cornerIsExternal ? Math.abs(startAngle - endAngle) : Math.abs(startAngle - endAngle) - sot - eot;\n if (outerArcAngle < 0) {\n if (forceCornerRadius) {\n return \"M \".concat(solt.x, \",\").concat(solt.y, \"\\n a\").concat(cornerRadius, \",\").concat(cornerRadius, \",0,0,1,\").concat(cornerRadius * 2, \",0\\n a\").concat(cornerRadius, \",\").concat(cornerRadius, \",0,0,1,\").concat(-cornerRadius * 2, \",0\\n \");\n }\n return getSectorPath({\n cx: cx,\n cy: cy,\n innerRadius: innerRadius,\n outerRadius: outerRadius,\n startAngle: startAngle,\n endAngle: endAngle\n });\n }\n var path = \"M \".concat(solt.x, \",\").concat(solt.y, \"\\n A\").concat(cornerRadius, \",\").concat(cornerRadius, \",0,0,\").concat(+(sign < 0), \",\").concat(soct.x, \",\").concat(soct.y, \"\\n A\").concat(outerRadius, \",\").concat(outerRadius, \",0,\").concat(+(outerArcAngle > 180), \",\").concat(+(sign < 0), \",\").concat(eoct.x, \",\").concat(eoct.y, \"\\n A\").concat(cornerRadius, \",\").concat(cornerRadius, \",0,0,\").concat(+(sign < 0), \",\").concat(eolt.x, \",\").concat(eolt.y, \"\\n \");\n if (innerRadius > 0) {\n var _getTangentCircle3 = getTangentCircle({\n cx: cx,\n cy: cy,\n radius: innerRadius,\n angle: startAngle,\n sign: sign,\n isExternal: true,\n cornerRadius: cornerRadius,\n cornerIsExternal: cornerIsExternal\n }),\n sict = _getTangentCircle3.circleTangency,\n silt = _getTangentCircle3.lineTangency,\n sit = _getTangentCircle3.theta;\n var _getTangentCircle4 = getTangentCircle({\n cx: cx,\n cy: cy,\n radius: innerRadius,\n angle: endAngle,\n sign: -sign,\n isExternal: true,\n cornerRadius: cornerRadius,\n cornerIsExternal: cornerIsExternal\n }),\n eict = _getTangentCircle4.circleTangency,\n eilt = _getTangentCircle4.lineTangency,\n eit = _getTangentCircle4.theta;\n var innerArcAngle = cornerIsExternal ? Math.abs(startAngle - endAngle) : Math.abs(startAngle - endAngle) - sit - eit;\n if (innerArcAngle < 0 && cornerRadius === 0) {\n return \"\".concat(path, \"L\").concat(cx, \",\").concat(cy, \"Z\");\n }\n path += \"L\".concat(eilt.x, \",\").concat(eilt.y, \"\\n A\").concat(cornerRadius, \",\").concat(cornerRadius, \",0,0,\").concat(+(sign < 0), \",\").concat(eict.x, \",\").concat(eict.y, \"\\n A\").concat(innerRadius, \",\").concat(innerRadius, \",0,\").concat(+(innerArcAngle > 180), \",\").concat(+(sign > 0), \",\").concat(sict.x, \",\").concat(sict.y, \"\\n A\").concat(cornerRadius, \",\").concat(cornerRadius, \",0,0,\").concat(+(sign < 0), \",\").concat(silt.x, \",\").concat(silt.y, \"Z\");\n } else {\n path += \"L\".concat(cx, \",\").concat(cy, \"Z\");\n }\n return path;\n};\nexport var Sector = function Sector(props) {\n var cx = props.cx,\n cy = props.cy,\n innerRadius = props.innerRadius,\n outerRadius = props.outerRadius,\n cornerRadius = props.cornerRadius,\n forceCornerRadius = props.forceCornerRadius,\n cornerIsExternal = props.cornerIsExternal,\n startAngle = props.startAngle,\n endAngle = props.endAngle,\n className = props.className;\n if (outerRadius < innerRadius || startAngle === endAngle) {\n return null;\n }\n var layerClass = classNames('recharts-sector', className);\n var deltaRadius = outerRadius - innerRadius;\n var cr = getPercentValue(cornerRadius, deltaRadius, 0, true);\n var path;\n if (cr > 0 && Math.abs(startAngle - endAngle) < 360) {\n path = getSectorWithCorner({\n cx: cx,\n cy: cy,\n innerRadius: innerRadius,\n outerRadius: outerRadius,\n cornerRadius: Math.min(cr, deltaRadius / 2),\n forceCornerRadius: forceCornerRadius,\n cornerIsExternal: cornerIsExternal,\n startAngle: startAngle,\n endAngle: endAngle\n });\n } else {\n path = getSectorPath({\n cx: cx,\n cy: cy,\n innerRadius: innerRadius,\n outerRadius: outerRadius,\n startAngle: startAngle,\n endAngle: endAngle\n });\n }\n return /*#__PURE__*/React.createElement(\"path\", _extends({}, filterProps(props, true), {\n className: layerClass,\n d: path,\n role: \"img\"\n }));\n};\nSector.defaultProps = {\n cx: 0,\n cy: 0,\n innerRadius: 0,\n outerRadius: 0,\n startAngle: 0,\n endAngle: 0,\n cornerRadius: 0,\n forceCornerRadius: false,\n cornerIsExternal: false\n};","const e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n const step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log10(step)),\n error = step / Math.pow(10, power),\n factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n let i1, i2, inc;\n if (power < 0) {\n inc = Math.pow(10, -power) / factor;\n i1 = Math.round(start * inc);\n i2 = Math.round(stop * inc);\n if (i1 / inc < start) ++i1;\n if (i2 / inc > stop) --i2;\n inc = -inc;\n } else {\n inc = Math.pow(10, power) * factor;\n i1 = Math.round(start / inc);\n i2 = Math.round(stop / inc);\n if (i1 * inc < start) ++i1;\n if (i2 * inc > stop) --i2;\n }\n if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n if (!(count > 0)) return [];\n if (start === stop) return [start];\n const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n if (!(i2 >= i1)) return [];\n const n = i2 - i1 + 1, ticks = new Array(n);\n if (reverse) {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n } else {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n }\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n","export default function ascending(a, b) {\n return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function descending(a, b) {\n return a == null || b == null ? NaN\n : b < a ? -1\n : b > a ? 1\n : b >= a ? 0\n : NaN;\n}\n","import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n let compare1, compare2, delta;\n\n // If an accessor is specified, promote it to a comparator. In this case we\n // can test whether the search value is (self-) comparable. We can’t do this\n // for a comparator (except for specific, known comparators) because we can’t\n // tell if the comparator is symmetric, and an asymmetric comparator can’t be\n // used to test whether a single value is comparable.\n if (f.length !== 2) {\n compare1 = ascending;\n compare2 = (d, x) => ascending(f(d), x);\n delta = (d, x) => f(d) - x;\n } else {\n compare1 = f === ascending || f === descending ? f : zero;\n compare2 = f;\n delta = f;\n }\n\n function left(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function right(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) <= 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function center(a, x, lo = 0, hi = a.length) {\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction zero() {\n return 0;\n}\n","export default function number(x) {\n return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n","export default function number(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport function transformer() {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nexport default function continuous() {\n return transformer()(identity, identity);\n}\n","export default function constants(x) {\n return function() {\n return x;\n };\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": formatDecimal,\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => formatRounded(x * 100, p),\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain();\n var i0 = 0;\n var i1 = d.length - 1;\n var start = d[i0];\n var stop = d[i1];\n var prestep;\n var step;\n var maxIter = 10;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n \n while (maxIter-- > 0) {\n step = tickIncrement(start, stop, count);\n if (step === prestep) {\n d[i0] = start\n d[i1] = stop\n return domain(d);\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n } else {\n break;\n }\n prestep = step;\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous();\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n","import {linearish} from \"./linear.js\";\nimport number from \"./number.js\";\n\nexport default function identity(domain) {\n var unknown;\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = Array.from(_, number), scale) : domain.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return identity(domain).unknown(unknown);\n };\n\n domain = arguments.length ? Array.from(domain, number) : [0, 1];\n\n return linearish(scale);\n}\n","export default function nice(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format, formatSpecifier} from \"d3-format\";\nimport nice from \"./nice.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformLog(x) {\n return Math.log(x);\n}\n\nfunction transformExp(x) {\n return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : x => Math.pow(base, x);\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), x => Math.log(x) / base);\n}\n\nfunction reflect(f) {\n return (x, k) => -f(-x, k);\n}\n\nexport function loggish(transform) {\n const scale = transform(transformLog, transformExp);\n const domain = scale.domain;\n let base = 10;\n let logs;\n let pows;\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) {\n logs = reflect(logs), pows = reflect(pows);\n transform(transformLogn, transformExpn);\n } else {\n transform(transformLog, transformExp);\n }\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = count => {\n const d = domain();\n let u = d[0];\n let v = d[d.length - 1];\n const r = v < u;\n\n if (r) ([u, v] = [v, u]);\n\n let i = logs(u);\n let j = logs(v);\n let k;\n let t;\n const n = count == null ? 10 : +count;\n let z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.floor(i), j = Math.ceil(j);\n if (u > 0) for (; i <= j; ++i) {\n for (k = 1; k < base; ++k) {\n t = i < 0 ? k / pows(-i) : k * pows(i);\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i <= j; ++i) {\n for (k = base - 1; k >= 1; --k) {\n t = i > 0 ? k / pows(-i) : k * pows(i);\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n if (z.length * 2 < n) z = ticks(u, v, n);\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = (count, specifier) => {\n if (count == null) count = 10;\n if (specifier == null) specifier = base === 10 ? \"s\" : \",\";\n if (typeof specifier !== \"function\") {\n if (!(base % 1) && (specifier = formatSpecifier(specifier)).precision == null) specifier.trim = true;\n specifier = format(specifier);\n }\n if (count === Infinity) return specifier;\n const k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return d => {\n let i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = () => {\n return domain(nice(domain(), {\n floor: x => pows(Math.floor(logs(x))),\n ceil: x => pows(Math.ceil(logs(x)))\n }));\n };\n\n return scale;\n}\n\nexport default function log() {\n const scale = loggish(transformer()).domain([1, 10]);\n scale.copy = () => copy(scale, log()).base(scale.base());\n initRange.apply(scale, arguments);\n return scale;\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformSymlog(c) {\n return function(x) {\n return Math.sign(x) * Math.log1p(Math.abs(x / c));\n };\n}\n\nfunction transformSymexp(c) {\n return function(x) {\n return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n };\n}\n\nexport function symlogish(transform) {\n var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));\n\n scale.constant = function(_) {\n return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;\n };\n\n return linearish(scale);\n}\n\nexport default function symlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, symlog()).constant(scale.constant());\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, identity, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformPow(exponent) {\n return function(x) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n };\n}\n\nfunction transformSqrt(x) {\n return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n return x < 0 ? -x * x : x * x;\n}\n\nexport function powish(transform) {\n var scale = transform(identity, identity),\n exponent = 1;\n\n function rescale() {\n return exponent === 1 ? transform(identity, identity)\n : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n : transform(transformPow(exponent), transformPow(1 / exponent));\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, rescale()) : exponent;\n };\n\n return linearish(scale);\n}\n\nexport default function pow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, pow()).exponent(scale.exponent());\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n\nexport function sqrt() {\n return pow.apply(null, arguments).exponent(0.5);\n}\n","import continuous from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport number from \"./number.js\";\n\nfunction square(x) {\n return Math.sign(x) * x * x;\n}\n\nfunction unsquare(x) {\n return Math.sign(x) * Math.sqrt(Math.abs(x));\n}\n\nexport default function radial() {\n var squared = continuous(),\n range = [0, 1],\n round = false,\n unknown;\n\n function scale(x) {\n var y = unsquare(squared(x));\n return isNaN(y) ? unknown : round ? Math.round(y) : y;\n }\n\n scale.invert = function(y) {\n return squared.invert(square(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (squared.domain(_), scale) : squared.domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? (squared.range((range = Array.from(_, number)).map(square)), scale) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return scale.range(_).round(true);\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, scale) : round;\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (squared.clamp(_), scale) : squared.clamp();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return radial(squared.domain(), range)\n .round(round)\n .clamp(squared.clamp())\n .unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n","export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n","export default function min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n","import ascending from \"./ascending.js\";\nimport permute from \"./permute.js\";\n\nexport default function sort(values, ...F) {\n if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n values = Array.from(values);\n let [f] = F;\n if ((f && f.length !== 2) || F.length > 1) {\n const index = Uint32Array.from(values, (d, i) => i);\n if (F.length > 1) {\n F = F.map(f => values.map(f));\n index.sort((i, j) => {\n for (const f of F) {\n const c = ascendingDefined(f[i], f[j]);\n if (c) return c;\n }\n });\n } else {\n f = values.map(f);\n index.sort((i, j) => ascendingDefined(f[i], f[j]));\n }\n return permute(values, index);\n }\n return values.sort(compareDefined(f));\n}\n\nexport function compareDefined(compare = ascending) {\n if (compare === ascending) return ascendingDefined;\n if (typeof compare !== \"function\") throw new TypeError(\"compare is not a function\");\n return (a, b) => {\n const x = compare(a, b);\n if (x || x === 0) return x;\n return (compare(b, b) === 0) - (compare(a, a) === 0);\n };\n}\n\nexport function ascendingDefined(a, b) {\n return (a == null || !(a >= a)) - (b == null || !(b >= b)) || (a < b ? -1 : a > b ? 1 : 0);\n}\n","import {ascendingDefined, compareDefined} from \"./sort.js\";\n\n// Based on https://github.com/mourner/quickselect\n// ISC license, Copyright 2018 Vladimir Agafonkin.\nexport default function quickselect(array, k, left = 0, right = Infinity, compare) {\n k = Math.floor(k);\n left = Math.floor(Math.max(0, left));\n right = Math.floor(Math.min(array.length - 1, right));\n\n if (!(left <= k && k <= right)) return array;\n\n compare = compare === undefined ? ascendingDefined : compareDefined(compare);\n\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselect(array, k, newLeft, newRight, compare);\n }\n\n const t = array[k];\n let i = left;\n let j = right;\n\n swap(array, left, k);\n if (compare(array[right], t) > 0) swap(array, left, right);\n\n while (i < j) {\n swap(array, i, j), ++i, --j;\n while (compare(array[i], t) < 0) ++i;\n while (compare(array[j], t) > 0) --j;\n }\n\n if (compare(array[left], t) === 0) swap(array, left, j);\n else ++j, swap(array, j, right);\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n\n return array;\n}\n\nfunction swap(array, i, j) {\n const t = array[i];\n array[i] = array[j];\n array[j] = t;\n}\n","import max from \"./max.js\";\nimport maxIndex from \"./maxIndex.js\";\nimport min from \"./min.js\";\nimport minIndex from \"./minIndex.js\";\nimport quickselect from \"./quickselect.js\";\nimport number, {numbers} from \"./number.js\";\nimport {ascendingDefined} from \"./sort.js\";\nimport greatest from \"./greatest.js\";\n\nexport default function quantile(values, p, valueof) {\n values = Float64Array.from(numbers(values, valueof));\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return min(values);\n if (p >= 1) return max(values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = max(quickselect(values, i0).subarray(0, i0 + 1)),\n value1 = min(values.subarray(i0 + 1));\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileSorted(values, p, valueof = number) {\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileIndex(values, p, valueof = number) {\n if (isNaN(p = +p)) return;\n numbers = Float64Array.from(values, (_, i) => number(valueof(values[i], i, values)));\n if (p <= 0) return minIndex(numbers);\n if (p >= 1) return maxIndex(numbers);\n var numbers,\n index = Uint32Array.from(values, (_, i) => i),\n j = numbers.length - 1,\n i = Math.floor(j * p);\n quickselect(index, i, 0, j, (i, j) => ascendingDefined(numbers[i], numbers[j]));\n i = greatest(index.subarray(0, i + 1), (i) => numbers[i]);\n return i >= 0 ? i : -1;\n}\n","import {ascending, bisect, quantileSorted as threshold} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [],\n unknown;\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {linearish} from \"./linear.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1],\n unknown;\n\n function scale(x) {\n return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, x0 = +x0, x1 = +x1, rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = Array.from(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : scale;\n };\n\n scale.thresholds = function() {\n return domain.slice();\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(linearish(scale), arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n unknown,\n n = 1;\n\n function scale(x) {\n return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n","export const durationSecond = 1000;\nexport const durationMinute = durationSecond * 60;\nexport const durationHour = durationMinute * 60;\nexport const durationDay = durationHour * 24;\nexport const durationWeek = durationDay * 7;\nexport const durationMonth = durationDay * 30;\nexport const durationYear = durationDay * 365;\n","const t0 = new Date, t1 = new Date;\n\nexport function timeInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = (date) => {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = (date) => {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = (date) => {\n const d0 = interval(date), d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = (date, step) => {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = (start, stop, step) => {\n const range = [];\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n let previous;\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = (test) => {\n return timeInterval((date) => {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, (date, step) => {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = (start, end) => {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = (step) => {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? (d) => field(d) % step === 0\n : (d) => interval.count(0, d) % step === 0);\n };\n }\n\n return interval;\n}\n","import {timeInterval} from \"./interval.js\";\n\nexport const millisecond = timeInterval(() => {\n // noop\n}, (date, step) => {\n date.setTime(+date + step);\n}, (start, end) => {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = (k) => {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return timeInterval((date) => {\n date.setTime(Math.floor(date / k) * k);\n }, (date, step) => {\n date.setTime(+date + step * k);\n }, (start, end) => {\n return (end - start) / k;\n });\n};\n\nexport const milliseconds = millisecond.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nexport const second = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds());\n}, (date, step) => {\n date.setTime(+date + step * durationSecond);\n}, (start, end) => {\n return (end - start) / durationSecond;\n}, (date) => {\n return date.getUTCSeconds();\n});\n\nexport const seconds = second.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeMinute = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getMinutes();\n});\n\nexport const timeMinutes = timeMinute.range;\n\nexport const utcMinute = timeInterval((date) => {\n date.setUTCSeconds(0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getUTCMinutes();\n});\n\nexport const utcMinutes = utcMinute.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeHour = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getHours();\n});\n\nexport const timeHours = timeHour.range;\n\nexport const utcHour = timeInterval((date) => {\n date.setUTCMinutes(0, 0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getUTCHours();\n});\n\nexport const utcHours = utcHour.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nexport const timeDay = timeInterval(\n date => date.setHours(0, 0, 0, 0),\n (date, step) => date.setDate(date.getDate() + step),\n (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,\n date => date.getDate() - 1\n);\n\nexport const timeDays = timeDay.range;\n\nexport const utcDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return date.getUTCDate() - 1;\n});\n\nexport const utcDays = utcDay.range;\n\nexport const unixDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return Math.floor(date / durationDay);\n});\n\nexport const unixDays = unixDay.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction timeWeekday(i) {\n return timeInterval((date) => {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setDate(date.getDate() + step * 7);\n }, (start, end) => {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport const timeSunday = timeWeekday(0);\nexport const timeMonday = timeWeekday(1);\nexport const timeTuesday = timeWeekday(2);\nexport const timeWednesday = timeWeekday(3);\nexport const timeThursday = timeWeekday(4);\nexport const timeFriday = timeWeekday(5);\nexport const timeSaturday = timeWeekday(6);\n\nexport const timeSundays = timeSunday.range;\nexport const timeMondays = timeMonday.range;\nexport const timeTuesdays = timeTuesday.range;\nexport const timeWednesdays = timeWednesday.range;\nexport const timeThursdays = timeThursday.range;\nexport const timeFridays = timeFriday.range;\nexport const timeSaturdays = timeSaturday.range;\n\nfunction utcWeekday(i) {\n return timeInterval((date) => {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, (start, end) => {\n return (end - start) / durationWeek;\n });\n}\n\nexport const utcSunday = utcWeekday(0);\nexport const utcMonday = utcWeekday(1);\nexport const utcTuesday = utcWeekday(2);\nexport const utcWednesday = utcWeekday(3);\nexport const utcThursday = utcWeekday(4);\nexport const utcFriday = utcWeekday(5);\nexport const utcSaturday = utcWeekday(6);\n\nexport const utcSundays = utcSunday.range;\nexport const utcMondays = utcMonday.range;\nexport const utcTuesdays = utcTuesday.range;\nexport const utcWednesdays = utcWednesday.range;\nexport const utcThursdays = utcThursday.range;\nexport const utcFridays = utcFriday.range;\nexport const utcSaturdays = utcSaturday.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeMonth = timeInterval((date) => {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setMonth(date.getMonth() + step);\n}, (start, end) => {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, (date) => {\n return date.getMonth();\n});\n\nexport const timeMonths = timeMonth.range;\n\nexport const utcMonth = timeInterval((date) => {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, (start, end) => {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, (date) => {\n return date.getUTCMonth();\n});\n\nexport const utcMonths = utcMonth.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeYear = timeInterval((date) => {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setFullYear(date.getFullYear() + step);\n}, (start, end) => {\n return end.getFullYear() - start.getFullYear();\n}, (date) => {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\ntimeYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport const timeYears = timeYear.range;\n\nexport const utcYear = timeInterval((date) => {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, (start, end) => {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, (date) => {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport const utcYears = utcYear.range;\n","import {bisector, tickStep} from \"d3-array\";\nimport {durationDay, durationHour, durationMinute, durationMonth, durationSecond, durationWeek, durationYear} from \"./duration.js\";\nimport {millisecond} from \"./millisecond.js\";\nimport {second} from \"./second.js\";\nimport {timeMinute, utcMinute} from \"./minute.js\";\nimport {timeHour, utcHour} from \"./hour.js\";\nimport {timeDay, unixDay} from \"./day.js\";\nimport {timeSunday, utcSunday} from \"./week.js\";\nimport {timeMonth, utcMonth} from \"./month.js\";\nimport {timeYear, utcYear} from \"./year.js\";\n\nfunction ticker(year, month, week, day, hour, minute) {\n\n const tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function ticks(start, stop, count) {\n const reverse = stop < start;\n if (reverse) [start, stop] = [stop, start];\n const interval = count && typeof count.range === \"function\" ? count : tickInterval(start, stop, count);\n const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop\n return reverse ? ticks.reverse() : ticks;\n }\n\n function tickInterval(start, stop, count) {\n const target = Math.abs(stop - start) / count;\n const i = bisector(([,, step]) => step).right(tickIntervals, target);\n if (i === tickIntervals.length) return year.every(tickStep(start / durationYear, stop / durationYear, count));\n if (i === 0) return millisecond.every(Math.max(tickStep(start, stop, count), 1));\n const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n return t.every(step);\n }\n\n return [ticks, tickInterval];\n}\n\nconst [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcSunday, unixDay, utcHour, utcMinute);\nconst [timeTicks, timeTickInterval] = ticker(timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute);\n\nexport {utcTicks, utcTickInterval, timeTicks, timeTickInterval};\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"g\": formatYearISO,\n \"G\": formatFullYearISO,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"q\": formatQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"g\": formatUTCYearISO,\n \"G\": formatUTCFullYearISO,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"q\": formatUTCQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"g\": parseYear,\n \"G\": parseFullYear,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"q\": parseQuarter,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, Z) {\n return function(string) {\n var d = newDate(1900, undefined, 1),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n // If this is utcParse, never use the local timezone.\n if (Z && !(\"Z\" in d)) d.Z = 0;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return localDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatQuarter(d) {\n return 1 + ~~(d.getMonth() / 3);\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n function formatUTCQuarter(d) {\n return 1 + ~~(d.getUTCMonth() / 3);\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", false);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier += \"\", true);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n var day = d.getDay();\n return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n d = dISO(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n d = dISO(d);\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n var day = d.getUTCDay();\n return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n d = UTCdISO(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n d = UTCdISO(d);\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeTicks, timeTickInterval} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport nice from \"./nice.js\";\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {\n var scale = continuous(),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval) {\n var d = domain();\n if (!interval || typeof interval.range !== \"function\") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);\n return interval ? domain(nice(d, interval)) : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));\n };\n\n return scale;\n}\n\nexport default function time() {\n return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n","import {utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcTicks, utcTickInterval} from \"d3-time\";\nimport {utcFormat} from \"d3-time-format\";\nimport {calendar} from \"./time.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function utcTime() {\n return initRange.apply(calendar(utcTicks, utcTickInterval, utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\n}\n","import {interpolate, interpolateRound} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n var x0 = 0,\n x1 = 1,\n t0,\n t1,\n k10,\n transform,\n interpolator = identity,\n clamp = false,\n unknown;\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n function range(interpolate) {\n return function(_) {\n var r0, r1;\n return arguments.length ? ([r0, r1] = _, interpolator = interpolate(r0, r1), scale) : [interpolator(0), interpolator(1)];\n };\n }\n\n scale.range = range(interpolate);\n\n scale.rangeRound = range(interpolateRound);\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n return scale;\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .interpolator(source.interpolator())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport default function sequential() {\n var scale = linearish(transformer()(identity));\n\n scale.copy = function() {\n return copy(scale, sequential());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialLog() {\n var scale = loggish(transformer()).domain([1, 10]);\n\n scale.copy = function() {\n return copy(scale, sequentialLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSymlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialPow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSqrt() {\n return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n","import {ascending, bisect, quantile} from \"d3-array\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\n\nexport default function sequentialQuantile() {\n var domain = [],\n interpolator = identity;\n\n function scale(x) {\n if (x != null && !isNaN(x = +x)) return interpolator((bisect(domain, x, 1) - 1) / (domain.length - 1));\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return scale;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.range = function() {\n return domain.map((d, i) => interpolator(i / (domain.length - 1)));\n };\n\n scale.quantiles = function(n) {\n return Array.from({length: n + 1}, (_, i) => quantile(domain, i / n));\n };\n\n scale.copy = function() {\n return sequentialQuantile(interpolator).domain(domain);\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n","import {interpolate, interpolateRound, piecewise} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {copy} from \"./sequential.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n var x0 = 0,\n x1 = 0.5,\n x2 = 1,\n s = 1,\n t0,\n t1,\n t2,\n k10,\n k21,\n interpolator = identity,\n transform,\n clamp = false,\n unknown;\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (s * x < s * t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1, x2] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), t2 = transform(x2 = +x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1, scale) : [x0, x1, x2];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n function range(interpolate) {\n return function(_) {\n var r0, r1, r2;\n return arguments.length ? ([r0, r1, r2] = _, interpolator = piecewise(interpolate, [r0, r1, r2]), scale) : [interpolator(0), interpolator(0.5), interpolator(1)];\n };\n }\n\n scale.range = range(interpolate);\n\n scale.rangeRound = range(interpolateRound);\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1;\n return scale;\n };\n}\n\nexport default function diverging() {\n var scale = linearish(transformer()(identity));\n\n scale.copy = function() {\n return copy(scale, diverging());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingLog() {\n var scale = loggish(transformer()).domain([0.1, 1, 10]);\n\n scale.copy = function() {\n return copy(scale, divergingLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSymlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, divergingSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingPow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, divergingPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSqrt() {\n return divergingPow.apply(null, arguments).exponent(0.5);\n}\n","import {default as value} from \"./value.js\";\n\nexport default function piecewise(interpolate, values) {\n if (values === undefined) values = interpolate, interpolate = value;\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n s0 = s1, s1 = series[order[i]];\n for (j = 0; j < m; ++j) {\n s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n }\n }\n}\n","export default function(series) {\n var n = series.length, o = new Array(n);\n while (--n >= 0) o[n] = n;\n return o;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport offsetNone from \"./offset/none.js\";\nimport orderNone from \"./order/none.js\";\n\nfunction stackValue(d, key) {\n return d[key];\n}\n\nfunction stackSeries(key) {\n const series = [];\n series.key = key;\n return series;\n}\n\nexport default function() {\n var keys = constant([]),\n order = orderNone,\n offset = offsetNone,\n value = stackValue;\n\n function stack(data) {\n var sz = Array.from(keys.apply(this, arguments), stackSeries),\n i, n = sz.length, j = -1,\n oz;\n\n for (const d of data) {\n for (i = 0, ++j; i < n; ++i) {\n (sz[i][j] = [0, +value(d, sz[i].key, j, data)]).data = d;\n }\n }\n\n for (i = 0, oz = array(order(sz)); i < n; ++i) {\n sz[oz[i]].index = i;\n }\n\n offset(sz, oz);\n return sz;\n }\n\n stack.keys = function(_) {\n return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant(Array.from(_)), stack) : keys;\n };\n\n stack.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), stack) : value;\n };\n\n stack.order = function(_) {\n return arguments.length ? (order = _ == null ? orderNone : typeof _ === \"function\" ? _ : constant(Array.from(_)), stack) : order;\n };\n\n stack.offset = function(_) {\n return arguments.length ? (offset = _ == null ? offsetNone : _, stack) : offset;\n };\n\n return stack;\n}\n","function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nvar identity = function identity(i) {\n return i;\n};\n\nexport var PLACE_HOLDER = {\n '@@functional/placeholder': true\n};\n\nvar isPlaceHolder = function isPlaceHolder(val) {\n return val === PLACE_HOLDER;\n};\n\nvar curry0 = function curry0(fn) {\n return function _curried() {\n if (arguments.length === 0 || arguments.length === 1 && isPlaceHolder(arguments.length <= 0 ? undefined : arguments[0])) {\n return _curried;\n }\n\n return fn.apply(void 0, arguments);\n };\n};\n\nvar curryN = function curryN(n, fn) {\n if (n === 1) {\n return fn;\n }\n\n return curry0(function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var argsLength = args.filter(function (arg) {\n return arg !== PLACE_HOLDER;\n }).length;\n\n if (argsLength >= n) {\n return fn.apply(void 0, args);\n }\n\n return curryN(n - argsLength, curry0(function () {\n for (var _len2 = arguments.length, restArgs = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n restArgs[_key2] = arguments[_key2];\n }\n\n var newArgs = args.map(function (arg) {\n return isPlaceHolder(arg) ? restArgs.shift() : arg;\n });\n return fn.apply(void 0, _toConsumableArray(newArgs).concat(restArgs));\n }));\n });\n};\n\nexport var curry = function curry(fn) {\n return curryN(fn.length, fn);\n};\nexport var range = function range(begin, end) {\n var arr = [];\n\n for (var i = begin; i < end; ++i) {\n arr[i - begin] = i;\n }\n\n return arr;\n};\nexport var map = curry(function (fn, arr) {\n if (Array.isArray(arr)) {\n return arr.map(fn);\n }\n\n return Object.keys(arr).map(function (key) {\n return arr[key];\n }).map(fn);\n});\nexport var compose = function compose() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n if (!args.length) {\n return identity;\n }\n\n var fns = args.reverse(); // first function can receive multiply arguments\n\n var firstFn = fns[0];\n var tailsFn = fns.slice(1);\n return function () {\n return tailsFn.reduce(function (res, fn) {\n return fn(res);\n }, firstFn.apply(void 0, arguments));\n };\n};\nexport var reverse = function reverse(arr) {\n if (Array.isArray(arr)) {\n return arr.reverse();\n } // can be string\n\n\n return arr.split('').reverse.join('');\n};\nexport var memoize = function memoize(fn) {\n var lastArgs = null;\n var lastResult = null;\n return function () {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n if (lastArgs && args.every(function (val, i) {\n return val === lastArgs[i];\n })) {\n return lastResult;\n }\n\n lastArgs = args;\n lastResult = fn.apply(void 0, args);\n return lastResult;\n };\n};","/**\n * @fileOverview 一些公用的运算方法\n * @author xile611\n * @date 2015-09-17\n */\nimport Decimal from 'decimal.js-light';\nimport { curry } from './utils';\n/**\n * 获取数值的位数\n * 其中绝对值属于区间[0.1, 1), 得到的值为0\n * 绝对值属于区间[0.01, 0.1),得到的位数为 -1\n * 绝对值属于区间[0.001, 0.01),得到的位数为 -2\n *\n * @param {Number} value 数值\n * @return {Integer} 位数\n */\n\nfunction getDigitCount(value) {\n var result;\n\n if (value === 0) {\n result = 1;\n } else {\n result = Math.floor(new Decimal(value).abs().log(10).toNumber()) + 1;\n }\n\n return result;\n}\n/**\n * 按照固定的步长获取[start, end)这个区间的数据\n * 并且需要处理js计算精度的问题\n *\n * @param {Decimal} start 起点\n * @param {Decimal} end 终点,不包含该值\n * @param {Decimal} step 步长\n * @return {Array} 若干数值\n */\n\n\nfunction rangeStep(start, end, step) {\n var num = new Decimal(start);\n var i = 0;\n var result = []; // magic number to prevent infinite loop\n\n while (num.lt(end) && i < 100000) {\n result.push(num.toNumber());\n num = num.add(step);\n i++;\n }\n\n return result;\n}\n/**\n * 对数值进行线性插值\n *\n * @param {Number} a 定义域的极点\n * @param {Number} b 定义域的极点\n * @param {Number} t [0, 1]内的某个值\n * @return {Number} 定义域内的某个值\n */\n\n\nvar interpolateNumber = curry(function (a, b, t) {\n var newA = +a;\n var newB = +b;\n return newA + t * (newB - newA);\n});\n/**\n * 线性插值的逆运算\n *\n * @param {Number} a 定义域的极点\n * @param {Number} b 定义域的极点\n * @param {Number} x 可以认为是插值后的一个输出值\n * @return {Number} 当x在 a ~ b这个范围内时,返回值属于[0, 1]\n */\n\nvar uninterpolateNumber = curry(function (a, b, x) {\n var diff = b - +a;\n diff = diff || Infinity;\n return (x - a) / diff;\n});\n/**\n * 线性插值的逆运算,并且有截断的操作\n *\n * @param {Number} a 定义域的极点\n * @param {Number} b 定义域的极点\n * @param {Number} x 可以认为是插值后的一个输出值\n * @return {Number} 当x在 a ~ b这个区间内时,返回值属于[0, 1],\n * 当x不在 a ~ b这个区间时,会截断到 a ~ b 这个区间\n */\n\nvar uninterpolateTruncation = curry(function (a, b, x) {\n var diff = b - +a;\n diff = diff || Infinity;\n return Math.max(0, Math.min(1, (x - a) / diff));\n});\nexport default {\n rangeStep: rangeStep,\n getDigitCount: getDigitCount,\n interpolateNumber: interpolateNumber,\n uninterpolateNumber: uninterpolateNumber,\n uninterpolateTruncation: uninterpolateTruncation\n};","function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n/**\n * @fileOverview calculate tick values of scale\n * @author xile611, arcthur\n * @date 2015-09-17\n */\nimport Decimal from 'decimal.js-light';\nimport { compose, range, memoize, map, reverse } from './util/utils';\nimport Arithmetic from './util/arithmetic';\n/**\n * Calculate a interval of a minimum value and a maximum value\n *\n * @param {Number} min The minimum value\n * @param {Number} max The maximum value\n * @return {Array} An interval\n */\n\nfunction getValidInterval(_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n min = _ref2[0],\n max = _ref2[1];\n\n var validMin = min,\n validMax = max; // exchange\n\n if (min > max) {\n validMin = max;\n validMax = min;\n }\n\n return [validMin, validMax];\n}\n/**\n * Calculate the step which is easy to understand between ticks, like 10, 20, 25\n *\n * @param {Decimal} roughStep The rough step calculated by deviding the\n * difference by the tickCount\n * @param {Boolean} allowDecimals Allow the ticks to be decimals or not\n * @param {Integer} correctionFactor A correction factor\n * @return {Decimal} The step which is easy to understand between two ticks\n */\n\n\nfunction getFormatStep(roughStep, allowDecimals, correctionFactor) {\n if (roughStep.lte(0)) {\n return new Decimal(0);\n }\n\n var digitCount = Arithmetic.getDigitCount(roughStep.toNumber()); // The ratio between the rough step and the smallest number which has a bigger\n // order of magnitudes than the rough step\n\n var digitCountValue = new Decimal(10).pow(digitCount);\n var stepRatio = roughStep.div(digitCountValue); // When an integer and a float multiplied, the accuracy of result may be wrong\n\n var stepRatioScale = digitCount !== 1 ? 0.05 : 0.1;\n var amendStepRatio = new Decimal(Math.ceil(stepRatio.div(stepRatioScale).toNumber())).add(correctionFactor).mul(stepRatioScale);\n var formatStep = amendStepRatio.mul(digitCountValue);\n return allowDecimals ? formatStep : new Decimal(Math.ceil(formatStep));\n}\n/**\n * calculate the ticks when the minimum value equals to the maximum value\n *\n * @param {Number} value The minimum valuue which is also the maximum value\n * @param {Integer} tickCount The count of ticks\n * @param {Boolean} allowDecimals Allow the ticks to be decimals or not\n * @return {Array} ticks\n */\n\n\nfunction getTickOfSingleValue(value, tickCount, allowDecimals) {\n var step = 1; // calculate the middle value of ticks\n\n var middle = new Decimal(value);\n\n if (!middle.isint() && allowDecimals) {\n var absVal = Math.abs(value);\n\n if (absVal < 1) {\n // The step should be a float number when the difference is smaller than 1\n step = new Decimal(10).pow(Arithmetic.getDigitCount(value) - 1);\n middle = new Decimal(Math.floor(middle.div(step).toNumber())).mul(step);\n } else if (absVal > 1) {\n // Return the maximum integer which is smaller than 'value' when 'value' is greater than 1\n middle = new Decimal(Math.floor(value));\n }\n } else if (value === 0) {\n middle = new Decimal(Math.floor((tickCount - 1) / 2));\n } else if (!allowDecimals) {\n middle = new Decimal(Math.floor(value));\n }\n\n var middleIndex = Math.floor((tickCount - 1) / 2);\n var fn = compose(map(function (n) {\n return middle.add(new Decimal(n - middleIndex).mul(step)).toNumber();\n }), range);\n return fn(0, tickCount);\n}\n/**\n * Calculate the step\n *\n * @param {Number} min The minimum value of an interval\n * @param {Number} max The maximum value of an interval\n * @param {Integer} tickCount The count of ticks\n * @param {Boolean} allowDecimals Allow the ticks to be decimals or not\n * @param {Number} correctionFactor A correction factor\n * @return {Object} The step, minimum value of ticks, maximum value of ticks\n */\n\n\nfunction calculateStep(min, max, tickCount, allowDecimals) {\n var correctionFactor = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n\n // dirty hack (for recharts' test)\n if (!Number.isFinite((max - min) / (tickCount - 1))) {\n return {\n step: new Decimal(0),\n tickMin: new Decimal(0),\n tickMax: new Decimal(0)\n };\n } // The step which is easy to understand between two ticks\n\n\n var step = getFormatStep(new Decimal(max).sub(min).div(tickCount - 1), allowDecimals, correctionFactor); // A medial value of ticks\n\n var middle; // When 0 is inside the interval, 0 should be a tick\n\n if (min <= 0 && max >= 0) {\n middle = new Decimal(0);\n } else {\n // calculate the middle value\n middle = new Decimal(min).add(max).div(2); // minus modulo value\n\n middle = middle.sub(new Decimal(middle).mod(step));\n }\n\n var belowCount = Math.ceil(middle.sub(min).div(step).toNumber());\n var upCount = Math.ceil(new Decimal(max).sub(middle).div(step).toNumber());\n var scaleCount = belowCount + upCount + 1;\n\n if (scaleCount > tickCount) {\n // When more ticks need to cover the interval, step should be bigger.\n return calculateStep(min, max, tickCount, allowDecimals, correctionFactor + 1);\n }\n\n if (scaleCount < tickCount) {\n // When less ticks can cover the interval, we should add some additional ticks\n upCount = max > 0 ? upCount + (tickCount - scaleCount) : upCount;\n belowCount = max > 0 ? belowCount : belowCount + (tickCount - scaleCount);\n }\n\n return {\n step: step,\n tickMin: middle.sub(new Decimal(belowCount).mul(step)),\n tickMax: middle.add(new Decimal(upCount).mul(step))\n };\n}\n/**\n * Calculate the ticks of an interval, the count of ticks will be guraranteed\n *\n * @param {Number} min, max min: The minimum value, max: The maximum value\n * @param {Integer} tickCount The count of ticks\n * @param {Boolean} allowDecimals Allow the ticks to be decimals or not\n * @return {Array} ticks\n */\n\n\nfunction getNiceTickValuesFn(_ref3) {\n var _ref4 = _slicedToArray(_ref3, 2),\n min = _ref4[0],\n max = _ref4[1];\n\n var tickCount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 6;\n var allowDecimals = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n // More than two ticks should be return\n var count = Math.max(tickCount, 2);\n\n var _getValidInterval = getValidInterval([min, max]),\n _getValidInterval2 = _slicedToArray(_getValidInterval, 2),\n cormin = _getValidInterval2[0],\n cormax = _getValidInterval2[1];\n\n if (cormin === -Infinity || cormax === Infinity) {\n var _values = cormax === Infinity ? [cormin].concat(_toConsumableArray(range(0, tickCount - 1).map(function () {\n return Infinity;\n }))) : [].concat(_toConsumableArray(range(0, tickCount - 1).map(function () {\n return -Infinity;\n })), [cormax]);\n\n return min > max ? reverse(_values) : _values;\n }\n\n if (cormin === cormax) {\n return getTickOfSingleValue(cormin, tickCount, allowDecimals);\n } // Get the step between two ticks\n\n\n var _calculateStep = calculateStep(cormin, cormax, count, allowDecimals),\n step = _calculateStep.step,\n tickMin = _calculateStep.tickMin,\n tickMax = _calculateStep.tickMax;\n\n var values = Arithmetic.rangeStep(tickMin, tickMax.add(new Decimal(0.1).mul(step)), step);\n return min > max ? reverse(values) : values;\n}\n/**\n * Calculate the ticks of an interval, the count of ticks won't be guraranteed\n *\n * @param {Number} min, max min: The minimum value, max: The maximum value\n * @param {Integer} tickCount The count of ticks\n * @param {Boolean} allowDecimals Allow the ticks to be decimals or not\n * @return {Array} ticks\n */\n\n\nfunction getTickValuesFn(_ref5) {\n var _ref6 = _slicedToArray(_ref5, 2),\n min = _ref6[0],\n max = _ref6[1];\n\n var tickCount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 6;\n var allowDecimals = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n // More than two ticks should be return\n var count = Math.max(tickCount, 2);\n\n var _getValidInterval3 = getValidInterval([min, max]),\n _getValidInterval4 = _slicedToArray(_getValidInterval3, 2),\n cormin = _getValidInterval4[0],\n cormax = _getValidInterval4[1];\n\n if (cormin === -Infinity || cormax === Infinity) {\n return [min, max];\n }\n\n if (cormin === cormax) {\n return getTickOfSingleValue(cormin, tickCount, allowDecimals);\n }\n\n var step = getFormatStep(new Decimal(cormax).sub(cormin).div(count - 1), allowDecimals, 0);\n var fn = compose(map(function (n) {\n return new Decimal(cormin).add(new Decimal(n).mul(step)).toNumber();\n }), range);\n var values = fn(0, count).filter(function (entry) {\n return entry >= cormin && entry <= cormax;\n });\n return min > max ? reverse(values) : values;\n}\n/**\n * Calculate the ticks of an interval, the count of ticks won't be guraranteed,\n * but the domain will be guaranteed\n *\n * @param {Number} min, max min: The minimum value, max: The maximum value\n * @param {Integer} tickCount The count of ticks\n * @param {Boolean} allowDecimals Allow the ticks to be decimals or not\n * @return {Array} ticks\n */\n\n\nfunction getTickValuesFixedDomainFn(_ref7, tickCount) {\n var _ref8 = _slicedToArray(_ref7, 2),\n min = _ref8[0],\n max = _ref8[1];\n\n var allowDecimals = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n // More than two ticks should be return\n var _getValidInterval5 = getValidInterval([min, max]),\n _getValidInterval6 = _slicedToArray(_getValidInterval5, 2),\n cormin = _getValidInterval6[0],\n cormax = _getValidInterval6[1];\n\n if (cormin === -Infinity || cormax === Infinity) {\n return [min, max];\n }\n\n if (cormin === cormax) {\n return [cormin];\n }\n\n var count = Math.max(tickCount, 2);\n var step = getFormatStep(new Decimal(cormax).sub(cormin).div(count - 1), allowDecimals, 0);\n var values = [].concat(_toConsumableArray(Arithmetic.rangeStep(new Decimal(cormin), new Decimal(cormax).sub(new Decimal(0.99).mul(step)), step)), [cormax]);\n return min > max ? reverse(values) : values;\n}\n\nexport var getNiceTickValues = memoize(getNiceTickValuesFn);\nexport var getTickValues = memoize(getTickValuesFn);\nexport var getTickValuesFixedDomain = memoize(getTickValuesFixedDomainFn);","var _excluded = [\"offset\", \"layout\", \"width\", \"dataKey\", \"data\", \"dataPointFormatter\", \"xAxis\", \"yAxis\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i[\"return\"] && (_r = _i[\"return\"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n/**\n * @fileOverview Render a group of error bar\n */\nimport React from 'react';\nimport { Layer } from '../container/Layer';\nimport { filterProps } from '../util/ReactUtils';\nexport function ErrorBar(props) {\n var offset = props.offset,\n layout = props.layout,\n width = props.width,\n dataKey = props.dataKey,\n data = props.data,\n dataPointFormatter = props.dataPointFormatter,\n xAxis = props.xAxis,\n yAxis = props.yAxis,\n others = _objectWithoutProperties(props, _excluded);\n var svgProps = filterProps(others);\n var errorBars = data.map(function (entry, i) {\n var _dataPointFormatter = dataPointFormatter(entry, dataKey),\n x = _dataPointFormatter.x,\n y = _dataPointFormatter.y,\n value = _dataPointFormatter.value,\n errorVal = _dataPointFormatter.errorVal;\n if (!errorVal) {\n return null;\n }\n var lineCoordinates = [];\n var lowBound, highBound;\n if (Array.isArray(errorVal)) {\n var _errorVal = _slicedToArray(errorVal, 2);\n lowBound = _errorVal[0];\n highBound = _errorVal[1];\n } else {\n lowBound = highBound = errorVal;\n }\n if (layout === 'vertical') {\n // error bar for horizontal charts, the y is fixed, x is a range value\n var scale = xAxis.scale;\n var yMid = y + offset;\n var yMin = yMid + width;\n var yMax = yMid - width;\n var xMin = scale(value - lowBound);\n var xMax = scale(value + highBound);\n\n // the right line of |--|\n lineCoordinates.push({\n x1: xMax,\n y1: yMin,\n x2: xMax,\n y2: yMax\n });\n // the middle line of |--|\n lineCoordinates.push({\n x1: xMin,\n y1: yMid,\n x2: xMax,\n y2: yMid\n });\n // the left line of |--|\n lineCoordinates.push({\n x1: xMin,\n y1: yMin,\n x2: xMin,\n y2: yMax\n });\n } else if (layout === 'horizontal') {\n // error bar for horizontal charts, the x is fixed, y is a range value\n var _scale = yAxis.scale;\n var xMid = x + offset;\n var _xMin = xMid - width;\n var _xMax = xMid + width;\n var _yMin = _scale(value - lowBound);\n var _yMax = _scale(value + highBound);\n\n // the top line\n lineCoordinates.push({\n x1: _xMin,\n y1: _yMax,\n x2: _xMax,\n y2: _yMax\n });\n // the middle line\n lineCoordinates.push({\n x1: xMid,\n y1: _yMin,\n x2: xMid,\n y2: _yMax\n });\n // the bottom line\n lineCoordinates.push({\n x1: _xMin,\n y1: _yMin,\n x2: _xMax,\n y2: _yMin\n });\n }\n return (\n /*#__PURE__*/\n // eslint-disable-next-line react/no-array-index-key\n React.createElement(Layer, _extends({\n className: \"recharts-errorBar\",\n key: \"bar-\".concat(i)\n }, svgProps), lineCoordinates.map(function (coordinates, index) {\n return (\n /*#__PURE__*/\n // eslint-disable-next-line react/no-array-index-key\n React.createElement(\"line\", _extends({}, coordinates, {\n key: \"line-\".concat(index)\n }))\n );\n }))\n );\n });\n return /*#__PURE__*/React.createElement(Layer, {\n className: \"recharts-errorBars\"\n }, errorBars);\n}\nErrorBar.defaultProps = {\n stroke: 'black',\n strokeWidth: 1.5,\n width: 5,\n offset: 0,\n layout: 'horizontal'\n};\nErrorBar.displayName = 'ErrorBar';","import _isEqual from \"lodash/isEqual\";\nimport _sortBy from \"lodash/sortBy\";\nimport _upperFirst from \"lodash/upperFirst\";\nimport _isString from \"lodash/isString\";\nimport _isNaN from \"lodash/isNaN\";\nimport _isArray from \"lodash/isArray\";\nimport _max from \"lodash/max\";\nimport _min from \"lodash/min\";\nimport _flatMap from \"lodash/flatMap\";\nimport _isFunction from \"lodash/isFunction\";\nimport _get from \"lodash/get\";\nimport _isNil from \"lodash/isNil\";\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport * as d3Scales from 'victory-vendor/d3-scale';\nimport { stack as shapeStack, stackOffsetExpand, stackOffsetNone, stackOffsetSilhouette, stackOffsetWiggle, stackOrderNone } from 'victory-vendor/d3-shape';\nimport { getNiceTickValues, getTickValuesFixedDomain } from 'recharts-scale';\nimport { ErrorBar } from '../cartesian/ErrorBar';\nimport { Legend } from '../component/Legend';\nimport { findEntryInArray, getPercentValue, isNumber, isNumOrStr, mathSign, uniqueId } from './DataUtils';\nimport { filterProps, findAllByType, findChildByType, getDisplayName } from './ReactUtils';\n// TODO: Cause of circular dependency. Needs refactor.\n// import { RadiusAxisProps, AngleAxisProps } from '../polar/types';\nexport function getValueByDataKey(obj, dataKey, defaultValue) {\n if (_isNil(obj) || _isNil(dataKey)) {\n return defaultValue;\n }\n if (isNumOrStr(dataKey)) {\n return _get(obj, dataKey, defaultValue);\n }\n if (_isFunction(dataKey)) {\n return dataKey(obj);\n }\n return defaultValue;\n}\n/**\n * Get domain of data by key\n * @param {Array} data The data displayed in the chart\n * @param {String} key The unique key of a group of data\n * @param {String} type The type of axis\n * @param {Boolean} filterNil Whether or not filter nil values\n * @return {Array} Domain of data\n */\nexport function getDomainOfDataByKey(data, key, type, filterNil) {\n var flattenData = _flatMap(data, function (entry) {\n return getValueByDataKey(entry, key);\n });\n if (type === 'number') {\n var domain = flattenData.filter(function (entry) {\n return isNumber(entry) || parseFloat(entry);\n });\n return domain.length ? [_min(domain), _max(domain)] : [Infinity, -Infinity];\n }\n var validateData = filterNil ? flattenData.filter(function (entry) {\n return !_isNil(entry);\n }) : flattenData;\n\n // 支持Date类型的x轴\n return validateData.map(function (entry) {\n return isNumOrStr(entry) || entry instanceof Date ? entry : '';\n });\n}\nexport var calculateActiveTickIndex = function calculateActiveTickIndex(coordinate) {\n var _ticks$length;\n var ticks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var unsortedTicks = arguments.length > 2 ? arguments[2] : undefined;\n var axis = arguments.length > 3 ? arguments[3] : undefined;\n var index = -1;\n var len = (_ticks$length = ticks === null || ticks === void 0 ? void 0 : ticks.length) !== null && _ticks$length !== void 0 ? _ticks$length : 0;\n\n // if there are 1 or less ticks ticks then the active tick is at index 0\n if (len <= 1) {\n return 0;\n }\n if (axis && axis.axisType === 'angleAxis' && Math.abs(Math.abs(axis.range[1] - axis.range[0]) - 360) <= 1e-6) {\n var range = axis.range;\n // ticks are distributed in a circle\n for (var i = 0; i < len; i++) {\n var before = i > 0 ? unsortedTicks[i - 1].coordinate : unsortedTicks[len - 1].coordinate;\n var cur = unsortedTicks[i].coordinate;\n var after = i >= len - 1 ? unsortedTicks[0].coordinate : unsortedTicks[i + 1].coordinate;\n var sameDirectionCoord = void 0;\n if (mathSign(cur - before) !== mathSign(after - cur)) {\n var diffInterval = [];\n if (mathSign(after - cur) === mathSign(range[1] - range[0])) {\n sameDirectionCoord = after;\n var curInRange = cur + range[1] - range[0];\n diffInterval[0] = Math.min(curInRange, (curInRange + before) / 2);\n diffInterval[1] = Math.max(curInRange, (curInRange + before) / 2);\n } else {\n sameDirectionCoord = before;\n var afterInRange = after + range[1] - range[0];\n diffInterval[0] = Math.min(cur, (afterInRange + cur) / 2);\n diffInterval[1] = Math.max(cur, (afterInRange + cur) / 2);\n }\n var sameInterval = [Math.min(cur, (sameDirectionCoord + cur) / 2), Math.max(cur, (sameDirectionCoord + cur) / 2)];\n if (coordinate > sameInterval[0] && coordinate <= sameInterval[1] || coordinate >= diffInterval[0] && coordinate <= diffInterval[1]) {\n index = unsortedTicks[i].index;\n break;\n }\n } else {\n var min = Math.min(before, after);\n var max = Math.max(before, after);\n if (coordinate > (min + cur) / 2 && coordinate <= (max + cur) / 2) {\n index = unsortedTicks[i].index;\n break;\n }\n }\n }\n } else {\n // ticks are distributed in a single direction\n for (var _i = 0; _i < len; _i++) {\n if (_i === 0 && coordinate <= (ticks[_i].coordinate + ticks[_i + 1].coordinate) / 2 || _i > 0 && _i < len - 1 && coordinate > (ticks[_i].coordinate + ticks[_i - 1].coordinate) / 2 && coordinate <= (ticks[_i].coordinate + ticks[_i + 1].coordinate) / 2 || _i === len - 1 && coordinate > (ticks[_i].coordinate + ticks[_i - 1].coordinate) / 2) {\n index = ticks[_i].index;\n break;\n }\n }\n }\n return index;\n};\n\n/**\n * Get the main color of each graphic item\n * @param {ReactElement} item A graphic item\n * @return {String} Color\n */\nexport var getMainColorOfGraphicItem = function getMainColorOfGraphicItem(item) {\n var _ref = item,\n displayName = _ref.type.displayName; // TODO: check if displayName is valid.\n var _item$props = item.props,\n stroke = _item$props.stroke,\n fill = _item$props.fill;\n var result;\n switch (displayName) {\n case 'Line':\n result = stroke;\n break;\n case 'Area':\n case 'Radar':\n result = stroke && stroke !== 'none' ? stroke : fill;\n break;\n default:\n result = fill;\n break;\n }\n return result;\n};\nexport var getLegendProps = function getLegendProps(_ref2) {\n var children = _ref2.children,\n formattedGraphicalItems = _ref2.formattedGraphicalItems,\n legendWidth = _ref2.legendWidth,\n legendContent = _ref2.legendContent;\n var legendItem = findChildByType(children, Legend);\n if (!legendItem) {\n return null;\n }\n var legendData;\n if (legendItem.props && legendItem.props.payload) {\n legendData = legendItem.props && legendItem.props.payload;\n } else if (legendContent === 'children') {\n legendData = (formattedGraphicalItems || []).reduce(function (result, _ref3) {\n var item = _ref3.item,\n props = _ref3.props;\n var data = props.sectors || props.data || [];\n return result.concat(data.map(function (entry) {\n return {\n type: legendItem.props.iconType || item.props.legendType,\n value: entry.name,\n color: entry.fill,\n payload: entry\n };\n }));\n }, []);\n } else {\n legendData = (formattedGraphicalItems || []).map(function (_ref4) {\n var item = _ref4.item;\n var _item$props2 = item.props,\n dataKey = _item$props2.dataKey,\n name = _item$props2.name,\n legendType = _item$props2.legendType,\n hide = _item$props2.hide;\n return {\n inactive: hide,\n dataKey: dataKey,\n type: legendItem.props.iconType || legendType || 'square',\n color: getMainColorOfGraphicItem(item),\n value: name || dataKey,\n payload: item.props\n };\n });\n }\n return _objectSpread(_objectSpread(_objectSpread({}, legendItem.props), Legend.getWithHeight(legendItem, legendWidth)), {}, {\n payload: legendData,\n item: legendItem\n });\n};\n/**\n * Calculate the size of all groups for stacked bar graph\n * @param {Object} stackGroups The items grouped by axisId and stackId\n * @return {Object} The size of all groups\n */\nexport var getBarSizeList = function getBarSizeList(_ref5) {\n var globalSize = _ref5.barSize,\n _ref5$stackGroups = _ref5.stackGroups,\n stackGroups = _ref5$stackGroups === void 0 ? {} : _ref5$stackGroups;\n if (!stackGroups) {\n return {};\n }\n var result = {};\n var numericAxisIds = Object.keys(stackGroups);\n for (var i = 0, len = numericAxisIds.length; i < len; i++) {\n var sgs = stackGroups[numericAxisIds[i]].stackGroups;\n var stackIds = Object.keys(sgs);\n for (var j = 0, sLen = stackIds.length; j < sLen; j++) {\n var _sgs$stackIds$j = sgs[stackIds[j]],\n items = _sgs$stackIds$j.items,\n cateAxisId = _sgs$stackIds$j.cateAxisId;\n var barItems = items.filter(function (item) {\n return getDisplayName(item.type).indexOf('Bar') >= 0;\n });\n if (barItems && barItems.length) {\n var selfSize = barItems[0].props.barSize;\n var cateId = barItems[0].props[cateAxisId];\n if (!result[cateId]) {\n result[cateId] = [];\n }\n result[cateId].push({\n item: barItems[0],\n stackList: barItems.slice(1),\n barSize: _isNil(selfSize) ? globalSize : selfSize\n });\n }\n }\n }\n return result;\n};\n\n/**\n * Calculate the size of each bar and the gap between two bars\n * @param {Number} bandSize The size of each category\n * @param {sizeList} sizeList The size of all groups\n * @param {maxBarSize} maxBarSize The maximum size of bar\n * @return {Number} The size of each bar and the gap between two bars\n */\nexport var getBarPosition = function getBarPosition(_ref6) {\n var barGap = _ref6.barGap,\n barCategoryGap = _ref6.barCategoryGap,\n bandSize = _ref6.bandSize,\n _ref6$sizeList = _ref6.sizeList,\n sizeList = _ref6$sizeList === void 0 ? [] : _ref6$sizeList,\n maxBarSize = _ref6.maxBarSize;\n var len = sizeList.length;\n if (len < 1) return null;\n var realBarGap = getPercentValue(barGap, bandSize, 0, true);\n var result;\n\n // whether or not is barSize setted by user\n if (sizeList[0].barSize === +sizeList[0].barSize) {\n var useFull = false;\n var fullBarSize = bandSize / len;\n var sum = sizeList.reduce(function (res, entry) {\n return res + entry.barSize || 0;\n }, 0);\n sum += (len - 1) * realBarGap;\n if (sum >= bandSize) {\n sum -= (len - 1) * realBarGap;\n realBarGap = 0;\n }\n if (sum >= bandSize && fullBarSize > 0) {\n useFull = true;\n fullBarSize *= 0.9;\n sum = len * fullBarSize;\n }\n var offset = (bandSize - sum) / 2 >> 0;\n var prev = {\n offset: offset - realBarGap,\n size: 0\n };\n result = sizeList.reduce(function (res, entry) {\n var newRes = [].concat(_toConsumableArray(res), [{\n item: entry.item,\n position: {\n offset: prev.offset + prev.size + realBarGap,\n size: useFull ? fullBarSize : entry.barSize\n }\n }]);\n prev = newRes[newRes.length - 1].position;\n if (entry.stackList && entry.stackList.length) {\n entry.stackList.forEach(function (item) {\n newRes.push({\n item: item,\n position: prev\n });\n });\n }\n return newRes;\n }, []);\n } else {\n var _offset = getPercentValue(barCategoryGap, bandSize, 0, true);\n if (bandSize - 2 * _offset - (len - 1) * realBarGap <= 0) {\n realBarGap = 0;\n }\n var originalSize = (bandSize - 2 * _offset - (len - 1) * realBarGap) / len;\n if (originalSize > 1) {\n originalSize >>= 0;\n }\n var size = maxBarSize === +maxBarSize ? Math.min(originalSize, maxBarSize) : originalSize;\n result = sizeList.reduce(function (res, entry, i) {\n var newRes = [].concat(_toConsumableArray(res), [{\n item: entry.item,\n position: {\n offset: _offset + (originalSize + realBarGap) * i + (originalSize - size) / 2,\n size: size\n }\n }]);\n if (entry.stackList && entry.stackList.length) {\n entry.stackList.forEach(function (item) {\n newRes.push({\n item: item,\n position: newRes[newRes.length - 1].position\n });\n });\n }\n return newRes;\n }, []);\n }\n return result;\n};\nexport var appendOffsetOfLegend = function appendOffsetOfLegend(offset, items, props, legendBox) {\n var children = props.children,\n width = props.width,\n margin = props.margin;\n var legendWidth = width - (margin.left || 0) - (margin.right || 0);\n // const legendHeight = height - (margin.top || 0) - (margin.bottom || 0);\n var legendProps = getLegendProps({\n children: children,\n legendWidth: legendWidth\n });\n var newOffset = offset;\n if (legendProps) {\n var box = legendBox || {};\n var align = legendProps.align,\n verticalAlign = legendProps.verticalAlign,\n layout = legendProps.layout;\n if ((layout === 'vertical' || layout === 'horizontal' && verticalAlign === 'middle') && isNumber(offset[align])) {\n newOffset = _objectSpread(_objectSpread({}, offset), {}, _defineProperty({}, align, newOffset[align] + (box.width || 0)));\n }\n if ((layout === 'horizontal' || layout === 'vertical' && align === 'center') && isNumber(offset[verticalAlign])) {\n newOffset = _objectSpread(_objectSpread({}, offset), {}, _defineProperty({}, verticalAlign, newOffset[verticalAlign] + (box.height || 0)));\n }\n }\n return newOffset;\n};\nvar isErrorBarRelevantForAxis = function isErrorBarRelevantForAxis(layout, axisType, direction) {\n if (_isNil(axisType)) {\n return true;\n }\n if (layout === 'horizontal') {\n return axisType === 'yAxis';\n }\n if (layout === 'vertical') {\n return axisType === 'xAxis';\n }\n if (direction === 'x') {\n return axisType === 'xAxis';\n }\n if (direction === 'y') {\n return axisType === 'yAxis';\n }\n return true;\n};\nexport var getDomainOfErrorBars = function getDomainOfErrorBars(data, item, dataKey, layout, axisType) {\n var children = item.props.children;\n var errorBars = findAllByType(children, ErrorBar).filter(function (errorBarChild) {\n return isErrorBarRelevantForAxis(layout, axisType, errorBarChild.props.direction);\n });\n if (errorBars && errorBars.length) {\n var keys = errorBars.map(function (errorBarChild) {\n return errorBarChild.props.dataKey;\n });\n return data.reduce(function (result, entry) {\n var entryValue = getValueByDataKey(entry, dataKey, 0);\n var mainValue = _isArray(entryValue) ? [_min(entryValue), _max(entryValue)] : [entryValue, entryValue];\n var errorDomain = keys.reduce(function (prevErrorArr, k) {\n var errorValue = getValueByDataKey(entry, k, 0);\n var lowerValue = mainValue[0] - Math.abs(_isArray(errorValue) ? errorValue[0] : errorValue);\n var upperValue = mainValue[1] + Math.abs(_isArray(errorValue) ? errorValue[1] : errorValue);\n return [Math.min(lowerValue, prevErrorArr[0]), Math.max(upperValue, prevErrorArr[1])];\n }, [Infinity, -Infinity]);\n return [Math.min(errorDomain[0], result[0]), Math.max(errorDomain[1], result[1])];\n }, [Infinity, -Infinity]);\n }\n return null;\n};\nexport var parseErrorBarsOfAxis = function parseErrorBarsOfAxis(data, items, dataKey, axisType, layout) {\n var domains = items.map(function (item) {\n return getDomainOfErrorBars(data, item, dataKey, layout, axisType);\n }).filter(function (entry) {\n return !_isNil(entry);\n });\n if (domains && domains.length) {\n return domains.reduce(function (result, entry) {\n return [Math.min(result[0], entry[0]), Math.max(result[1], entry[1])];\n }, [Infinity, -Infinity]);\n }\n return null;\n};\n\n/**\n * Get domain of data by the configuration of item element\n * @param {Array} data The data displayed in the chart\n * @param {Array} items The instances of item\n * @param {String} type The type of axis, number - Number Axis, category - Category Axis\n * @param {LayoutType} layout The type of layout\n * @param {Boolean} filterNil Whether or not filter nil values\n * @return {Array} Domain\n */\nexport var getDomainOfItemsWithSameAxis = function getDomainOfItemsWithSameAxis(data, items, type, layout, filterNil) {\n var domains = items.map(function (item) {\n var dataKey = item.props.dataKey;\n if (type === 'number' && dataKey) {\n return getDomainOfErrorBars(data, item, dataKey, layout) || getDomainOfDataByKey(data, dataKey, type, filterNil);\n }\n return getDomainOfDataByKey(data, dataKey, type, filterNil);\n });\n if (type === 'number') {\n // Calculate the domain of number axis\n return domains.reduce(function (result, entry) {\n return [Math.min(result[0], entry[0]), Math.max(result[1], entry[1])];\n }, [Infinity, -Infinity]);\n }\n var tag = {};\n // Get the union set of category axis\n return domains.reduce(function (result, entry) {\n for (var i = 0, len = entry.length; i < len; i++) {\n if (!tag[entry[i]]) {\n tag[entry[i]] = true;\n result.push(entry[i]);\n }\n }\n return result;\n }, []);\n};\nexport var isCategoricalAxis = function isCategoricalAxis(layout, axisType) {\n return layout === 'horizontal' && axisType === 'xAxis' || layout === 'vertical' && axisType === 'yAxis' || layout === 'centric' && axisType === 'angleAxis' || layout === 'radial' && axisType === 'radiusAxis';\n};\n\n/**\n * Calculate the Coordinates of grid\n * @param {Array} ticks The ticks in axis\n * @param {Number} min The minimun value of axis\n * @param {Number} max The maximun value of axis\n * @return {Array} Coordinates\n */\nexport var getCoordinatesOfGrid = function getCoordinatesOfGrid(ticks, min, max) {\n var hasMin, hasMax;\n var values = ticks.map(function (entry) {\n if (entry.coordinate === min) {\n hasMin = true;\n }\n if (entry.coordinate === max) {\n hasMax = true;\n }\n return entry.coordinate;\n });\n if (!hasMin) {\n values.push(min);\n }\n if (!hasMax) {\n values.push(max);\n }\n return values;\n};\n\n/**\n * Get the ticks of an axis\n * @param {Object} axis The configuration of an axis\n * @param {Boolean} isGrid Whether or not are the ticks in grid\n * @param {Boolean} isAll Return the ticks of all the points or not\n * @return {Array} Ticks\n */\nexport var getTicksOfAxis = function getTicksOfAxis(axis, isGrid, isAll) {\n if (!axis) return null;\n var scale = axis.scale;\n var duplicateDomain = axis.duplicateDomain,\n type = axis.type,\n range = axis.range;\n var offsetForBand = axis.realScaleType === 'scaleBand' ? scale.bandwidth() / 2 : 2;\n var offset = (isGrid || isAll) && type === 'category' && scale.bandwidth ? scale.bandwidth() / offsetForBand : 0;\n offset = axis.axisType === 'angleAxis' && (range === null || range === void 0 ? void 0 : range.length) >= 2 ? mathSign(range[0] - range[1]) * 2 * offset : offset;\n\n // The ticks set by user should only affect the ticks adjacent to axis line\n if (isGrid && (axis.ticks || axis.niceTicks)) {\n var result = (axis.ticks || axis.niceTicks).map(function (entry) {\n var scaleContent = duplicateDomain ? duplicateDomain.indexOf(entry) : entry;\n return {\n // If the scaleContent is not a number, the coordinate will be NaN.\n // That could be the case for example with a PointScale and a string as domain.\n coordinate: scale(scaleContent) + offset,\n value: entry,\n offset: offset\n };\n });\n return result.filter(function (row) {\n return !_isNaN(row.coordinate);\n });\n }\n\n // When axis is a categorial axis, but the type of axis is number or the scale of axis is not \"auto\"\n if (axis.isCategorical && axis.categoricalDomain) {\n return axis.categoricalDomain.map(function (entry, index) {\n return {\n coordinate: scale(entry) + offset,\n value: entry,\n index: index,\n offset: offset\n };\n });\n }\n if (scale.ticks && !isAll) {\n return scale.ticks(axis.tickCount).map(function (entry) {\n return {\n coordinate: scale(entry) + offset,\n value: entry,\n offset: offset\n };\n });\n }\n\n // When axis has duplicated text, serial numbers are used to generate scale\n return scale.domain().map(function (entry, index) {\n return {\n coordinate: scale(entry) + offset,\n value: duplicateDomain ? duplicateDomain[entry] : entry,\n index: index,\n offset: offset\n };\n });\n};\n\n/**\n * combine the handlers\n * @param {Function} defaultHandler Internal private handler\n * @param {Function} parentHandler Handler function specified in parent component\n * @param {Function} childHandler Handler function specified in child component\n * @return {Function} The combined handler\n */\nexport var combineEventHandlers = function combineEventHandlers(defaultHandler, parentHandler, childHandler) {\n var customizedHandler;\n if (_isFunction(childHandler)) {\n customizedHandler = childHandler;\n } else if (_isFunction(parentHandler)) {\n customizedHandler = parentHandler;\n }\n if (_isFunction(defaultHandler) || customizedHandler) {\n return function (arg1, arg2, arg3, arg4) {\n if (_isFunction(defaultHandler)) {\n defaultHandler(arg1, arg2, arg3, arg4);\n }\n if (_isFunction(customizedHandler)) {\n customizedHandler(arg1, arg2, arg3, arg4);\n }\n };\n }\n return null;\n};\n/**\n * Parse the scale function of axis\n * @param {Object} axis The option of axis\n * @param {String} chartType The displayName of chart\n * @param {Boolean} hasBar if it has a bar\n * @return {Function} The scale function\n */\nexport var parseScale = function parseScale(axis, chartType, hasBar) {\n var scale = axis.scale,\n type = axis.type,\n layout = axis.layout,\n axisType = axis.axisType;\n if (scale === 'auto') {\n if (layout === 'radial' && axisType === 'radiusAxis') {\n return {\n scale: d3Scales.scaleBand(),\n realScaleType: 'band'\n };\n }\n if (layout === 'radial' && axisType === 'angleAxis') {\n return {\n scale: d3Scales.scaleLinear(),\n realScaleType: 'linear'\n };\n }\n if (type === 'category' && chartType && (chartType.indexOf('LineChart') >= 0 || chartType.indexOf('AreaChart') >= 0 || chartType.indexOf('ComposedChart') >= 0 && !hasBar)) {\n return {\n scale: d3Scales.scalePoint(),\n realScaleType: 'point'\n };\n }\n if (type === 'category') {\n return {\n scale: d3Scales.scaleBand(),\n realScaleType: 'band'\n };\n }\n return {\n scale: d3Scales.scaleLinear(),\n realScaleType: 'linear'\n };\n }\n if (_isString(scale)) {\n var name = \"scale\".concat(_upperFirst(scale));\n return {\n scale: (d3Scales[name] || d3Scales.scalePoint)(),\n realScaleType: d3Scales[name] ? name : 'point'\n };\n }\n return _isFunction(scale) ? {\n scale: scale\n } : {\n scale: d3Scales.scalePoint(),\n realScaleType: 'point'\n };\n};\nvar EPS = 1e-4;\nexport var checkDomainOfScale = function checkDomainOfScale(scale) {\n var domain = scale.domain();\n if (!domain || domain.length <= 2) {\n return;\n }\n var len = domain.length;\n var range = scale.range();\n var min = Math.min(range[0], range[1]) - EPS;\n var max = Math.max(range[0], range[1]) + EPS;\n var first = scale(domain[0]);\n var last = scale(domain[len - 1]);\n if (first < min || first > max || last < min || last > max) {\n scale.domain([domain[0], domain[len - 1]]);\n }\n};\nexport var findPositionOfBar = function findPositionOfBar(barPosition, child) {\n if (!barPosition) {\n return null;\n }\n for (var i = 0, len = barPosition.length; i < len; i++) {\n if (barPosition[i].item === child) {\n return barPosition[i].position;\n }\n }\n return null;\n};\nexport var truncateByDomain = function truncateByDomain(value, domain) {\n if (!domain || domain.length !== 2 || !isNumber(domain[0]) || !isNumber(domain[1])) {\n return value;\n }\n var min = Math.min(domain[0], domain[1]);\n var max = Math.max(domain[0], domain[1]);\n var result = [value[0], value[1]];\n if (!isNumber(value[0]) || value[0] < min) {\n result[0] = min;\n }\n if (!isNumber(value[1]) || value[1] > max) {\n result[1] = max;\n }\n if (result[0] > max) {\n result[0] = max;\n }\n if (result[1] < min) {\n result[1] = min;\n }\n return result;\n};\n\n/* eslint no-param-reassign: 0 */\nexport var offsetSign = function offsetSign(series) {\n var n = series.length;\n if (n <= 0) {\n return;\n }\n for (var j = 0, m = series[0].length; j < m; ++j) {\n var positive = 0;\n var negative = 0;\n for (var i = 0; i < n; ++i) {\n var value = _isNaN(series[i][j][1]) ? series[i][j][0] : series[i][j][1];\n\n /* eslint-disable prefer-destructuring */\n if (value >= 0) {\n series[i][j][0] = positive;\n series[i][j][1] = positive + value;\n positive = series[i][j][1];\n } else {\n series[i][j][0] = negative;\n series[i][j][1] = negative + value;\n negative = series[i][j][1];\n }\n /* eslint-enable prefer-destructuring */\n }\n }\n};\n\nexport var offsetPositive = function offsetPositive(series) {\n var n = series.length;\n if (n <= 0) {\n return;\n }\n for (var j = 0, m = series[0].length; j < m; ++j) {\n var positive = 0;\n for (var i = 0; i < n; ++i) {\n var value = _isNaN(series[i][j][1]) ? series[i][j][0] : series[i][j][1];\n\n /* eslint-disable prefer-destructuring */\n if (value >= 0) {\n series[i][j][0] = positive;\n series[i][j][1] = positive + value;\n positive = series[i][j][1];\n } else {\n series[i][j][0] = 0;\n series[i][j][1] = 0;\n }\n /* eslint-enable prefer-destructuring */\n }\n }\n};\n\nvar STACK_OFFSET_MAP = {\n sign: offsetSign,\n expand: stackOffsetExpand,\n none: stackOffsetNone,\n silhouette: stackOffsetSilhouette,\n wiggle: stackOffsetWiggle,\n positive: offsetPositive\n};\nexport var getStackedData = function getStackedData(data, stackItems, offsetType) {\n var dataKeys = stackItems.map(function (item) {\n return item.props.dataKey;\n });\n var stack = shapeStack().keys(dataKeys).value(function (d, key) {\n return +getValueByDataKey(d, key, 0);\n }).order(stackOrderNone).offset(STACK_OFFSET_MAP[offsetType]);\n return stack(data);\n};\nexport var getStackGroupsByAxisId = function getStackGroupsByAxisId(data, _items, numericAxisId, cateAxisId, offsetType, reverseStackOrder) {\n if (!data) {\n return null;\n }\n\n // reversing items to affect render order (for layering)\n var items = reverseStackOrder ? _items.reverse() : _items;\n var stackGroups = items.reduce(function (result, item) {\n var _item$props3 = item.props,\n stackId = _item$props3.stackId,\n hide = _item$props3.hide;\n if (hide) {\n return result;\n }\n var axisId = item.props[numericAxisId];\n var parentGroup = result[axisId] || {\n hasStack: false,\n stackGroups: {}\n };\n if (isNumOrStr(stackId)) {\n var childGroup = parentGroup.stackGroups[stackId] || {\n numericAxisId: numericAxisId,\n cateAxisId: cateAxisId,\n items: []\n };\n childGroup.items.push(item);\n parentGroup.hasStack = true;\n parentGroup.stackGroups[stackId] = childGroup;\n } else {\n parentGroup.stackGroups[uniqueId('_stackId_')] = {\n numericAxisId: numericAxisId,\n cateAxisId: cateAxisId,\n items: [item]\n };\n }\n return _objectSpread(_objectSpread({}, result), {}, _defineProperty({}, axisId, parentGroup));\n }, {});\n return Object.keys(stackGroups).reduce(function (result, axisId) {\n var group = stackGroups[axisId];\n if (group.hasStack) {\n group.stackGroups = Object.keys(group.stackGroups).reduce(function (res, stackId) {\n var g = group.stackGroups[stackId];\n return _objectSpread(_objectSpread({}, res), {}, _defineProperty({}, stackId, {\n numericAxisId: numericAxisId,\n cateAxisId: cateAxisId,\n items: g.items,\n stackedData: getStackedData(data, g.items, offsetType)\n }));\n }, {});\n }\n return _objectSpread(_objectSpread({}, result), {}, _defineProperty({}, axisId, group));\n }, {});\n};\n\n/**\n * Configure the scale function of axis\n * @param {Object} scale The scale function\n * @param {Object} opts The configuration of axis\n * @return {Object} null\n */\nexport var getTicksOfScale = function getTicksOfScale(scale, opts) {\n var realScaleType = opts.realScaleType,\n type = opts.type,\n tickCount = opts.tickCount,\n originalDomain = opts.originalDomain,\n allowDecimals = opts.allowDecimals;\n var scaleType = realScaleType || opts.scale;\n if (scaleType !== 'auto' && scaleType !== 'linear') {\n return null;\n }\n if (tickCount && type === 'number' && originalDomain && (originalDomain[0] === 'auto' || originalDomain[1] === 'auto')) {\n // Calculate the ticks by the number of grid when the axis is a number axis\n var domain = scale.domain();\n if (!domain.length) {\n return null;\n }\n var tickValues = getNiceTickValues(domain, tickCount, allowDecimals);\n scale.domain([_min(tickValues), _max(tickValues)]);\n return {\n niceTicks: tickValues\n };\n }\n if (tickCount && type === 'number') {\n var _domain = scale.domain();\n var _tickValues = getTickValuesFixedDomain(_domain, tickCount, allowDecimals);\n return {\n niceTicks: _tickValues\n };\n }\n return null;\n};\nexport var getCateCoordinateOfLine = function getCateCoordinateOfLine(_ref7) {\n var axis = _ref7.axis,\n ticks = _ref7.ticks,\n bandSize = _ref7.bandSize,\n entry = _ref7.entry,\n index = _ref7.index,\n dataKey = _ref7.dataKey;\n if (axis.type === 'category') {\n // find coordinate of category axis by the value of category\n if (!axis.allowDuplicatedCategory && axis.dataKey && !_isNil(entry[axis.dataKey])) {\n var matchedTick = findEntryInArray(ticks, 'value', entry[axis.dataKey]);\n if (matchedTick) {\n return matchedTick.coordinate + bandSize / 2;\n }\n }\n return ticks[index] ? ticks[index].coordinate + bandSize / 2 : null;\n }\n var value = getValueByDataKey(entry, !_isNil(dataKey) ? dataKey : axis.dataKey);\n return !_isNil(value) ? axis.scale(value) : null;\n};\nexport var getCateCoordinateOfBar = function getCateCoordinateOfBar(_ref8) {\n var axis = _ref8.axis,\n ticks = _ref8.ticks,\n offset = _ref8.offset,\n bandSize = _ref8.bandSize,\n entry = _ref8.entry,\n index = _ref8.index;\n if (axis.type === 'category') {\n return ticks[index] ? ticks[index].coordinate + offset : null;\n }\n var value = getValueByDataKey(entry, axis.dataKey, axis.domain[index]);\n return !_isNil(value) ? axis.scale(value) - bandSize / 2 + offset : null;\n};\nexport var getBaseValueOfBar = function getBaseValueOfBar(_ref9) {\n var numericAxis = _ref9.numericAxis;\n var domain = numericAxis.scale.domain();\n if (numericAxis.type === 'number') {\n var min = Math.min(domain[0], domain[1]);\n var max = Math.max(domain[0], domain[1]);\n if (min <= 0 && max >= 0) {\n return 0;\n }\n if (max < 0) {\n return max;\n }\n return min;\n }\n return domain[0];\n};\nexport var getStackedDataOfItem = function getStackedDataOfItem(item, stackGroups) {\n var stackId = item.props.stackId;\n if (isNumOrStr(stackId)) {\n var group = stackGroups[stackId];\n if (group && group.items.length) {\n var itemIndex = -1;\n for (var i = 0, len = group.items.length; i < len; i++) {\n if (group.items[i] === item) {\n itemIndex = i;\n break;\n }\n }\n return itemIndex >= 0 ? group.stackedData[itemIndex] : null;\n }\n }\n return null;\n};\nvar getDomainOfSingle = function getDomainOfSingle(data) {\n return data.reduce(function (result, entry) {\n return [_min(entry.concat([result[0]]).filter(isNumber)), _max(entry.concat([result[1]]).filter(isNumber))];\n }, [Infinity, -Infinity]);\n};\nexport var getDomainOfStackGroups = function getDomainOfStackGroups(stackGroups, startIndex, endIndex) {\n return Object.keys(stackGroups).reduce(function (result, stackId) {\n var group = stackGroups[stackId];\n var stackedData = group.stackedData;\n var domain = stackedData.reduce(function (res, entry) {\n var s = getDomainOfSingle(entry.slice(startIndex, endIndex + 1));\n return [Math.min(res[0], s[0]), Math.max(res[1], s[1])];\n }, [Infinity, -Infinity]);\n return [Math.min(domain[0], result[0]), Math.max(domain[1], result[1])];\n }, [Infinity, -Infinity]).map(function (result) {\n return result === Infinity || result === -Infinity ? 0 : result;\n });\n};\nexport var MIN_VALUE_REG = /^dataMin[\\s]*-[\\s]*([0-9]+([.]{1}[0-9]+){0,1})$/;\nexport var MAX_VALUE_REG = /^dataMax[\\s]*\\+[\\s]*([0-9]+([.]{1}[0-9]+){0,1})$/;\nexport var parseSpecifiedDomain = function parseSpecifiedDomain(specifiedDomain, dataDomain, allowDataOverflow) {\n if (_isFunction(specifiedDomain)) {\n return specifiedDomain(dataDomain, allowDataOverflow);\n }\n if (!_isArray(specifiedDomain)) {\n return dataDomain;\n }\n var domain = [];\n\n /* eslint-disable prefer-destructuring */\n if (isNumber(specifiedDomain[0])) {\n domain[0] = allowDataOverflow ? specifiedDomain[0] : Math.min(specifiedDomain[0], dataDomain[0]);\n } else if (MIN_VALUE_REG.test(specifiedDomain[0])) {\n var value = +MIN_VALUE_REG.exec(specifiedDomain[0])[1];\n domain[0] = dataDomain[0] - value;\n } else if (_isFunction(specifiedDomain[0])) {\n domain[0] = specifiedDomain[0](dataDomain[0]);\n } else {\n domain[0] = dataDomain[0];\n }\n if (isNumber(specifiedDomain[1])) {\n domain[1] = allowDataOverflow ? specifiedDomain[1] : Math.max(specifiedDomain[1], dataDomain[1]);\n } else if (MAX_VALUE_REG.test(specifiedDomain[1])) {\n var _value = +MAX_VALUE_REG.exec(specifiedDomain[1])[1];\n domain[1] = dataDomain[1] + _value;\n } else if (_isFunction(specifiedDomain[1])) {\n domain[1] = specifiedDomain[1](dataDomain[1]);\n } else {\n domain[1] = dataDomain[1];\n }\n /* eslint-enable prefer-destructuring */\n\n return domain;\n};\n\n/**\n * Calculate the size between two category\n * @param {Object} axis The options of axis\n * @param {Array} ticks The ticks of axis\n * @param {Boolean} isBar if items in axis are bars\n * @return {Number} Size\n */\nexport var getBandSizeOfAxis = function getBandSizeOfAxis(axis, ticks, isBar) {\n if (axis && axis.scale && axis.scale.bandwidth) {\n var bandWidth = axis.scale.bandwidth();\n if (!isBar || bandWidth > 0) {\n return bandWidth;\n }\n }\n if (axis && ticks && ticks.length >= 2) {\n var orderedTicks = _sortBy(ticks, function (o) {\n return o.coordinate;\n });\n var bandSize = Infinity;\n for (var i = 1, len = orderedTicks.length; i < len; i++) {\n var cur = orderedTicks[i];\n var prev = orderedTicks[i - 1];\n bandSize = Math.min((cur.coordinate || 0) - (prev.coordinate || 0), bandSize);\n }\n return bandSize === Infinity ? 0 : bandSize;\n }\n return isBar ? undefined : 0;\n};\n/**\n * parse the domain of a category axis when a domain is specified\n * @param {Array} specifiedDomain The domain specified by users\n * @param {Array} calculatedDomain The domain calculated by dateKey\n * @param {ReactElement} axisChild The axis element\n * @returns {Array} domains\n */\nexport var parseDomainOfCategoryAxis = function parseDomainOfCategoryAxis(specifiedDomain, calculatedDomain, axisChild) {\n if (!specifiedDomain || !specifiedDomain.length) {\n return calculatedDomain;\n }\n if (_isEqual(specifiedDomain, _get(axisChild, 'type.defaultProps.domain'))) {\n return calculatedDomain;\n }\n return specifiedDomain;\n};\nexport var getTooltipItem = function getTooltipItem(graphicalItem, payload) {\n var _graphicalItem$props = graphicalItem.props,\n dataKey = _graphicalItem$props.dataKey,\n name = _graphicalItem$props.name,\n unit = _graphicalItem$props.unit,\n formatter = _graphicalItem$props.formatter,\n tooltipType = _graphicalItem$props.tooltipType,\n chartType = _graphicalItem$props.chartType;\n return _objectSpread(_objectSpread({}, filterProps(graphicalItem)), {}, {\n dataKey: dataKey,\n unit: unit,\n formatter: formatter,\n name: name || dataKey,\n color: getMainColorOfGraphicItem(graphicalItem),\n value: getValueByDataKey(payload, dataKey),\n type: tooltipType,\n payload: payload,\n chartType: chartType\n });\n};","import none from \"./none.js\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n }\n none(series, order);\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {\n for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0;\n s0[j][1] += s0[j][0] = -y / 2;\n }\n none(series, order);\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n var si = series[order[i]],\n sij0 = si[j][1] || 0,\n sij1 = si[j - 1][1] || 0,\n s3 = (sij0 - sij1) / 2;\n for (var k = 0; k < i; ++k) {\n var sk = series[order[k]],\n skj0 = sk[j][1] || 0,\n skj1 = sk[j - 1][1] || 0;\n s3 += skj0 - skj1;\n }\n s1 += sij0, s2 += s3 * sij0;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n if (s1) y -= s2 / s1;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n none(series, order);\n}\n","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nimport { Global } from './Global';\nvar stringCache = {\n widthCache: {},\n cacheCount: 0\n};\nvar MAX_CACHE_NUM = 2000;\nvar SPAN_STYLE = {\n position: 'absolute',\n top: '-20000px',\n left: 0,\n padding: 0,\n margin: 0,\n border: 'none',\n whiteSpace: 'pre'\n};\nvar STYLE_LIST = ['minWidth', 'maxWidth', 'width', 'minHeight', 'maxHeight', 'height', 'top', 'left', 'fontSize', 'lineHeight', 'padding', 'margin', 'paddingLeft', 'paddingRight', 'paddingTop', 'paddingBottom', 'marginLeft', 'marginRight', 'marginTop', 'marginBottom'];\nvar MEASUREMENT_SPAN_ID = 'recharts_measurement_span';\nfunction autoCompleteStyle(name, value) {\n if (STYLE_LIST.indexOf(name) >= 0 && value === +value) {\n return \"\".concat(value, \"px\");\n }\n return value;\n}\nfunction camelToMiddleLine(text) {\n var strs = text.split('');\n var formatStrs = strs.reduce(function (result, entry) {\n if (entry === entry.toUpperCase()) {\n return [].concat(_toConsumableArray(result), ['-', entry.toLowerCase()]);\n }\n return [].concat(_toConsumableArray(result), [entry]);\n }, []);\n return formatStrs.join('');\n}\nexport var getStyleString = function getStyleString(style) {\n return Object.keys(style).reduce(function (result, s) {\n return \"\".concat(result).concat(camelToMiddleLine(s), \":\").concat(autoCompleteStyle(s, style[s]), \";\");\n }, '');\n};\nexport var getStringSize = function getStringSize(text) {\n var style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (text === undefined || text === null || Global.isSsr) {\n return {\n width: 0,\n height: 0\n };\n }\n var str = \"\".concat(text);\n var styleString = getStyleString(style);\n var cacheKey = \"\".concat(str, \"-\").concat(styleString);\n if (stringCache.widthCache[cacheKey]) {\n return stringCache.widthCache[cacheKey];\n }\n try {\n var measurementSpan = document.getElementById(MEASUREMENT_SPAN_ID);\n if (!measurementSpan) {\n measurementSpan = document.createElement('span');\n measurementSpan.setAttribute('id', MEASUREMENT_SPAN_ID);\n measurementSpan.setAttribute('aria-hidden', 'true');\n document.body.appendChild(measurementSpan);\n }\n // Need to use CSS Object Model (CSSOM) to be able to comply with Content Security Policy (CSP)\n // https://en.wikipedia.org/wiki/Content_Security_Policy\n var measurementSpanStyle = _objectSpread(_objectSpread({}, SPAN_STYLE), style);\n Object.keys(measurementSpanStyle).map(function (styleKey) {\n measurementSpan.style[styleKey] = measurementSpanStyle[styleKey];\n return styleKey;\n });\n measurementSpan.textContent = str;\n var rect = measurementSpan.getBoundingClientRect();\n var result = {\n width: rect.width,\n height: rect.height\n };\n stringCache.widthCache[cacheKey] = result;\n if (++stringCache.cacheCount > MAX_CACHE_NUM) {\n stringCache.cacheCount = 0;\n stringCache.widthCache = {};\n }\n return result;\n } catch (e) {\n return {\n width: 0,\n height: 0\n };\n }\n};\nexport var getOffset = function getOffset(el) {\n var html = el.ownerDocument.documentElement;\n var box = {\n top: 0,\n left: 0\n };\n\n // If we don't have gBCR, just use 0,0 rather than error\n // BlackBerry 5, iOS 3 (original iPhone)\n if (typeof el.getBoundingClientRect !== 'undefined') {\n box = el.getBoundingClientRect();\n }\n return {\n top: box.top + window.pageYOffset - html.clientTop,\n left: box.left + window.pageXOffset - html.clientLeft\n };\n};\n\n/**\n * Calculate coordinate of cursor in chart\n * @param {Object} event Event object\n * @param {Object} offset The offset of main part in the svg element\n * @return {Object} {chartX, chartY}\n */\nexport var calculateChartCoordinate = function calculateChartCoordinate(event, offset) {\n return {\n chartX: Math.round(event.pageX - offset.left),\n chartY: Math.round(event.pageY - offset.top)\n };\n};","import _get from \"lodash/get\";\nimport _isArray from \"lodash/isArray\";\nimport _isNaN from \"lodash/isNaN\";\nimport _isNumber from \"lodash/isNumber\";\nimport _isString from \"lodash/isString\";\nexport var mathSign = function mathSign(value) {\n if (value === 0) {\n return 0;\n }\n if (value > 0) {\n return 1;\n }\n return -1;\n};\nexport var isPercent = function isPercent(value) {\n return _isString(value) && value.indexOf('%') === value.length - 1;\n};\nexport var isNumber = function isNumber(value) {\n return _isNumber(value) && !_isNaN(value);\n};\nexport var isNumOrStr = function isNumOrStr(value) {\n return isNumber(value) || _isString(value);\n};\nvar idCounter = 0;\nexport var uniqueId = function uniqueId(prefix) {\n var id = ++idCounter;\n return \"\".concat(prefix || '').concat(id);\n};\n\n/**\n * Get percent value of a total value\n * @param {number|string} percent A percent\n * @param {number} totalValue Total value\n * @param {number} defaultValue The value returned when percent is undefined or invalid\n * @param {boolean} validate If set to be true, the result will be validated\n * @return {number} value\n */\nexport var getPercentValue = function getPercentValue(percent, totalValue) {\n var defaultValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var validate = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n if (!isNumber(percent) && !_isString(percent)) {\n return defaultValue;\n }\n var value;\n if (isPercent(percent)) {\n var index = percent.indexOf('%');\n value = totalValue * parseFloat(percent.slice(0, index)) / 100;\n } else {\n value = +percent;\n }\n if (_isNaN(value)) {\n value = defaultValue;\n }\n if (validate && value > totalValue) {\n value = totalValue;\n }\n return value;\n};\nexport var getAnyElementOfObject = function getAnyElementOfObject(obj) {\n if (!obj) {\n return null;\n }\n var keys = Object.keys(obj);\n if (keys && keys.length) {\n return obj[keys[0]];\n }\n return null;\n};\nexport var hasDuplicate = function hasDuplicate(ary) {\n if (!_isArray(ary)) {\n return false;\n }\n var len = ary.length;\n var cache = {};\n for (var i = 0; i < len; i++) {\n if (!cache[ary[i]]) {\n cache[ary[i]] = true;\n } else {\n return true;\n }\n }\n return false;\n};\n\n/* @todo consider to rename this function into `getInterpolator` */\nexport var interpolateNumber = function interpolateNumber(numberA, numberB) {\n if (isNumber(numberA) && isNumber(numberB)) {\n return function (t) {\n return numberA + t * (numberB - numberA);\n };\n }\n return function () {\n return numberB;\n };\n};\nexport function findEntryInArray(ary, specifiedKey, specifiedValue) {\n if (!ary || !ary.length) {\n return null;\n }\n return ary.find(function (entry) {\n return entry && (typeof specifiedKey === 'function' ? specifiedKey(entry) : _get(entry, specifiedKey)) === specifiedValue;\n });\n}\n\n/**\n * The least square linear regression\n * @param {Array} data The array of points\n * @returns {Object} The domain of x, and the parameter of linear function\n */\nexport var getLinearRegression = function getLinearRegression(data) {\n if (!data || !data.length) {\n return null;\n }\n var len = data.length;\n var xsum = 0;\n var ysum = 0;\n var xysum = 0;\n var xxsum = 0;\n var xmin = Infinity;\n var xmax = -Infinity;\n var xcurrent = 0;\n var ycurrent = 0;\n for (var i = 0; i < len; i++) {\n xcurrent = data[i].cx || 0;\n ycurrent = data[i].cy || 0;\n xsum += xcurrent;\n ysum += ycurrent;\n xysum += xcurrent * ycurrent;\n xxsum += xcurrent * xcurrent;\n xmin = Math.min(xmin, xcurrent);\n xmax = Math.max(xmax, xcurrent);\n }\n var a = len * xxsum !== xsum * xsum ? (len * xysum - xsum * ysum) / (len * xxsum - xsum * xsum) : 0;\n return {\n xmin: xmin,\n xmax: xmax,\n a: a,\n b: (ysum - a * xsum) / len\n };\n};","var parseIsSsrByDefault = function parseIsSsrByDefault() {\n return !(typeof window !== 'undefined' && window.document && window.document.createElement && window.setTimeout);\n};\nexport var Global = {\n isSsr: parseIsSsrByDefault(),\n get: function get(key) {\n return Global[key];\n },\n set: function set(key, value) {\n if (typeof key === 'string') {\n Global[key] = value;\n } else {\n var keys = Object.keys(key);\n if (keys && keys.length) {\n keys.forEach(function (k) {\n Global[k] = key[k];\n });\n }\n }\n }\n};","/* eslint no-console: 0 */\nvar isDev = process.env.NODE_ENV !== 'production';\nexport var warn = function warn(condition, format) {\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n if (isDev && typeof console !== 'undefined' && console.warn) {\n if (format === undefined) {\n console.warn('LogUtils requires an error message argument');\n }\n if (!condition) {\n if (format === undefined) {\n console.warn('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n var argIndex = 0;\n console.warn(format.replace(/%s/g, function () {\n return args[argIndex++];\n }));\n }\n }\n }\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nimport _isNil from \"lodash/isNil\";\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i[\"return\"] && (_r = _i[\"return\"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\nimport { getPercentValue } from './DataUtils';\nimport { parseScale, checkDomainOfScale, getTicksOfScale } from './ChartUtils';\nexport var RADIAN = Math.PI / 180;\nexport var degreeToRadian = function degreeToRadian(angle) {\n return angle * Math.PI / 180;\n};\nexport var radianToDegree = function radianToDegree(angleInRadian) {\n return angleInRadian * 180 / Math.PI;\n};\nexport var polarToCartesian = function polarToCartesian(cx, cy, radius, angle) {\n return {\n x: cx + Math.cos(-RADIAN * angle) * radius,\n y: cy + Math.sin(-RADIAN * angle) * radius\n };\n};\nexport var getMaxRadius = function getMaxRadius(width, height) {\n var offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n return Math.min(Math.abs(width - (offset.left || 0) - (offset.right || 0)), Math.abs(height - (offset.top || 0) - (offset.bottom || 0))) / 2;\n};\n\n/**\n * Calculate the scale function, position, width, height of axes\n * @param {Object} props Latest props\n * @param {Object} axisMap The configuration of axes\n * @param {Object} offset The offset of main part in the svg element\n * @param {Object} axisType The type of axes, radius-axis or angle-axis\n * @param {String} chartName The name of chart\n * @return {Object} Configuration\n */\nexport var formatAxisMap = function formatAxisMap(props, axisMap, offset, axisType, chartName) {\n var width = props.width,\n height = props.height;\n var startAngle = props.startAngle,\n endAngle = props.endAngle;\n var cx = getPercentValue(props.cx, width, width / 2);\n var cy = getPercentValue(props.cy, height, height / 2);\n var maxRadius = getMaxRadius(width, height, offset);\n var innerRadius = getPercentValue(props.innerRadius, maxRadius, 0);\n var outerRadius = getPercentValue(props.outerRadius, maxRadius, maxRadius * 0.8);\n var ids = Object.keys(axisMap);\n return ids.reduce(function (result, id) {\n var axis = axisMap[id];\n var domain = axis.domain,\n reversed = axis.reversed;\n var range;\n if (_isNil(axis.range)) {\n if (axisType === 'angleAxis') {\n range = [startAngle, endAngle];\n } else if (axisType === 'radiusAxis') {\n range = [innerRadius, outerRadius];\n }\n if (reversed) {\n range = [range[1], range[0]];\n }\n } else {\n range = axis.range;\n var _range = range;\n var _range2 = _slicedToArray(_range, 2);\n startAngle = _range2[0];\n endAngle = _range2[1];\n }\n var _parseScale = parseScale(axis, chartName),\n realScaleType = _parseScale.realScaleType,\n scale = _parseScale.scale;\n scale.domain(domain).range(range);\n checkDomainOfScale(scale);\n var ticks = getTicksOfScale(scale, _objectSpread(_objectSpread({}, axis), {}, {\n realScaleType: realScaleType\n }));\n var finalAxis = _objectSpread(_objectSpread(_objectSpread({}, axis), ticks), {}, {\n range: range,\n radius: outerRadius,\n realScaleType: realScaleType,\n scale: scale,\n cx: cx,\n cy: cy,\n innerRadius: innerRadius,\n outerRadius: outerRadius,\n startAngle: startAngle,\n endAngle: endAngle\n });\n return _objectSpread(_objectSpread({}, result), {}, _defineProperty({}, id, finalAxis));\n }, {});\n};\nexport var distanceBetweenPoints = function distanceBetweenPoints(point, anotherPoint) {\n var x1 = point.x,\n y1 = point.y;\n var x2 = anotherPoint.x,\n y2 = anotherPoint.y;\n return Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2));\n};\nexport var getAngleOfPoint = function getAngleOfPoint(_ref, _ref2) {\n var x = _ref.x,\n y = _ref.y;\n var cx = _ref2.cx,\n cy = _ref2.cy;\n var radius = distanceBetweenPoints({\n x: x,\n y: y\n }, {\n x: cx,\n y: cy\n });\n if (radius <= 0) {\n return {\n radius: radius\n };\n }\n var cos = (x - cx) / radius;\n var angleInRadian = Math.acos(cos);\n if (y > cy) {\n angleInRadian = 2 * Math.PI - angleInRadian;\n }\n return {\n radius: radius,\n angle: radianToDegree(angleInRadian),\n angleInRadian: angleInRadian\n };\n};\nexport var formatAngleOfSector = function formatAngleOfSector(_ref3) {\n var startAngle = _ref3.startAngle,\n endAngle = _ref3.endAngle;\n var startCnt = Math.floor(startAngle / 360);\n var endCnt = Math.floor(endAngle / 360);\n var min = Math.min(startCnt, endCnt);\n return {\n startAngle: startAngle - min * 360,\n endAngle: endAngle - min * 360\n };\n};\nvar reverseFormatAngleOfSetor = function reverseFormatAngleOfSetor(angle, _ref4) {\n var startAngle = _ref4.startAngle,\n endAngle = _ref4.endAngle;\n var startCnt = Math.floor(startAngle / 360);\n var endCnt = Math.floor(endAngle / 360);\n var min = Math.min(startCnt, endCnt);\n return angle + min * 360;\n};\nexport var inRangeOfSector = function inRangeOfSector(_ref5, sector) {\n var x = _ref5.x,\n y = _ref5.y;\n var _getAngleOfPoint = getAngleOfPoint({\n x: x,\n y: y\n }, sector),\n radius = _getAngleOfPoint.radius,\n angle = _getAngleOfPoint.angle;\n var innerRadius = sector.innerRadius,\n outerRadius = sector.outerRadius;\n if (radius < innerRadius || radius > outerRadius) {\n return false;\n }\n if (radius === 0) {\n return true;\n }\n var _formatAngleOfSector = formatAngleOfSector(sector),\n startAngle = _formatAngleOfSector.startAngle,\n endAngle = _formatAngleOfSector.endAngle;\n var formatAngle = angle;\n var inRange;\n if (startAngle <= endAngle) {\n while (formatAngle > endAngle) {\n formatAngle -= 360;\n }\n while (formatAngle < startAngle) {\n formatAngle += 360;\n }\n inRange = formatAngle >= startAngle && formatAngle <= endAngle;\n } else {\n while (formatAngle > startAngle) {\n formatAngle -= 360;\n }\n while (formatAngle < endAngle) {\n formatAngle += 360;\n }\n inRange = formatAngle >= endAngle && formatAngle <= startAngle;\n }\n if (inRange) {\n return _objectSpread(_objectSpread({}, sector), {}, {\n radius: radius,\n angle: reverseFormatAngleOfSetor(formatAngle, sector)\n });\n }\n return null;\n};","import _isObject from \"lodash/isObject\";\nimport _isFunction from \"lodash/isFunction\";\nimport _isString from \"lodash/isString\";\nimport _get from \"lodash/get\";\nimport _isNil from \"lodash/isNil\";\nimport _isArray from \"lodash/isArray\";\nvar _excluded = [\"children\"],\n _excluded2 = [\"children\"];\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nimport { Children, isValidElement } from 'react';\nimport { isFragment } from 'react-is';\nimport { isNumber } from './DataUtils';\nimport { shallowEqual } from './ShallowEqual';\nimport { FilteredElementKeyMap, SVGElementPropKeys, EventKeys } from './types';\nvar REACT_BROWSER_EVENT_MAP = {\n click: 'onClick',\n mousedown: 'onMouseDown',\n mouseup: 'onMouseUp',\n mouseover: 'onMouseOver',\n mousemove: 'onMouseMove',\n mouseout: 'onMouseOut',\n mouseenter: 'onMouseEnter',\n mouseleave: 'onMouseLeave',\n touchcancel: 'onTouchCancel',\n touchend: 'onTouchEnd',\n touchmove: 'onTouchMove',\n touchstart: 'onTouchStart'\n};\nexport var SCALE_TYPES = ['auto', 'linear', 'pow', 'sqrt', 'log', 'identity', 'time', 'band', 'point', 'ordinal', 'quantile', 'quantize', 'utc', 'sequential', 'threshold'];\nexport var LEGEND_TYPES = ['plainline', 'line', 'square', 'rect', 'circle', 'cross', 'diamond', 'star', 'triangle', 'wye', 'none'];\nexport var TOOLTIP_TYPES = ['none'];\n\n/**\n * Get the display name of a component\n * @param {Object} Comp Specified Component\n * @return {String} Display name of Component\n */\nexport var getDisplayName = function getDisplayName(Comp) {\n if (typeof Comp === 'string') {\n return Comp;\n }\n if (!Comp) {\n return '';\n }\n return Comp.displayName || Comp.name || 'Component';\n};\n\n// `toArray` gets called multiple times during the render\n// so we can memoize last invocation (since reference to `children` is the same)\nvar lastChildren = null;\nvar lastResult = null;\nexport var toArray = function toArray(children) {\n if (children === lastChildren && _isArray(lastResult)) {\n return lastResult;\n }\n var result = [];\n Children.forEach(children, function (child) {\n if (_isNil(child)) return;\n if (isFragment(child)) {\n result = result.concat(toArray(child.props.children));\n } else {\n result.push(child);\n }\n });\n lastResult = result;\n lastChildren = children;\n return result;\n};\n\n/*\n * Find and return all matched children by type.\n * `type` must be a React.ComponentType\n */\nexport function findAllByType(children, type) {\n var result = [];\n var types = [];\n if (_isArray(type)) {\n types = type.map(function (t) {\n return getDisplayName(t);\n });\n } else {\n types = [getDisplayName(type)];\n }\n toArray(children).forEach(function (child) {\n var childType = _get(child, 'type.displayName') || _get(child, 'type.name');\n if (types.indexOf(childType) !== -1) {\n result.push(child);\n }\n });\n return result;\n}\n\n/*\n * Return the first matched child by type, return null otherwise.\n * `type` must be a React.ComponentType\n */\nexport function findChildByType(children, type) {\n var result = findAllByType(children, type);\n return result && result[0];\n}\n\n/*\n * Create a new array of children excluding the ones matched the type\n */\nexport var withoutType = function withoutType(children, type) {\n var newChildren = [];\n var types;\n if (_isArray(type)) {\n types = type.map(function (t) {\n return getDisplayName(t);\n });\n } else {\n types = [getDisplayName(type)];\n }\n toArray(children).forEach(function (child) {\n var displayName = _get(child, 'type.displayName');\n if (displayName && types.indexOf(displayName) !== -1) {\n return;\n }\n newChildren.push(child);\n });\n return newChildren;\n};\n\n/**\n * validate the width and height props of a chart element\n * @param {Object} el A chart element\n * @return {Boolean} true If the props width and height are number, and greater than 0\n */\nexport var validateWidthHeight = function validateWidthHeight(el) {\n if (!el || !el.props) {\n return false;\n }\n var _el$props = el.props,\n width = _el$props.width,\n height = _el$props.height;\n if (!isNumber(width) || width <= 0 || !isNumber(height) || height <= 0) {\n return false;\n }\n return true;\n};\nvar SVG_TAGS = ['a', 'altGlyph', 'altGlyphDef', 'altGlyphItem', 'animate', 'animateColor', 'animateMotion', 'animateTransform', 'circle', 'clipPath', 'color-profile', 'cursor', 'defs', 'desc', 'ellipse', 'feBlend', 'feColormatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence', 'filter', 'font', 'font-face', 'font-face-format', 'font-face-name', 'font-face-url', 'foreignObject', 'g', 'glyph', 'glyphRef', 'hkern', 'image', 'line', 'lineGradient', 'marker', 'mask', 'metadata', 'missing-glyph', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'script', 'set', 'stop', 'style', 'svg', 'switch', 'symbol', 'text', 'textPath', 'title', 'tref', 'tspan', 'use', 'view', 'vkern'];\nvar isSvgElement = function isSvgElement(child) {\n return child && child.type && _isString(child.type) && SVG_TAGS.indexOf(child.type) >= 0;\n};\nexport var isDotProps = function isDotProps(dot) {\n return dot && _typeof(dot) === 'object' && 'cx' in dot && 'cy' in dot && 'r' in dot;\n};\n\n/**\n * Checks if the property is valid to spread onto an SVG element or onto a specific component\n * @param {unknown} property property value currently being compared\n * @param {string} key property key currently being compared\n * @param {boolean} includeEvents if events are included in spreadable props\n * @param {boolean} svgElementType checks against map of SVG element types to attributes\n * @returns {boolean} is prop valid\n */\nexport var isValidSpreadableProp = function isValidSpreadableProp(property, key, includeEvents, svgElementType) {\n var _FilteredElementKeyMa;\n /**\n * If the svg element type is explicitly included, check against the filtered element key map\n * to determine if there are attributes that should only exist on that element type.\n * @todo Add an internal cjs version of https://github.com/wooorm/svg-element-attributes for full coverage.\n */\n var matchingElementTypeKeys = (_FilteredElementKeyMa = FilteredElementKeyMap === null || FilteredElementKeyMap === void 0 ? void 0 : FilteredElementKeyMap[svgElementType]) !== null && _FilteredElementKeyMa !== void 0 ? _FilteredElementKeyMa : [];\n return !_isFunction(property) && (svgElementType && matchingElementTypeKeys.includes(key) || SVGElementPropKeys.includes(key)) || includeEvents && EventKeys.includes(key);\n};\n\n/**\n * Filter all the svg elements of children\n * @param {Array} children The children of a react element\n * @return {Array} All the svg elements\n */\nexport var filterSvgElements = function filterSvgElements(children) {\n var svgElements = [];\n toArray(children).forEach(function (entry) {\n if (isSvgElement(entry)) {\n svgElements.push(entry);\n }\n });\n return svgElements;\n};\nexport var filterProps = function filterProps(props, includeEvents, svgElementType) {\n if (!props || typeof props === 'function' || typeof props === 'boolean') {\n return null;\n }\n var inputProps = props;\n if ( /*#__PURE__*/isValidElement(props)) {\n inputProps = props.props;\n }\n if (!_isObject(inputProps)) {\n return null;\n }\n var out = {};\n\n /**\n * Props are blindly spread onto SVG elements. This loop filters out properties that we don't want to spread.\n * Items filtered out are as follows:\n * - functions in properties that are SVG attributes (functions are included when includeEvents is true)\n * - props that are SVG attributes but don't matched the passed svgElementType\n * - any prop that is not in SVGElementPropKeys (or in EventKeys if includeEvents is true)\n */\n Object.keys(inputProps).forEach(function (key) {\n var _inputProps;\n if (isValidSpreadableProp((_inputProps = inputProps) === null || _inputProps === void 0 ? void 0 : _inputProps[key], key, includeEvents, svgElementType)) {\n out[key] = inputProps[key];\n }\n });\n return out;\n};\n\n/**\n * Wether props of children changed\n * @param {Object} nextChildren The latest children\n * @param {Object} prevChildren The prev children\n * @return {Boolean} equal or not\n */\nexport var isChildrenEqual = function isChildrenEqual(nextChildren, prevChildren) {\n if (nextChildren === prevChildren) {\n return true;\n }\n var count = Children.count(nextChildren);\n if (count !== Children.count(prevChildren)) {\n return false;\n }\n if (count === 0) {\n return true;\n }\n if (count === 1) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return isSingleChildEqual(_isArray(nextChildren) ? nextChildren[0] : nextChildren, _isArray(prevChildren) ? prevChildren[0] : prevChildren);\n }\n for (var i = 0; i < count; i++) {\n var nextChild = nextChildren[i];\n var prevChild = prevChildren[i];\n if (_isArray(nextChild) || _isArray(prevChild)) {\n if (!isChildrenEqual(nextChild, prevChild)) {\n return false;\n }\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n } else if (!isSingleChildEqual(nextChild, prevChild)) {\n return false;\n }\n }\n return true;\n};\nexport var isSingleChildEqual = function isSingleChildEqual(nextChild, prevChild) {\n if (_isNil(nextChild) && _isNil(prevChild)) {\n return true;\n }\n if (!_isNil(nextChild) && !_isNil(prevChild)) {\n var _ref = nextChild.props || {},\n nextChildren = _ref.children,\n nextProps = _objectWithoutProperties(_ref, _excluded);\n var _ref2 = prevChild.props || {},\n prevChildren = _ref2.children,\n prevProps = _objectWithoutProperties(_ref2, _excluded2);\n if (nextChildren && prevChildren) {\n return shallowEqual(nextProps, prevProps) && isChildrenEqual(nextChildren, prevChildren);\n }\n if (!nextChildren && !prevChildren) {\n return shallowEqual(nextProps, prevProps);\n }\n return false;\n }\n return false;\n};\nexport var renderByOrder = function renderByOrder(children, renderMap) {\n var elements = [];\n var record = {};\n toArray(children).forEach(function (child, index) {\n if (isSvgElement(child)) {\n elements.push(child);\n } else if (child) {\n var displayName = getDisplayName(child.type);\n var _ref3 = renderMap[displayName] || {},\n handler = _ref3.handler,\n once = _ref3.once;\n if (handler && (!once || !record[displayName])) {\n var results = handler(child, displayName, index);\n elements.push(results);\n record[displayName] = true;\n }\n }\n });\n return elements;\n};\nexport var getReactEventByType = function getReactEventByType(e) {\n var type = e && e.type;\n if (type && REACT_BROWSER_EVENT_MAP[type]) {\n return REACT_BROWSER_EVENT_MAP[type];\n }\n return null;\n};\nexport var parseChildIndex = function parseChildIndex(child, children) {\n return toArray(children).indexOf(child);\n};","export function shallowEqual(a, b) {\n /* eslint-disable no-restricted-syntax */\n for (var key in a) {\n if ({}.hasOwnProperty.call(a, key) && (!{}.hasOwnProperty.call(b, key) || a[key] !== b[key])) {\n return false;\n }\n }\n for (var _key in b) {\n if ({}.hasOwnProperty.call(b, _key) && !{}.hasOwnProperty.call(a, _key)) {\n return false;\n }\n }\n return true;\n}","import _isObject from \"lodash/isObject\";\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nimport { isValidElement } from 'react';\n\n//\n// Event Handler Types -- Copied from @types/react/index.d.ts and adapted for Props.\n//\nvar SVGContainerPropKeys = ['viewBox', 'children'];\nexport var SVGElementPropKeys = ['aria-activedescendant', 'aria-atomic', 'aria-autocomplete', 'aria-busy', 'aria-checked', 'aria-colcount', 'aria-colindex', 'aria-colspan', 'aria-controls', 'aria-current', 'aria-describedby', 'aria-details', 'aria-disabled', 'aria-errormessage', 'aria-expanded', 'aria-flowto', 'aria-haspopup', 'aria-hidden', 'aria-invalid', 'aria-keyshortcuts', 'aria-label', 'aria-labelledby', 'aria-level', 'aria-live', 'aria-modal', 'aria-multiline', 'aria-multiselectable', 'aria-orientation', 'aria-owns', 'aria-placeholder', 'aria-posinset', 'aria-pressed', 'aria-readonly', 'aria-relevant', 'aria-required', 'aria-roledescription', 'aria-rowcount', 'aria-rowindex', 'aria-rowspan', 'aria-selected', 'aria-setsize', 'aria-sort', 'aria-valuemax', 'aria-valuemin', 'aria-valuenow', 'aria-valuetext', 'className', 'color', 'height', 'id', 'lang', 'max', 'media', 'method', 'min', 'name', 'style',\n/*\n * removed 'type' SVGElementPropKey because we do not currently use any SVG elements\n * that can use it and it conflicts with the recharts prop 'type'\n * https://github.com/recharts/recharts/pull/3327\n * https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/type\n */\n// 'type',\n'target', 'width', 'role', 'tabIndex', 'accentHeight', 'accumulate', 'additive', 'alignmentBaseline', 'allowReorder', 'alphabetic', 'amplitude', 'arabicForm', 'ascent', 'attributeName', 'attributeType', 'autoReverse', 'azimuth', 'baseFrequency', 'baselineShift', 'baseProfile', 'bbox', 'begin', 'bias', 'by', 'calcMode', 'capHeight', 'clip', 'clipPath', 'clipPathUnits', 'clipRule', 'colorInterpolation', 'colorInterpolationFilters', 'colorProfile', 'colorRendering', 'contentScriptType', 'contentStyleType', 'cursor', 'cx', 'cy', 'd', 'decelerate', 'descent', 'diffuseConstant', 'direction', 'display', 'divisor', 'dominantBaseline', 'dur', 'dx', 'dy', 'edgeMode', 'elevation', 'enableBackground', 'end', 'exponent', 'externalResourcesRequired', 'fill', 'fillOpacity', 'fillRule', 'filter', 'filterRes', 'filterUnits', 'floodColor', 'floodOpacity', 'focusable', 'fontFamily', 'fontSize', 'fontSizeAdjust', 'fontStretch', 'fontStyle', 'fontVariant', 'fontWeight', 'format', 'from', 'fx', 'fy', 'g1', 'g2', 'glyphName', 'glyphOrientationHorizontal', 'glyphOrientationVertical', 'glyphRef', 'gradientTransform', 'gradientUnits', 'hanging', 'horizAdvX', 'horizOriginX', 'href', 'ideographic', 'imageRendering', 'in2', 'in', 'intercept', 'k1', 'k2', 'k3', 'k4', 'k', 'kernelMatrix', 'kernelUnitLength', 'kerning', 'keyPoints', 'keySplines', 'keyTimes', 'lengthAdjust', 'letterSpacing', 'lightingColor', 'limitingConeAngle', 'local', 'markerEnd', 'markerHeight', 'markerMid', 'markerStart', 'markerUnits', 'markerWidth', 'mask', 'maskContentUnits', 'maskUnits', 'mathematical', 'mode', 'numOctaves', 'offset', 'opacity', 'operator', 'order', 'orient', 'orientation', 'origin', 'overflow', 'overlinePosition', 'overlineThickness', 'paintOrder', 'panose1', 'pathLength', 'patternContentUnits', 'patternTransform', 'patternUnits', 'pointerEvents', 'pointsAtX', 'pointsAtY', 'pointsAtZ', 'preserveAlpha', 'preserveAspectRatio', 'primitiveUnits', 'r', 'radius', 'refX', 'refY', 'renderingIntent', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'restart', 'result', 'rotate', 'rx', 'ry', 'seed', 'shapeRendering', 'slope', 'spacing', 'specularConstant', 'specularExponent', 'speed', 'spreadMethod', 'startOffset', 'stdDeviation', 'stemh', 'stemv', 'stitchTiles', 'stopColor', 'stopOpacity', 'strikethroughPosition', 'strikethroughThickness', 'string', 'stroke', 'strokeDasharray', 'strokeDashoffset', 'strokeLinecap', 'strokeLinejoin', 'strokeMiterlimit', 'strokeOpacity', 'strokeWidth', 'surfaceScale', 'systemLanguage', 'tableValues', 'targetX', 'targetY', 'textAnchor', 'textDecoration', 'textLength', 'textRendering', 'to', 'transform', 'u1', 'u2', 'underlinePosition', 'underlineThickness', 'unicode', 'unicodeBidi', 'unicodeRange', 'unitsPerEm', 'vAlphabetic', 'values', 'vectorEffect', 'version', 'vertAdvY', 'vertOriginX', 'vertOriginY', 'vHanging', 'vIdeographic', 'viewTarget', 'visibility', 'vMathematical', 'widths', 'wordSpacing', 'writingMode', 'x1', 'x2', 'x', 'xChannelSelector', 'xHeight', 'xlinkActuate', 'xlinkArcrole', 'xlinkHref', 'xlinkRole', 'xlinkShow', 'xlinkTitle', 'xlinkType', 'xmlBase', 'xmlLang', 'xmlns', 'xmlnsXlink', 'xmlSpace', 'y1', 'y2', 'y', 'yChannelSelector', 'z', 'zoomAndPan', 'ref', 'key', 'angle'];\nvar PolyElementKeys = ['points', 'pathLength'];\n\n/** svg element types that have specific attribute filtration requirements */\n\n/** map of svg element types to unique svg attributes that belong to that element */\nexport var FilteredElementKeyMap = {\n svg: SVGContainerPropKeys,\n polygon: PolyElementKeys,\n polyline: PolyElementKeys\n};\nexport var EventKeys = ['dangerouslySetInnerHTML', 'onCopy', 'onCopyCapture', 'onCut', 'onCutCapture', 'onPaste', 'onPasteCapture', 'onCompositionEnd', 'onCompositionEndCapture', 'onCompositionStart', 'onCompositionStartCapture', 'onCompositionUpdate', 'onCompositionUpdateCapture', 'onFocus', 'onFocusCapture', 'onBlur', 'onBlurCapture', 'onChange', 'onChangeCapture', 'onBeforeInput', 'onBeforeInputCapture', 'onInput', 'onInputCapture', 'onReset', 'onResetCapture', 'onSubmit', 'onSubmitCapture', 'onInvalid', 'onInvalidCapture', 'onLoad', 'onLoadCapture', 'onError', 'onErrorCapture', 'onKeyDown', 'onKeyDownCapture', 'onKeyPress', 'onKeyPressCapture', 'onKeyUp', 'onKeyUpCapture', 'onAbort', 'onAbortCapture', 'onCanPlay', 'onCanPlayCapture', 'onCanPlayThrough', 'onCanPlayThroughCapture', 'onDurationChange', 'onDurationChangeCapture', 'onEmptied', 'onEmptiedCapture', 'onEncrypted', 'onEncryptedCapture', 'onEnded', 'onEndedCapture', 'onLoadedData', 'onLoadedDataCapture', 'onLoadedMetadata', 'onLoadedMetadataCapture', 'onLoadStart', 'onLoadStartCapture', 'onPause', 'onPauseCapture', 'onPlay', 'onPlayCapture', 'onPlaying', 'onPlayingCapture', 'onProgress', 'onProgressCapture', 'onRateChange', 'onRateChangeCapture', 'onSeeked', 'onSeekedCapture', 'onSeeking', 'onSeekingCapture', 'onStalled', 'onStalledCapture', 'onSuspend', 'onSuspendCapture', 'onTimeUpdate', 'onTimeUpdateCapture', 'onVolumeChange', 'onVolumeChangeCapture', 'onWaiting', 'onWaitingCapture', 'onAuxClick', 'onAuxClickCapture', 'onClick', 'onClickCapture', 'onContextMenu', 'onContextMenuCapture', 'onDoubleClick', 'onDoubleClickCapture', 'onDrag', 'onDragCapture', 'onDragEnd', 'onDragEndCapture', 'onDragEnter', 'onDragEnterCapture', 'onDragExit', 'onDragExitCapture', 'onDragLeave', 'onDragLeaveCapture', 'onDragOver', 'onDragOverCapture', 'onDragStart', 'onDragStartCapture', 'onDrop', 'onDropCapture', 'onMouseDown', 'onMouseDownCapture', 'onMouseEnter', 'onMouseLeave', 'onMouseMove', 'onMouseMoveCapture', 'onMouseOut', 'onMouseOutCapture', 'onMouseOver', 'onMouseOverCapture', 'onMouseUp', 'onMouseUpCapture', 'onSelect', 'onSelectCapture', 'onTouchCancel', 'onTouchCancelCapture', 'onTouchEnd', 'onTouchEndCapture', 'onTouchMove', 'onTouchMoveCapture', 'onTouchStart', 'onTouchStartCapture', 'onPointerDown', 'onPointerDownCapture', 'onPointerMove', 'onPointerMoveCapture', 'onPointerUp', 'onPointerUpCapture', 'onPointerCancel', 'onPointerCancelCapture', 'onPointerEnter', 'onPointerEnterCapture', 'onPointerLeave', 'onPointerLeaveCapture', 'onPointerOver', 'onPointerOverCapture', 'onPointerOut', 'onPointerOutCapture', 'onGotPointerCapture', 'onGotPointerCaptureCapture', 'onLostPointerCapture', 'onLostPointerCaptureCapture', 'onScroll', 'onScrollCapture', 'onWheel', 'onWheelCapture', 'onAnimationStart', 'onAnimationStartCapture', 'onAnimationEnd', 'onAnimationEndCapture', 'onAnimationIteration', 'onAnimationIterationCapture', 'onTransitionEnd', 'onTransitionEndCapture'];\n\n// Animation Types => TODO: Should be moved when react-smooth is typescriptified.\n\n/** the offset of a chart, which define the blank space all around */\n\n/** The domain of axis */\n\n/** The props definition of base axis */\n\nexport var adaptEventHandlers = function adaptEventHandlers(props, newHandler) {\n if (!props || typeof props === 'function' || typeof props === 'boolean') {\n return null;\n }\n var inputProps = props;\n if ( /*#__PURE__*/isValidElement(props)) {\n inputProps = props.props;\n }\n if (!_isObject(inputProps)) {\n return null;\n }\n var out = {};\n Object.keys(inputProps).forEach(function (key) {\n if (EventKeys.includes(key)) {\n out[key] = newHandler || function (e) {\n return inputProps[key](inputProps, e);\n };\n }\n });\n return out;\n};\nvar getEventHandlerOfChild = function getEventHandlerOfChild(originalHandler, data, index) {\n return function (e) {\n originalHandler(data, index, e);\n return null;\n };\n};\nexport var adaptEventsOfChild = function adaptEventsOfChild(props, data, index) {\n if (!_isObject(props) || _typeof(props) !== 'object') {\n return null;\n }\n var out = null;\n Object.keys(props).forEach(function (key) {\n var item = props[key];\n if (EventKeys.includes(key) && typeof item === 'function') {\n if (!out) out = {};\n out[key] = getEventHandlerOfChild(item, data, index);\n }\n });\n return out;\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _postcssValueParser = require('postcss-value-parser');\n\nvar _postcssValueParser2 = _interopRequireDefault(_postcssValueParser);\n\nvar _parser = require('./parser');\n\nvar _reducer = require('./lib/reducer');\n\nvar _reducer2 = _interopRequireDefault(_reducer);\n\nvar _stringifier = require('./lib/stringifier');\n\nvar _stringifier2 = _interopRequireDefault(_stringifier);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// eslint-disable-line\nvar MATCH_CALC = /((?:\\-[a-z]+\\-)?calc)/;\n\nexports.default = function (value) {\n var precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 5;\n\n return (0, _postcssValueParser2.default)(value).walk(function (node) {\n // skip anything which isn't a calc() function\n if (node.type !== 'function' || !MATCH_CALC.test(node.value)) return;\n\n // stringify calc expression and produce an AST\n var contents = _postcssValueParser2.default.stringify(node.nodes);\n\n // skip constant() and env()\n if (contents.indexOf('constant') >= 0 || contents.indexOf('env') >= 0) return;\n\n var ast = _parser.parser.parse(contents);\n\n // reduce AST to its simplest form, that is, either to a single value\n // or a simplified calc expression\n var reducedAst = (0, _reducer2.default)(ast, precision);\n\n // stringify AST and write it back\n node.type = 'word';\n node.value = (0, _stringifier2.default)(node.value, reducedAst, precision);\n }, true).toString();\n};\n\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _cssUnitConverter = require('css-unit-converter');\n\nvar _cssUnitConverter2 = _interopRequireDefault(_cssUnitConverter);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction convertNodes(left, right, precision) {\n switch (left.type) {\n case 'LengthValue':\n case 'AngleValue':\n case 'TimeValue':\n case 'FrequencyValue':\n case 'ResolutionValue':\n return convertAbsoluteLength(left, right, precision);\n default:\n return { left: left, right: right };\n }\n}\n\nfunction convertAbsoluteLength(left, right, precision) {\n if (right.type === left.type) {\n right = {\n type: left.type,\n value: (0, _cssUnitConverter2.default)(right.value, right.unit, left.unit, precision),\n unit: left.unit\n };\n }\n return { left: left, right: right };\n}\n\nexports.default = convertNodes;\nmodule.exports = exports['default'];","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.flip = flip;\n\nvar _convert = require(\"./convert\");\n\nvar _convert2 = _interopRequireDefault(_convert);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction reduce(node, precision) {\n if (node.type === \"MathExpression\") return reduceMathExpression(node, precision);\n if (node.type === \"Calc\") return reduce(node.value, precision);\n\n return node;\n}\n\nfunction isEqual(left, right) {\n return left.type === right.type && left.value === right.value;\n}\n\nfunction isValueType(type) {\n switch (type) {\n case 'LengthValue':\n case 'AngleValue':\n case 'TimeValue':\n case 'FrequencyValue':\n case 'ResolutionValue':\n case 'EmValue':\n case 'ExValue':\n case 'ChValue':\n case 'RemValue':\n case 'VhValue':\n case 'VwValue':\n case 'VminValue':\n case 'VmaxValue':\n case 'PercentageValue':\n case 'Value':\n return true;\n }\n return false;\n}\n\nfunction convertMathExpression(node, precision) {\n var nodes = (0, _convert2.default)(node.left, node.right, precision);\n var left = reduce(nodes.left, precision);\n var right = reduce(nodes.right, precision);\n\n if (left.type === \"MathExpression\" && right.type === \"MathExpression\") {\n\n if (left.operator === '/' && right.operator === '*' || left.operator === '-' && right.operator === '+' || left.operator === '*' && right.operator === '/' || left.operator === '+' && right.operator === '-') {\n\n if (isEqual(left.right, right.right)) nodes = (0, _convert2.default)(left.left, right.left, precision);else if (isEqual(left.right, right.left)) nodes = (0, _convert2.default)(left.left, right.right, precision);\n\n left = reduce(nodes.left, precision);\n right = reduce(nodes.right, precision);\n }\n }\n\n node.left = left;\n node.right = right;\n return node;\n}\n\nfunction flip(operator) {\n return operator === '+' ? '-' : '+';\n}\n\nfunction flipValue(node) {\n if (isValueType(node.type)) node.value = -node.value;else if (node.type == 'MathExpression') {\n node.left = flipValue(node.left);\n node.right = flipValue(node.right);\n }\n return node;\n}\n\nfunction reduceAddSubExpression(node, precision) {\n var _node = node,\n left = _node.left,\n right = _node.right,\n op = _node.operator;\n\n\n if (left.type === 'CssVariable' || right.type === 'CssVariable') return node;\n\n // something + 0 => something\n // something - 0 => something\n if (right.value === 0) return left;\n\n // 0 + something => something\n if (left.value === 0 && op === \"+\") return right;\n\n // 0 - something => -something\n if (left.value === 0 && op === \"-\") return flipValue(right);\n\n // value + value\n // value - value\n if (left.type === right.type && isValueType(left.type)) {\n node = Object.assign({}, left);\n if (op === \"+\") node.value = left.value + right.value;else node.value = left.value - right.value;\n }\n\n // value (expr)\n if (isValueType(left.type) && (right.operator === '+' || right.operator === '-') && right.type === 'MathExpression') {\n // value + (value + something) => (value + value) + something\n // value + (value - something) => (value + value) - something\n // value - (value + something) => (value - value) - something\n // value - (value - something) => (value - value) + something\n if (left.type === right.left.type) {\n node = Object.assign({}, node);\n node.left = reduce({\n type: 'MathExpression',\n operator: op,\n left: left,\n right: right.left\n }, precision);\n node.right = right.right;\n node.operator = op === '-' ? flip(right.operator) : right.operator;\n return reduce(node, precision);\n }\n // value + (something + value) => (value + value) + something\n // value + (something - value) => (value - value) + something\n // value - (something + value) => (value - value) - something\n // value - (something - value) => (value + value) - something\n else if (left.type === right.right.type) {\n node = Object.assign({}, node);\n node.left = reduce({\n type: 'MathExpression',\n operator: op === '-' ? flip(right.operator) : right.operator,\n left: left,\n right: right.right\n }, precision);\n node.right = right.left;\n return reduce(node, precision);\n }\n }\n\n // (expr) value\n if (left.type === 'MathExpression' && (left.operator === '+' || left.operator === '-') && isValueType(right.type)) {\n // (value + something) + value => (value + value) + something\n // (value - something) + value => (value + value) - something\n // (value + something) - value => (value - value) + something\n // (value - something) - value => (value - value) - something\n if (right.type === left.left.type) {\n node = Object.assign({}, left);\n node.left = reduce({\n type: 'MathExpression',\n operator: op,\n left: left.left,\n right: right\n }, precision);\n return reduce(node, precision);\n }\n // (something + value) + value => something + (value + value)\n // (something - value1) + value2 => something - (value2 - value1)\n // (something + value) - value => something + (value - value)\n // (something - value) - value => something - (value + value)\n else if (right.type === left.right.type) {\n node = Object.assign({}, left);\n if (left.operator === '-') {\n node.right = reduce({\n type: 'MathExpression',\n operator: op === '-' ? '+' : '-',\n left: right,\n right: left.right\n }, precision);\n node.operator = op === '-' ? '-' : '+';\n } else {\n node.right = reduce({\n type: 'MathExpression',\n operator: op,\n left: left.right,\n right: right\n }, precision);\n }\n if (node.right.value < 0) {\n node.right.value *= -1;\n node.operator = node.operator === '-' ? '+' : '-';\n }\n return reduce(node, precision);\n }\n }\n return node;\n}\n\nfunction reduceDivisionExpression(node, precision) {\n if (!isValueType(node.right.type)) return node;\n\n if (node.right.type !== 'Value') throw new Error(\"Cannot divide by \\\"\" + node.right.unit + \"\\\", number expected\");\n\n if (node.right.value === 0) throw new Error('Cannot divide by zero');\n\n // (expr) / value\n if (node.left.type === 'MathExpression') {\n if (isValueType(node.left.left.type) && isValueType(node.left.right.type)) {\n node.left.left.value /= node.right.value;\n node.left.right.value /= node.right.value;\n return reduce(node.left, precision);\n }\n return node;\n }\n // something / value\n else if (isValueType(node.left.type)) {\n node.left.value /= node.right.value;\n return node.left;\n }\n return node;\n}\n\nfunction reduceMultiplicationExpression(node) {\n // (expr) * value\n if (node.left.type === 'MathExpression' && node.right.type === 'Value') {\n if (isValueType(node.left.left.type) && isValueType(node.left.right.type)) {\n node.left.left.value *= node.right.value;\n node.left.right.value *= node.right.value;\n return node.left;\n }\n }\n // something * value\n else if (isValueType(node.left.type) && node.right.type === 'Value') {\n node.left.value *= node.right.value;\n return node.left;\n }\n // value * (expr)\n else if (node.left.type === 'Value' && node.right.type === 'MathExpression') {\n if (isValueType(node.right.left.type) && isValueType(node.right.right.type)) {\n node.right.left.value *= node.left.value;\n node.right.right.value *= node.left.value;\n return node.right;\n }\n }\n // value * something\n else if (node.left.type === 'Value' && isValueType(node.right.type)) {\n node.right.value *= node.left.value;\n return node.right;\n }\n return node;\n}\n\nfunction reduceMathExpression(node, precision) {\n node = convertMathExpression(node, precision);\n\n switch (node.operator) {\n case \"+\":\n case \"-\":\n return reduceAddSubExpression(node, precision);\n case \"/\":\n return reduceDivisionExpression(node, precision);\n case \"*\":\n return reduceMultiplicationExpression(node);\n }\n return node;\n}\n\nexports.default = reduce;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (calc, node, precision) {\n var str = stringify(node, precision);\n\n if (node.type === \"MathExpression\") {\n // if calc expression couldn't be resolved to a single value, re-wrap it as\n // a calc()\n str = calc + \"(\" + str + \")\";\n }\n return str;\n};\n\nvar _reducer = require(\"./reducer\");\n\nvar order = {\n \"*\": 0,\n \"/\": 0,\n \"+\": 1,\n \"-\": 1\n};\n\nfunction round(value, prec) {\n if (prec !== false) {\n var precision = Math.pow(10, prec);\n return Math.round(value * precision) / precision;\n }\n return value;\n}\n\nfunction stringify(node, prec) {\n switch (node.type) {\n case \"MathExpression\":\n {\n var left = node.left,\n right = node.right,\n op = node.operator;\n\n var str = \"\";\n\n if (left.type === 'MathExpression' && order[op] < order[left.operator]) str += \"(\" + stringify(left, prec) + \")\";else str += stringify(left, prec);\n\n str += \" \" + node.operator + \" \";\n\n if (right.type === 'MathExpression' && order[op] < order[right.operator]) {\n str += \"(\" + stringify(right, prec) + \")\";\n } else if (right.type === 'MathExpression' && op === \"-\" && [\"+\", \"-\"].includes(right.operator)) {\n // fix #52 : a-(b+c) = a-b-c\n right.operator = (0, _reducer.flip)(right.operator);\n str += stringify(right, prec);\n } else {\n str += stringify(right, prec);\n }\n\n return str;\n }\n case \"Value\":\n return round(node.value, prec);\n case 'CssVariable':\n if (node.fallback) {\n return \"var(\" + node.value + \", \" + stringify(node.fallback, prec, true) + \")\";\n }\n return \"var(\" + node.value + \")\";\n case 'Calc':\n if (node.prefix) {\n return \"-\" + node.prefix + \"-calc(\" + stringify(node.value, prec) + \")\";\n }\n return \"calc(\" + stringify(node.value, prec) + \")\";\n default:\n return round(node.value, prec) + node.unit;\n }\n}\n\nmodule.exports = exports[\"default\"];","\n/* parser generated by jison 0.6.1-215 */\n\n/*\n * Returns a Parser object of the following structure:\n *\n * Parser: {\n * yy: {} The so-called \"shared state\" or rather the *source* of it;\n * the real \"shared state\" `yy` passed around to\n * the rule actions, etc. is a derivative/copy of this one,\n * not a direct reference!\n * }\n *\n * Parser.prototype: {\n * yy: {},\n * EOF: 1,\n * TERROR: 2,\n *\n * trace: function(errorMessage, ...),\n *\n * JisonParserError: function(msg, hash),\n *\n * quoteName: function(name),\n * Helper function which can be overridden by user code later on: put suitable\n * quotes around literal IDs in a description string.\n *\n * originalQuoteName: function(name),\n * The basic quoteName handler provided by JISON.\n * `cleanupAfterParse()` will clean up and reset `quoteName()` to reference this function\n * at the end of the `parse()`.\n *\n * describeSymbol: function(symbol),\n * Return a more-or-less human-readable description of the given symbol, when\n * available, or the symbol itself, serving as its own 'description' for lack\n * of something better to serve up.\n *\n * Return NULL when the symbol is unknown to the parser.\n *\n * symbols_: {associative list: name ==> number},\n * terminals_: {associative list: number ==> name},\n * nonterminals: {associative list: rule-name ==> {associative list: number ==> rule-alt}},\n * terminal_descriptions_: (if there are any) {associative list: number ==> description},\n * productions_: [...],\n *\n * performAction: function parser__performAction(yytext, yyleng, yylineno, yyloc, yystate, yysp, yyvstack, yylstack, yystack, yysstack),\n *\n * The function parameters and `this` have the following value/meaning:\n * - `this` : reference to the `yyval` internal object, which has members (`$` and `_$`)\n * to store/reference the rule value `$$` and location info `@$`.\n *\n * One important thing to note about `this` a.k.a. `yyval`: every *reduce* action gets\n * to see the same object via the `this` reference, i.e. if you wish to carry custom\n * data from one reduce action through to the next within a single parse run, then you\n * may get nasty and use `yyval` a.k.a. `this` for storing you own semi-permanent data.\n *\n * `this.yy` is a direct reference to the `yy` shared state object.\n *\n * `%parse-param`-specified additional `parse()` arguments have been added to this `yy`\n * object at `parse()` start and are therefore available to the action code via the\n * same named `yy.xxxx` attributes (where `xxxx` represents a identifier name from\n * the %parse-param` list.\n *\n * - `yytext` : reference to the lexer value which belongs to the last lexer token used\n * to match this rule. This is *not* the look-ahead token, but the last token\n * that's actually part of this rule.\n *\n * Formulated another way, `yytext` is the value of the token immediately preceeding\n * the current look-ahead token.\n * Caveats apply for rules which don't require look-ahead, such as epsilon rules.\n *\n * - `yyleng` : ditto as `yytext`, only now for the lexer.yyleng value.\n *\n * - `yylineno`: ditto as `yytext`, only now for the lexer.yylineno value.\n *\n * - `yyloc` : ditto as `yytext`, only now for the lexer.yylloc lexer token location info.\n *\n * WARNING: since jison 0.4.18-186 this entry may be NULL/UNDEFINED instead\n * of an empty object when no suitable location info can be provided.\n *\n * - `yystate` : the current parser state number, used internally for dispatching and\n * executing the action code chunk matching the rule currently being reduced.\n *\n * - `yysp` : the current state stack position (a.k.a. 'stack pointer')\n *\n * This one comes in handy when you are going to do advanced things to the parser\n * stacks, all of which are accessible from your action code (see the next entries below).\n *\n * Also note that you can access this and other stack index values using the new double-hash\n * syntax, i.e. `##$ === ##0 === yysp`, while `##1` is the stack index for all things\n * related to the first rule term, just like you have `$1`, `@1` and `#1`.\n * This is made available to write very advanced grammar action rules, e.g. when you want\n * to investigate the parse state stack in your action code, which would, for example,\n * be relevant when you wish to implement error diagnostics and reporting schemes similar\n * to the work described here:\n *\n * + Pottier, F., 2016. Reachability and error diagnosis in LR(1) automata.\n * In Journées Francophones des Languages Applicatifs.\n *\n * + Jeffery, C.L., 2003. Generating LR syntax error messages from examples.\n * ACM Transactions on Programming Languages and Systems (TOPLAS), 25(5), pp.631–640.\n *\n * - `yyrulelength`: the current rule's term count, i.e. the number of entries occupied on the stack.\n *\n * This one comes in handy when you are going to do advanced things to the parser\n * stacks, all of which are accessible from your action code (see the next entries below).\n *\n * - `yyvstack`: reference to the parser value stack. Also accessed via the `$1` etc.\n * constructs.\n *\n * - `yylstack`: reference to the parser token location stack. Also accessed via\n * the `@1` etc. constructs.\n *\n * WARNING: since jison 0.4.18-186 this array MAY contain slots which are\n * UNDEFINED rather than an empty (location) object, when the lexer/parser\n * action code did not provide a suitable location info object when such a\n * slot was filled!\n *\n * - `yystack` : reference to the parser token id stack. Also accessed via the\n * `#1` etc. constructs.\n *\n * Note: this is a bit of a **white lie** as we can statically decode any `#n` reference to\n * its numeric token id value, hence that code wouldn't need the `yystack` but *you* might\n * want access this array for your own purposes, such as error analysis as mentioned above!\n *\n * Note that this stack stores the current stack of *tokens*, that is the sequence of\n * already parsed=reduced *nonterminals* (tokens representing rules) and *terminals*\n * (lexer tokens *shifted* onto the stack until the rule they belong to is found and\n * *reduced*.\n *\n * - `yysstack`: reference to the parser state stack. This one carries the internal parser\n * *states* such as the one in `yystate`, which are used to represent\n * the parser state machine in the *parse table*. *Very* *internal* stuff,\n * what can I say? If you access this one, you're clearly doing wicked things\n *\n * - `...` : the extra arguments you specified in the `%parse-param` statement in your\n * grammar definition file.\n *\n * table: [...],\n * State transition table\n * ----------------------\n *\n * index levels are:\n * - `state` --> hash table\n * - `symbol` --> action (number or array)\n *\n * If the `action` is an array, these are the elements' meaning:\n * - index [0]: 1 = shift, 2 = reduce, 3 = accept\n * - index [1]: GOTO `state`\n *\n * If the `action` is a number, it is the GOTO `state`\n *\n * defaultActions: {...},\n *\n * parseError: function(str, hash, ExceptionClass),\n * yyError: function(str, ...),\n * yyRecovering: function(),\n * yyErrOk: function(),\n * yyClearIn: function(),\n *\n * constructParseErrorInfo: function(error_message, exception_object, expected_token_set, is_recoverable),\n * Helper function **which will be set up during the first invocation of the `parse()` method**.\n * Produces a new errorInfo 'hash object' which can be passed into `parseError()`.\n * See it's use in this parser kernel in many places; example usage:\n *\n * var infoObj = parser.constructParseErrorInfo('fail!', null,\n * parser.collect_expected_token_set(state), true);\n * var retVal = parser.parseError(infoObj.errStr, infoObj, parser.JisonParserError);\n *\n * originalParseError: function(str, hash, ExceptionClass),\n * The basic `parseError` handler provided by JISON.\n * `cleanupAfterParse()` will clean up and reset `parseError()` to reference this function\n * at the end of the `parse()`.\n *\n * options: { ... parser %options ... },\n *\n * parse: function(input[, args...]),\n * Parse the given `input` and return the parsed value (or `true` when none was provided by\n * the root action, in which case the parser is acting as a *matcher*).\n * You MAY use the additional `args...` parameters as per `%parse-param` spec of this grammar:\n * these extra `args...` are added verbatim to the `yy` object reference as member variables.\n *\n * WARNING:\n * Parser's additional `args...` parameters (via `%parse-param`) MAY conflict with\n * any attributes already added to `yy` by the jison run-time;\n * when such a collision is detected an exception is thrown to prevent the generated run-time\n * from silently accepting this confusing and potentially hazardous situation!\n *\n * The lexer MAY add its own set of additional parameters (via the `%parse-param` line in\n * the lexer section of the grammar spec): these will be inserted in the `yy` shared state\n * object and any collision with those will be reported by the lexer via a thrown exception.\n *\n * cleanupAfterParse: function(resultValue, invoke_post_methods, do_not_nuke_errorinfos),\n * Helper function **which will be set up during the first invocation of the `parse()` method**.\n * This helper API is invoked at the end of the `parse()` call, unless an exception was thrown\n * and `%options no-try-catch` has been defined for this grammar: in that case this helper MAY\n * be invoked by calling user code to ensure the `post_parse` callbacks are invoked and\n * the internal parser gets properly garbage collected under these particular circumstances.\n *\n * yyMergeLocationInfo: function(first_index, last_index, first_yylloc, last_yylloc, dont_look_back),\n * Helper function **which will be set up during the first invocation of the `parse()` method**.\n * This helper API can be invoked to calculate a spanning `yylloc` location info object.\n *\n * Note: %epsilon rules MAY specify no `first_index` and `first_yylloc`, in which case\n * this function will attempt to obtain a suitable location marker by inspecting the location stack\n * backwards.\n *\n * For more info see the documentation comment further below, immediately above this function's\n * implementation.\n *\n * lexer: {\n * yy: {...}, A reference to the so-called \"shared state\" `yy` once\n * received via a call to the `.setInput(input, yy)` lexer API.\n * EOF: 1,\n * ERROR: 2,\n * JisonLexerError: function(msg, hash),\n * parseError: function(str, hash, ExceptionClass),\n * setInput: function(input, [yy]),\n * input: function(),\n * unput: function(str),\n * more: function(),\n * reject: function(),\n * less: function(n),\n * pastInput: function(n),\n * upcomingInput: function(n),\n * showPosition: function(),\n * test_match: function(regex_match_array, rule_index, ...),\n * next: function(...),\n * lex: function(...),\n * begin: function(condition),\n * pushState: function(condition),\n * popState: function(),\n * topState: function(),\n * _currentRules: function(),\n * stateStackSize: function(),\n * cleanupAfterLex: function()\n *\n * options: { ... lexer %options ... },\n *\n * performAction: function(yy, yy_, $avoiding_name_collisions, YY_START, ...),\n * rules: [...],\n * conditions: {associative list: name ==> set},\n * }\n * }\n *\n *\n * token location info (@$, _$, etc.): {\n * first_line: n,\n * last_line: n,\n * first_column: n,\n * last_column: n,\n * range: [start_number, end_number]\n * (where the numbers are indexes into the input string, zero-based)\n * }\n *\n * ---\n *\n * The `parseError` function receives a 'hash' object with these members for lexer and\n * parser errors:\n *\n * {\n * text: (matched text)\n * token: (the produced terminal token, if any)\n * token_id: (the produced terminal token numeric ID, if any)\n * line: (yylineno)\n * loc: (yylloc)\n * }\n *\n * parser (grammar) errors will also provide these additional members:\n *\n * {\n * expected: (array describing the set of expected tokens;\n * may be UNDEFINED when we cannot easily produce such a set)\n * state: (integer (or array when the table includes grammar collisions);\n * represents the current internal state of the parser kernel.\n * can, for example, be used to pass to the `collect_expected_token_set()`\n * API to obtain the expected token set)\n * action: (integer; represents the current internal action which will be executed)\n * new_state: (integer; represents the next/planned internal state, once the current\n * action has executed)\n * recoverable: (boolean: TRUE when the parser MAY have an error recovery rule\n * available for this particular error)\n * state_stack: (array: the current parser LALR/LR internal state stack; this can be used,\n * for instance, for advanced error analysis and reporting)\n * value_stack: (array: the current parser LALR/LR internal `$$` value stack; this can be used,\n * for instance, for advanced error analysis and reporting)\n * location_stack: (array: the current parser LALR/LR internal location stack; this can be used,\n * for instance, for advanced error analysis and reporting)\n * yy: (object: the current parser internal \"shared state\" `yy`\n * as is also available in the rule actions; this can be used,\n * for instance, for advanced error analysis and reporting)\n * lexer: (reference to the current lexer instance used by the parser)\n * parser: (reference to the current parser instance)\n * }\n *\n * while `this` will reference the current parser instance.\n *\n * When `parseError` is invoked by the lexer, `this` will still reference the related *parser*\n * instance, while these additional `hash` fields will also be provided:\n *\n * {\n * lexer: (reference to the current lexer instance which reported the error)\n * }\n *\n * When `parseError` is invoked by the parser due to a **JavaScript exception** being fired\n * from either the parser or lexer, `this` will still reference the related *parser*\n * instance, while these additional `hash` fields will also be provided:\n *\n * {\n * exception: (reference to the exception thrown)\n * }\n *\n * Please do note that in the latter situation, the `expected` field will be omitted as\n * this type of failure is assumed not to be due to *parse errors* but rather due to user\n * action code in either parser or lexer failing unexpectedly.\n *\n * ---\n *\n * You can specify parser options by setting / modifying the `.yy` object of your Parser instance.\n * These options are available:\n *\n * ### options which are global for all parser instances\n *\n * Parser.pre_parse: function(yy)\n * optional: you can specify a pre_parse() function in the chunk following\n * the grammar, i.e. after the last `%%`.\n * Parser.post_parse: function(yy, retval, parseInfo) { return retval; }\n * optional: you can specify a post_parse() function in the chunk following\n * the grammar, i.e. after the last `%%`. When it does not return any value,\n * the parser will return the original `retval`.\n *\n * ### options which can be set up per parser instance\n *\n * yy: {\n * pre_parse: function(yy)\n * optional: is invoked before the parse cycle starts (and before the first\n * invocation of `lex()`) but immediately after the invocation of\n * `parser.pre_parse()`).\n * post_parse: function(yy, retval, parseInfo) { return retval; }\n * optional: is invoked when the parse terminates due to success ('accept')\n * or failure (even when exceptions are thrown).\n * `retval` contains the return value to be produced by `Parser.parse()`;\n * this function can override the return value by returning another.\n * When it does not return any value, the parser will return the original\n * `retval`.\n * This function is invoked immediately before `parser.post_parse()`.\n *\n * parseError: function(str, hash, ExceptionClass)\n * optional: overrides the default `parseError` function.\n * quoteName: function(name),\n * optional: overrides the default `quoteName` function.\n * }\n *\n * parser.lexer.options: {\n * pre_lex: function()\n * optional: is invoked before the lexer is invoked to produce another token.\n * `this` refers to the Lexer object.\n * post_lex: function(token) { return token; }\n * optional: is invoked when the lexer has produced a token `token`;\n * this function can override the returned token value by returning another.\n * When it does not return any (truthy) value, the lexer will return\n * the original `token`.\n * `this` refers to the Lexer object.\n *\n * ranges: boolean\n * optional: `true` ==> token location info will include a .range[] member.\n * flex: boolean\n * optional: `true` ==> flex-like lexing behaviour where the rules are tested\n * exhaustively to find the longest match.\n * backtrack_lexer: boolean\n * optional: `true` ==> lexer regexes are tested in order and for invoked;\n * the lexer terminates the scan when a token is returned by the action code.\n * xregexp: boolean\n * optional: `true` ==> lexer rule regexes are \"extended regex format\" requiring the\n * `XRegExp` library. When this `%option` has not been specified at compile time, all lexer\n * rule regexes have been written as standard JavaScript RegExp expressions.\n * }\n */\n\n \n \n var parser = (function () {\n\n\n// See also:\n// http://stackoverflow.com/questions/1382107/whats-a-good-way-to-extend-error-in-javascript/#35881508\n// but we keep the prototype.constructor and prototype.name assignment lines too for compatibility\n// with userland code which might access the derived class in a 'classic' way.\nfunction JisonParserError(msg, hash) {\n Object.defineProperty(this, 'name', {\n enumerable: false,\n writable: false,\n value: 'JisonParserError'\n });\n\n if (msg == null) msg = '???';\n\n Object.defineProperty(this, 'message', {\n enumerable: false,\n writable: true,\n value: msg\n });\n\n this.hash = hash;\n\n var stacktrace;\n if (hash && hash.exception instanceof Error) {\n var ex2 = hash.exception;\n this.message = ex2.message || msg;\n stacktrace = ex2.stack;\n }\n if (!stacktrace) {\n if (Error.hasOwnProperty('captureStackTrace')) { // V8/Chrome engine\n Error.captureStackTrace(this, this.constructor);\n } else {\n stacktrace = (new Error(msg)).stack;\n }\n }\n if (stacktrace) {\n Object.defineProperty(this, 'stack', {\n enumerable: false,\n writable: false,\n value: stacktrace\n });\n }\n}\n\nif (typeof Object.setPrototypeOf === 'function') {\n Object.setPrototypeOf(JisonParserError.prototype, Error.prototype);\n} else {\n JisonParserError.prototype = Object.create(Error.prototype);\n}\nJisonParserError.prototype.constructor = JisonParserError;\nJisonParserError.prototype.name = 'JisonParserError';\n\n\n\n\n // helper: reconstruct the productions[] table\n function bp(s) {\n var rv = [];\n var p = s.pop;\n var r = s.rule;\n for (var i = 0, l = p.length; i < l; i++) {\n rv.push([\n p[i],\n r[i]\n ]);\n }\n return rv;\n }\n \n\n\n // helper: reconstruct the defaultActions[] table\n function bda(s) {\n var rv = {};\n var d = s.idx;\n var g = s.goto;\n for (var i = 0, l = d.length; i < l; i++) {\n var j = d[i];\n rv[j] = g[i];\n }\n return rv;\n }\n \n\n\n // helper: reconstruct the 'goto' table\n function bt(s) {\n var rv = [];\n var d = s.len;\n var y = s.symbol;\n var t = s.type;\n var a = s.state;\n var m = s.mode;\n var g = s.goto;\n for (var i = 0, l = d.length; i < l; i++) {\n var n = d[i];\n var q = {};\n for (var j = 0; j < n; j++) {\n var z = y.shift();\n switch (t.shift()) {\n case 2:\n q[z] = [\n m.shift(),\n g.shift()\n ];\n break;\n\n case 0:\n q[z] = a.shift();\n break;\n\n default:\n // type === 1: accept\n q[z] = [\n 3\n ];\n }\n }\n rv.push(q);\n }\n return rv;\n }\n \n\n\n // helper: runlength encoding with increment step: code, length: step (default step = 0)\n // `this` references an array\n function s(c, l, a) {\n a = a || 0;\n for (var i = 0; i < l; i++) {\n this.push(c);\n c += a;\n }\n }\n\n // helper: duplicate sequence from *relative* offset and length.\n // `this` references an array\n function c(i, l) {\n i = this.length - i;\n for (l += i; i < l; i++) {\n this.push(this[i]);\n }\n }\n\n // helper: unpack an array using helpers and data, all passed in an array argument 'a'.\n function u(a) {\n var rv = [];\n for (var i = 0, l = a.length; i < l; i++) {\n var e = a[i];\n // Is this entry a helper function?\n if (typeof e === 'function') {\n i++;\n e.apply(rv, a[i]);\n } else {\n rv.push(e);\n }\n }\n return rv;\n }\n \n\nvar parser = {\n // Code Generator Information Report\n // ---------------------------------\n //\n // Options:\n //\n // default action mode: ............. [\"classic\",\"merge\"]\n // test-compile action mode: ........ \"parser:*,lexer:*\"\n // try..catch: ...................... true\n // default resolve on conflict: ..... true\n // on-demand look-ahead: ............ false\n // error recovery token skip maximum: 3\n // yyerror in parse actions is: ..... NOT recoverable,\n // yyerror in lexer actions and other non-fatal lexer are:\n // .................................. NOT recoverable,\n // debug grammar/output: ............ false\n // has partial LR conflict upgrade: true\n // rudimentary token-stack support: false\n // parser table compression mode: ... 2\n // export debug tables: ............. false\n // export *all* tables: ............. false\n // module type: ..................... commonjs\n // parser engine type: .............. lalr\n // output main() in the module: ..... true\n // has user-specified main(): ....... false\n // has user-specified require()/import modules for main():\n // .................................. false\n // number of expected conflicts: .... 0\n //\n //\n // Parser Analysis flags:\n //\n // no significant actions (parser is a language matcher only):\n // .................................. false\n // uses yyleng: ..................... false\n // uses yylineno: ................... false\n // uses yytext: ..................... false\n // uses yylloc: ..................... false\n // uses ParseError API: ............. false\n // uses YYERROR: .................... false\n // uses YYRECOVERING: ............... false\n // uses YYERROK: .................... false\n // uses YYCLEARIN: .................. false\n // tracks rule values: .............. true\n // assigns rule values: ............. true\n // uses location tracking: .......... false\n // assigns location: ................ false\n // uses yystack: .................... false\n // uses yysstack: ................... false\n // uses yysp: ....................... true\n // uses yyrulelength: ............... false\n // uses yyMergeLocationInfo API: .... false\n // has error recovery: .............. false\n // has error reporting: ............. false\n //\n // --------- END OF REPORT -----------\n\ntrace: function no_op_trace() { },\nJisonParserError: JisonParserError,\nyy: {},\noptions: {\n type: \"lalr\",\n hasPartialLrUpgradeOnConflict: true,\n errorRecoveryTokenDiscardCount: 3\n},\nsymbols_: {\n \"$accept\": 0,\n \"$end\": 1,\n \"ADD\": 3,\n \"ANGLE\": 16,\n \"CHS\": 22,\n \"COMMA\": 14,\n \"CSS_CPROP\": 13,\n \"CSS_VAR\": 12,\n \"DIV\": 6,\n \"EMS\": 20,\n \"EOF\": 1,\n \"EXS\": 21,\n \"FREQ\": 18,\n \"LENGTH\": 15,\n \"LPAREN\": 7,\n \"MUL\": 5,\n \"NESTED_CALC\": 9,\n \"NUMBER\": 11,\n \"PERCENTAGE\": 28,\n \"PREFIX\": 10,\n \"REMS\": 23,\n \"RES\": 19,\n \"RPAREN\": 8,\n \"SUB\": 4,\n \"TIME\": 17,\n \"VHS\": 24,\n \"VMAXS\": 27,\n \"VMINS\": 26,\n \"VWS\": 25,\n \"css_value\": 33,\n \"css_variable\": 32,\n \"error\": 2,\n \"expression\": 29,\n \"math_expression\": 30,\n \"value\": 31\n},\nterminals_: {\n 1: \"EOF\",\n 2: \"error\",\n 3: \"ADD\",\n 4: \"SUB\",\n 5: \"MUL\",\n 6: \"DIV\",\n 7: \"LPAREN\",\n 8: \"RPAREN\",\n 9: \"NESTED_CALC\",\n 10: \"PREFIX\",\n 11: \"NUMBER\",\n 12: \"CSS_VAR\",\n 13: \"CSS_CPROP\",\n 14: \"COMMA\",\n 15: \"LENGTH\",\n 16: \"ANGLE\",\n 17: \"TIME\",\n 18: \"FREQ\",\n 19: \"RES\",\n 20: \"EMS\",\n 21: \"EXS\",\n 22: \"CHS\",\n 23: \"REMS\",\n 24: \"VHS\",\n 25: \"VWS\",\n 26: \"VMINS\",\n 27: \"VMAXS\",\n 28: \"PERCENTAGE\"\n},\nTERROR: 2,\n EOF: 1,\n\n // internals: defined here so the object *structure* doesn't get modified by parse() et al,\n // thus helping JIT compilers like Chrome V8.\n originalQuoteName: null,\n originalParseError: null,\n cleanupAfterParse: null,\n constructParseErrorInfo: null,\n yyMergeLocationInfo: null,\n\n __reentrant_call_depth: 0, // INTERNAL USE ONLY\n __error_infos: [], // INTERNAL USE ONLY: the set of parseErrorInfo objects created since the last cleanup\n __error_recovery_infos: [], // INTERNAL USE ONLY: the set of parseErrorInfo objects created since the last cleanup\n\n // APIs which will be set up depending on user action code analysis:\n //yyRecovering: 0,\n //yyErrOk: 0,\n //yyClearIn: 0,\n\n // Helper APIs\n // -----------\n\n // Helper function which can be overridden by user code later on: put suitable quotes around\n // literal IDs in a description string.\n quoteName: function parser_quoteName(id_str) {\n return '\"' + id_str + '\"';\n },\n\n // Return the name of the given symbol (terminal or non-terminal) as a string, when available.\n //\n // Return NULL when the symbol is unknown to the parser.\n getSymbolName: function parser_getSymbolName(symbol) {\n if (this.terminals_[symbol]) {\n return this.terminals_[symbol];\n }\n\n // Otherwise... this might refer to a RULE token i.e. a non-terminal: see if we can dig that one up.\n //\n // An example of this may be where a rule's action code contains a call like this:\n //\n // parser.getSymbolName(#$)\n //\n // to obtain a human-readable name of the current grammar rule.\n var s = this.symbols_;\n for (var key in s) {\n if (s[key] === symbol) {\n return key;\n }\n }\n return null;\n },\n\n // Return a more-or-less human-readable description of the given symbol, when available,\n // or the symbol itself, serving as its own 'description' for lack of something better to serve up.\n //\n // Return NULL when the symbol is unknown to the parser.\n describeSymbol: function parser_describeSymbol(symbol) {\n if (symbol !== this.EOF && this.terminal_descriptions_ && this.terminal_descriptions_[symbol]) {\n return this.terminal_descriptions_[symbol];\n }\n else if (symbol === this.EOF) {\n return 'end of input';\n }\n var id = this.getSymbolName(symbol);\n if (id) {\n return this.quoteName(id);\n }\n return null;\n },\n\n // Produce a (more or less) human-readable list of expected tokens at the point of failure.\n //\n // The produced list may contain token or token set descriptions instead of the tokens\n // themselves to help turning this output into something that easier to read by humans\n // unless `do_not_describe` parameter is set, in which case a list of the raw, *numeric*,\n // expected terminals and nonterminals is produced.\n //\n // The returned list (array) will not contain any duplicate entries.\n collect_expected_token_set: function parser_collect_expected_token_set(state, do_not_describe) {\n var TERROR = this.TERROR;\n var tokenset = [];\n var check = {};\n // Has this (error?) state been outfitted with a custom expectations description text for human consumption?\n // If so, use that one instead of the less palatable token set.\n if (!do_not_describe && this.state_descriptions_ && this.state_descriptions_[state]) {\n return [\n this.state_descriptions_[state]\n ];\n }\n for (var p in this.table[state]) {\n p = +p;\n if (p !== TERROR) {\n var d = do_not_describe ? p : this.describeSymbol(p);\n if (d && !check[d]) {\n tokenset.push(d);\n check[d] = true; // Mark this token description as already mentioned to prevent outputting duplicate entries.\n }\n }\n }\n return tokenset;\n },\nproductions_: bp({\n pop: u([\n 29,\n s,\n [30, 10],\n 31,\n 31,\n 32,\n 32,\n s,\n [33, 15]\n]),\n rule: u([\n 2,\n s,\n [3, 5],\n 4,\n 7,\n s,\n [1, 4],\n 2,\n 4,\n 6,\n s,\n [1, 14],\n 2\n])\n}),\nperformAction: function parser__PerformAction(yystate /* action[1] */, yysp, yyvstack) {\n\n /* this == yyval */\n\n // the JS engine itself can go and remove these statements when `yy` turns out to be unused in any action code!\n var yy = this.yy;\n var yyparser = yy.parser;\n var yylexer = yy.lexer;\n\n \n\n switch (yystate) {\ncase 0:\n /*! Production:: $accept : expression $end */\n\n // default action (generated by JISON mode classic/merge :: 1,VT,VA,-,-,-,-,-,-):\n this.$ = yyvstack[yysp - 1];\n // END of default action (generated by JISON mode classic/merge :: 1,VT,VA,-,-,-,-,-,-)\n break;\n\ncase 1:\n /*! Production:: expression : math_expression EOF */\n\n // default action (generated by JISON mode classic/merge :: 2,VT,VA,-,-,-,-,-,-):\n this.$ = yyvstack[yysp - 1];\n // END of default action (generated by JISON mode classic/merge :: 2,VT,VA,-,-,-,-,-,-)\n \n \n return yyvstack[yysp - 1];\n break;\n\ncase 2:\n /*! Production:: math_expression : math_expression ADD math_expression */\ncase 3:\n /*! Production:: math_expression : math_expression SUB math_expression */\ncase 4:\n /*! Production:: math_expression : math_expression MUL math_expression */\ncase 5:\n /*! Production:: math_expression : math_expression DIV math_expression */\n\n this.$ = { type: 'MathExpression', operator: yyvstack[yysp - 1], left: yyvstack[yysp - 2], right: yyvstack[yysp] };\n break;\n\ncase 6:\n /*! Production:: math_expression : LPAREN math_expression RPAREN */\n\n this.$ = yyvstack[yysp - 1];\n break;\n\ncase 7:\n /*! Production:: math_expression : NESTED_CALC LPAREN math_expression RPAREN */\n\n this.$ = { type: 'Calc', value: yyvstack[yysp - 1] };\n break;\n\ncase 8:\n /*! Production:: math_expression : SUB PREFIX SUB NESTED_CALC LPAREN math_expression RPAREN */\n\n this.$ = { type: 'Calc', value: yyvstack[yysp - 1], prefix: yyvstack[yysp - 5] };\n break;\n\ncase 9:\n /*! Production:: math_expression : css_variable */\ncase 10:\n /*! Production:: math_expression : css_value */\ncase 11:\n /*! Production:: math_expression : value */\n\n this.$ = yyvstack[yysp];\n break;\n\ncase 12:\n /*! Production:: value : NUMBER */\n\n this.$ = { type: 'Value', value: parseFloat(yyvstack[yysp]) };\n break;\n\ncase 13:\n /*! Production:: value : SUB NUMBER */\n\n this.$ = { type: 'Value', value: parseFloat(yyvstack[yysp]) * -1 };\n break;\n\ncase 14:\n /*! Production:: css_variable : CSS_VAR LPAREN CSS_CPROP RPAREN */\n\n this.$ = { type: 'CssVariable', value: yyvstack[yysp - 1] };\n break;\n\ncase 15:\n /*! Production:: css_variable : CSS_VAR LPAREN CSS_CPROP COMMA math_expression RPAREN */\n\n this.$ = { type: 'CssVariable', value: yyvstack[yysp - 3], fallback: yyvstack[yysp - 1] };\n break;\n\ncase 16:\n /*! Production:: css_value : LENGTH */\n\n this.$ = { type: 'LengthValue', value: parseFloat(yyvstack[yysp]), unit: /[a-z]+/.exec(yyvstack[yysp])[0] };\n break;\n\ncase 17:\n /*! Production:: css_value : ANGLE */\n\n this.$ = { type: 'AngleValue', value: parseFloat(yyvstack[yysp]), unit: /[a-z]+/.exec(yyvstack[yysp])[0] };\n break;\n\ncase 18:\n /*! Production:: css_value : TIME */\n\n this.$ = { type: 'TimeValue', value: parseFloat(yyvstack[yysp]), unit: /[a-z]+/.exec(yyvstack[yysp])[0] };\n break;\n\ncase 19:\n /*! Production:: css_value : FREQ */\n\n this.$ = { type: 'FrequencyValue', value: parseFloat(yyvstack[yysp]), unit: /[a-z]+/.exec(yyvstack[yysp])[0] };\n break;\n\ncase 20:\n /*! Production:: css_value : RES */\n\n this.$ = { type: 'ResolutionValue', value: parseFloat(yyvstack[yysp]), unit: /[a-z]+/.exec(yyvstack[yysp])[0] };\n break;\n\ncase 21:\n /*! Production:: css_value : EMS */\n\n this.$ = { type: 'EmValue', value: parseFloat(yyvstack[yysp]), unit: 'em' };\n break;\n\ncase 22:\n /*! Production:: css_value : EXS */\n\n this.$ = { type: 'ExValue', value: parseFloat(yyvstack[yysp]), unit: 'ex' };\n break;\n\ncase 23:\n /*! Production:: css_value : CHS */\n\n this.$ = { type: 'ChValue', value: parseFloat(yyvstack[yysp]), unit: 'ch' };\n break;\n\ncase 24:\n /*! Production:: css_value : REMS */\n\n this.$ = { type: 'RemValue', value: parseFloat(yyvstack[yysp]), unit: 'rem' };\n break;\n\ncase 25:\n /*! Production:: css_value : VHS */\n\n this.$ = { type: 'VhValue', value: parseFloat(yyvstack[yysp]), unit: 'vh' };\n break;\n\ncase 26:\n /*! Production:: css_value : VWS */\n\n this.$ = { type: 'VwValue', value: parseFloat(yyvstack[yysp]), unit: 'vw' };\n break;\n\ncase 27:\n /*! Production:: css_value : VMINS */\n\n this.$ = { type: 'VminValue', value: parseFloat(yyvstack[yysp]), unit: 'vmin' };\n break;\n\ncase 28:\n /*! Production:: css_value : VMAXS */\n\n this.$ = { type: 'VmaxValue', value: parseFloat(yyvstack[yysp]), unit: 'vmax' };\n break;\n\ncase 29:\n /*! Production:: css_value : PERCENTAGE */\n\n this.$ = { type: 'PercentageValue', value: parseFloat(yyvstack[yysp]), unit: '%' };\n break;\n\ncase 30:\n /*! Production:: css_value : SUB css_value */\n\n var prev = yyvstack[yysp]; prev.value *= -1; this.$ = prev;\n break;\n\n}\n},\ntable: bt({\n len: u([\n 24,\n 1,\n 5,\n 23,\n 1,\n 18,\n s,\n [0, 3],\n 1,\n s,\n [0, 16],\n s,\n [23, 4],\n c,\n [28, 3],\n 0,\n 0,\n 16,\n 1,\n 6,\n 6,\n s,\n [0, 3],\n 5,\n 1,\n 2,\n c,\n [37, 3],\n c,\n [20, 3],\n 5,\n 0,\n 0\n]),\n symbol: u([\n 4,\n 7,\n 9,\n 11,\n 12,\n s,\n [15, 19, 1],\n 1,\n 1,\n s,\n [3, 4, 1],\n c,\n [30, 19],\n c,\n [29, 4],\n 7,\n 4,\n 10,\n 11,\n c,\n [22, 14],\n c,\n [19, 3],\n c,\n [43, 22],\n c,\n [23, 69],\n c,\n [139, 4],\n 8,\n c,\n [51, 24],\n 4,\n c,\n [138, 15],\n 13,\n c,\n [186, 5],\n 8,\n c,\n [6, 6],\n c,\n [5, 5],\n 9,\n 8,\n 14,\n c,\n [159, 47],\n c,\n [60, 10]\n]),\n type: u([\n s,\n [2, 19],\n s,\n [0, 5],\n 1,\n s,\n [2, 24],\n s,\n [0, 4],\n c,\n [22, 19],\n c,\n [43, 42],\n c,\n [23, 70],\n c,\n [28, 25],\n c,\n [45, 25],\n c,\n [113, 54]\n]),\n state: u([\n 1,\n 2,\n 8,\n 6,\n 7,\n 30,\n c,\n [4, 3],\n 33,\n 37,\n c,\n [5, 3],\n 38,\n c,\n [4, 3],\n 39,\n c,\n [4, 3],\n 40,\n c,\n [4, 3],\n 42,\n c,\n [21, 4],\n 50,\n c,\n [5, 3],\n 51,\n c,\n [4, 3]\n]),\n mode: u([\n s,\n [1, 179],\n s,\n [2, 3],\n c,\n [5, 5],\n c,\n [6, 4],\n s,\n [1, 57]\n]),\n goto: u([\n 5,\n 3,\n 4,\n 24,\n s,\n [9, 15, 1],\n s,\n [25, 5, 1],\n c,\n [24, 19],\n 31,\n 35,\n 32,\n 34,\n c,\n [18, 14],\n 36,\n c,\n [38, 19],\n c,\n [19, 57],\n c,\n [118, 4],\n 41,\n c,\n [24, 19],\n 43,\n 35,\n c,\n [16, 14],\n 44,\n s,\n [2, 3],\n 28,\n 29,\n 2,\n s,\n [3, 3],\n 28,\n 29,\n 3,\n c,\n [53, 4],\n s,\n [45, 5, 1],\n c,\n [100, 42],\n 52,\n c,\n [5, 4],\n 53\n])\n}),\ndefaultActions: bda({\n idx: u([\n 6,\n 7,\n 8,\n s,\n [10, 16, 1],\n 33,\n 34,\n 39,\n 40,\n 41,\n 45,\n 47,\n 52,\n 53\n]),\n goto: u([\n 9,\n 10,\n 11,\n s,\n [16, 14, 1],\n 12,\n 1,\n 30,\n 13,\n s,\n [4, 4, 1],\n 14,\n 15,\n 8\n])\n}),\nparseError: function parseError(str, hash, ExceptionClass) {\n if (hash.recoverable) {\n if (typeof this.trace === 'function') {\n this.trace(str);\n }\n hash.destroy(); // destroy... well, *almost*!\n } else {\n if (typeof this.trace === 'function') {\n this.trace(str);\n }\n if (!ExceptionClass) {\n ExceptionClass = this.JisonParserError;\n }\n throw new ExceptionClass(str, hash);\n }\n},\nparse: function parse(input) {\n var self = this;\n var stack = new Array(128); // token stack: stores token which leads to state at the same index (column storage)\n var sstack = new Array(128); // state stack: stores states (column storage)\n\n var vstack = new Array(128); // semantic value stack\n\n var table = this.table;\n var sp = 0; // 'stack pointer': index into the stacks\n\n\n \n\n\n var symbol = 0;\n\n\n\n var TERROR = this.TERROR;\n var EOF = this.EOF;\n var ERROR_RECOVERY_TOKEN_DISCARD_COUNT = (this.options.errorRecoveryTokenDiscardCount | 0) || 3;\n var NO_ACTION = [0, 54 /* === table.length :: ensures that anyone using this new state will fail dramatically! */];\n\n var lexer;\n if (this.__lexer__) {\n lexer = this.__lexer__;\n } else {\n lexer = this.__lexer__ = Object.create(this.lexer);\n }\n\n var sharedState_yy = {\n parseError: undefined,\n quoteName: undefined,\n lexer: undefined,\n parser: undefined,\n pre_parse: undefined,\n post_parse: undefined,\n pre_lex: undefined,\n post_lex: undefined // WARNING: must be written this way for the code expanders to work correctly in both ES5 and ES6 modes!\n };\n\n var ASSERT;\n if (typeof assert !== 'function') {\n ASSERT = function JisonAssert(cond, msg) {\n if (!cond) {\n throw new Error('assertion failed: ' + (msg || '***'));\n }\n };\n } else {\n ASSERT = assert;\n }\n\n this.yyGetSharedState = function yyGetSharedState() {\n return sharedState_yy;\n };\n\n\n\n\n\n\n\n\n function shallow_copy_noclobber(dst, src) {\n for (var k in src) {\n if (typeof dst[k] === 'undefined' && Object.prototype.hasOwnProperty.call(src, k)) {\n dst[k] = src[k];\n }\n }\n }\n\n // copy state\n shallow_copy_noclobber(sharedState_yy, this.yy);\n\n sharedState_yy.lexer = lexer;\n sharedState_yy.parser = this;\n\n\n\n\n\n\n // Does the shared state override the default `parseError` that already comes with this instance?\n if (typeof sharedState_yy.parseError === 'function') {\n this.parseError = function parseErrorAlt(str, hash, ExceptionClass) {\n if (!ExceptionClass) {\n ExceptionClass = this.JisonParserError;\n }\n return sharedState_yy.parseError.call(this, str, hash, ExceptionClass);\n };\n } else {\n this.parseError = this.originalParseError;\n }\n\n // Does the shared state override the default `quoteName` that already comes with this instance?\n if (typeof sharedState_yy.quoteName === 'function') {\n this.quoteName = function quoteNameAlt(id_str) {\n return sharedState_yy.quoteName.call(this, id_str);\n };\n } else {\n this.quoteName = this.originalQuoteName;\n }\n\n // set up the cleanup function; make it an API so that external code can re-use this one in case of\n // calamities or when the `%options no-try-catch` option has been specified for the grammar, in which\n // case this parse() API method doesn't come with a `finally { ... }` block any more!\n //\n // NOTE: as this API uses parse() as a closure, it MUST be set again on every parse() invocation,\n // or else your `sharedState`, etc. references will be *wrong*!\n this.cleanupAfterParse = function parser_cleanupAfterParse(resultValue, invoke_post_methods, do_not_nuke_errorinfos) {\n var rv;\n\n if (invoke_post_methods) {\n var hash;\n\n if (sharedState_yy.post_parse || this.post_parse) {\n // create an error hash info instance: we re-use this API in a **non-error situation**\n // as this one delivers all parser internals ready for access by userland code.\n hash = this.constructParseErrorInfo(null /* no error! */, null /* no exception! */, null, false);\n }\n\n if (sharedState_yy.post_parse) {\n rv = sharedState_yy.post_parse.call(this, sharedState_yy, resultValue, hash);\n if (typeof rv !== 'undefined') resultValue = rv;\n }\n if (this.post_parse) {\n rv = this.post_parse.call(this, sharedState_yy, resultValue, hash);\n if (typeof rv !== 'undefined') resultValue = rv;\n }\n\n // cleanup:\n if (hash && hash.destroy) {\n hash.destroy();\n }\n }\n\n if (this.__reentrant_call_depth > 1) return resultValue; // do not (yet) kill the sharedState when this is a reentrant run.\n\n // clean up the lingering lexer structures as well:\n if (lexer.cleanupAfterLex) {\n lexer.cleanupAfterLex(do_not_nuke_errorinfos);\n }\n\n // prevent lingering circular references from causing memory leaks:\n if (sharedState_yy) {\n sharedState_yy.lexer = undefined;\n sharedState_yy.parser = undefined;\n if (lexer.yy === sharedState_yy) {\n lexer.yy = undefined;\n }\n }\n sharedState_yy = undefined;\n this.parseError = this.originalParseError;\n this.quoteName = this.originalQuoteName;\n\n // nuke the vstack[] array at least as that one will still reference obsoleted user values.\n // To be safe, we nuke the other internal stack columns as well...\n stack.length = 0; // fastest way to nuke an array without overly bothering the GC\n sstack.length = 0;\n\n vstack.length = 0;\n sp = 0;\n\n // nuke the error hash info instances created during this run.\n // Userland code must COPY any data/references\n // in the error hash instance(s) it is more permanently interested in.\n if (!do_not_nuke_errorinfos) {\n for (var i = this.__error_infos.length - 1; i >= 0; i--) {\n var el = this.__error_infos[i];\n if (el && typeof el.destroy === 'function') {\n el.destroy();\n }\n }\n this.__error_infos.length = 0;\n\n\n }\n\n return resultValue;\n };\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n // NOTE: as this API uses parse() as a closure, it MUST be set again on every parse() invocation,\n // or else your `lexer`, `sharedState`, etc. references will be *wrong*!\n this.constructParseErrorInfo = function parser_constructParseErrorInfo(msg, ex, expected, recoverable) {\n var pei = {\n errStr: msg,\n exception: ex,\n text: lexer.match,\n value: lexer.yytext,\n token: this.describeSymbol(symbol) || symbol,\n token_id: symbol,\n line: lexer.yylineno,\n\n expected: expected,\n recoverable: recoverable,\n state: state,\n action: action,\n new_state: newState,\n symbol_stack: stack,\n state_stack: sstack,\n value_stack: vstack,\n\n stack_pointer: sp,\n yy: sharedState_yy,\n lexer: lexer,\n parser: this,\n\n // and make sure the error info doesn't stay due to potential\n // ref cycle via userland code manipulations.\n // These would otherwise all be memory leak opportunities!\n //\n // Note that only array and object references are nuked as those\n // constitute the set of elements which can produce a cyclic ref.\n // The rest of the members is kept intact as they are harmless.\n destroy: function destructParseErrorInfo() {\n // remove cyclic references added to error info:\n // info.yy = null;\n // info.lexer = null;\n // info.value = null;\n // info.value_stack = null;\n // ...\n var rec = !!this.recoverable;\n for (var key in this) {\n if (this.hasOwnProperty(key) && typeof key === 'object') {\n this[key] = undefined;\n }\n }\n this.recoverable = rec;\n }\n };\n // track this instance so we can `destroy()` it once we deem it superfluous and ready for garbage collection!\n this.__error_infos.push(pei);\n return pei;\n };\n\n\n\n\n\n\n\n\n\n\n\n\n\n function getNonTerminalFromCode(symbol) {\n var tokenName = self.getSymbolName(symbol);\n if (!tokenName) {\n tokenName = symbol;\n }\n return tokenName;\n }\n\n\n function stdLex() {\n var token = lexer.lex();\n // if token isn't its numeric value, convert\n if (typeof token !== 'number') {\n token = self.symbols_[token] || token;\n }\n\n return token || EOF;\n }\n\n function fastLex() {\n var token = lexer.fastLex();\n // if token isn't its numeric value, convert\n if (typeof token !== 'number') {\n token = self.symbols_[token] || token;\n }\n\n return token || EOF;\n }\n\n var lex = stdLex;\n\n\n var state, action, r, t;\n var yyval = {\n $: true,\n _$: undefined,\n yy: sharedState_yy\n };\n var p;\n var yyrulelen;\n var this_production;\n var newState;\n var retval = false;\n\n\n try {\n this.__reentrant_call_depth++;\n\n lexer.setInput(input, sharedState_yy);\n\n // NOTE: we *assume* no lexer pre/post handlers are set up *after* \n // this initial `setInput()` call: hence we can now check and decide\n // whether we'll go with the standard, slower, lex() API or the\n // `fast_lex()` one:\n if (typeof lexer.canIUse === 'function') {\n var lexerInfo = lexer.canIUse();\n if (lexerInfo.fastLex && typeof fastLex === 'function') {\n lex = fastLex;\n }\n } \n\n\n\n vstack[sp] = null;\n sstack[sp] = 0;\n stack[sp] = 0;\n ++sp;\n\n\n\n\n\n if (this.pre_parse) {\n this.pre_parse.call(this, sharedState_yy);\n }\n if (sharedState_yy.pre_parse) {\n sharedState_yy.pre_parse.call(this, sharedState_yy);\n }\n\n newState = sstack[sp - 1];\n for (;;) {\n // retrieve state number from top of stack\n state = newState; // sstack[sp - 1];\n\n // use default actions if available\n if (this.defaultActions[state]) {\n action = 2;\n newState = this.defaultActions[state];\n } else {\n // The single `==` condition below covers both these `===` comparisons in a single\n // operation:\n //\n // if (symbol === null || typeof symbol === 'undefined') ...\n if (!symbol) {\n symbol = lex();\n }\n // read action for current state and first input\n t = (table[state] && table[state][symbol]) || NO_ACTION;\n newState = t[1];\n action = t[0];\n\n\n\n\n\n\n\n\n\n\n\n // handle parse error\n if (!action) {\n var errStr;\n var errSymbolDescr = (this.describeSymbol(symbol) || symbol);\n var expected = this.collect_expected_token_set(state);\n\n // Report error\n if (typeof lexer.yylineno === 'number') {\n errStr = 'Parse error on line ' + (lexer.yylineno + 1) + ': ';\n } else {\n errStr = 'Parse error: ';\n }\n if (typeof lexer.showPosition === 'function') {\n errStr += '\\n' + lexer.showPosition(79 - 10, 10) + '\\n';\n }\n if (expected.length) {\n errStr += 'Expecting ' + expected.join(', ') + ', got unexpected ' + errSymbolDescr;\n } else {\n errStr += 'Unexpected ' + errSymbolDescr;\n }\n // we cannot recover from the error!\n p = this.constructParseErrorInfo(errStr, null, expected, false);\n r = this.parseError(p.errStr, p, this.JisonParserError);\n if (typeof r !== 'undefined') {\n retval = r;\n }\n break;\n }\n\n\n }\n\n\n\n\n\n\n\n\n\n\n switch (action) {\n // catch misc. parse failures:\n default:\n // this shouldn't happen, unless resolve defaults are off\n if (action instanceof Array) {\n p = this.constructParseErrorInfo('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol, null, null, false);\n r = this.parseError(p.errStr, p, this.JisonParserError);\n if (typeof r !== 'undefined') {\n retval = r;\n }\n break;\n }\n // Another case of better safe than sorry: in case state transitions come out of another error recovery process\n // or a buggy LUT (LookUp Table):\n p = this.constructParseErrorInfo('Parsing halted. No viable error recovery approach available due to internal system failure.', null, null, false);\n r = this.parseError(p.errStr, p, this.JisonParserError);\n if (typeof r !== 'undefined') {\n retval = r;\n }\n break;\n\n // shift:\n case 1:\n stack[sp] = symbol;\n vstack[sp] = lexer.yytext;\n\n sstack[sp] = newState; // push state\n\n ++sp;\n symbol = 0;\n\n\n\n\n // Pick up the lexer details for the current symbol as that one is not 'look-ahead' any more:\n\n\n\n\n continue;\n\n // reduce:\n case 2:\n\n\n\n this_production = this.productions_[newState - 1]; // `this.productions_[]` is zero-based indexed while states start from 1 upwards...\n yyrulelen = this_production[1];\n\n\n\n\n\n\n\n\n\n\n r = this.performAction.call(yyval, newState, sp - 1, vstack);\n\n if (typeof r !== 'undefined') {\n retval = r;\n break;\n }\n\n // pop off stack\n sp -= yyrulelen;\n\n // don't overwrite the `symbol` variable: use a local var to speed things up:\n var ntsymbol = this_production[0]; // push nonterminal (reduce)\n stack[sp] = ntsymbol;\n vstack[sp] = yyval.$;\n\n // goto new state = table[STATE][NONTERMINAL]\n newState = table[sstack[sp - 1]][ntsymbol];\n sstack[sp] = newState;\n ++sp;\n\n\n\n\n\n\n\n\n\n continue;\n\n // accept:\n case 3:\n if (sp !== -2) {\n retval = true;\n // Return the `$accept` rule's `$$` result, if available.\n //\n // Also note that JISON always adds this top-most `$accept` rule (with implicit,\n // default, action):\n //\n // $accept: $end\n // %{ $$ = $1; @$ = @1; %}\n //\n // which, combined with the parse kernel's `$accept` state behaviour coded below,\n // will produce the `$$` value output of the rule as the parse result,\n // IFF that result is *not* `undefined`. (See also the parser kernel code.)\n //\n // In code:\n //\n // %{\n // @$ = @1; // if location tracking support is included\n // if (typeof $1 !== 'undefined')\n // return $1;\n // else\n // return true; // the default parse result if the rule actions don't produce anything\n // %}\n sp--;\n if (typeof vstack[sp] !== 'undefined') {\n retval = vstack[sp];\n }\n }\n break;\n }\n\n // break out of loop: we accept or fail with error\n break;\n }\n } catch (ex) {\n // report exceptions through the parseError callback too, but keep the exception intact\n // if it is a known parser or lexer error which has been thrown by parseError() already:\n if (ex instanceof this.JisonParserError) {\n throw ex;\n }\n else if (lexer && typeof lexer.JisonLexerError === 'function' && ex instanceof lexer.JisonLexerError) {\n throw ex;\n }\n\n p = this.constructParseErrorInfo('Parsing aborted due to exception.', ex, null, false);\n retval = false;\n r = this.parseError(p.errStr, p, this.JisonParserError);\n if (typeof r !== 'undefined') {\n retval = r;\n }\n } finally {\n retval = this.cleanupAfterParse(retval, true, true);\n this.__reentrant_call_depth--;\n } // /finally\n\n return retval;\n}\n};\nparser.originalParseError = parser.parseError;\nparser.originalQuoteName = parser.quoteName;\n/* lexer generated by jison-lex 0.6.1-215 */\n\n/*\n * Returns a Lexer object of the following structure:\n *\n * Lexer: {\n * yy: {} The so-called \"shared state\" or rather the *source* of it;\n * the real \"shared state\" `yy` passed around to\n * the rule actions, etc. is a direct reference!\n *\n * This \"shared context\" object was passed to the lexer by way of \n * the `lexer.setInput(str, yy)` API before you may use it.\n *\n * This \"shared context\" object is passed to the lexer action code in `performAction()`\n * so userland code in the lexer actions may communicate with the outside world \n * and/or other lexer rules' actions in more or less complex ways.\n *\n * }\n *\n * Lexer.prototype: {\n * EOF: 1,\n * ERROR: 2,\n *\n * yy: The overall \"shared context\" object reference.\n *\n * JisonLexerError: function(msg, hash),\n *\n * performAction: function lexer__performAction(yy, yyrulenumber, YY_START),\n *\n * The function parameters and `this` have the following value/meaning:\n * - `this` : reference to the `lexer` instance. \n * `yy_` is an alias for `this` lexer instance reference used internally.\n *\n * - `yy` : a reference to the `yy` \"shared state\" object which was passed to the lexer\n * by way of the `lexer.setInput(str, yy)` API before.\n *\n * Note:\n * The extra arguments you specified in the `%parse-param` statement in your\n * **parser** grammar definition file are passed to the lexer via this object\n * reference as member variables.\n *\n * - `yyrulenumber` : index of the matched lexer rule (regex), used internally.\n *\n * - `YY_START`: the current lexer \"start condition\" state.\n *\n * parseError: function(str, hash, ExceptionClass),\n *\n * constructLexErrorInfo: function(error_message, is_recoverable),\n * Helper function.\n * Produces a new errorInfo 'hash object' which can be passed into `parseError()`.\n * See it's use in this lexer kernel in many places; example usage:\n *\n * var infoObj = lexer.constructParseErrorInfo('fail!', true);\n * var retVal = lexer.parseError(infoObj.errStr, infoObj, lexer.JisonLexerError);\n *\n * options: { ... lexer %options ... },\n *\n * lex: function(),\n * Produce one token of lexed input, which was passed in earlier via the `lexer.setInput()` API.\n * You MAY use the additional `args...` parameters as per `%parse-param` spec of the **lexer** grammar:\n * these extra `args...` are added verbatim to the `yy` object reference as member variables.\n *\n * WARNING:\n * Lexer's additional `args...` parameters (via lexer's `%parse-param`) MAY conflict with\n * any attributes already added to `yy` by the **parser** or the jison run-time; \n * when such a collision is detected an exception is thrown to prevent the generated run-time \n * from silently accepting this confusing and potentially hazardous situation! \n *\n * cleanupAfterLex: function(do_not_nuke_errorinfos),\n * Helper function.\n *\n * This helper API is invoked when the **parse process** has completed: it is the responsibility\n * of the **parser** (or the calling userland code) to invoke this method once cleanup is desired. \n *\n * This helper may be invoked by user code to ensure the internal lexer gets properly garbage collected.\n *\n * setInput: function(input, [yy]),\n *\n *\n * input: function(),\n *\n *\n * unput: function(str),\n *\n *\n * more: function(),\n *\n *\n * reject: function(),\n *\n *\n * less: function(n),\n *\n *\n * pastInput: function(n),\n *\n *\n * upcomingInput: function(n),\n *\n *\n * showPosition: function(),\n *\n *\n * test_match: function(regex_match_array, rule_index),\n *\n *\n * next: function(),\n *\n *\n * begin: function(condition),\n *\n *\n * pushState: function(condition),\n *\n *\n * popState: function(),\n *\n *\n * topState: function(),\n *\n *\n * _currentRules: function(),\n *\n *\n * stateStackSize: function(),\n *\n *\n * performAction: function(yy, yy_, yyrulenumber, YY_START),\n *\n *\n * rules: [...],\n *\n *\n * conditions: {associative list: name ==> set},\n * }\n *\n *\n * token location info (`yylloc`): {\n * first_line: n,\n * last_line: n,\n * first_column: n,\n * last_column: n,\n * range: [start_number, end_number]\n * (where the numbers are indexes into the input string, zero-based)\n * }\n *\n * ---\n *\n * The `parseError` function receives a 'hash' object with these members for lexer errors:\n *\n * {\n * text: (matched text)\n * token: (the produced terminal token, if any)\n * token_id: (the produced terminal token numeric ID, if any)\n * line: (yylineno)\n * loc: (yylloc)\n * recoverable: (boolean: TRUE when the parser MAY have an error recovery rule\n * available for this particular error)\n * yy: (object: the current parser internal \"shared state\" `yy`\n * as is also available in the rule actions; this can be used,\n * for instance, for advanced error analysis and reporting)\n * lexer: (reference to the current lexer instance used by the parser)\n * }\n *\n * while `this` will reference the current lexer instance.\n *\n * When `parseError` is invoked by the lexer, the default implementation will\n * attempt to invoke `yy.parser.parseError()`; when this callback is not provided\n * it will try to invoke `yy.parseError()` instead. When that callback is also not\n * provided, a `JisonLexerError` exception will be thrown containing the error\n * message and `hash`, as constructed by the `constructLexErrorInfo()` API.\n *\n * Note that the lexer's `JisonLexerError` error class is passed via the\n * `ExceptionClass` argument, which is invoked to construct the exception\n * instance to be thrown, so technically `parseError` will throw the object\n * produced by the `new ExceptionClass(str, hash)` JavaScript expression.\n *\n * ---\n *\n * You can specify lexer options by setting / modifying the `.options` object of your Lexer instance.\n * These options are available:\n *\n * (Options are permanent.)\n * \n * yy: {\n * parseError: function(str, hash, ExceptionClass)\n * optional: overrides the default `parseError` function.\n * }\n *\n * lexer.options: {\n * pre_lex: function()\n * optional: is invoked before the lexer is invoked to produce another token.\n * `this` refers to the Lexer object.\n * post_lex: function(token) { return token; }\n * optional: is invoked when the lexer has produced a token `token`;\n * this function can override the returned token value by returning another.\n * When it does not return any (truthy) value, the lexer will return\n * the original `token`.\n * `this` refers to the Lexer object.\n *\n * WARNING: the next set of options are not meant to be changed. They echo the abilities of\n * the lexer as per when it was compiled!\n *\n * ranges: boolean\n * optional: `true` ==> token location info will include a .range[] member.\n * flex: boolean\n * optional: `true` ==> flex-like lexing behaviour where the rules are tested\n * exhaustively to find the longest match.\n * backtrack_lexer: boolean\n * optional: `true` ==> lexer regexes are tested in order and for invoked;\n * the lexer terminates the scan when a token is returned by the action code.\n * xregexp: boolean\n * optional: `true` ==> lexer rule regexes are \"extended regex format\" requiring the\n * `XRegExp` library. When this %option has not been specified at compile time, all lexer\n * rule regexes have been written as standard JavaScript RegExp expressions.\n * }\n */\n\n\nvar lexer = function() {\n /**\n * See also:\n * http://stackoverflow.com/questions/1382107/whats-a-good-way-to-extend-error-in-javascript/#35881508\n * but we keep the prototype.constructor and prototype.name assignment lines too for compatibility\n * with userland code which might access the derived class in a 'classic' way.\n *\n * @public\n * @constructor\n * @nocollapse\n */\n function JisonLexerError(msg, hash) {\n Object.defineProperty(this, 'name', {\n enumerable: false,\n writable: false,\n value: 'JisonLexerError'\n });\n\n if (msg == null)\n msg = '???';\n\n Object.defineProperty(this, 'message', {\n enumerable: false,\n writable: true,\n value: msg\n });\n\n this.hash = hash;\n var stacktrace;\n\n if (hash && hash.exception instanceof Error) {\n var ex2 = hash.exception;\n this.message = ex2.message || msg;\n stacktrace = ex2.stack;\n }\n\n if (!stacktrace) {\n if (Error.hasOwnProperty('captureStackTrace')) {\n // V8\n Error.captureStackTrace(this, this.constructor);\n } else {\n stacktrace = new Error(msg).stack;\n }\n }\n\n if (stacktrace) {\n Object.defineProperty(this, 'stack', {\n enumerable: false,\n writable: false,\n value: stacktrace\n });\n }\n }\n\n if (typeof Object.setPrototypeOf === 'function') {\n Object.setPrototypeOf(JisonLexerError.prototype, Error.prototype);\n } else {\n JisonLexerError.prototype = Object.create(Error.prototype);\n }\n\n JisonLexerError.prototype.constructor = JisonLexerError;\n JisonLexerError.prototype.name = 'JisonLexerError';\n\n var lexer = {\n \n// Code Generator Information Report\n// ---------------------------------\n//\n// Options:\n//\n// backtracking: .................... false\n// location.ranges: ................. false\n// location line+column tracking: ... true\n//\n//\n// Forwarded Parser Analysis flags:\n//\n// uses yyleng: ..................... false\n// uses yylineno: ................... false\n// uses yytext: ..................... false\n// uses yylloc: ..................... false\n// uses lexer values: ............... true / true\n// location tracking: ............... false\n// location assignment: ............. false\n//\n//\n// Lexer Analysis flags:\n//\n// uses yyleng: ..................... ???\n// uses yylineno: ................... ???\n// uses yytext: ..................... ???\n// uses yylloc: ..................... ???\n// uses ParseError API: ............. ???\n// uses yyerror: .................... ???\n// uses location tracking & editing: ???\n// uses more() API: ................. ???\n// uses unput() API: ................ ???\n// uses reject() API: ............... ???\n// uses less() API: ................. ???\n// uses display APIs pastInput(), upcomingInput(), showPosition():\n// ............................. ???\n// uses describeYYLLOC() API: ....... ???\n//\n// --------- END OF REPORT -----------\n\nEOF: 1,\n ERROR: 2,\n\n // JisonLexerError: JisonLexerError, /// <-- injected by the code generator\n\n // options: {}, /// <-- injected by the code generator\n\n // yy: ..., /// <-- injected by setInput()\n\n __currentRuleSet__: null, /// INTERNAL USE ONLY: internal rule set cache for the current lexer state \n\n __error_infos: [], /// INTERNAL USE ONLY: the set of lexErrorInfo objects created since the last cleanup \n __decompressed: false, /// INTERNAL USE ONLY: mark whether the lexer instance has been 'unfolded' completely and is now ready for use \n done: false, /// INTERNAL USE ONLY \n _backtrack: false, /// INTERNAL USE ONLY \n _input: '', /// INTERNAL USE ONLY \n _more: false, /// INTERNAL USE ONLY \n _signaled_error_token: false, /// INTERNAL USE ONLY \n conditionStack: [], /// INTERNAL USE ONLY; managed via `pushState()`, `popState()`, `topState()` and `stateStackSize()` \n match: '', /// READ-ONLY EXTERNAL ACCESS - ADVANCED USE ONLY: tracks input which has been matched so far for the lexer token under construction. `match` is identical to `yytext` except that this one still contains the matched input string after `lexer.performAction()` has been invoked, where userland code MAY have changed/replaced the `yytext` value entirely! \n matched: '', /// READ-ONLY EXTERNAL ACCESS - ADVANCED USE ONLY: tracks entire input which has been matched so far \n matches: false, /// READ-ONLY EXTERNAL ACCESS - ADVANCED USE ONLY: tracks RE match result for last (successful) match attempt \n yytext: '', /// ADVANCED USE ONLY: tracks input which has been matched so far for the lexer token under construction; this value is transferred to the parser as the 'token value' when the parser consumes the lexer token produced through a call to the `lex()` API. \n offset: 0, /// READ-ONLY EXTERNAL ACCESS - ADVANCED USE ONLY: tracks the 'cursor position' in the input string, i.e. the number of characters matched so far \n yyleng: 0, /// READ-ONLY EXTERNAL ACCESS - ADVANCED USE ONLY: length of matched input for the token under construction (`yytext`) \n yylineno: 0, /// READ-ONLY EXTERNAL ACCESS - ADVANCED USE ONLY: 'line number' at which the token under construction is located \n yylloc: null, /// READ-ONLY EXTERNAL ACCESS - ADVANCED USE ONLY: tracks location info (lines + columns) for the token under construction \n\n /**\n * INTERNAL USE: construct a suitable error info hash object instance for `parseError`.\n * \n * @public\n * @this {RegExpLexer}\n */\n constructLexErrorInfo: function lexer_constructLexErrorInfo(msg, recoverable, show_input_position) {\n msg = '' + msg;\n\n // heuristic to determine if the error message already contains a (partial) source code dump\n // as produced by either `showPosition()` or `prettyPrintRange()`:\n if (show_input_position == undefined) {\n show_input_position = !(msg.indexOf('\\n') > 0 && msg.indexOf('^') > 0);\n }\n\n if (this.yylloc && show_input_position) {\n if (typeof this.prettyPrintRange === 'function') {\n var pretty_src = this.prettyPrintRange(this.yylloc);\n\n if (!/\\n\\s*$/.test(msg)) {\n msg += '\\n';\n }\n\n msg += '\\n Erroneous area:\\n' + this.prettyPrintRange(this.yylloc);\n } else if (typeof this.showPosition === 'function') {\n var pos_str = this.showPosition();\n\n if (pos_str) {\n if (msg.length && msg[msg.length - 1] !== '\\n' && pos_str[0] !== '\\n') {\n msg += '\\n' + pos_str;\n } else {\n msg += pos_str;\n }\n }\n }\n }\n\n /** @constructor */\n var pei = {\n errStr: msg,\n recoverable: !!recoverable,\n text: this.match, // This one MAY be empty; userland code should use the `upcomingInput` API to obtain more text which follows the 'lexer cursor position'... \n token: null,\n line: this.yylineno,\n loc: this.yylloc,\n yy: this.yy,\n lexer: this,\n\n /**\n * and make sure the error info doesn't stay due to potential\n * ref cycle via userland code manipulations.\n * These would otherwise all be memory leak opportunities!\n * \n * Note that only array and object references are nuked as those\n * constitute the set of elements which can produce a cyclic ref.\n * The rest of the members is kept intact as they are harmless.\n * \n * @public\n * @this {LexErrorInfo}\n */\n destroy: function destructLexErrorInfo() {\n // remove cyclic references added to error info:\n // info.yy = null;\n // info.lexer = null;\n // ...\n var rec = !!this.recoverable;\n\n for (var key in this) {\n if (this.hasOwnProperty(key) && typeof key === 'object') {\n this[key] = undefined;\n }\n }\n\n this.recoverable = rec;\n }\n };\n\n // track this instance so we can `destroy()` it once we deem it superfluous and ready for garbage collection!\n this.__error_infos.push(pei);\n\n return pei;\n },\n\n /**\n * handler which is invoked when a lexer error occurs.\n * \n * @public\n * @this {RegExpLexer}\n */\n parseError: function lexer_parseError(str, hash, ExceptionClass) {\n if (!ExceptionClass) {\n ExceptionClass = this.JisonLexerError;\n }\n\n if (this.yy) {\n if (this.yy.parser && typeof this.yy.parser.parseError === 'function') {\n return this.yy.parser.parseError.call(this, str, hash, ExceptionClass) || this.ERROR;\n } else if (typeof this.yy.parseError === 'function') {\n return this.yy.parseError.call(this, str, hash, ExceptionClass) || this.ERROR;\n }\n }\n\n throw new ExceptionClass(str, hash);\n },\n\n /**\n * method which implements `yyerror(str, ...args)` functionality for use inside lexer actions.\n * \n * @public\n * @this {RegExpLexer}\n */\n yyerror: function yyError(str /*, ...args */) {\n var lineno_msg = '';\n\n if (this.yylloc) {\n lineno_msg = ' on line ' + (this.yylineno + 1);\n }\n\n var p = this.constructLexErrorInfo(\n 'Lexical error' + lineno_msg + ': ' + str,\n this.options.lexerErrorsAreRecoverable\n );\n\n // Add any extra args to the hash under the name `extra_error_attributes`:\n var args = Array.prototype.slice.call(arguments, 1);\n\n if (args.length) {\n p.extra_error_attributes = args;\n }\n\n return this.parseError(p.errStr, p, this.JisonLexerError) || this.ERROR;\n },\n\n /**\n * final cleanup function for when we have completed lexing the input;\n * make it an API so that external code can use this one once userland\n * code has decided it's time to destroy any lingering lexer error\n * hash object instances and the like: this function helps to clean\n * up these constructs, which *may* carry cyclic references which would\n * otherwise prevent the instances from being properly and timely\n * garbage-collected, i.e. this function helps prevent memory leaks!\n * \n * @public\n * @this {RegExpLexer}\n */\n cleanupAfterLex: function lexer_cleanupAfterLex(do_not_nuke_errorinfos) {\n // prevent lingering circular references from causing memory leaks:\n this.setInput('', {});\n\n // nuke the error hash info instances created during this run.\n // Userland code must COPY any data/references\n // in the error hash instance(s) it is more permanently interested in.\n if (!do_not_nuke_errorinfos) {\n for (var i = this.__error_infos.length - 1; i >= 0; i--) {\n var el = this.__error_infos[i];\n\n if (el && typeof el.destroy === 'function') {\n el.destroy();\n }\n }\n\n this.__error_infos.length = 0;\n }\n\n return this;\n },\n\n /**\n * clear the lexer token context; intended for internal use only\n * \n * @public\n * @this {RegExpLexer}\n */\n clear: function lexer_clear() {\n this.yytext = '';\n this.yyleng = 0;\n this.match = '';\n\n // - DO NOT reset `this.matched`\n this.matches = false;\n\n this._more = false;\n this._backtrack = false;\n var col = (this.yylloc ? this.yylloc.last_column : 0);\n\n this.yylloc = {\n first_line: this.yylineno + 1,\n first_column: col,\n last_line: this.yylineno + 1,\n last_column: col,\n range: [this.offset, this.offset]\n };\n },\n\n /**\n * resets the lexer, sets new input\n * \n * @public\n * @this {RegExpLexer}\n */\n setInput: function lexer_setInput(input, yy) {\n this.yy = yy || this.yy || {};\n\n // also check if we've fully initialized the lexer instance,\n // including expansion work to be done to go from a loaded\n // lexer to a usable lexer:\n if (!this.__decompressed) {\n // step 1: decompress the regex list:\n var rules = this.rules;\n\n for (var i = 0, len = rules.length; i < len; i++) {\n var rule_re = rules[i];\n\n // compression: is the RE an xref to another RE slot in the rules[] table?\n if (typeof rule_re === 'number') {\n rules[i] = rules[rule_re];\n }\n }\n\n // step 2: unfold the conditions[] set to make these ready for use:\n var conditions = this.conditions;\n\n for (var k in conditions) {\n var spec = conditions[k];\n var rule_ids = spec.rules;\n var len = rule_ids.length;\n var rule_regexes = new Array(len + 1); // slot 0 is unused; we use a 1-based index approach here to keep the hottest code in `lexer_next()` fast and simple! \n var rule_new_ids = new Array(len + 1);\n\n for (var i = 0; i < len; i++) {\n var idx = rule_ids[i];\n var rule_re = rules[idx];\n rule_regexes[i + 1] = rule_re;\n rule_new_ids[i + 1] = idx;\n }\n\n spec.rules = rule_new_ids;\n spec.__rule_regexes = rule_regexes;\n spec.__rule_count = len;\n }\n\n this.__decompressed = true;\n }\n\n this._input = input || '';\n this.clear();\n this._signaled_error_token = false;\n this.done = false;\n this.yylineno = 0;\n this.matched = '';\n this.conditionStack = ['INITIAL'];\n this.__currentRuleSet__ = null;\n\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0,\n range: [0, 0]\n };\n\n this.offset = 0;\n return this;\n },\n\n /**\n * edit the remaining input via user-specified callback.\n * This can be used to forward-adjust the input-to-parse, \n * e.g. inserting macro expansions and alike in the\n * input which has yet to be lexed.\n * The behaviour of this API contrasts the `unput()` et al\n * APIs as those act on the *consumed* input, while this\n * one allows one to manipulate the future, without impacting\n * the current `yyloc` cursor location or any history. \n * \n * Use this API to help implement C-preprocessor-like\n * `#include` statements, etc.\n * \n * The provided callback must be synchronous and is\n * expected to return the edited input (string).\n *\n * The `cpsArg` argument value is passed to the callback\n * as-is.\n *\n * `callback` interface: \n * `function callback(input, cpsArg)`\n * \n * - `input` will carry the remaining-input-to-lex string\n * from the lexer.\n * - `cpsArg` is `cpsArg` passed into this API.\n * \n * The `this` reference for the callback will be set to\n * reference this lexer instance so that userland code\n * in the callback can easily and quickly access any lexer\n * API. \n *\n * When the callback returns a non-string-type falsey value,\n * we assume the callback did not edit the input and we\n * will using the input as-is.\n *\n * When the callback returns a non-string-type value, it\n * is converted to a string for lexing via the `\"\" + retval`\n * operation. (See also why: http://2ality.com/2012/03/converting-to-string.html \n * -- that way any returned object's `toValue()` and `toString()`\n * methods will be invoked in a proper/desirable order.)\n * \n * @public\n * @this {RegExpLexer}\n */\n editRemainingInput: function lexer_editRemainingInput(callback, cpsArg) {\n var rv = callback.call(this, this._input, cpsArg);\n\n if (typeof rv !== 'string') {\n if (rv) {\n this._input = '' + rv;\n } \n // else: keep `this._input` as is. \n } else {\n this._input = rv;\n }\n\n return this;\n },\n\n /**\n * consumes and returns one char from the input\n * \n * @public\n * @this {RegExpLexer}\n */\n input: function lexer_input() {\n if (!this._input) {\n //this.done = true; -- don't set `done` as we want the lex()/next() API to be able to produce one custom EOF token match after this anyhow. (lexer can match special <> tokens and perform user action code for a <> match, but only does so *once*)\n return null;\n }\n\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n\n // Count the linenumber up when we hit the LF (or a stand-alone CR).\n // On CRLF, the linenumber is incremented when you fetch the CR or the CRLF combo\n // and we advance immediately past the LF as well, returning both together as if\n // it was all a single 'character' only.\n var slice_len = 1;\n\n var lines = false;\n\n if (ch === '\\n') {\n lines = true;\n } else if (ch === '\\r') {\n lines = true;\n var ch2 = this._input[1];\n\n if (ch2 === '\\n') {\n slice_len++;\n ch += ch2;\n this.yytext += ch2;\n this.yyleng++;\n this.offset++;\n this.match += ch2;\n this.matched += ch2;\n this.yylloc.range[1]++;\n }\n }\n\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n this.yylloc.last_column = 0;\n } else {\n this.yylloc.last_column++;\n }\n\n this.yylloc.range[1]++;\n this._input = this._input.slice(slice_len);\n return ch;\n },\n\n /**\n * unshifts one char (or an entire string) into the input\n * \n * @public\n * @this {RegExpLexer}\n */\n unput: function lexer_unput(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n this.yyleng = this.yytext.length;\n this.offset -= len;\n this.match = this.match.substr(0, this.match.length - len);\n this.matched = this.matched.substr(0, this.matched.length - len);\n\n if (lines.length > 1) {\n this.yylineno -= lines.length - 1;\n this.yylloc.last_line = this.yylineno + 1;\n\n // Get last entirely matched line into the `pre_lines[]` array's\n // last index slot; we don't mind when other previously \n // matched lines end up in the array too. \n var pre = this.match;\n\n var pre_lines = pre.split(/(?:\\r\\n?|\\n)/g);\n\n if (pre_lines.length === 1) {\n pre = this.matched;\n pre_lines = pre.split(/(?:\\r\\n?|\\n)/g);\n }\n\n this.yylloc.last_column = pre_lines[pre_lines.length - 1].length;\n } else {\n this.yylloc.last_column -= len;\n }\n\n this.yylloc.range[1] = this.yylloc.range[0] + this.yyleng;\n this.done = false;\n return this;\n },\n\n /**\n * cache matched text and append it on next action\n * \n * @public\n * @this {RegExpLexer}\n */\n more: function lexer_more() {\n this._more = true;\n return this;\n },\n\n /**\n * signal the lexer that this rule fails to match the input, so the\n * next matching rule (regex) should be tested instead.\n * \n * @public\n * @this {RegExpLexer}\n */\n reject: function lexer_reject() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n // when the `parseError()` call returns, we MUST ensure that the error is registered.\n // We accomplish this by signaling an 'error' token to be produced for the current\n // `.lex()` run.\n var lineno_msg = '';\n\n if (this.yylloc) {\n lineno_msg = ' on line ' + (this.yylineno + 1);\n }\n\n var p = this.constructLexErrorInfo(\n 'Lexical error' + lineno_msg + ': You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).',\n false\n );\n\n this._signaled_error_token = this.parseError(p.errStr, p, this.JisonLexerError) || this.ERROR;\n }\n\n return this;\n },\n\n /**\n * retain first n characters of the match\n * \n * @public\n * @this {RegExpLexer}\n */\n less: function lexer_less(n) {\n return this.unput(this.match.slice(n));\n },\n\n /**\n * return (part of the) already matched input, i.e. for error\n * messages.\n * \n * Limit the returned string length to `maxSize` (default: 20).\n * \n * Limit the returned string to the `maxLines` number of lines of\n * input (default: 1).\n * \n * Negative limit values equal *unlimited*.\n * \n * @public\n * @this {RegExpLexer}\n */\n pastInput: function lexer_pastInput(maxSize, maxLines) {\n var past = this.matched.substring(0, this.matched.length - this.match.length);\n\n if (maxSize < 0)\n maxSize = past.length;\n else if (!maxSize)\n maxSize = 20;\n\n if (maxLines < 0)\n maxLines = past.length; // can't ever have more input lines than this! \n else if (!maxLines)\n maxLines = 1;\n\n // `substr` anticipation: treat \\r\\n as a single character and take a little\n // more than necessary so that we can still properly check against maxSize\n // after we've transformed and limited the newLines in here:\n past = past.substr(-maxSize * 2 - 2);\n\n // now that we have a significantly reduced string to process, transform the newlines\n // and chop them, then limit them:\n var a = past.replace(/\\r\\n|\\r/g, '\\n').split('\\n');\n\n a = a.slice(-maxLines);\n past = a.join('\\n');\n\n // When, after limiting to maxLines, we still have too much to return,\n // do add an ellipsis prefix...\n if (past.length > maxSize) {\n past = '...' + past.substr(-maxSize);\n }\n\n return past;\n },\n\n /**\n * return (part of the) upcoming input, i.e. for error messages.\n * \n * Limit the returned string length to `maxSize` (default: 20).\n * \n * Limit the returned string to the `maxLines` number of lines of input (default: 1).\n * \n * Negative limit values equal *unlimited*.\n *\n * > ### NOTE ###\n * >\n * > *\"upcoming input\"* is defined as the whole of the both\n * > the *currently lexed* input, together with any remaining input\n * > following that. *\"currently lexed\"* input is the input \n * > already recognized by the lexer but not yet returned with\n * > the lexer token. This happens when you are invoking this API\n * > from inside any lexer rule action code block. \n * >\n * \n * @public\n * @this {RegExpLexer}\n */\n upcomingInput: function lexer_upcomingInput(maxSize, maxLines) {\n var next = this.match;\n\n if (maxSize < 0)\n maxSize = next.length + this._input.length;\n else if (!maxSize)\n maxSize = 20;\n\n if (maxLines < 0)\n maxLines = maxSize; // can't ever have more input lines than this! \n else if (!maxLines)\n maxLines = 1;\n\n // `substring` anticipation: treat \\r\\n as a single character and take a little\n // more than necessary so that we can still properly check against maxSize\n // after we've transformed and limited the newLines in here:\n if (next.length < maxSize * 2 + 2) {\n next += this._input.substring(0, maxSize * 2 + 2); // substring is faster on Chrome/V8 \n }\n\n // now that we have a significantly reduced string to process, transform the newlines\n // and chop them, then limit them:\n var a = next.replace(/\\r\\n|\\r/g, '\\n').split('\\n');\n\n a = a.slice(0, maxLines);\n next = a.join('\\n');\n\n // When, after limiting to maxLines, we still have too much to return,\n // do add an ellipsis postfix...\n if (next.length > maxSize) {\n next = next.substring(0, maxSize) + '...';\n }\n\n return next;\n },\n\n /**\n * return a string which displays the character position where the\n * lexing error occurred, i.e. for error messages\n * \n * @public\n * @this {RegExpLexer}\n */\n showPosition: function lexer_showPosition(maxPrefix, maxPostfix) {\n var pre = this.pastInput(maxPrefix).replace(/\\s/g, ' ');\n var c = new Array(pre.length + 1).join('-');\n return pre + this.upcomingInput(maxPostfix).replace(/\\s/g, ' ') + '\\n' + c + '^';\n },\n\n /**\n * return an YYLLOC info object derived off the given context (actual, preceding, following, current).\n * Use this method when the given `actual` location is not guaranteed to exist (i.e. when\n * it MAY be NULL) and you MUST have a valid location info object anyway:\n * then we take the given context of the `preceding` and `following` locations, IFF those are available,\n * and reconstruct the `actual` location info from those.\n * If this fails, the heuristic is to take the `current` location, IFF available.\n * If this fails as well, we assume the sought location is at/around the current lexer position\n * and then produce that one as a response. DO NOTE that these heuristic/derived location info\n * values MAY be inaccurate!\n *\n * NOTE: `deriveLocationInfo()` ALWAYS produces a location info object *copy* of `actual`, not just\n * a *reference* hence all input location objects can be assumed to be 'constant' (function has no side-effects).\n * \n * @public\n * @this {RegExpLexer}\n */\n deriveLocationInfo: function lexer_deriveYYLLOC(actual, preceding, following, current) {\n var loc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0,\n range: [0, 0]\n };\n\n if (actual) {\n loc.first_line = actual.first_line | 0;\n loc.last_line = actual.last_line | 0;\n loc.first_column = actual.first_column | 0;\n loc.last_column = actual.last_column | 0;\n\n if (actual.range) {\n loc.range[0] = actual.range[0] | 0;\n loc.range[1] = actual.range[1] | 0;\n }\n }\n\n if (loc.first_line <= 0 || loc.last_line < loc.first_line) {\n // plan B: heuristic using preceding and following:\n if (loc.first_line <= 0 && preceding) {\n loc.first_line = preceding.last_line | 0;\n loc.first_column = preceding.last_column | 0;\n\n if (preceding.range) {\n loc.range[0] = actual.range[1] | 0;\n }\n }\n\n if ((loc.last_line <= 0 || loc.last_line < loc.first_line) && following) {\n loc.last_line = following.first_line | 0;\n loc.last_column = following.first_column | 0;\n\n if (following.range) {\n loc.range[1] = actual.range[0] | 0;\n }\n }\n\n // plan C?: see if the 'current' location is useful/sane too:\n if (loc.first_line <= 0 && current && (loc.last_line <= 0 || current.last_line <= loc.last_line)) {\n loc.first_line = current.first_line | 0;\n loc.first_column = current.first_column | 0;\n\n if (current.range) {\n loc.range[0] = current.range[0] | 0;\n }\n }\n\n if (loc.last_line <= 0 && current && (loc.first_line <= 0 || current.first_line >= loc.first_line)) {\n loc.last_line = current.last_line | 0;\n loc.last_column = current.last_column | 0;\n\n if (current.range) {\n loc.range[1] = current.range[1] | 0;\n }\n }\n }\n\n // sanitize: fix last_line BEFORE we fix first_line as we use the 'raw' value of the latter\n // or plan D heuristics to produce a 'sensible' last_line value:\n if (loc.last_line <= 0) {\n if (loc.first_line <= 0) {\n loc.first_line = this.yylloc.first_line;\n loc.last_line = this.yylloc.last_line;\n loc.first_column = this.yylloc.first_column;\n loc.last_column = this.yylloc.last_column;\n loc.range[0] = this.yylloc.range[0];\n loc.range[1] = this.yylloc.range[1];\n } else {\n loc.last_line = this.yylloc.last_line;\n loc.last_column = this.yylloc.last_column;\n loc.range[1] = this.yylloc.range[1];\n }\n }\n\n if (loc.first_line <= 0) {\n loc.first_line = loc.last_line;\n loc.first_column = 0; // loc.last_column; \n loc.range[1] = loc.range[0];\n }\n\n if (loc.first_column < 0) {\n loc.first_column = 0;\n }\n\n if (loc.last_column < 0) {\n loc.last_column = (loc.first_column > 0 ? loc.first_column : 80);\n }\n\n return loc;\n },\n\n /**\n * return a string which displays the lines & columns of input which are referenced \n * by the given location info range, plus a few lines of context.\n * \n * This function pretty-prints the indicated section of the input, with line numbers \n * and everything!\n * \n * This function is very useful to provide highly readable error reports, while\n * the location range may be specified in various flexible ways:\n * \n * - `loc` is the location info object which references the area which should be\n * displayed and 'marked up': these lines & columns of text are marked up by `^`\n * characters below each character in the entire input range.\n * \n * - `context_loc` is the *optional* location info object which instructs this\n * pretty-printer how much *leading* context should be displayed alongside\n * the area referenced by `loc`. This can help provide context for the displayed\n * error, etc.\n * \n * When this location info is not provided, a default context of 3 lines is\n * used.\n * \n * - `context_loc2` is another *optional* location info object, which serves\n * a similar purpose to `context_loc`: it specifies the amount of *trailing*\n * context lines to display in the pretty-print output.\n * \n * When this location info is not provided, a default context of 1 line only is\n * used.\n * \n * Special Notes:\n * \n * - when the `loc`-indicated range is very large (about 5 lines or more), then\n * only the first and last few lines of this block are printed while a\n * `...continued...` message will be printed between them.\n * \n * This serves the purpose of not printing a huge amount of text when the `loc`\n * range happens to be huge: this way a manageable & readable output results\n * for arbitrary large ranges.\n * \n * - this function can display lines of input which whave not yet been lexed.\n * `prettyPrintRange()` can access the entire input!\n * \n * @public\n * @this {RegExpLexer}\n */\n prettyPrintRange: function lexer_prettyPrintRange(loc, context_loc, context_loc2) {\n loc = this.deriveLocationInfo(loc, context_loc, context_loc2);\n const CONTEXT = 3;\n const CONTEXT_TAIL = 1;\n const MINIMUM_VISIBLE_NONEMPTY_LINE_COUNT = 2;\n var input = this.matched + this._input;\n var lines = input.split('\\n');\n var l0 = Math.max(1, (context_loc ? context_loc.first_line : loc.first_line - CONTEXT));\n var l1 = Math.max(1, (context_loc2 ? context_loc2.last_line : loc.last_line + CONTEXT_TAIL));\n var lineno_display_width = 1 + Math.log10(l1 | 1) | 0;\n var ws_prefix = new Array(lineno_display_width).join(' ');\n var nonempty_line_indexes = [];\n\n var rv = lines.slice(l0 - 1, l1 + 1).map(function injectLineNumber(line, index) {\n var lno = index + l0;\n var lno_pfx = (ws_prefix + lno).substr(-lineno_display_width);\n var rv = lno_pfx + ': ' + line;\n var errpfx = new Array(lineno_display_width + 1).join('^');\n var offset = 2 + 1;\n var len = 0;\n\n if (lno === loc.first_line) {\n offset += loc.first_column;\n\n len = Math.max(\n 2,\n ((lno === loc.last_line ? loc.last_column : line.length)) - loc.first_column + 1\n );\n } else if (lno === loc.last_line) {\n len = Math.max(2, loc.last_column + 1);\n } else if (lno > loc.first_line && lno < loc.last_line) {\n len = Math.max(2, line.length + 1);\n }\n\n if (len) {\n var lead = new Array(offset).join('.');\n var mark = new Array(len).join('^');\n rv += '\\n' + errpfx + lead + mark;\n\n if (line.trim().length > 0) {\n nonempty_line_indexes.push(index);\n }\n }\n\n rv = rv.replace(/\\t/g, ' ');\n return rv;\n });\n\n // now make sure we don't print an overly large amount of error area: limit it \n // to the top and bottom line count:\n if (nonempty_line_indexes.length > 2 * MINIMUM_VISIBLE_NONEMPTY_LINE_COUNT) {\n var clip_start = nonempty_line_indexes[MINIMUM_VISIBLE_NONEMPTY_LINE_COUNT - 1] + 1;\n var clip_end = nonempty_line_indexes[nonempty_line_indexes.length - MINIMUM_VISIBLE_NONEMPTY_LINE_COUNT] - 1;\n var intermediate_line = new Array(lineno_display_width + 1).join(' ') + ' (...continued...)';\n intermediate_line += '\\n' + new Array(lineno_display_width + 1).join('-') + ' (---------------)';\n rv.splice(clip_start, clip_end - clip_start + 1, intermediate_line);\n }\n\n return rv.join('\\n');\n },\n\n /**\n * helper function, used to produce a human readable description as a string, given\n * the input `yylloc` location object.\n * \n * Set `display_range_too` to TRUE to include the string character index position(s)\n * in the description if the `yylloc.range` is available.\n * \n * @public\n * @this {RegExpLexer}\n */\n describeYYLLOC: function lexer_describe_yylloc(yylloc, display_range_too) {\n var l1 = yylloc.first_line;\n var l2 = yylloc.last_line;\n var c1 = yylloc.first_column;\n var c2 = yylloc.last_column;\n var dl = l2 - l1;\n var dc = c2 - c1;\n var rv;\n\n if (dl === 0) {\n rv = 'line ' + l1 + ', ';\n\n if (dc <= 1) {\n rv += 'column ' + c1;\n } else {\n rv += 'columns ' + c1 + ' .. ' + c2;\n }\n } else {\n rv = 'lines ' + l1 + '(column ' + c1 + ') .. ' + l2 + '(column ' + c2 + ')';\n }\n\n if (yylloc.range && display_range_too) {\n var r1 = yylloc.range[0];\n var r2 = yylloc.range[1] - 1;\n\n if (r2 <= r1) {\n rv += ' {String Offset: ' + r1 + '}';\n } else {\n rv += ' {String Offset range: ' + r1 + ' .. ' + r2 + '}';\n }\n }\n\n return rv;\n },\n\n /**\n * test the lexed token: return FALSE when not a match, otherwise return token.\n * \n * `match` is supposed to be an array coming out of a regex match, i.e. `match[0]`\n * contains the actually matched text string.\n * \n * Also move the input cursor forward and update the match collectors:\n * \n * - `yytext`\n * - `yyleng`\n * - `match`\n * - `matches`\n * - `yylloc`\n * - `offset`\n * \n * @public\n * @this {RegExpLexer}\n */\n test_match: function lexer_test_match(match, indexed_rule) {\n var token, lines, backup, match_str, match_str_len;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.yylloc.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column,\n range: this.yylloc.range.slice(0)\n },\n\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n\n //_signaled_error_token: this._signaled_error_token,\n yy: this.yy,\n\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n }\n\n match_str = match[0];\n match_str_len = match_str.length;\n\n // if (match_str.indexOf('\\n') !== -1 || match_str.indexOf('\\r') !== -1) {\n lines = match_str.split(/(?:\\r\\n?|\\n)/g);\n\n if (lines.length > 1) {\n this.yylineno += lines.length - 1;\n this.yylloc.last_line = this.yylineno + 1;\n this.yylloc.last_column = lines[lines.length - 1].length;\n } else {\n this.yylloc.last_column += match_str_len;\n }\n\n // }\n this.yytext += match_str;\n\n this.match += match_str;\n this.matched += match_str;\n this.matches = match;\n this.yyleng = this.yytext.length;\n this.yylloc.range[1] += match_str_len;\n\n // previous lex rules MAY have invoked the `more()` API rather than producing a token:\n // those rules will already have moved this `offset` forward matching their match lengths,\n // hence we must only add our own match length now:\n this.offset += match_str_len;\n\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match_str_len);\n\n // calling this method:\n //\n // function lexer__performAction(yy, yyrulenumber, YY_START) {...}\n token = this.performAction.call(\n this,\n this.yy,\n indexed_rule,\n this.conditionStack[this.conditionStack.length - 1] /* = YY_START */\n );\n\n // otherwise, when the action codes are all simple return token statements:\n //token = this.simpleCaseActionClusters[indexed_rule];\n\n if (this.done && this._input) {\n this.done = false;\n }\n\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n\n this.__currentRuleSet__ = null;\n return false; // rule action called reject() implying the next rule should be tested instead. \n } else if (this._signaled_error_token) {\n // produce one 'error' token as `.parseError()` in `reject()`\n // did not guarantee a failure signal by throwing an exception!\n token = this._signaled_error_token;\n\n this._signaled_error_token = false;\n return token;\n }\n\n return false;\n },\n\n /**\n * return next match in input\n * \n * @public\n * @this {RegExpLexer}\n */\n next: function lexer_next() {\n if (this.done) {\n this.clear();\n return this.EOF;\n }\n\n if (!this._input) {\n this.done = true;\n }\n\n var token, match, tempMatch, index;\n\n if (!this._more) {\n this.clear();\n }\n\n var spec = this.__currentRuleSet__;\n\n if (!spec) {\n // Update the ruleset cache as we apparently encountered a state change or just started lexing.\n // The cache is set up for fast lookup -- we assume a lexer will switch states much less often than it will\n // invoke the `lex()` token-producing API and related APIs, hence caching the set for direct access helps\n // speed up those activities a tiny bit.\n spec = this.__currentRuleSet__ = this._currentRules();\n\n // Check whether a *sane* condition has been pushed before: this makes the lexer robust against\n // user-programmer bugs such as https://github.com/zaach/jison-lex/issues/19\n if (!spec || !spec.rules) {\n var lineno_msg = '';\n\n if (this.options.trackPosition) {\n lineno_msg = ' on line ' + (this.yylineno + 1);\n }\n\n var p = this.constructLexErrorInfo(\n 'Internal lexer engine error' + lineno_msg + ': The lex grammar programmer pushed a non-existing condition name \"' + this.topState() + '\"; this is a fatal error and should be reported to the application programmer team!',\n false\n );\n\n // produce one 'error' token until this situation has been resolved, most probably by parse termination!\n return this.parseError(p.errStr, p, this.JisonLexerError) || this.ERROR;\n }\n }\n\n var rule_ids = spec.rules;\n var regexes = spec.__rule_regexes;\n var len = spec.__rule_count;\n\n // Note: the arrays are 1-based, while `len` itself is a valid index,\n // hence the non-standard less-or-equal check in the next loop condition!\n for (var i = 1; i <= len; i++) {\n tempMatch = this._input.match(regexes[i]);\n\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rule_ids[i]);\n\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = undefined;\n continue; // rule action called reject() implying a rule MISmatch. \n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n\n if (match) {\n token = this.test_match(match, rule_ids[index]);\n\n if (token !== false) {\n return token;\n }\n\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n\n if (!this._input) {\n this.done = true;\n this.clear();\n return this.EOF;\n } else {\n var lineno_msg = '';\n\n if (this.options.trackPosition) {\n lineno_msg = ' on line ' + (this.yylineno + 1);\n }\n\n var p = this.constructLexErrorInfo(\n 'Lexical error' + lineno_msg + ': Unrecognized text.',\n this.options.lexerErrorsAreRecoverable\n );\n\n var pendingInput = this._input;\n var activeCondition = this.topState();\n var conditionStackDepth = this.conditionStack.length;\n token = this.parseError(p.errStr, p, this.JisonLexerError) || this.ERROR;\n\n if (token === this.ERROR) {\n // we can try to recover from a lexer error that `parseError()` did not 'recover' for us\n // by moving forward at least one character at a time IFF the (user-specified?) `parseError()`\n // has not consumed/modified any pending input or changed state in the error handler:\n if (!this.matches && // and make sure the input has been modified/consumed ...\n pendingInput === this._input && // ...or the lexer state has been modified significantly enough\n // to merit a non-consuming error handling action right now.\n activeCondition === this.topState() && conditionStackDepth === this.conditionStack.length) {\n this.input();\n }\n }\n\n return token;\n }\n },\n\n /**\n * return next match that has a token\n * \n * @public\n * @this {RegExpLexer}\n */\n lex: function lexer_lex() {\n var r;\n\n // allow the PRE/POST handlers set/modify the return token for maximum flexibility of the generated lexer:\n if (typeof this.pre_lex === 'function') {\n r = this.pre_lex.call(this, 0);\n }\n\n if (typeof this.options.pre_lex === 'function') {\n // (also account for a userdef function which does not return any value: keep the token as is)\n r = this.options.pre_lex.call(this, r) || r;\n }\n\n if (this.yy && typeof this.yy.pre_lex === 'function') {\n // (also account for a userdef function which does not return any value: keep the token as is)\n r = this.yy.pre_lex.call(this, r) || r;\n }\n\n while (!r) {\n r = this.next();\n }\n\n if (this.yy && typeof this.yy.post_lex === 'function') {\n // (also account for a userdef function which does not return any value: keep the token as is)\n r = this.yy.post_lex.call(this, r) || r;\n }\n\n if (typeof this.options.post_lex === 'function') {\n // (also account for a userdef function which does not return any value: keep the token as is)\n r = this.options.post_lex.call(this, r) || r;\n }\n\n if (typeof this.post_lex === 'function') {\n // (also account for a userdef function which does not return any value: keep the token as is)\n r = this.post_lex.call(this, r) || r;\n }\n\n return r;\n },\n\n /**\n * return next match that has a token. Identical to the `lex()` API but does not invoke any of the \n * `pre_lex()` nor any of the `post_lex()` callbacks.\n * \n * @public\n * @this {RegExpLexer}\n */\n fastLex: function lexer_fastLex() {\n var r;\n\n while (!r) {\n r = this.next();\n }\n\n return r;\n },\n\n /**\n * return info about the lexer state that can help a parser or other lexer API user to use the\n * most efficient means available. This API is provided to aid run-time performance for larger\n * systems which employ this lexer.\n * \n * @public\n * @this {RegExpLexer}\n */\n canIUse: function lexer_canIUse() {\n var rv = {\n fastLex: !(typeof this.pre_lex === 'function' || typeof this.options.pre_lex === 'function' || this.yy && typeof this.yy.pre_lex === 'function' || this.yy && typeof this.yy.post_lex === 'function' || typeof this.options.post_lex === 'function' || typeof this.post_lex === 'function') && typeof this.fastLex === 'function'\n };\n\n return rv;\n },\n\n /**\n * backwards compatible alias for `pushState()`;\n * the latter is symmetrical with `popState()` and we advise to use\n * those APIs in any modern lexer code, rather than `begin()`.\n * \n * @public\n * @this {RegExpLexer}\n */\n begin: function lexer_begin(condition) {\n return this.pushState(condition);\n },\n\n /**\n * activates a new lexer condition state (pushes the new lexer\n * condition state onto the condition stack)\n * \n * @public\n * @this {RegExpLexer}\n */\n pushState: function lexer_pushState(condition) {\n this.conditionStack.push(condition);\n this.__currentRuleSet__ = null;\n return this;\n },\n\n /**\n * pop the previously active lexer condition state off the condition\n * stack\n * \n * @public\n * @this {RegExpLexer}\n */\n popState: function lexer_popState() {\n var n = this.conditionStack.length - 1;\n\n if (n > 0) {\n this.__currentRuleSet__ = null;\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n /**\n * return the currently active lexer condition state; when an index\n * argument is provided it produces the N-th previous condition state,\n * if available\n * \n * @public\n * @this {RegExpLexer}\n */\n topState: function lexer_topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return 'INITIAL';\n }\n },\n\n /**\n * (internal) determine the lexer rule set which is active for the\n * currently active lexer condition state\n * \n * @public\n * @this {RegExpLexer}\n */\n _currentRules: function lexer__currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]];\n } else {\n return this.conditions['INITIAL'];\n }\n },\n\n /**\n * return the number of states currently on the stack\n * \n * @public\n * @this {RegExpLexer}\n */\n stateStackSize: function lexer_stateStackSize() {\n return this.conditionStack.length;\n },\n\n options: {\n trackPosition: true\n },\n\n JisonLexerError: JisonLexerError,\n\n performAction: function lexer__performAction(yy, yyrulenumber, YY_START) {\n var yy_ = this;\n var YYSTATE = YY_START;\n\n switch (yyrulenumber) {\n case 1:\n /*! Conditions:: INITIAL */\n /*! Rule:: \\s+ */\n /* skip whitespace */\n break;\n\n default:\n return this.simpleCaseActionClusters[yyrulenumber];\n }\n },\n\n simpleCaseActionClusters: {\n /*! Conditions:: INITIAL */\n /*! Rule:: (--[0-9a-z-A-Z-]*) */\n 0: 13,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: \\* */\n 2: 5,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: \\/ */\n 3: 6,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: \\+ */\n 4: 3,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: - */\n 5: 4,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: ([0-9]+(\\.[0-9]*)?|\\.[0-9]+)px\\b */\n 6: 15,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: ([0-9]+(\\.[0-9]*)?|\\.[0-9]+)cm\\b */\n 7: 15,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: ([0-9]+(\\.[0-9]*)?|\\.[0-9]+)mm\\b */\n 8: 15,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: ([0-9]+(\\.[0-9]*)?|\\.[0-9]+)in\\b */\n 9: 15,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: ([0-9]+(\\.[0-9]*)?|\\.[0-9]+)pt\\b */\n 10: 15,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: ([0-9]+(\\.[0-9]*)?|\\.[0-9]+)pc\\b */\n 11: 15,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: ([0-9]+(\\.[0-9]*)?|\\.[0-9]+)deg\\b */\n 12: 16,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: ([0-9]+(\\.[0-9]*)?|\\.[0-9]+)grad\\b */\n 13: 16,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: ([0-9]+(\\.[0-9]*)?|\\.[0-9]+)rad\\b */\n 14: 16,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: ([0-9]+(\\.[0-9]*)?|\\.[0-9]+)turn\\b */\n 15: 16,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: ([0-9]+(\\.[0-9]*)?|\\.[0-9]+)s\\b */\n 16: 17,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: ([0-9]+(\\.[0-9]*)?|\\.[0-9]+)ms\\b */\n 17: 17,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: ([0-9]+(\\.[0-9]*)?|\\.[0-9]+)Hz\\b */\n 18: 18,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: ([0-9]+(\\.[0-9]*)?|\\.[0-9]+)kHz\\b */\n 19: 18,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: ([0-9]+(\\.[0-9]*)?|\\.[0-9]+)dpi\\b */\n 20: 19,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: ([0-9]+(\\.[0-9]*)?|\\.[0-9]+)dpcm\\b */\n 21: 19,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: ([0-9]+(\\.[0-9]*)?|\\.[0-9]+)dppx\\b */\n 22: 19,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: ([0-9]+(\\.[0-9]*)?|\\.[0-9]+)em\\b */\n 23: 20,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: ([0-9]+(\\.[0-9]*)?|\\.[0-9]+)ex\\b */\n 24: 21,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: ([0-9]+(\\.[0-9]*)?|\\.[0-9]+)ch\\b */\n 25: 22,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: ([0-9]+(\\.[0-9]*)?|\\.[0-9]+)rem\\b */\n 26: 23,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: ([0-9]+(\\.[0-9]*)?|\\.[0-9]+)vw\\b */\n 27: 25,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: ([0-9]+(\\.[0-9]*)?|\\.[0-9]+)vh\\b */\n 28: 24,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: ([0-9]+(\\.[0-9]*)?|\\.[0-9]+)vmin\\b */\n 29: 26,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: ([0-9]+(\\.[0-9]*)?|\\.[0-9]+)vmax\\b */\n 30: 27,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: ([0-9]+(\\.[0-9]*)?|\\.[0-9]+)% */\n 31: 28,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: ([0-9]+(\\.[0-9]*)?|\\.[0-9]+)\\b */\n 32: 11,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: (calc) */\n 33: 9,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: (var) */\n 34: 12,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: ([a-z]+) */\n 35: 10,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: \\( */\n 36: 7,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: \\) */\n 37: 8,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: , */\n 38: 14,\n\n /*! Conditions:: INITIAL */\n /*! Rule:: $ */\n 39: 1\n },\n\n rules: [\n /* 0: */ /^(?:(--[\\d\\-A-Za-z]*))/,\n /* 1: */ /^(?:\\s+)/,\n /* 2: */ /^(?:\\*)/,\n /* 3: */ /^(?:\\/)/,\n /* 4: */ /^(?:\\+)/,\n /* 5: */ /^(?:-)/,\n /* 6: */ /^(?:(\\d+(\\.\\d*)?|\\.\\d+)px\\b)/,\n /* 7: */ /^(?:(\\d+(\\.\\d*)?|\\.\\d+)cm\\b)/,\n /* 8: */ /^(?:(\\d+(\\.\\d*)?|\\.\\d+)mm\\b)/,\n /* 9: */ /^(?:(\\d+(\\.\\d*)?|\\.\\d+)in\\b)/,\n /* 10: */ /^(?:(\\d+(\\.\\d*)?|\\.\\d+)pt\\b)/,\n /* 11: */ /^(?:(\\d+(\\.\\d*)?|\\.\\d+)pc\\b)/,\n /* 12: */ /^(?:(\\d+(\\.\\d*)?|\\.\\d+)deg\\b)/,\n /* 13: */ /^(?:(\\d+(\\.\\d*)?|\\.\\d+)grad\\b)/,\n /* 14: */ /^(?:(\\d+(\\.\\d*)?|\\.\\d+)rad\\b)/,\n /* 15: */ /^(?:(\\d+(\\.\\d*)?|\\.\\d+)turn\\b)/,\n /* 16: */ /^(?:(\\d+(\\.\\d*)?|\\.\\d+)s\\b)/,\n /* 17: */ /^(?:(\\d+(\\.\\d*)?|\\.\\d+)ms\\b)/,\n /* 18: */ /^(?:(\\d+(\\.\\d*)?|\\.\\d+)Hz\\b)/,\n /* 19: */ /^(?:(\\d+(\\.\\d*)?|\\.\\d+)kHz\\b)/,\n /* 20: */ /^(?:(\\d+(\\.\\d*)?|\\.\\d+)dpi\\b)/,\n /* 21: */ /^(?:(\\d+(\\.\\d*)?|\\.\\d+)dpcm\\b)/,\n /* 22: */ /^(?:(\\d+(\\.\\d*)?|\\.\\d+)dppx\\b)/,\n /* 23: */ /^(?:(\\d+(\\.\\d*)?|\\.\\d+)em\\b)/,\n /* 24: */ /^(?:(\\d+(\\.\\d*)?|\\.\\d+)ex\\b)/,\n /* 25: */ /^(?:(\\d+(\\.\\d*)?|\\.\\d+)ch\\b)/,\n /* 26: */ /^(?:(\\d+(\\.\\d*)?|\\.\\d+)rem\\b)/,\n /* 27: */ /^(?:(\\d+(\\.\\d*)?|\\.\\d+)vw\\b)/,\n /* 28: */ /^(?:(\\d+(\\.\\d*)?|\\.\\d+)vh\\b)/,\n /* 29: */ /^(?:(\\d+(\\.\\d*)?|\\.\\d+)vmin\\b)/,\n /* 30: */ /^(?:(\\d+(\\.\\d*)?|\\.\\d+)vmax\\b)/,\n /* 31: */ /^(?:(\\d+(\\.\\d*)?|\\.\\d+)%)/,\n /* 32: */ /^(?:(\\d+(\\.\\d*)?|\\.\\d+)\\b)/,\n /* 33: */ /^(?:(calc))/,\n /* 34: */ /^(?:(var))/,\n /* 35: */ /^(?:([a-z]+))/,\n /* 36: */ /^(?:\\()/,\n /* 37: */ /^(?:\\))/,\n /* 38: */ /^(?:,)/,\n /* 39: */ /^(?:$)/\n ],\n\n conditions: {\n 'INITIAL': {\n rules: [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17,\n 18,\n 19,\n 20,\n 21,\n 22,\n 23,\n 24,\n 25,\n 26,\n 27,\n 28,\n 29,\n 30,\n 31,\n 32,\n 33,\n 34,\n 35,\n 36,\n 37,\n 38,\n 39\n ],\n\n inclusive: true\n }\n }\n };\n\n return lexer;\n}();\nparser.lexer = lexer;\n\n\n\nfunction Parser() {\n this.yy = {};\n}\nParser.prototype = parser;\nparser.Parser = Parser;\n\nreturn new Parser();\n})();\n\n \n\n\nif (typeof require !== 'undefined' && typeof exports !== 'undefined') {\n exports.parser = parser;\n exports.Parser = parser.Parser;\n exports.parse = function () {\n return parser.parse.apply(parser, arguments);\n };\n \n}\n","var parse = require(\"./parse\");\nvar walk = require(\"./walk\");\nvar stringify = require(\"./stringify\");\n\nfunction ValueParser(value) {\n if (this instanceof ValueParser) {\n this.nodes = parse(value);\n return this;\n }\n return new ValueParser(value);\n}\n\nValueParser.prototype.toString = function() {\n return Array.isArray(this.nodes) ? stringify(this.nodes) : \"\";\n};\n\nValueParser.prototype.walk = function(cb, bubble) {\n walk(this.nodes, cb, bubble);\n return this;\n};\n\nValueParser.unit = require(\"./unit\");\n\nValueParser.walk = walk;\n\nValueParser.stringify = stringify;\n\nmodule.exports = ValueParser;\n","var openParentheses = \"(\".charCodeAt(0);\nvar closeParentheses = \")\".charCodeAt(0);\nvar singleQuote = \"'\".charCodeAt(0);\nvar doubleQuote = '\"'.charCodeAt(0);\nvar backslash = \"\\\\\".charCodeAt(0);\nvar slash = \"/\".charCodeAt(0);\nvar comma = \",\".charCodeAt(0);\nvar colon = \":\".charCodeAt(0);\nvar star = \"*\".charCodeAt(0);\n\nmodule.exports = function(input) {\n var tokens = [];\n var value = input;\n\n var next, quote, prev, token, escape, escapePos, whitespacePos;\n var pos = 0;\n var code = value.charCodeAt(pos);\n var max = value.length;\n var stack = [{ nodes: tokens }];\n var balanced = 0;\n var parent;\n\n var name = \"\";\n var before = \"\";\n var after = \"\";\n\n while (pos < max) {\n // Whitespaces\n if (code <= 32) {\n next = pos;\n do {\n next += 1;\n code = value.charCodeAt(next);\n } while (code <= 32);\n token = value.slice(pos, next);\n\n prev = tokens[tokens.length - 1];\n if (code === closeParentheses && balanced) {\n after = token;\n } else if (prev && prev.type === \"div\") {\n prev.after = token;\n } else if (\n code === comma ||\n code === colon ||\n (code === slash && value.charCodeAt(next + 1) !== star)\n ) {\n before = token;\n } else {\n tokens.push({\n type: \"space\",\n sourceIndex: pos,\n value: token\n });\n }\n\n pos = next;\n\n // Quotes\n } else if (code === singleQuote || code === doubleQuote) {\n next = pos;\n quote = code === singleQuote ? \"'\" : '\"';\n token = {\n type: \"string\",\n sourceIndex: pos,\n quote: quote\n };\n do {\n escape = false;\n next = value.indexOf(quote, next + 1);\n if (~next) {\n escapePos = next;\n while (value.charCodeAt(escapePos - 1) === backslash) {\n escapePos -= 1;\n escape = !escape;\n }\n } else {\n value += quote;\n next = value.length - 1;\n token.unclosed = true;\n }\n } while (escape);\n token.value = value.slice(pos + 1, next);\n\n tokens.push(token);\n pos = next + 1;\n code = value.charCodeAt(pos);\n\n // Comments\n } else if (code === slash && value.charCodeAt(pos + 1) === star) {\n token = {\n type: \"comment\",\n sourceIndex: pos\n };\n\n next = value.indexOf(\"*/\", pos);\n if (next === -1) {\n token.unclosed = true;\n next = value.length;\n }\n\n token.value = value.slice(pos + 2, next);\n tokens.push(token);\n\n pos = next + 2;\n code = value.charCodeAt(pos);\n\n // Dividers\n } else if (code === slash || code === comma || code === colon) {\n token = value[pos];\n\n tokens.push({\n type: \"div\",\n sourceIndex: pos - before.length,\n value: token,\n before: before,\n after: \"\"\n });\n before = \"\";\n\n pos += 1;\n code = value.charCodeAt(pos);\n\n // Open parentheses\n } else if (openParentheses === code) {\n // Whitespaces after open parentheses\n next = pos;\n do {\n next += 1;\n code = value.charCodeAt(next);\n } while (code <= 32);\n token = {\n type: \"function\",\n sourceIndex: pos - name.length,\n value: name,\n before: value.slice(pos + 1, next)\n };\n pos = next;\n\n if (name === \"url\" && code !== singleQuote && code !== doubleQuote) {\n next -= 1;\n do {\n escape = false;\n next = value.indexOf(\")\", next + 1);\n if (~next) {\n escapePos = next;\n while (value.charCodeAt(escapePos - 1) === backslash) {\n escapePos -= 1;\n escape = !escape;\n }\n } else {\n value += \")\";\n next = value.length - 1;\n token.unclosed = true;\n }\n } while (escape);\n // Whitespaces before closed\n whitespacePos = next;\n do {\n whitespacePos -= 1;\n code = value.charCodeAt(whitespacePos);\n } while (code <= 32);\n if (pos !== whitespacePos + 1) {\n token.nodes = [\n {\n type: \"word\",\n sourceIndex: pos,\n value: value.slice(pos, whitespacePos + 1)\n }\n ];\n } else {\n token.nodes = [];\n }\n if (token.unclosed && whitespacePos + 1 !== next) {\n token.after = \"\";\n token.nodes.push({\n type: \"space\",\n sourceIndex: whitespacePos + 1,\n value: value.slice(whitespacePos + 1, next)\n });\n } else {\n token.after = value.slice(whitespacePos + 1, next);\n }\n pos = next + 1;\n code = value.charCodeAt(pos);\n tokens.push(token);\n } else {\n balanced += 1;\n token.after = \"\";\n tokens.push(token);\n stack.push(token);\n tokens = token.nodes = [];\n parent = token;\n }\n name = \"\";\n\n // Close parentheses\n } else if (closeParentheses === code && balanced) {\n pos += 1;\n code = value.charCodeAt(pos);\n\n parent.after = after;\n after = \"\";\n balanced -= 1;\n stack.pop();\n parent = stack[balanced];\n tokens = parent.nodes;\n\n // Words\n } else {\n next = pos;\n do {\n if (code === backslash) {\n next += 1;\n }\n next += 1;\n code = value.charCodeAt(next);\n } while (\n next < max &&\n !(\n code <= 32 ||\n code === singleQuote ||\n code === doubleQuote ||\n code === comma ||\n code === colon ||\n code === slash ||\n code === openParentheses ||\n (code === closeParentheses && balanced)\n )\n );\n token = value.slice(pos, next);\n\n if (openParentheses === code) {\n name = token;\n } else {\n tokens.push({\n type: \"word\",\n sourceIndex: pos,\n value: token\n });\n }\n\n pos = next;\n }\n }\n\n for (pos = stack.length - 1; pos; pos -= 1) {\n stack[pos].unclosed = true;\n }\n\n return stack[0].nodes;\n};\n","function stringifyNode(node, custom) {\n var type = node.type;\n var value = node.value;\n var buf;\n var customResult;\n\n if (custom && (customResult = custom(node)) !== undefined) {\n return customResult;\n } else if (type === \"word\" || type === \"space\") {\n return value;\n } else if (type === \"string\") {\n buf = node.quote || \"\";\n return buf + value + (node.unclosed ? \"\" : buf);\n } else if (type === \"comment\") {\n return \"/*\" + value + (node.unclosed ? \"\" : \"*/\");\n } else if (type === \"div\") {\n return (node.before || \"\") + value + (node.after || \"\");\n } else if (Array.isArray(node.nodes)) {\n buf = stringify(node.nodes);\n if (type !== \"function\") {\n return buf;\n }\n return (\n value +\n \"(\" +\n (node.before || \"\") +\n buf +\n (node.after || \"\") +\n (node.unclosed ? \"\" : \")\")\n );\n }\n return value;\n}\n\nfunction stringify(nodes, custom) {\n var result, i;\n\n if (Array.isArray(nodes)) {\n result = \"\";\n for (i = nodes.length - 1; ~i; i -= 1) {\n result = stringifyNode(nodes[i], custom) + result;\n }\n return result;\n }\n return stringifyNode(nodes, custom);\n}\n\nmodule.exports = stringify;\n","var minus = \"-\".charCodeAt(0);\nvar plus = \"+\".charCodeAt(0);\nvar dot = \".\".charCodeAt(0);\nvar exp = \"e\".charCodeAt(0);\nvar EXP = \"E\".charCodeAt(0);\n\nmodule.exports = function(value) {\n var pos = 0;\n var length = value.length;\n var dotted = false;\n var sciPos = -1;\n var containsNumber = false;\n var code;\n\n while (pos < length) {\n code = value.charCodeAt(pos);\n\n if (code >= 48 && code <= 57) {\n containsNumber = true;\n } else if (code === exp || code === EXP) {\n if (sciPos > -1) {\n break;\n }\n sciPos = pos;\n } else if (code === dot) {\n if (dotted) {\n break;\n }\n dotted = true;\n } else if (code === plus || code === minus) {\n if (pos !== 0) {\n break;\n }\n } else {\n break;\n }\n\n pos += 1;\n }\n\n if (sciPos + 1 === pos) pos--;\n\n return containsNumber\n ? {\n number: value.slice(0, pos),\n unit: value.slice(pos)\n }\n : false;\n};\n","module.exports = function walk(nodes, cb, bubble) {\n var i, max, node, result;\n\n for (i = 0, max = nodes.length; i < max; i += 1) {\n node = nodes[i];\n if (!bubble) {\n result = cb(node, i, nodes);\n }\n\n if (\n result !== false &&\n node.type === \"function\" &&\n Array.isArray(node.nodes)\n ) {\n walk(node.nodes, cb, bubble);\n }\n\n if (bubble) {\n cb(node, i, nodes);\n }\n }\n};\n","function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\nmodule.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import {range as sequence} from \"d3-array\";\nimport {initRange} from \"./init.js\";\nimport ordinal from \"./ordinal.js\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n r0 = 0,\n r1 = 1,\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n\n function rescale() {\n var n = domain().length,\n reverse = r1 < r0,\n start = reverse ? r1 : r0,\n stop = reverse ? r0 : r1;\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];\n };\n\n scale.rangeRound = function(_) {\n return [r0, r1] = _, r0 = +r0, r1 = +r1, round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band(domain(), [r0, r1])\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n return initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band.apply(null, arguments).paddingInner(1));\n}\n","export default function range(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n","export class InternMap extends Map {\n constructor(entries, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (entries != null) for (const [key, value] of entries) this.set(key, value);\n }\n get(key) {\n return super.get(intern_get(this, key));\n }\n has(key) {\n return super.has(intern_get(this, key));\n }\n set(key, value) {\n return super.set(intern_set(this, key), value);\n }\n delete(key) {\n return super.delete(intern_delete(this, key));\n }\n}\n\nexport class InternSet extends Set {\n constructor(values, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (values != null) for (const value of values) this.add(value);\n }\n has(value) {\n return super.has(intern_get(this, value));\n }\n add(value) {\n return super.add(intern_set(this, value));\n }\n delete(value) {\n return super.delete(intern_delete(this, value));\n }\n}\n\nfunction intern_get({_intern, _key}, value) {\n const key = _key(value);\n return _intern.has(key) ? _intern.get(key) : value;\n}\n\nfunction intern_set({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) return _intern.get(key);\n _intern.set(key, value);\n return value;\n}\n\nfunction intern_delete({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) {\n value = _intern.get(key);\n _intern.delete(key);\n }\n return value;\n}\n\nfunction keyof(value) {\n return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n","import {InternMap} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n var index = new InternMap(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n let i = index.get(d);\n if (i === undefined) {\n if (unknown !== implicit) return unknown;\n index.set(d, i = domain.push(d) - 1);\n }\n return range[i % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = new InternMap();\n for (const value of _) {\n if (index.has(value)) continue;\n index.set(value, domain.push(value) - 1);\n }\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n","export var slice = Array.prototype.slice;\n\nexport default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export default function _taggedTemplateLiteral(strings, raw) {\n if (!raw) {\n raw = strings.slice(0);\n }\n return Object.freeze(Object.defineProperties(strings, {\n raw: {\n value: Object.freeze(raw)\n }\n }));\n}","const pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += arguments[i] + strings[i];\n }\n}\n\nfunction appendRound(digits) {\n let d = Math.floor(digits);\n if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n if (d > 15) return append;\n const k = 10 ** d;\n return function(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += Math.round(arguments[i] * k) / k + strings[i];\n }\n };\n}\n\nexport class Path {\n constructor(digits) {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n this._append = digits == null ? append : appendRound(digits);\n }\n moveTo(x, y) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n }\n closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._append`Z`;\n }\n }\n lineTo(x, y) {\n this._append`L${this._x1 = +x},${this._y1 = +y}`;\n }\n quadraticCurveTo(x1, y1, x, y) {\n this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n }\n arcTo(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._append`M${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._append`L${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Otherwise, draw an arc!\n else {\n let x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n }\n\n this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n }\n }\n arc(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._append`M${x0},${y0}`;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._append`L${x0},${y0}`;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n }\n }\n rect(x, y, w, h) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n }\n toString() {\n return this._;\n }\n}\n\nexport function path() {\n return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n return new Path(+digits);\n}\n","import {Path} from \"d3-path\";\n\nexport function withPath(shape) {\n let digits = 3;\n\n shape.digits = function(_) {\n if (!arguments.length) return digits;\n if (_ == null) {\n digits = null;\n } else {\n const d = Math.floor(_);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n digits = d;\n }\n return shape;\n };\n\n return () => new Path(digits);\n}\n"],"names":["conversions","Math","PI","module","exports","value","sourceUnit","targetUnit","precision","hasOwnProperty","Error","converted","pow","parseInt","round","globalScope","ONE","MAX_DIGITS","Decimal","rounding","toExpNeg","toExpPos","LN10","external","decimalError","invalidArgument","exponentOutOfRange","mathfloor","floor","mathpow","isDecimal","BASE","LOG_BASE","MAX_SAFE_INTEGER","MAX_E","P","add","x","y","carry","d","e","i","k","len","xd","yd","Ctor","constructor","pr","s","slice","length","ceil","reverse","push","unshift","pop","checkInt32","min","max","digitsToString","ws","indexOfLastWord","str","w","getZeroString","absoluteValue","abs","this","comparedTo","cmp","j","xdL","ydL","decimalPlaces","dp","dividedBy","div","divide","dividedToIntegerBy","idiv","equals","eq","exponent","getBase10Exponent","greaterThan","gt","greaterThanOrEqualTo","gte","isInteger","isint","isNegative","isneg","isPositive","ispos","isZero","lessThan","lt","lessThanOrEqualTo","lte","logarithm","log","base","r","wpr","ln","minus","sub","subtract","modulo","mod","q","times","naturalExponential","exp","naturalLogarithm","negated","neg","plus","sd","z","squareRoot","sqrt","n","t","toExponential","indexOf","toString","mul","rL","shift","toDecimalPlaces","todp","rm","toFixed","toInteger","toint","toNumber","toPower","sign","yIsInt","yn","truncate","toPrecision","toSignificantDigits","tosd","valueOf","val","toJSON","multiplyInteger","temp","compare","a","b","aL","bL","prod","prodL","qd","rem","remL","rem0","xi","xL","yd0","yL","yz","denominator","sum","getLn10","zs","c","c0","numerator","x2","charAt","parseDecimal","replace","search","substring","charCodeAt","rd","doRound","xdi","xe","xLTy","isExp","arr","config","obj","p","v","ps","clone","test","prototype","ROUND_UP","ROUND_DOWN","ROUND_CEIL","ROUND_FLOOR","ROUND_HALF_UP","ROUND_HALF_DOWN","ROUND_HALF_EVEN","ROUND_HALF_CEIL","ROUND_HALF_FLOOR","set","define","has","Object","prefix","Events","EE","fn","context","once","addListener","emitter","event","TypeError","listener","evt","_events","_eventsCount","clearEvent","EventEmitter","create","__proto__","eventNames","events","name","names","call","getOwnPropertySymbols","concat","listeners","handlers","l","ee","Array","listenerCount","emit","a1","a2","a3","a4","a5","args","arguments","removeListener","undefined","apply","on","removeAllListeners","off","prefixed","DataView","require","getNative","Promise","Set","MapCache","setCacheAdd","setCacheHas","SetCache","values","index","__data__","ListCache","stackClear","stackDelete","stackGet","stackHas","stackSet","Stack","entries","data","size","clear","get","Uint8Array","WeakMap","func","thisArg","array","predicate","resIndex","result","baseIndexOf","comparator","baseTimes","isArguments","isArray","isBuffer","isIndex","isTypedArray","inherited","isArr","isArg","isBuff","isType","skipIndexes","String","key","offset","string","split","defineProperty","object","baseForOwn","baseEach","createBaseEach","collection","isSymbol","iteratee","current","computed","fromIndex","fromRight","arrayPush","isFlattenable","baseFlatten","depth","isStrict","baseFor","createBaseFor","keys","keysFunc","symbolsFunc","other","baseFindIndex","baseIsNaN","strictIndexOf","baseGetTag","isObjectLike","baseIsEqualDeep","baseIsEqual","bitmask","customizer","stack","equalArrays","equalByTag","equalObjects","getTag","argsTag","arrayTag","objectTag","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","source","matchData","noCustomizer","objValue","srcValue","COMPARE_PARTIAL_FLAG","isLength","typedArrayTags","baseMatches","baseMatchesProperty","identity","property","isPrototype","nativeKeys","isArrayLike","baseIsMatch","getMatchData","matchesStrictComparable","hasIn","isKey","isStrictComparable","toKey","path","arrayMap","baseGet","baseIteratee","baseMap","baseSortBy","baseUnary","compareMultiple","iteratees","orders","nativeCeil","nativeMax","start","end","step","overRest","setToString","constant","baseSetToString","comparer","sort","arrayIncludes","arrayIncludesWith","cacheHas","createSet","setToArray","includes","isCommon","seen","outer","seenIndex","cache","baseSlice","valIsDefined","valIsNull","valIsReflexive","valIsSymbol","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","compareAscending","objCriteria","criteria","othCriteria","ordersLength","eachFunc","iterable","props","castSlice","hasUnicode","stringToArray","methodName","strSymbols","chr","trailing","join","findIndexFunc","baseRange","isIterateeCall","toFinite","noop","arraySome","isPartial","arrLength","othLength","arrStacked","othStacked","arrValue","othValue","compared","othIndex","Symbol","mapToArray","symbolProto","symbolValueOf","tag","byteLength","byteOffset","buffer","message","convert","stacked","getAllKeys","objProps","objLength","objStacked","skipCtor","objCtor","othCtor","baseGetAllKeys","getSymbols","getPrototype","overArg","getPrototypeOf","arrayFilter","stubArray","propertyIsEnumerable","nativeGetSymbols","symbol","Map","toSource","mapTag","promiseTag","setTag","weakMapTag","dataViewTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","ArrayBuffer","resolve","ctorString","castPath","hasFunc","reHasUnicode","RegExp","spreadableSymbol","isConcatSpreadable","reIsUint","type","isObject","objectProto","map","forEach","freeGlobal","freeExports","nodeType","freeModule","freeProcess","process","nodeUtil","types","binding","transform","arg","otherArgs","shortOut","nativeNow","Date","now","count","lastCalled","stamp","remaining","pairs","LARGE_ARRAY_SIZE","asciiToArray","unicodeToArray","rsAstralRange","rsAstral","rsCombo","rsFitz","rsNonAstral","rsRegional","rsSurrPair","reOptMod","rsOptVar","rsSeq","rsSymbol","reUnicode","match","arrayEvery","baseEvery","guard","find","createFind","baseHasIn","hasPath","baseIsArguments","isFunction","root","stubFalse","Buffer","isNumber","funcProto","Function","funcToString","objectCtorString","proto","baseIsTypedArray","nodeIsTypedArray","arrayLikeKeys","baseKeys","baseAssignValue","baseExtremum","baseGt","baseLt","baseProperty","basePropertyDeep","range","createRange","baseSome","baseOrderBy","baseRest","sortBy","debounce","wait","options","leading","baseUniq","upperFirst","createCaseFirst","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","propName","componentName","location","propFullName","secret","err","getShim","isRequired","ReactPropTypes","bigint","bool","number","any","arrayOf","element","elementType","instanceOf","node","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","PropTypes","componentWillMount","state","getDerivedStateFromProps","setState","componentWillReceiveProps","nextProps","prevState","bind","componentWillUpdate","nextState","prevProps","__reactInternalSnapshotFlag","__reactInternalSnapshot","getSnapshotBeforeUpdate","polyfill","Component","isReactComponent","foundWillMountName","foundWillReceivePropsName","foundWillUpdateName","UNSAFE_componentWillMount","UNSAFE_componentWillReceiveProps","UNSAFE_componentWillUpdate","displayName","newApiName","componentDidUpdate","maybeSnapshot","snapshot","__suppressDeprecationWarning","getOwnPropertyNames","combineComparators","comparatorA","comparatorB","createIsCircular","areItemsEqual","cachedA","cachedB","delete","getStrictProperties","hasOwn","sameValueZeroEqual","OWNER","getOwnPropertyDescriptor","areArraysEqual","areDatesEqual","getTime","areMapsEqual","aResult","bResult","matchedIndices","aIterable","next","done","bIterable","hasMatch","matchIndex","_a","aKey","aValue","_b","bKey","bValue","areObjectsEqual","properties","$$typeof","areObjectsEqualStrict","descriptorA","descriptorB","configurable","enumerable","writable","arePrimitiveWrappersEqual","areRegExpsEqual","flags","areSetsEqual","areTypedArraysEqual","ARGUMENTS_TAG","BOOLEAN_TAG","DATE_TAG","MAP_TAG","NUMBER_TAG","OBJECT_TAG","REG_EXP_TAG","SET_TAG","STRING_TAG","isView","assign","deepEqual","createCustomEqual","strict","circular","createInternalComparator","createCustomInternalComparator","createState","createCustomConfig","areArraysEqual$1","areMapsEqual$1","areObjectsEqual$1","areSetsEqual$1","createEqualityComparatorConfig","then","createEqualityComparator","meta","createIsEqual","_indexOrKeyA","_indexOrKeyB","_parentA","_parentB","setRafTimeout","callback","timeout","currTime","requestAnimationFrame","shouldUpdate","safeRequestAnimationFrame","_typeof","iterator","_toArray","_arrayWithHoles","iter","from","_iterableToArray","o","minLen","_arrayLikeToArray","_unsupportedIterableToArray","_nonIterableRest","arr2","createAnimateManager","handleChange","shouldStop","setStyle","_style","_styles","curr","restStyles","stop","style","subscribe","_handleChange","ownKeys","enumerableOnly","symbols","filter","sym","_objectSpread","target","_defineProperty","getOwnPropertyDescriptors","defineProperties","input","hint","prim","toPrimitive","res","Number","_toPrimitive","_toPropertyKey","PREFIX_LIST","IN_LINE_PREFIX_LIST","IN_COMPATIBLE_PROPERTY","param","mapObject","reduce","translateStyle","isNaN","isTransition","camelName","toUpperCase","styleVal","generatePrefixStyle","getTransitionVal","duration","easing","prop","toLowerCase","_slicedToArray","_i","_s","_e","_x","_r","_arr","_n","_d","return","_iterableToArrayLimit","_toConsumableArray","_arrayWithoutHoles","_nonIterableSpread","ACCURACY","cubicBezierFactor","c1","c2","multyTime","params","pre","cubicBezier","configBezier","_len","_key","x1","y1","y2","_easing$1$split$0$spl2","parseFloat","every","num","curveX","curveY","derCurveX","newParams","bezier","_t","evalT","derVal","isStepper","configEasing","_len2","_key2","_config$stiff","stiff","_config$damping","damping","_config$dt","dt","stepper","currX","destX","currV","newV","newX","configSpring","alpha","begin","needContinue","_ref","to","calStepperVals","preVals","steps","nextStepVals","_easing2","velocity","render","preObj","nextObj","preTime","beginTime","interKeys","timingStyle","stepperStyle","cafId","update","currStyle","finalStyle","cancelAnimationFrame","_excluded","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","sourceSymbolKeys","_defineProperties","descriptor","_setPrototypeOf","setPrototypeOf","_createSuper","Derived","hasNativeReflectConstruct","Reflect","construct","sham","Proxy","Boolean","_isNativeReflectConstruct","Super","_getPrototypeOf","NewTarget","_possibleConstructorReturn","self","_assertThisInitialized","ReferenceError","Animate","_PureComponent","subClass","superClass","_inherits","Constructor","protoProps","staticProps","_super","_this","instance","_classCallCheck","_this$props","isActive","attributeName","children","handleStyleChange","changeStyle","_this$props2","canBegin","mounted","runAnimation","_this$props3","shouldReAnimate","currentFrom","isTriggered","manager","stopJSAnimation","_newState","newState","onAnimationEnd","unSubscribe","_this2","onAnimationStart","startAnimation","configUpdate","_this3","_steps$","initialStyle","_steps$$duration","initialTime","sequence","nextItem","_nextItem$easing","nextProperties","preItem","runJSAnimation","transition","newStyle","propsTo","runStepAnimation","_this$props4","others","onAnimationReStart","Children","stateStyle","cloneContainer","container","_container$props","_container$props$styl","className","cloneElement","only","React","child","PureComponent","defaultProps","propTypes","_extends","isFinite","parseDurationOfSingleTransition","entry","AnimateGroupChild","_Component","isAppearing","appearOptions","enterOptions","handleStyleActive","leaveOptions","Transition","onEnter","handleEnter","onExit","handleExit","parseTimeout","AnimateGroup","component","appear","enter","leave","TransitionGroup","__esModule","newObj","desc","default","_interopRequireWildcard","_addClass","_interopRequireDefault","_removeClass","_react","_Transition","addClass","classes","removeClass","CSSTransition","_React$Component","appearing","getClassNames","removeClasses","onEntering","activeClassName","reflowAndAddClass","onEntered","appearClassName","doneClassName","enterClassName","onExiting","onExited","classNames","isStringClassNames","_proto","_this$getClassNames6","scrollTop","createElement","_default","_reactDom","_TransitionGroup","ReplaceTransition","_args","handleLifecycle","handleEntering","_len3","_key3","handleEntered","_len4","_key4","_len5","_key5","handleExiting","_len6","_key6","handleExited","_len7","_key7","handler","idx","originalArgs","_child$props","toArray","findDOMNode","inProp","in","_React$Children$toArr","first","second","EXITING","ENTERED","ENTERING","EXITED","UNMOUNTED","_reactLifecyclesCompat","initialStatus","parentGroup","transitionGroup","isMounting","appearStatus","unmountOnExit","mountOnEnter","status","nextCallback","getChildContext","componentDidMount","updateStatus","nextStatus","componentWillUnmount","cancelNextCallback","getTimeouts","exit","mounting","performEnter","performExit","timeouts","enterTimeout","safeSetState","onTransitionEnd","cancel","setNextCallback","_this4","active","doesNotHaveTimeoutOrListener","addEndListener","setTimeout","childProps","contextTypes","childContextTypes","_propTypes","_ChildMapping","firstRender","appeared","prevChildMapping","getInitialChildMapping","getNextChildMapping","currentChildMapping","getChildMapping","childFactory","_CSSTransition","_ReplaceTransition","classList","_hasClass","setAttribute","baseVal","contains","replaceClassName","origClass","classToRemove","remove","mergeChildMappings","getProp","nextChildMapping","isValidElement","hasPrev","hasNext","prevChild","isLeaving","mapFn","mapper","prev","getValueForKey","nextKeysPending","pendingKeys","prevKey","childMapping","nextKey","pendingNextKey","classNamesShape","timeoutsShape","getEveryNthWithCondition","isValid","rectWithPoints","_ref2","width","height","ScaleHelper","scale","domain","bandwidth","_ref4","bandAware","position","_offset","_offset2","last","createLabeledScales","scales","coord","_ref5","_mapValues","label","isInRange","_every","getAngledRectangleWidth","_ref6","normalizedAngle","angle","normalizeAngle","angleRadians","angleThreshold","atan","angledWidth","sin","cos","getAngledTickWidth","contentSize","unitSize","getTicksStart","preserveEnd","ticks","tickFormatter","viewBox","orientation","minTickGap","unit","fontSize","letterSpacing","sizeKey","getStringSize","mathSign","coordinate","tail","tailContent","_isFunction","tailSize","tailGap","tickCoord","isShow","content","gap","getTicks","tick","interval","Global","isSsr","getNumberIntervalTicks","candidates","N","previous","tickItem","getEveryNThTick","getTicksEnd","defaultFormatter","_isArray","isNumOrStr","DefaultTooltipContent","_props$separator","separator","_props$contentStyle","contentStyle","_props$itemStyle","itemStyle","_props$labelStyle","labelStyle","payload","formatter","itemSorter","wrapperClassName","labelClassName","labelFormatter","margin","padding","backgroundColor","border","whiteSpace","finalLabelStyle","hasLabel","_isNil","finalLabel","wrapperCN","labelCN","items","_sortBy","finalItemStyle","display","paddingTop","paddingBottom","color","finalFormatter","finalValue","finalName","formatted","_formatted","renderContent","CLS_PREFIX","defaultUniqBy","dataKey","tooltipDefaultProps","allowEscapeViewBox","reverseDirection","cursorStyle","wrapperStyle","cursor","trigger","isAnimationActive","animationEasing","animationDuration","filterNull","useTranslate3d","Tooltip","_classNames","_useState2","useState","boxWidth","setBoxWidth","_useState4","boxHeight","setBoxHeight","_useState6","dismissed","setDismissed","_useState8","dismissedAtCoordinate","setDismissedAtCoordinate","wrapperNode","useRef","handleKeyDown","useCallback","useEffect","document","removeEventListener","addEventListener","getBoundingClientRect","box","updateBBox","translateX","translateY","getTranslate","tooltipDimension","viewBoxDimension","negative","positive","payloadUniqBy","finalPayload","option","_uniqBy","getUniqPayload","hasPayload","outerStyle","pointerEvents","visibility","top","left","cls","tabIndex","role","ref","getPath","Cross","filterProps","Dot","cx","cy","layerClass","adaptEventHandlers","getRectanglePath","radius","maxRadius","ySign","xSign","clockWise","newRadius","_newRadius","isInRectangle","point","rect","px","py","minX","maxX","minY","maxY","Rectangle","pathRef","totalLength","setTotalLength","useLayoutEffect","getTotalLength","pathTotalLength","animationBegin","isUpdateAnimationActive","currWidth","currHeight","currY","_excluded2","_excluded3","CartesianAxis","Text","restProps","viewBoxOld","restPropsOld","shallowEqual","htmlLayer","layerReference","getElementsByClassName","window","getComputedStyle","tx","ty","tickSize","mirror","tickMargin","finalTickSize","line","textAnchor","verticalAnchor","_this$props5","axisLine","fill","needHeight","needWidth","_get","_this$props6","tickLine","stroke","finalTicks","getTickTextAnchor","getTickVerticalAnchor","axisProps","customTickProps","tickLineProps","_this2$getTickLineCoo","getTickLineCoord","lineCoord","tickProps","visibleTicksCount","Layer","adaptEventsOfChild","renderTickItem","_this$props7","ticksGenerator","hide","_this$props8","noTicksProps","renderAxisLine","renderTicks","Label","renderCallByParent","isTouch","changedTouches","Brush","leaveTimer","clearTimeout","isTravellerMoving","handleTravellerMove","isSlideMoving","handleSlideDrag","handleDrag","detachDragEndListener","handleDragEnd","leaveTimeOut","isTextActive","slideMoveStartX","pageX","attachDragEndListener","travellerDragStartHandlers","startX","handleTravellerDragStart","endX","lineY","renderDefaultTraveller","travellerWidth","updateId","startIndex","endIndex","prevData","prevUpdateId","prevTravellerWidth","prevX","prevWidth","scalePoint","_range","scaleValues","createScale","middle","lastIndex","minIndex","getIndexInRange","maxIndex","text","getValueByDataKey","_this$state","onChange","delta","newIndex","getIndex","id","movingTravellerId","brushMoveStartX","_this$setState","_this$state2","prevValue","isFullGap","chartElement","compact","travellerX","traveller","travellerProps","onMouseEnter","handleEnterSlideOrTraveller","onMouseLeave","handleLeaveSlideOrTraveller","onMouseDown","onTouchStart","renderTraveller","handleSlideDragStart","fillOpacity","_this$props9","_this$state3","attrs","getTextOfTick","_this$props10","alwaysShowText","_this$state4","isPanoramic","handleLeaveWrapper","onTouchMove","handleTouchMove","renderBackground","renderPanorama","renderSlide","renderTravellerLayer","renderText","right","bottom","ifOverflowMatches","alwaysShow","ifOverflow","ReferenceDot","clipPathId","isX","isY","warn","xAxis","yAxis","getCoordinate","dotProps","clipPath","renderDot","isFront","xAxisId","yAxisId","strokeWidth","ReferenceLine","fixedX","fixedY","segment","endPoints","isFixedX","isFixedY","isSegment","_props$viewBox","yCoord","points","xCoord","_orientation","_coord","_points","_points2","_some","getEndPoints","_endPoints","_endPoints$","_endPoints$2","lineProps","renderLine","_ref3","rectWithCoords","ReferenceArea","hasX1","hasX2","hasY1","hasY2","xValue1","xValue2","yValue1","yValue2","p1","rangeMin","p2","rangeMax","getRect","renderRect","detectReferenceElementsDomain","axisId","axisType","specifiedTicks","lines","findAllByType","dots","elements","areas","idKey","valueKey","finalDomain","el","key1","key2","value1","value2","eventCenter","setMaxListeners","SYNC_EVENT","AccessibilityManager","_ref$coordinateList","coordinateList","_ref$container","_ref$layout","layout","_ref$offset","_ref$mouseHandlerCall","mouseHandlerCallback","activeIndex","spoofMouse","_this$container$getBo","pageY","ORIENT_MAP","originCoordinate","isFinit","defer","setImmediate","deferClear","clearImmediate","getDisplayedData","item","graphicalItems","dataStartIndex","dataEndIndex","itemsData","itemData","getDefaultDomainByAxisType","getTooltipContent","chartData","activeLabel","tooltipAxis","displayedData","allowDuplicatedCategory","findEntryInArray","getTooltipItem","getTooltipData","rangeObj","rangeData","chartX","chartY","pos","calculateTooltipPos","orderedTooltipTicks","axis","tooltipTicks","calculateActiveTickIndex","activePayload","activeCoordinate","_angle","_radius","polarToCartesian","getActiveCoordinate","activeTooltipIndex","getAxisMapByAxes","axes","axisIdKey","stackGroups","stackOffset","isCategorical","isCategoricalAxis","_child$props$domain2","allowDataOverflow","includeHidden","duplicateDomain","categoricalDomain","domainStart","domainEnd","isDomainSpecifiedByUser","parseSpecifiedDomain","getDomainOfDataByKey","defaultDomain","_child$props$domain","childDomain","duplicate","hasDuplicate","parseDomainOfCategoryAxis","errorBarsDomain","parseErrorBarsOfAxis","hasStack","getDomainOfStackGroups","getDomainOfItemsWithSameAxis","axisDomain","originalDomain","getAxisMap","_ref4$axisType","AxisComp","axisMap","Axis","getAxisMapByItems","createDefaultState","_brushItem$props","_brushItem$props2","defaultShowTooltip","brushItem","findChildByType","isTooltipActive","getAxisNameByLayout","numericAxisName","cateAxisName","isValidatePoint","getSinglePolygonPath","connectNulls","segmentPoints","getParsedPoints","segPoints","polygonPath","Polygon","baseLinePoints","hasStroke","rangePath","outerPath","getRanglePath","singlePath","RADIAN","eps","PolarAngleAxis","tickLineSize","axisLineType","angleAxisId","PolarRadiusAxis","maxRadiusTick","_maxBy","startAngle","endAngle","innerRadius","_minBy","outerRadius","extent","Infinity","point0","point1","getTickValueCoord","getViewBox","radiusAxisId","tickCount","PieChart","_class","chartName","GraphicalChild","_ref6$defaultTooltipE","defaultTooltipEventType","_ref6$validateTooltip","validateTooltipEventTypes","axisComponents","legendContent","formatAxisMap","getFormatItems","currentState","barSize","barGap","barCategoryGap","globalMaxBarSize","maxBarSize","_getAxisNameByLayout","hasBar","some","getDisplayName","hasGraphicalBarItem","sizeList","getBarSizeList","formattedItems","_item$props","childMaxBarSize","numericAxisId","cateAxisId","axisObj","_objectSpread6","getTicksOfAxis","cateAxis","cateTicks","stackedData","getStackedDataOfItem","itemIsBar","bandSize","getBandSizeOfAxis","barPosition","_ref7","_getBandSizeOfAxis","barBandSize","getBarPosition","_objectSpread7","composedFn","getComposedData","childIndex","parseChildIndex","updateStateOfAxisMapsOffsetAndStackGroups","_ref8","validateWidthHeight","reverseStackOrder","_getAxisNameByLayout2","getStackGroupsByAxisId","prevLegendBBox","_ref5$xAxisMap","xAxisMap","_ref5$yAxisMap","yAxisMap","legendItem","Legend","offsetH","offsetV","brushBottom","appendOffsetOfLegend","calculateOffset","legendBBox","ticksObj","getAnyElementOfObject","tooltipAxisBandSize","tooltipTicksGenerator","formattedGraphicalItems","CategoricalChartWrapper","_props","deferId","cId","chartId","syncId","uniqueChartId","clearDeferId","applySyncEvent","_ref9","triggerSyncEvent","mouse","getMouseInfo","_nextState","onMouseMove","activeItem","tooltipPayload","tooltipPosition","persist","triggeredAfterMouseMove","cancelThrottledTriggerAfterMouseMove","eventName","getReactEventByType","onClick","_nextState2","onMouseUp","handleMouseMove","handleMouseDown","handleMouseUp","_ref10","getCoordinatesOfGrid","_ref11","tooltipEventType","getTooltipEventType","cursorComp","Curve","getCursorRectangle","_this$getCursorPoints","getCursorPoints","Sector","cursorProps","payloadIndex","axisOption","renderAxis","_find","chartWidth","chartHeight","verticalCoordinatesGenerator","horizontalCoordinatesGenerator","_element$props","radialLines","polarAngles","polarRadius","radiusAxisMap","angleAxisMap","radiusAxis","angleAxis","legendWidth","getLegendProps","otherProps","legend","legendInstance","onBBoxUpdate","handleLegendBBoxUpdate","tooltipItem","_this$state5","_this$state6","combineEventHandlers","handleBrushChange","_this$state7","_element$props2","_ref12","activePoint","basePoint","isRange","_item$item$props","activeDot","getMainColorOfGraphicItem","renderActiveDot","filterFormatItem","_this$state8","_item$props2","baseLine","_item$item$props2","hasActive","itemEvents","handleItemMouseEnter","onCLick","handleItemMouseLeave","graphicalItem","specifiedKey","renderActivePoints","uniqueId","throttleDelay","_throttle","_this$props$margin$le","_this$props$margin$to","accessibilityManager","setDetails","accessibilityLayer","_this$props$margin$le2","_this$props$margin$to2","_isBoolean","shared","eventType","containerOffset","getOffset","calculateChartCoordinate","inRange","_this$state9","xScale","yScale","xValue","invert","yValue","toolTipData","_this$state10","halfSize","_this$state11","_cx","_cy","innerPoint","outerPoint","_this$state12","inRangeOfSector","tooltipEvents","handleClick","handleMouseEnter","handleMouseLeave","handleTouchStart","onTouchEnd","handleTouchEnd","handleOuterEvent","handleReceiveSyncEvent","_maxListeners","syncMethod","_this$state13","validateChartX","validateChartY","axisOptions","axesTicksGenerator","_this$state$offset","_ref13","_ref14","_ref15","_ref16","_this$state$xAxisMap","_this$state$xAxisMap$","_this$state$yAxisMap","_this$state$yAxisMap$","chartXY","itemDisplayName","activeBarItem","_activeBarItem","title","CartesianGrid","renderGrid","renderReferenceElement","XAxis","renderXAxis","YAxis","renderYAxis","renderBrush","Bar","renderGraphicChild","Line","Area","Radar","RadialBar","Scatter","Pie","Funnel","renderCursor","PolarGrid","renderPolarGrid","renderPolarAxis","Customized","renderCustomized","Surface","renderClipPath","renderByOrder","onKeyDown","keyboardEvent","onFocus","focus","parseEventsOfWrapper","renderLegend","renderTooltip","defaultState","prevHeight","prevLayout","prevStackOffset","prevMargin","prevChildren","_defaultState","keepFromPrevState","updatesToState","isChildrenEqual","newUpdateId","dot","generateCategoricalChart","Cell","getLabel","renderRadialLabel","labelProps","labelAngle","direction","deltaAngle","getDeltaAngle","startPoint","endPoint","dominantBaseline","xlinkHref","getAttrsOfPolarLabel","midAngle","_polarToCartesian","_polarToCartesian2","getAttrsOfCartesianLabel","parentViewBox","verticalSign","verticalOffset","verticalEnd","verticalStart","horizontalSign","horizontalOffset","horizontalEnd","horizontalStart","_attrs2","_attrs3","sizeAttrs","_isObject","isPercent","getPercentValue","isPolar","_props$className","textBreakAll","isPolarLabel","positionAttrs","breakAll","parseViewBox","labelViewBox","parentProps","checkPropsLabel","explicitChildren","implicitLabel","parseLabel","atan2","pi","tau","draw","moveTo","arc","lineTo","closePath","tan30","tan30_2","kr","kx","ky","sqrt3","x0","y0","symbolFactories","symbolCircle","symbolCross","symbolDiamond","symbolSquare","symbolStar","symbolTriangle","symbolWye","Symbols","filteredProps","sizeType","symbolFactory","_upperFirst","getSymbolFactory","withPath","circle","_","shapeSymbol","tan","calculateAreaSize","registerSymbol","factory","SIZE","DefaultLegendContent","inactiveColor","sixthSize","thirdSize","inactive","strokeDasharray","legendIcon","iconProps","iconSize","marginRight","svgStyle","verticalAlign","renderIcon","align","textAlign","renderItems","hPos","vPos","getBBoxSnapshot","_box3","getDefaultPosition","BREAKING_SPACES","calculateWordWidths","words","wordsWithComputedWidth","word","spaceWidth","getWordsWithoutCalculate","getWordsByLines","scaleToFit","maxLines","wordWidths","initialWordsWithComputedWith","lineWidth","shouldLimitLines","calculate","currentLine","newLine","originalResult","trimmedResult","checkOverflow","tempText","doesOverflow","findLongestLine","iterations","_checkOverflow2","doesPrevOverflow","doesMiddleOverflow","calculateWordsByLines","textDefaultProps","lineHeight","capHeight","wordsByLines","useMemo","dx","dy","textProps","startDy","reduceCSSCalc","transforms","svgView","valueAccessor","_last","LabelList","idProps","parseLabelList","isAnimationFinished","prevIsAnimationActive","prevAnimationId","animationId","sectorToFocus","curSectors","sectors","prevSectors","alignmentBaseline","_isPlainObject","labelLine","pieProps","customLabelProps","customLabelLineProps","offsetRadius","labels","getTextAnchor","realDataKey","renderLabelLineItem","renderLabelItem","activeShape","blendStroke","inactiveShapeProp","inactiveShape","hasActiveIndex","sectorOptions","isActiveIndex","sectorProps","sectorRefs","renderSectorItem","handleAnimationStart","handleAnimationEnd","stepData","curAngle","paddingAngle","angleIp","interpolateNumber","latest","interpolatorAngle","_latest","renderSectorsStatically","pieRef","onkeydown","altKey","_next","blur","_isEqual","renderSectorsWithAnimation","attachKeyboardHandlers","_this5","renderSectors","renderLabels","legendType","minAngle","nameKey","presentationProps","cells","cell","maxPieRadius","getMaxRadius","pieData","getRealPieData","cornerRadius","tooltipType","parseCoordinateOfPie","parseDeltaAngle","absDeltaAngle","notZeroItemCount","realTotalAngle","tempStartAngle","percent","tempEndAngle","middleRadius","that","_context","bezierCurveTo","_x0","_x1","_y0","_y1","Basis","BasisClosed","BasisOpen","areaStart","_line","areaEnd","NaN","lineStart","_point","lineEnd","_x2","_x3","_x4","_y2","_y3","_y4","Bump","LinearClosed","Linear","slope3","h0","h1","s0","s1","slope2","h","t0","t1","MonotoneX","MonotoneY","ReflectContext","Natural","controlPoints","m","Step","_t0","_y","i0","i1","defined","curve","curveLinear","output","defined0","pointX","pointY","area","x0z","y0z","arealine","lineX0","lineY0","lineY1","lineX1","CURVE_FACTORIES","curveBasisClosed","curveBasisOpen","curveBasis","curveBumpX","curveBumpY","curveLinearClosed","curveMonotoneX","curveMonotoneY","curveNatural","curveStep","curveStepAfter","curveStepBefore","getX","getY","lineFunction","curveFactory","getCurveFactory","formatPoints","formatBaseLine","areaPoints","shapeArea","shapeLine","realPath","getTangentCircle","isExternal","cornerIsExternal","centerRadius","theta","asin","centerAngle","lineTangencyAngle","center","circleTangency","lineTangency","getSectorPath","outerStartPoint","outerEndPoint","innerStartPoint","innerEndPoint","forceCornerRadius","deltaRadius","cr","_getTangentCircle","soct","solt","sot","_getTangentCircle2","eoct","eolt","eot","outerArcAngle","_getTangentCircle3","sict","silt","sit","_getTangentCircle4","eict","eilt","eit","innerArcAngle","getSectorWithCorner","e10","e5","e2","tickSpec","power","log10","error","factor","i2","inc","tickIncrement","tickStep","ascending","descending","bisector","f","compare1","compare2","lo","hi","mid","zero","ascendingBisect","bisectRight","extend","parent","definition","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","rgb","formatHex","color_formatRgb","formatRgb","format","trim","exec","rgbn","Rgb","rgba","hsla","g","opacity","rgb_formatHex","hex","rgb_formatRgb","clampa","clampi","Hsl","hslConvert","clamph","clampt","hsl2rgb","m1","m2","basis","v0","v1","v2","v3","t2","t3","copy","channels","displayable","formatHex8","formatHsl","clamp","linear","gamma","nogamma","exponential","rgbGamma","colorRgb","rgbSpline","spline","colors","genericArray","nb","na","setTime","reA","reB","am","bm","bs","bi","one","date","numberArray","normalize","bimap","interpolate","d0","d1","r0","r1","polymap","bisect","unknown","transformer","untransform","piecewise","interpolateValue","rescale","clamper","rangeRound","interpolateRound","u","continuous","prefixExponent","re","formatSpecifier","specifier","FormatSpecifier","comma","formatDecimalParts","coefficient","%","toLocaleString","formatRounded","locale","formatPrefix","prefixes","grouping","thousands","group","currencyPrefix","currency","currencySuffix","decimal","numerals","formatNumerals","nan","newFormat","formatTypes","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","out","formatTrim","tickFormat","precisionPrefix","precisionRound","precisionFixed","linearish","nice","prestep","maxIter","initRange","transformLog","transformExp","transformLogn","transformExpn","pow10","reflect","loggish","logs","pows","E","log2","logp","powp","transformSymlog","log1p","transformSymexp","expm1","symlogish","symlog","formatLocale","transformPow","transformSqrt","transformSquare","powish","square","radial","squared","unsquare","valueof","compareDefined","ascendingDefined","quickselect","swap","quantile","Float64Array","numbers","value0","subarray","quantileSorted","thresholds","threshold","invertExtent","quantiles","quantize","durationSecond","durationMinute","durationHour","durationDay","durationWeek","durationMonth","durationYear","timeInterval","floori","offseti","field","millisecond","getMilliseconds","getUTCSeconds","timeMinute","getSeconds","getMinutes","utcMinute","setUTCSeconds","getUTCMinutes","timeHour","getHours","utcHour","setUTCMinutes","getUTCHours","timeDay","setHours","setDate","getDate","getTimezoneOffset","utcDay","setUTCHours","setUTCDate","getUTCDate","unixDay","timeWeekday","getDay","timeSunday","timeMonday","timeTuesday","timeWednesday","timeThursday","timeFriday","timeSaturday","utcWeekday","getUTCDay","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","timeMonth","setMonth","getMonth","getFullYear","utcMonth","setUTCMonth","getUTCMonth","getUTCFullYear","timeYear","setFullYear","utcYear","setUTCFullYear","ticker","year","month","week","day","hour","minute","tickIntervals","tickInterval","utcTicks","utcTickInterval","timeTicks","timeTickInterval","localDate","H","M","S","L","utcDate","UTC","newDate","timeFormat","utcFormat","pads","numberRe","percentRe","requoteRe","pad","requote","formatRe","formatLookup","parseWeekdayNumberSunday","parseWeekdayNumberMonday","parseWeekNumberSunday","U","parseWeekNumberISO","V","parseWeekNumberMonday","W","parseFullYear","parseYear","parseZone","Z","parseQuarter","parseMonthNumber","parseDayOfMonth","parseDayOfYear","parseHour24","parseMinutes","parseSeconds","parseMilliseconds","parseMicroseconds","parseLiteralPercent","parseUnixTimestamp","Q","parseUnixTimestampSeconds","formatDayOfMonth","formatHour24","formatHour12","formatDayOfYear","formatMilliseconds","formatMicroseconds","formatMonthNumber","formatMinutes","formatSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","dISO","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","formatYear","formatYearISO","formatFullYear","formatFullYearISO","formatZone","formatUTCDayOfMonth","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","getUTCMilliseconds","formatUTCMicroseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCSeconds","formatUTCWeekdayNumberMonday","dow","formatUTCWeekNumberSunday","UTCdISO","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCYearISO","formatUTCFullYear","formatUTCFullYearISO","formatUTCZone","formatLiteralPercent","formatUnixTimestamp","formatUnixTimestampSeconds","calendar","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","formatMonth","time","timeWeek","timeSecond","utcTime","utcWeek","utcSecond","k10","interpolator","sequential","initInterpolator","sequentialLog","sequentialSymlog","sequentialPow","sequentialSqrt","sequentialQuantile","k21","r2","I","diverging","divergingLog","divergingSymlog","divergingPow","divergingSqrt","series","order","locale_dateTime","dateTime","locale_date","locale_time","locale_periods","periods","locale_weekdays","days","locale_shortWeekdays","shortDays","locale_months","months","locale_shortMonths","shortMonths","periodRe","periodLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","utcFormats","parses","parseSpecifier","newParse","parse","X","utcParse","defaultLocale","stackValue","stackSeries","PLACE_HOLDER","isPlaceHolder","curry0","_curried","curryN","argsLength","restArgs","newArgs","curry","compose","fns","firstFn","tailsFn","memoize","lastArgs","lastResult","rangeStep","getDigitCount","newA","uninterpolateNumber","diff","uninterpolateTruncation","getValidInterval","validMin","validMax","getFormatStep","roughStep","allowDecimals","correctionFactor","digitCount","Arithmetic","digitCountValue","stepRatio","stepRatioScale","formatStep","getTickOfSingleValue","absVal","middleIndex","calculateStep","tickMin","tickMax","belowCount","upCount","scaleCount","getNiceTickValues","_getValidInterval2","cormin","cormax","_values","_calculateStep","getTickValuesFixedDomain","_getValidInterval4","_getValidInterval6","ErrorBar","dataPointFormatter","svgProps","errorBars","_dataPointFormatter","errorVal","lowBound","highBound","lineCoordinates","_errorVal","yMid","yMin","yMax","xMin","xMax","_scale","xMid","_xMin","_xMax","_yMin","_yMax","coordinates","defaultValue","filterNil","flattenData","_flatMap","_min","_max","_ticks$length","unsortedTicks","before","cur","after","sameDirectionCoord","diffInterval","curInRange","afterInRange","sameInterval","legendData","iconType","getWithHeight","globalSize","_ref5$stackGroups","numericAxisIds","sgs","stackIds","sLen","_sgs$stackIds$j","barItems","selfSize","cateId","stackList","_ref6$sizeList","realBarGap","useFull","fullBarSize","newRes","originalSize","legendBox","legendProps","newOffset","getDomainOfErrorBars","errorBarChild","isErrorBarRelevantForAxis","entryValue","mainValue","errorDomain","prevErrorArr","errorValue","lowerValue","upperValue","domains","hasMin","hasMax","isGrid","isAll","offsetForBand","realScaleType","niceTicks","scaleContent","row","_isNaN","defaultHandler","parentHandler","childHandler","customizedHandler","arg1","arg2","arg3","arg4","parseScale","chartType","d3Scales","_isString","EPS","checkDomainOfScale","STACK_OFFSET_MAP","expand","none","stackOffsetNone","silhouette","wiggle","s2","si","sij0","s3","sk","getStackedData","stackItems","offsetType","dataKeys","orderNone","offsetNone","oz","sz","shapeStack","stackOrderNone","_items","_item$props3","stackId","childGroup","getTicksOfScale","opts","scaleType","tickValues","_domain","itemIndex","MIN_VALUE_REG","MAX_VALUE_REG","specifiedDomain","dataDomain","_value","isBar","bandWidth","orderedTicks","calculatedDomain","axisChild","_graphicalItem$props","stringCache","widthCache","cacheCount","SPAN_STYLE","STYLE_LIST","MEASUREMENT_SPAN_ID","getStyleString","styleString","cacheKey","measurementSpan","getElementById","body","appendChild","measurementSpanStyle","styleKey","textContent","html","ownerDocument","documentElement","pageYOffset","clientTop","pageXOffset","clientLeft","_isNumber","idCounter","totalValue","validate","ary","numberA","numberB","specifiedValue","condition","radianToDegree","angleInRadian","reversed","_range2","_parseScale","finalAxis","getAngleOfPoint","anotherPoint","distanceBetweenPoints","acos","reverseFormatAngleOfSetor","startCnt","endCnt","sector","_getAngleOfPoint","_formatAngleOfSector","formatAngleOfSector","formatAngle","REACT_BROWSER_EVENT_MAP","click","mousedown","mouseup","mouseover","mousemove","mouseout","mouseenter","mouseleave","touchcancel","touchend","touchmove","touchstart","Comp","lastChildren","isFragment","childType","_el$props","SVG_TAGS","isSvgElement","includeEvents","svgElementType","inputProps","_inputProps","_FilteredElementKeyMa","matchingElementTypeKeys","FilteredElementKeyMap","SVGElementPropKeys","EventKeys","isValidSpreadableProp","nextChildren","isSingleChildEqual","nextChild","renderMap","record","results","PolyElementKeys","svg","polygon","polyline","newHandler","originalHandler","getEventHandlerOfChild","_postcssValueParser2","_parser","_reducer2","_stringifier2","MATCH_CALC","walk","contents","stringify","nodes","ast","parser","reducedAst","_cssUnitConverter","_cssUnitConverter2","convertAbsoluteLength","flip","_convert","_convert2","operator","isEqual","convertMathExpression","_node","op","flipValue","isValueType","reduceAddSubExpression","reduceDivisionExpression","reduceMultiplicationExpression","reduceMathExpression","calc","_reducer","prec","fallback","JisonParserError","msg","hash","stacktrace","exception","ex2","captureStackTrace","rv","trace","yy","hasPartialLrUpgradeOnConflict","errorRecoveryTokenDiscardCount","symbols_","terminals_","TERROR","EOF","originalQuoteName","originalParseError","cleanupAfterParse","constructParseErrorInfo","yyMergeLocationInfo","__reentrant_call_depth","__error_infos","__error_recovery_infos","quoteName","id_str","getSymbolName","describeSymbol","terminal_descriptions_","collect_expected_token_set","do_not_describe","tokenset","check","state_descriptions_","table","productions_","rule","bp","performAction","yystate","yysp","yyvstack","lexer","$","mode","goto","bt","defaultActions","bda","parseError","ExceptionClass","recoverable","destroy","sstack","vstack","sp","NO_ACTION","__lexer__","sharedState_yy","pre_parse","post_parse","pre_lex","post_lex","fastLex","token","assert","yyGetSharedState","dst","src","shallow_copy_noclobber","resultValue","invoke_post_methods","do_not_nuke_errorinfos","cleanupAfterLex","ex","expected","pei","errStr","yytext","token_id","yylineno","action","new_state","symbol_stack","state_stack","value_stack","stack_pointer","rec","yyrulelen","this_production","lex","yyval","_$","retval","setInput","canIUse","errSymbolDescr","showPosition","ntsymbol","JisonLexerError","ERROR","__currentRuleSet__","__decompressed","_backtrack","_input","_more","_signaled_error_token","conditionStack","matched","matches","yyleng","yylloc","constructLexErrorInfo","show_input_position","prettyPrintRange","pos_str","loc","yyerror","lineno_msg","lexerErrorsAreRecoverable","extra_error_attributes","col","last_column","first_line","first_column","last_line","rules","rule_re","conditions","spec","rule_ids","rule_regexes","rule_new_ids","__rule_regexes","__rule_count","editRemainingInput","cpsArg","ch","slice_len","ch2","unput","substr","pre_lines","more","reject","backtrack_lexer","less","pastInput","maxSize","past","upcomingInput","maxPrefix","maxPostfix","deriveLocationInfo","actual","preceding","following","context_loc","context_loc2","l0","l1","lineno_display_width","ws_prefix","nonempty_line_indexes","lno","errpfx","clip_start","MINIMUM_VISIBLE_NONEMPTY_LINE_COUNT","clip_end","intermediate_line","splice","describeYYLLOC","display_range_too","l2","test_match","indexed_rule","backup","match_str","match_str_len","tempMatch","_currentRules","trackPosition","topState","regexes","flex","pendingInput","activeCondition","conditionStackDepth","pushState","popState","stateStackSize","yyrulenumber","YY_START","simpleCaseActionClusters","inclusive","Parser","ValueParser","cb","bubble","openParentheses","closeParentheses","singleQuote","doubleQuote","backslash","slash","colon","star","quote","escape","escapePos","whitespacePos","tokens","code","balanced","sourceIndex","unclosed","stringifyNode","custom","buf","customResult","EXP","dotted","sciPos","containsNumber","appendClass","parseValue","newClass","band","ordinal","ordinalRange","paddingInner","paddingOuter","pointish","InternMap","keyof","super","_intern","intern_get","intern_set","intern_delete","implicit","_taggedTemplateLiteral","strings","raw","freeze","epsilon","tauEpsilon","append","Path","digits","_append","appendRound","_templateObject","_templateObject2","_templateObject3","quadraticCurveTo","_templateObject4","_templateObject5","arcTo","x21","y21","x01","y01","l01_2","_templateObject6","x20","y20","l21_2","l20_2","l21","l01","t01","t21","_templateObject8","_templateObject9","_templateObject7","a0","ccw","cw","da","_templateObject10","_templateObject11","_templateObject12","_templateObject13","_templateObject14","RangeError"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/872.9de95914.chunk.js b/web-app/build/static/js/872.9de95914.chunk.js deleted file mode 100644 index c5a55eea518..00000000000 --- a/web-app/build/static/js/872.9de95914.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[872],{5872:(s,x,e)=>{e.r(x),e.d(x,{default:()=>i});var m=e(5043),j=e(9923),r=e(579);const i=()=>{const[s,x]=(0,m.useState)("default");return(0,r.jsxs)(j.azJ,{sx:{position:"relative",padding:"20px 35px 0","& h6":{color:"#777777",fontSize:30},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}},children:[(0,r.jsx)(j.xA9,{container:!0,children:(0,r.jsx)(j.z6M,{selectorOptions:[{value:"def",label:"Default"},{value:"red",label:"Color"}],currentValue:s,id:"color-selector",name:"color-selector",onChange:s=>{x(s.target.value)}})}),(0,r.jsx)("h1",{children:"Logos"}),(0,r.jsx)(j.xA9,{container:!0,sx:{fontSize:12,wordWrap:"break-word","& .min-loader":{width:45,height:45},"& .min-icon":{color:"red"===s?"red":"black"}},children:(0,r.jsxs)(j.xA9,{item:!0,xs:3,children:[(0,r.jsx)(j.xul,{}),(0,r.jsx)("br",{}),"ThemedLogo"]})}),(0,r.jsx)("h1",{children:"Loaders"}),(0,r.jsx)(j.xA9,{container:!0,sx:{fontSize:12,wordWrap:"break-word","& .min-loader":{width:45,height:45},"& .min-icon":{color:"red"===s?"red":"black"}},children:(0,r.jsxs)(j.xA9,{item:!0,xs:3,children:[(0,r.jsx)(j.aHM,{}),(0,r.jsx)("br",{}),"Loader"]})}),(0,r.jsx)("h1",{children:"Icons"}),(0,r.jsxs)(j.xA9,{container:!0,sx:{fontSize:12,wordWrap:"break-word","& .min-loader":{width:45,height:45},"& .min-icon":{color:"red"===s?"red":"black"}},children:[(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.JMb,{}),(0,r.jsx)("br",{}),"AccountIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.No_,{}),(0,r.jsx)("br",{}),"AddAccessRuleIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.hQD,{}),(0,r.jsx)("br",{}),"AddFolderIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.REV,{}),(0,r.jsx)("br",{}),"AddIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.WC,{}),(0,r.jsx)("br",{}),"AddMembersToGroupIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.b_$,{}),(0,r.jsx)("br",{}),"AddNewTagIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j._0O,{}),(0,r.jsx)("br",{}),"AlertIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.wKj,{}),(0,r.jsx)("br",{}),"AllBucketsIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.HKb,{}),(0,r.jsx)("br",{}),"ArrowIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.flY,{}),(0,r.jsx)("br",{}),"ArrowRightIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.Nmx,{}),(0,r.jsx)("br",{}),"AzureTierIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.Ubg,{}),(0,r.jsx)("br",{}),"AzureTierIconXs"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.y$O,{}),(0,r.jsx)("br",{}),"BackSettingsIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.j6H,{}),(0,r.jsx)("br",{}),"BucketEncryptionIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.Uh,{}),(0,r.jsx)("br",{}),"BucketQuotaIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.WBh,{}),(0,r.jsx)("br",{}),"BucketReplicationIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.brV,{}),(0,r.jsx)("br",{}),"BucketsIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.CTc,{}),(0,r.jsx)("br",{}),"CalendarIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.fJb,{}),(0,r.jsx)("br",{}),"CallHomeFeatureIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.rXL,{}),(0,r.jsx)("br",{}),"CancelledIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.uYH,{}),(0,r.jsx)("br",{}),"ChangeAccessPolicyIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.Fwq,{}),(0,r.jsx)("br",{}),"ChangePasswordIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.GQ2,{}),(0,r.jsx)("br",{}),"CircleIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j._FR,{}),(0,r.jsx)("br",{}),"ClosePanelIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.pHQ,{}),(0,r.jsx)("br",{}),"ClustersIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.dLE,{}),(0,r.jsx)("br",{}),"CollapseIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.RJ2,{}),(0,r.jsx)("br",{}),"ComputerLineIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.xTG,{}),(0,r.jsx)("br",{}),"ConfigurationsListIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.xWY,{}),(0,r.jsx)("br",{}),"ConfirmDeleteIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.$rg,{}),(0,r.jsx)("br",{}),"ConfirmModalIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.D0K,{}),(0,r.jsx)("br",{}),"ConsoleIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.TdU,{}),(0,r.jsx)("br",{}),"CopyIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.lwR,{}),(0,r.jsx)("br",{}),"CreateGroupIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.WSU,{}),(0,r.jsx)("br",{}),"CreateIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.DGR,{}),(0,r.jsx)("br",{}),"CreateNewPathIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.R$W,{}),(0,r.jsx)("br",{}),"CreateUserIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.aL$,{}),(0,r.jsx)("br",{}),"DashboardIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.d7y,{}),(0,r.jsx)("br",{}),"DeleteIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.rgY,{}),(0,r.jsx)("br",{}),"DeleteNonCurrentIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.uFi,{}),(0,r.jsx)("br",{}),"DiagnosticsFeatureIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.KLX,{}),(0,r.jsx)("br",{}),"DiagnosticsIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.aaC,{}),(0,r.jsx)("br",{}),"DisabledIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.wD7,{}),(0,r.jsx)("br",{}),"DocumentationIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.s3U,{}),(0,r.jsx)("br",{}),"DownloadIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.CB9,{}),(0,r.jsx)("br",{}),"DownloadStatIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.KPq,{}),(0,r.jsx)("br",{}),"DriveFormatErrorsIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.JUN,{}),(0,r.jsx)("br",{}),"DrivesIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.qUP,{}),(0,r.jsx)("br",{}),"EditIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.cGQ,{}),(0,r.jsx)("br",{}),"EditTagIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.qI7,{}),(0,r.jsx)("br",{}),"EditTenantIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.jcB,{}),(0,r.jsx)("br",{}),"EditYamlIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.K8y,{}),(0,r.jsx)("br",{}),"EditorThemeSwitchIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.F7$,{}),(0,r.jsx)("br",{}),"EgressIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.xhy,{}),(0,r.jsx)("br",{}),"EnabledIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.VDx,{}),(0,r.jsx)("br",{}),"EventSubscriptionIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.JHI,{}),(0,r.jsx)("br",{}),"ExtraFeaturesIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.DUd,{}),(0,r.jsx)("br",{}),"FileBookIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.$5j,{}),(0,r.jsx)("br",{}),"FileCloudIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.bM2,{}),(0,r.jsx)("br",{}),"FileCodeIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.qM2,{}),(0,r.jsx)("br",{}),"FileConfigIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.ITz,{}),(0,r.jsx)("br",{}),"FileDbIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.PcO,{}),(0,r.jsx)("br",{}),"FileFontIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.nLN,{}),(0,r.jsx)("br",{}),"FileImageIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.Uom,{}),(0,r.jsx)("br",{}),"FileLinkIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.VSs,{}),(0,r.jsx)("br",{}),"FileLockIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.YJK,{}),(0,r.jsx)("br",{}),"FileMissingIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.jCy,{}),(0,r.jsx)("br",{}),"FileMusicIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.yTC,{}),(0,r.jsx)("br",{}),"FilePdfIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.QvW,{}),(0,r.jsx)("br",{}),"FilePptIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.yEV,{}),(0,r.jsx)("br",{}),"FileTxtIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.FRZ,{}),(0,r.jsx)("br",{}),"FileVideoIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.wPu,{}),(0,r.jsx)("br",{}),"FileWorldIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.z9t,{}),(0,r.jsx)("br",{}),"FileXlsIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.j_m,{}),(0,r.jsx)("br",{}),"FileZipIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.sjq,{}),(0,r.jsx)("br",{}),"FolderIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.eXQ,{}),(0,r.jsx)("br",{}),"FormatDrivesIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.F7U,{}),(0,r.jsx)("br",{}),"GoogleTierIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.gwF,{}),(0,r.jsx)("br",{}),"GoogleTierIconXs"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.YXz,{}),(0,r.jsx)("br",{}),"GroupsIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.rod,{}),(0,r.jsx)("br",{}),"HardBucketQuotaIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.Sdx,{}),(0,r.jsx)("br",{}),"HealIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.NTw,{}),(0,r.jsx)("br",{}),"HelpIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.nag,{}),(0,r.jsx)("br",{}),"HelpIconFilled"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.osr,{}),(0,r.jsx)("br",{}),"HistoryIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.n$X,{}),(0,r.jsx)("br",{}),"IAMPoliciesIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.mo0,{}),(0,r.jsx)("br",{}),"InfoIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.iv,{}),(0,r.jsx)("br",{}),"JSONIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.QrX,{}),(0,r.jsx)("br",{}),"LambdaBalloonIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.PI5,{}),(0,r.jsx)("br",{}),"LambdaIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.jm5,{}),(0,r.jsx)("br",{}),"LambdaNotificationsIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.ODz,{}),(0,r.jsx)("br",{}),"LegalHoldIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.t6I,{}),(0,r.jsx)("br",{}),"LicenseIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.oVU,{}),(0,r.jsx)("br",{}),"LifecycleConfigIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.qYV,{}),(0,r.jsx)("br",{}),"LinkIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.XAi,{}),(0,r.jsx)("br",{}),"LockIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.o4l,{}),(0,r.jsx)("br",{}),"LogoutIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.Dk$,{}),(0,r.jsx)("br",{}),"LogsIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.$vN,{}),(0,r.jsx)("br",{}),"MetadataIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.Wh8,{}),(0,r.jsx)("br",{}),"MinIOTierIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.$2v,{}),(0,r.jsx)("br",{}),"MinIOTierIconXs"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.XWb,{}),(0,r.jsx)("br",{}),"MirroringIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.hwo,{}),(0,r.jsx)("br",{}),"MultipleBucketsIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.VgG,{}),(0,r.jsx)("br",{}),"NewAccountIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.pj3,{}),(0,r.jsx)("br",{}),"NewPathIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.WJF,{}),(0,r.jsx)("br",{}),"NewPoolIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.Kiw,{}),(0,r.jsx)("br",{}),"NextArrowIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.g7G,{}),(0,r.jsx)("br",{}),"ObjectBrowser1Icon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.t1M,{}),(0,r.jsx)("br",{}),"ObjectBrowserFolderIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.nwl,{}),(0,r.jsx)("br",{}),"ObjectBrowserIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.Hch,{}),(0,r.jsx)("br",{}),"ObjectInfoIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.W2Y,{}),(0,r.jsx)("br",{}),"ObjectManagerIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.jG,{}),(0,r.jsx)("br",{}),"ObjectPreviewIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.lD6,{}),(0,r.jsx)("br",{}),"OfflineRegistrationBackIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.Kmb,{}),(0,r.jsx)("br",{}),"OfflineRegistrationIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.J2s,{}),(0,r.jsx)("br",{}),"OnlineRegistrationBackIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.ESy,{}),(0,r.jsx)("br",{}),"OnlineRegistrationIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.UtR,{}),(0,r.jsx)("br",{}),"OpenListIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.aJN,{}),(0,r.jsx)("br",{}),"PasswordKeyIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.s5I,{}),(0,r.jsx)("br",{}),"PerformanceFeatureIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.BlH,{}),(0,r.jsx)("br",{}),"PermissionIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.cyn,{}),(0,r.jsx)("br",{}),"PreviewIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.uMc,{}),(0,r.jsx)("br",{}),"PrometheusErrorIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.wb9,{}),(0,r.jsx)("br",{}),"PrometheusIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.YkU,{}),(0,r.jsx)("br",{}),"RecoverIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.UfX,{}),(0,r.jsx)("br",{}),"RedoIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.fNY,{}),(0,r.jsx)("br",{}),"RefreshIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.TFC,{}),(0,r.jsx)("br",{}),"RemoveAllIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.YPx,{}),(0,r.jsx)("br",{}),"RemoveIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.fRK,{}),(0,r.jsx)("br",{}),"ReportedUsageFullIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.wNL,{}),(0,r.jsx)("br",{}),"ReportedUsageIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.gn6,{}),(0,r.jsx)("br",{}),"RetentionIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j._tF,{}),(0,r.jsx)("br",{}),"S3TierIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.ZZX,{}),(0,r.jsx)("br",{}),"S3TierIconXs"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.WIv,{}),(0,r.jsx)("br",{}),"SearchIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.nhX,{}),(0,r.jsx)("br",{}),"SelectAllIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.IN,{}),(0,r.jsx)("br",{}),"SelectMultipleIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.WXN,{}),(0,r.jsx)("br",{}),"ServersIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.kQt,{}),(0,r.jsx)("br",{}),"ServiceAccountCredentialsIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.ehx,{}),(0,r.jsx)("br",{}),"ServiceAccountIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.tec,{}),(0,r.jsx)("br",{}),"ServiceAccountsIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.Zes,{}),(0,r.jsx)("br",{}),"SettingsIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.liv,{}),(0,r.jsx)("br",{}),"ShareIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.vhL,{}),(0,r.jsx)("br",{}),"SpeedtestIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.Gg5,{}),(0,r.jsx)("br",{}),"StarIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.NBP,{}),(0,r.jsx)("br",{}),"StorageIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.Fjq,{}),(0,r.jsx)("br",{}),"SyncIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.P3Z,{}),(0,r.jsx)("br",{}),"TagsIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.fmr,{}),(0,r.jsx)("br",{}),"TenantsIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.$R7,{}),(0,r.jsx)("br",{}),"TenantsOutlineIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.fAn,{}),(0,r.jsx)("br",{}),"TiersIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.zEc,{}),(0,r.jsx)("br",{}),"TiersNotAvailableIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.dwU,{}),(0,r.jsx)("br",{}),"ToolsIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.Sxe,{}),(0,r.jsx)("br",{}),"TotalObjectsIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.bqg,{}),(0,r.jsx)("br",{}),"TraceIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.ucK,{}),(0,r.jsx)("br",{}),"TrashIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.EO4,{}),(0,r.jsx)("br",{}),"UploadFile"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.nDF,{}),(0,r.jsx)("br",{}),"UploadFolderIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.JMY,{}),(0,r.jsx)("br",{}),"UploadIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.VJE,{}),(0,r.jsx)("br",{}),"UploadStatIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.Owo,{}),(0,r.jsx)("br",{}),"UptimeIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.c2u,{}),(0,r.jsx)("br",{}),"UsersIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.M3H,{}),(0,r.jsx)("br",{}),"VerifiedIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.mzI,{}),(0,r.jsx)("br",{}),"VersionIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.j1U,{}),(0,r.jsx)("br",{}),"VersionsIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.cJw,{}),(0,r.jsx)("br",{}),"WarnIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.WN0,{}),(0,r.jsx)("br",{}),"WarpIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.jJ3,{}),(0,r.jsx)("br",{}),"WatchIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.evq,{}),(0,r.jsx)("br",{}),"AlertCloseIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.DtA,{}),(0,r.jsx)("br",{}),"OpenSourceIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.xLb,{}),(0,r.jsx)("br",{}),"LicenseDocIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.Z3O,{}),(0,r.jsx)("br",{}),"BackIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.YGH,{}),(0,r.jsx)("br",{}),"FilterIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.BK0,{}),(0,r.jsx)("br",{}),"SuccessIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.OFF,{}),(0,r.jsx)("br",{}),"NetworkGetIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.z8D,{}),(0,r.jsx)("br",{}),"NetworkPutIcon"]})]}),(0,r.jsx)("h1",{children:"Menu Icons"}),(0,r.jsxs)(j.xA9,{container:!0,sx:{fontSize:12,wordWrap:"break-word","& .min-loader":{width:45,height:45},"& .min-icon":{color:"red"===s?"red":"black"}},children:[(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.nhF,{}),(0,r.jsx)("br",{}),"AccessMenuIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.l7M,{}),(0,r.jsx)("br",{}),"AccountsMenuIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.Vep,{}),(0,r.jsx)("br",{}),"AuditLogsMenuIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.wql,{}),(0,r.jsx)("br",{}),"BucketsMenuIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.kfP,{}),(0,r.jsx)("br",{}),"CallHomeMenuIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.Zui,{}),(0,r.jsx)("br",{}),"DiagnosticsMenuIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.YMI,{}),(0,r.jsx)("br",{}),"DrivesMenuIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.Xk0,{}),(0,r.jsx)("br",{}),"GroupsMenuIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.bdq,{}),(0,r.jsx)("br",{}),"HealthMenuIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.XjC,{}),(0,r.jsx)("br",{}),"IdentityMenuIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.nTF,{}),(0,r.jsx)("br",{}),"InspectMenuIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.cpY,{}),(0,r.jsx)("br",{}),"LogsMenuIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.YI8,{}),(0,r.jsx)("br",{}),"MenuCollapsedIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.w_U,{}),(0,r.jsx)("br",{}),"MenuExpandedIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.KKE,{}),(0,r.jsx)("br",{}),"MetricsMenuIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.v5p,{}),(0,r.jsx)("br",{}),"MonitoringMenuIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.$iK,{}),(0,r.jsx)("br",{}),"PerformanceMenuIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.oPe,{}),(0,r.jsx)("br",{}),"ProfileMenuIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.ke_,{}),(0,r.jsx)("br",{}),"RegisterMenuIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.EsX,{}),(0,r.jsx)("br",{}),"SupportMenuIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.sJx,{}),(0,r.jsx)("br",{}),"TraceMenuIcon"]}),(0,r.jsxs)(j.xA9,{item:!0,xs:3,sm:2,md:1,children:[(0,r.jsx)(j.PPm,{}),(0,r.jsx)("br",{}),"UsersMenuIcon"]})]})]})}}}]); -//# sourceMappingURL=872.9de95914.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/872.9de95914.chunk.js.map b/web-app/build/static/js/872.9de95914.chunk.js.map deleted file mode 100644 index 0ae628d986d..00000000000 --- a/web-app/build/static/js/872.9de95914.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/872.9de95914.chunk.js","mappings":"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","sources":["screens/Console/Common/IconsScreen.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport * as cicons from \"mds\";\nimport * as micons from \"mds\";\nimport { Box, Grid, Loader, RadioGroup } from \"mds\";\n\nconst IconsScreen = () => {\n const [color, setColor] = useState(\"default\");\n return (\n \n \n {\n setColor(c.target.value);\n }}\n />\n \n

Logos

\n \n \n \n
\n ThemedLogo\n
\n \n

Loaders

\n \n \n \n
\n Loader\n
\n \n

Icons

\n \n \n \n
\n AccountIcon\n
\n\n \n \n
\n AddAccessRuleIcon\n
\n\n \n \n
\n AddFolderIcon\n
\n\n \n \n
\n AddIcon\n
\n\n \n \n
\n AddMembersToGroupIcon\n
\n\n \n \n
\n AddNewTagIcon\n
\n\n \n \n
\n AlertIcon\n
\n\n \n \n
\n AllBucketsIcon\n
\n\n \n \n
\n ArrowIcon\n
\n\n \n \n
\n ArrowRightIcon\n
\n\n \n \n
\n AzureTierIcon\n
\n\n \n \n
\n AzureTierIconXs\n
\n\n \n \n
\n BackSettingsIcon\n
\n\n \n \n
\n BucketEncryptionIcon\n
\n\n \n \n
\n BucketQuotaIcon\n
\n\n \n \n
\n BucketReplicationIcon\n
\n\n \n \n
\n BucketsIcon\n
\n\n \n \n
\n CalendarIcon\n
\n\n \n \n
\n CallHomeFeatureIcon\n
\n\n \n \n
\n CancelledIcon\n
\n\n \n \n
\n ChangeAccessPolicyIcon\n
\n\n \n \n
\n ChangePasswordIcon\n
\n\n \n \n
\n CircleIcon\n
\n\n \n \n
\n ClosePanelIcon\n
\n\n \n \n
\n ClustersIcon\n
\n\n \n \n
\n CollapseIcon\n
\n\n \n \n
\n ComputerLineIcon\n
\n\n \n \n
\n ConfigurationsListIcon\n
\n\n \n \n
\n ConfirmDeleteIcon\n
\n\n \n \n
\n ConfirmModalIcon\n
\n\n \n \n
\n ConsoleIcon\n
\n\n \n \n
\n CopyIcon\n
\n\n \n \n
\n CreateGroupIcon\n
\n\n \n \n
\n CreateIcon\n
\n\n \n \n
\n CreateNewPathIcon\n
\n\n \n \n
\n CreateUserIcon\n
\n\n \n \n
\n DashboardIcon\n
\n\n \n \n
\n DeleteIcon\n
\n\n \n \n
\n DeleteNonCurrentIcon\n
\n\n \n \n
\n DiagnosticsFeatureIcon\n
\n\n \n \n
\n DiagnosticsIcon\n
\n\n \n \n
\n DisabledIcon\n
\n\n \n \n
\n DocumentationIcon\n
\n\n \n \n
\n DownloadIcon\n
\n\n \n \n
\n DownloadStatIcon\n
\n\n \n \n
\n DriveFormatErrorsIcon\n
\n\n \n \n
\n DrivesIcon\n
\n\n \n \n
\n EditIcon\n
\n\n \n \n
\n EditTagIcon\n
\n\n \n \n
\n EditTenantIcon\n
\n\n \n \n
\n EditYamlIcon\n
\n\n \n \n
\n EditorThemeSwitchIcon\n
\n\n \n \n
\n EgressIcon\n
\n\n \n \n
\n EnabledIcon\n
\n\n \n \n
\n EventSubscriptionIcon\n
\n\n \n \n
\n ExtraFeaturesIcon\n
\n\n \n \n
\n FileBookIcon\n
\n\n \n \n
\n FileCloudIcon\n
\n\n \n \n
\n FileCodeIcon\n
\n\n \n \n
\n FileConfigIcon\n
\n\n \n \n
\n FileDbIcon\n
\n\n \n \n
\n FileFontIcon\n
\n\n \n \n
\n FileImageIcon\n
\n\n \n \n
\n FileLinkIcon\n
\n\n \n \n
\n FileLockIcon\n
\n\n \n \n
\n FileMissingIcon\n
\n\n \n \n
\n FileMusicIcon\n
\n\n \n \n
\n FilePdfIcon\n
\n\n \n \n
\n FilePptIcon\n
\n\n \n \n
\n FileTxtIcon\n
\n\n \n \n
\n FileVideoIcon\n
\n\n \n \n
\n FileWorldIcon\n
\n\n \n \n
\n FileXlsIcon\n
\n\n \n \n
\n FileZipIcon\n
\n\n \n \n
\n FolderIcon\n
\n\n \n \n
\n FormatDrivesIcon\n
\n\n \n \n
\n GoogleTierIcon\n
\n\n \n \n
\n GoogleTierIconXs\n
\n\n \n \n
\n GroupsIcon\n
\n\n \n \n
\n HardBucketQuotaIcon\n
\n\n \n \n
\n HealIcon\n
\n\n \n \n
\n HelpIcon\n
\n\n \n \n
\n HelpIconFilled\n
\n\n \n \n
\n HistoryIcon\n
\n\n \n \n
\n IAMPoliciesIcon\n
\n\n \n \n
\n InfoIcon\n
\n\n \n \n
\n JSONIcon\n
\n\n \n \n
\n LambdaBalloonIcon\n
\n\n \n \n
\n LambdaIcon\n
\n\n \n \n
\n LambdaNotificationsIcon\n
\n\n \n \n
\n LegalHoldIcon\n
\n\n \n \n
\n LicenseIcon\n
\n\n \n \n
\n LifecycleConfigIcon\n
\n\n \n \n
\n LinkIcon\n
\n\n \n \n
\n LockIcon\n
\n\n \n \n
\n LogoutIcon\n
\n\n \n \n
\n LogsIcon\n
\n\n \n \n
\n MetadataIcon\n
\n\n \n \n
\n MinIOTierIcon\n
\n\n \n \n
\n MinIOTierIconXs\n
\n\n \n \n
\n MirroringIcon\n
\n\n \n \n
\n MultipleBucketsIcon\n
\n\n \n \n
\n NewAccountIcon\n
\n\n \n \n
\n NewPathIcon\n
\n\n \n \n
\n NewPoolIcon\n
\n\n \n \n
\n NextArrowIcon\n
\n\n \n \n
\n ObjectBrowser1Icon\n
\n\n \n \n
\n ObjectBrowserFolderIcon\n
\n\n \n \n
\n ObjectBrowserIcon\n
\n\n \n \n
\n ObjectInfoIcon\n
\n\n \n \n
\n ObjectManagerIcon\n
\n\n \n \n
\n ObjectPreviewIcon\n
\n\n \n \n
\n OfflineRegistrationBackIcon\n
\n\n \n \n
\n OfflineRegistrationIcon\n
\n\n \n \n
\n OnlineRegistrationBackIcon\n
\n\n \n \n
\n OnlineRegistrationIcon\n
\n\n \n \n
\n OpenListIcon\n
\n\n \n \n
\n PasswordKeyIcon\n
\n\n \n \n
\n PerformanceFeatureIcon\n
\n\n \n \n
\n PermissionIcon\n
\n\n \n \n
\n PreviewIcon\n
\n\n \n \n
\n PrometheusErrorIcon\n
\n\n \n \n
\n PrometheusIcon\n
\n\n \n \n
\n RecoverIcon\n
\n\n \n \n
\n RedoIcon\n
\n\n \n \n
\n RefreshIcon\n
\n\n \n \n
\n RemoveAllIcon\n
\n\n \n \n
\n RemoveIcon\n
\n\n \n \n
\n ReportedUsageFullIcon\n
\n\n \n \n
\n ReportedUsageIcon\n
\n\n \n \n
\n RetentionIcon\n
\n\n \n \n
\n S3TierIcon\n
\n\n \n \n
\n S3TierIconXs\n
\n\n \n \n
\n SearchIcon\n
\n\n \n \n
\n SelectAllIcon\n
\n\n \n \n
\n SelectMultipleIcon\n
\n\n \n \n
\n ServersIcon\n
\n\n \n \n
\n ServiceAccountCredentialsIcon\n
\n\n \n \n
\n ServiceAccountIcon\n
\n\n \n \n
\n ServiceAccountsIcon\n
\n\n \n \n
\n SettingsIcon\n
\n\n \n \n
\n ShareIcon\n
\n\n \n \n
\n SpeedtestIcon\n
\n\n \n \n
\n StarIcon\n
\n\n \n \n
\n StorageIcon\n
\n\n \n \n
\n SyncIcon\n
\n\n \n \n
\n TagsIcon\n
\n\n \n \n
\n TenantsIcon\n
\n\n \n \n
\n TenantsOutlineIcon\n
\n\n \n \n
\n TiersIcon\n
\n\n \n \n
\n TiersNotAvailableIcon\n
\n\n \n \n
\n ToolsIcon\n
\n\n \n \n
\n TotalObjectsIcon\n
\n\n \n \n
\n TraceIcon\n
\n\n \n \n
\n TrashIcon\n
\n\n \n \n
\n UploadFile\n
\n\n \n \n
\n UploadFolderIcon\n
\n\n \n \n
\n UploadIcon\n
\n\n \n \n
\n UploadStatIcon\n
\n\n \n \n
\n UptimeIcon\n
\n\n \n \n
\n UsersIcon\n
\n\n \n \n
\n VerifiedIcon\n
\n\n \n \n
\n VersionIcon\n
\n\n \n \n
\n VersionsIcon\n
\n\n \n \n
\n WarnIcon\n
\n\n \n \n
\n WarpIcon\n
\n\n \n \n
\n WatchIcon\n
\n \n \n
\n AlertCloseIcon\n
\n \n \n
\n OpenSourceIcon\n
\n \n \n
\n LicenseDocIcon\n
\n \n \n
\n BackIcon\n
\n \n \n
\n FilterIcon\n
\n \n \n
\n SuccessIcon\n
\n \n \n
\n NetworkGetIcon\n
\n \n \n
\n NetworkPutIcon\n
\n \n

Menu Icons

\n \n \n \n
\n AccessMenuIcon\n
\n\n \n \n
\n AccountsMenuIcon\n
\n\n \n \n
\n AuditLogsMenuIcon\n
\n\n \n \n
\n BucketsMenuIcon\n
\n\n \n \n
\n CallHomeMenuIcon\n
\n\n \n \n
\n DiagnosticsMenuIcon\n
\n\n \n \n
\n DrivesMenuIcon\n
\n\n \n \n
\n GroupsMenuIcon\n
\n\n \n \n
\n HealthMenuIcon\n
\n\n \n \n
\n IdentityMenuIcon\n
\n\n \n \n
\n InspectMenuIcon\n
\n\n \n \n
\n LogsMenuIcon\n
\n\n \n \n
\n MenuCollapsedIcon\n
\n\n \n \n
\n MenuExpandedIcon\n
\n\n \n \n
\n MetricsMenuIcon\n
\n\n \n \n
\n MonitoringMenuIcon\n
\n\n \n \n
\n PerformanceMenuIcon\n
\n\n \n \n
\n ProfileMenuIcon\n
\n\n \n \n
\n RegisterMenuIcon\n
\n\n \n \n
\n SupportMenuIcon\n
\n\n \n \n
\n TraceMenuIcon\n
\n\n \n \n
\n UsersMenuIcon\n
\n \n \n );\n};\n\nexport default IconsScreen;\n"],"names":["IconsScreen","color","setColor","useState","_jsxs","Box","sx","position","padding","fontSize","children","_jsx","Grid","container","RadioGroup","selectorOptions","value","label","currentValue","id","name","onChange","c","target","wordWrap","width","height","item","xs","cicons","Loader","sm","md","micons"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/890.17acf929.chunk.js b/web-app/build/static/js/890.17acf929.chunk.js deleted file mode 100644 index 1ead17c150c..00000000000 --- a/web-app/build/static/js/890.17acf929.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[890],{2237:(e,t,a)=>{a.d(t,{A:()=>s});var n=a(5043),l=a(579);const s=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return function(a){return(0,l.jsx)(n.Suspense,{fallback:t,children:(0,l.jsx)(e,{...a})})}}},4681:(e,t,a)=>{a.d(t,{A:()=>s});a(5043);var n=a(9923),l=a(579);const s=e=>{let{placeholder:t="",onChange:a,overrideClass:s,value:i,id:r="search-resource",label:o="",sx:c}=e;return(0,l.jsx)(n.cl_,{placeholder:t,className:s||"",id:r,label:o,onChange:e=>{a(e.target.value)},value:i,startIcon:(0,l.jsx)(n.WIv,{}),sx:c})}},8890:(e,t,a)=>{a.r(t),a.d(t,{default:()=>R});var n=a(5043),l=a(9923),s=a(4159),i=a(3216),r=a(2961),o=a(9607),c=a(8296),d=a(6483),u=a(4574),x=a(3097),h=a.n(x),m=a(579);const g=u.Ay.div((e=>{let{theme:t}=e;return{margin:"0px 20px","& .value":{fontSize:18,color:h()(t,"mutedText","#87888d"),fontWeight:400,"&.normal":{color:h()(t,"fontColor","#000")}},"& .unit":{fontSize:12,color:h()(t,"secondaryText","#5B5C5C"),fontWeight:"bold"},"& .label":{textAlign:"center",color:h()(t,"mutedText","#87888d"),fontSize:12,whiteSpace:"nowrap","&.normal":{color:h()(t,"secondaryText","#5B5C5C")}}}})),p=e=>{let{label:t,value:a,unit:s,variant:i="normal"}=e;return(0,m.jsxs)(g,{children:[(0,m.jsxs)(l.azJ,{style:{textAlign:"center"},children:[(0,m.jsx)("span",{className:"value ".concat(i),children:a}),s&&(0,m.jsxs)(n.Fragment,{children:[" ",(0,m.jsx)("span",{className:"unit",children:s})]})]}),(0,m.jsx)(l.azJ,{className:"label",children:t})]})};var f=a(6129);const v=u.Ay.div((e=>{let{theme:t}=e;return{border:"".concat(h()(t,"borderColor","#eaeaea")," 1px solid"),borderRadius:3,padding:15,cursor:"pointer","&.disabled":{backgroundColor:h()(t,"signalColors.danger","red")},"&:hover":{backgroundColor:h()(t,"boxBackground","#FBFAFA")},"& .tenantTitle":{display:"flex",alignItems:"center",justifyContent:"space-between",gap:10,"& h1":{padding:0,margin:0,marginBottom:5,fontSize:22,color:h()(t,"screenTitle.iconColor","#07193E"),["@media (max-width: ".concat(l.nmC.md,"px)")]:{marginBottom:0}}},"& .tenantDetails":{display:"flex",gap:40,"& span":{fontSize:14},["@media (max-width: ".concat(l.nmC.md,"px)")]:{flexFlow:"column-reverse",gap:5}},"& .tenantMetrics":{display:"flex",alignItems:"center",marginTop:20,gap:25,borderTop:"".concat(h()(t,"borderColor","#E2E2E2")," 1px solid"),paddingTop:20,"& svg.tenantIcon":{color:h()(t,"screenTitle.iconColor","#07193E"),fill:h()(t,"screenTitle.iconColor","#07193E")},"& .metric":{"& .min-icon":{color:h()(t,"fontColor","#000"),width:13,marginRight:5}},"& .metricLabel":{fontSize:14,fontWeight:"bold",color:h()(t,"fontColor","#000")},"& .metricText":{fontSize:24,fontWeight:"bold"},"& .unit":{fontSize:12,fontWeight:"normal"},"& .status":{fontSize:12,color:h()(t,"mutedText","#87888d")},["@media (max-width: ".concat(l.nmC.md,"px)")]:{marginTop:8,paddingTop:8}},"& .namespaceLabel":{display:"inline-flex",color:h()(t,"signalColors.dark","#000"),backgroundColor:h()(t,"borderColor","#E2E2E2"),borderRadius:2,padding:"4px 8px",fontSize:10,marginRight:20},"& .redState":{color:h()(t,"signalColors.danger","#C51B3F"),"& .min-icon":{width:16,height:16,float:"left",marginRight:4}},"& .yellowState":{color:h()(t,"signalColors.warning","#FFBD62"),"& .min-icon":{width:16,height:16,float:"left",marginRight:4}},"& .greenState":{color:h()(t,"signalColors.good","#4CCB92"),"& .min-icon":{width:16,height:16,float:"left",marginRight:4}},"& .greyState":{color:h()(t,"signalColors.disabled","#E6EBEB"),"& .min-icon":{width:16,height:16,float:"left",marginRight:4}}}})),j=e=>{let{tenant:t}=e;const a=(0,r.jL)(),s=(0,i.Zp)();let u={value:"n/a",unit:""},x={value:"n/a",unit:""},h={value:"n/a",unit:""},g={value:"n/a",unit:""},j={value:"n/a",unit:""};if(t.capacity_raw){const e=(0,d.nO)("".concat(t.capacity_raw),!0).split(" ");u.value=e[0],u.unit=e[1]}if(t.capacity){const e=(0,d.nO)("".concat(t.capacity),!0).split(" ");x.value=e[0],x.unit=e[1]}if(t.capacity_usage){const e=(0,d.qO)(t.capacity_usage,!0).split(" ");h.value=e[0],h.unit=e[1]}let y=[];if(t.tiers&&0!==t.tiers.length){var C,b;y=null===(C=t.tiers)||void 0===C?void 0:C.map((e=>({value:e.size,variant:e.name})));let e=null===(b=t.tiers)||void 0===b?void 0:b.filter((e=>"internal"===e.type)).reduce(((e,t)=>e+t.size),0),a=t.tiers.filter((e=>"internal"!==e.type)).reduce(((e,t)=>e+t.size),0);const n=(0,d.qO)(a,!0).split(" ");j.value=n[0],j.unit=n[1];const l=(0,d.qO)(e,!0).split(" ");g.value=l[0],g.unit=l[1]}else y=[{value:t.capacity_usage||0,variant:"STANDARD"}];return(0,m.jsx)(n.Fragment,{children:(0,m.jsx)(v,{id:"list-tenant-".concat(t.name),onClick:()=>{a((0,o.s1)({name:t.name,namespace:t.namespace})),a((0,c.X)()),s("/namespaces/".concat(t.namespace,"/tenants/").concat(t.name,"/summary"))},children:(0,m.jsxs)(l.xA9,{container:!0,children:[(0,m.jsxs)(l.xA9,{item:!0,xs:12,className:"tenantTitle",children:[(0,m.jsx)(l.azJ,{children:(0,m.jsx)("h1",{children:t.name})}),(0,m.jsx)(l.azJ,{children:(0,m.jsxs)("span",{className:"namespaceLabel",children:["Namespace:\xa0",t.namespace]})})]}),(0,m.jsx)(l.xA9,{item:!0,xs:12,sx:{marginTop:2},children:(0,m.jsxs)(l.xA9,{container:!0,children:[(0,m.jsx)(l.xA9,{item:!0,xs:2,children:(0,m.jsx)(f.A,{totalCapacity:t.capacity||0,usedSpaceVariants:y,statusClass:(e=>{switch(e){case"red":return"redState";case"yellow":return"yellowState";case"green":return"greenState";default:return"greyState"}})(t.health_status)})}),(0,m.jsxs)(l.xA9,{item:!0,xs:7,children:[(0,m.jsxs)(l.xA9,{item:!0,xs:!0,sx:{display:"flex",justifyContent:"flex-start",alignItems:"center",marginTop:"10px"},children:[(0,m.jsx)(p,{label:"Raw Capacity",value:u.value,unit:u.unit}),(0,m.jsx)(p,{label:"Usable Capacity",value:x.value,unit:x.unit}),(0,m.jsx)(p,{label:"Pools",value:"".concat(t.pool_count)})]}),(0,m.jsx)(l.xA9,{item:!0,xs:12,sx:{paddingLeft:"20px",marginTop:"15px"},children:(0,m.jsxs)("span",{className:"status",children:[(0,m.jsx)("strong",{children:"State:"})," ",t.currentState]})})]}),(0,m.jsx)(l.xA9,{item:!0,xs:3,children:(0,m.jsx)(n.Fragment,{children:(0,m.jsxs)(l.xA9,{container:!0,sx:{gap:20},children:[(0,m.jsxs)(l.xA9,{item:!0,xs:2,sx:{display:"flex",flexDirection:"column",alignItems:"center"},children:[(0,m.jsx)(l.JUN,{className:"muted",style:{width:25}}),(0,m.jsx)(l.azJ,{className:"muted",sx:{fontSize:12,fontWeight:"400"},children:"Usage"})]}),(0,m.jsxs)(l.xA9,{item:!0,xs:9,sx:{paddingTop:8},children:[(!t.tiers||0===t.tiers.length)&&(0,m.jsxs)(l.azJ,{sx:{fontSize:14,fontWeight:400},children:[(0,m.jsx)("span",{className:"muted",children:"Internal: "})," ","".concat(h.value," ").concat(h.unit)]}),t.tiers&&t.tiers.length>0&&(0,m.jsxs)(n.Fragment,{children:[(0,m.jsxs)(l.azJ,{sx:{fontSize:14,fontWeight:400},children:[(0,m.jsx)("span",{className:"muted",children:"Internal: "})," ","".concat(g.value," ").concat(g.unit)]}),(0,m.jsxs)(l.azJ,{sx:{fontSize:14,fontWeight:400},children:[(0,m.jsx)("span",{className:"muted",children:"Tiered: "})," ","".concat(j.value," ").concat(j.unit)]})]})]})]})})})]})})]})})})};var y=a(2237),C=a(2438),b=a(3461),A=a(8064);let S={};const w=e=>{let{rowRenderFunction:t,totalItems:a,defaultHeight:l}=e;const s=e=>{let{index:a,style:n}=e;return(0,m.jsx)("div",{style:n,children:t(a)})};return(0,m.jsx)(n.Fragment,{children:(0,m.jsx)(b.A,{isItemLoaded:e=>!!S[e],loadMoreItems:(e,t)=>{for(let a=e;a<=t;a++)S[a]=1;for(let a=e;a<=t;a++)S[a]=2},itemCount:a,children:e=>{let{onItemsRendered:t,ref:n}=e;return(0,m.jsx)(A.t$,{children:e=>{let{width:i,height:r}=e;return(0,m.jsx)(C.Y1,{itemSize:l||220,height:r,itemCount:a,width:i,ref:n,onItemsRendered:t,children:s})}})}})})};var T=a(4681),z=a(6681),_=a(4770),F=a(7984);const N=(0,y.A)(n.lazy((()=>a.e(619).then(a.bind(a,8619))))),R=()=>{const e=(0,r.jL)(),t=(0,i.Zp)(),[a,o]=(0,n.useState)(!1),[c,d]=(0,n.useState)(""),[u,x]=(0,n.useState)([]),[h,g]=(0,n.useState)(!1),[p,f]=(0,n.useState)(null),[v,y]=(0,n.useState)("name"),C=u.filter((e=>""===c||e.name.indexOf(c)>=0));C.sort(((e,t)=>{switch(v){case"capacity":return e.capacity&&t.capacity?e.capacity>t.capacity?1:e.capacityt.capacity_usage?1:e.capacity_usaget.name?1:e.name{if(a){(()=>{F.F.tenants.listAllTenants().then((e=>{var t;if(!e.data)return void o(!1);let a=null!==(t=e.data.tenants)&&void 0!==t?t:[];x(a),o(!1)})).catch((t=>{e((0,s.C9)(t)),o(!1)}))})()}}),[a,e]),(0,n.useEffect)((()=>{o(!0)}),[]);return(0,m.jsxs)(n.Fragment,{children:[h&&(0,m.jsx)(N,{newServiceAccount:p,open:h,closeModal:()=>{g(!1),f(null)},entity:"Tenant"}),(0,m.jsx)(_.A,{label:"Tenants",middleComponent:(0,m.jsx)(T.A,{placeholder:"Filter Tenants",onChange:e=>{d(e)},value:c}),actions:(0,m.jsxs)(l.xA9,{item:!0,xs:12,sx:{display:"flex",justifyContent:"flex-end"},children:[(0,m.jsx)(z.A,{tooltip:"Refresh Tenant List",children:(0,m.jsx)(l.$nd,{id:"refresh-tenant-list",onClick:()=>{o(!0)},icon:(0,m.jsx)(l.fNY,{}),variant:"regular"})}),(0,m.jsx)(z.A,{tooltip:"Create Tenant",children:(0,m.jsx)(l.$nd,{id:"create-tenant",label:"Create Tenant",onClick:()=>{t("/tenants/add")},icon:(0,m.jsx)(l.REV,{}),variant:"callAction"})})]})}),(0,m.jsx)(l.Mxu,{variant:"constrained",children:(0,m.jsxs)(l.xA9,{item:!0,xs:12,style:{height:"calc(100vh - 195px)"},children:[a&&(0,m.jsx)(l.z21,{}),!a&&(0,m.jsxs)(n.Fragment,{children:[0!==C.length&&(0,m.jsxs)(n.Fragment,{children:[(0,m.jsx)(l.xA9,{item:!0,xs:12,style:{display:"flex",justifyContent:"flex-end",marginBottom:10},children:(0,m.jsx)("div",{style:{maxWidth:200,width:"95%",display:"flex",flexDirection:"row",alignItems:"center"},children:(0,m.jsx)(l.l6P,{id:"sort-by",label:"Sort by",value:v,onChange:e=>{y(e)},name:"sort-by",options:[{label:"Name",value:"name"},{label:"Capacity",value:"capacity"},{label:"Usage",value:"usage"},{label:"Active Status",value:"active_status"},{label:"Failing Status",value:"failing_status"}],noLabelMinWidth:!0})})}),(0,m.jsx)(w,{rowRenderFunction:e=>{const t=C[e]||null;return t?(0,m.jsx)(j,{tenant:t}):null},totalItems:C.length})]}),0===C.length&&(0,m.jsx)(l.xA9,{container:!0,sx:{display:"flex",justifyContent:"center",alignItems:"center"},children:(0,m.jsx)(l.xA9,{item:!0,xs:8,children:(0,m.jsx)(l.lVp,{iconComponent:(0,m.jsx)(l.fmr,{}),title:"Tenants",help:(0,m.jsxs)(n.Fragment,{children:["Tenant is the logical structure to represent a MinIO deployment. A tenant can have different size and configurations from other tenants, even a different storage class.",(0,m.jsx)("br",{}),(0,m.jsx)("br",{}),"To get started,\xa0",(0,m.jsx)(l.t53,{onClick:()=>{t("/tenants/add")},children:"Create a Tenant."})]})})})})]})]})})]})}},6129:(e,t,a)=>{a.d(t,{A:()=>h});a(5043);var n=a(9923),l=a(7829),s=a(3439),i=a(7869),r=a(6483),o=a(579);const c=e=>{let{totalValue:t,sizeItems:a,bgColor:n="#ededed"}=e;return(0,o.jsx)("div",{style:{width:"100%",height:12,backgroundColor:n,borderRadius:30,display:"flex",transitionDuration:"0.3s",overflow:"hidden"},children:a.map(((e,a)=>{const n=100*e.value/t;return(0,o.jsx)("div",{style:{width:"".concat(n,"%"),height:"100%",backgroundColor:e.color,transitionDuration:"0.3s"}},"itemSize-".concat(a.toString()))}))})};var d=a(4574),u=a(3097),x=a.n(u);const h=e=>{let{totalCapacity:t,usedSpaceVariants:a,statusClass:u,render:h="pie"}=e;const m=["#8dacd3","#bca1ea","#92e8d2","#efc9ac","#97f274","#f7d291","#71ACCB","#f28282","#e28cc1","#2781B0"],g=(0,d.DP)(),p="".concat(x()(g,"borderColor","#ededed"),"70"),f=a.reduce(((e,t)=>e+t.value),0),v=t-f;let j=[];const y=a.find((e=>"STANDARD"===e.variant))||{value:0,variant:"empty"};if(a.length>10){j=[{value:f-y.value,color:"#2781B0",label:"Total Tiers Space"}]}else j=a.filter((e=>"STANDARD"!==e.variant)).map(((e,t)=>({value:e.value,color:m[t],label:"Tier - ".concat(e.variant)})));let C=x()(g,"signalColors.main","#07193E");const b=100*y.value/t;b>=90?C=x()(g,"signalColors.danger","#C83B51"):b>=75&&(C=x()(g,"signalColors.warning","#FFAB0F"));const A=[{value:y.value,color:C,label:"Used Space by Tenant"},...j,{value:v,color:"bar"===h?p:"transparent",label:"Empty Space"}];if("bar"===h){const e=A.map((e=>({value:e.value,color:e.color,itemName:e.label})));return(0,o.jsx)("div",{style:{width:"100%",marginBottom:15},children:(0,o.jsx)(c,{totalValue:t,sizeItems:e,bgColor:p})})}return(0,o.jsxs)("div",{style:{position:"relative",width:110,height:110},children:[(0,o.jsx)("div",{style:{position:"absolute",right:-5,top:15,zIndex:400},className:u,children:(0,o.jsx)(n.GQ2,{style:{border:"#fff 2px solid",borderRadius:"100%",width:20,height:20}})}),(0,o.jsx)("span",{style:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",fontWeight:"bold",fontSize:11},children:isNaN(f)?"N/A":(0,r.qO)(f)}),(0,o.jsx)("div",{children:(0,o.jsxs)(l.r,{width:110,height:110,children:[(0,o.jsx)(s.F,{data:[{value:100}],cx:"50%",cy:"50%",dataKey:"value",outerRadius:50,innerRadius:40,fill:p,isAnimationActive:!1,stroke:"none"}),(0,o.jsx)(s.F,{data:A,cx:"50%",cy:"50%",dataKey:"value",outerRadius:50,innerRadius:40,children:A.map(((e,t)=>(0,o.jsx)(i.f,{fill:e.color,stroke:"none"},"cellCapacity-".concat(t))))})]})})]})}}}]); -//# sourceMappingURL=890.17acf929.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/890.17acf929.chunk.js.map b/web-app/build/static/js/890.17acf929.chunk.js.map deleted file mode 100644 index cda2c4fabeb..00000000000 --- a/web-app/build/static/js/890.17acf929.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/890.17acf929.chunk.js","mappings":"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","sources":["screens/Console/Common/Components/withSuspense.tsx","screens/Console/Common/SearchBox.tsx","screens/Console/Tenants/ListTenants/InformationItem.tsx","screens/Console/Tenants/ListTenants/TenantListItem.tsx","screens/Console/Common/VirtualizedList/VirtualizedList.tsx","screens/Console/Tenants/ListTenants/ListTenants.tsx","screens/Console/Common/UsageBar/UsageBar.tsx","screens/Console/Tenants/ListTenants/TenantCapacity.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { ComponentType, Suspense, SuspenseProps } from \"react\";\n\nfunction withSuspense

(\n WrappedComponent: ComponentType

,\n fallback: SuspenseProps[\"fallback\"] = null,\n) {\n function ComponentWithSuspense(props: P) {\n return (\n \n \n \n );\n }\n\n return ComponentWithSuspense;\n}\n\nexport default withSuspense;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { InputBox, SearchIcon } from \"mds\";\nimport { CSSObject } from \"styled-components\";\n\ntype SearchBoxProps = {\n placeholder?: string;\n value: string;\n onChange: (value: string) => void;\n overrideClass?: any;\n id?: string;\n label?: string;\n sx?: CSSObject;\n};\n\nconst SearchBox = ({\n placeholder = \"\",\n onChange,\n overrideClass,\n value,\n id = \"search-resource\",\n label = \"\",\n sx,\n}: SearchBoxProps) => {\n return (\n {\n onChange(e.target.value);\n }}\n value={value}\n startIcon={}\n sx={sx}\n />\n );\n};\n\nexport default SearchBox;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport { Box } from \"mds\";\nimport styled from \"styled-components\";\nimport get from \"lodash/get\";\n\nconst InformationItemMain = styled.div(({ theme }) => ({\n margin: \"0px 20px\",\n \"& .value\": {\n fontSize: 18,\n color: get(theme, \"mutedText\", \"#87888d\"),\n fontWeight: 400,\n \"&.normal\": {\n color: get(theme, \"fontColor\", \"#000\"),\n },\n },\n \"& .unit\": {\n fontSize: 12,\n color: get(theme, \"secondaryText\", \"#5B5C5C\"),\n fontWeight: \"bold\",\n },\n \"& .label\": {\n textAlign: \"center\",\n color: get(theme, \"mutedText\", \"#87888d\"),\n fontSize: 12,\n whiteSpace: \"nowrap\",\n \"&.normal\": {\n color: get(theme, \"secondaryText\", \"#5B5C5C\"),\n },\n },\n}));\n\ninterface IInformationItemProps {\n label: string;\n value: string;\n unit?: string;\n variant?: \"normal\" | \"faded\";\n}\n\nconst InformationItem = ({\n label,\n value,\n unit,\n variant = \"normal\",\n}: IInformationItemProps) => {\n return (\n \n \n {value}\n {unit && (\n \n {\" \"}\n {unit}\n \n )}\n \n {label}\n \n );\n};\n\nexport default InformationItem;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport { breakPoints, DrivesIcon, Grid, Box } from \"mds\";\nimport { useNavigate } from \"react-router-dom\";\nimport { CapacityValues, ValueUnit } from \"./types\";\nimport { setTenantName } from \"../tenantsSlice\";\nimport { getTenantAsync } from \"../thunks/tenantDetailsAsync\";\nimport { niceBytes, niceBytesInt } from \"../../../../common/utils\";\nimport InformationItem from \"./InformationItem\";\nimport TenantCapacity from \"./TenantCapacity\";\nimport { useAppDispatch } from \"../../../../store\";\nimport { TenantList } from \"../../../../api/operatorApi\";\nimport styled from \"styled-components\";\nimport get from \"lodash/get\";\n\nconst TenantListItemMain = styled.div(({ theme }) => ({\n border: `${get(theme, \"borderColor\", \"#eaeaea\")} 1px solid`,\n borderRadius: 3,\n padding: 15,\n cursor: \"pointer\",\n \"&.disabled\": {\n backgroundColor: get(theme, \"signalColors.danger\", \"red\"),\n },\n \"&:hover\": {\n backgroundColor: get(theme, \"boxBackground\", \"#FBFAFA\"),\n },\n \"& .tenantTitle\": {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 10,\n \"& h1\": {\n padding: 0,\n margin: 0,\n marginBottom: 5,\n fontSize: 22,\n color: get(theme, \"screenTitle.iconColor\", \"#07193E\"),\n [`@media (max-width: ${breakPoints.md}px)`]: {\n marginBottom: 0,\n },\n },\n },\n \"& .tenantDetails\": {\n display: \"flex\",\n gap: 40,\n \"& span\": {\n fontSize: 14,\n },\n [`@media (max-width: ${breakPoints.md}px)`]: {\n flexFlow: \"column-reverse\",\n gap: 5,\n },\n },\n \"& .tenantMetrics\": {\n display: \"flex\",\n alignItems: \"center\",\n marginTop: 20,\n gap: 25,\n borderTop: `${get(theme, \"borderColor\", \"#E2E2E2\")} 1px solid`,\n paddingTop: 20,\n \"& svg.tenantIcon\": {\n color: get(theme, \"screenTitle.iconColor\", \"#07193E\"),\n fill: get(theme, \"screenTitle.iconColor\", \"#07193E\"),\n },\n \"& .metric\": {\n \"& .min-icon\": {\n color: get(theme, \"fontColor\", \"#000\"),\n width: 13,\n marginRight: 5,\n },\n },\n \"& .metricLabel\": {\n fontSize: 14,\n fontWeight: \"bold\",\n color: get(theme, \"fontColor\", \"#000\"),\n },\n \"& .metricText\": {\n fontSize: 24,\n fontWeight: \"bold\",\n },\n \"& .unit\": {\n fontSize: 12,\n fontWeight: \"normal\",\n },\n \"& .status\": {\n fontSize: 12,\n color: get(theme, \"mutedText\", \"#87888d\"),\n },\n [`@media (max-width: ${breakPoints.md}px)`]: {\n marginTop: 8,\n paddingTop: 8,\n },\n },\n \"& .namespaceLabel\": {\n display: \"inline-flex\",\n color: get(theme, \"signalColors.dark\", \"#000\"),\n backgroundColor: get(theme, \"borderColor\", \"#E2E2E2\"),\n borderRadius: 2,\n padding: \"4px 8px\",\n fontSize: 10,\n marginRight: 20,\n },\n \"& .redState\": {\n color: get(theme, \"signalColors.danger\", \"#C51B3F\"),\n \"& .min-icon\": {\n width: 16,\n height: 16,\n float: \"left\",\n marginRight: 4,\n },\n },\n \"& .yellowState\": {\n color: get(theme, \"signalColors.warning\", \"#FFBD62\"),\n \"& .min-icon\": {\n width: 16,\n height: 16,\n float: \"left\",\n marginRight: 4,\n },\n },\n \"& .greenState\": {\n color: get(theme, \"signalColors.good\", \"#4CCB92\"),\n \"& .min-icon\": {\n width: 16,\n height: 16,\n float: \"left\",\n marginRight: 4,\n },\n },\n \"& .greyState\": {\n color: get(theme, \"signalColors.disabled\", \"#E6EBEB\"),\n \"& .min-icon\": {\n width: 16,\n height: 16,\n float: \"left\",\n marginRight: 4,\n },\n },\n}));\n\nconst TenantListItem = ({ tenant }: { tenant: TenantList }) => {\n const dispatch = useAppDispatch();\n const navigate = useNavigate();\n\n const healthStatusToClass = (health_status: string) => {\n switch (health_status) {\n case \"red\":\n return \"redState\";\n case \"yellow\":\n return \"yellowState\";\n case \"green\":\n return \"greenState\";\n default:\n return \"greyState\";\n }\n };\n\n let raw: ValueUnit = { value: \"n/a\", unit: \"\" };\n let capacity: ValueUnit = { value: \"n/a\", unit: \"\" };\n let used: ValueUnit = { value: \"n/a\", unit: \"\" };\n let localUse: ValueUnit = { value: \"n/a\", unit: \"\" };\n let tieredUse: ValueUnit = { value: \"n/a\", unit: \"\" };\n\n if (tenant.capacity_raw) {\n const b = niceBytes(`${tenant.capacity_raw}`, true);\n const parts = b.split(\" \");\n raw.value = parts[0];\n raw.unit = parts[1];\n }\n if (tenant.capacity) {\n const b = niceBytes(`${tenant.capacity}`, true);\n const parts = b.split(\" \");\n capacity.value = parts[0];\n capacity.unit = parts[1];\n }\n if (tenant.capacity_usage) {\n const b = niceBytesInt(tenant.capacity_usage, true);\n const parts = b.split(\" \");\n used.value = parts[0];\n used.unit = parts[1];\n }\n\n let spaceVariants: CapacityValues[] = [];\n if (!tenant.tiers || tenant.tiers.length === 0) {\n spaceVariants = [\n { value: tenant.capacity_usage || 0, variant: \"STANDARD\" },\n ];\n } else {\n spaceVariants = tenant.tiers?.map((itemTenant) => {\n return { value: itemTenant.size!, variant: itemTenant.name! };\n });\n let internalUsage = tenant.tiers\n ?.filter((itemTenant) => {\n return itemTenant.type === \"internal\";\n })\n .reduce((sum, itemTenant) => sum + itemTenant.size!, 0);\n let tieredUsage = tenant.tiers\n .filter((itemTenant) => {\n return itemTenant.type !== \"internal\";\n })\n .reduce((sum, itemTenant) => sum + itemTenant.size!, 0);\n\n const t = niceBytesInt(tieredUsage, true);\n const parts = t.split(\" \");\n tieredUse.value = parts[0];\n tieredUse.unit = parts[1];\n\n const is = niceBytesInt(internalUsage, true);\n const partsInternal = is.split(\" \");\n localUse.value = partsInternal[0];\n localUse.unit = partsInternal[1];\n }\n\n const openTenantDetails = () => {\n dispatch(\n setTenantName({\n name: tenant.name!,\n namespace: tenant.namespace!,\n }),\n );\n dispatch(getTenantAsync());\n navigate(`/namespaces/${tenant.namespace}/tenants/${tenant.name}/summary`);\n };\n\n return (\n \n \n \n \n \n

{tenant.name}

\n \n \n \n Namespace: {tenant.namespace}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n State: {tenant.currentState}\n \n \n \n \n \n \n \n \n \n Usage\n \n \n \n {(!tenant.tiers || tenant.tiers.length === 0) && (\n \n Internal: {\" \"}\n {`${used.value} ${used.unit}`}\n \n )}\n\n {tenant.tiers && tenant.tiers.length > 0 && (\n \n \n Internal: {\" \"}\n {`${localUse.value} ${localUse.unit}`}\n \n \n Tiered: {\" \"}\n {`${tieredUse.value} ${tieredUse.unit}`}\n \n \n )}\n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default TenantListItem;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, ReactElement } from \"react\";\nimport { FixedSizeList as List } from \"react-window\";\nimport InfiniteLoader from \"react-window-infinite-loader\";\nimport { AutoSizer } from \"react-virtualized\";\n\ninterface IVirtualizedList {\n rowRenderFunction: (index: number) => ReactElement | null;\n totalItems: number;\n defaultHeight?: number;\n}\n\nlet itemStatusMap: any = {};\nconst LOADING = 1;\nconst LOADED = 2;\n\nconst VirtualizedList = ({\n rowRenderFunction,\n totalItems,\n defaultHeight,\n}: IVirtualizedList) => {\n const isItemLoaded = (index: any) => !!itemStatusMap[index];\n\n const loadMoreItems = (startIndex: number, stopIndex: number) => {\n for (let index = startIndex; index <= stopIndex; index++) {\n itemStatusMap[index] = LOADING;\n }\n\n for (let index = startIndex; index <= stopIndex; index++) {\n itemStatusMap[index] = LOADED;\n }\n };\n\n const RenderItemLine = ({ index, style }: any) => {\n return
{rowRenderFunction(index)}
;\n };\n\n return (\n \n \n {({ onItemsRendered, ref }) => (\n // @ts-ignore\n \n {({ width, height }) => {\n return (\n \n {RenderItemLine}\n \n );\n }}\n \n )}\n \n \n );\n};\n\nexport default VirtualizedList;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport {\n ActionLink,\n AddIcon,\n Button,\n HelpBox,\n RefreshIcon,\n TenantsIcon,\n PageLayout,\n Grid,\n ProgressBar,\n Select,\n} from \"mds\";\nimport { NewServiceAccount } from \"../../Common/CredentialsPrompt/types\";\nimport { setErrorSnackMessage } from \"../../../../systemSlice\";\nimport { useNavigate } from \"react-router-dom\";\nimport { useAppDispatch } from \"../../../../store\";\nimport TenantListItem from \"./TenantListItem\";\nimport withSuspense from \"../../Common/Components/withSuspense\";\nimport VirtualizedList from \"../../Common/VirtualizedList/VirtualizedList\";\nimport SearchBox from \"../../Common/SearchBox\";\nimport TooltipWrapper from \"../../Common/TooltipWrapper/TooltipWrapper\";\nimport PageHeaderWrapper from \"../../Common/PageHeaderWrapper/PageHeaderWrapper\";\nimport { api } from \"../../../../api\";\nimport {\n Error,\n HttpResponse,\n ListTenantsResponse,\n TenantList,\n} from \"../../../../api/operatorApi\";\n\nconst CredentialsPrompt = withSuspense(\n React.lazy(() => import(\"../../Common/CredentialsPrompt/CredentialsPrompt\")),\n);\n\nconst ListTenants = () => {\n const dispatch = useAppDispatch();\n const navigate = useNavigate();\n\n const [isLoading, setIsLoading] = useState(false);\n const [filterTenants, setFilterTenants] = useState(\"\");\n const [records, setRecords] = useState([]);\n const [showNewCredentials, setShowNewCredentials] = useState(false);\n const [createdAccount, setCreatedAccount] =\n useState(null);\n const [sortValue, setSortValue] = useState(\"name\");\n\n const closeCredentialsModal = () => {\n setShowNewCredentials(false);\n setCreatedAccount(null);\n };\n\n const filteredRecords = records.filter((b: any) => {\n if (filterTenants === \"\") {\n return true;\n } else {\n if (b.name.indexOf(filterTenants) >= 0) {\n return true;\n } else {\n return false;\n }\n }\n });\n\n filteredRecords.sort((a, b) => {\n switch (sortValue) {\n case \"capacity\":\n if (!a.capacity || !b.capacity) {\n return 0;\n }\n\n if (a.capacity > b.capacity) {\n return 1;\n }\n\n if (a.capacity < b.capacity) {\n return -1;\n }\n\n return 0;\n case \"usage\":\n if (!a.capacity_usage || !b.capacity_usage) {\n return 0;\n }\n\n if (a.capacity_usage > b.capacity_usage) {\n return 1;\n }\n\n if (a.capacity_usage < b.capacity_usage) {\n return -1;\n }\n\n return 0;\n case \"active_status\":\n if (a.health_status === \"red\" && b.health_status !== \"red\") {\n return 1;\n }\n\n if (a.health_status !== \"red\" && b.health_status === \"red\") {\n return -1;\n }\n\n return 0;\n case \"failing_status\":\n if (a.health_status === \"green\" && b.health_status !== \"green\") {\n return 1;\n }\n\n if (a.health_status !== \"green\" && b.health_status === \"green\") {\n return -1;\n }\n\n return 0;\n default:\n if (a.name! > b.name!) {\n return 1;\n }\n if (a.name! < b.name!) {\n return -1;\n }\n return 0;\n }\n });\n\n useEffect(() => {\n if (isLoading) {\n const fetchRecords = () => {\n api.tenants\n .listAllTenants()\n .then((res: HttpResponse) => {\n if (!res.data) {\n setIsLoading(false);\n return;\n }\n let resTenants: TenantList[] =\n (res.data.tenants as TenantList[]) ?? [];\n\n setRecords(resTenants);\n setIsLoading(false);\n })\n .catch((err) => {\n dispatch(setErrorSnackMessage(err));\n setIsLoading(false);\n });\n };\n fetchRecords();\n }\n }, [isLoading, dispatch]);\n\n useEffect(() => {\n setIsLoading(true);\n }, []);\n\n const renderItemLine = (index: number) => {\n const tenant = filteredRecords[index] || null;\n\n if (tenant) {\n return ;\n }\n\n return null;\n };\n\n return (\n \n {showNewCredentials && (\n {\n closeCredentialsModal();\n }}\n entity=\"Tenant\"\n />\n )}\n {\n setFilterTenants(val);\n }}\n value={filterTenants}\n />\n }\n actions={\n \n \n {\n setIsLoading(true);\n }}\n icon={}\n variant={\"regular\"}\n />\n \n \n {\n navigate(\"/tenants/add\");\n }}\n icon={}\n variant={\"callAction\"}\n />\n \n \n }\n />\n \n \n {isLoading && }\n {!isLoading && (\n \n {filteredRecords.length !== 0 && (\n \n \n \n {\n setSortValue(value as string);\n }}\n name={\"sort-by\"}\n options={[\n { label: \"Name\", value: \"name\" },\n {\n label: \"Capacity\",\n value: \"capacity\",\n },\n {\n label: \"Usage\",\n value: \"usage\",\n },\n {\n label: \"Active Status\",\n value: \"active_status\",\n },\n {\n label: \"Failing Status\",\n value: \"failing_status\",\n },\n ]}\n noLabelMinWidth\n />\n
\n \n \n \n )}\n {filteredRecords.length === 0 && (\n \n \n }\n title={\"Tenants\"}\n help={\n \n Tenant is the logical structure to represent a MinIO\n deployment. A tenant can have different size and\n configurations from other tenants, even a different\n storage class.\n
\n
\n To get started, \n {\n navigate(\"/tenants/add\");\n }}\n >\n Create a Tenant.\n \n
\n }\n />\n
\n \n )}\n \n )}\n \n \n \n );\n};\n\nexport default ListTenants;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\n\nexport interface ISizeBarItem {\n value: number;\n itemName: string;\n color: string;\n}\n\nexport interface IUsageBar {\n totalValue: number;\n sizeItems: ISizeBarItem[];\n bgColor?: string;\n}\n\nconst UsageBar = ({\n totalValue,\n sizeItems,\n bgColor = \"#ededed\",\n}: IUsageBar) => {\n return (\n \n {sizeItems.map((sizeElement, index) => {\n const itemPercentage = (sizeElement.value * 100) / totalValue;\n return (\n \n );\n })}\n
\n );\n};\n\nexport default UsageBar;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { CircleIcon } from \"mds\";\nimport { Cell, Pie, PieChart } from \"recharts\";\nimport { CapacityValue, CapacityValues } from \"./types\";\nimport { niceBytesInt } from \"../../../../common/utils\";\nimport UsageBar, { ISizeBarItem } from \"../../Common/UsageBar/UsageBar\";\nimport { useTheme } from \"styled-components\";\nimport get from \"lodash/get\";\n\ninterface ITenantCapacity {\n totalCapacity: number;\n usedSpaceVariants: CapacityValues[];\n statusClass: string;\n render?: \"pie\" | \"bar\";\n}\n\nconst TenantCapacity = ({\n totalCapacity,\n usedSpaceVariants,\n statusClass,\n render = \"pie\",\n}: ITenantCapacity) => {\n const colors = [\n \"#8dacd3\",\n \"#bca1ea\",\n \"#92e8d2\",\n \"#efc9ac\",\n \"#97f274\",\n \"#f7d291\",\n \"#71ACCB\",\n \"#f28282\",\n \"#e28cc1\",\n \"#2781B0\",\n ];\n\n const theme = useTheme();\n\n const BGColor = `${get(theme, \"borderColor\", \"#ededed\")}70`;\n\n const totalUsedSpace = usedSpaceVariants.reduce((acc, currValue) => {\n return acc + currValue.value;\n }, 0);\n\n const emptySpace = totalCapacity - totalUsedSpace;\n\n let tiersList: CapacityValue[] = [];\n\n const standardTier = usedSpaceVariants.find(\n (tier) => tier.variant === \"STANDARD\",\n ) || {\n value: 0,\n variant: \"empty\",\n };\n\n if (usedSpaceVariants.length > 10) {\n const totalUsedByTiers = totalUsedSpace - standardTier.value;\n\n tiersList = [\n { value: totalUsedByTiers, color: \"#2781B0\", label: \"Total Tiers Space\" },\n ];\n } else {\n tiersList = usedSpaceVariants\n .filter((variant) => variant.variant !== \"STANDARD\")\n .map((variant, index) => {\n return {\n value: variant.value,\n color: colors[index],\n label: `Tier - ${variant.variant}`,\n };\n });\n }\n\n let standardTierColor = get(theme, \"signalColors.main\", \"#07193E\");\n\n const usedPercentage = (standardTier.value * 100) / totalCapacity;\n\n if (usedPercentage >= 90) {\n standardTierColor = get(theme, \"signalColors.danger\", \"#C83B51\");\n } else if (usedPercentage >= 75) {\n standardTierColor = get(theme, \"signalColors.warning\", \"#FFAB0F\");\n }\n\n const plotValues: CapacityValue[] = [\n {\n value: standardTier.value,\n color: standardTierColor,\n label: \"Used Space by Tenant\",\n },\n ...tiersList,\n {\n value: emptySpace,\n color: render === \"bar\" ? BGColor : \"transparent\",\n label: \"Empty Space\",\n },\n ];\n\n if (render === \"bar\") {\n const plotValuesForUsageBar: ISizeBarItem[] = plotValues.map((plotVal) => {\n return {\n value: plotVal.value,\n color: plotVal.color,\n itemName: plotVal.label,\n };\n });\n\n return (\n
\n \n
\n );\n }\n\n return (\n
\n \n \n
\n \n {!isNaN(totalUsedSpace) ? niceBytesInt(totalUsedSpace) : \"N/A\"}\n \n
\n \n \n \n {plotValues.map((entry, index) => (\n \n ))}\n \n \n
\n \n );\n};\n\nexport default TenantCapacity;\n"],"names":["WrappedComponent","fallback","arguments","length","undefined","props","_jsx","Suspense","children","_ref","placeholder","onChange","overrideClass","value","id","label","sx","InputBox","className","e","target","startIcon","SearchIcon","InformationItemMain","styled","div","theme","margin","fontSize","color","get","fontWeight","textAlign","whiteSpace","_ref2","unit","variant","_jsxs","Box","style","concat","Fragment","TenantListItemMain","border","borderRadius","padding","cursor","backgroundColor","display","alignItems","justifyContent","gap","marginBottom","breakPoints","md","flexFlow","marginTop","borderTop","paddingTop","fill","width","marginRight","height","float","tenant","dispatch","useAppDispatch","navigate","useNavigate","raw","capacity","used","localUse","tieredUse","capacity_raw","parts","niceBytes","split","capacity_usage","niceBytesInt","spaceVariants","tiers","_tenant$tiers","_tenant$tiers2","map","itemTenant","size","name","internalUsage","filter","type","reduce","sum","tieredUsage","partsInternal","onClick","openTenantDetails","setTenantName","namespace","getTenantAsync","Grid","container","item","xs","TenantCapacity","totalCapacity","usedSpaceVariants","statusClass","health_status","healthStatusToClass","InformationItem","pool_count","paddingLeft","currentState","flexDirection","DrivesIcon","itemStatusMap","rowRenderFunction","totalItems","defaultHeight","RenderItemLine","index","InfiniteLoader","isItemLoaded","loadMoreItems","startIndex","stopIndex","itemCount","_ref3","onItemsRendered","ref","AutoSizer","_ref4","List","itemSize","CredentialsPrompt","withSuspense","React","ListTenants","isLoading","setIsLoading","useState","filterTenants","setFilterTenants","records","setRecords","showNewCredentials","setShowNewCredentials","createdAccount","setCreatedAccount","sortValue","setSortValue","filteredRecords","b","indexOf","sort","a","useEffect","fetchRecords","api","tenants","listAllTenants","then","res","data","resTenants","catch","err","setErrorSnackMessage","newServiceAccount","open","closeModal","entity","PageHeaderWrapper","middleComponent","SearchBox","val","actions","TooltipWrapper","tooltip","Button","icon","RefreshIcon","AddIcon","PageLayout","ProgressBar","maxWidth","Select","options","noLabelMinWidth","VirtualizedList","TenantListItem","HelpBox","iconComponent","TenantsIcon","title","help","ActionLink","totalValue","sizeItems","bgColor","transitionDuration","overflow","sizeElement","itemPercentage","toString","render","colors","useTheme","BGColor","totalUsedSpace","acc","currValue","emptySpace","tiersList","standardTier","find","tier","standardTierColor","usedPercentage","plotValues","plotValuesForUsageBar","plotVal","itemName","UsageBar","position","right","top","zIndex","CircleIcon","left","transform","isNaN","PieChart","Pie","cx","cy","dataKey","outerRadius","innerRadius","isAnimationActive","stroke","entry","Cell"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/941.a504f48a.chunk.js b/web-app/build/static/js/941.a504f48a.chunk.js deleted file mode 100644 index 50cace42e92..00000000000 --- a/web-app/build/static/js/941.a504f48a.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[941],{5448:(e,r,o)=>{o.d(r,{A:()=>n});var a=o(5043),t=o(649);const n=(e,r)=>{const[o,n]=(0,a.useState)(!1);return[o,(o,a,p,u)=>{n(!0),t.A.invoke(o,a,p,u).then((r=>{n(!1),e(r)})).catch((e=>{n(!1),r(e)}))}]}},7941:(e,r,o)=>{o.r(r),o.d(r,{default:()=>v});var a=o(5043),t=o(9923),n=o(4159),p=o(2961);const u=["europe/amsterdam","europe/andorra","europe/astrakhan","europe/athens","europe/belgrade","europe/berlin","europe/bratislava","europe/brussels","europe/bucharest","europe/budapest","europe/busingen","europe/chisinau","europe/copenhagen","europe/dublin","europe/gibraltar","europe/guernsey","europe/helsinki","europe/isle_of_man","europe/istanbul","europe/jersey","europe/kaliningrad","europe/kiev","europe/kirov","europe/lisbon","europe/ljubljana","europe/london","europe/luxembourg","europe/madrid","europe/malta","europe/mariehamn","europe/minsk","europe/monaco","europe/moscow","europe/oslo","europe/paris","europe/podgorica","europe/prague","europe/riga","europe/rome","europe/samara","europe/san_marino","europe/sarajevo","europe/saratov","europe/simferopol","europe/skopje","europe/sofia","europe/stockholm","europe/tallinn","europe/tirane","europe/ulyanovsk","europe/uzhgorod","europe/vaduz","europe/vatican","europe/vienna","europe/vilnius","europe/volgograd","europe/warsaw","europe/zagreb","europe/zaporozhye","europe/zurich"];var s=o(8661),i=o(5448),l=o(579);const c=/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,m=e=>{let{open:r,closeModal:o}=e;const m=(0,p.jL)(),[d,h]=(0,i.A)((e=>{let r="Email ".concat(g," has been saved");m((0,n.Hk)(r)),o()}),(e=>{m((0,n.C9)(e)),o()})),[g,b]=(0,a.useState)(""),[j,v]=(0,a.useState)(!1),k=()=>{const e=Intl.DateTimeFormat().resolvedOptions().timeZone;return u.includes(e.toLocaleLowerCase())};return r?(0,l.jsx)(s.A,{title:"Register Email",confirmText:"Register",isOpen:r,titleIcon:(0,l.jsx)(t.mo0,{}),isLoading:d,cancelText:"Later",onConfirm:()=>{const e=k();h("POST","/api/v1/mp-integration",{email:g,isInEU:e})},onClose:o,confirmButtonProps:{color:"info",disabled:!j||d},confirmationContent:(0,l.jsxs)(a.Fragment,{children:[(0,l.jsxs)("p",{children:["Your Marketplace subscription includes support access from the",(0,l.jsx)("a",{href:"https://min.io/product/subnet",target:"_blank",rel:"noopener",children:"MinIO Subscription Network (SUBNET)"}),".",(0,l.jsx)("br",{}),"Enter your email to register now."]}),(0,l.jsxs)("p",{children:["To register later, contact"," ",(0,l.jsx)("a",{href:"mailto: support@min.io",children:"support@min.io"}),"."]}),(0,l.jsx)(t.cl_,{id:"set-mp-email",name:"set-mp-email",onChange:e=>{let r=e.target.value;v(c.test(r)),b(r)},label:"",placeholder:"Enter email",type:"email",value:g})]})}):null};var d=o(6537),h=o(9456),g=o(3216),b=o(3029),j=o(4770);const v=()=>{const e=(0,p.jL)(),r=(0,g.Zp)(),o=(0,h.d4)(d.s$),u=(0,h.d4)(n.dW),[s,i]=(0,a.useState)(!0);(0,a.useEffect)((()=>{let e=!1;o&&0!==o.length&&o.forEach((r=>{r in b.h2&&(e=!0)})),i(e)}),[o,u]);const c=()=>{let e="/";return localStorage.getItem("redirect-path")&&""!==localStorage.getItem("redirect-path")&&(e="".concat(localStorage.getItem("redirect-path")),localStorage.setItem("redirect-path","")),e},v=()=>{e((0,n.lp)(!1)),r(c())};return u&&s?o?(0,l.jsxs)(a.Fragment,{children:[(0,l.jsx)(j.A,{label:"Operator Marketplace"}),(0,l.jsx)(t.Mxu,{children:(0,l.jsx)(m,{open:!0,closeModal:v})})]}):null:(0,l.jsx)(g.C5,{to:{pathname:c()}})}}}]); -//# sourceMappingURL=941.a504f48a.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/941.a504f48a.chunk.js.map b/web-app/build/static/js/941.a504f48a.chunk.js.map deleted file mode 100644 index 6e4fbf5eeb7..00000000000 --- a/web-app/build/static/js/941.a504f48a.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/941.a504f48a.chunk.js","mappings":"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","sources":["screens/Console/Common/Hooks/useApi.tsx","screens/Console/Marketplace/euTimezones.ts","screens/Console/Marketplace/SetEmailModal.tsx","screens/Console/Marketplace/Marketplace.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport api from \"../../../../common/api\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\n\ntype NoReturnFunction = (param?: any) => void;\ntype ApiMethodToInvoke = (method: string, url: string, data?: any) => void;\ntype IsApiInProgress = boolean;\n\nconst useApi = (\n onSuccess: NoReturnFunction,\n onError: NoReturnFunction,\n): [IsApiInProgress, ApiMethodToInvoke] => {\n const [isLoading, setIsLoading] = useState(false);\n\n const callApi = (method: string, url: string, data?: any, headers?: any) => {\n setIsLoading(true);\n api\n .invoke(method, url, data, headers)\n .then((res: any) => {\n setIsLoading(false);\n onSuccess(res);\n })\n .catch((err: ErrorResponseHandler) => {\n setIsLoading(false);\n onError(err);\n });\n };\n\n return [isLoading, callApi];\n};\n\nexport default useApi;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nexport const euTimezones = [\n \"europe/amsterdam\",\n \"europe/andorra\",\n \"europe/astrakhan\",\n \"europe/athens\",\n \"europe/belgrade\",\n \"europe/berlin\",\n \"europe/bratislava\",\n \"europe/brussels\",\n \"europe/bucharest\",\n \"europe/budapest\",\n \"europe/busingen\",\n \"europe/chisinau\",\n \"europe/copenhagen\",\n \"europe/dublin\",\n \"europe/gibraltar\",\n \"europe/guernsey\",\n \"europe/helsinki\",\n \"europe/isle_of_man\",\n \"europe/istanbul\",\n \"europe/jersey\",\n \"europe/kaliningrad\",\n \"europe/kiev\",\n \"europe/kirov\",\n \"europe/lisbon\",\n \"europe/ljubljana\",\n \"europe/london\",\n \"europe/luxembourg\",\n \"europe/madrid\",\n \"europe/malta\",\n \"europe/mariehamn\",\n \"europe/minsk\",\n \"europe/monaco\",\n \"europe/moscow\",\n \"europe/oslo\",\n \"europe/paris\",\n \"europe/podgorica\",\n \"europe/prague\",\n \"europe/riga\",\n \"europe/rome\",\n \"europe/samara\",\n \"europe/san_marino\",\n \"europe/sarajevo\",\n \"europe/saratov\",\n \"europe/simferopol\",\n \"europe/skopje\",\n \"europe/sofia\",\n \"europe/stockholm\",\n \"europe/tallinn\",\n \"europe/tirane\",\n \"europe/ulyanovsk\",\n \"europe/uzhgorod\",\n \"europe/vaduz\",\n \"europe/vatican\",\n \"europe/vienna\",\n \"europe/vilnius\",\n \"europe/volgograd\",\n \"europe/warsaw\",\n \"europe/zagreb\",\n \"europe/zaporozhye\",\n \"europe/zurich\",\n];\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useState } from \"react\";\nimport { InfoIcon, InputBox } from \"mds\";\nimport { ISetEmailModalProps } from \"./types\";\nimport { ErrorResponseHandler } from \"../../../common/types\";\nimport { setErrorSnackMessage, setSnackBarMessage } from \"../../../systemSlice\";\nimport { useAppDispatch } from \"../../../store\";\nimport { euTimezones } from \"./euTimezones\";\nimport ConfirmDialog from \"../Common/ModalWrapper/ConfirmDialog\";\nimport useApi from \"../Common/Hooks/useApi\";\n\nconst reEmail =\n // eslint-disable-next-line\n /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n\nconst SetEmailModal = ({ open, closeModal }: ISetEmailModalProps) => {\n const dispatch = useAppDispatch();\n\n const onError = (err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n closeModal();\n };\n\n const onSuccess = (res: any) => {\n let msg = `Email ${email} has been saved`;\n dispatch(setSnackBarMessage(msg));\n closeModal();\n };\n\n const [isLoading, invokeApi] = useApi(onSuccess, onError);\n const [email, setEmail] = useState(\"\");\n const [isEmailSet, setIsEmailSet] = useState(false);\n\n const handleInputChange = (event: React.ChangeEvent) => {\n let v = event.target.value;\n setIsEmailSet(reEmail.test(v));\n setEmail(v);\n };\n\n const onConfirm = () => {\n const isInEU = isEU();\n invokeApi(\"POST\", \"/api/v1/mp-integration\", { email, isInEU });\n };\n\n const isEU = () => {\n const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;\n return euTimezones.includes(tz.toLocaleLowerCase());\n };\n\n return open ? (\n }\n isLoading={isLoading}\n cancelText={\"Later\"}\n onConfirm={onConfirm}\n onClose={closeModal}\n confirmButtonProps={{\n color: \"info\",\n disabled: !isEmailSet || isLoading,\n }}\n confirmationContent={\n \n

\n Your Marketplace subscription includes support access from the\n \n MinIO Subscription Network (SUBNET)\n \n .\n
\n Enter your email to register now.\n

\n

\n To register later, contact{\" \"}\n support@min.io.\n

\n \n
\n }\n />\n ) : null;\n};\n\nexport default SetEmailModal;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport SetEmailModal from \"./SetEmailModal\";\nimport { PageLayout } from \"mds\";\nimport { selFeatures } from \"../consoleSlice\";\nimport { useSelector } from \"react-redux\";\nimport { Navigate, useNavigate } from \"react-router-dom\";\nimport { resourcesConfigurations } from \"../Tenants/AddTenant/Steps/TenantResources/utils\";\nimport { selShowMarketplace, showMarketplace } from \"../../../systemSlice\";\nimport { useAppDispatch } from \"../../../store\";\nimport PageHeaderWrapper from \"../Common/PageHeaderWrapper/PageHeaderWrapper\";\n\nconst Marketplace = () => {\n const dispatch = useAppDispatch();\n const navigate = useNavigate();\n const features = useSelector(selFeatures);\n const displayMarketplace = useSelector(selShowMarketplace);\n const [isMPMode, setMPMode] = useState(true);\n\n useEffect(() => {\n let mpMode = false;\n if (features && features.length !== 0) {\n features.forEach((feature) => {\n if (feature in resourcesConfigurations) {\n mpMode = true;\n return;\n }\n });\n }\n setMPMode(mpMode);\n }, [features, displayMarketplace]);\n\n const getTargetPath = () => {\n let targetPath = \"/\";\n if (\n localStorage.getItem(\"redirect-path\") &&\n localStorage.getItem(\"redirect-path\") !== \"\"\n ) {\n targetPath = `${localStorage.getItem(\"redirect-path\")}`;\n localStorage.setItem(\"redirect-path\", \"\");\n }\n return targetPath;\n };\n\n const closeModal = () => {\n dispatch(showMarketplace(false));\n navigate(getTargetPath());\n };\n\n if (!displayMarketplace || !isMPMode) {\n return ;\n }\n\n if (features) {\n return (\n \n \n \n \n \n \n );\n }\n return null;\n};\n\nexport default Marketplace;\n"],"names":["useApi","onSuccess","onError","isLoading","setIsLoading","useState","callApi","method","url","data","headers","api","invoke","then","res","catch","err","euTimezones","reEmail","_ref","open","closeModal","dispatch","useAppDispatch","invokeApi","msg","concat","email","setSnackBarMessage","setErrorSnackMessage","setEmail","isEmailSet","setIsEmailSet","isEU","tz","Intl","DateTimeFormat","resolvedOptions","timeZone","includes","toLocaleLowerCase","_jsx","ConfirmDialog","title","confirmText","isOpen","titleIcon","InfoIcon","cancelText","onConfirm","isInEU","onClose","confirmButtonProps","color","disabled","confirmationContent","_jsxs","Fragment","children","href","target","rel","InputBox","id","name","onChange","event","v","value","test","label","placeholder","type","Marketplace","navigate","useNavigate","features","useSelector","selFeatures","displayMarketplace","selShowMarketplace","isMPMode","setMPMode","useEffect","mpMode","length","forEach","feature","resourcesConfigurations","getTargetPath","targetPath","localStorage","getItem","setItem","showMarketplace","PageHeaderWrapper","PageLayout","SetEmailModal","Navigate","to","pathname"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/943.4c3f42c0.chunk.js b/web-app/build/static/js/943.4c3f42c0.chunk.js deleted file mode 100644 index 47580364f74..00000000000 --- a/web-app/build/static/js/943.4c3f42c0.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[943],{3943:(e,n,s)=>{s.r(n),s.d(n,{default:()=>p});var t=s(5043),a=s(9923),c=s(9456),r=s(3216),i=s(4159),l=s(2961),h=s(649),d=s(579);const p=()=>{const e=(0,l.jL)(),{tenantName:n,tenantNamespace:s}=(0,r.g)(),p=(0,c.d4)((e=>e.tenants.loadingTenant)),[j,x]=(0,t.useState)(!0),[u]=(0,t.useState)([""]),[o]=(0,t.useState)([""]),[m]=(0,t.useState)([""]);return(0,t.useEffect)((()=>{p&&x(!0)}),[p]),(0,t.useEffect)((()=>{j&&h.A.invoke("GET","/api/v1/namespaces/".concat(s||"","/tenants/").concat(n||"","/csr")).then((e=>{for(var n=0;n{e((0,i.C9)(n))}))}),[j,s,n,m,o,u,e]),(0,d.jsxs)(t.Fragment,{children:[(0,d.jsx)(a._xt,{separator:!0,sx:{marginBottom:15},children:"Certificate Signing Requests"}),(0,d.jsx)(a.azJ,{children:(0,d.jsxs)(a.XIK,{"aria-label":"collapsible table",children:[(0,d.jsx)(a.ndF,{children:(0,d.jsxs)(a.Hjg,{children:[(0,d.jsx)(a.nA6,{children:"Name"}),(0,d.jsx)(a.nA6,{children:"Status"}),(0,d.jsx)(a.nA6,{children:"Annotation"})]})}),(0,d.jsx)(a.BFY,{children:(0,d.jsxs)(a.Hjg,{children:[(0,d.jsx)(a.nA6,{children:o.map((e=>(0,d.jsx)("p",{children:e})))}),(0,d.jsx)(a.nA6,{children:u.map((e=>(0,d.jsx)("p",{children:e})))}),(0,d.jsx)(a.nA6,{children:m.map((e=>(0,d.jsx)("p",{children:e})))})]})})]})})]})}}}]); -//# sourceMappingURL=943.4c3f42c0.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/943.4c3f42c0.chunk.js.map b/web-app/build/static/js/943.4c3f42c0.chunk.js.map deleted file mode 100644 index a273c040ae1..00000000000 --- a/web-app/build/static/js/943.4c3f42c0.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/943.4c3f42c0.chunk.js","mappings":"iNAiCA,MA0FA,EA1FkBA,KAChB,MAAMC,GAAWC,EAAAA,EAAAA,OACX,WAAEC,EAAU,gBAAEC,IAAoBC,EAAAA,EAAAA,KAElCC,GAAgBC,EAAAA,EAAAA,KACnBC,GAAoBA,EAAMC,QAAQH,iBAG9BI,EAASC,IAAcC,EAAAA,EAAAA,WAAkB,IACzCC,IAAaD,EAAAA,EAAAA,UAAmB,CAAC,MACjCE,IAAWF,EAAAA,EAAAA,UAAmB,CAAC,MAC/BG,IAAkBH,EAAAA,EAAAA,UAAmB,CAAC,KAwC7C,OAtCAI,EAAAA,EAAAA,YAAU,KACJV,GACFK,GAAW,EACb,GACC,CAACL,KAEJU,EAAAA,EAAAA,YAAU,KACJN,GACFO,EAAAA,EACGC,OACC,MAAM,sBAADC,OACiBf,GAAmB,GAAE,aAAAe,OACzChB,GAAc,GAAE,SAGnBiB,MAAMC,IACL,IAAK,IAAIC,EAAK,EAAGA,EAAKD,EAAIE,WAAWC,OAAQF,IAAM,CACjD,IAAIG,EAAQJ,EAAIE,WAAWD,GAC3BT,EAAUa,KAAKD,EAAME,QACrBb,EAAQY,KAAKD,EAAMG,MACnBb,EAAeW,KAAKD,EAAMI,YAC5B,CACAlB,GAAW,EAAM,IAElBmB,OAAOC,IACN9B,GAAS+B,EAAAA,EAAAA,IAAqBD,GAAK,GAEzC,GACC,CACDrB,EACAN,EACAD,EACAY,EACAD,EACAD,EACAZ,KAIAgC,EAAAA,EAAAA,MAACC,EAAAA,SAAQ,CAAAC,SAAA,EACPC,EAAAA,EAAAA,KAACC,EAAAA,IAAY,CAACC,WAAS,EAACC,GAAI,CAAEC,aAAc,IAAKL,SAAC,kCAGlDC,EAAAA,EAAAA,KAACK,EAAAA,IAAG,CAAAN,UACFF,EAAAA,EAAAA,MAACS,EAAAA,IAAK,CAAC,aAAW,oBAAmBP,SAAA,EACnCC,EAAAA,EAAAA,KAACO,EAAAA,IAAS,CAAAR,UACRF,EAAAA,EAAAA,MAACW,EAAAA,IAAQ,CAAAT,SAAA,EACPC,EAAAA,EAAAA,KAACS,EAAAA,IAAS,CAAAV,SAAC,UACXC,EAAAA,EAAAA,KAACS,EAAAA,IAAS,CAAAV,SAAC,YACXC,EAAAA,EAAAA,KAACS,EAAAA,IAAS,CAAAV,SAAC,qBAGfC,EAAAA,EAAAA,KAACU,EAAAA,IAAS,CAAAX,UACRF,EAAAA,EAAAA,MAACW,EAAAA,IAAQ,CAAAT,SAAA,EACPC,EAAAA,EAAAA,KAACS,EAAAA,IAAS,CAAAV,SACPrB,EAAQiC,KAAKjC,IACZsB,EAAAA,EAAAA,KAAA,KAAAD,SAAIrB,SAGRsB,EAAAA,EAAAA,KAACS,EAAAA,IAAS,CAAAV,SACPtB,EAAUkC,KAAKlC,IACduB,EAAAA,EAAAA,KAAA,KAAAD,SAAItB,SAGRuB,EAAAA,EAAAA,KAACS,EAAAA,IAAS,CAAAV,SACPpB,EAAegC,KAAKhC,IACnBqB,EAAAA,EAAAA,KAAA,KAAAD,SAAIpB,oBAOP,C","sources":["screens/Console/Tenants/TenantDetails/TenantCSR.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport {\n SectionTitle,\n Box,\n Table,\n TableHead,\n TableRow,\n TableCell,\n TableBody,\n} from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport { useParams } from \"react-router-dom\";\nimport { setErrorSnackMessage } from \"../../../../systemSlice\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport api from \"../../../../common/api\";\n\nconst TenantCSR = () => {\n const dispatch = useAppDispatch();\n const { tenantName, tenantNamespace } = useParams();\n\n const loadingTenant = useSelector(\n (state: AppState) => state.tenants.loadingTenant,\n );\n\n const [loading, setLoading] = useState(true);\n const [csrStatus] = useState([\"\"]);\n const [csrName] = useState([\"\"]);\n const [csrAnnotations] = useState([\"\"]);\n\n useEffect(() => {\n if (loadingTenant) {\n setLoading(true);\n }\n }, [loadingTenant]);\n\n useEffect(() => {\n if (loading) {\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${tenantNamespace || \"\"}/tenants/${\n tenantName || \"\"\n }/csr`,\n )\n .then((res) => {\n for (var _i = 0; _i < res.csrElement.length; _i++) {\n var entry = res.csrElement[_i];\n csrStatus.push(entry.status);\n csrName.push(entry.name);\n csrAnnotations.push(entry.annotations);\n }\n setLoading(false);\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n });\n }\n }, [\n loading,\n tenantNamespace,\n tenantName,\n csrAnnotations,\n csrName,\n csrStatus,\n dispatch,\n ]);\n\n return (\n \n \n Certificate Signing Requests\n \n \n \n \n \n Name\n Status\n Annotation\n \n \n \n \n \n {csrName.map((csrName) => (\n

{csrName}

\n ))}\n
\n \n {csrStatus.map((csrStatus) => (\n

{csrStatus}

\n ))}\n
\n \n {csrAnnotations.map((csrAnnotations) => (\n

{csrAnnotations}

\n ))}\n
\n
\n
\n
\n
\n
\n );\n};\n\nexport default TenantCSR;\n"],"names":["TenantCSR","dispatch","useAppDispatch","tenantName","tenantNamespace","useParams","loadingTenant","useSelector","state","tenants","loading","setLoading","useState","csrStatus","csrName","csrAnnotations","useEffect","api","invoke","concat","then","res","_i","csrElement","length","entry","push","status","name","annotations","catch","err","setErrorSnackMessage","_jsxs","Fragment","children","_jsx","SectionTitle","separator","sx","marginBottom","Box","Table","TableHead","TableRow","TableCell","TableBody","map"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/977.74859670.chunk.js b/web-app/build/static/js/977.74859670.chunk.js deleted file mode 100644 index d8d3c7cf584..00000000000 --- a/web-app/build/static/js/977.74859670.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[977],{4977:(e,t,n)=>{n.r(t),n.d(t,{default:()=>S});var s=n(5043),a=n(9923),o=n(9456),i=n(3216),l=n(2961),r=n(6483),c=n(4014),d=n(3097),u=n.n(d),m=n(788),p=n(3758),x=n(649),f=n(1938),g=n(579);const h=()=>{const e=(0,l.jL)(),t=(0,o.d4)((e=>e.tenants.tenantInfo)),n=(0,o.d4)((e=>e.addPool.storageClasses)),i=(0,o.d4)((e=>e.addPool.setup.numberOfNodes.toString())),d=(0,o.d4)((e=>e.addPool.setup.storageClass)),h=(0,o.d4)((e=>e.addPool.setup.volumeSize.toString())),v=(0,o.d4)((e=>e.addPool.setup.volumesPerServer.toString())),[y,j]=(0,s.useState)({}),C=1073741824*parseInt(h)*parseInt(v),b=C*parseInt(i);(0,s.useEffect)((()=>{let t=[{fieldKey:"number_of_nodes",required:!0,value:i.toString(),customValidation:parseInt(i)<1||isNaN(parseInt(i)),customValidationMessage:"Number of servers must be at least 1"},{fieldKey:"pool_size",required:!0,value:h.toString(),customValidation:parseInt(h)<1||isNaN(parseInt(h)),customValidationMessage:"Pool Size cannot be 0"},{fieldKey:"volumes_per_server",required:!0,value:v.toString(),customValidation:parseInt(v)<1||isNaN(parseInt(v)),customValidationMessage:"1 volume or more are required"}];const n=(0,m.D)(t);e((0,c.ck)({page:"setup",status:0===Object.keys(n).length})),j(n)}),[e,i,h,v,d]),(0,s.useEffect)((()=>{0===n.length&&t&&x.A.invoke("GET","/api/v1/namespaces/".concat(t.namespace,"/resourcequotas/").concat(t.namespace,"-storagequota")).then((t=>{const n=u()(t,"elements",[]).map((e=>{const t=u()(e,"name","").split(".storageclass.storage.k8s.io/requests.storage")[0];return{label:t,value:t}}));e((0,c.pZ)({page:"setup",field:"storageClass",value:n[0].value})),e((0,c.gm)(n))})).catch((e=>{console.error(e)}))}),[t,n,e]);const _=(t,n)=>{e((0,c.pZ)({page:"setup",field:t,value:n}))};return(0,g.jsxs)(s.Fragment,{children:[(0,g.jsxs)(a.azJ,{className:"inputItem",sx:{marginBottom:12},children:[(0,g.jsx)(f.A,{children:"New Pool Configuration"}),(0,g.jsx)("span",{className:"muted",children:"Configure a new Pool to expand MinIO storage"})]}),(0,g.jsxs)(a.Hbc,{withBorders:!1,containerPadding:!1,children:[(0,g.jsx)(a.cl_,{id:"number_of_nodes",name:"number_of_nodes",onChange:e=>{const t=parseInt(e.target.value);e.target.validity.valid&&!isNaN(t)?_("numberOfNodes",t):isNaN(t)&&_("numberOfNodes",0)},label:"Number of Servers",value:i,error:y.number_of_nodes||"",pattern:"[0-9]*"}),(0,g.jsx)(a.cl_,{id:"pool_size",name:"pool_size",onChange:e=>{const t=parseInt(e.target.value);e.target.validity.valid&&!isNaN(t)?_("volumeSize",t):isNaN(t)&&_("volumeSize",0)},label:"Volume Size",value:h,error:y.pool_size||"",pattern:"[0-9]*",overlayObject:(0,g.jsx)(p.A,{id:"quota_unit",onUnitChange:()=>{},unitSelected:"Gi",unitsList:[{label:"Gi",value:"Gi"}],disabled:!0})}),(0,g.jsx)(a.cl_,{id:"volumes_per_sever",name:"volumes_per_sever",onChange:e=>{const t=parseInt(e.target.value);e.target.validity.valid&&!isNaN(t)?_("volumesPerServer",t):isNaN(t)&&_("volumesPerServer",0)},label:"Volumes per Server",value:v,error:y.volumes_per_server||"",pattern:"[0-9]*"}),(0,g.jsx)(a.l6P,{id:"storage_class",name:"storage_class",onChange:e=>{_("storageClass",e)},label:"Storage Class",value:d,options:n,disabled:n.length<1}),(0,g.jsxs)(a.azJ,{sx:{display:"flex",justifyContent:"center",marginLeft:30,gap:25,"& .sizeNumber":{fontSize:35,fontWeight:700,textAlign:"center"},"& .sizeDescription":{fontSize:14,textAlign:"center"}},children:[(0,g.jsxs)(a.azJ,{children:[(0,g.jsx)(a.azJ,{className:"sizeNumber",children:(0,r.nO)(C.toString(10))}),(0,g.jsx)(a.azJ,{className:"sizeDescription muted",children:"Instance Capacity"})]}),(0,g.jsxs)(a.azJ,{children:[(0,g.jsx)(a.azJ,{className:"sizeNumber",children:(0,r.nO)(b.toString(10))}),(0,g.jsx)(a.azJ,{className:"sizeDescription muted",children:"Total Capacity"})]})]})]})]})};var v=n(969);const y=()=>{const e=(0,l.jL)(),t=(0,o.d4)((e=>e.addPool.configuration.securityContextEnabled)),n=(0,o.d4)((e=>e.addPool.configuration.securityContext)),i=(0,o.d4)((e=>e.addPool.configuration.customRuntime)),r=(0,o.d4)((e=>e.addPool.configuration.runtimeClassName)),[d,u]=(0,s.useState)({}),p=(0,s.useCallback)(((t,n)=>{e((0,c.pZ)({page:"configuration",field:t,value:n}))}),[e]);(0,s.useEffect)((()=>{let s=[];t&&(s=[{fieldKey:"pool_securityContext_runAsUser",required:!0,value:n.runAsUser,customValidation:""===n.runAsUser||parseInt(n.runAsUser)<0,customValidationMessage:"runAsUser must be present and be 0 or more"},{fieldKey:"pool_securityContext_runAsGroup",required:!0,value:n.runAsGroup,customValidation:""===n.runAsGroup||parseInt(n.runAsGroup)<0,customValidationMessage:"runAsGroup must be present and be 0 or more"},{fieldKey:"pool_securityContext_fsGroup",required:!0,value:n.fsGroup,customValidation:""===n.fsGroup||parseInt(n.fsGroup)<0,customValidationMessage:"fsGroup must be present and be 0 or more"}]);const a=(0,m.D)(s);e((0,c.ck)({page:"configure",status:0===Object.keys(a).length})),u(a)}),[e,t,n]);const x=e=>{u((0,v.p)(d,e))};return(0,g.jsxs)(s.Fragment,{children:[(0,g.jsxs)(a.azJ,{className:"inputItem",sx:{marginBottom:12},children:[(0,g.jsx)(f.A,{children:"Configure"}),(0,g.jsx)("span",{className:"muted",children:"Aditional Configurations for the new Pool"})]}),(0,g.jsxs)(a.Hbc,{withBorders:!1,containerPadding:!1,children:[(0,g.jsx)(a.dOG,{value:"tenantConfig",id:"pool_configuration",name:"pool_configuration",checked:t,onChange:e=>{const t=e.target.checked;p("securityContextEnabled",t)},label:"Security Context"}),t&&(0,g.jsxs)("fieldset",{className:"inputItem",style:{marginBottom:15},children:[(0,g.jsx)("legend",{children:"Pool's Security Context"}),(0,g.jsxs)(a.xA9,{item:!0,xs:12,sx:{marginRight:15,"& .containerItem":{marginRight:15},"& .multiContainer":{display:"flex",alignItems:"center",justifyContent:"flex-start"},"& .responsiveSectionItem":{"@media (max-width: 900px)":{flexFlow:"column",alignItems:"flex-start","& div > div":{marginBottom:5,marginRight:0}}}},children:[(0,g.jsxs)("div",{className:"multiContainer".concat(" ","responsiveSectionItem"," inputItem"),children:[(0,g.jsx)("div",{className:"containerItem",children:(0,g.jsx)(a.cl_,{type:"number",id:"pool_securityContext_runAsUser",name:"pool_securityContext_runAsUser",onChange:e=>{p("securityContext",{...n,runAsUser:e.target.value}),x("pool_securityContext_runAsUser")},label:"Run As User",value:n.runAsUser,required:!0,error:d.pool_securityContext_runAsUser||"",min:"0"})}),(0,g.jsx)("div",{className:"containerItem",children:(0,g.jsx)(a.cl_,{type:"number",id:"pool_securityContext_runAsGroup",name:"pool_securityContext_runAsGroup",onChange:e=>{p("securityContext",{...n,runAsGroup:e.target.value}),x("pool_securityContext_runAsGroup")},label:"Run As Group",value:n.runAsGroup,required:!0,error:d.pool_securityContext_runAsGroup||"",min:"0"})})]}),(0,g.jsx)("div",{className:"multiContainer".concat(" ","responsiveSectionItem"," inputItem"),children:(0,g.jsx)("div",{className:"containerItem",children:(0,g.jsx)(a.cl_,{type:"number",id:"pool_securityContext_fsGroup",name:"pool_securityContext_fsGroup",onChange:e=>{p("securityContext",{...n,fsGroup:e.target.value}),x("pool_securityContext_fsGroup")},label:"FsGroup",value:n.fsGroup,required:!0,error:d.pool_securityContext_fsGroup||"",min:"0"})})})]}),(0,g.jsx)("br",{}),(0,g.jsx)(a.xA9,{item:!0,xs:12,sx:{marginRight:15},children:(0,g.jsx)(a.dOG,{value:"securityContextRunAsNonRoot",id:"pool_securityContext_runAsNonRoot",name:"pool_securityContext_runAsNonRoot",checked:n.runAsNonRoot,onChange:e=>{const t=e.target.checked;p("securityContext",{...n,runAsNonRoot:t})},label:"Do not run as Root"})})]}),(0,g.jsx)(a.dOG,{value:"customRuntime",id:"tenant_custom_runtime",name:"tenant_custom_runtime",checked:i,onChange:e=>{const t=e.target.checked;p("customRuntime",t)},label:"Custom Runtime Configurations"}),i&&(0,g.jsxs)("fieldset",{className:"inputItem",children:[(0,g.jsx)("legend",{children:"Custom Runtime Configurations"}),(0,g.jsx)(a.cl_,{id:"tenant_runtime_runtimeClassName",name:"tenant_runtime_runtimeClassName",onChange:e=>{p("runtimeClassName",e.target.value),x("tenant_runtime_runtimeClassName")},label:"Runtime Class Name",value:r,error:d.tenant_runtime_runtimeClassName||""})]})]})]})};var j=n(4159),C=n(8997);const b=()=>{const e=(0,l.jL)(),t=(0,o.d4)((e=>e.addPool.affinity.podAffinity)),n=(0,o.d4)((e=>e.addPool.affinity.nodeSelectorLabels)),i=(0,o.d4)((e=>e.addPool.affinity.withPodAntiAffinity)),r=(0,o.d4)((e=>e.addPool.nodeSelectorPairs)),d=(0,o.d4)((e=>e.addPool.tolerations)),[u,p]=(0,s.useState)({}),[h,v]=(0,s.useState)(!0),[y,b]=(0,s.useState)({}),[_,A]=(0,s.useState)([]),N=(0,s.useCallback)(((t,n)=>{e((0,c.pZ)({page:"affinity",field:t,value:n}))}),[e]);(0,s.useEffect)((()=>{h&&x.A.invoke("GET","/api/v1/nodes/labels").then((e=>{v(!1),b(e);let t=[];for(let n in e)t.push({label:n,value:n});A(t)})).catch((t=>{v(!1),e((0,j.Dy)(t)),b({})}))}),[e,h]),(0,s.useEffect)((()=>{if(r){const e=r.filter((e=>""!==e.key)).map((e=>"".concat(e.key,"=").concat(e.value))).filter(((e,t,n)=>n.indexOf(e)===t)).join("&");N("nodeSelectorLabels",e)}}),[r,N]),(0,s.useEffect)((()=>{let s=[];if("nodeSelector"===t){let e=!0;const t=n.split("&");1===t.length&&""===t[0]&&(e=!1),t.forEach(((n,s)=>{const a=n.split("=");2!==a.length&&(e=!1),s+1!==t.length&&(""!==a[0]&&""!==a[1]||(e=!1))})),s=[...s,{fieldKey:"labels",required:!0,value:n,customValidation:!e,customValidationMessage:"You need to add at least one label key-pair"}]}const a=(0,m.D)(s);e((0,c.ck)({page:"affinity",status:0===Object.keys(a).length})),p(a)}),[e,t,n]);const S=(t,n,s)=>{const a={...d[t],[n]:s};e((0,c.uC)({index:t,tolerationValue:a}))};return(0,g.jsxs)(s.Fragment,{children:[(0,g.jsxs)(a.azJ,{className:"inputItem",sx:{marginBottom:12},children:[(0,g.jsx)(f.A,{children:"Pod Placement"}),(0,g.jsx)("span",{className:"muted",children:"Configure how pods will be assigned to nodes"})]}),(0,g.jsxs)(a.azJ,{sx:{"& .affinityConfigField":{marginBottom:10,display:"flex"},"& .affinityLabelKey":{"& div:first-child":{marginBottom:0}},"& .affinityLabelValue":{marginLeft:10,"& div:first-child":{marginBottom:0}},"& .rowActions":{display:"flex",alignItems:"center",gap:10,marginLeft:10},"& .overlayAction":{display:"flex",alignItems:"center",gap:10},"& .affinityRow":{marginBottom:10,display:"flex",gap:10}},children:[(0,g.jsx)(a.xA9,{item:!0,xs:12,sx:{display:"flex","& .affinityFieldLabel":{display:"flex",flexFlow:"column",flex:1}},children:(0,g.jsxs)(a.xA9,{item:!0,className:"affinityFieldLabel",children:[(0,g.jsx)("h2",{style:{marginBottom:10},children:"Type"}),(0,g.jsx)(a.azJ,{className:"muted",sx:{marginBottom:12},children:"MinIO supports multiple configurations for Pod Affinity"}),(0,g.jsx)(a.z6M,{currentValue:t,id:"affinity-options",name:"affinity-options",label:" ",onChange:e=>{N("podAffinity",e.target.value)},selectorOptions:[{label:"None",value:"none"},{label:"Default (Pod Anti-Affinity)",value:"default"},{label:"Node Selector",value:"nodeSelector"}],displayInColumn:!0})]})}),"nodeSelector"===t&&(0,g.jsxs)(s.Fragment,{children:[(0,g.jsx)("br",{}),(0,g.jsx)(a.xA9,{item:!0,xs:12,children:(0,g.jsx)(a.dOG,{value:"with_pod_anti_affinity",id:"with_pod_anti_affinity",name:"with_pod_anti_affinity",checked:i,onChange:e=>{const t=e.target.checked;N("withPodAntiAffinity",t)},label:"With Pod Anti-Affinity"})}),(0,g.jsxs)(a.xA9,{item:!0,xs:12,children:[(0,g.jsx)("h3",{children:"Labels"}),(0,g.jsx)("span",{className:"error",children:u.labels}),(0,g.jsx)(a.xA9,{container:!0,children:r&&r.map(((t,n)=>(0,g.jsxs)(a.xA9,{item:!0,xs:12,className:"affinityConfigField",children:[(0,g.jsxs)(a.xA9,{item:!0,xs:5,className:"affinityLabelKey",children:[_.length>0&&(0,g.jsx)(a.l6P,{onChange:t=>{const s={key:t,value:y[t][0]},a=[...r];a[n]=s,e((0,c._l)(a))},id:"select-access-policy",name:"select-access-policy",label:"",value:t.key,options:_}),0===_.length&&(0,g.jsx)(a.cl_,{id:"nodeselector-key-".concat(n.toString()),label:"",name:"nodeselector-".concat(n.toString()),value:t.key,onChange:t=>{const s=[...r];s[n]={key:s[n].key,value:t.target.value},e((0,c._l)(s))},index:n,placeholder:"Key"})]}),(0,g.jsxs)(a.xA9,{item:!0,xs:5,className:"affinityLabelValue",children:[_.length>0&&(0,g.jsx)(a.l6P,{onChange:t=>{const s=[...r];s[n]={key:s[n].key,value:t},e((0,c._l)(s))},id:"select-access-policy",name:"select-access-policy",label:"",value:t.value,options:y[t.key]?y[t.key].map((e=>({label:e,value:e}))):[]}),0===_.length&&(0,g.jsx)(a.cl_,{id:"nodeselector-value-".concat(n.toString()),label:"",name:"nodeselector-".concat(n.toString()),value:t.value,onChange:t=>{const s=[...r];s[n]={key:s[n].key,value:t.target.value},e((0,c._l)(s))},index:n,placeholder:"value"})]}),(0,g.jsxs)(a.xA9,{item:!0,xs:2,className:"rowActions",children:[(0,g.jsx)("div",{className:"overlayAction",children:(0,g.jsx)(a.K0,{size:"small",onClick:()=>{const t=[...r];_.length>0?t.push({key:_[0].value,value:y[_[0].value][0]}):t.push({key:"",value:""}),e((0,c._l)(t))},children:(0,g.jsx)(a.REV,{})})}),r.length>1&&(0,g.jsx)("div",{className:"overlayAction",children:(0,g.jsx)(a.K0,{size:"small",onClick:()=>{const t=r.filter(((e,t)=>t!==n));e((0,c._l)(t))},children:(0,g.jsx)(a.YPx,{})})})]})]},"affinity-keyVal-".concat(n.toString()))))})]})]}),(0,g.jsx)(a.xA9,{item:!0,xs:12,className:"affinityConfigField",children:(0,g.jsxs)(a.xA9,{item:!0,className:"affinityFieldLabel",children:[(0,g.jsx)("h3",{children:"Tolerations"}),(0,g.jsx)("span",{className:"error",children:u.tolerations}),(0,g.jsx)(a.xA9,{container:!0,children:d&&d.map(((t,n)=>{var s;return(0,g.jsxs)(a.xA9,{item:!0,xs:12,className:"affinityRow",children:[(0,g.jsx)(C.A,{effect:t.effect,onEffectChange:e=>{S(n,"effect",e)},tolerationKey:t.key,onTolerationKeyChange:e=>{S(n,"key",e)},operator:t.operator,onOperatorChange:e=>{S(n,"operator",e)},value:t.value,onValueChange:e=>{S(n,"value",e)},tolerationSeconds:(null===(s=t.tolerationSeconds)||void 0===s?void 0:s.seconds)||0,onSecondsChange:e=>{S(n,"tolerationSeconds",{seconds:e})},index:n}),(0,g.jsx)("div",{className:"overlayAction",children:(0,g.jsx)(a.K0,{size:"small",onClick:()=>{e((0,c.zV)())},disabled:n!==d.length-1,children:(0,g.jsx)(a.REV,{})})}),(0,g.jsx)("div",{className:"overlayAction",children:(0,g.jsx)(a.K0,{size:"small",onClick:()=>e((0,c.U0)(n)),disabled:d.length<=1,children:(0,g.jsx)(a.YPx,{})})})]},"affinity-keyVal-".concat(n.toString()))}))})]})})]})]})};var _=n(9632);const A=()=>{const e=(0,l.jL)(),t=(0,o.d4)((e=>e.addPool.setup.storageClass)),n=(0,o.d4)((e=>e.addPool.validPages)),s=!(0,o.d4)((e=>e.addPool.sending))&&""!==t&&["setup","affinity","configure"].every((e=>n.includes(e)));return(0,g.jsx)(a.$nd,{id:"wizard-button-Create",variant:"callAction",onClick:()=>{e((0,_.K)())},disabled:!s,label:"Create"},"button-AddTenant-Create")};var N=n(4770);const S=()=>{const e=(0,l.jL)(),t=(0,i.Zp)(),n=(0,o.d4)((e=>e.tenants.tenantInfo)),d=(0,o.d4)((e=>e.addPool.sending)),u=(0,o.d4)((e=>e.addPool.navigateTo)),m="/namespaces/".concat((null===n||void 0===n?void 0:n.namespace)||"","/tenants/").concat((null===n||void 0===n?void 0:n.name)||"","/pools");(0,s.useEffect)((()=>{if(""!==u){const n="".concat(u);e((0,c.iq)()),t(n)}}),[u,t,e]);const p={label:"Cancel",type:"custom",enabled:!0,action:()=>{e((0,c.iq)()),t(m)}},x={componentRender:(0,g.jsx)(A,{},"add-pool-crate")},f=[{label:"Setup",componentRender:(0,g.jsx)(h,{}),buttons:[p,x]},{label:"Configuration",advancedOnly:!0,componentRender:(0,g.jsx)(y,{}),buttons:[p,x]},{label:"Pod Placement",advancedOnly:!0,componentRender:(0,g.jsx)(b,{}),buttons:[p,x]}];return(0,g.jsx)(s.Fragment,{children:(0,g.jsxs)(a.xA9,{item:!0,xs:12,children:[(0,g.jsx)(N.A,{label:(0,g.jsx)(s.Fragment,{children:(0,g.jsx)(a.EGL,{label:"Tenant Pools",onClick:()=>t(m)})})}),(0,g.jsxs)(a.Mxu,{variant:"constrained",children:[(0,g.jsx)(a.azJ,{withBorders:!0,sx:{padding:0,borderBottom:0},children:(0,g.jsx)(a.lcx,{icon:(0,g.jsx)(a.fmr,{}),title:"Add New Pool to ".concat((null===n||void 0===n?void 0:n.name)||""),subTitle:(0,g.jsxs)(s.Fragment,{children:["Namespace: ",(null===n||void 0===n?void 0:n.namespace)||""," / Current Capacity:"," ",(0,r.nO)(((null===n||void 0===n?void 0:n.total_size)||0).toString(10))]}),actions:null})}),d&&(0,g.jsx)(a.xA9,{item:!0,xs:12,children:(0,g.jsx)(a.z21,{})}),(0,g.jsx)(a.azJ,{withBorders:!0,sx:{padding:0,borderTop:0,"& .muted":{fontSize:13}},children:(0,g.jsx)(a.sQ4,{wizardSteps:f,linearMode:!1})})]})]})})}}}]); -//# sourceMappingURL=977.74859670.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/977.74859670.chunk.js.map b/web-app/build/static/js/977.74859670.chunk.js.map deleted file mode 100644 index 76208c3c7bb..00000000000 --- a/web-app/build/static/js/977.74859670.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/977.74859670.chunk.js","mappings":"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","sources":["screens/Console/Tenants/TenantDetails/Pools/AddPool/PoolResources.tsx","screens/Console/Tenants/TenantDetails/Pools/AddPool/PoolConfiguration.tsx","screens/Console/Tenants/TenantDetails/Pools/AddPool/PoolPodPlacement.tsx","screens/Console/Tenants/TenantDetails/Pools/AddPool/AddPoolCreateButton.tsx","screens/Console/Tenants/TenantDetails/Pools/AddPool/AddPool.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport { Box, FormLayout, InputBox, Select } from \"mds\";\nimport get from \"lodash/get\";\nimport { niceBytes } from \"../../../../../../common/utils\";\nimport { ErrorResponseHandler } from \"../../../../../../common/types\";\nimport { IQuotaElement, IQuotas } from \"../../../ListTenants/utils\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport { useSelector } from \"react-redux\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../../utils/validationFunctions\";\nimport InputUnitMenu from \"../../../../Common/FormComponents/InputUnitMenu/InputUnitMenu\";\nimport {\n isPoolPageValid,\n setPoolField,\n setPoolStorageClasses,\n} from \"./addPoolSlice\";\nimport api from \"../../../../../../common/api\";\nimport H3Section from \"../../../../Common/H3Section\";\n\nconst PoolResources = () => {\n const dispatch = useAppDispatch();\n\n const tenant = useSelector((state: AppState) => state.tenants.tenantInfo);\n const storageClasses = useSelector(\n (state: AppState) => state.addPool.storageClasses,\n );\n const numberOfNodes = useSelector((state: AppState) =>\n state.addPool.setup.numberOfNodes.toString(),\n );\n const storageClass = useSelector(\n (state: AppState) => state.addPool.setup.storageClass,\n );\n const volumeSize = useSelector((state: AppState) =>\n state.addPool.setup.volumeSize.toString(),\n );\n const volumesPerServer = useSelector((state: AppState) =>\n state.addPool.setup.volumesPerServer.toString(),\n );\n\n const [validationErrors, setValidationErrors] = useState({});\n\n const instanceCapacity: number =\n parseInt(volumeSize) * 1073741824 * parseInt(volumesPerServer);\n const totalCapacity: number = instanceCapacity * parseInt(numberOfNodes);\n\n // Validation\n useEffect(() => {\n let customAccountValidation: IValidation[] = [\n {\n fieldKey: \"number_of_nodes\",\n required: true,\n value: numberOfNodes.toString(),\n customValidation:\n parseInt(numberOfNodes) < 1 || isNaN(parseInt(numberOfNodes)),\n customValidationMessage: \"Number of servers must be at least 1\",\n },\n {\n fieldKey: \"pool_size\",\n required: true,\n value: volumeSize.toString(),\n customValidation:\n parseInt(volumeSize) < 1 || isNaN(parseInt(volumeSize)),\n customValidationMessage: \"Pool Size cannot be 0\",\n },\n {\n fieldKey: \"volumes_per_server\",\n required: true,\n value: volumesPerServer.toString(),\n customValidation:\n parseInt(volumesPerServer) < 1 || isNaN(parseInt(volumesPerServer)),\n customValidationMessage: \"1 volume or more are required\",\n },\n ];\n\n const commonVal = commonFormValidation(customAccountValidation);\n\n dispatch(\n isPoolPageValid({\n page: \"setup\",\n status: Object.keys(commonVal).length === 0,\n }),\n );\n\n setValidationErrors(commonVal);\n }, [dispatch, numberOfNodes, volumeSize, volumesPerServer, storageClass]);\n\n useEffect(() => {\n if (storageClasses.length === 0 && tenant) {\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${tenant.namespace}/resourcequotas/${tenant.namespace}-storagequota`,\n )\n .then((res: IQuotas) => {\n const elements: IQuotaElement[] = get(res, \"elements\", []);\n\n const newStorage = elements.map((storageClass: any) => {\n const name = get(storageClass, \"name\", \"\").split(\n \".storageclass.storage.k8s.io/requests.storage\",\n )[0];\n\n return { label: name, value: name };\n });\n\n dispatch(\n setPoolField({\n page: \"setup\",\n field: \"storageClass\",\n value: newStorage[0].value,\n }),\n );\n\n dispatch(setPoolStorageClasses(newStorage));\n })\n .catch((err: ErrorResponseHandler) => {\n console.error(err);\n });\n }\n }, [tenant, storageClasses, dispatch]);\n\n const setFieldInfo = (fieldName: string, value: any) => {\n dispatch(\n setPoolField({\n page: \"setup\",\n field: fieldName,\n value: value,\n }),\n );\n };\n\n return (\n \n \n New Pool Configuration\n \n Configure a new Pool to expand MinIO storage\n \n \n\n \n ) => {\n const intValue = parseInt(e.target.value);\n\n if (e.target.validity.valid && !isNaN(intValue)) {\n setFieldInfo(\"numberOfNodes\", intValue);\n } else if (isNaN(intValue)) {\n setFieldInfo(\"numberOfNodes\", 0);\n }\n }}\n label=\"Number of Servers\"\n value={numberOfNodes}\n error={validationErrors[\"number_of_nodes\"] || \"\"}\n pattern={\"[0-9]*\"}\n />\n ) => {\n const intValue = parseInt(e.target.value);\n\n if (e.target.validity.valid && !isNaN(intValue)) {\n setFieldInfo(\"volumeSize\", intValue);\n } else if (isNaN(intValue)) {\n setFieldInfo(\"volumeSize\", 0);\n }\n }}\n label=\"Volume Size\"\n value={volumeSize}\n error={validationErrors[\"pool_size\"] || \"\"}\n pattern={\"[0-9]*\"}\n overlayObject={\n {}}\n unitSelected={\"Gi\"}\n unitsList={[{ label: \"Gi\", value: \"Gi\" }]}\n disabled={true}\n />\n }\n />\n ) => {\n const intValue = parseInt(e.target.value);\n\n if (e.target.validity.valid && !isNaN(intValue)) {\n setFieldInfo(\"volumesPerServer\", intValue);\n } else if (isNaN(intValue)) {\n setFieldInfo(\"volumesPerServer\", 0);\n }\n }}\n label=\"Volumes per Server\"\n value={volumesPerServer}\n error={validationErrors[\"volumes_per_server\"] || \"\"}\n pattern={\"[0-9]*\"}\n />\n {\n setFieldInfo(\"storageClass\", value);\n }}\n label=\"Storage Class\"\n value={storageClass}\n options={storageClasses}\n disabled={storageClasses.length < 1}\n />\n \n \n \n {niceBytes(instanceCapacity.toString(10))}\n \n Instance Capacity\n \n \n \n {niceBytes(totalCapacity.toString(10))}\n \n Total Capacity\n \n \n \n \n );\n};\n\nexport default PoolResources;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { Box, FormLayout, Grid, InputBox, Switch } from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport { clearValidationError } from \"../../../utils\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../../utils/validationFunctions\";\nimport { isPoolPageValid, setPoolField } from \"./addPoolSlice\";\nimport H3Section from \"../../../../Common/H3Section\";\n\nconst PoolConfiguration = () => {\n const dispatch = useAppDispatch();\n\n const securityContextEnabled = useSelector(\n (state: AppState) => state.addPool.configuration.securityContextEnabled,\n );\n const securityContext = useSelector(\n (state: AppState) => state.addPool.configuration.securityContext,\n );\n const customRuntime = useSelector(\n (state: AppState) => state.addPool.configuration.customRuntime,\n );\n const runtimeClassName = useSelector(\n (state: AppState) => state.addPool.configuration.runtimeClassName,\n );\n\n const [validationErrors, setValidationErrors] = useState({});\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n setPoolField({\n page: \"configuration\",\n field: field,\n value: value,\n }),\n );\n },\n [dispatch],\n );\n\n // Validation\n useEffect(() => {\n let customAccountValidation: IValidation[] = [];\n if (securityContextEnabled) {\n customAccountValidation = [\n {\n fieldKey: \"pool_securityContext_runAsUser\",\n required: true,\n value: securityContext.runAsUser,\n customValidation:\n securityContext.runAsUser === \"\" ||\n parseInt(securityContext.runAsUser) < 0,\n customValidationMessage: `runAsUser must be present and be 0 or more`,\n },\n {\n fieldKey: \"pool_securityContext_runAsGroup\",\n required: true,\n value: securityContext.runAsGroup,\n customValidation:\n securityContext.runAsGroup === \"\" ||\n parseInt(securityContext.runAsGroup) < 0,\n customValidationMessage: `runAsGroup must be present and be 0 or more`,\n },\n {\n fieldKey: \"pool_securityContext_fsGroup\",\n required: true,\n value: securityContext.fsGroup!,\n customValidation:\n securityContext.fsGroup === \"\" ||\n parseInt(securityContext.fsGroup!) < 0,\n customValidationMessage: `fsGroup must be present and be 0 or more`,\n },\n ];\n }\n\n const commonVal = commonFormValidation(customAccountValidation);\n\n dispatch(\n isPoolPageValid({\n page: \"configure\",\n status: Object.keys(commonVal).length === 0,\n }),\n );\n\n setValidationErrors(commonVal);\n }, [dispatch, securityContextEnabled, securityContext]);\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n return (\n \n \n Configure\n \n Aditional Configurations for the new Pool\n \n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"securityContextEnabled\", checked);\n }}\n label={\"Security Context\"}\n />\n {securityContextEnabled && (\n
\n Pool's Security Context\n div\": {\n marginBottom: 5,\n marginRight: 0,\n },\n },\n },\n }}\n >\n \n
\n ) => {\n updateField(\"securityContext\", {\n ...securityContext,\n runAsUser: e.target.value,\n });\n cleanValidation(\"pool_securityContext_runAsUser\");\n }}\n label=\"Run As User\"\n value={securityContext.runAsUser}\n required\n error={\n validationErrors[\"pool_securityContext_runAsUser\"] || \"\"\n }\n min=\"0\"\n />\n
\n
\n ) => {\n updateField(\"securityContext\", {\n ...securityContext,\n runAsGroup: e.target.value,\n });\n cleanValidation(\"pool_securityContext_runAsGroup\");\n }}\n label=\"Run As Group\"\n value={securityContext.runAsGroup}\n required\n error={\n validationErrors[\"pool_securityContext_runAsGroup\"] || \"\"\n }\n min=\"0\"\n />\n
\n \n \n
\n ) => {\n updateField(\"securityContext\", {\n ...securityContext,\n fsGroup: e.target.value,\n });\n cleanValidation(\"pool_securityContext_fsGroup\");\n }}\n label=\"FsGroup\"\n value={securityContext.fsGroup!}\n required\n error={\n validationErrors[\"pool_securityContext_fsGroup\"] || \"\"\n }\n min=\"0\"\n />\n
\n \n \n
\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"securityContext\", {\n ...securityContext,\n runAsNonRoot: checked,\n });\n }}\n label={\"Do not run as Root\"}\n />\n \n
\n )}\n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"customRuntime\", checked);\n }}\n label={\"Custom Runtime Configurations\"}\n />\n {customRuntime && (\n
\n Custom Runtime Configurations\n ) => {\n updateField(\"runtimeClassName\", e.target.value);\n cleanValidation(\"tenant_runtime_runtimeClassName\");\n }}\n label=\"Runtime Class Name\"\n value={runtimeClassName}\n error={validationErrors[\"tenant_runtime_runtimeClassName\"] || \"\"}\n />\n
\n )}\n
\n
\n );\n};\n\nexport default PoolConfiguration;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport {\n AddIcon,\n Box,\n Grid,\n IconButton,\n InputBox,\n RadioGroup,\n RemoveIcon,\n Select,\n Switch,\n} from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../../utils/validationFunctions\";\nimport { ErrorResponseHandler } from \"../../../../../../common/types\";\nimport { LabelKeyPair } from \"../../../types\";\nimport { setModalErrorSnackMessage } from \"../../../../../../systemSlice\";\nimport {\n addNewPoolToleration,\n isPoolPageValid,\n removePoolToleration,\n setPoolField,\n setPoolKeyValuePairs,\n setPoolTolerationInfo,\n} from \"./addPoolSlice\";\nimport H3Section from \"../../../../Common/H3Section\";\nimport api from \"../../../../../../common/api\";\nimport TolerationSelector from \"../../../../Common/TolerationSelector/TolerationSelector\";\n\ninterface OptionPair {\n label: string;\n value: string;\n}\n\nconst Affinity = () => {\n const dispatch = useAppDispatch();\n\n const podAffinity = useSelector(\n (state: AppState) => state.addPool.affinity.podAffinity,\n );\n const nodeSelectorLabels = useSelector(\n (state: AppState) => state.addPool.affinity.nodeSelectorLabels,\n );\n const withPodAntiAffinity = useSelector(\n (state: AppState) => state.addPool.affinity.withPodAntiAffinity,\n );\n const keyValuePairs = useSelector(\n (state: AppState) => state.addPool.nodeSelectorPairs,\n );\n const tolerations = useSelector(\n (state: AppState) => state.addPool.tolerations,\n );\n\n const [validationErrors, setValidationErrors] = useState({});\n const [loading, setLoading] = useState(true);\n const [keyValueMap, setKeyValueMap] = useState<{ [key: string]: string[] }>(\n {},\n );\n const [keyOptions, setKeyOptions] = useState([]);\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n dispatch(\n setPoolField({\n page: \"affinity\",\n field: field,\n value: value,\n }),\n );\n },\n [dispatch],\n );\n\n useEffect(() => {\n if (loading) {\n api\n .invoke(\"GET\", `/api/v1/nodes/labels`)\n .then((res: { [key: string]: string[] }) => {\n setLoading(false);\n setKeyValueMap(res);\n let keys: OptionPair[] = [];\n for (let k in res) {\n keys.push({\n label: k,\n value: k,\n });\n }\n setKeyOptions(keys);\n })\n .catch((err: ErrorResponseHandler) => {\n setLoading(false);\n dispatch(setModalErrorSnackMessage(err));\n setKeyValueMap({});\n });\n }\n }, [dispatch, loading]);\n\n useEffect(() => {\n if (keyValuePairs) {\n const vlr = keyValuePairs\n .filter((kvp) => kvp.key !== \"\")\n .map((kvp) => `${kvp.key}=${kvp.value}`)\n .filter((kvs, i, a) => a.indexOf(kvs) === i);\n const vl = vlr.join(\"&\");\n updateField(\"nodeSelectorLabels\", vl);\n }\n }, [keyValuePairs, updateField]);\n\n // Validation\n useEffect(() => {\n let customAccountValidation: IValidation[] = [];\n\n if (podAffinity === \"nodeSelector\") {\n let valid = true;\n\n const splittedLabels = nodeSelectorLabels.split(\"&\");\n\n if (splittedLabels.length === 1 && splittedLabels[0] === \"\") {\n valid = false;\n }\n\n splittedLabels.forEach((item: string, index: number) => {\n const splitItem = item.split(\"=\");\n\n if (splitItem.length !== 2) {\n valid = false;\n }\n\n if (index + 1 !== splittedLabels.length) {\n if (splitItem[0] === \"\" || splitItem[1] === \"\") {\n valid = false;\n }\n }\n });\n\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"labels\",\n required: true,\n value: nodeSelectorLabels,\n customValidation: !valid,\n customValidationMessage:\n \"You need to add at least one label key-pair\",\n },\n ];\n }\n\n const commonVal = commonFormValidation(customAccountValidation);\n\n dispatch(\n isPoolPageValid({\n page: \"affinity\",\n status: Object.keys(commonVal).length === 0,\n }),\n );\n\n setValidationErrors(commonVal);\n }, [dispatch, podAffinity, nodeSelectorLabels]);\n\n const updateToleration = (index: number, field: string, value: any) => {\n const alterToleration = { ...tolerations[index], [field]: value };\n\n dispatch(\n setPoolTolerationInfo({\n index: index,\n tolerationValue: alterToleration,\n }),\n );\n };\n\n return (\n \n \n Pod Placement\n \n Configure how pods will be assigned to nodes\n \n \n \n \n \n

Type

\n \n MinIO supports multiple configurations for Pod Affinity\n \n {\n updateField(\"podAffinity\", e.target.value);\n }}\n selectorOptions={[\n { label: \"None\", value: \"none\" },\n { label: \"Default (Pod Anti-Affinity)\", value: \"default\" },\n { label: \"Node Selector\", value: \"nodeSelector\" },\n ]}\n displayInColumn\n />\n
\n \n {podAffinity === \"nodeSelector\" && (\n \n
\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"withPodAntiAffinity\", checked);\n }}\n label={\"With Pod Anti-Affinity\"}\n />\n \n \n

Labels

\n {validationErrors[\"labels\"]}\n \n {keyValuePairs &&\n keyValuePairs.map((kvp, i) => {\n return (\n \n \n {keyOptions.length > 0 && (\n {\n const newKey = value;\n const newLKP: LabelKeyPair = {\n key: newKey,\n value: keyValueMap[newKey][0],\n };\n const arrCp: LabelKeyPair[] = [\n ...keyValuePairs,\n ];\n arrCp[i] = newLKP;\n dispatch(setPoolKeyValuePairs(arrCp));\n }}\n id=\"select-access-policy\"\n name=\"select-access-policy\"\n label={\"\"}\n value={kvp.key}\n options={keyOptions}\n />\n )}\n {keyOptions.length === 0 && (\n {\n const arrCp: LabelKeyPair[] = [\n ...keyValuePairs,\n ];\n arrCp[i] = {\n key: arrCp[i].key,\n value: e.target.value as string,\n };\n dispatch(setPoolKeyValuePairs(arrCp));\n }}\n index={i}\n placeholder={\"Key\"}\n />\n )}\n \n \n {keyOptions.length > 0 && (\n {\n const arrCp: LabelKeyPair[] = [\n ...keyValuePairs,\n ];\n arrCp[i] = {\n key: arrCp[i].key,\n value: value,\n };\n dispatch(setPoolKeyValuePairs(arrCp));\n }}\n id=\"select-access-policy\"\n name=\"select-access-policy\"\n label={\"\"}\n value={kvp.value}\n options={\n keyValueMap[kvp.key]\n ? keyValueMap[kvp.key].map((v) => {\n return { label: v, value: v };\n })\n : []\n }\n />\n )}\n {keyOptions.length === 0 && (\n {\n const arrCp: LabelKeyPair[] = [\n ...keyValuePairs,\n ];\n arrCp[i] = {\n key: arrCp[i].key,\n value: e.target.value as string,\n };\n dispatch(setPoolKeyValuePairs(arrCp));\n }}\n index={i}\n placeholder={\"value\"}\n />\n )}\n \n \n
\n {\n const arrCp = [...keyValuePairs];\n if (keyOptions.length > 0) {\n arrCp.push({\n key: keyOptions[0].value,\n value: keyValueMap[keyOptions[0].value][0],\n });\n } else {\n arrCp.push({ key: \"\", value: \"\" });\n }\n\n dispatch(setPoolKeyValuePairs(arrCp));\n }}\n >\n \n \n
\n {keyValuePairs.length > 1 && (\n
\n {\n const arrCp = keyValuePairs.filter(\n (item, index) => index !== i,\n );\n dispatch(setPoolKeyValuePairs(arrCp));\n }}\n >\n \n \n
\n )}\n
\n
\n );\n })}\n
\n \n
\n )}\n \n \n

Tolerations

\n {validationErrors[\"tolerations\"]}\n \n {tolerations &&\n tolerations.map((tol, i) => {\n return (\n \n {\n updateToleration(i, \"effect\", value);\n }}\n tolerationKey={tol.key}\n onTolerationKeyChange={(value) => {\n updateToleration(i, \"key\", value);\n }}\n operator={tol.operator}\n onOperatorChange={(value) => {\n updateToleration(i, \"operator\", value);\n }}\n value={tol.value}\n onValueChange={(value) => {\n updateToleration(i, \"value\", value);\n }}\n tolerationSeconds={tol.tolerationSeconds?.seconds || 0}\n onSecondsChange={(value) => {\n updateToleration(i, \"tolerationSeconds\", {\n seconds: value,\n });\n }}\n index={i}\n />\n
\n {\n dispatch(addNewPoolToleration());\n }}\n disabled={i !== tolerations.length - 1}\n >\n \n \n
\n\n
\n dispatch(removePoolToleration(i))}\n disabled={tolerations.length <= 1}\n >\n \n \n
\n
\n );\n })}\n
\n
\n \n \n
\n );\n};\n\nexport default Affinity;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { Button } from \"mds\";\nimport React from \"react\";\nimport { addPoolAsync } from \"./addPoolThunks\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\n\nconst AddPoolCreateButton = () => {\n const dispatch = useAppDispatch();\n\n const selectedStorageClass = useSelector(\n (state: AppState) => state.addPool.setup.storageClass,\n );\n const validPages = useSelector((state: AppState) => state.addPool.validPages);\n\n const sending = useSelector((state: AppState) => state.addPool.sending);\n const requiredPages = [\"setup\", \"affinity\", \"configure\"];\n const enabled =\n !sending &&\n selectedStorageClass !== \"\" &&\n requiredPages.every((v) => validPages.includes(v));\n return (\n {\n dispatch(addPoolAsync());\n }}\n disabled={!enabled}\n key={`button-AddTenant-Create`}\n label={\"Create\"}\n />\n );\n};\n\nexport default AddPoolCreateButton;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect } from \"react\";\nimport {\n BackLink,\n TenantsIcon,\n PageLayout,\n ScreenTitle,\n Wizard,\n WizardElement,\n Box,\n ProgressBar,\n Grid,\n} from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport { useNavigate } from \"react-router-dom\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport { niceBytes } from \"../../../../../../common/utils\";\nimport { resetPoolForm } from \"./addPoolSlice\";\nimport PoolResources from \"./PoolResources\";\nimport PoolConfiguration from \"./PoolConfiguration\";\nimport PoolPodPlacement from \"./PoolPodPlacement\";\nimport AddPoolCreateButton from \"./AddPoolCreateButton\";\nimport PageHeaderWrapper from \"../../../../Common/PageHeaderWrapper/PageHeaderWrapper\";\n\nconst AddPool = () => {\n const dispatch = useAppDispatch();\n const navigate = useNavigate();\n\n const tenant = useSelector((state: AppState) => state.tenants.tenantInfo);\n const sending = useSelector((state: AppState) => state.addPool.sending);\n const navigateTo = useSelector((state: AppState) => state.addPool.navigateTo);\n\n const poolsURL = `/namespaces/${tenant?.namespace || \"\"}/tenants/${\n tenant?.name || \"\"\n }/pools`;\n\n useEffect(() => {\n if (navigateTo !== \"\") {\n const goTo = `${navigateTo}`;\n dispatch(resetPoolForm());\n navigate(goTo);\n }\n }, [navigateTo, navigate, dispatch]);\n\n const cancelButton = {\n label: \"Cancel\",\n type: \"custom\" as \"to\" | \"custom\" | \"next\" | \"back\",\n enabled: true,\n action: () => {\n dispatch(resetPoolForm());\n navigate(poolsURL);\n },\n };\n\n const createButton = {\n componentRender: ,\n };\n\n const wizardSteps: WizardElement[] = [\n {\n label: \"Setup\",\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n {\n label: \"Configuration\",\n advancedOnly: true,\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n {\n label: \"Pod Placement\",\n advancedOnly: true,\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n ];\n\n return (\n \n \n \n navigate(poolsURL)}\n />\n \n }\n />\n \n \n }\n title={`Add New Pool to ${tenant?.name || \"\"}`}\n subTitle={\n \n Namespace: {tenant?.namespace || \"\"} / Current Capacity:{\" \"}\n {niceBytes((tenant?.total_size || 0).toString(10))}\n \n }\n actions={null}\n />\n \n {sending && (\n \n \n \n )}\n \n \n \n \n \n \n );\n};\n\nexport default AddPool;\n"],"names":["PoolResources","dispatch","useAppDispatch","tenant","useSelector","state","tenants","tenantInfo","storageClasses","addPool","numberOfNodes","setup","toString","storageClass","volumeSize","volumesPerServer","validationErrors","setValidationErrors","useState","instanceCapacity","parseInt","totalCapacity","useEffect","customAccountValidation","fieldKey","required","value","customValidation","isNaN","customValidationMessage","commonVal","commonFormValidation","isPoolPageValid","page","status","Object","keys","length","api","invoke","concat","namespace","then","res","newStorage","get","map","name","split","label","setPoolField","field","setPoolStorageClasses","catch","err","console","error","setFieldInfo","fieldName","_jsxs","Fragment","children","Box","className","sx","marginBottom","_jsx","H3Section","FormLayout","withBorders","containerPadding","InputBox","id","onChange","e","intValue","target","validity","valid","pattern","overlayObject","InputUnitMenu","onUnitChange","unitSelected","unitsList","disabled","Select","options","display","justifyContent","marginLeft","gap","fontSize","fontWeight","textAlign","niceBytes","PoolConfiguration","securityContextEnabled","configuration","securityContext","customRuntime","runtimeClassName","updateField","useCallback","runAsUser","runAsGroup","fsGroup","cleanValidation","clearValidationError","Switch","checked","style","Grid","item","xs","marginRight","alignItems","flexFlow","type","min","runAsNonRoot","Affinity","podAffinity","affinity","nodeSelectorLabels","withPodAntiAffinity","keyValuePairs","nodeSelectorPairs","tolerations","loading","setLoading","keyValueMap","setKeyValueMap","keyOptions","setKeyOptions","k","push","setModalErrorSnackMessage","vl","filter","kvp","key","kvs","i","a","indexOf","join","splittedLabels","forEach","index","splitItem","updateToleration","alterToleration","setPoolTolerationInfo","tolerationValue","flex","RadioGroup","currentValue","selectorOptions","displayInColumn","container","newLKP","arrCp","setPoolKeyValuePairs","placeholder","v","IconButton","size","onClick","AddIcon","RemoveIcon","tol","_tol$tolerationSecond","TolerationSelector","effect","onEffectChange","tolerationKey","onTolerationKeyChange","operator","onOperatorChange","onValueChange","tolerationSeconds","seconds","onSecondsChange","addNewPoolToleration","removePoolToleration","AddPoolCreateButton","selectedStorageClass","validPages","enabled","sending","every","includes","Button","variant","addPoolAsync","AddPool","navigate","useNavigate","navigateTo","poolsURL","goTo","resetPoolForm","cancelButton","action","createButton","componentRender","wizardSteps","buttons","advancedOnly","PoolPodPlacement","PageHeaderWrapper","BackLink","PageLayout","padding","borderBottom","ScreenTitle","icon","TenantsIcon","title","subTitle","total_size","actions","ProgressBar","borderTop","Wizard","linearMode"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/979.21101997.chunk.js b/web-app/build/static/js/979.21101997.chunk.js deleted file mode 100644 index 77d28405775..00000000000 --- a/web-app/build/static/js/979.21101997.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkweb_app=self.webpackChunkweb_app||[]).push([[979],{7403:(e,n,t)=>{t.d(n,{U:()=>i,_:()=>a});const a={label:{color:"#07193E",fontSize:13,alignSelf:"center",whiteSpace:"nowrap","&:not(:first-of-type)":{marginLeft:10}},actionsTray:{display:"flex",justifyContent:"space-between",marginBottom:"1rem",alignItems:"center","& button":{flexGrow:0,marginLeft:8}}},i={modalButtonBar:{marginTop:15,display:"flex",alignItems:"center",justifyContent:"flex-end","& button":{marginRight:10},"& button:last-child":{marginRight:0}},modalFormScrollable:{maxHeight:"calc(100vh - 300px)",overflowY:"auto",paddingTop:10}}},4141:(e,n,t)=>{t.d(n,{A:()=>c});var a=t(5043),i=t(9456),l=t(9923),s=t(2961),o=t(4159),r=t(9555),d=t(579);const c=e=>{let{onClose:n,modalOpen:t,title:c,children:u,wideLimit:m=!0,titleIcon:v=null,iconColor:x="default",sx:h}=e;const g=(0,s.jL)(),[p,j]=(0,a.useState)(!1),f=(0,i.d4)((e=>e.system.modalSnackBar));(0,a.useEffect)((()=>{g((0,o.h0)(""))}),[g]),(0,a.useEffect)((()=>{if(f){if(""===f.message)return void j(!1);"error"!==f.type&&j(!0)}}),[f]);let b="";return f&&(b=f.detailedErrorMsg,(""===f.detailedErrorMsg||f.detailedErrorMsg.length<5)&&(b=f.message)),(0,d.jsxs)(l.ngX,{onClose:n,open:t,title:c,titleIcon:v,widthLimit:m,sx:h,iconColor:x,children:[(0,d.jsx)(r.A,{isModal:!0}),(0,d.jsx)(l.qb_,{onClose:()=>{j(!1),g((0,o.h0)(""))},open:p,message:b,mode:"inline",variant:"error"===f.type?"error":"default",autoHideDuration:"error"===f.type?10:5,condensed:!0}),u]})}},6129:(e,n,t)=>{t.d(n,{A:()=>v});t(5043);var a=t(9923),i=t(7829),l=t(3439),s=t(7869),o=t(6483),r=t(579);const d=e=>{let{totalValue:n,sizeItems:t,bgColor:a="#ededed"}=e;return(0,r.jsx)("div",{style:{width:"100%",height:12,backgroundColor:a,borderRadius:30,display:"flex",transitionDuration:"0.3s",overflow:"hidden"},children:t.map(((e,t)=>{const a=100*e.value/n;return(0,r.jsx)("div",{style:{width:"".concat(a,"%"),height:"100%",backgroundColor:e.color,transitionDuration:"0.3s"}},"itemSize-".concat(t.toString()))}))})};var c=t(4574),u=t(3097),m=t.n(u);const v=e=>{let{totalCapacity:n,usedSpaceVariants:t,statusClass:u,render:v="pie"}=e;const x=["#8dacd3","#bca1ea","#92e8d2","#efc9ac","#97f274","#f7d291","#71ACCB","#f28282","#e28cc1","#2781B0"],h=(0,c.DP)(),g="".concat(m()(h,"borderColor","#ededed"),"70"),p=t.reduce(((e,n)=>e+n.value),0),j=n-p;let f=[];const b=t.find((e=>"STANDARD"===e.variant))||{value:0,variant:"empty"};if(t.length>10){f=[{value:p-b.value,color:"#2781B0",label:"Total Tiers Space"}]}else f=t.filter((e=>"STANDARD"!==e.variant)).map(((e,n)=>({value:e.value,color:x[n],label:"Tier - ".concat(e.variant)})));let y=m()(h,"signalColors.main","#07193E");const C=100*b.value/n;C>=90?y=m()(h,"signalColors.danger","#C83B51"):C>=75&&(y=m()(h,"signalColors.warning","#FFAB0F"));const w=[{value:b.value,color:y,label:"Used Space by Tenant"},...f,{value:j,color:"bar"===v?g:"transparent",label:"Empty Space"}];if("bar"===v){const e=w.map((e=>({value:e.value,color:e.color,itemName:e.label})));return(0,r.jsx)("div",{style:{width:"100%",marginBottom:15},children:(0,r.jsx)(d,{totalValue:n,sizeItems:e,bgColor:g})})}return(0,r.jsxs)("div",{style:{position:"relative",width:110,height:110},children:[(0,r.jsx)("div",{style:{position:"absolute",right:-5,top:15,zIndex:400},className:u,children:(0,r.jsx)(a.GQ2,{style:{border:"#fff 2px solid",borderRadius:"100%",width:20,height:20}})}),(0,r.jsx)("span",{style:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",fontWeight:"bold",fontSize:11},children:isNaN(p)?"N/A":(0,o.qO)(p)}),(0,r.jsx)("div",{children:(0,r.jsxs)(i.r,{width:110,height:110,children:[(0,r.jsx)(l.F,{data:[{value:100}],cx:"50%",cy:"50%",dataKey:"value",outerRadius:50,innerRadius:40,fill:g,isAnimationActive:!1,stroke:"none"}),(0,r.jsx)(l.F,{data:w,cx:"50%",cy:"50%",dataKey:"value",outerRadius:50,innerRadius:40,children:w.map(((e,n)=>(0,r.jsx)(s.f,{fill:e.color,stroke:"none"},"cellCapacity-".concat(n))))})]})})]})}},5979:(e,n,t)=>{t.r(n),t.d(n,{default:()=>I});var a=t(5043),i=t(9456),l=t(9923),s=t(3097),o=t.n(s),r=t(4574),d=t(7403),c=t(4159),u=t(2961),m=t(4141),v=t(649),x=t(579);const h=e=>{let{open:n,closeModalAndRefresh:t,namespace:i,idTenant:s}=e;const o=(0,u.jL)(),[r,h]=(0,a.useState)(!1),[g,p]=(0,a.useState)(""),[j,f]=(0,a.useState)(!1),[b,y]=(0,a.useState)(""),[C,w]=(0,a.useState)(""),[S,A]=(0,a.useState)(""),[k,I]=(0,a.useState)(!0),E=(0,a.useCallback)((e=>{const n=new RegExp("^$|^((.*?)/(.*?):(.+))$");if("minioImage"===e)I(n.test(g))}),[g]);(0,a.useEffect)((()=>{E("minioImage")}),[g,E]);return(0,x.jsx)(m.A,{title:"Update MinIO Version",modalOpen:n,onClose:()=>{t(!1)},children:(0,x.jsx)(l.Hbc,{withBorders:!1,containerPadding:!1,children:(0,x.jsxs)(l.azJ,{children:[(0,x.jsx)(l.azJ,{sx:{fontSize:14},children:"Please enter the MinIO image from dockerhub to use. If blank, then latest build will be used."}),(0,x.jsx)("br",{}),(0,x.jsx)(l.cl_,{value:g,label:"MinIO's Image",id:"minioImage",name:"minioImage",placeholder:"E.g. minio/minio:RELEASE.2022-02-26T02-54-46Z",onChange:e=>{p(e.target.value)}}),(0,x.jsx)(l.dOG,{value:"imageRegistry",id:"setImageRegistry",name:"setImageRegistry",checked:j,onChange:e=>{f(!j)},label:"Set Custom Image Registry",indicatorLabels:["Yes","No"]}),j&&(0,x.jsxs)(a.Fragment,{children:[(0,x.jsx)(l.cl_,{value:b,label:"Endpoint",id:"imageRegistry",name:"imageRegistry",placeholder:"E.g. https://index.docker.io/v1/",onChange:e=>{y(e.target.value)}}),(0,x.jsx)(l.cl_,{value:C,label:"Username",id:"imageRegistryUsername",name:"imageRegistryUsername",placeholder:"Enter image registry username",onChange:e=>{w(e.target.value)}}),(0,x.jsx)(l.cl_,{value:S,label:"Password",id:"imageRegistryPassword",name:"imageRegistryPassword",placeholder:"Enter image registry password",onChange:e=>{A(e.target.value)}})]}),(0,x.jsxs)(l.azJ,{sx:d.U.modalButtonBar,children:[(0,x.jsx)(l.$nd,{id:"clear",variant:"regular",onClick:()=>{p(""),f(!1),y(""),w(""),A("")},label:"Clear"}),(0,x.jsx)(l.$nd,{id:"save-tenant",type:"submit",variant:"callAction",disabled:!k||j&&(""===b.trim()||""===C.trim()||""===S.trim())||r,onClick:()=>{h(!0);let e={image:g};if(j){const n={image_registry:{registry:b,username:C,password:S}};e={...e,...n}}v.A.invoke("PUT","/api/v1/namespaces/".concat(i,"/tenants/").concat(s),e).then((()=>{h(!1),o((0,c.Hk)("Image updated successfully")),t(!0)})).catch((e=>{o((0,c.Dy)(e)),h(!1)}))},label:"Save"})]})]})})})};var g=t(3216),p=t(8296),j=t(6483),f=t(6129);const b=r.Ay.div((e=>{let{theme:n}=e;return{width:"100%","& .tenantStatus":{marginTop:2,color:o()(n,"signalColors.disabled","#E6EBEB"),"& .min-icon":{width:16,height:16,marginRight:4},"&.red":{color:o()(n,"signalColors.danger","#C51B3F")},"&.yellow":{color:o()(n,"signalColors.warning","#FFBD62")},"&.green":{color:o()(n,"signalColors.good","#4CCB92")}}}})),y=e=>{var n,t,i,s,o,r;let{tenant:d,healthStatus:c,loading:u,error:m}=e,v={value:"n/a",unit:""},h={value:"n/a",unit:""},g={value:"n/a",unit:""},p={value:"n/a",unit:""},y={value:"n/a",unit:""};if(null!==(n=d.status)&&void 0!==n&&null!==(t=n.usage)&&void 0!==t&&t.raw){const e=(0,j.nO)("".concat(d.status.usage.raw),!0).split(" ");v.value=e[0],v.unit=e[1]}if(null!==(i=d.status)&&void 0!==i&&null!==(s=i.usage)&&void 0!==s&&s.capacity){const e=(0,j.nO)("".concat(d.status.usage.capacity),!0).split(" ");h.value=e[0],h.unit=e[1]}if(null!==(o=d.status)&&void 0!==o&&null!==(r=o.usage)&&void 0!==r&&r.capacity_usage){const e=(0,j.qO)(d.status.usage.capacity_usage,!0).split(" ");g.value=e[0],g.unit=e[1]}let C=[];if(d.tiers&&0!==d.tiers.length){C=d.tiers.map((e=>({value:e.size,variant:e.name})));let e=d.tiers.filter((e=>"internal"===e.type)).reduce(((e,n)=>e+n.size),0),n=d.tiers.filter((e=>"internal"!==e.type)).reduce(((e,n)=>e+n.size),0);const t=(0,j.qO)(n,!0).split(" ");y.value=t[0],y.unit=t[1];const a=(0,j.qO)(e,!0).split(" ");p.value=a[0],p.unit=a[1]}else{var w,S;C=[{value:(null===(w=d.status)||void 0===w||null===(S=w.usage)||void 0===S?void 0:S.capacity_usage)||0,variant:"STANDARD"}]}return(0,x.jsxs)(a.Fragment,{children:[u&&(0,x.jsx)("div",{style:{padding:5},children:(0,x.jsx)(l.xA9,{item:!0,xs:12,style:{textAlign:"center"},children:(0,x.jsx)(l.aHM,{style:{width:40,height:40}})})}),(()=>{var e,n;return u?null:""!==m?(0,x.jsx)(l.Wei,{title:"Error",message:m,variant:"error"}):(0,x.jsxs)(b,{children:[(0,x.jsx)(f.A,{totalCapacity:(null===(e=d.status)||void 0===e||null===(n=e.usage)||void 0===n?void 0:n.raw)||0,usedSpaceVariants:C,statusClass:"",render:"bar"}),(0,x.jsxs)(l.azJ,{sx:{display:"flex",alignItems:"stretch",margin:"0 0 15px 0",flexDirection:"row",gap:20,["@media (max-width: ".concat(l.nmC.sm,"px)")]:{flexDirection:"column",gap:5},["@media (max-width: ".concat(l.nmC.md,"px)")]:{gap:15}},children:[(!d.tiers||0===d.tiers.length)&&(0,x.jsx)(a.Fragment,{children:(0,x.jsx)(l.mZW,{label:"Internal:",direction:"row",value:"".concat(g.value," ").concat(g.unit)})}),d.tiers&&d.tiers.length>0&&(0,x.jsxs)(a.Fragment,{children:[(0,x.jsx)(l.mZW,{label:"Internal:",direction:"row",value:"".concat(p.value," ").concat(p.unit)}),(0,x.jsx)(l.mZW,{label:"Tiered:",direction:"row",value:"".concat(y.value," ").concat(y.unit)})]}),c&&(0,x.jsx)(l.mZW,{direction:"row",label:"Health:",value:(0,x.jsx)("div",{className:"tenantStatus ".concat(c),children:(0,x.jsx)(l.GQ2,{})})})]})]})})()]})},C=e=>{let{open:n,closeModalAndRefresh:t,namespace:i,idTenant:s,domains:o}=e;const r=(0,u.jL)(),[h,g]=(0,a.useState)(!1),[p,j]=(0,a.useState)(""),[f,b]=(0,a.useState)([""]),[y,C]=(0,a.useState)(!0),[w,S]=(0,a.useState)([!0]);(0,a.useEffect)((()=>{if(o){const e=o.console||"";if(j(e),""!==e){const n=new RegExp(/^(https?):\/\/([a-zA-Z0-9\-.]+)(:[0-9]+)?(\/[a-zA-Z0-9\-./]*)?$/);C(n.test(e))}else C(!0);if(o.minio&&o.minio.length>0){b(o.minio);const e=new RegExp(/^(https?):\/\/([a-zA-Z0-9\-.]+)(:[0-9]+)?$/),n=o.minio.map((n=>""===n.trim()||e.test(n)));S(n)}}}),[o]);const A=()=>{const e=[...f],n=[...w];e.push(""),n.push(!0),b(e),S(n)};return(0,x.jsx)(m.A,{title:"Edit Tenant Domains - ".concat(s),modalOpen:n,onClose:()=>{t(!1)},children:(0,x.jsxs)(l.azJ,{sx:d.U.modalFormScrollable,children:[(0,x.jsxs)(l.Hbc,{withBorders:!1,containerPadding:!1,children:[(0,x.jsx)(l.cl_,{id:"console_domain",name:"console_domain",onChange:e=>{j(e.target.value),C(e.target.validity.valid)},label:"Console Domain",value:p,placeholder:"Eg. http://subdomain.domain:port/subpath1/subpath2",pattern:"^(https?):\\/\\/([a-zA-Z0-9\\-.]+)(:[0-9]+)?(\\/[a-zA-Z0-9\\-.\\/]*)?$",error:y?"":"Domain format is incorrect (http|https://subdomain.domain:port/subpath1/subpath2)"}),(0,x.jsx)("h4",{children:"MinIO Domains"}),(0,x.jsx)("div",{children:f.map(((e,n)=>(0,x.jsxs)(l.azJ,{sx:{display:"flex",gap:10},children:[(0,x.jsx)(l.cl_,{id:"minio-domain-".concat(n.toString()),name:"minio-domain-".concat(n.toString()),onChange:e=>{((e,n)=>{const t=[...f];t[n]=e,b(t)})(e.target.value,n),((e,n)=>{const t=[...w];t[n]=e,S(t)})(e.target.validity.valid,n)},label:"MinIO Domain ".concat(n+1),value:e,placeholder:"Eg. http://subdomain.domain",pattern:"^(https?):\\/\\/([a-zA-Z0-9\\-.]+)(:[0-9]+)?$",error:w[n]?"":"MinIO domain format is incorrect (http|https://subdomain.domain)"}),(0,x.jsxs)(l.azJ,{sx:{display:"flex",alignItems:"center",gap:10,marginBottom:12},children:[(0,x.jsx)(l.K0,{size:"small",onClick:A,disabled:n!==f.length-1,children:(0,x.jsx)(l.REV,{})}),(0,x.jsx)(l.K0,{size:"small",onClick:()=>(e=>{const n=f.filter(((n,t)=>t!==e)),t=w.filter(((n,t)=>t!==e));b(n),S(t)})(n),disabled:f.length<=1,children:(0,x.jsx)(l.YPx,{})})]})]},"minio-domain-key-".concat(n.toString()))))})]}),(0,x.jsxs)(l.azJ,{sx:d.U.modalButtonBar,children:[(0,x.jsx)(l.$nd,{id:"clear-edit-domain",type:"button",variant:"regular",onClick:()=>{j(""),C(!0),b([""]),S([!0])},label:"Clear"}),(0,x.jsx)(l.$nd,{id:"save-domain",type:"submit",variant:"callAction",disabled:h||!y||w.filter((e=>!e)).length>0,onClick:()=>{g(!0);let e={domains:{console:p,minio:f.filter((e=>""!==e.trim()))}};v.A.invoke("PUT","/api/v1/namespaces/".concat(i,"/tenants/").concat(s,"/domains"),e).then((()=>{g(!1),r((0,c.Hk)("Domains updated successfully")),t(!0)})).catch((e=>{g(!1),r((0,c.Dy)(e))}))},label:"Save"})]})]})})},w=r.Ay.div((e=>{let{theme:n}=e;return{"& .linkedSection":{color:o()(n,"linkColor","#2781B0"),fontFamily:"'Inter', sans-serif"},"& .autoGeneratedLink":{fontStyle:"italic"}}})),S=e=>{var n;let{tenant:t}=e;return t?(0,x.jsx)(y,{tenant:t,label:"Storage",error:"",loading:!1,healthStatus:null===t||void 0===t||null===(n=t.status)||void 0===n?void 0:n.health_status}):null},A=function(e){return e?(0,x.jsx)(l.JrA,{}):(0,x.jsx)(l.wWO,{style:{color:"grey"}})},k={display:"flex",justifyContent:"space-between",marginTop:"10px","@media (max-width: 600px)":{flexFlow:"column"}},I=()=>{var e,n,t,s,r,d,c,m,v,j,f,b,y,I,E,R,_,D,z,O,Z,B,T,F;const W=(0,u.jL)(),{tenantName:M,tenantNamespace:L}=(0,g.g)(),N=(0,i.d4)((e=>e.tenants.tenantInfo)),P=(0,i.d4)((e=>o()(e.tenants.tenantInfo,"encryptionEnabled",!1))),U=(0,i.d4)((e=>o()(e.tenants.tenantInfo,"minioTLS",!1))),J=(0,i.d4)((e=>o()(e.tenants.tenantInfo,"idpAdEnabled",!1))),$=(0,i.d4)((e=>o()(e.tenants.tenantInfo,"idpOidcEnabled",!1))),[q,H]=(0,a.useState)(0),[G,V]=(0,a.useState)(0),[K,Q]=(0,a.useState)(0),[X,Y]=(0,a.useState)(!1),[ee,ne]=(0,a.useState)(!1);(0,a.useEffect)((()=>{var e,n,t;N&&(H((null===N||void 0===N||null===(e=N.pools)||void 0===e?void 0:e.length)||0),Q((null===(n=N.pools)||void 0===n?void 0:n.reduce(((e,n)=>e+n.volumes_per_server*n.servers),0))||0),V((null===(t=N.pools)||void 0===t?void 0:t.reduce(((e,n)=>e+n.servers),0))||0))}),[N]);return(0,x.jsxs)(a.Fragment,{children:[X&&(0,x.jsx)(h,{open:X,closeModalAndRefresh:e=>{Y(!1),e&&W((0,p.X)())},idTenant:M||"",namespace:L||""}),ee&&(0,x.jsx)(C,{open:ee,idTenant:M||"",namespace:L||"",domains:(null===N||void 0===N?void 0:N.domains)||null,closeModalAndRefresh:e=>{ne(!1),e&&W((0,p.X)())}}),(0,x.jsx)(l._xt,{separator:!1,children:"Details"}),(0,x.jsx)(S,{tenant:N}),(0,x.jsx)(w,{children:(0,x.jsxs)(l.xA9,{container:!0,children:[(0,x.jsxs)(l.xA9,{item:!0,xs:12,sm:12,md:8,children:[(0,x.jsx)(l.xA9,{item:!0,xs:12,children:(0,x.jsx)(l.mZW,{label:"State:",value:null===N||void 0===N?void 0:N.currentState})}),(0,x.jsx)(l.xA9,{item:!0,xs:12,children:(0,x.jsx)(l.mZW,{label:"MinIO:",value:(0,x.jsx)(l.t53,{sx:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"normal",wordBreak:"break-all"},onClick:()=>{Y(!0)},children:N?N.image:""})})}),(0,x.jsx)(l.xA9,{item:!0,xs:12,children:(0,x.jsxs)("h3",{children:["Domains",(0,x.jsx)(l.$nd,{id:"edit-domains",icon:(0,x.jsx)(l.qUP,{}),onClick:()=>{ne(!0)}})]})}),(0,x.jsx)(l.xA9,{item:!0,xs:12,children:(0,x.jsx)(l.mZW,{label:"Console:",value:(0,x.jsxs)(a.Fragment,{children:[null!==N&&void 0!==N&&null!==(e=N.domains)&&void 0!==e&&e.console&&""!==(null===N||void 0===N||null===(n=N.domains)||void 0===n?void 0:n.console)||null!==N&&void 0!==N&&null!==(t=N.endpoints)&&void 0!==t&&t.console?"":"-",(null===N||void 0===N||null===(s=N.endpoints)||void 0===s?void 0:s.console)&&(0,x.jsxs)(a.Fragment,{children:[(0,x.jsx)("a",{href:null===N||void 0===N||null===(r=N.endpoints)||void 0===r?void 0:r.console,target:"_blank",rel:"noopener",className:"linkedSection autoGeneratedLink",children:(null===N||void 0===N||null===(d=N.endpoints)||void 0===d?void 0:d.console)||"-"}),(0,x.jsx)("br",{})]}),(null===N||void 0===N||null===(c=N.domains)||void 0===c?void 0:c.console)&&""!==(null===N||void 0===N||null===(m=N.domains)||void 0===m?void 0:m.console)&&(0,x.jsx)("a",{href:(null===N||void 0===N||null===(v=N.domains)||void 0===v?void 0:v.console)||"",target:"_blank",rel:"noopener",className:"linkedSection",children:(null===N||void 0===N||null===(j=N.domains)||void 0===j?void 0:j.console)||""})]})})}),(0,x.jsx)(l.xA9,{item:!0,xs:12,children:(0,x.jsx)(l.mZW,{label:"MinIO Endpoint".concat(null!==N&&void 0!==N&&null!==(f=N.endpoints)&&void 0!==f&&f.minio&&1===(null===N||void 0===N||null===(b=N.endpoints)||void 0===b?void 0:b.minio.length)?"":"s",":"),value:(0,x.jsxs)(a.Fragment,{children:[null!==N&&void 0!==N&&null!==(y=N.domains)&&void 0!==y&&y.minio||null!==N&&void 0!==N&&null!==(I=N.endpoints)&&void 0!==I&&I.minio?"":"-",(null===N||void 0===N||null===(E=N.endpoints)||void 0===E?void 0:E.minio)&&(0,x.jsxs)(a.Fragment,{children:[(0,x.jsx)("a",{href:null===N||void 0===N||null===(R=N.endpoints)||void 0===R?void 0:R.minio,target:"_blank",rel:"noopener",className:"linkedSection autoGeneratedLink",children:(null===N||void 0===N||null===(_=N.endpoints)||void 0===_?void 0:_.minio)||"-"}),(0,x.jsx)("br",{})]}),(null===N||void 0===N||null===(D=N.domains)||void 0===D?void 0:D.minio)&&N.domains.minio.map((e=>(0,x.jsxs)(a.Fragment,{children:[(0,x.jsx)("a",{href:e,target:"_blank",rel:"noopener",className:"linkedSection",children:e}),(0,x.jsx)("br",{})]},e)))]})})})]}),(0,x.jsxs)(l.xA9,{item:!0,xs:12,sm:12,md:4,children:[(0,x.jsx)(l.xA9,{item:!0,xs:12,children:(0,x.jsx)(l.mZW,{label:"Instances:",value:G})}),(0,x.jsx)(l.xA9,{item:!0,xs:12,children:(0,x.jsx)(l.mZW,{label:"Clusters:",value:q,sx:{marginRight:47}})}),(0,x.jsx)(l.xA9,{item:!0,xs:12,children:(0,x.jsx)(l.mZW,{label:"Total Drives:",value:K,sx:{marginRight:43}})}),(0,x.jsx)(l.xA9,{item:!0,xs:12,children:(0,x.jsx)(l.mZW,{label:"Write Quorum:",value:null!==N&&void 0!==N&&null!==(z=N.status)&&void 0!==z&&z.write_quorum?null===N||void 0===N||null===(O=N.status)||void 0===O?void 0:O.write_quorum:0})}),(0,x.jsx)(l.xA9,{item:!0,xs:12,children:(0,x.jsx)(l.mZW,{label:"Drives Online:",value:null!==N&&void 0!==N&&null!==(Z=N.status)&&void 0!==Z&&Z.drives_online?null===N||void 0===N||null===(B=N.status)||void 0===B?void 0:B.drives_online:0,sx:{marginRight:8}})}),(0,x.jsx)(l.xA9,{item:!0,xs:12,children:(0,x.jsx)(l.mZW,{label:"Drives Offline:",value:null!==N&&void 0!==N&&null!==(T=N.status)&&void 0!==T&&T.drives_offline?null===N||void 0===N||null===(F=N.status)||void 0===F?void 0:F.drives_offline:0,sx:{marginRight:7}})})]})]})}),(0,x.jsx)(l._xt,{separator:!0,children:"Features"}),(0,x.jsxs)(l.azJ,{sx:k,children:[(0,x.jsx)(l.mZW,{direction:"row",label:"MinIO TLS:",value:A(U,"tenant-tls")}),(0,x.jsx)(l.mZW,{direction:"row",label:"AD/LDAP:",value:A(J,"tenant-sts")}),(0,x.jsx)(l.mZW,{direction:"row",label:"Encryption:",value:A(P,"tenant-enc")})]}),(0,x.jsx)(l.azJ,{sx:{...k},children:(0,x.jsx)(l.mZW,{direction:"row",label:"OpenID:",value:A($,"tenant-oidc")})})]})}}}]); -//# sourceMappingURL=979.21101997.chunk.js.map \ No newline at end of file diff --git a/web-app/build/static/js/979.21101997.chunk.js.map b/web-app/build/static/js/979.21101997.chunk.js.map deleted file mode 100644 index 707f3b98aa2..00000000000 --- a/web-app/build/static/js/979.21101997.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/979.21101997.chunk.js","mappings":"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","sources":["screens/Console/Common/FormComponents/common/styleLibrary.ts","screens/Console/Common/ModalWrapper/ModalWrapper.tsx","screens/Console/Common/UsageBar/UsageBar.tsx","screens/Console/Tenants/ListTenants/TenantCapacity.tsx","screens/Console/Tenants/TenantDetails/UpdateTenantModal.tsx","screens/Console/Common/UsageBarWrapper/SummaryUsageBar.tsx","screens/Console/Tenants/TenantDetails/EditDomains.tsx","screens/Console/Tenants/TenantDetails/TenantSummary.tsx"],"sourcesContent":["// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\n// This object contains variables that will be used across form components.\n\nexport const actionsTray = {\n label: {\n color: \"#07193E\",\n fontSize: 13,\n alignSelf: \"center\" as const,\n whiteSpace: \"nowrap\" as const,\n \"&:not(:first-of-type)\": {\n marginLeft: 10,\n },\n },\n actionsTray: {\n display: \"flex\" as const,\n justifyContent: \"space-between\" as const,\n marginBottom: \"1rem\",\n alignItems: \"center\",\n \"& button\": {\n flexGrow: 0,\n marginLeft: 8,\n },\n },\n};\n\nexport const modalStyleUtils: any = {\n modalButtonBar: {\n marginTop: 15,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n\n \"& button\": {\n marginRight: 10,\n },\n \"& button:last-child\": {\n marginRight: 0,\n },\n },\n modalFormScrollable: {\n maxHeight: \"calc(100vh - 300px)\",\n overflowY: \"auto\",\n paddingTop: 10,\n },\n};\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React, { useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { ModalBox, Snackbar } from \"mds\";\nimport { CSSObject } from \"styled-components\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport { setModalSnackMessage } from \"../../../../systemSlice\";\nimport MainError from \"../MainError/MainError\";\n\ninterface IModalProps {\n onClose: () => void;\n modalOpen: boolean;\n title: string | React.ReactNode;\n children: any;\n wideLimit?: boolean;\n titleIcon?: React.ReactNode;\n iconColor?: \"default\" | \"delete\" | \"accept\";\n sx?: CSSObject;\n}\n\nconst ModalWrapper = ({\n onClose,\n modalOpen,\n title,\n children,\n wideLimit = true,\n titleIcon = null,\n iconColor = \"default\",\n sx,\n}: IModalProps) => {\n const dispatch = useAppDispatch();\n const [openSnackbar, setOpenSnackbar] = useState(false);\n\n const modalSnackMessage = useSelector(\n (state: AppState) => state.system.modalSnackBar,\n );\n\n useEffect(() => {\n dispatch(setModalSnackMessage(\"\"));\n }, [dispatch]);\n\n useEffect(() => {\n if (modalSnackMessage) {\n if (modalSnackMessage.message === \"\") {\n setOpenSnackbar(false);\n return;\n }\n // Open SnackBar\n if (modalSnackMessage.type !== \"error\") {\n setOpenSnackbar(true);\n }\n }\n }, [modalSnackMessage]);\n\n const closeSnackBar = () => {\n setOpenSnackbar(false);\n dispatch(setModalSnackMessage(\"\"));\n };\n\n let message = \"\";\n\n if (modalSnackMessage) {\n message = modalSnackMessage.detailedErrorMsg;\n if (\n modalSnackMessage.detailedErrorMsg === \"\" ||\n modalSnackMessage.detailedErrorMsg.length < 5\n ) {\n message = modalSnackMessage.message;\n }\n }\n\n return (\n \n \n \n {children}\n \n );\n};\n\nexport default ModalWrapper;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\n\nexport interface ISizeBarItem {\n value: number;\n itemName: string;\n color: string;\n}\n\nexport interface IUsageBar {\n totalValue: number;\n sizeItems: ISizeBarItem[];\n bgColor?: string;\n}\n\nconst UsageBar = ({\n totalValue,\n sizeItems,\n bgColor = \"#ededed\",\n}: IUsageBar) => {\n return (\n \n {sizeItems.map((sizeElement, index) => {\n const itemPercentage = (sizeElement.value * 100) / totalValue;\n return (\n \n );\n })}\n \n );\n};\n\nexport default UsageBar;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { CircleIcon } from \"mds\";\nimport { Cell, Pie, PieChart } from \"recharts\";\nimport { CapacityValue, CapacityValues } from \"./types\";\nimport { niceBytesInt } from \"../../../../common/utils\";\nimport UsageBar, { ISizeBarItem } from \"../../Common/UsageBar/UsageBar\";\nimport { useTheme } from \"styled-components\";\nimport get from \"lodash/get\";\n\ninterface ITenantCapacity {\n totalCapacity: number;\n usedSpaceVariants: CapacityValues[];\n statusClass: string;\n render?: \"pie\" | \"bar\";\n}\n\nconst TenantCapacity = ({\n totalCapacity,\n usedSpaceVariants,\n statusClass,\n render = \"pie\",\n}: ITenantCapacity) => {\n const colors = [\n \"#8dacd3\",\n \"#bca1ea\",\n \"#92e8d2\",\n \"#efc9ac\",\n \"#97f274\",\n \"#f7d291\",\n \"#71ACCB\",\n \"#f28282\",\n \"#e28cc1\",\n \"#2781B0\",\n ];\n\n const theme = useTheme();\n\n const BGColor = `${get(theme, \"borderColor\", \"#ededed\")}70`;\n\n const totalUsedSpace = usedSpaceVariants.reduce((acc, currValue) => {\n return acc + currValue.value;\n }, 0);\n\n const emptySpace = totalCapacity - totalUsedSpace;\n\n let tiersList: CapacityValue[] = [];\n\n const standardTier = usedSpaceVariants.find(\n (tier) => tier.variant === \"STANDARD\",\n ) || {\n value: 0,\n variant: \"empty\",\n };\n\n if (usedSpaceVariants.length > 10) {\n const totalUsedByTiers = totalUsedSpace - standardTier.value;\n\n tiersList = [\n { value: totalUsedByTiers, color: \"#2781B0\", label: \"Total Tiers Space\" },\n ];\n } else {\n tiersList = usedSpaceVariants\n .filter((variant) => variant.variant !== \"STANDARD\")\n .map((variant, index) => {\n return {\n value: variant.value,\n color: colors[index],\n label: `Tier - ${variant.variant}`,\n };\n });\n }\n\n let standardTierColor = get(theme, \"signalColors.main\", \"#07193E\");\n\n const usedPercentage = (standardTier.value * 100) / totalCapacity;\n\n if (usedPercentage >= 90) {\n standardTierColor = get(theme, \"signalColors.danger\", \"#C83B51\");\n } else if (usedPercentage >= 75) {\n standardTierColor = get(theme, \"signalColors.warning\", \"#FFAB0F\");\n }\n\n const plotValues: CapacityValue[] = [\n {\n value: standardTier.value,\n color: standardTierColor,\n label: \"Used Space by Tenant\",\n },\n ...tiersList,\n {\n value: emptySpace,\n color: render === \"bar\" ? BGColor : \"transparent\",\n label: \"Empty Space\",\n },\n ];\n\n if (render === \"bar\") {\n const plotValuesForUsageBar: ISizeBarItem[] = plotValues.map((plotVal) => {\n return {\n value: plotVal.value,\n color: plotVal.color,\n itemName: plotVal.label,\n };\n });\n\n return (\n
\n \n
\n );\n }\n\n return (\n
\n \n \n
\n \n {!isNaN(totalUsedSpace) ? niceBytesInt(totalUsedSpace) : \"N/A\"}\n \n
\n \n \n \n {plotValues.map((entry, index) => (\n \n ))}\n \n \n
\n \n );\n};\n\nexport default TenantCapacity;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { Box, Button, FormLayout, InputBox, Switch } from \"mds\";\nimport { modalStyleUtils } from \"../../Common/FormComponents/common/styleLibrary\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport {\n setModalErrorSnackMessage,\n setSnackBarMessage,\n} from \"../../../../systemSlice\";\nimport { useAppDispatch } from \"../../../../store\";\nimport ModalWrapper from \"../../Common/ModalWrapper/ModalWrapper\";\nimport api from \"../../../../common/api\";\n\ninterface IUpdateTenantModal {\n open: boolean;\n closeModalAndRefresh: (update: boolean) => any;\n namespace: string;\n idTenant: string;\n}\n\nconst UpdateTenantModal = ({\n open,\n closeModalAndRefresh,\n namespace,\n idTenant,\n}: IUpdateTenantModal) => {\n const dispatch = useAppDispatch();\n const [isSending, setIsSending] = useState(false);\n const [minioImage, setMinioImage] = useState(\"\");\n const [imageRegistry, setImageRegistry] = useState(false);\n const [imageRegistryEndpoint, setImageRegistryEndpoint] =\n useState(\"\");\n const [imageRegistryUsername, setImageRegistryUsername] =\n useState(\"\");\n const [imageRegistryPassword, setImageRegistryPassword] =\n useState(\"\");\n const [validMinioImage, setValidMinioImage] = useState(true);\n\n const validateImage = useCallback(\n (fieldToCheck: string) => {\n const pattern = new RegExp(\"^$|^((.*?)/(.*?):(.+))$\");\n\n switch (fieldToCheck) {\n case \"minioImage\":\n setValidMinioImage(pattern.test(minioImage));\n break;\n }\n },\n [minioImage],\n );\n\n useEffect(() => {\n validateImage(\"minioImage\");\n }, [minioImage, validateImage]);\n\n const closeAction = () => {\n closeModalAndRefresh(false);\n };\n\n const resetForm = () => {\n setMinioImage(\"\");\n setImageRegistry(false);\n setImageRegistryEndpoint(\"\");\n setImageRegistryUsername(\"\");\n setImageRegistryPassword(\"\");\n };\n\n const updateMinIOImage = () => {\n setIsSending(true);\n\n let payload = {\n image: minioImage,\n };\n\n if (imageRegistry) {\n const registry: any = {\n image_registry: {\n registry: imageRegistryEndpoint,\n username: imageRegistryUsername,\n password: imageRegistryPassword,\n },\n };\n payload = {\n ...payload,\n ...registry,\n };\n }\n\n api\n .invoke(\n \"PUT\",\n `/api/v1/namespaces/${namespace}/tenants/${idTenant}`,\n payload,\n )\n .then(() => {\n setIsSending(false);\n dispatch(setSnackBarMessage(`Image updated successfully`));\n closeModalAndRefresh(true);\n })\n .catch((error: ErrorResponseHandler) => {\n dispatch(setModalErrorSnackMessage(error));\n setIsSending(false);\n });\n };\n\n return (\n \n \n \n \n Please enter the MinIO image from dockerhub to use. If blank, then\n latest build will be used.\n \n
\n {\n setMinioImage(e.target.value);\n }}\n />\n ) => {\n setImageRegistry(!imageRegistry);\n }}\n label={\"Set Custom Image Registry\"}\n indicatorLabels={[\"Yes\", \"No\"]}\n />\n {imageRegistry && (\n \n {\n setImageRegistryEndpoint(e.target.value);\n }}\n />\n {\n setImageRegistryUsername(e.target.value);\n }}\n />\n {\n setImageRegistryPassword(e.target.value);\n }}\n />\n \n )}\n \n \n \n \n \n
\n \n );\n};\n\nexport default UpdateTenantModal;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport {\n CircleIcon,\n Loader,\n ValuePair,\n Grid,\n Box,\n breakPoints,\n InformativeMessage,\n} from \"mds\";\nimport get from \"lodash/get\";\nimport styled from \"styled-components\";\nimport { CapacityValues, ValueUnit } from \"../../Tenants/ListTenants/types\";\nimport { niceBytes, niceBytesInt } from \"../../../../common/utils\";\nimport { Tenant } from \"../../../../api/operatorApi\";\nimport TenantCapacity from \"../../Tenants/ListTenants/TenantCapacity\";\n\ninterface ISummaryUsageBar {\n tenant: Tenant;\n label: string;\n error: string;\n loading: boolean;\n labels?: boolean;\n healthStatus?: string;\n}\n\nconst TenantCapacityMain = styled.div(({ theme }) => ({\n width: \"100%\",\n \"& .tenantStatus\": {\n marginTop: 2,\n color: get(theme, \"signalColors.disabled\", \"#E6EBEB\"),\n \"& .min-icon\": {\n width: 16,\n height: 16,\n marginRight: 4,\n },\n \"&.red\": {\n color: get(theme, \"signalColors.danger\", \"#C51B3F\"),\n },\n \"&.yellow\": {\n color: get(theme, \"signalColors.warning\", \"#FFBD62\"),\n },\n \"&.green\": {\n color: get(theme, \"signalColors.good\", \"#4CCB92\"),\n },\n },\n}));\n\nconst SummaryUsageBar = ({\n tenant,\n healthStatus,\n loading,\n error,\n}: ISummaryUsageBar) => {\n let raw: ValueUnit = { value: \"n/a\", unit: \"\" };\n let capacity: ValueUnit = { value: \"n/a\", unit: \"\" };\n let used: ValueUnit = { value: \"n/a\", unit: \"\" };\n let localUse: ValueUnit = { value: \"n/a\", unit: \"\" };\n let tieredUse: ValueUnit = { value: \"n/a\", unit: \"\" };\n\n if (tenant.status?.usage?.raw) {\n const b = niceBytes(`${tenant.status.usage.raw}`, true);\n const parts = b.split(\" \");\n raw.value = parts[0];\n raw.unit = parts[1];\n }\n if (tenant.status?.usage?.capacity) {\n const b = niceBytes(`${tenant.status.usage.capacity}`, true);\n const parts = b.split(\" \");\n capacity.value = parts[0];\n capacity.unit = parts[1];\n }\n if (tenant.status?.usage?.capacity_usage) {\n const b = niceBytesInt(tenant.status.usage.capacity_usage, true);\n const parts = b.split(\" \");\n used.value = parts[0];\n used.unit = parts[1];\n }\n\n let spaceVariants: CapacityValues[] = [];\n if (!tenant.tiers || tenant.tiers.length === 0) {\n spaceVariants = [\n { value: tenant.status?.usage?.capacity_usage || 0, variant: \"STANDARD\" },\n ];\n } else {\n spaceVariants = tenant.tiers.map((itemTenant) => {\n return { value: itemTenant.size!, variant: itemTenant.name! };\n });\n let internalUsage = tenant.tiers\n .filter((itemTenant) => {\n return itemTenant.type === \"internal\";\n })\n .reduce((sum, itemTenant) => sum + itemTenant.size!, 0);\n let tieredUsage = tenant.tiers\n .filter((itemTenant) => {\n return itemTenant.type !== \"internal\";\n })\n .reduce((sum, itemTenant) => sum + itemTenant.size!, 0);\n\n const t = niceBytesInt(tieredUsage, true);\n const parts = t.split(\" \");\n tieredUse.value = parts[0];\n tieredUse.unit = parts[1];\n\n const is = niceBytesInt(internalUsage, true);\n const partsInternal = is.split(\" \");\n localUse.value = partsInternal[0];\n localUse.unit = partsInternal[1];\n }\n\n const renderComponent = () => {\n if (!loading) {\n return error !== \"\" ? (\n \n ) : (\n \n \n \n {(!tenant.tiers || tenant.tiers.length === 0) && (\n \n \n \n )}\n {tenant.tiers && tenant.tiers.length > 0 && (\n \n \n \n \n )}\n {healthStatus && (\n \n \n \n }\n />\n )}\n \n \n );\n }\n\n return null;\n };\n\n return (\n \n {loading && (\n
\n \n \n \n
\n )}\n {renderComponent()}\n
\n );\n};\n\nexport default SummaryUsageBar;\n","// This file is part of MinIO Operator\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport {\n AddIcon,\n Box,\n Button,\n FormLayout,\n IconButton,\n InputBox,\n RemoveIcon,\n} from \"mds\";\nimport { modalStyleUtils } from \"../../Common/FormComponents/common/styleLibrary\";\nimport {\n ErrorResponseHandler,\n IDomainsRequest,\n} from \"../../../../common/types\";\nimport {\n setModalErrorSnackMessage,\n setSnackBarMessage,\n} from \"../../../../systemSlice\";\nimport { useAppDispatch } from \"../../../../store\";\nimport ModalWrapper from \"../../Common/ModalWrapper/ModalWrapper\";\nimport api from \"../../../../common/api\";\n\ninterface IEditDomains {\n open: boolean;\n closeModalAndRefresh: (update: boolean) => any;\n namespace: string;\n idTenant: string;\n domains: IDomainsRequest | null;\n}\n\nconst EditDomains = ({\n open,\n closeModalAndRefresh,\n namespace,\n idTenant,\n domains,\n}: IEditDomains) => {\n const dispatch = useAppDispatch();\n const [isSending, setIsSending] = useState(false);\n const [consoleDomain, setConsoleDomain] = useState(\"\");\n const [minioDomains, setMinioDomains] = useState([\"\"]);\n const [consoleDomainValid, setConsoleDomainValid] = useState(true);\n const [minioDomainValid, setMinioDomainValid] = useState([true]);\n\n useEffect(() => {\n if (domains) {\n const consoleDomainSet = domains.console || \"\";\n setConsoleDomain(consoleDomainSet);\n\n if (consoleDomainSet !== \"\") {\n // We Validate console domain\n const consoleRegExp = new RegExp(\n /^(https?):\\/\\/([a-zA-Z0-9\\-.]+)(:[0-9]+)?(\\/[a-zA-Z0-9\\-./]*)?$/,\n );\n\n setConsoleDomainValid(consoleRegExp.test(consoleDomainSet));\n } else {\n setConsoleDomainValid(true);\n }\n\n if (domains.minio && domains.minio.length > 0) {\n setMinioDomains(domains.minio);\n\n const minioRegExp = new RegExp(\n /^(https?):\\/\\/([a-zA-Z0-9\\-.]+)(:[0-9]+)?$/,\n );\n\n const initialValidations = domains.minio.map((domain) => {\n if (domain.trim() !== \"\") {\n return minioRegExp.test(domain);\n } else {\n return true;\n }\n });\n\n setMinioDomainValid(initialValidations);\n }\n }\n }, [domains]);\n\n const closeAction = () => {\n closeModalAndRefresh(false);\n };\n\n const resetForm = () => {\n setConsoleDomain(\"\");\n setConsoleDomainValid(true);\n setMinioDomains([\"\"]);\n setMinioDomainValid([true]);\n };\n\n const updateDomainsList = () => {\n setIsSending(true);\n\n let payload = {\n domains: {\n console: consoleDomain,\n minio: minioDomains.filter((minioDomain) => minioDomain.trim() !== \"\"),\n },\n };\n api\n .invoke(\n \"PUT\",\n `/api/v1/namespaces/${namespace}/tenants/${idTenant}/domains`,\n payload,\n )\n .then(() => {\n setIsSending(false);\n dispatch(setSnackBarMessage(`Domains updated successfully`));\n closeModalAndRefresh(true);\n })\n .catch((error: ErrorResponseHandler) => {\n setIsSending(false);\n dispatch(setModalErrorSnackMessage(error));\n });\n };\n\n const updateMinIODomain = (value: string, index: number) => {\n const cloneDomains = [...minioDomains];\n cloneDomains[index] = value;\n\n setMinioDomains(cloneDomains);\n };\n\n const addNewMinIODomain = () => {\n const cloneDomains = [...minioDomains];\n const cloneValidations = [...minioDomainValid];\n\n cloneDomains.push(\"\");\n cloneValidations.push(true);\n\n setMinioDomains(cloneDomains);\n setMinioDomainValid(cloneValidations);\n };\n\n const removeMinIODomain = (removeIndex: number) => {\n const filteredDomains = minioDomains.filter(\n (_, index) => index !== removeIndex,\n );\n\n const filterValidations = minioDomainValid.filter(\n (_, index) => index !== removeIndex,\n );\n\n setMinioDomains(filteredDomains);\n setMinioDomainValid(filterValidations);\n };\n\n const setMinioDomainValidation = (domainValid: boolean, index: number) => {\n const cloneValidation = [...minioDomainValid];\n cloneValidation[index] = domainValid;\n\n setMinioDomainValid(cloneValidation);\n };\n return (\n \n \n \n ) => {\n setConsoleDomain(e.target.value);\n\n setConsoleDomainValid(e.target.validity.valid);\n }}\n label=\"Console Domain\"\n value={consoleDomain}\n placeholder={\"Eg. http://subdomain.domain:port/subpath1/subpath2\"}\n pattern={\n \"^(https?):\\\\/\\\\/([a-zA-Z0-9\\\\-.]+)(:[0-9]+)?(\\\\/[a-zA-Z0-9\\\\-.\\\\/]*)?$\"\n }\n error={\n !consoleDomainValid\n ? \"Domain format is incorrect (http|https://subdomain.domain:port/subpath1/subpath2)\"\n : \"\"\n }\n />\n

MinIO Domains

\n
\n {minioDomains.map((domain, index) => {\n return (\n \n ) => {\n updateMinIODomain(e.target.value, index);\n setMinioDomainValidation(e.target.validity.valid, index);\n }}\n label={`MinIO Domain ${index + 1}`}\n value={domain}\n placeholder={\"Eg. http://subdomain.domain\"}\n pattern={\"^(https?):\\\\/\\\\/([a-zA-Z0-9\\\\-.]+)(:[0-9]+)?$\"}\n error={\n !minioDomainValid[index]\n ? \"MinIO domain format is incorrect (http|https://subdomain.domain)\"\n : \"\"\n }\n />\n \n \n \n \n removeMinIODomain(index)}\n disabled={minioDomains.length <= 1}\n >\n \n \n \n \n );\n })}\n
\n
\n \n \n !domain).length > 0\n }\n onClick={updateDomainsList}\n label={\"Save\"}\n />\n \n
\n \n );\n};\n\nexport default EditDomains;\n","// This file is part of MinIO Operator\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport {\n ActionLink,\n Box,\n Button,\n DisableIcon,\n EditIcon,\n Grid,\n SectionTitle,\n TierOnlineIcon,\n ValuePair,\n} from \"mds\";\nimport get from \"lodash/get\";\nimport styled from \"styled-components\";\nimport UpdateTenantModal from \"./UpdateTenantModal\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport { useParams } from \"react-router-dom\";\nimport { getTenantAsync } from \"../thunks/tenantDetailsAsync\";\nimport { Tenant } from \"../../../../api/operatorApi\";\nimport SummaryUsageBar from \"../../Common/UsageBarWrapper/SummaryUsageBar\";\nimport EditDomains from \"./EditDomains\";\n\nconst SummaryMain = styled.div(({ theme }) => ({\n \"& .linkedSection\": {\n color: get(theme, \"linkColor\", \"#2781B0\"),\n fontFamily: \"'Inter', sans-serif\",\n },\n \"& .autoGeneratedLink\": {\n fontStyle: \"italic\",\n },\n}));\n\nconst StorageSummary = ({ tenant }: { tenant: Tenant | null }) => {\n if (!tenant) {\n return null;\n }\n\n return (\n \n );\n};\n\nconst getToggle = (toggleValue: boolean, idPrefix = \"\") => {\n if (toggleValue) {\n return ;\n }\n return ;\n};\n\nconst featureRowStyle = {\n display: \"flex\",\n justifyContent: \"space-between\",\n marginTop: \"10px\",\n \"@media (max-width: 600px)\": {\n flexFlow: \"column\",\n },\n};\n\nconst TenantSummary = () => {\n const dispatch = useAppDispatch();\n const { tenantName, tenantNamespace } = useParams();\n\n const tenant = useSelector((state: AppState) => state.tenants.tenantInfo);\n const encryptionEnabled = useSelector((state: AppState) =>\n get(state.tenants.tenantInfo, \"encryptionEnabled\", false),\n );\n const minioTLS = useSelector((state: AppState) =>\n get(state.tenants.tenantInfo, \"minioTLS\", false),\n );\n const adEnabled = useSelector((state: AppState) =>\n get(state.tenants.tenantInfo, \"idpAdEnabled\", false),\n );\n const oidcEnabled = useSelector((state: AppState) =>\n get(state.tenants.tenantInfo, \"idpOidcEnabled\", false),\n );\n\n const [poolCount, setPoolCount] = useState(0);\n const [instances, setInstances] = useState(0);\n const [volumes, setVolumes] = useState(0);\n const [updateMinioVersion, setUpdateMinioVersion] = useState(false);\n const [editDomainsOpen, setEditDomainsOpen] = useState(false);\n\n useEffect(() => {\n if (tenant) {\n setPoolCount(tenant?.pools?.length || 0);\n setVolumes(\n tenant.pools?.reduce(\n (sum, p) => sum + p.volumes_per_server * p.servers,\n 0,\n ) || 0,\n );\n setInstances(tenant.pools?.reduce((sum, p) => sum + p.servers, 0) || 0);\n }\n }, [tenant]);\n\n const closeEditDomainsModal = (refresh: boolean) => {\n setEditDomainsOpen(false);\n if (refresh) {\n dispatch(getTenantAsync());\n }\n };\n\n return (\n \n {updateMinioVersion && (\n {\n setUpdateMinioVersion(false);\n if (refresh) {\n dispatch(getTenantAsync());\n }\n }}\n idTenant={tenantName || \"\"}\n namespace={tenantNamespace || \"\"}\n />\n )}\n\n {editDomainsOpen && (\n \n )}\n\n Details\n \n \n \n \n \n \n \n \n {\n setUpdateMinioVersion(true);\n }}\n >\n {tenant ? tenant.image : \"\"}\n \n }\n />\n \n \n

\n Domains\n }\n onClick={() => {\n setEditDomainsOpen(true);\n }}\n />\n

\n
\n \n \n {(!tenant?.domains?.console ||\n tenant?.domains?.console === \"\") &&\n !tenant?.endpoints?.console\n ? \"-\"\n : \"\"}\n\n {tenant?.endpoints?.console && (\n \n \n {tenant?.endpoints?.console || \"-\"}\n \n
\n
\n )}\n\n {tenant?.domains?.console &&\n tenant?.domains?.console !== \"\" && (\n \n {tenant?.domains?.console || \"\"}\n \n )}\n
\n }\n />\n \n \n \n {!tenant?.domains?.minio && !tenant?.endpoints?.minio\n ? \"-\"\n : \"\"}\n {tenant?.endpoints?.minio && (\n \n \n {tenant?.endpoints?.minio || \"-\"}\n \n
\n
\n )}\n\n {tenant?.domains?.minio &&\n tenant.domains.minio.map((domain) => {\n return (\n \n \n {domain}\n \n
\n
\n );\n })}\n \n }\n />\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n Features\n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default TenantSummary;\n"],"names":["actionsTray","label","color","fontSize","alignSelf","whiteSpace","marginLeft","display","justifyContent","marginBottom","alignItems","flexGrow","modalStyleUtils","modalButtonBar","marginTop","marginRight","modalFormScrollable","maxHeight","overflowY","paddingTop","_ref","onClose","modalOpen","title","children","wideLimit","titleIcon","iconColor","sx","dispatch","useAppDispatch","openSnackbar","setOpenSnackbar","useState","modalSnackMessage","useSelector","state","system","modalSnackBar","useEffect","setModalSnackMessage","message","type","detailedErrorMsg","length","_jsxs","ModalBox","open","widthLimit","_jsx","MainError","isModal","Snackbar","closeSnackBar","mode","variant","autoHideDuration","condensed","totalValue","sizeItems","bgColor","style","width","height","backgroundColor","borderRadius","transitionDuration","overflow","map","sizeElement","index","itemPercentage","value","concat","toString","totalCapacity","usedSpaceVariants","statusClass","render","colors","theme","useTheme","BGColor","get","totalUsedSpace","reduce","acc","currValue","emptySpace","tiersList","standardTier","find","tier","filter","standardTierColor","usedPercentage","plotValues","plotValuesForUsageBar","plotVal","itemName","UsageBar","position","right","top","zIndex","className","CircleIcon","border","left","transform","fontWeight","isNaN","niceBytesInt","PieChart","Pie","data","cx","cy","dataKey","outerRadius","innerRadius","fill","isAnimationActive","stroke","entry","Cell","closeModalAndRefresh","namespace","idTenant","isSending","setIsSending","minioImage","setMinioImage","imageRegistry","setImageRegistry","imageRegistryEndpoint","setImageRegistryEndpoint","imageRegistryUsername","setImageRegistryUsername","imageRegistryPassword","setImageRegistryPassword","validMinioImage","setValidMinioImage","validateImage","useCallback","fieldToCheck","pattern","RegExp","test","ModalWrapper","closeAction","FormLayout","withBorders","containerPadding","Box","InputBox","id","name","placeholder","onChange","e","target","Switch","checked","indicatorLabels","Fragment","Button","onClick","resetForm","disabled","trim","updateMinIOImage","payload","image","registry","image_registry","username","password","api","invoke","then","setSnackBarMessage","catch","error","setModalErrorSnackMessage","TenantCapacityMain","styled","div","_ref2","_tenant$status","_tenant$status$usage","_tenant$status2","_tenant$status2$usage","_tenant$status3","_tenant$status3$usage","tenant","healthStatus","loading","raw","unit","capacity","used","localUse","tieredUse","status","usage","parts","niceBytes","split","capacity_usage","spaceVariants","tiers","itemTenant","size","internalUsage","sum","tieredUsage","partsInternal","_tenant$status4","_tenant$status4$usage","React","padding","Grid","item","xs","textAlign","Loader","renderComponent","_tenant$status5","_tenant$status5$usage","InformativeMessage","TenantCapacity","margin","flexDirection","gap","breakPoints","sm","md","ValuePair","direction","domains","consoleDomain","setConsoleDomain","minioDomains","setMinioDomains","consoleDomainValid","setConsoleDomainValid","minioDomainValid","setMinioDomainValid","consoleDomainSet","console","consoleRegExp","minio","minioRegExp","initialValidations","domain","addNewMinIODomain","cloneDomains","cloneValidations","push","validity","valid","updateMinIODomain","setMinioDomainValidation","domainValid","cloneValidation","IconButton","AddIcon","removeIndex","filteredDomains","_","filterValidations","removeMinIODomain","RemoveIcon","updateDomainsList","minioDomain","SummaryMain","fontFamily","fontStyle","StorageSummary","SummaryUsageBar","health_status","getToggle","toggleValue","TierOnlineIcon","DisableIcon","featureRowStyle","flexFlow","TenantSummary","_tenant$domains","_tenant$domains2","_tenant$endpoints","_tenant$endpoints2","_tenant$endpoints3","_tenant$endpoints4","_tenant$domains3","_tenant$domains4","_tenant$domains5","_tenant$domains6","_tenant$endpoints5","_tenant$endpoints6","_tenant$domains7","_tenant$endpoints7","_tenant$endpoints8","_tenant$endpoints9","_tenant$endpoints10","_tenant$domains8","_tenant$status6","_tenant$status7","tenantName","tenantNamespace","useParams","tenants","tenantInfo","encryptionEnabled","minioTLS","adEnabled","oidcEnabled","poolCount","setPoolCount","instances","setInstances","volumes","setVolumes","updateMinioVersion","setUpdateMinioVersion","editDomainsOpen","setEditDomainsOpen","_tenant$pools","_tenant$pools2","_tenant$pools3","pools","p","volumes_per_server","servers","UpdateTenantModal","refresh","getTenantAsync","EditDomains","SectionTitle","separator","container","currentState","ActionLink","textOverflow","wordBreak","icon","EditIcon","endpoints","href","rel","write_quorum","drives_online","drives_offline"],"sourceRoot":""} \ No newline at end of file diff --git a/web-app/build/static/js/main.bbc673b5.js b/web-app/build/static/js/main.bbc673b5.js deleted file mode 100644 index 22a1a6dc304..00000000000 --- a/web-app/build/static/js/main.bbc673b5.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! For license information please see main.bbc673b5.js.LICENSE.txt */ -(()=>{var e={7984:(e,t,n)=>{"use strict";n.d(t,{F:()=>o});let r=function(e){return e.Json="application/json",e.FormData="multipart/form-data",e.UrlEncoded="application/x-www-form-urlencoded",e.Text="text/plain",e}({});class a{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.baseUrl="/api/v1",this.securityData=null,this.securityWorker=void 0,this.abortControllers=new Map,this.customFetch=function(){return fetch(...arguments)},this.baseApiParams={credentials:"same-origin",headers:{},redirect:"follow",referrerPolicy:"no-referrer"},this.setSecurityData=e=>{this.securityData=e},this.contentFormatters={[r.Json]:e=>null===e||"object"!==typeof e&&"string"!==typeof e?e:JSON.stringify(e),[r.Text]:e=>null!==e&&"string"!==typeof e?JSON.stringify(e):e,[r.FormData]:e=>Object.keys(e||{}).reduce(((t,n)=>{const r=e[n];return t.append(n,r instanceof Blob?r:"object"===typeof r&&null!==r?JSON.stringify(r):"".concat(r)),t}),new FormData),[r.UrlEncoded]:e=>this.toQueryString(e)},this.createAbortSignal=e=>{if(this.abortControllers.has(e)){const t=this.abortControllers.get(e);return t?t.signal:void 0}const t=new AbortController;return this.abortControllers.set(e,t),t.signal},this.abortRequest=e=>{const t=this.abortControllers.get(e);t&&(t.abort(),this.abortControllers.delete(e))},this.request=async e=>{let{body:t,secure:n,path:a,type:o,query:i,format:s,baseUrl:l,cancelToken:c,...u}=e;const d=("boolean"===typeof n?n:this.baseApiParams.secure)&&this.securityWorker&&await this.securityWorker(this.securityData)||{},p=this.mergeRequestParams(u,d),m=i&&this.toQueryString(i),f=this.contentFormatters[o||r.Json],h=s||p.format;return this.customFetch("".concat(l||this.baseUrl||"").concat(a).concat(m?"?".concat(m):""),{...p,headers:{...p.headers||{},...o&&o!==r.FormData?{"Content-Type":o}:{}},signal:(c?this.createAbortSignal(c):p.signal)||null,body:"undefined"===typeof t||null===t?null:f(t)}).then((async e=>{const t=e;t.data=null,t.error=null;const n=h?await e[h]().then((e=>(t.ok?t.data=e:t.error=e,t))).catch((e=>(t.error=e,t))):t;if(c&&this.abortControllers.delete(c),!e.ok)throw n;return n}))},Object.assign(this,e)}encodeQueryParam(e,t){const n=encodeURIComponent(e);return"".concat(n,"=").concat(encodeURIComponent("number"===typeof t?t:"".concat(t)))}addQueryParam(e,t){return this.encodeQueryParam(t,e[t])}addArrayQueryParam(e,t){return e[t].map((e=>this.encodeQueryParam(t,e))).join("&")}toQueryString(e){const t=e||{};return Object.keys(t).filter((e=>"undefined"!==typeof t[e])).map((e=>Array.isArray(t[e])?this.addArrayQueryParam(t,e):this.addQueryParam(t,e))).join("&")}addQueryParams(e){const t=this.toQueryString(e);return t?"?".concat(t):""}mergeRequestParams(e,t){return{...this.baseApiParams,...e,...t||{},headers:{...this.baseApiParams.headers||{},...e.headers||{},...t&&t.headers||{}}}}}let o=new class extends a{constructor(){var e;super(...arguments),e=this,this.login={loginDetail:function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.request({path:"/login",method:"GET",format:"json",...t})},loginOperator:function(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.request({path:"/login/operator",method:"POST",body:t,type:r.Json,...n})},loginOauth2Auth:function(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.request({path:"/login/oauth2/auth",method:"POST",body:t,type:r.Json,...n})}},this.logout={logout:function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.request({path:"/logout",method:"POST",secure:!0,...t})}},this.session={sessionCheck:function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.request({path:"/session",method:"GET",secure:!0,format:"json",...t})}},this.checkVersion={checkMinIoVersion:function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.request({path:"/check-version",method:"GET",format:"json",...t})}},this.subscription={subscriptionInfo:function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.request({path:"/subscription/info",method:"GET",secure:!0,format:"json",...t})},subscriptionValidate:function(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.request({path:"/subscription/validate",method:"POST",body:t,secure:!0,type:r.Json,format:"json",...n})},subscriptionRefresh:function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.request({path:"/subscription/refresh",method:"POST",secure:!0,format:"json",...t})},subscriptionActivate:function(t,n){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return e.request({path:"/subscription/namespaces/".concat(t,"/tenants/").concat(n,"/activate"),method:"POST",secure:!0,...r})}},this.tenants={listAllTenants:function(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.request({path:"/tenants",method:"GET",query:t,secure:!0,format:"json",...n})},createTenant:function(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.request({path:"/tenants",method:"POST",body:t,secure:!0,type:r.Json,format:"json",...n})}},this.namespace={createNamespace:function(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.request({path:"/namespace",method:"POST",body:t,secure:!0,type:r.Json,...n})}},this.namespaces={listTenants:function(t,n){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return e.request({path:"/namespaces/".concat(t,"/tenants"),method:"GET",query:n,secure:!0,format:"json",...r})},listTenantCertificateSigningRequest:function(t,n){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return e.request({path:"/namespaces/".concat(t,"/tenants/").concat(n,"/csr"),method:"GET",secure:!0,format:"json",...r})},tenantIdentityProvider:function(t,n){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return e.request({path:"/namespaces/".concat(t,"/tenants/").concat(n,"/identity-provider"),method:"GET",secure:!0,format:"json",...r})},updateTenantIdentityProvider:function(t,n,a){let o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return e.request({path:"/namespaces/".concat(t,"/tenants/").concat(n,"/identity-provider"),method:"POST",body:a,secure:!0,type:r.Json,...o})},setTenantAdministrators:function(t,n,a){let o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return e.request({path:"/namespaces/".concat(t,"/tenants/").concat(n,"/set-administrators"),method:"POST",body:a,secure:!0,type:r.Json,...o})},tenantConfiguration:function(t,n){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return e.request({path:"/namespaces/".concat(t,"/tenants/").concat(n,"/configuration"),method:"GET",secure:!0,format:"json",...r})},updateTenantConfiguration:function(t,n,a){let o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return e.request({path:"/namespaces/".concat(t,"/tenants/").concat(n,"/configuration"),method:"PATCH",body:a,secure:!0,type:r.Json,...o})},tenantSecurity:function(t,n){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return e.request({path:"/namespaces/".concat(t,"/tenants/").concat(n,"/security"),method:"GET",secure:!0,format:"json",...r})},updateTenantSecurity:function(t,n,a){let o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return e.request({path:"/namespaces/".concat(t,"/tenants/").concat(n,"/security"),method:"POST",body:a,secure:!0,type:r.Json,...o})},tenantDetails:function(t,n){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return e.request({path:"/namespaces/".concat(t,"/tenants/").concat(n),method:"GET",secure:!0,format:"json",...r})},deleteTenant:function(t,n,a){let o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return e.request({path:"/namespaces/".concat(t,"/tenants/").concat(n),method:"DELETE",body:a,secure:!0,type:r.Json,...o})},updateTenant:function(t,n,a){let o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return e.request({path:"/namespaces/".concat(t,"/tenants/").concat(n),method:"PUT",body:a,secure:!0,type:r.Json,...o})},tenantAddPool:function(t,n,a){let o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return e.request({path:"/namespaces/".concat(t,"/tenants/").concat(n,"/pools"),method:"POST",body:a,secure:!0,type:r.Json,...o})},tenantUpdatePools:function(t,n,a){let o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return e.request({path:"/namespaces/".concat(t,"/tenants/").concat(n,"/pools"),method:"PUT",body:a,secure:!0,type:r.Json,format:"json",...o})},listPvCsForTenant:function(t,n){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return e.request({path:"/namespaces/".concat(t,"/tenants/").concat(n,"/pvcs"),method:"GET",secure:!0,format:"json",...r})},getTenantUsage:function(t,n){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return e.request({path:"/namespaces/".concat(t,"/tenants/").concat(n,"/usage"),method:"GET",secure:!0,format:"json",...r})},getTenantPods:function(t,n){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return e.request({path:"/namespaces/".concat(t,"/tenants/").concat(n,"/pods"),method:"GET",secure:!0,format:"json",...r})},getTenantEvents:function(t,n){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return e.request({path:"/namespaces/".concat(t,"/tenants/").concat(n,"/events"),method:"GET",secure:!0,format:"json",...r})},getTenantLogReport:function(t,n){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return e.request({path:"/namespaces/".concat(t,"/tenants/").concat(n,"/log-report"),method:"GET",secure:!0,format:"json",...r})},getPodLogs:function(t,n,r){let a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return e.request({path:"/namespaces/".concat(t,"/tenants/").concat(n,"/pods/").concat(r),method:"GET",secure:!0,format:"json",...a})},deletePod:function(t,n,r){let a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return e.request({path:"/namespaces/".concat(t,"/tenants/").concat(n,"/pods/").concat(r),method:"DELETE",secure:!0,...a})},getPodEvents:function(t,n,r){let a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return e.request({path:"/namespaces/".concat(t,"/tenants/").concat(n,"/pods/").concat(r,"/events"),method:"GET",secure:!0,format:"json",...a})},describePod:function(t,n,r){let a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return e.request({path:"/namespaces/".concat(t,"/tenants/").concat(n,"/pods/").concat(r,"/describe"),method:"GET",secure:!0,format:"json",...a})},tenantUpdateCertificate:function(t,n,a){let o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return e.request({path:"/namespaces/".concat(t,"/tenants/").concat(n,"/certificates"),method:"PUT",body:a,secure:!0,type:r.Json,...o})},tenantDeleteEncryption:function(t,n){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return e.request({path:"/namespaces/".concat(t,"/tenants/").concat(n,"/encryption"),method:"DELETE",secure:!0,...r})},tenantUpdateEncryption:function(t,n,a){let o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return e.request({path:"/namespaces/".concat(t,"/tenants/").concat(n,"/encryption"),method:"PUT",body:a,secure:!0,type:r.Json,...o})},tenantEncryptionInfo:function(t,n){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return e.request({path:"/namespaces/".concat(t,"/tenants/").concat(n,"/encryption"),method:"GET",secure:!0,format:"json",...r})},getTenantYaml:function(t,n){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return e.request({path:"/namespaces/".concat(t,"/tenants/").concat(n,"/yaml"),method:"GET",secure:!0,format:"json",...r})},putTenantYaml:function(t,n,a){let o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return e.request({path:"/namespaces/".concat(t,"/tenants/").concat(n,"/yaml"),method:"PUT",body:a,secure:!0,type:r.Json,...o})},updateTenantDomains:function(t,n,a){let o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return e.request({path:"/namespaces/".concat(t,"/tenants/").concat(n,"/domains"),method:"PUT",body:a,secure:!0,type:r.Json,...o})},getResourceQuota:function(t,n){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return e.request({path:"/namespaces/".concat(t,"/resourcequotas/").concat(n),method:"GET",secure:!0,format:"json",...r})},deletePvc:function(t,n,r){let a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return e.request({path:"/namespaces/".concat(t,"/tenants/").concat(n,"/pvc/").concat(r),method:"DELETE",secure:!0,...a})},getPvcEvents:function(t,n,r){let a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return e.request({path:"/namespaces/".concat(t,"/tenants/").concat(n,"/pvcs/").concat(r,"/events"),method:"GET",secure:!0,format:"json",...a})},getPvcDescribe:function(t,n,r){let a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return e.request({path:"/namespaces/".concat(t,"/tenants/").concat(n,"/pvcs/").concat(r,"/describe"),method:"GET",secure:!0,format:"json",...a})}},this.cluster={getMaxAllocatableMem:function(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.request({path:"/cluster/max-allocatable-memory",method:"GET",query:t,secure:!0,format:"json",...n})},getAllocatableResources:function(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.request({path:"/cluster/allocatable-resources",method:"GET",query:t,secure:!0,format:"json",...n})}},this.getParity={getParity:function(t,n){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return e.request({path:"/get-parity/".concat(t,"/").concat(n),method:"GET",secure:!0,format:"json",...r})}},this.listPvcs={listPvCs:function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.request({path:"/list-pvcs",method:"GET",secure:!0,format:"json",...t})}},this.mpIntegration={getMpIntegration:function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.request({path:"/mp-integration",method:"GET",secure:!0,format:"json",...t})},postMpIntegration:function(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.request({path:"/mp-integration",method:"POST",body:t,secure:!0,type:r.Json,...n})}},this.nodes={listNodeLabels:function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.request({path:"/nodes/labels",method:"GET",secure:!0,format:"json",...t})}},this.subnet={operatorSubnetLogin:function(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.request({path:"/subnet/login",method:"POST",body:t,secure:!0,type:r.Json,format:"json",...n})},operatorSubnetLoginMfa:function(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.request({path:"/subnet/login/mfa",method:"POST",body:t,secure:!0,type:r.Json,format:"json",...n})},operatorSubnetApiKey:function(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.request({path:"/subnet/apikey",method:"GET",query:t,secure:!0,format:"json",...n})},operatorSubnetRegisterApiKey:function(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.request({path:"/subnet/apikey/register",method:"POST",body:t,secure:!0,type:r.Json,format:"json",...n})},operatorSubnetApiKeyInfo:function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.request({path:"/subnet/apikey/info",method:"GET",secure:!0,format:"json",...t})}}}};const i=o.request;function s(e){const t=e.error;return t&&403===t.code&&"invalid session"===t.message&&(document.location="/"),e}o.baseUrl="".concat(new URL(document.baseURI).pathname,"api/v1"),o.request=async e=>{let{body:t,secure:n,path:r,type:a,query:o,format:l,baseUrl:c,cancelToken:u,...d}=e;return i({body:t,secure:n,path:r,type:a,query:o,format:l,baseUrl:c,cancelToken:u,...d}).then(s)}},685:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});n(5043);var r=n(9923),a=n(579);const o=()=>(0,a.jsx)(r.xA9,{container:!0,sx:{height:"100vh",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center"},children:(0,a.jsx)(r.xA9,{item:!0,xs:3,sx:{display:"flex",justifyContent:"center",alignItems:"center"},children:(0,a.jsx)(r.aHM,{style:{width:35,height:35}})})})},9161:(e,t,n)=>{"use strict";n.d(t,{Ms:()=>d,OV:()=>s,g:()=>u,zZ:()=>l});const r="BUCKET_OWNER",a="BUCKET_VIEWER",o="BUCKET_ADMIN",i="BUCKET_LIFECYCLE",s={S3_STAR_BUCKET:"s3:*Bucket",S3_LIST_BUCKET:"s3:ListBucket",S3_ALL_LIST_BUCKET:"s3:List*",S3_GET_BUCKET_POLICY:"s3:GetBucketPolicy",S3_PUT_BUCKET_POLICY:"s3:PutBucketPolicy",S3_GET_OBJECT:"s3:GetObject",S3_PUT_OBJECT:"s3:PutObject",S3_GET_ACTIONS:"s3:Get*",S3_PUT_ACTIONS:"s3:Put*",S3_GET_OBJECT_LEGAL_HOLD:"s3:GetObjectLegalHold",S3_PUT_OBJECT_LEGAL_HOLD:"s3:PutObjectLegalHold",S3_DELETE_OBJECT:"s3:DeleteObject",S3_GET_BUCKET_VERSIONING:"s3:GetBucketVersioning",S3_PUT_BUCKET_VERSIONING:"s3:PutBucketVersioning",S3_GET_OBJECT_RETENTION:"s3:GetObjectRetention",S3_PUT_OBJECT_RETENTION:"s3:PutObjectRetention",S3_GET_OBJECT_TAGGING:"s3:GetObjectTagging",S3_PUT_OBJECT_TAGGING:"s3:PutObjectTagging",S3_DELETE_OBJECT_TAGGING:"s3:DeleteObjectTagging",S3_GET_BUCKET_ENCRYPTION_CONFIGURATION:"s3:GetEncryptionConfiguration",S3_PUT_BUCKET_ENCRYPTION_CONFIGURATION:"s3:PutEncryptionConfiguration",S3_CREATE_BUCKET:"s3:CreateBucket",S3_DELETE_BUCKET:"s3:DeleteBucket",S3_FORCE_DELETE_BUCKET:"s3:ForceDeleteBucket",S3_GET_BUCKET_NOTIFICATIONS:"s3:GetBucketNotification",S3_LISTEN_BUCKET_NOTIFICATIONS:"s3:ListenBucketNotification",S3_PUT_BUCKET_NOTIFICATIONS:"s3:PutBucketNotification",S3_GET_REPLICATION_CONFIGURATION:"s3:GetReplicationConfiguration",S3_PUT_REPLICATION_CONFIGURATION:"s3:PutReplicationConfiguration",S3_GET_LIFECYCLE_CONFIGURATION:"s3:GetLifecycleConfiguration",S3_PUT_LIFECYCLE_CONFIGURATION:"s3:PutLifecycleConfiguration",S3_GET_BUCKET_OBJECT_LOCK_CONFIGURATION:"s3:GetBucketObjectLockConfiguration",S3_PUT_BUCKET_OBJECT_LOCK_CONFIGURATION:"s3:PutBucketObjectLockConfiguration",ADMIN_GET_POLICY:"admin:GetPolicy",ADMIN_LIST_USERS:"admin:ListUsers",ADMIN_CREATE_USER:"admin:CreateUser",ADMIN_DELETE_USER:"admin:DeleteUser",ADMIN_ENABLE_USER:"admin:EnableUser",ADMIN_DISABLE_USER:"admin:DisableUser",ADMIN_GET_USER:"admin:GetUser",ADMIN_LIST_USER_POLICIES:"admin:ListUserPolicies",ADMIN_SERVER_INFO:"admin:ServerInfo",ADMIN_GET_BUCKET_QUOTA:"admin:GetBucketQuota",ADMIN_SET_BUCKET_QUOTA:"admin:SetBucketQuota",ADMIN_LIST_TIERS:"admin:ListTier",ADMIN_SET_TIER:"admin:SetTier",ADMIN_LIST_GROUPS:"admin:ListGroups",S3_GET_OBJECT_VERSION_FOR_REPLICATION:"s3:GetObjectVersionForReplication",S3_REPLICATE_TAGS:"s3:ReplicateTags",S3_REPLICATE_DELETE:"s3:ReplicateDelete",S3_REPLICATE_OBJECT:"s3:ReplicateObject",S3_PUT_OBJECT_VERSION_TAGGING:"s3:PutObjectVersionTagging",S3_DELETE_OBJECT_VERSION_TAGGING:"s3:DeleteObjectVersionTagging",S3_DELETE_OBJECT_VERSION:"s3:DeleteObjectVersion",S3_GET_OBJECT_VERSION_TAGGING:"s3:GetObjectVersionTagging",S3_GET_OBJECT_VERSION:"s3:GetObjectVersion",S3_PUT_BUCKET_TAGGING:"s3:PutBucketTagging",S3_GET_BUCKET_TAGGING:"s3:GetBucketTagging",S3_BYPASS_GOVERNANCE_RETENTION:"s3:BypassGovernanceRetention",S3_LIST_MULTIPART_UPLOAD_PARTS:"s3:ListMultipartUploadParts",S3_LISTEN_NOTIFICATIONS:"s3:ListenNotification",S3_LIST_BUCKET_MULTIPART_UPLOADS:"s3:ListBucketMultipartUploads",S3_LIST_BUCKET_VERSIONS:"s3:ListBucketVersions",S3_GET_BUCKET_POLICY_STATUS:"s3:GetBucketPolicyStatus",S3_LIST_ALL_MY_BUCKETS:"s3:ListAllMyBuckets",S3_HEAD_BUCKET:"s3:HeadBucket",S3_GET_BUCKET_LOCATION:"s3:GetBucketLocation",S3_DELETE_BUCKET_POLICY:"s3:DeleteBucketPolicy",S3_ABORT_MULTIPART_UPLOAD:"s3:AbortMultipartUpload",ADMIN_ADD_USER_TO_GROUP:"admin:AddUserToGroup",ADMIN_REMOVE_USER_FROM_GROUP:"admin:RemoveUserFromGroup",ADMIN_GET_GROUP:"admin:GetGroup",ADMIN_ENABLE_GROUP:"admin:EnableGroup",ADMIN_DISABLE_GROUP:"admin:DisableGroup",ADMIN_CREATE_POLICY:"admin:CreatePolicy",ADMIN_DELETE_POLICY:"admin:DeletePolicy",ADMIN_ATTACH_USER_OR_GROUP_POLICY:"admin:AttachUserOrGroupPolicy",ADMIN_CREATE_SERVICEACCOUNT:"admin:CreateServiceAccount",ADMIN_UPDATE_SERVICEACCOUNT:"admin:UpdateServiceAccount",ADMIN_REMOVE_SERVICEACCOUNT:"admin:RemoveServiceAccount",ADMIN_LIST_SERVICEACCOUNTS:"admin:ListServiceAccounts",ADMIN_CONFIG_UPDATE:"admin:ConfigUpdate",ADMIN_GET_CONSOLE_LOG:"admin:ConsoleLog",ADMIN_SERVER_TRACE:"admin:ServerTrace",ADMIN_HEALTH_INFO:"admin:OBDInfo",ADMIN_HEAL:"admin:Heal",ADMIN_INSPECT_DATA:"admin:InspectData",S3_ALL_ACTIONS:"s3:*",ADMIN_ALL_ACTIONS:"admin:*",KMS_ALL_ACTIONS:"kms:*",KMS_STATUS:"kms:Status",KMS_METRICS:"kms:Metrics",KMS_APIS:"kms:API",KMS_Version:"kms:Version",KMS_CREATE_KEY:"kms:CreateKey",KMS_DELETE_KEY:"kms:DeleteKey",KMS_LIST_KEYS:"kms:ListKeys",KMS_IMPORT_KEY:"kms:ImportKey",KMS_KEY_STATUS:"kms:KeyStatus",KMS_DESCRIBE_POLICY:"kms:DescribePolicy",KMS_ASSIGN_POLICY:"kms:AssignPolicy",KMS_DELETE_POLICY:"kms:DeletePolicy",KMS_SET_POLICY:"kms:SetPolicy",KMS_GET_POLICY:"kms:GetPolicy",KMS_LIST_POLICIES:"kms:ListPolicies",KMS_DESCRIBE_IDENTITY:"kms:DescribeIdentity",KMS_DESCRIBE_SELF_IDENTITY:"kms:DescribeSelfIdentity",KMS_DELETE_IDENTITY:"kms:DeleteIdentity",KMS_LIST_IDENTITIES:"kms:ListIdentities"},l={BUCKETS:"/buckets",ADD_BUCKETS:"add-bucket",BUCKETS_ADMIN_VIEW:":bucketName/admin/*",OBJECT_BROWSER_VIEW:"/browser",OBJECT_BROWSER_BUCKET_VIEW:"/browser/:bucketName",OBJECT_BROWSER_BUCKET_DETAILS_VIEW:"/browser/:bucketName/*",IDENTITY:"/identity",USERS:"/identity/users",USERS_VIEW:"/identity/users/:userName",USER_ADD:"/identity/users/add-user",GROUPS:"/identity/groups",GROUPS_ADD:"/identity/groups/create-group",GROUPS_VIEW:"/identity/groups/:groupName",ACCOUNT:"/access-keys",ACCOUNT_ADD:"/access-keys/new-account",USER_SA_ACCOUNT_ADD:"/identity/users/new-user-sa/:userName",IDP_LDAP_CONFIGURATIONS:"/identity/idp/ldap/configurations",IDP_LDAP_CONFIGURATIONS_VIEW:"/identity/idp/ldap/configurations/:idpName",IDP_LDAP_CONFIGURATIONS_ADD:"/identity/idp/ldap/configurations/add-idp",IDP_OPENID_CONFIGURATIONS:"/identity/idp/openid/configurations",IDP_OPENID_CONFIGURATIONS_VIEW:"/identity/idp/openid/configurations/:idpName",IDP_OPENID_CONFIGURATIONS_ADD:"/identity/idp/openid/configurations/add-idp",POLICIES:"/policies",POLICY_ADD:"/add-policy",POLICIES_VIEW:"/policies/*",TOOLS_LOGS:"/tools/logs",TOOLS_AUDITLOGS:"/tools/audit-logs",TOOLS_TRACE:"/tools/trace",DASHBOARD:"/tools/metrics",TOOLS_HEAL:"/tools/heal",TOOLS_WATCH:"/tools/watch",KMS:"/kms",KMS_STATUS:"/kms/status",KMS_KEYS:"/kms/keys",KMS_KEYS_ADD:"/kms/add-key/",KMS_KEYS_IMPORT:"/kms/import-key/",TOOLS:"/support",REGISTER_SUPPORT:"/support/register",TOOLS_DIAGNOSTICS:"/support/diagnostics",TOOLS_SPEEDTEST:"/support/speedtest",CALL_HOME:"/support/call-home",PROFILE:"/support/profile",SUPPORT_INSPECT:"/support/inspect",LICENSE:"/license",SETTINGS:"/settings/configurations",SETTINGS_VIEW:"/settings/configurations/:option",DOCUMENTATION:"/documentation",EVENT_DESTINATIONS:"/settings/event-destinations",EVENT_DESTINATIONS_ADD:"/settings/event-destinations/add",EVENT_DESTINATIONS_ADD_SERVICE:"/settings/event-destinations/add/:service",TIERS:"/settings/tiers",TIERS_ADD:"/settings/tiers/add",TIERS_ADD_SERVICE:"/settings/tiers/add/:service",SITE_REPLICATION:"/settings/site-replication",SITE_REPLICATION_STATUS:"/settings/site-replication/status",SITE_REPLICATION_ADD:"/settings/site-replication/add",TENANTS:"/tenants",TENANTS_ADD:"/tenants/add",NAMESPACE_TENANT:"/namespaces/:tenantNamespace/tenants/:tenantName",NAMESPACE_TENANT_HOP:"/namespaces/:tenantNamespace/tenants/:tenantName/hop",NAMESPACE_TENANT_PODS:"/namespaces/:tenantNamespace/tenants/:tenantName/pods/:podName",NAMESPACE_TENANT_PVCS:"/namespaces/:tenantNamespace/tenants/:tenantName/pvcs/:PVCName",NAMESPACE_TENANT_PODS_LIST:"/namespaces/:tenantNamespace/tenants/:tenantName/pods",NAMESPACE_TENANT_SUMMARY:"/namespaces/:tenantNamespace/tenants/:tenantName/summary",NAMESPACE_TENANT_METRICS:"/namespaces/:tenantNamespace/tenants/:tenantName/metrics",NAMESPACE_TENANT_TRACE:"/namespaces/:tenantNamespace/tenants/:tenantName/trace",NAMESPACE_TENANT_POOLS:"/namespaces/:tenantNamespace/tenants/:tenantName/pools",NAMESPACE_TENANT_POOLS_ADD:"/namespaces/:tenantNamespace/tenants/:tenantName/add-pool",NAMESPACE_TENANT_POOLS_EDIT:"/namespaces/:tenantNamespace/tenants/:tenantName/edit-pool",NAMESPACE_TENANT_VOLUMES:"/namespaces/:tenantNamespace/tenants/:tenantName/volumes",NAMESPACE_TENANT_LICENSE:"/namespaces/:tenantNamespace/tenants/:tenantName/license",NAMESPACE_TENANT_IDENTITY_PROVIDER:"/namespaces/:tenantNamespace/tenants/:tenantName/identity-provider",NAMESPACE_TENANT_SECURITY:"/namespaces/:tenantNamespace/tenants/:tenantName/security",NAMESPACE_TENANT_ENCRYPTION:"/namespaces/:tenantNamespace/tenants/:tenantName/encryption",NAMESPACE_TENANT_MONITORING:"/namespaces/:tenantNamespace/tenants/:tenantName/monitoring",NAMESPACE_TENANT_LOGGING:"/namespaces/:tenantNamespace/tenants/:tenantName/logging",NAMESPACE_TENANT_EVENTS:"/namespaces/:tenantNamespace/tenants/:tenantName/events",NAMESPACE_TENANT_CSR:"/namespaces/:tenantNamespace/tenants/:tenantName/csr",OPERATOR_MARKETPLACE:"/marketplace",DIRECTPV_STORAGE:"/storage",DIRECTPV_DRIVES:"/drives",DIRECTPV_VOLUMES:"/volumes"},c={[r]:[s.S3_PUT_OBJECT,s.S3_PUT_ACTIONS,s.S3_DELETE_OBJECT],[a]:[s.S3_LIST_BUCKET,s.S3_ALL_LIST_BUCKET],[o]:[s.S3_ALL_ACTIONS,s.ADMIN_ALL_ACTIONS,s.S3_REPLICATE_OBJECT,s.S3_REPLICATE_DELETE,s.S3_REPLICATE_TAGS,s.S3_GET_OBJECT_VERSION_FOR_REPLICATION,s.S3_PUT_REPLICATION_CONFIGURATION,s.S3_GET_REPLICATION_CONFIGURATION,s.S3_GET_BUCKET_VERSIONING,s.S3_PUT_BUCKET_VERSIONING,s.S3_GET_BUCKET_ENCRYPTION_CONFIGURATION,s.S3_PUT_BUCKET_ENCRYPTION_CONFIGURATION,s.S3_DELETE_OBJECT_TAGGING,s.S3_PUT_OBJECT_TAGGING,s.S3_GET_OBJECT_TAGGING,s.S3_PUT_OBJECT_VERSION_TAGGING,s.S3_DELETE_OBJECT_VERSION_TAGGING,s.S3_DELETE_OBJECT_VERSION,s.S3_GET_OBJECT_VERSION_TAGGING,s.S3_GET_OBJECT_VERSION,s.S3_PUT_BUCKET_TAGGING,s.S3_GET_BUCKET_TAGGING,s.S3_PUT_BUCKET_OBJECT_LOCK_CONFIGURATION,s.S3_GET_BUCKET_OBJECT_LOCK_CONFIGURATION,s.S3_PUT_OBJECT_LEGAL_HOLD,s.S3_GET_OBJECT_LEGAL_HOLD,s.S3_GET_OBJECT_RETENTION,s.S3_PUT_OBJECT_RETENTION,s.S3_BYPASS_GOVERNANCE_RETENTION,s.S3_PUT_BUCKET_POLICY,s.S3_PUT_BUCKET_NOTIFICATIONS,s.S3_GET_LIFECYCLE_CONFIGURATION,s.S3_PUT_LIFECYCLE_CONFIGURATION,s.S3_LIST_MULTIPART_UPLOAD_PARTS,s.S3_LISTEN_BUCKET_NOTIFICATIONS,s.S3_LISTEN_NOTIFICATIONS,s.S3_LIST_BUCKET_MULTIPART_UPLOADS,s.S3_LIST_BUCKET_VERSIONS,s.S3_GET_BUCKET_POLICY_STATUS,s.S3_LIST_ALL_MY_BUCKETS,s.S3_HEAD_BUCKET,s.S3_GET_BUCKET_POLICY,s.S3_GET_BUCKET_NOTIFICATIONS,s.S3_GET_BUCKET_LOCATION,s.S3_DELETE_BUCKET_POLICY,s.S3_FORCE_DELETE_BUCKET,s.S3_DELETE_BUCKET,s.S3_CREATE_BUCKET,s.S3_ABORT_MULTIPART_UPLOAD,s.ADMIN_GET_POLICY,s.ADMIN_LIST_USER_POLICIES,s.ADMIN_LIST_USERS,s.ADMIN_HEAL,s.S3_GET_ACTIONS,s.S3_PUT_ACTIONS],[i]:[s.S3_GET_LIFECYCLE_CONFIGURATION,s.S3_PUT_LIFECYCLE_CONFIGURATION,s.S3_GET_ACTIONS,s.S3_PUT_ACTIONS,s.ADMIN_LIST_TIERS,s.ADMIN_SET_TIER]},u={[l.ADD_BUCKETS]:[s.S3_CREATE_BUCKET],[l.BUCKETS_ADMIN_VIEW]:[...c[o]],[l.OBJECT_BROWSER_VIEW]:[...c[r],...c[a]],[l.GROUPS]:[s.ADMIN_LIST_GROUPS,s.ADMIN_ADD_USER_TO_GROUP],[l.GROUPS_VIEW]:[s.ADMIN_GET_GROUP,s.ADMIN_DISABLE_GROUP,s.ADMIN_ENABLE_GROUP,s.ADMIN_REMOVE_USER_FROM_GROUP,s.ADMIN_LIST_USER_POLICIES,s.ADMIN_ADD_USER_TO_GROUP,s.ADMIN_ATTACH_USER_OR_GROUP_POLICY],[l.GROUPS_ADD]:[s.ADMIN_LIST_USERS,s.ADMIN_CREATE_USER],[l.USERS]:[s.ADMIN_LIST_USERS,s.ADMIN_CREATE_USER],[l.USERS_VIEW]:[s.ADMIN_GET_USER,s.ADMIN_ADD_USER_TO_GROUP,s.ADMIN_ENABLE_USER,s.ADMIN_DISABLE_USER,s.ADMIN_DELETE_USER],[l.USER_SA_ACCOUNT_ADD]:[s.ADMIN_CREATE_SERVICEACCOUNT,s.ADMIN_UPDATE_SERVICEACCOUNT,s.ADMIN_REMOVE_SERVICEACCOUNT,s.ADMIN_LIST_SERVICEACCOUNTS],[l.USER_ADD]:[s.ADMIN_CREATE_USER],[l.ACCOUNT_ADD]:[s.ADMIN_CREATE_SERVICEACCOUNT],[l.DASHBOARD]:[s.ADMIN_SERVER_INFO],[l.POLICIES_VIEW]:[s.ADMIN_DELETE_POLICY,s.ADMIN_LIST_GROUPS,s.ADMIN_GET_GROUP,s.ADMIN_GET_POLICY,s.ADMIN_CREATE_POLICY],[l.POLICIES]:[s.ADMIN_LIST_USER_POLICIES,s.ADMIN_CREATE_POLICY],[l.POLICY_ADD]:[s.ADMIN_CREATE_POLICY],[l.SETTINGS]:[s.ADMIN_CONFIG_UPDATE],[l.SETTINGS_VIEW]:[s.ADMIN_CONFIG_UPDATE],[l.EVENT_DESTINATIONS_ADD_SERVICE]:[s.ADMIN_SERVER_INFO,s.ADMIN_CONFIG_UPDATE],[l.EVENT_DESTINATIONS_ADD]:[s.ADMIN_SERVER_INFO,s.ADMIN_CONFIG_UPDATE],[l.EVENT_DESTINATIONS]:[s.ADMIN_SERVER_INFO,s.ADMIN_CONFIG_UPDATE],[l.TIERS]:[s.ADMIN_LIST_TIERS],[l.TIERS_ADD]:[s.ADMIN_SET_TIER,s.ADMIN_LIST_TIERS],[l.TIERS_ADD_SERVICE]:[s.ADMIN_SET_TIER,s.ADMIN_LIST_TIERS],[l.TOOLS]:[s.S3_LISTEN_NOTIFICATIONS,s.S3_LISTEN_BUCKET_NOTIFICATIONS,s.ADMIN_GET_CONSOLE_LOG,s.ADMIN_SERVER_TRACE,s.ADMIN_HEAL,s.ADMIN_HEALTH_INFO,s.ADMIN_SERVER_INFO],[l.TOOLS_LOGS]:[s.ADMIN_GET_CONSOLE_LOG],[l.TOOLS_AUDITLOGS]:[s.ADMIN_HEALTH_INFO],[l.TOOLS_WATCH]:[s.S3_LISTEN_NOTIFICATIONS,s.S3_LISTEN_BUCKET_NOTIFICATIONS],[l.TOOLS_TRACE]:[s.ADMIN_SERVER_TRACE],[l.TOOLS_HEAL]:[s.ADMIN_HEAL],[l.TOOLS_DIAGNOSTICS]:[s.ADMIN_HEALTH_INFO,s.ADMIN_SERVER_INFO],[l.TOOLS_SPEEDTEST]:[s.ADMIN_HEALTH_INFO],[l.REGISTER_SUPPORT]:[s.ADMIN_SERVER_INFO,s.ADMIN_CONFIG_UPDATE],[l.CALL_HOME]:[s.ADMIN_HEALTH_INFO],[l.PROFILE]:[s.ADMIN_HEALTH_INFO],[l.SUPPORT_INSPECT]:[s.ADMIN_HEALTH_INFO],[l.LICENSE]:[s.ADMIN_SERVER_INFO,s.ADMIN_CONFIG_UPDATE],[l.SITE_REPLICATION]:[s.ADMIN_SERVER_INFO,s.ADMIN_CONFIG_UPDATE],[l.SITE_REPLICATION_STATUS]:[s.ADMIN_SERVER_INFO,s.ADMIN_CONFIG_UPDATE],[l.SITE_REPLICATION_ADD]:[s.ADMIN_SERVER_INFO,s.ADMIN_CONFIG_UPDATE],[l.KMS]:[s.KMS_ALL_ACTIONS],[l.KMS_STATUS]:[s.KMS_ALL_ACTIONS,s.KMS_STATUS],[l.KMS_KEYS]:[s.KMS_ALL_ACTIONS,s.KMS_CREATE_KEY,s.KMS_DELETE_KEY,s.KMS_LIST_KEYS,s.KMS_IMPORT_KEY,s.KMS_KEY_STATUS],[l.KMS_KEYS_ADD]:[s.KMS_ALL_ACTIONS,s.KMS_CREATE_KEY],[l.KMS_KEYS_IMPORT]:[s.KMS_ALL_ACTIONS,s.KMS_IMPORT_KEY],[l.IDP_LDAP_CONFIGURATIONS]:[s.ADMIN_ALL_ACTIONS,s.ADMIN_CONFIG_UPDATE],[l.IDP_LDAP_CONFIGURATIONS_ADD]:[s.ADMIN_ALL_ACTIONS,s.ADMIN_CONFIG_UPDATE],[l.IDP_LDAP_CONFIGURATIONS_VIEW]:[s.ADMIN_ALL_ACTIONS,s.ADMIN_CONFIG_UPDATE],[l.IDP_OPENID_CONFIGURATIONS]:[s.ADMIN_ALL_ACTIONS,s.ADMIN_CONFIG_UPDATE],[l.IDP_OPENID_CONFIGURATIONS_ADD]:[s.ADMIN_ALL_ACTIONS,s.ADMIN_CONFIG_UPDATE],[l.IDP_OPENID_CONFIGURATIONS_VIEW]:[s.ADMIN_ALL_ACTIONS,s.ADMIN_CONFIG_UPDATE]},d="console-ui"},649:(e,t,n)=>{"use strict";n.d(t,{A:()=>c});var r=n(6797),a=n.n(r),o=n(3097),i=n.n(o),s=n(6483),l=n(4710);const c=new class{invoke(e,t,n,r){let o=t;"/"===o[0]&&(o=o.slice(1));let i=a()(e,o);if(r)for(let a in r)i.set(a,r[a]);return i.send(n).then((e=>e.body)).catch((e=>401===e.status&&localStorage.getItem("userLoggedIn")&&!o.includes("api/v1/login")?("/"!==window.location.pathname&&localStorage.setItem("redirect-path",window.location.pathname),(0,s.q7)(),void(window.location.href="".concat(l.p,"login"))):this.onError(e)))}onError(e){if(e.status){const t=i()(e.response,"body.message","Error ".concat(e.status.toString()))||"";let n=i()(e.response,"body.detailedMessage","")||"";t===n&&(n="");const r={errorMessage:t.charAt(0).toUpperCase()+t.slice(1),detailedError:n.charAt(0).toUpperCase()+n.slice(1),statusCode:e.status};return Promise.reject(r)}(0,s.q7)(),window.location.href="".concat(l.p,"login")}}},1255:(e,t,n)=>{"use strict";n.d(t,{n:()=>a,u:()=>r});let r=function(e){return e.NoSchedule="NoSchedule",e.PreferNoSchedule="PreferNoSchedule",e.NoExecute="NoExecute",e}({}),a=function(e){return e.Equal="Equal",e.Exists="Exists",e}({})},6483:(e,t,n)=>{"use strict";n.d(t,{Fd:()=>C,XK:()=>S,cV:()=>_,hr:()=>T,l9:()=>h,lJ:()=>E,nD:()=>b,nO:()=>d,q5:()=>g,q7:()=>f,qO:()=>p,zt:()=>w});var r=n(9816),a=n(3029),o=n(3097),i=n.n(o);const s=1073741824,l=["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"],c=["Ki","Mi","Gi","Ti","Pi","Ei"],u=["B",...c],d=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=parseInt(e,10)||0;return p(n,t)},p=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=0;for(;e>=1024&&++n;)e/=1024;const r=["B",...c];return e.toFixed(1)+" "+(t?r[n]:l[n])},m=e=>{document.cookie=e+"=; expires=Thu, 01 Jan 1970 00:00:01 GMT;"},f=()=>{r.Ay.removeItem("token"),r.Ay.removeItem("auth-state"),m("token"),m("idp-refresh-token")},h=e=>c.filter((t=>!e||!e.includes(t))).map((e=>({label:e,value:e}))),g=function(e,t){return E(e,t,arguments.length>2&&void 0!==arguments[2]&&arguments[2]).toString(10)},E=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const r=parseFloat(e),a=(n?u:l).findIndex((e=>e===t));if(-1===a)return 0;return r*Math.pow(1024,a)},b=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,a=arguments.length>4?arguments[4]:void 0,o=arguments.length>5?arguments[5]:void 0;const i=g(e.value,e.unit,!0);if(parseInt(i,10){const i=parseInt(e,10);return y(t,i,274877906944,n,r,a,o)},y=function(e,t,n,r){let o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,l=arguments.length>5?arguments[5]:void 0,c=arguments.length>6?arguments[6]:void 0;if(isNaN(e)||isNaN(t)||isNaN(n)||isNaN(r))return{error:"Some provided data is invalid, please try again.",nodes:0,persistentVolumes:0,disks:0,pvSize:0};let u=0,d=0,p=0;if(0===o&&(u=Math.floor(Math.min(t/Math.max(4,e),n)),d=t/u,p=d/e),o&&(p=o,d=p*e,u=Math.floor(t/d)),p%1>0){p=Math.ceil(p),d=p*e,u=Math.floor(t/d);if(u*p*e>r)return{error:"We were not able to allocate this server.",nodes:0,persistentVolumes:0,disks:0,pvSize:0}}if(u0){const t=i()(e,"configurations",[]).find((e=>e.typeSelection===c));if(void 0!==t&&t.minimumVolumeSize){var m,f;const n=E(null===(m=t.minimumVolumeSize)||void 0===m?void 0:m.driveSize,null===(f=t.minimumVolumeSize)||void 0===f?void 0:f.sizeUnit,!0),r=e.variantSelectorValues.find((e=>e.value===c));if(u{if(e.length<1)return{error:1,defaultEC:"",erasureCodeSet:0,maxEC:"",rawCapacity:"0",storageFactors:[]};const a=t*n,o=e[0],i=2*parseInt(o.split(":")[1],10),s=e.map((e=>{const n=parseInt(e.split(":")[1],10),r=i/(i-n),o=Math.floor(a/r),s=t-Math.floor(t/r);return{erasureCode:e,storageFactor:r,maxCapacity:o.toString(10),maxFailureTolerations:s}}));let l=o;return e.find((e=>"EC:4"===e))&&(l="EC:4"),{error:0,storageFactors:s,maxEC:o,rawCapacity:a.toString(10),erasureCodeSet:i,defaultEC:l}},S=e=>{let t=0;const n=e.map((e=>e.name||""));for(;t1&&void 0!==arguments[1]?arguments[1]:"s",n=parseFloat(e);return A(n,t)},A=function(e){switch(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"s"){case"ns":e=Math.floor(1e-9*e);break;case"ms":e=Math.floor(.001*e)}const t=Math.floor(e/86400);e-=3600*t*24;const n=Math.floor(e/3600);e-=3600*n;const r=Math.floor(e/60);if(e-=60*r,t>365){const e=t/365;return"".concat(e," year").concat(1===Math.floor(e)?"":"s")}if(t>30){const e=Math.floor(t/30),n=t-30*e;return"".concat(e," month").concat(1===Math.floor(e)?"":"s"," ").concat(n>0?"".concat(n," day").concat(n>1?"s":""):"")}if(t>=7&&t<=30){const e=Math.floor(t/7);return"".concat(Math.floor(e)," week").concat(1===e?"":"s")}return t>=1&&t<=6?"".concat(t," day").concat(t>1?"s":""):"".concat(n>=1?"".concat(n," hour").concat(n>1?"s":""):""," ").concat(r>=1&&0===n?"".concat(r," minute").concat(r>1?"s":""):""," ").concat(e>=1&&0===r&&0===n?"".concat(e," second").concat(e>1?"s":""):"")},C="EC:0",w={MINIO_ACCESS_KEY:{secret:!0},MINIO_ACCESS_KEY_OLD:{secret:!0},MINIO_AUDIT_WEBHOOK_AUTH_TOKEN:{secret:!0},MINIO_IDENTITY_LDAP_LOOKUP_BIND_PASSWORD:{secret:!0},MINIO_IDENTITY_OPENID_CLIENT_SECRET:{secret:!0},MINIO_KMS_SECRET_KEY:{secret:!0},MINIO_LOGGER_WEBHOOK_AUTH_TOKEN:{secret:!0},MINIO_NOTIFY_ELASTICSEARCH_PASSWORD:{secret:!0},MINIO_NOTIFY_KAFKA_SASL_PASSWORD:{secret:!0},MINIO_NOTIFY_MQTT_PASSWORD:{secret:!0},MINIO_NOTIFY_NATS_PASSWORD:{secret:!0},MINIO_NOTIFY_NATS_TOKEN:{secret:!0},MINIO_NOTIFY_REDIS_PASSWORD:{secret:!0},MINIO_NOTIFY_WEBHOOK_AUTH_TOKEN:{secret:!0},MINIO_ROOT_PASSWORD:{secret:!0},MINIO_SECRET_KEY:{secret:!0},MINIO_SECRET_KEY_OLD:{secret:!0}}},4558:(e,t,n)=>{"use strict";var r;n.d(t,{v:()=>o});const a=(null===(r=document.head.querySelector("[name~=minio-license][content]"))||void 0===r?void 0:r.content)||"AGPL",o=()=>{let e;switch(a){case"enterprise":e="enterprise";break;case"STANDARD":e="standard";break;default:e="AGPL"}return e}},4710:(e,t,n)=>{"use strict";n.d(t,{p:()=>r});const r=new URL(document.baseURI).pathname},3758:(e,t,n)=>{"use strict";n.d(t,{A:()=>u});var r=n(5043),a=n(9923),o=n(4574),i=n(3097),s=n.n(i),l=n(579);const c=o.Ay.button((e=>{let{theme:t}=e;return{border:"1px solid ".concat(s()(t,"borderColor","#E2E2E2")),borderRadius:3,color:s()(t,"secondaryText","#5B5C5C"),backgroundColor:s()(t,"boxBackground","#FBFAFA"),fontSize:12}})),u=e=>{let{id:t,unitSelected:n,unitsList:o,disabled:i=!1,onUnitChange:s}=e;const[u,d]=r.useState(null),p=Boolean(u),m=e=>{d(null),""!==e&&s&&s(e)};return(0,l.jsxs)(r.Fragment,{children:[(0,l.jsx)(c,{id:"".concat(t,"-button"),"aria-controls":"".concat(t,"-menu"),"aria-haspopup":"true","aria-expanded":p?"true":void 0,onClick:e=>{d(e.currentTarget)},disabled:i,type:"button",children:n}),(0,l.jsx)(a.Vey,{id:"upload-main-menu",options:o,selectedOption:"",onSelect:e=>m(e),hideTriggerAction:()=>{m("")},open:p,anchorEl:u,anchorOrigin:"end"})]})}},1938:(e,t,n)=>{"use strict";n.d(t,{A:()=>i});var r=n(4574),a=n(3097),o=n.n(a);const i=r.Ay.h3((e=>{let{theme:t}=e;return{color:o()(t,"fontColor","#000"),margin:0}}))},9555:(e,t,n)=>{"use strict";n.d(t,{A:()=>d});var r=n(5043),a=n(9923),o=n(9456),i=n(3097),s=n.n(i),l=n(2961),c=n(4159),u=n(579);const d=e=>{let{isModal:t=!1}=e;const n=(0,l.jL)(),i=(0,o.d4)((e=>t?e.system.modalSnackBar:e.system.snackBar)),[d,p]=(0,r.useState)(!1),m=(0,r.useCallback)((()=>{p(!1)}),[]);(0,r.useEffect)((()=>{d||(n((0,c.C9)({detailedError:"",errorMessage:""})),n((0,c.h0)("")))}),[n,d]),(0,r.useEffect)((()=>{""!==i.message&&"error"===i.type&&p(!0)}),[m,i.message,i.type]);const f=s()(i,"message",""),h=s()(i,"detailedErrorMsg","");return"error"!==i.type||""===f?null:(0,u.jsx)(a.qb_,{onClose:m,open:d,variant:"error",message:h||"".concat(f,"."),autoHideDuration:10,closeButton:!0})}},8661:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});n(5043);var r=n(9923),a=n(579);const o=e=>{let{isOpen:t=!1,onClose:n,onCancel:o,onConfirm:i,title:s="",isLoading:l,confirmationContent:c,cancelText:u="Cancel",confirmText:d="Confirm",confirmButtonProps:p,cancelButtonProps:m,titleIcon:f=null,confirmationButtonSimple:h=!1}=e;return(0,a.jsxs)(r.ngX,{title:s,titleIcon:f,onClose:n,open:t,customMaxWidth:510,children:[(0,a.jsx)(r.azJ,{children:c}),(0,a.jsxs)(r.azJ,{sx:{display:"flex",justifyContent:"flex-end",gap:10,marginTop:20},children:[(0,a.jsx)(r.$nd,{onClick:o||n,disabled:l,type:"button",...m,variant:"regular",id:"confirm-cancel",label:u}),(0,a.jsx)(r.$nd,{id:"confirm-ok",onClick:i,label:d,disabled:l,variant:"secondary",...p})]})]})}},4770:(e,t,n)=>{"use strict";n.d(t,{A:()=>p});var r=n(5043),a=n(9923),o=n(9456),i=n(2961),s=n(3479),l=n(4159),c=n(6681),u=n(579);const d=()=>{const e=(0,i.jL)(),t=(0,o.d4)((e=>e.system.darkMode));return(0,u.jsx)(c.A,{tooltip:"".concat(t?"Light":"Dark"," Mode"),children:(0,u.jsx)(a.$nd,{id:"dark-mode-activator",icon:t?(0,u.jsx)(a.LPG,{}):(0,u.jsx)(a.vmc,{}),onClick:()=>{const n=!!t;e((0,l.S8)(!n)),(0,s.vb)(n?"off":"on")}})})},p=e=>{let{label:t,actions:n,middleComponent:o}=e;return(0,u.jsx)(a.zYs,{label:t,actions:(0,u.jsxs)(r.Fragment,{children:[n,(0,u.jsx)(d,{})]}),middleComponent:o})}},8997:(e,t,n)=>{"use strict";n.d(t,{A:()=>d});n(5043);var r=n(9923),a=n(3097),o=n.n(a),i=n(4574),s=n(1255),l=n(3758),c=n(579);const u=i.Ay.div((e=>{let{theme:t}=e;return{flexGrow:"1",flexBasis:"100%",width:"100%","& .labelsStyle":{fontSize:18,fontWeight:"bold",color:o()(t,"secondaryText","#AEAEAE"),display:"flex",alignItems:"center",justifyContent:"center",maxWidth:45,marginRight:10},"& .firstLevel":{width:"100%",marginBottom:10},"& .secondLevel":{width:"100%"},"& .fieldContainer":{marginRight:10}}})),d=e=>{let{effect:t,onEffectChange:n,tolerationKey:a,onTolerationKeyChange:o,operator:i,onOperatorChange:d,value:p,onValueChange:m,tolerationSeconds:f,onSecondsChange:h,index:g}=e;const E=[],b=[];for(let r in s.n)E.push({value:r,label:r});for(let r in s.u)b.push({value:r,label:r});return(0,c.jsx)(r.xA9,{item:!0,xs:12,children:(0,c.jsxs)("fieldset",{children:[(0,c.jsxs)("legend",{children:["Toleration ",g+1]}),(0,c.jsx)(u,{children:(0,c.jsxs)(r.xA9,{container:!0,children:[(0,c.jsxs)(r.xA9,{container:!0,className:"firstLevel",children:[(0,c.jsx)(r.xA9,{item:!0,xs:!0,className:"labelsStyle",children:"If"}),(0,c.jsx)(r.xA9,{item:!0,xs:!0,className:"fieldContainer",children:(0,c.jsx)(r.cl_,{id:"keyField-".concat(g),label:"",name:"keyField-".concat(g),value:a,onChange:e=>{o(e.target.value)},index:g,placeholder:"Toleration Key"})}),s.n[i]===s.n.Equal&&(0,c.jsx)(r.xA9,{item:!0,xs:!0,className:"labelsStyle",children:"is"}),(0,c.jsx)(r.xA9,{item:!0,xs:1,className:"fieldContainer",children:(0,c.jsx)(r.l6P,{onChange:e=>{d(s.n[e])},id:"operator-".concat(g),name:"operator",label:"",value:s.n[i],options:E})}),s.n[i]===s.n.Equal&&(0,c.jsx)(r.xA9,{item:!0,xs:!0,className:"labelsStyle",children:"to"}),s.n[i]===s.n.Equal&&(0,c.jsx)(r.xA9,{item:!0,xs:!0,className:"fieldContainer",children:(0,c.jsx)(r.cl_,{id:"valueField-".concat(g),label:"",name:"valueField-".concat(g),value:p||"",onChange:e=>{m(e.target.value)},index:g,placeholder:"Toleration Value"})})]}),(0,c.jsxs)(r.xA9,{container:!0,className:"secondLevel",children:[(0,c.jsx)(r.xA9,{item:!0,xs:!0,className:"labelsStyle",children:"then"}),(0,c.jsx)(r.xA9,{item:!0,xs:!0,className:"fieldContainer",children:(0,c.jsx)(r.l6P,{onChange:e=>{n(s.u[e])},id:"effects-".concat(g),name:"effects",label:"",value:s.u[t],options:b})}),(0,c.jsx)(r.xA9,{item:!0,xs:!0,className:"labelsStyle",children:"after"}),(0,c.jsx)(r.xA9,{item:!0,xs:!0,className:"fieldContainer",children:(0,c.jsx)(r.cl_,{id:"seconds-".concat(g),label:"",name:"seconds-".concat(g),value:(null===f||void 0===f?void 0:f.toString())||"0",onChange:e=>{e.target.validity.valid&&h(parseInt(e.target.value))},index:g,pattern:"[0-9]*",overlayObject:(0,c.jsx)(l.A,{id:"seconds-".concat(g),unitSelected:"seconds",unitsList:[{label:"Seconds",value:"seconds"}],disabled:!0})})})]})]})})]})})}},6681:(e,t,n)=>{"use strict";n.d(t,{A:()=>i});var r=n(5043),a=n(9923),o=n(579);const i=e=>{let{tooltip:t,children:n,errorProps:i=null,placement:s}=e;return(0,o.jsx)(a.m_M,{tooltip:t,placement:s,children:(0,o.jsx)("span",{children:i?(0,r.cloneElement)(n,{...i}):n})})}},2811:(e,t,n)=>{"use strict";n.d(t,{Ay:()=>i,s2:()=>o,y:()=>a});const r=(0,n(907).Z0)({name:"license",initialState:{faqModalOpen:!1},reducers:{openFAQModal:e=>{e.faqModalOpen=!0},closeFAQModal:e=>{e.faqModalOpen=!1}}}),{openFAQModal:a,closeFAQModal:o}=r.actions,i=r.reducer},3811:(e,t,n)=>{"use strict";n.d(t,{A:()=>_});var r=n(5043),a=n(9456),o=n(9923),i=n(2961),s=n(6483),l=n(969),c=n(9499),u=n(788),d=n(4493),p=n(649),m=n(1659),f=n.n(m),h=n(3097),g=n.n(h),E=n(3758),b=n(1938),v=n(579);const y=()=>{const e=(0,i.jL)(),t=(0,a.d4)((e=>e.createTenant.fields.tenantSize.nodes)),n=(0,a.d4)((e=>e.createTenant.fields.tenantSize.resourcesSize)),s=(0,a.d4)((e=>e.createTenant.fields.nameTenant.selectedStorageClass)),l=(0,a.d4)((e=>e.createTenant.fields.tenantSize.maxCPUsUse)),c=(0,a.d4)((e=>e.createTenant.fields.tenantSize.maxMemorySize)),u=(0,a.d4)((e=>e.createTenant.fields.tenantSize.resourcesSpecifyLimit)),m=(0,a.d4)((e=>e.createTenant.fields.tenantSize.resourcesCPURequestError)),h=(0,a.d4)((e=>e.createTenant.fields.tenantSize.resourcesCPURequest)),y=(0,a.d4)((e=>e.createTenant.fields.tenantSize.resourcesCPULimitError)),_=(0,a.d4)((e=>e.createTenant.fields.tenantSize.resourcesCPULimit)),S=(0,a.d4)((e=>e.createTenant.fields.tenantSize.resourcesMemoryRequestError)),T=(0,a.d4)((e=>e.createTenant.fields.tenantSize.resourcesMemoryRequest)),A=(0,a.d4)((e=>e.createTenant.fields.tenantSize.resourcesMemoryLimitError)),C=(0,a.d4)((e=>e.createTenant.fields.tenantSize.resourcesMemoryLimit)),w=(0,r.useCallback)(((t,n)=>{e((0,d.rJ)({pageName:"tenantSize",field:t,value:n}))}),[e]);return(0,r.useEffect)((()=>{e((0,d.qK)({pageName:"tenantSize",valid:""===S&&""===A&&""===m&&""===y}))}),[e,S,A,m,y]),(0,r.useEffect)((()=>{p.A.invoke("GET","api/v1/cluster/allocatable-resources?num_nodes=".concat(t)).then((e=>{w("maxAllocatableResources",e);const t=e,n=g()(t,"min_allocatable_mem",!1),r=g()(t,"min_allocatable_cpu",!1);if(!1===n||!1===r)return w("cpuToUse",0),w("maxMemorySize",""),void w("maxCPUsUse","");const a=f()(e.mem_priority.max_allocatable_mem/1024/1024/1024);w("maxMemorySize",a.toString()),w("maxCPUsUse",e.cpu_priority.max_allocatable_cpu.toString());const o=g()(t,"cpu_priority.max_allocatable_cpu",0),i=Math.max(1,f()(o/2));""===h&&w("resourcesCPURequest",i);const s=Math.max(2,f()(a/2));""===T&&w("resourcesMemoryRequest",s)})).catch((e=>{w("maxMemorySize",0),w("resourcesCPURequest",""),w("resourcesMemoryRequest","")}))}),[t,w]),(0,v.jsxs)(r.Fragment,{children:[(0,v.jsxs)(o.azJ,{className:"inputItem",children:[(0,v.jsx)(b.A,{children:"Resources"}),(0,v.jsx)("span",{className:"muted",children:"You may specify the amount of CPU and Memory that MinIO servers should reserve on each node."})]}),""!==n.error&&(0,v.jsx)(o.azJ,{className:"inputItem error",children:n.error}),(0,v.jsx)(o.cl_,{label:"CPU Request",id:"resourcesCPURequest",name:"resourcesCPURequest",onChange:e=>{let t=parseInt(e.target.value);""===e.target.value?w("resourcesCPURequestError",""):isNaN(t)?w("resourcesCPURequestError","Invalid number"):t>parseInt(l)?w("resourcesCPURequestError","Request exceeds available cores (".concat(l,")")):e.target.validity.valid?w("resourcesCPURequestError",""):w("resourcesCPURequestError","Invalid configuration"),w("resourcesCPURequest",e.target.value)},value:h,disabled:""===s,max:l,error:m,pattern:"[0-9]*"}),(0,v.jsx)(o.cl_,{id:"resourcesMemoryRequest",name:"resourcesMemoryRequest",onChange:e=>{let n=parseInt(e.target.value);""===e.target.value?w("resourcesMemoryRequestError",""):isNaN(n)?w("resourcesMemoryRequestError","Invalid number"):n>parseInt(c)?w("resourcesMemoryRequestError","Request exceeds available memory across ".concat(t," nodes (").concat(c,"Gi)")):n<2?w("resourcesMemoryRequestError","At least 2Gi must be requested"):e.target.validity.valid?w("resourcesMemoryRequestError",""):w("resourcesMemoryRequestError","Invalid configuration"),w("resourcesMemoryRequest",e.target.value)},label:"Memory Request",overlayObject:(0,v.jsx)(E.A,{id:"size-unit",onUnitChange:()=>{},unitSelected:"Gi",unitsList:[{label:"Gi",value:"Gi"}],disabled:!0}),value:T,disabled:""===s,error:S,pattern:"[0-9]*"}),(0,v.jsx)(o.dOG,{value:"resourcesSpecifyLimit",id:"resourcesSpecifyLimit",name:"resourcesSpecifyLimit",checked:u,onChange:e=>{const t=e.target.checked;w("resourcesSpecifyLimit",t)},label:"Specify Limit"}),u&&(0,v.jsxs)(r.Fragment,{children:[(0,v.jsx)(o.cl_,{label:"CPU Limit",id:"resourcesCPULimit",name:"resourcesCPULimit",onChange:e=>{let t=parseInt(e.target.value);""===e.target.value?w("resourcesCPULimitError",""):isNaN(t)?w("resourcesCPULimitError","Invalid number"):e.target.validity.valid?w("resourcesCPULimitError",""):w("resourcesCPULimitError","Invalid configuration"),w("resourcesCPULimit",e.target.value)},value:_,disabled:""===s,max:l,error:y,pattern:"[0-9]*"}),(0,v.jsx)(o.cl_,{id:"resourcesMemoryLimit",name:"resourcesMemoryLimit",onChange:e=>{let t=parseInt(e.target.value);""===e.target.value?w("resourcesMemoryLimitError",""):isNaN(t)?w("resourcesMemoryLimitError","Invalid number"):e.target.validity.valid?w("resourcesMemoryLimitError",""):w("resourcesMemoryLimitError","Invalid configuration"),w("resourcesMemoryLimit",e.target.value)},label:"Memory Limit",overlayObject:(0,v.jsx)(E.A,{id:"size-unit",onUnitChange:()=>{},unitSelected:"Gi",unitsList:[{label:"Gi",value:"Gi"}],disabled:!0}),value:C,disabled:""===s,error:A,pattern:"[0-9]*"})]})]})},_=e=>{let{formToRender:t}=e;const n=(0,i.jL)(),m=(0,a.d4)((e=>e.createTenant.fields.tenantSize.volumeSize)),f=(0,a.d4)((e=>e.createTenant.fields.tenantSize.sizeFactor)),h=(0,a.d4)((e=>e.createTenant.fields.tenantSize.drivesPerServer)),g=(0,a.d4)((e=>e.createTenant.fields.tenantSize.nodes)),_=(0,a.d4)((e=>e.createTenant.fields.tenantSize.memoryNode)),S=(0,a.d4)((e=>e.createTenant.fields.tenantSize.ecParity)),T=(0,a.d4)((e=>e.createTenant.fields.tenantSize.ecParityChoices)),A=(0,a.d4)((e=>e.createTenant.fields.tenantSize.cleanECChoices)),C=(0,a.d4)((e=>e.createTenant.fields.tenantSize.resourcesSize)),w=(0,a.d4)((e=>e.createTenant.fields.tenantSize.distribution)),N=(0,a.d4)((e=>e.createTenant.fields.tenantSize.ecParityCalc)),I=(0,a.d4)((e=>e.createTenant.fields.tenantSize.untouchedECField)),x=(0,a.d4)((e=>e.createTenant.limitSize)),R=(0,a.d4)((e=>e.createTenant.fields.nameTenant.selectedStorageClass)),k=(0,a.d4)((e=>e.createTenant.fields.nameTenant.selectedStorageType)),O=(0,a.d4)((e=>e.createTenant.fields.tenantSize.maxCPUsUse)),L=(0,a.d4)((e=>e.createTenant.fields.tenantSize.maxMemorySize)),D=(0,a.d4)((e=>e.createTenant.fields.tenantSize.resourcesCPURequest)),M=(0,a.d4)((e=>e.createTenant.fields.tenantSize.resourcesMemoryRequest)),P=(0,a.d4)((e=>e.createTenant.fields.tenantSize.resourcesCPURequestError)),B=(0,a.d4)((e=>e.createTenant.fields.tenantSize.resourcesCPULimitError)),F=(0,a.d4)((e=>e.createTenant.fields.tenantSize.resourcesMemoryRequestError)),U=(0,a.d4)((e=>e.createTenant.fields.tenantSize.resourcesMemoryLimitError)),[z,H]=(0,r.useState)({}),[G,j]=(0,r.useState)(!1),[V,Z]=(0,r.useState)(""),W=(0,r.useCallback)(((e,t)=>{n((0,d.rJ)({pageName:"tenantSize",field:e,value:t}))}),[n]),$=e=>{H((0,l.p)(z,e))};return(0,r.useEffect)((()=>{A.length>0&&""!==N.defaultEC&&W("ecParityChoices",(0,c.D)(A,N.defaultEC))}),[N,A,W]),(0,r.useEffect)((()=>{""===S||N.defaultEC===S?W("untouchedECField",!0):W("untouchedECField",!1)}),[S,N,W]),(0,r.useEffect)((()=>{if(T.length>0&&""===w.error){const e=(0,s.cV)(A,w.persistentVolumes,w.pvSize,w.nodes);W("ecParityCalc",e),A.includes(S)&&""!==S||W("ecParity",e.defaultEC)}}),[S,T.length,w,A,W,I]),(0,r.useEffect)((()=>{const e=m,n=f,r=(0,s.q5)("16","Ti",!0),a={unit:n,value:e.toString()},o=(0,s.nD)(a,parseInt(g),parseInt(r),parseInt(h),t,k);W("distribution",o),j(!1),Z("")}),[g,m,f,W,h,k,t]),(0,r.useEffect)((()=>{const e=(0,s.q5)(m,f,!0),t=(0,u.D)([{fieldKey:"nodes",required:!0,value:g,customValidation:G,customValidationMessage:V},{fieldKey:"volume_size",required:!0,value:m,customValidation:parseInt(e)<1073741824||parseInt(e)>x[R],customValidationMessage:"Volume size must be greater than 1Gi and less than ".concat((0,s.nO)(x[R],!0))},{fieldKey:"drivesps",required:!0,value:h,customValidation:parseInt(h)<1,customValidationMessage:"There must be at least one drive"}]);n((0,d.qK)({pageName:"tenantSize",valid:!("nodes"in t)&&!("volume_size"in t)&&!("drivesps"in t)&&""===w.error&&0===N.error&&""!==S&&""===F&&""===P&&""===U&&""===B})),H(t)}),[g,m,f,_,w,N,C,x,R,n,G,V,h,S,M,D,O,L,F,P,U,B]),(0,r.useEffect)((()=>{if("1"===g.trim())return W("ecParity",s.Fd),W("ecparityChoices",(0,c.D)([s.Fd])),void W("cleanECChoices",[s.Fd]);""===w.error&&""!==g.trim()&&0!==w.disks&&p.A.invoke("GET","api/v1/get-parity/".concat(g,"/").concat(w.disks)).then((e=>{W("ecParityChoices",(0,c.D)(e)),W("cleanECChoices",e),I&&W("ecParity","")})).catch((e=>{W("ecparityChoices",[]),n((0,d.qK)({pageName:"tenantSize",valid:!1})),W("ecParity","")}))}),[w,n,W,g,I]),(0,v.jsxs)(r.Fragment,{children:[(0,v.jsxs)(o.azJ,{className:"inputItem",children:[(0,v.jsx)(b.A,{children:"Capacity"}),(0,v.jsx)("span",{className:"muted",children:"Please select the desired capacity"})]}),""!==w.error&&(0,v.jsx)(o.azJ,{className:"inputItem error",children:w.error}),(0,v.jsx)(o.cl_,{id:"nodes",name:"nodes",onChange:e=>{e.target.validity.valid&&(W("nodes",e.target.value),$("nodes"))},label:"Number of Servers",disabled:""===R,value:g,min:"4",required:!0,error:z.nodes||"",pattern:"[0-9]*"}),(0,v.jsx)(o.cl_,{id:"drivesps",name:"drivesps",onChange:e=>{e.target.validity.valid&&(W("drivesPerServer",e.target.value),$("drivesps"))},label:"Drives per Server",value:h,disabled:""===R,min:"1",required:!0,error:z.drivesps||"",pattern:"[0-9]*"}),(0,v.jsx)(o.cl_,{type:"number",id:"volume_size",name:"volume_size",onChange:e=>{W("volumeSize",e.target.value),$("volume_size")},label:"Total Size",value:m,disabled:""===R,required:!0,error:z.volume_size||"",min:"0",overlayObject:(0,v.jsx)(E.A,{id:"size-unit",onUnitChange:e=>{W("sizeFactor",e)},unitSelected:f,unitsList:(0,s.l9)(["Ki","Mi"]),disabled:""===R})}),(0,v.jsx)(o.l6P,{id:"ec_parity",name:"ec_parity",onChange:e=>{W("ecParity",e)},label:"Erasure Code Parity",disabled:""===R||""===S,value:S,options:T}),(0,v.jsx)(o.azJ,{className:"muted inputItem",children:"Please select the desired parity. This setting will change the maximum usable capacity in the cluster."}),(0,v.jsx)(y,{})]})}},3029:(e,t,n)=>{"use strict";n.d(t,{oD:()=>v,m3:()=>_,h2:()=>y});var r=n(5043),a=n(9923),o=n(9456),i=n(3097),s=n.n(i),l=n(2961),c=n(6483),u=n(969),d=n(9499),p=n(788),m=n(4493),f=n(649),h=n(1938),g=n(579);const E=e=>{let{formToRender:t}=e;const n=(0,l.jL)(),i=(0,o.d4)((e=>e.createTenant.fields.tenantSize.volumeSize)),E=(0,o.d4)((e=>e.createTenant.fields.tenantSize.sizeFactor)),b=(0,o.d4)((e=>e.createTenant.fields.tenantSize.drivesPerServer)),v=(0,o.d4)((e=>e.createTenant.fields.tenantSize.nodes)),y=(0,o.d4)((e=>e.createTenant.fields.tenantSize.memoryNode)),S=(0,o.d4)((e=>e.createTenant.fields.tenantSize.ecParity)),T=(0,o.d4)((e=>e.createTenant.fields.tenantSize.ecParityChoices)),A=(0,o.d4)((e=>e.createTenant.fields.tenantSize.cleanECChoices)),C=(0,o.d4)((e=>e.createTenant.fields.tenantSize.resourcesSize)),w=(0,o.d4)((e=>e.createTenant.fields.tenantSize.distribution)),N=(0,o.d4)((e=>e.createTenant.fields.tenantSize.ecParityCalc)),I=(0,o.d4)((e=>e.createTenant.fields.tenantSize.cpuToUse)),x=(0,o.d4)((e=>e.createTenant.fields.tenantSize.maxCPUsUse)),R=(0,o.d4)((e=>e.createTenant.fields.tenantSize.integrationSelection)),k=(0,o.d4)((e=>e.createTenant.limitSize)),O=(0,o.d4)((e=>e.createTenant.fields.nameTenant.selectedStorageType)),[L,D]=(0,r.useState)({}),M=(0,r.useCallback)(((e,t)=>{n((0,m.rJ)({pageName:"tenantSize",field:e,value:t}))}),[n]),P=(0,r.useCallback)(((e,t)=>{n((0,m.rJ)({pageName:"nameTenant",field:e,value:t}))}),[n]);return(0,r.useEffect)((()=>{if(T.length>0&&""===w.error){const e=(0,c.cV)(A,w.persistentVolumes,w.pvSize,w.nodes);M("ecParityCalc",e),A.includes(S)&&""!==S||M("ecParity",e.defaultEC)}}),[S,T,w,A,M]),(0,r.useEffect)((()=>{if(void 0!==t&&parseInt(v)>=4){const e=_[t];if(Object.keys(e).length>0){const t=s()(e,"configurations",[]).find((e=>e.typeSelection===O));if(t){M("integrationSelection",t),P("selectedStorageClass",t.storageClass);const e={pvSize:parseInt((0,c.q5)(t.driveSize.driveSize,t.driveSize.sizeUnit,!0),10),nodes:parseInt(v),disks:t.drivesPerServer,persistentVolumes:t.drivesPerServer*parseInt(v),error:""};M("distribution",e),M("resourcesCPURequest",Math.max(1,t.CPU/2)),M("resourcesMemoryRequest",Math.max(2,t.memory/2))}}}}),[v,O,t,M,P]),(0,r.useEffect)((()=>{const e=(0,p.D)([{fieldKey:"nodes",required:!0,value:v,customValidation:parseInt(v)<4,customValidationMessage:"Al least 4 servers must be selected"}]);n((0,m.qK)({pageName:"tenantSize",valid:!("nodes"in e)&&""===w.error&&0===N.error&&""===C.error&&""!==S&&parseInt(v)>=4})),D(e)}),[v,i,E,y,w,N,C,k,O,I,x,n,b,S]),(0,r.useEffect)((()=>{0!==R.drivesPerServer&&""!==v.trim()&&f.A.invoke("GET","api/v1/get-parity/".concat(v,"/").concat(R.drivesPerServer)).then((e=>{M("ecParityChoices",(0,d.D)(e)),M("cleanECChoices",e)})).catch((e=>{M("ecparityChoices",[]),n((0,m.qK)({pageName:"tenantSize",valid:!1})),M("ecParity","")}))}),[R,v,n,M]),(0,g.jsxs)(r.Fragment,{children:[(0,g.jsx)(a.xA9,{item:!0,xs:12,children:(0,g.jsxs)(a.azJ,{className:"inputItem",children:[(0,g.jsx)(h.A,{children:"Tenant Size"}),(0,g.jsx)("span",{className:"muted",children:"Please select the desired capacity"})]})}),""!==w.error&&(0,g.jsx)(a.xA9,{item:!0,xs:12,children:(0,g.jsx)("div",{className:"error",children:w.error})}),""!==C.error&&(0,g.jsx)(a.xA9,{item:!0,xs:12,children:(0,g.jsx)("div",{className:"error",children:C.error})}),(0,g.jsx)(a.cl_,{id:"nodes",name:"nodes",onChange:e=>{var t;e.target.validity.valid&&(M("nodes",e.target.value),t="nodes",D((0,u.p)(L,t)))},label:"Number of Servers",disabled:""===O,value:v,min:"4",required:!0,error:L.nodes||"",pattern:"[0-9]*"}),(0,g.jsx)(a.l6P,{id:"ec_parity",name:"ec_parity",onChange:e=>{M("ecParity",e)},label:"Erasure Code Parity",disabled:""===O,value:S,options:T}),(0,g.jsx)("span",{className:"muted",children:"Please select the desired parity. This setting will change the max usable capacity in the cluster"})]})};var b=n(3811);let v=function(e){return e[e.aws=0]="aws",e[e.azure=1]="azure",e[e.gcp=2]="gcp",e[e.default=3]="default",e[e[void 0]=4]="undefined",e}({});const y={"mp-mode-aws":v.aws,"mp-mode-azure":v.azure,"mp-mode-gcp":v.gcp},_={[v.aws]:{variantSelectorLabel:"Storage Type",variantSelectorValues:[{label:"Performance Optimized",value:"performance"},{label:"Capacity Optimized",value:"capacity"}],configurations:[{typeSelection:"performance",storageClass:"performance-optimized",CPU:64,memory:128,driveSize:{driveSize:"32",sizeUnit:"Gi"},drivesPerServer:4,minimumVolumeSize:{driveSize:"32",sizeUnit:"Gi"}},{typeSelection:"capacity",storageClass:"capacity-optimized",CPU:64,memory:128,driveSize:{driveSize:"16",sizeUnit:"Ti"},drivesPerServer:18,minimumVolumeSize:{driveSize:"16",sizeUnit:"Ti"}}],sizingComponent:(0,g.jsx)(b.A,{formToRender:v.aws})},[v.azure]:{variantSelectorLabel:"VM Size",variantSelectorValues:[{label:"Standard_L32s_v2",value:"Standard_L32s_v2"},{label:"Standard_L48s_v2",value:"Standard_L48s_v2"},{label:"Standard_L64s_v2",value:"Standard_L64s_v2"}],configurations:[{typeSelection:"Standard_L8s_v2",storageClass:"local-nvme",CPU:8,memory:64,driveSize:{driveSize:"1787",sizeUnit:"Gi"},drivesPerServer:1},{typeSelection:"Standard_L16s_v2",storageClass:"local-nvme",CPU:16,memory:128,driveSize:{driveSize:"1787",sizeUnit:"Gi"},drivesPerServer:2},{typeSelection:"Standard_L32s_v2",storageClass:"local-nvme",CPU:32,memory:256,driveSize:{driveSize:"1787",sizeUnit:"Gi"},drivesPerServer:4},{typeSelection:"Standard_L48s_v2",storageClass:"local-nvme",CPU:48,memory:384,driveSize:{driveSize:"1787",sizeUnit:"Gi"},drivesPerServer:6},{typeSelection:"Standard_L64s_v2",storageClass:"local-nvme",CPU:64,memory:512,driveSize:{driveSize:"1787",sizeUnit:"Gi"},drivesPerServer:8}],sizingComponent:(0,g.jsx)(E,{formToRender:v.azure})},[v.gcp]:{variantSelectorLabel:"Storage Type",variantSelectorValues:[{label:"SSD",value:"ssd"}],configurations:[{typeSelection:"ssd",storageClass:"local-ssd",CPU:32,memory:128,driveSize:{driveSize:"368",sizeUnit:"Gi"},drivesPerServer:24}],sizingComponent:(0,g.jsx)(E,{formToRender:v.gcp})},[v.default]:{},[v.undefined]:{}}},4493:(e,t,n)=>{"use strict";n.d(t,{re:()=>A,Kx:()=>R,g8:()=>L,$U:()=>P,vz:()=>M,oN:()=>D,HI:()=>w,ZJ:()=>O,Ay:()=>x,Eh:()=>Q,lJ:()=>K,KJ:()=>Z,nI:()=>N,ib:()=>j,LI:()=>H,e7:()=>ie,hb:()=>se,xE:()=>C,KK:()=>k,z9:()=>I,qK:()=>y,uq:()=>oe,Vj:()=>J,Wi:()=>ee,Yq:()=>W,hh:()=>V,Ap:()=>G,vH:()=>B,kb:()=>U,YY:()=>te,lW:()=>X,UQ:()=>Y,cZ:()=>q,p$:()=>$,EZ:()=>F,KH:()=>re,a0:()=>S,s1:()=>ne,Um:()=>z,rJ:()=>v});var r=n(907),a=n(9499),o=n(1255),i=n(969),s=n(3536),l=n(3097),c=n.n(l),u=n(3029),d=n(6483),p=n(286),m=n(788);const f=(e,t,n)=>{let r=e.validPages;if(n)r.includes(t)||(r.push(t),e.validPages=[...r]);else{const n=r.filter((e=>e!==t));e.validPages=[...n]}};var h=n(5034);const g={addingTenant:!1,page:0,validPages:["tenantSize","configure","affinity","identityProvider","security","encryption"],validationErrors:{},storageClasses:[],limitSize:{},fields:{nameTenant:{tenantName:"",namespace:"",selectedStorageClass:"",selectedStorageType:""},configure:{customImage:!0,imageName:"",customDockerhub:!1,imageRegistry:"",imageRegistryUsername:"",imageRegistryPassword:"",exposeMinIO:!0,exposeConsole:!0,exposeSFTP:!1,tenantCustom:!1,customRuntime:!1,runtimeClassName:"",envVars:[{key:"",value:""}],kesImage:"",setDomains:!1,consoleDomain:"",minioDomains:[""],tenantSecurityContext:{runAsUser:"1000",runAsGroup:"1000",fsGroup:"1000",fsGroupChangePolicy:"Always",runAsNonRoot:!0}},identityProvider:{idpSelection:"Built-in",accessKeys:[(0,i.$)(16)],secretKeys:[(0,i.$)(32)],openIDConfigurationURL:"",openIDClientID:"",openIDSecretID:"",openIDCallbackURL:"",openIDClaimName:"",openIDScopes:"",ADURL:"",ADSkipTLS:!1,ADServerInsecure:!1,ADGroupSearchBaseDN:"",ADGroupSearchFilter:"",ADUserDNs:[""],ADGroupDNs:[""],ADLookupBindDN:"",ADLookupBindPassword:"",ADUserDNSearchBaseDN:"",ADUserDNSearchFilter:"",ADServerStartTLS:!1},security:{enableAutoCert:!0,enableCustomCerts:!1,enableTLS:!0},encryption:{rawConfiguration:"",encryptionTab:"kms-options",enableEncryption:!1,encryptionType:"vault",gemaltoEndpoint:"",gemaltoToken:"",gemaltoDomain:"",gemaltoRetry:"0",awsEndpoint:"",awsRegion:"",awsKMSKey:"",awsAccessKey:"",awsSecretKey:"",awsToken:"",vaultEndpoint:"",vaultEngine:"",vaultNamespace:"",vaultPrefix:"",vaultAppRoleEngine:"",vaultId:"",vaultSecret:"",vaultRetry:"0",vaultPing:"0",azureEndpoint:"",azureTenantID:"",azureClientID:"",azureClientSecret:"",gcpProjectID:"",gcpEndpoint:"",gcpClientEmail:"",gcpClientID:"",gcpPrivateKeyID:"",gcpPrivateKey:"",enableCustomCertsForKES:!1,replicas:"1",kesSecurityContext:{runAsUser:"1000",runAsGroup:"1000",fsGroup:"1000",fsGroupChangePolicy:"Always",runAsNonRoot:!0}},tenantSize:{volumeSize:"1024",sizeFactor:"Gi",drivesPerServer:"4",nodes:"4",memoryNode:"2",ecParity:"",ecParityChoices:[],cleanECChoices:[],untouchedECField:!0,cpuToUse:"0",resourcesSpecifyLimit:!1,resourcesCPURequestError:"",resourcesCPURequest:"",resourcesCPULimitError:"",resourcesCPULimit:"",resourcesMemoryRequestError:"",resourcesMemoryRequest:"",resourcesMemoryLimitError:"",resourcesMemoryLimit:"",resourcesSize:{error:"",memoryRequest:0,memoryLimit:0,cpuRequest:0,cpuLimit:0},distribution:{error:"",nodes:0,persistentVolumes:0,disks:0},ecParityCalc:{error:0,defaultEC:"",erasureCodeSet:0,maxEC:"",rawCapacity:"0",storageFactors:[]},limitSize:{},maxAllocatableResources:{min_allocatable_mem:0,min_allocatable_cpu:0,cpu_priority:{max_allocatable_cpu:0,max_allocatable_mem:0},mem_priority:{max_allocatable_cpu:0,max_allocatable_mem:0}},maxCPUsUse:"0",maxMemorySize:"0",integrationSelection:{driveSize:{driveSize:"0",sizeUnit:"B"},CPU:0,typeSelection:"",memory:0,drivesPerServer:0,storageClass:""}},affinity:{nodeSelectorLabels:"",podAffinity:"default",withPodAntiAffinity:!0}},certificates:{minioServerCertificates:[{id:Date.now().toString(),key:"",cert:"",encoded_key:"",encoded_cert:""}],minioClientCertificates:[{id:Date.now().toString(),key:"",cert:"",encoded_key:"",encoded_cert:""}],minioCAsCertificates:[{id:Date.now().toString(),key:"",cert:"",encoded_key:"",encoded_cert:""}],kesServerCertificate:{id:"encryptionServerCertificate",key:"",cert:"",encoded_key:"",encoded_cert:""},minioMTLSCertificate:{id:"encryptionClientCertificate",key:"",cert:"",encoded_key:"",encoded_cert:""},kmsMTLSCertificate:{id:"encryptionKMSMTLSCertificate",key:"",cert:"",encoded_key:"",encoded_cert:""},kmsCA:{id:"encryptionKMSCA",key:"",cert:"",encoded_key:"",encoded_cert:""}},nodeSelectorPairs:[{key:"",value:""}],tolerations:[{key:"",tolerationSeconds:{seconds:0},value:"",effect:o.u.NoSchedule,operator:o.n.Equal}],createdAccount:null,showNewCredentials:!1,emptyNamespace:!0,loadingNamespaceInfo:!1,showNSCreateButton:!1,addNSOpen:!1,addNSLoading:!1},E=(0,r.Z0)({name:"createTenant",initialState:g,reducers:{setTenantWizardPage:(e,t)=>{e.page=t.payload},updateAddField:(e,t)=>{if((0,s.has)(e.fields,"".concat(t.payload.pageName,".").concat(t.payload.field))){const n=c()(e.fields,"".concat(t.payload.pageName),{});let r={};r[t.payload.field]=t.payload.value;const a={...n,...r};e.fields[t.payload.pageName]={...a}}},isPageValid:(e,t)=>{let n=e.validPages;if(t.payload.valid)n.includes(t.payload.pageName)||(n.push(t.payload.pageName),e.validPages=[...n]);else{const r=n.filter((e=>e!==t.payload.pageName));e.validPages=[...r]}},setStorageClassesList:(e,t)=>{e.storageClasses=t.payload},setStorageType:(e,t)=>{let n=e.fields.tenantSize.volumeSize,r=e.fields.tenantSize.sizeFactor,a=e.fields.tenantSize.volumeSize,o=e.fields.nameTenant.selectedStorageClass;if(void 0!==t.payload.features&&t.payload.features.length>0){let l=u.oD.default;if(Object.keys(u.h2).forEach((e=>{void 0!==t.payload.features&&t.payload.features.includes(e)&&(l=c()(u.h2,e,u.oD.default))})),void 0!==l){const p=u.m3[l];if(Object.keys(p).length>0){const l=c()(p,"configurations",[]).find((e=>e.typeSelection===t.payload.storageType));if(void 0!==l&&(o=l.storageClass,l.minimumVolumeSize)){var i,s;const t=(0,d.lJ)(null===(i=l.minimumVolumeSize)||void 0===i?void 0:i.driveSize,null===(s=l.minimumVolumeSize)||void 0===s?void 0:s.sizeUnit,!0),o=e.fields.tenantSize.drivesPerServer,c=e.fields.tenantSize.drivesPerServer;if((0,d.lJ)(n.toString(),r,!0){e.limitSize=t.payload},addKeyPair:e=>{const t=[...e.certificates.minioServerCertificates,{id:Date.now().toString(),key:"",cert:"",encoded_key:"",encoded_cert:""}];e.certificates.minioServerCertificates=[...t]},addFileToKeyPair:(e,t)=>{const n=e.certificates.minioServerCertificates.map((e=>e.id===t.payload.id?{...e,[t.payload.key]:t.payload.fileName,["encoded_".concat(t.payload.key)]:t.payload.value}:e));e.certificates.minioServerCertificates=[...n]},deleteKeyPair:(e,t)=>{const n=e.certificates.minioServerCertificates;n.length>1&&(e.certificates.minioServerCertificates=n.filter((e=>e.id!==t.payload)))},addClientKeyPair:e=>{const t=[...e.certificates.minioClientCertificates,{id:Date.now().toString(),key:"",cert:"",encoded_key:"",encoded_cert:""}];e.certificates.minioClientCertificates=[...t]},addFileToClientKeyPair:(e,t)=>{const n=e.certificates.minioClientCertificates.map((e=>e.id===t.payload.id?{...e,[t.payload.key]:t.payload.fileName,["encoded_".concat(t.payload.key)]:t.payload.value}:e));e.certificates.minioClientCertificates=[...n]},deleteClientKeyPair:(e,t)=>{const n=e.certificates.minioClientCertificates;n.length>1&&(e.certificates.minioClientCertificates=n.filter((e=>e.id!==t.payload)))},addCaCertificate:e=>{e.certificates.minioCAsCertificates.push({id:Date.now().toString(),key:"",cert:"",encoded_key:"",encoded_cert:""})},addFileToCaCertificates:(e,t)=>{const n=e.certificates.minioCAsCertificates.map((e=>e.id===t.payload.id?{...e,[t.payload.key]:t.payload.fileName,["encoded_".concat(t.payload.key)]:t.payload.value}:e));e.certificates.minioCAsCertificates=n},deleteCaCertificate:(e,t)=>{const n=e.certificates.minioCAsCertificates;n.length>1&&(e.certificates.minioCAsCertificates=n.filter((e=>e.id!==t.payload)))},addFileKESServerCert:(e,t)=>{const n=e.certificates.kesServerCertificate;e.certificates.kesServerCertificate={...n,[t.payload.key]:t.payload.fileName,["encoded_".concat(t.payload.key)]:t.payload.value}},addFileMinIOMTLSCert:(e,t)=>{const n=e.certificates.minioMTLSCertificate;e.certificates.minioMTLSCertificate={...n,[t.payload.key]:t.payload.fileName,["encoded_".concat(t.payload.key)]:t.payload.value}},addFileKMSMTLSCert:(e,t)=>{const n=e.certificates.kmsMTLSCertificate;e.certificates.kmsMTLSCertificate={...n,[t.payload.key]:t.payload.fileName,["encoded_".concat(t.payload.key)]:t.payload.value}},addFileKMSCa:(e,t)=>{const n=e.certificates.kmsCA;e.certificates.kmsCA={...n,cert:t.payload.fileName,encoded_cert:t.payload.value}},resetAddTenantForm:()=>g,setKeyValuePairs:(e,t)=>{e.nodeSelectorPairs=t.payload},setEnvVars:(e,t)=>{e.fields.configure.envVars=t.payload},setTolerationInfo:(e,t)=>{e.tolerations[t.payload.index]=t.payload.tolerationValue},addNewToleration:e=>{const t=[...e.tolerations,{key:"",tolerationSeconds:{seconds:0},value:"",effect:o.u.NoSchedule,operator:o.n.Equal}];e.tolerations=t},removeToleration:(e,t)=>{e.tolerations=e.tolerations.filter(((e,n)=>n!==t.payload))},addNewMinIODomain:e=>{e.fields.configure.minioDomains.push("")},removeMinIODomain:(e,t)=>{e.fields.configure.minioDomains=e.fields.configure.minioDomains.filter(((e,n)=>n!==t.payload))},addIDPNewKeyPair:e=>{e.fields.identityProvider.accessKeys.push((0,i.$)(16)),e.fields.identityProvider.secretKeys.push((0,i.$)(32))},removeIDPKeyPairAtIndex:(e,t)=>{e.fields.identityProvider.accessKeys.length>t.payload&&(e.fields.identityProvider.accessKeys.splice(t.payload,1),e.fields.identityProvider.secretKeys.splice(t.payload,1))},setIDPUsrAtIndex:(e,t)=>{e.fields.identityProvider.accessKeys.length>t.payload.index&&(e.fields.identityProvider.accessKeys[t.payload.index]=t.payload.accessKey)},setIDPPwdAtIndex:(e,t)=>{e.fields.identityProvider.secretKeys.length>t.payload.index&&(e.fields.identityProvider.secretKeys[t.payload.index]=t.payload.secretKey)},addIDPADUsrAtIndex:e=>{e.fields.identityProvider.ADUserDNs.push("")},removeIDPADUsrAtIndex:(e,t)=>{e.fields.identityProvider.ADUserDNs.length>t.payload&&e.fields.identityProvider.ADUserDNs.splice(t.payload,1)},setIDPADUsrAtIndex:(e,t)=>{e.fields.identityProvider.ADUserDNs.length>t.payload.index&&(e.fields.identityProvider.ADUserDNs[t.payload.index]=t.payload.userDN)},addIDPADGroupAtIndex:e=>{e.fields.identityProvider.ADGroupDNs.push("")},removeIDPADGroupAtIndex:(e,t)=>{e.fields.identityProvider.ADGroupDNs.length>t.payload&&e.fields.identityProvider.ADGroupDNs.splice(t.payload,1)},setIDPADGroupAtIndex:(e,t)=>{e.fields.identityProvider.ADGroupDNs.length>t.payload.index&&(e.fields.identityProvider.ADGroupDNs[t.payload.index]=t.payload.userDN)},setIDP:(e,t)=>{e.fields.identityProvider.idpSelection=t.payload},setTenantName:(e,t)=>{e.fields.nameTenant.tenantName=t.payload,delete e.validationErrors["tenant-name"];const n=(0,m.D)([{fieldKey:"tenant-name",required:!0,pattern:/^[a-z0-9-]{3,63}$/,customPatternMessage:"Name only can contain lowercase letters, numbers and '-'. Min. Length: 3",value:t.payload}]);let r=!1;"tenant-name"in n&&(r=!0,e.validationErrors["tenant-name"]=n["tenant-name"]),f(e,"nameTenant",r)},setNamespace:(e,t)=>{e.fields.nameTenant.namespace=t.payload,delete e.validationErrors.namespace;let n=!1,r="";e.storageClasses.length<1&&e.emptyNamespace&&!e.loadingNamespaceInfo&&(n=!0,r="Please enter a valid namespace");const a=(0,m.D)([{fieldKey:"namespace",required:!0,value:t.payload,customValidation:n,customValidationMessage:r}]);let o=!1;"namespace"in a&&(o=!0,e.validationErrors.namespace=a.namespace),f(e,"nameTenant",o)},showNSCreate:(e,t)=>{e.showNSCreateButton=t.payload},openAddNSModal:e=>{e.addNSOpen=!0},closeAddNSModal:e=>{e.addNSOpen=!1}},extraReducers:e=>{e.addCase(p.J.pending,((e,t)=>{e.addingTenant=!0,e.createdAccount=null,e.showNewCredentials=!1})).addCase(p.J.rejected,((e,t)=>{e.addingTenant=!1})).addCase(p.J.fulfilled,((e,t)=>{e.addingTenant=!1,e.createdAccount=t.payload,e.showNewCredentials=!0})).addCase(h.kE.pending,((e,t)=>{e.loadingNamespaceInfo=!0,e.showNSCreateButton=!1,delete e.validationErrors.namespace})).addCase(h.kE.rejected,((e,t)=>{e.loadingNamespaceInfo=!1,e.showNSCreateButton=!0})).addCase(h.kE.fulfilled,((e,t)=>{e.showNSCreateButton=!1,e.emptyNamespace=t.payload,e.emptyNamespace||(e.validationErrors.namespace="You can only create one tenant per namespace")})).addCase(h.j2.pending,((e,t)=>{e.loadingNamespaceInfo=!0})).addCase(h.j2.rejected,((e,t)=>{e.loadingNamespaceInfo=!1,e.showNSCreateButton=!0,e.fields.nameTenant.selectedStorageClass="",e.storageClasses=[],e.validationErrors.namespace="Please enter a valid namespace"})).addCase(h.j2.fulfilled,((e,t)=>{e.loadingNamespaceInfo=!1;const n=c()(t.payload,"elements",[]);if(e.limitSize=(0,a.Q)(t.payload),null===n||0===n.length)return void(e.validationErrors.namespace="No storage classes available.");const r=n.map((e=>{const t=c()(e,"name","").split(".storageclass.storage.k8s.io/requests.storage")[0];return{label:t,value:t}}));e.storageClasses=r;const o=r.findIndex((t=>t.value===e.fields.nameTenant.selectedStorageClass));r.length>0&&-1===o?e.fields.nameTenant.selectedStorageClass=r[0].value:0===r.length&&(e.fields.nameTenant.selectedStorageClass="",e.storageClasses=[])})).addCase(h.CC.pending,((e,t)=>{e.addNSLoading=!0})).addCase(h.CC.rejected,((e,t)=>{e.addNSLoading=!1})).addCase(h.CC.fulfilled,((e,t)=>{e.addNSLoading=!1,e.addNSOpen=!1,delete e.validationErrors.namespace}))}}),{setTenantWizardPage:b,updateAddField:v,isPageValid:y,setStorageClassesList:_,setStorageType:S,setLimitSize:T,addCaCertificate:A,deleteCaCertificate:C,addFileToCaCertificates:w,addKeyPair:N,deleteKeyPair:I,addFileToKeyPair:x,addClientKeyPair:R,deleteClientKeyPair:k,addFileToClientKeyPair:O,addFileKESServerCert:L,addFileMinIOMTLSCert:D,addFileKMSMTLSCert:M,addFileKMSCa:P,resetAddTenantForm:B,setKeyValuePairs:F,setEnvVars:U,setTolerationInfo:z,addNewToleration:H,removeToleration:G,addNewMinIODomain:j,removeMinIODomain:V,addIDPNewKeyPair:Z,removeIDPKeyPairAtIndex:W,setIDPUsrAtIndex:$,setIDPPwdAtIndex:q,setIDPADUsrAtIndex:Y,addIDPADUsrAtIndex:K,setIDPADGroupAtIndex:X,addIDPADGroupAtIndex:Q,removeIDPADGroupAtIndex:J,removeIDPADUsrAtIndex:ee,setIDP:te,setTenantName:ne,setNamespace:re,showNSCreate:ae,openAddNSModal:oe,closeAddNSModal:ie}=E.actions,se=E.reducer},286:(e,t,n)=>{"use strict";n.d(t,{J:()=>u});var r=n(907),a=n(6483),o=n(7612),i=n(3097),s=n.n(i),l=n(7984);var c=n(4159);const u=(0,r.zD)("createTenant/createTenantAsync",(async(e,t)=>{let{getState:n,rejectWithValue:r,dispatch:i}=t;const u=n();let d=u.createTenant.fields,p=u.createTenant.certificates;const m=d.nameTenant.tenantName,f=d.nameTenant.selectedStorageClass,h=d.configure.imageName,g=d.configure.customDockerhub,E=d.configure.imageRegistry,b=d.configure.imageRegistryUsername,v=d.configure.imageRegistryPassword,y=d.configure.exposeMinIO,_=d.configure.exposeConsole,S=d.configure.exposeSFTP,T=d.identityProvider.idpSelection,A=d.identityProvider.openIDConfigurationURL,C=d.identityProvider.openIDClientID,w=d.identityProvider.openIDClaimName,N=d.identityProvider.openIDCallbackURL,I=d.identityProvider.openIDScopes,x=d.identityProvider.openIDSecretID,R=d.identityProvider.ADURL,k=d.identityProvider.ADSkipTLS,O=d.identityProvider.ADServerInsecure,L=d.identityProvider.ADGroupSearchBaseDN,D=d.identityProvider.ADGroupSearchFilter,M=d.identityProvider.ADUserDNs,P=d.identityProvider.ADGroupDNs,B=d.identityProvider.ADLookupBindDN,F=d.identityProvider.ADLookupBindPassword,U=d.identityProvider.ADUserDNSearchBaseDN,z=d.identityProvider.ADUserDNSearchFilter,H=d.identityProvider.ADServerStartTLS,G=d.identityProvider.accessKeys,j=d.identityProvider.secretKeys,V=p.minioServerCertificates,Z=p.minioClientCertificates,W=p.minioCAsCertificates,$=p.kesServerCertificate,q=p.minioMTLSCertificate,Y=p.kmsMTLSCertificate,K=p.kmsCA,X=d.encryption.rawConfiguration,Q=d.encryption.encryptionTab,J=d.encryption.enableEncryption,ee=d.encryption.encryptionType,te=d.encryption.gemaltoEndpoint,ne=d.encryption.gemaltoToken,re=d.encryption.gemaltoDomain,ae=d.encryption.gemaltoRetry,oe=d.encryption.awsEndpoint,ie=d.encryption.awsRegion,se=d.encryption.awsKMSKey,le=d.encryption.awsAccessKey,ce=d.encryption.awsSecretKey,ue=d.encryption.awsToken,de=d.encryption.vaultEndpoint,pe=d.encryption.vaultEngine,me=d.encryption.vaultNamespace,fe=d.encryption.vaultPrefix,he=d.encryption.vaultAppRoleEngine,ge=d.encryption.vaultId,Ee=d.encryption.vaultSecret,be=d.encryption.vaultRetry,ve=d.encryption.vaultPing,ye=d.encryption.azureEndpoint,_e=d.encryption.azureTenantID,Se=d.encryption.azureClientID,Te=d.encryption.azureClientSecret,Ae=d.encryption.gcpProjectID,Ce=d.encryption.gcpEndpoint,we=d.encryption.gcpClientEmail,Ne=d.encryption.gcpClientID,Ie=d.encryption.gcpPrivateKeyID,xe=d.encryption.gcpPrivateKey,Re=d.security.enableAutoCert,ke=d.security.enableTLS,Oe=d.tenantSize.ecParity,Le=d.tenantSize.distribution,De=d.configure.tenantCustom,Me=d.configure.kesImage,Pe=d.affinity.podAffinity,Be=d.affinity.nodeSelectorLabels,Fe=d.affinity.withPodAntiAffinity,Ue=d.configure.tenantSecurityContext,ze=d.encryption.kesSecurityContext,He=d.encryption.replicas,Ge=d.configure.setDomains,je=d.configure.minioDomains,Ve=d.configure.consoleDomain,Ze=d.configure.envVars,We=d.configure.customRuntime,$e=d.configure.runtimeClassName;let qe=u.createTenant.tolerations,Ye=u.createTenant.fields.nameTenant.namespace;const Ke=qe.filter((e=>""!==e.key.trim())),Xe=(0,a.XK)([]);let Qe={};switch(Pe){case"default":Qe={affinity:(0,o.Ad)(m,Xe)};break;case"nodeSelector":Qe={affinity:(0,o.u5)(Be,Fe,m,Xe)}}const Je=Oe.split(":")[1];let et={};We&&(et={runtimeClassName:$e});let tt={name:m,namespace:Ye,access_key:"",secret_key:"",enable_tls:ke&&Re,enable_console:!0,image:h,expose_minio:y,expose_console:_,expose_sftp:S,pools:[{name:Xe,servers:Le.nodes,volumes_per_server:Le.disks,volume_configuration:{size:Le.pvSize,storage_class_name:f},securityContext:De?Ue:void 0,tolerations:Ke,...Qe,...et}],erasureCodingParity:parseInt(Je,10)};""===d.tenantSize.resourcesCPURequest&&""===d.tenantSize.resourcesCPULimit&&""===d.tenantSize.resourcesMemoryRequest&&""===d.tenantSize.resourcesMemoryLimit||(tt.pools[0].resources={},""===d.tenantSize.resourcesCPURequest&&""===d.tenantSize.resourcesMemoryRequest||(tt.pools[0].resources.requests={},""!==d.tenantSize.resourcesCPURequest&&(tt.pools[0].resources.requests.cpu=parseInt(d.tenantSize.resourcesCPURequest)),""!==d.tenantSize.resourcesMemoryRequest&&(tt.pools[0].resources.requests.memory=parseInt((0,a.q5)(d.tenantSize.resourcesMemoryRequest,"Gi",!0)))),""===d.tenantSize.resourcesCPULimit&&""===d.tenantSize.resourcesMemoryLimit||(tt.pools[0].resources.limits={},""!==d.tenantSize.resourcesCPULimit&&(tt.pools[0].resources.limits.cpu=parseInt(d.tenantSize.resourcesCPULimit)),""!==d.tenantSize.resourcesMemoryLimit&&(tt.pools[0].resources.limits.memory=parseInt((0,a.q5)(d.tenantSize.resourcesMemoryLimit,"Gi",!0))))),g&&(tt={...tt,image_registry:{registry:E,username:b,password:v}});let nt=null,rt=null,at=null;if(ke&&V.length>0&&(nt={minioServerCertificates:V.map((e=>({crt:e.encoded_cert,key:e.encoded_key}))).filter((e=>e.crt&&e.key))}),ke&&Z.length>0&&(rt={minioClientCertificates:Z.map((e=>({crt:e.encoded_cert,key:e.encoded_key}))).filter((e=>e.crt&&e.key))}),ke&&W.length>0&&(at={minioCAsCertificates:W.map((e=>e.encoded_cert)).filter((e=>e))}),(V||Z||W)&&(tt={...tt,tls:{...nt,...rt,...at}}),J){let e={};switch(ee){case"gemalto":e={gemalto:{keysecure:{endpoint:te,credentials:{token:ne,domain:re,retry:parseInt(ae)}}}};break;case"aws":e={aws:{secretsmanager:{endpoint:oe,region:ie,kmskey:se,credentials:{accesskey:le,secretkey:ce,token:ue}}}};break;case"azure":e={azure:{keyvault:{endpoint:ye,credentials:{tenant_id:_e,client_id:Se,client_secret:Te}}}};break;case"gcp":e={gcp:{secretmanager:{project_id:Ae,endpoint:Ce,credentials:{client_email:we,client_id:Ne,private_key_id:Ie,private_key:xe}}}};break;case"vault":e={vault:{endpoint:de,engine:pe,namespace:me,prefix:fe,approle:{engine:he,id:ge,secret:Ee,retry:parseInt(be)},status:{ping:parseInt(ve)}}}}let t={},n={},r={};""!==q.encoded_key&&""!==q.encoded_cert&&(n={minio_mtls:{key:q.encoded_key,crt:q.encoded_cert}}),""!==$.encoded_key&&""!==$.encoded_cert&&(t={server_tls:{key:$.encoded_key,crt:$.encoded_cert}});let a=null,o=null;""!==Y.encoded_key&&""!==Y.encoded_cert&&(a={key:Y.encoded_key,crt:Y.encoded_cert}),""!==K.encoded_cert&&(o={ca:K.encoded_cert}),(a||o)&&(r={kms_mtls:{...a,...o}}),tt={...tt,encryption:{raw:Q?X:"",replicas:He,securityContext:ze,image:Me,...n,...t,...r,...e}}}let ot={};switch(T){case"Built-in":let e=[];for(let t=0;t""!==e.trim())),group_dns:P.filter((e=>""!==e.trim())),lookup_bind_dn:B,lookup_bind_password:F,user_dn_search_base_dn:U,user_dn_search_filter:z,server_start_tls:H}}}let it={},st={},lt={};if(Ge){""!==Ve&&(it.console=Ve);const e=je.filter((e=>""!==e.trim()));e.length>0&&(it.minio=e),Object.keys(it).length>0&&(st.domains=it)}return lt.environmentVariables=Ze.map((e=>({key:e.key.trim(),value:e.value.trim()}))).filter((e=>""!==e.key)),tt={...tt,...st,...lt,idp:{...ot}},(e=>new Promise(((t,n)=>{l.F.tenants.createTenant(e).then((e=>{var n;const r=null!==(n=e.data.console)&&void 0!==n?n:[];let a={idp:s()(e,"externalIDP",!1),console:[]};a.console=r.map((e=>({accessKey:e.access_key,secretKey:e.secret_key,api:"s3v4",path:"auto",url:e.url}))),t(a)})).catch((e=>{n(e)}))})))(tt).then((e=>e)).catch((e=>(i((0,c.C9)(e)),r(e))))}))},5034:(e,t,n)=>{"use strict";n.d(t,{CC:()=>u,j2:()=>c,kE:()=>l});var r=n(907),a=n(4159),o=n(649),i=n(3097),s=n.n(i);const l=(0,r.zD)("createTenant/validateNamespaceAsync",(async(e,t)=>{let{getState:n,rejectWithValue:r,dispatch:i}=t;const l=n().createTenant.fields.nameTenant.namespace;return o.A.invoke("GET","/api/v1/namespaces/".concat(l,"/tenants")).then((e=>{const t=s()(e,"tenants",[]);let n=!0;return!(t&&t.length>0)&&(i(c()),n)})).catch((e=>(i((0,a.Dy)({errorMessage:"Error validating if namespace already has tenants",detailedError:e.detailedError})),r(!1))))})),c=(0,r.zD)("createTenant/namespaceResourcesAsync",(async(e,t)=>{let{getState:n,rejectWithValue:r}=t;const a=n().createTenant.fields.nameTenant.namespace;return o.A.invoke("GET","/api/v1/namespaces/".concat(a,"/resourcequotas/").concat(a,"-storagequota")).then((e=>e)).catch((e=>(console.error("Namespace quota error: ",e),r(null))))})),u=(0,r.zD)("createTenant/createNamespaceAsync",(async(e,t)=>{let{getState:n,rejectWithValue:r,dispatch:i}=t;const s=n().createTenant.fields.nameTenant.namespace;return o.A.invoke("POST","/api/v1/namespace",{name:s}).then((e=>(i(l()),!0))).catch((e=>{i((0,a.C9)(e)),r(!1)}))}))},9499:(e,t,n)=>{"use strict";n.d(t,{D:()=>o,Q:()=>i});var r=n(3097),a=n.n(r);const o=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return e.map((e=>{let n=e;return""!==t&&e===t&&(n="".concat(e," (Default)")),{label:n,value:e}}))},i=e=>{const t=a()(e,"elements",[]);if(null===t)return{};const n={};return t.forEach((e=>{const t=e.name.split(".storageclass.storage.k8s.io/requests.storage")[0],r=a()(e,"hard",0),o=a()(e,"used",0);n[t]=r-o})),n}},4014:(e,t,n)=>{"use strict";n.d(t,{Ay:()=>y,U0:()=>b,_l:()=>v,ck:()=>f,gm:()=>h,iq:()=>p,pZ:()=>m,uC:()=>g,zV:()=>E});var r=n(907),a=n(1255),o=n(3536),i=n(3097),s=n.n(i),l=n(9632);const c={addPoolLoading:!1,sending:!1,validPages:["affinity","configure"],storageClasses:[],limitSize:{},navigateTo:"",setup:{numberOfNodes:0,storageClass:"",volumeSize:0,volumesPerServer:0},affinity:{nodeSelectorLabels:"",podAffinity:"default",withPodAntiAffinity:!0},configuration:{securityContextEnabled:!1,securityContext:{runAsUser:"1000",runAsGroup:"1000",fsGroup:"1000",fsGroupChangePolicy:"Always",runAsNonRoot:!0},customRuntime:!1,runtimeClassName:""},nodeSelectorPairs:[{key:"",value:""}],tolerations:[{key:"",tolerationSeconds:{seconds:0},value:"",effect:a.u.NoSchedule,operator:a.n.Equal}]},u=(0,r.Z0)({name:"addPool",initialState:c,reducers:{setPoolLoading:(e,t)=>{e.addPoolLoading=t.payload},setPoolField:(e,t)=>{if((0,o.has)(e,"".concat(t.payload.page,".").concat(t.payload.field))){const n=s()(e,"".concat(t.payload.page),{});let r={};r[t.payload.field]=t.payload.value,e[t.payload.page]={...n,...r}}},isPoolPageValid:(e,t)=>{t.payload.status?e.validPages.includes(t.payload.page)||e.validPages.push(t.payload.page):e.validPages=e.validPages.filter((e=>e!==t.payload.page))},setPoolStorageClasses:(e,t)=>{e.storageClasses=t.payload},setPoolTolerationInfo:(e,t)=>{e.tolerations[t.payload.index]=t.payload.tolerationValue},addNewPoolToleration:e=>{e.tolerations.push({key:"",tolerationSeconds:{seconds:0},value:"",effect:a.u.NoSchedule,operator:a.n.Equal})},removePoolToleration:(e,t)=>{e.tolerations=e.tolerations.filter(((e,n)=>n!==t.payload))},setPoolKeyValuePairs:(e,t)=>{e.nodeSelectorPairs=t.payload},resetPoolForm:()=>c},extraReducers:e=>{e.addCase(l.K.pending,(e=>{e.sending=!0})).addCase(l.K.rejected,(e=>{e.sending=!1})).addCase(l.K.fulfilled,((e,t)=>{e.sending=!1,t.payload&&(e.navigateTo=t.payload)}))}}),{setPoolLoading:d,resetPoolForm:p,setPoolField:m,isPoolPageValid:f,setPoolStorageClasses:h,setPoolTolerationInfo:g,addNewPoolToleration:E,removePoolToleration:b,setPoolKeyValuePairs:v}=u.actions,y=u.reducer},9632:(e,t,n)=>{"use strict";n.d(t,{K:()=>u});var r=n(907),a=n(6483),o=n(4159),i=n(7612),s=n(4014),l=n(8296),c=n(649);const u=(0,r.zD)("addPool/addPoolAsync",(async(e,t)=>{let{getState:n,rejectWithValue:r,dispatch:u}=t;const d=n(),p=d.tenants.tenantInfo,m=d.addPool.setup.storageClass,f=d.addPool.setup.numberOfNodes,h=d.addPool.setup.volumeSize,g=d.addPool.setup.volumesPerServer,E=d.addPool.affinity.podAffinity,b=d.addPool.affinity.nodeSelectorLabels,v=d.addPool.affinity.withPodAntiAffinity,y=d.addPool.tolerations,_=d.addPool.configuration.securityContextEnabled,S=d.addPool.configuration.securityContext,T=d.addPool.configuration.customRuntime,A=d.addPool.configuration.runtimeClassName;if(null===p)return;const C=(0,a.XK)(p.pools);let w={};switch(E){case"default":w={affinity:(0,i.Ad)(p.name,C)};break;case"nodeSelector":w={affinity:(0,i.u5)(b,v,p.name,C)}}let N={};T&&(N={runtimeClassName:A});const I={name:C,servers:f,volumes_per_server:g,volume_configuration:{size:1073741824*h,storage_class_name:m,labels:null},tolerations:y.filter((e=>""!==e.key.trim())),securityContext:_?S:null,...w,...N},x="/namespaces/".concat((null===p||void 0===p?void 0:p.namespace)||"","/tenants/").concat((null===p||void 0===p?void 0:p.name)||"","/pools");return c.A.invoke("POST","/api/v1/namespaces/".concat(p.namespace,"/tenants/").concat(p.name,"/pools"),I).then((()=>(u((0,s.iq)()),u((0,l.X)()),x))).catch((e=>{u((0,o.C9)(e))}))}))},6812:(e,t,n)=>{"use strict";n.d(t,{A:()=>g,Ay:()=>_,DV:()=>b,I0:()=>h,QO:()=>v,cH:()=>E,km:()=>y,l7:()=>d,oz:()=>m,xL:()=>f});var r=n(907),a=n(1255),o=n(3536),i=n(3097),s=n.n(i),l=n(4042);const c={editPoolLoading:!1,validPages:["setup","affinity","configure"],storageClasses:[],limitSize:{},fields:{setup:{numberOfNodes:0,storageClass:"",volumeSize:0,volumesPerServer:0},affinity:{nodeSelectorLabels:"",podAffinity:"default",withPodAntiAffinity:!0},configuration:{securityContextEnabled:!1,securityContext:{runAsUser:"1000",runAsGroup:"1000",fsGroup:"1000",fsGroupChangePolicy:"Always",runAsNonRoot:!0},customRuntime:!1,runtimeClassName:""},nodeSelectorPairs:[{key:"",value:""}],tolerations:[{key:"",tolerationSeconds:{seconds:0},value:"",effect:a.u.NoSchedule,operator:a.n.Equal}]},editSending:!1,navigateTo:""},u=(0,r.Z0)({name:"editPool",initialState:c,reducers:{setInitialPoolDetails:(e,t)=>{var n,r,o,i,s,l,c,u;let d="none",p=!1,m="",f=[{key:"",tolerationSeconds:{seconds:0},value:"",effect:a.u.NoSchedule,operator:a.n.Equal}],h=[{key:"",value:""}];var g;null!==(n=t.payload.affinity)&&void 0!==n&&n.nodeAffinity?(d="nodeSelector",null!==(g=t.payload.affinity)&&void 0!==g&&g.podAntiAffinity&&(p=!0)):null!==(r=t.payload.affinity)&&void 0!==r&&r.podAntiAffinity&&(d="default");if(null!==(o=t.payload.affinity)&&void 0!==o&&o.nodeAffinity){var E,b,v;let e=[];h=[],null===(E=t.payload.affinity)||void 0===E||null===(b=E.nodeAffinity)||void 0===b||null===(v=b.requiredDuringSchedulingIgnoredDuringExecution)||void 0===v||v.nodeSelectorTerms.forEach((t=>{var n;null===(n=t.matchExpressions)||void 0===n||n.forEach((t=>{var n,r;e.push("".concat(t.key,"=").concat(null===(n=t.values)||void 0===n?void 0:n.join(","))),h.push({key:t.key,value:null===(r=t.values)||void 0===r?void 0:r.join(", ")})}))})),m=e.join("&")}let y=!1;var _;(t.payload.securityContext&&(y=!!t.payload.securityContext.runAsUser||!!t.payload.securityContext.runAsGroup||!!t.payload.securityContext.fsGroup),t.payload.tolerations)&&(f=null===(_=t.payload.tolerations)||void 0===_?void 0:_.map((e=>({key:e.key,tolerationSeconds:e.tolerationSeconds,value:e.value,effect:e.effect,operator:e.operator}))));const S=t.payload.volume_configuration.size/1073741824,T={setup:{numberOfNodes:t.payload.servers,storageClass:t.payload.volume_configuration.storage_class_name,volumeSize:S,volumesPerServer:t.payload.volumes_per_server},configuration:{securityContextEnabled:y,securityContext:{runAsUser:(null===(i=t.payload.securityContext)||void 0===i?void 0:i.runAsUser)||"",runAsGroup:(null===(s=t.payload.securityContext)||void 0===s?void 0:s.runAsGroup)||"",fsGroup:(null===(l=t.payload.securityContext)||void 0===l?void 0:l.fsGroup)||"",fsGroupChangePolicy:(null===(c=t.payload.securityContext)||void 0===c?void 0:c.fsGroupChangePolicy)||"Always",runAsNonRoot:!(null===(u=t.payload.securityContext)||void 0===u||!u.runAsNonRoot)},customRuntime:!!t.payload.runtimeClassName,runtimeClassName:t.payload.runtimeClassName},affinity:{podAffinity:d,withPodAntiAffinity:p,nodeSelectorLabels:m},tolerations:f,nodeSelectorPairs:h};e.fields={...e.fields,...T}},setEditPoolLoading:(e,t)=>{e.editPoolLoading=t.payload},setEditPoolField:(e,t)=>{if((0,o.has)(e.fields,"".concat(t.payload.page,".").concat(t.payload.field))){const n=s()(e.fields,"".concat(t.payload.page),{});let r={};r[t.payload.field]=t.payload.value;const a={...n,...r};e.fields[t.payload.page]={...a}}},isEditPoolPageValid:(e,t)=>{const n=[...e.validPages];if(t.payload.status)n.includes(t.payload.page)||(n.push(t.payload.page),e.validPages=[...n]);else{const r=n.filter((e=>e!==t.payload.page));e.validPages=[...r]}},setEditPoolStorageClasses:(e,t)=>{e.storageClasses=t.payload},setEditPoolTolerationInfo:(e,t)=>{const n=[...e.fields.tolerations];n[t.payload.index]=t.payload.tolerationValue,e.fields.tolerations=n},addNewEditPoolToleration:e=>{e.fields.tolerations.push({key:"",tolerationSeconds:{seconds:0},value:"",effect:a.u.NoSchedule,operator:a.n.Equal})},removeEditPoolToleration:(e,t)=>{e.fields.tolerations=e.fields.tolerations.filter(((e,n)=>n!==t.payload))},setEditPoolKeyValuePairs:(e,t)=>{e.fields.nodeSelectorPairs=t.payload},resetEditPoolForm:()=>c},extraReducers:e=>{e.addCase(l.D.pending,((e,t)=>{e.editSending=!0})).addCase(l.D.rejected,((e,t)=>{e.editSending=!1})).addCase(l.D.fulfilled,((e,t)=>{e.editSending=!1,t.payload&&(e.navigateTo=t.payload)}))}}),{setInitialPoolDetails:d,setEditPoolLoading:p,resetEditPoolForm:m,setEditPoolField:f,isEditPoolPageValid:h,setEditPoolStorageClasses:g,setEditPoolTolerationInfo:E,addNewEditPoolToleration:b,removeEditPoolToleration:v,setEditPoolKeyValuePairs:y}=u.actions,_=u.reducer},4042:(e,t,n)=>{"use strict";n.d(t,{D:()=>u});var r=n(907),a=n(4159),o=n(6483),i=n(7612),s=n(6812),l=n(8296),c=n(7984);const u=(0,r.zD)("editPool/editPoolAsync",(async(e,t)=>{var n;let{getState:r,rejectWithValue:u,dispatch:d}=t;const p=r(),m=p.tenants.tenantInfo,f=p.tenants.selectedPool,h=p.editPool.fields.setup.storageClass,g=p.editPool.fields.setup.numberOfNodes,E=p.editPool.fields.setup.volumeSize,b=p.editPool.fields.setup.volumesPerServer,v=p.editPool.fields.affinity.podAffinity,y=p.editPool.fields.affinity.nodeSelectorLabels,_=p.editPool.fields.affinity.withPodAntiAffinity,S=p.editPool.fields.tolerations,T=p.editPool.fields.configuration.securityContextEnabled,A=p.editPool.fields.configuration.securityContext,C=p.editPool.fields.configuration.customRuntime,w=p.editPool.fields.configuration.runtimeClassName;if(!m)return;const N=(0,o.XK)(m.pools);let I={};switch(v){case"default":I={affinity:(0,i.Ad)(m.name,f)};break;case"nodeSelector":I={affinity:(0,i.u5)(y,_,m.name,f)}}const x=S.filter((e=>""!==e.key.trim())),R=null===m||void 0===m||null===(n=m.pools)||void 0===n?void 0:n.filter((e=>e.name!==f)).map((e=>T&&e.securityContext&&(e.securityContext.runAsUser||e.securityContext.runAsGroup||e.securityContext.fsGroup)?e:{name:e.name,servers:e.servers,volumes_per_server:e.volumes_per_server,volume_configuration:e.volume_configuration,resources:e.resources,node_selector:e.node_selector,affinity:e.affinity,runtimeClassName:e.runtimeClassName,tolerations:e.tolerations,securityContext:void 0}));let k={};C&&(k={runtimeClassName:w}),R.push({name:f||N,servers:g,volumes_per_server:b,volume_configuration:{size:1073741824*E,storage_class_name:h,labels:void 0},tolerations:x,securityContext:T?A:void 0,...I,...k});const O={pools:R},L="/namespaces/".concat((null===m||void 0===m?void 0:m.namespace)||"","/tenants/").concat((null===m||void 0===m?void 0:m.name)||"","/pools");return c.F.namespaces.tenantUpdatePools(m.namespace,m.name,O).then((()=>(d((0,s.oz)()),d((0,l.X)()),L))).catch((e=>{d((0,a.C9)(e))}))}))},7612:(e,t,n)=>{"use strict";n.d(t,{Ad:()=>r,an:()=>o,u5:()=>a});const r=(e,t)=>({podAntiAffinity:{requiredDuringSchedulingIgnoredDuringExecution:[{labelSelector:{matchExpressions:[{key:"v1.min.io/tenant",operator:"In",values:[e]},{key:"v1.min.io/pool",operator:"In",values:[t]}]},topologyKey:"kubernetes.io/hostname"}]}}),a=(e,t,n,a)=>{const o=e.split("&");let i=[];o.forEach((e=>{const t=e.split("=");2===t.length&&i.push({key:t[0],operator:"In",values:[t[1]]})}));const s={nodeAffinity:{requiredDuringSchedulingIgnoredDuringExecution:{nodeSelectorTerms:[{matchExpressions:i}]}}};if(t){const e=r(n,a);s.podAntiAffinity=e.podAntiAffinity}return s},o=e=>""!==e.currentState&&!(e.status&&"green"!==e.status.health_status&&"yellow"!==e.status.health_status)},2987:(e,t,n)=>{"use strict";n.d(t,{Ay:()=>u,Nn:()=>s,TR:()=>c,r2:()=>o,rW:()=>l,vi:()=>i});const r=(0,n(907).Z0)({name:"editTenantSecurityContext",initialState:{securityContextEnabled:!1,runAsUser:"1000",runAsGroup:"1000",fsGroup:"1000",runAsNonRoot:!0,fsGroupChangePolicy:"Always"},reducers:{setSecurityContextEnabled:(e,t)=>{e.securityContextEnabled=t.payload},setRunAsUser:(e,t)=>{e.runAsUser=t.payload},setRunAsGroup:(e,t)=>{e.runAsGroup=t.payload},setFSGroup:(e,t)=>{e.fsGroup=t.payload},setRunAsNonRoot:(e,t)=>{e.runAsNonRoot=t.payload},setFSGroupChangePolicy:(e,t)=>{e.fsGroupChangePolicy=t.payload}}}),{setSecurityContextEnabled:a,setRunAsUser:o,setRunAsGroup:i,setFSGroup:s,setRunAsNonRoot:l,setFSGroupChangePolicy:c}=r.actions,u=r.reducer},9607:(e,t,n)=>{"use strict";n.d(t,{Ay:()=>p,VG:()=>d,ZL:()=>i,mw:()=>u,s1:()=>s});var r=n(907),a=n(8296);const o=(0,r.Z0)({name:"tenant",initialState:{currentTenant:"",currentNamespace:"",loadingTenant:!1,tenantInfo:null,currentTab:"summary",selectedPool:null,poolDetailsOpen:!1},reducers:{setTenantDetailsLoad:(e,t)=>{e.loadingTenant=t.payload},setTenantName:(e,t)=>{e.currentTenant=t.payload.name,e.currentNamespace=t.payload.namespace},setTenantInfo:(e,t)=>{t.payload&&(e.tenantInfo=t.payload)},setTenantTab:(e,t)=>{e.currentTab=t.payload},setSelectedPool:(e,t)=>{e.selectedPool=t.payload},setOpenPoolDetails:(e,t)=>{e.poolDetailsOpen=t.payload}},extraReducers:e=>{e.addCase(a.X.pending,(e=>{e.loadingTenant=!0})).addCase(a.X.rejected,(e=>{e.loadingTenant=!1})).addCase(a.X.fulfilled,((e,t)=>{e.loadingTenant=!1,e.tenantInfo=t.payload}))}}),{setTenantDetailsLoad:i,setTenantName:s,setTenantInfo:l,setTenantTab:c,setSelectedPool:u,setOpenPoolDetails:d}=o.actions,p=o.reducer},8296:(e,t,n)=>{"use strict";n.d(t,{X:()=>i});var r=n(907),a=n(4159),o=n(7984);const i=(0,r.zD)("tenantDetails/getTenantAsync",(async(e,t)=>{let{getState:n,rejectWithValue:r,dispatch:i}=t;const s=n(),l=s.tenants.currentNamespace,c=s.tenants.currentTenant;return o.F.namespaces.tenantDetails(l,c).then((e=>e.data)).catch((e=>(i((0,a.C9)(e)),r(e))))}))},969:(e,t,n)=>{"use strict";n.d(t,{$:()=>a,p:()=>r});const r=(e,t)=>{const n={...e};return delete n[t],n},a=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:16,t="",n="1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";for(let r=0;r{"use strict";n.d(t,{Ay:()=>u,h0:()=>l,s$:()=>c,tz:()=>i,wD:()=>s});var r=n(907);const a={session:{operator:!1,status:"",features:[],distributedMode:!1,permissions:{},allowResources:null,customStyles:null,envConstants:null,serverEndPoint:""}},o=(0,r.Z0)({name:"console",initialState:a,reducers:{saveSessionResponse:(e,t)=>{e.session=t.payload},resetSession:e=>{e.session=a.session}}}),{saveSessionResponse:i,resetSession:s}=o.actions,l=e=>e.console.session,c=e=>e.console.session?e.console.session.features:[],u=o.reducer},945:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>b,getTargetPath:()=>E,loginStrategyEndpoints:()=>g});var r=n(5043),a=n(9456),o=n(3216),i=n(9923),s=n(8164),l=n(2961),c=n(7545),u=n(3396);const d=(e,t)=>e.displayName>t.displayName?1:e.displayName{const e=(0,l.jL)(),t=(0,a.d4)((e=>e.login.accessKey)),n=(0,a.d4)((e=>e.login.secretKey)),o=(0,a.d4)((e=>e.login.sts)),s=(0,a.d4)((e=>e.login.useSTS)),d=(0,a.d4)((e=>e.login.loginSending));return(0,f.jsx)(i.azJ,{sx:{position:"absolute",top:0,left:0,width:"100%",height:"100%",overflow:"auto","& .form":{width:"100%"},"& .submit":{margin:"30px 0px 8px",height:40,width:"100%",boxShadow:"none",padding:"16px 30px"},"& .submitContainer":{textAlign:"right",marginTop:30},"& .linearPredef":{height:10}},children:(0,f.jsxs)("form",{className:"form",noValidate:!0,onSubmit:t=>{t.preventDefault(),e((0,c.VF)())},children:[(0,f.jsxs)(i.xA9,{container:!0,children:[(0,f.jsx)(i.xA9,{item:!0,xs:12,className:"spacerBottom",children:(0,f.jsx)(i.cl_,{fullWidth:!0,id:"accessKey",className:"inputField",value:t,onChange:t=>e((0,u.kX)(t.target.value)),placeholder:s?"STS Username":"Username",name:"accessKey",autoComplete:"username",disabled:d,startIcon:(0,f.jsx)(i.ZfC,{})})}),(0,f.jsx)(i.xA9,{item:!0,xs:12,className:s?"spacerBottom":"",children:(0,f.jsx)(i.cl_,{fullWidth:!0,value:n,onChange:t=>e((0,u.ir)(t.target.value)),name:"secretKey",type:"password",id:"secretKey",autoComplete:"current-password",disabled:d,placeholder:s?"STS Secret":"Password",startIcon:(0,f.jsx)(i.fYD,{})})}),s&&(0,f.jsx)(i.xA9,{item:!0,xs:12,className:"spacerBottom",children:(0,f.jsx)(i.cl_,{fullWidth:!0,id:"sts",value:o,onChange:t=>e((0,u.d2)(t.target.value)),placeholder:"STS Token",name:"STS",autoComplete:"sts",disabled:d,startIcon:(0,f.jsx)(i.aJN,{})})})]}),(0,f.jsx)(i.xA9,{item:!0,xs:12,className:"submitContainer",children:(0,f.jsx)(i.$nd,{type:"submit",variant:"callAction",color:"primary",id:"do-login",className:"submit",disabled:!s&&(""===t||""===n)||s&&""===o||d,label:"Login",fullWidth:!0})}),(0,f.jsx)(i.xA9,{item:!0,xs:12,className:"linearPredef",children:d&&(0,f.jsx)(i.z21,{})}),(0,f.jsx)(i.xA9,{item:!0,xs:12,className:"linearPredef",children:(0,f.jsxs)(i.azJ,{style:{textAlign:"center",marginTop:20},children:[(0,f.jsxs)("span",{onClick:()=>{e((0,u.m$)(!s))},style:{font:"normal normal normal 14px Inter",textDecoration:"underline",cursor:"pointer"},children:[!s&&(0,f.jsx)(r.Fragment,{children:"Use STS"}),s&&(0,f.jsx)(r.Fragment,{children:"Use Credentials"})]}),(0,f.jsx)("span",{onClick:()=>{e((0,u.m$)(!s))},style:{font:"normal normal normal 12px/15px Inter",textDecoration:"none",fontWeight:"bold",paddingLeft:4},children:"\u2794"})]})})]})})},g={form:"/api/v1/login","service-account":"/api/v1/login/operator"},E=()=>{let e="/";return localStorage.getItem("redirect-path")&&""!==localStorage.getItem("redirect-path")&&(e="".concat(localStorage.getItem("redirect-path")),localStorage.setItem("redirect-path","")),e},b=()=>{const e=(0,l.jL)(),t=(0,o.Zp)(),n=(0,a.d4)((e=>e.login.jwt)),g=(0,a.d4)((e=>e.login.loginStrategy)),E=(0,a.d4)((e=>e.login.loginSending)),b=(0,a.d4)((e=>e.login.loadingFetchConfiguration)),v=(0,a.d4)((e=>e.login.loadingVersion)),y=(0,a.d4)((e=>e.login.navigateTo)),_=(0,a.d4)((e=>e.login.isK8S));(0,r.useEffect)((()=>{""!==y&&(e((0,u.E2)()),t(y))}),[y,e,t]);const S=t=>{t.preventDefault(),e((0,c.VF)())};let T;switch((0,r.useEffect)((()=>{b&&e((0,c.vW)())}),[b,e]),(0,r.useEffect)((()=>{v&&e((0,c.r0)())}),[e,v]),g.loginStrategy){case s.$.form:T=(0,f.jsx)(h,{});break;case s.$.redirect:case s.$.redirectServiceAccount:{let e=[];if(g.redirectRules&&g.redirectRules.length>0&&(e=[...g.redirectRules].sort(d)),g.redirectRules&&g.redirectRules.length>1){const t=e.map((e=>({icon:(0,f.jsx)(i.o4l,{}),value:e.redirect,label:e.displayName})));T=(0,f.jsxs)(r.Fragment,{children:[(0,f.jsx)("div",{className:"loginSsoText",children:"Login with SSO:"}),(0,f.jsx)(i.l6P,{id:"alternativeMethods",name:"alternativeMethods",fixedLabel:"Other Authentication Methods",options:t,onChange:e=>{e&&(window.location.href=e)},value:""})]})}else T=1===e.length?(0,f.jsx)("div",{className:"submit, ssoSubmit",children:(0,f.jsx)(i.$nd,{variant:"callAction",id:"sso-login",label:""===e[0].displayName?"Login with SSO":e[0].displayName,onClick:()=>window.location.href=e[0].redirect,fullWidth:!0},"login-button")}):(0,f.jsx)("div",{className:"loginStrategyMessage",children:"Cannot retrieve redirect from login strategy"});break}case s.$.serviceAccount:T=(0,f.jsx)(r.Fragment,{children:(0,f.jsxs)("form",{style:{width:"100%"},noValidate:!0,onSubmit:S,children:[(0,f.jsx)(i.xA9,{container:!0,children:(0,f.jsx)(i.xA9,{item:!0,xs:12,children:(0,f.jsx)(i.cl_,{required:!0,fullWidth:!0,id:"jwt",value:n,onChange:t=>e((0,u.eI)(t.target.value)),name:"jwt",autoComplete:"off",disabled:E,placeholder:"Enter JWT",startIcon:(0,f.jsx)(i.XAi,{})})})}),(0,f.jsx)(i.xA9,{item:!0,xs:12,sx:{textAlign:"right",marginTop:30},children:(0,f.jsx)(i.$nd,{variant:"callAction",id:"do-login",disabled:""===n||E,label:"Login",fullWidth:!0})}),(0,f.jsx)(i.xA9,{item:!0,xs:12,sx:{height:10},children:E&&(0,f.jsx)(i.z21,{barHeight:5})})]})});break;default:T=(0,f.jsx)(i.azJ,{sx:{textAlign:"center","& .loadingLoginStrategy":{textAlign:"center",width:40,height:40},"& .buttonRetry":{display:"flex",justifyContent:"center"}},children:b?(0,f.jsx)(i.aHM,{className:"loadingLoginStrategy"}):(0,f.jsxs)(r.Fragment,{children:[(0,f.jsx)("div",{children:(0,f.jsxs)("p",{style:{color:"#000",textAlign:"center"},children:["An error has occurred",(0,f.jsx)("br",{}),"The backend cannot be reached."]})}),(0,f.jsx)("div",{className:"buttonRetry",children:(0,f.jsx)(i.$nd,{onClick:()=>{e((0,c.vW)())},icon:(0,f.jsx)(i.fNY,{}),iconLocation:"end",variant:"regular",id:"retry",label:"Retry"})})]})})}const A=(0,p.v)();let C="https://min.io/docs/minio/linux/index.html?ref=op";return _&&(C="https://min.io/docs/minio/kubernetes/upstream/index.html?ref=op"),(0,f.jsxs)(r.Fragment,{children:[(0,f.jsx)(m.A,{}),(0,f.jsx)(i.ndn,{logoProps:{applicationName:"operator",subVariant:A},form:T,backgroundAnimation:!1,formFooter:(0,f.jsxs)(r.Fragment,{children:[(0,f.jsx)("a",{href:C,target:"_blank",rel:"noopener",children:"Documentation"}),(0,f.jsx)("span",{className:"separator",children:"|"}),(0,f.jsx)("a",{href:"https://github.com/minio/minio",target:"_blank",rel:"noopener",children:"Github"}),(0,f.jsx)("span",{className:"separator",children:"|"}),(0,f.jsx)("a",{href:"https://subnet.min.io/?ref=op",target:"_blank",rel:"noopener",children:"Support"}),(0,f.jsx)("span",{className:"separator",children:"|"}),(0,f.jsx)("a",{href:"https://min.io/download/?ref=op",target:"_blank",rel:"noopener",children:"Download"})]}),promoHeader:(0,f.jsx)(r.Fragment,{children:"Multi-Cloud Object\xa0Store"}),promoInfo:(0,f.jsxs)(r.Fragment,{children:["MinIO's high-performance, Kubernetes-native object store is licensed under GNU AGPL v3 and is available on every cloud - public, private and edge. For more information on the terms of the license or to learn more about commercial licensing options visit the"," ",(0,f.jsx)("a",{href:"https://min.io/pricing",children:"pricing page"}),"."]})})]})}},3396:(e,t,n)=>{"use strict";n.d(t,{Ay:()=>h,E2:()=>f,Jq:()=>m,d2:()=>d,eI:()=>p,ir:()=>c,kX:()=>l,m$:()=>u});var r=n(907),a=n(8164),o=n(7545);const i={accessKey:"",secretKey:"",sts:"",useSTS:!1,jwt:"",loginStrategy:{loginStrategy:a.$.unknown,redirectRules:[]},loginSending:!1,loadingFetchConfiguration:!0,latestMinIOVersion:"",loadingVersion:!0,isDirectPV:!1,isK8S:!1,navigateTo:""},s=(0,r.Z0)({name:"login",initialState:i,reducers:{setAccessKey:(e,t)=>{e.accessKey=t.payload},setSecretKey:(e,t)=>{e.secretKey=t.payload},setUseSTS:(e,t)=>{e.useSTS=t.payload},setSTS:(e,t)=>{e.sts=t.payload},setJwt:(e,t)=>{e.jwt=t.payload},setNavigateTo:(e,t)=>{e.navigateTo=t.payload},resetForm:e=>i},extraReducers:e=>{e.addCase(o.r0.pending,((e,t)=>{e.loadingVersion=!0})).addCase(o.r0.rejected,((e,t)=>{e.loadingVersion=!1})).addCase(o.r0.fulfilled,((e,t)=>{e.loadingVersion=!1,t.payload&&(e.latestMinIOVersion=t.payload)})).addCase(o.vW.pending,((e,t)=>{e.loadingFetchConfiguration=!0})).addCase(o.vW.rejected,((e,t)=>{e.loadingFetchConfiguration=!1})).addCase(o.vW.fulfilled,((e,t)=>{e.loadingFetchConfiguration=!1,t.payload&&(e.loginStrategy=t.payload,e.isDirectPV=!!t.payload.isDirectPV,e.isK8S=!!t.payload.isK8S)})).addCase(o.VF.pending,((e,t)=>{e.loginSending=!0})).addCase(o.VF.rejected,((e,t)=>{e.loginSending=!1})).addCase(o.VF.fulfilled,((e,t)=>{e.loginSending=!1}))}}),{setAccessKey:l,setSecretKey:c,setUseSTS:u,setSTS:d,setJwt:p,setNavigateTo:m,resetForm:f}=s.actions,h=s.reducer},7545:(e,t,n)=>{"use strict";n.d(t,{VF:()=>c,r0:()=>d,vW:()=>u});var r=n(907),a=n(649),o=n(4159),i=n(8164),s=n(3396),l=n(945);const c=(0,r.zD)("login/doLoginAsync",(async(e,t)=>{let{getState:n,rejectWithValue:r,dispatch:c}=t;const u=n(),d=u.login.loginStrategy,p=u.login.accessKey,m=u.login.secretKey,f=u.login.jwt,h=u.login.sts,g=u.login.useSTS,E=d.loginStrategy===i.$.serviceAccount||d.loginStrategy===i.$.redirectServiceAccount;let b={form:{accessKey:p,secretKey:m},"service-account":{jwt:f}};return g&&(b={form:{accessKey:p,secretKey:m,sts:h}}),a.A.invoke("POST",l.loginStrategyEndpoints[d.loginStrategy]||"/api/v1/login",b[d.loginStrategy]).then((e=>{c((0,o.WQ)(!0)),d.loginStrategy===i.$.form&&localStorage.setItem("userLoggedIn",p),E?a.A.invoke("GET","/api/v1/mp-integration/").then((e=>{c((0,s.Jq)((0,l.getTargetPath)()))})).catch((e=>{404===e.statusCode?(c((0,o.lp)(!0)),c((0,s.Jq)("/marketplace"))):c((0,s.Jq)((0,l.getTargetPath)()))})):c((0,s.Jq)((0,l.getTargetPath)()))})).catch((e=>{c((0,o.C9)(e))}))})),u=(0,r.zD)("login/getFetchConfigurationAsync",(async(e,t)=>{let{getState:n,rejectWithValue:r,dispatch:i}=t;return a.A.invoke("GET","/api/v1/login").then((e=>e)).catch((e=>{i((0,o.C9)(e))}))})),d=(0,r.zD)("login/getVersionAsync",(async(e,t)=>{let{getState:n,rejectWithValue:r,dispatch:o}=t;return a.A.invoke("GET","/api/v1/check-version").then((e=>{let{current_version:t,latest_version:n}=e;return n})).catch((e=>{a.A.invoke("GET","/api/v1/check-operator-version").then((e=>{let{current_version:t,latest_version:n}=e;return n})).catch((e=>e))}))}))},8164:(e,t,n)=>{"use strict";n.d(t,{$:()=>r});let r=function(e){return e.unknown="unknown",e.form="form",e.redirect="redirect",e.serviceAccount="service-account",e.redirectServiceAccount="redirect-service-account",e}({})},2961:(e,t,n)=>{"use strict";n.d(t,{Ay:()=>B,M_:()=>M,jL:()=>P});var r=n(9456),a=n(7048),o=n(907),i=n(4159),s=n(3396),l=n(6537),c=n(9607),u=n(4493),d=n(4014),p=n(6812),m=n(2987),f=n(2811);const h={license:"",subnetPassword:"",subnetEmail:"",subnetMFAToken:"",subnetOTP:"",subnetAccessToken:"",selectedSubnetOrganization:"",subnetRegToken:"",subnetOrganizations:[],showPassword:!1,loading:!1,loadingLicenseInfo:!1,clusterRegistered:!1,licenseInfo:void 0,curTab:0},g=(0,o.Z0)({name:"register",initialState:h,reducers:{setLicense:(e,t)=>{e.license=t.payload},setSubnetPassword:(e,t)=>{e.subnetPassword=t.payload},setSubnetEmail:(e,t)=>{e.subnetEmail=t.payload},setSubnetMFAToken:(e,t)=>{e.subnetMFAToken=t.payload},setSubnetOTP:(e,t)=>{e.subnetOTP=t.payload},setSubnetAccessToken:(e,t)=>{e.subnetAccessToken=t.payload},setSelectedSubnetOrganization:(e,t)=>{e.selectedSubnetOrganization=t.payload},setSubnetRegToken:(e,t)=>{e.subnetRegToken=t.payload},setSubnetOrganizations:(e,t)=>{e.subnetOrganizations=t.payload},setShowPassword:(e,t)=>{e.showPassword=t.payload},setLoading:(e,t)=>{e.loading=t.payload},setLoadingLicenseInfo:(e,t)=>{e.loadingLicenseInfo=t.payload},setClusterRegistered:(e,t)=>{e.clusterRegistered=t.payload},setLicenseInfo:(e,t)=>{e.licenseInfo=t.payload},setCurTab:(e,t)=>{e.curTab=t.payload},resetRegisterForm:()=>h}}),{setLicense:E,setSubnetPassword:b,setSubnetEmail:v,setSubnetMFAToken:y,setSubnetOTP:_,setSubnetAccessToken:S,setSelectedSubnetOrganization:T,setSubnetRegToken:A,setSubnetOrganizations:C,setShowPassword:w,setLoading:N,setLoadingLicenseInfo:I,setClusterRegistered:x,setLicenseInfo:R,setCurTab:k,resetRegisterForm:O}=g.actions,L=g.reducer,D=(0,a.HY)({system:i.Ay,login:s.Ay,console:l.Ay,register:L,tenants:c.Ay,createTenant:u.hb,addPool:d.Ay,editPool:p.Ay,editTenantSecurityContext:m.Ay,license:f.Ay}),M=(0,o.U1)({reducer:D});const P=()=>(0,r.wA)(),B=M},4159:(e,t,n)=>{"use strict";n.d(t,{Ay:()=>x,C9:()=>h,DF:()=>S,Dy:()=>g,Hk:()=>f,JJ:()=>N,MO:()=>u,S8:()=>w,WQ:()=>s,_x:()=>c,dW:()=>I,fO:()=>T,h0:()=>E,lp:()=>l,s3:()=>v});var r=n(907),a=n(3479);const o={value:0,loggedIn:!1,showMarketplace:!1,operatorMode:!1,session:"",userName:"",sidebarOpen:!localStorage.getItem("sidebarOpen")||JSON.parse(localStorage.getItem("sidebarOpen")).open,siteReplicationInfo:{siteName:"",curSite:!1,enabled:!1},serverNeedsRestart:!1,serverIsLoading:!1,loadingConfigurations:!0,loadingProgress:100,snackBar:{message:"",detailedErrorMsg:"",type:"message"},modalSnackBar:{message:"",detailedErrorMsg:"",type:"message"},serverDiagnosticStatus:"",distributedSetup:!1,licenseInfo:null,overrideStyles:null,anonymousMode:!1,darkMode:(0,a.NF)()},i=(0,r.Z0)({name:"system",initialState:o,reducers:{userLogged:(e,t)=>{e.loggedIn=t.payload},showMarketplace:(e,t)=>{e.showMarketplace=t.payload},operatorMode:(e,t)=>{e.operatorMode=t.payload},menuOpen:(e,t)=>{localStorage.setItem("sidebarOpen",JSON.stringify({open:t.payload})),e.sidebarOpen=t.payload},setServerNeedsRestart:(e,t)=>{e.serverNeedsRestart=t.payload},serverIsLoading:(e,t)=>{e.serverIsLoading=t.payload},configurationIsLoading:(e,t)=>{e.loadingConfigurations=t.payload},setLoadingProgress:(e,t)=>{e.loadingProgress=t.payload},setSnackBarMessage:(e,t)=>{e.snackBar={message:t.payload,detailedErrorMsg:"",type:"message"}},setErrorSnackMessage:(e,t)=>{e.snackBar={message:t.payload.errorMessage,detailedErrorMsg:t.payload.detailedError,type:"error"}},setModalSnackMessage:(e,t)=>{e.modalSnackBar={message:t.payload,detailedErrorMsg:"",type:"message"}},setModalErrorSnackMessage:(e,t)=>{e.modalSnackBar={message:t.payload.errorMessage,detailedErrorMsg:t.payload.detailedError,type:"error"}},setServerDiagStat:(e,t)=>{e.serverDiagnosticStatus=t.payload},globalSetDistributedSetup:(e,t)=>{e.distributedSetup=t.payload},setSiteReplicationInfo:(e,t)=>{e.siteReplicationInfo=t.payload},setLicenseInfo:(e,t)=>{e.licenseInfo=t.payload},setOverrideStyles:(e,t)=>{e.overrideStyles=t.payload},setAnonymousMode:e=>{e.anonymousMode=!0,e.loggedIn=!0},setDarkMode:(e,t)=>{e.darkMode=t.payload},resetSystem:()=>o}}),{userLogged:s,showMarketplace:l,operatorMode:c,menuOpen:u,setServerNeedsRestart:d,serverIsLoading:p,setLoadingProgress:m,setSnackBarMessage:f,setErrorSnackMessage:h,setModalErrorSnackMessage:g,setModalSnackMessage:E,setServerDiagStat:b,globalSetDistributedSetup:v,setSiteReplicationInfo:y,setLicenseInfo:_,setOverrideStyles:S,setAnonymousMode:T,resetSystem:A,configurationIsLoading:C,setDarkMode:w}=i.actions,N=e=>e.system.operatorMode,I=e=>e.system.showMarketplace,x=i.reducer},3479:(e,t,n)=>{"use strict";n.d(t,{NF:()=>i,S0:()=>o,vb:()=>s});var r=n(3097),a=n.n(r);const o=e=>{try{return JSON.parse(atob(e))}catch(t){return console.error("Error processing override styles, skipping.",t),!1}},i=()=>{const e=localStorage.getItem("dark-mode");if(!e){const e=window.matchMedia("(prefers-color-scheme: dark)");return a()(e,"matches",!1)}return"on"===e},s=e=>{localStorage.setItem("dark-mode",e)}},788:(e,t,n)=>{"use strict";n.d(t,{D:()=>r});const r=e=>{let t={};return e.forEach((e=>{if(e.required&&"undefined"!==typeof e.value&&e.value.trim&&""===e.value.trim())t[e.fieldKey]="Field cannot be empty";else if(e.required||"undefined"===typeof e.value||!e.value.trim||""!==e.value.trim())if(e.customValidation&&e.customValidationMessage)t[e.fieldKey]=e.customValidationMessage;else if(e.pattern&&e.customPatternMessage){const n=new RegExp(e.pattern,"g");e.value&&""!==e.value.trim()&&!e.value.match(n)&&"undefined"!==typeof e.value&&(t[e.fieldKey]=e.customPatternMessage)}else;})),t}},3820:(e,t,n)=>{var r=n(5043);function a(e,t,n,r){Object.defineProperty(e,t,{get:n,set:r,enumerable:!0,configurable:!0})}function o(){for(var e=arguments.length,t=new Array(e),n=0;nt.forEach((t=>function(e,t){"function"===typeof e?e(t):null!==e&&void 0!==e&&(e.current=t)}(t,e)))}function i(){for(var e=arguments.length,t=new Array(e),n=0;no)),a(e.exports,"useComposedRefs",(()=>i))},57:(e,t,n)=>{var r=n(4634),a=n(5043),o=n(7950),i=n(432);function s(e,t,n,r){Object.defineProperty(e,t,{get:n,set:r,enumerable:!0,configurable:!0})}function l(e){return e&&e.__esModule?e.default:e}s(e.exports,"Portal",(()=>c)),s(e.exports,"Root",(()=>u));const c=a.forwardRef(((e,t)=>{var n;const{container:s=(null===globalThis||void 0===globalThis||null===(n=globalThis.document)||void 0===n?void 0:n.body),...c}=e;return s?l(o).createPortal(a.createElement(i.Primitive.div,l(r)({},c,{ref:t})),s):null})),u=c},432:(e,t,n)=>{var r=n(4634),a=n(5043),o=n(7950),i=n(8463);function s(e,t,n,r){Object.defineProperty(e,t,{get:n,set:r,enumerable:!0,configurable:!0})}s(e.exports,"Primitive",(()=>l)),s(e.exports,"Root",(()=>u)),s(e.exports,"dispatchDiscreteCustomEvent",(()=>c));const l=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","span","svg","ul"].reduce(((e,t)=>{const n=a.forwardRef(((e,n)=>{const{asChild:o,...s}=e,l=o?i.Slot:t;return a.useEffect((()=>{window[Symbol.for("radix-ui")]=!0}),[]),a.createElement(l,function(e){return e&&e.__esModule?e.default:e}(r)({},s,{ref:n}))}));return n.displayName="Primitive.".concat(t),{...e,[t]:n}}),{});function c(e,t){e&&o.flushSync((()=>e.dispatchEvent(t)))}const u=l},8463:(e,t,n)=>{var r=n(4634),a=n(5043),o=n(3820);function i(e,t,n,r){Object.defineProperty(e,t,{get:n,set:r,enumerable:!0,configurable:!0})}function s(e){return e&&e.__esModule?e.default:e}i(e.exports,"Slot",(()=>l)),i(e.exports,"Slottable",(()=>u)),i(e.exports,"Root",(()=>m));const l=a.forwardRef(((e,t)=>{const{children:n,...o}=e,i=a.Children.toArray(n),l=i.find(d);if(l){const e=l.props.children,n=i.map((t=>t===l?a.Children.count(e)>1?a.Children.only(null):a.isValidElement(e)?e.props.children:null:t));return a.createElement(c,s(r)({},o,{ref:t}),a.isValidElement(e)?a.cloneElement(e,void 0,n):null)}return a.createElement(c,s(r)({},o,{ref:t}),n)}));l.displayName="Slot";const c=a.forwardRef(((e,t)=>{const{children:n,...r}=e;return a.isValidElement(n)?a.cloneElement(n,{...p(r,n.props),ref:t?o.composeRefs(t,n.ref):n.ref}):a.Children.count(n)>1?a.Children.only(null):null}));c.displayName="SlotClone";const u=e=>{let{children:t}=e;return a.createElement(a.Fragment,null,t)};function d(e){return a.isValidElement(e)&&e.type===u}function p(e,t){const n={...t};for(const r in t){const a=e[r],o=t[r];/^on[A-Z]/.test(r)?a&&o?n[r]=function(){o(...arguments),a(...arguments)}:a&&(n[r]=a):"style"===r?n[r]={...a,...o}:"className"===r&&(n[r]=[a,o].filter(Boolean).join(" "))}return{...e,...n}}const m=l},907:(e,t,n)=>{"use strict";function r(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r3?t.i-4:t.i:Array.isArray(e)?1:p(e)?2:m(e)?3:0}function l(e,t){return 2===s(e)?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function c(e,t){return 2===s(e)?e.get(t):e[t]}function u(e,t,n){var r=s(e);2===r?e.set(t,n):3===r?e.add(n):e[t]=n}function d(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t}function p(e){return G&&e instanceof Map}function m(e){return j&&e instanceof Set}function f(e){return e.o||e.t}function h(e){if(Array.isArray(e))return Array.prototype.slice.call(e);var t=K(e);delete t[$];for(var n=Y(t),r=0;r1&&(e.set=e.add=e.clear=e.delete=E),Object.freeze(e),t&&i(e,(function(e,t){return g(t,!0)}),!0)),e}function E(){r(2)}function b(e){return null==e||"object"!=typeof e||Object.isFrozen(e)}function v(e){var t=X[e];return t||r(18,e),t}function y(e,t){X[e]||(X[e]=t)}function _(){return z}function S(e,t){t&&(v("Patches"),e.u=[],e.s=[],e.v=t)}function T(e){A(e),e.p.forEach(w),e.p=null}function A(e){e===z&&(z=e.l)}function C(e){return z={p:[],l:z,h:e,m:!0,_:0}}function w(e){var t=e[$];0===t.i||1===t.i?t.j():t.g=!0}function N(e,t){t._=t.p.length;var n=t.p[0],a=void 0!==e&&e!==n;return t.h.O||v("ES5").S(t,e,a),a?(n[$].P&&(T(t),r(4)),o(e)&&(e=I(t,e),t.l||R(t,e)),t.u&&v("Patches").M(n[$].t,e,t.u,t.s)):e=I(t,n,[]),T(t),t.u&&t.v(t.u,t.s),e!==Z?e:void 0}function I(e,t,n){if(b(t))return t;var r=t[$];if(!r)return i(t,(function(a,o){return x(e,r,t,a,o,n)}),!0),t;if(r.A!==e)return t;if(!r.P)return R(e,r.t,!0),r.t;if(!r.I){r.I=!0,r.A._--;var a=4===r.i||5===r.i?r.o=h(r.k):r.o,o=a,s=!1;3===r.i&&(o=new Set(a),a.clear(),s=!0),i(o,(function(t,o){return x(e,r,a,t,o,n,s)})),R(e,a,!1),n&&e.u&&v("Patches").N(r,n,e.u,e.s)}return r.o}function x(e,t,n,r,i,s,c){if(a(i)){var d=I(e,i,s&&t&&3!==t.i&&!l(t.R,r)?s.concat(r):void 0);if(u(n,r,d),!a(d))return;e.m=!1}else c&&n.add(i);if(o(i)&&!b(i)){if(!e.h.D&&e._<1)return;I(e,i),t&&t.A.l||R(e,i)}}function R(e,t,n){void 0===n&&(n=!1),!e.l&&e.h.D&&e.m&&g(t,n)}function k(e,t){var n=e[$];return(n?f(n):e)[t]}function O(e,t){if(t in e)for(var n=Object.getPrototypeOf(e);n;){var r=Object.getOwnPropertyDescriptor(n,t);if(r)return r;n=Object.getPrototypeOf(n)}}function L(e){e.P||(e.P=!0,e.l&&L(e.l))}function D(e){e.o||(e.o=h(e.t))}function M(e,t,n){var r=p(t)?v("MapSet").F(t,n):m(t)?v("MapSet").T(t,n):e.O?function(e,t){var n=Array.isArray(e),r={i:n?1:0,A:t?t.A:_(),P:!1,I:!1,R:{},l:t,t:e,k:null,o:null,j:null,C:!1},a=r,o=Q;n&&(a=[r],o=J);var i=Proxy.revocable(a,o),s=i.revoke,l=i.proxy;return r.k=l,r.j=s,l}(t,n):v("ES5").J(t,n);return(n?n.A:_()).p.push(r),r}function P(e){return a(e)||r(22,e),function e(t){if(!o(t))return t;var n,r=t[$],a=s(t);if(r){if(!r.P&&(r.i<4||!v("ES5").K(r)))return r.t;r.I=!0,n=B(t,a),r.I=!1}else n=B(t,a);return i(n,(function(t,a){r&&c(r.t,t)===a||u(n,t,e(a))})),3===a?new Set(n):n}(e)}function B(e,t){switch(t){case 2:return new Map(e);case 3:return Array.from(e)}return h(e)}function F(){function e(e,t){var n=o[e];return n?n.enumerable=t:o[e]=n={configurable:!0,enumerable:t,get:function(){var t=this[$];return Q.get(t,e)},set:function(t){var n=this[$];Q.set(n,e,t)}},n}function t(e){for(var t=e.length-1;t>=0;t--){var a=e[t][$];if(!a.P)switch(a.i){case 5:r(a)&&L(a);break;case 4:n(a)&&L(a)}}}function n(e){for(var t=e.t,n=e.k,r=Y(n),a=r.length-1;a>=0;a--){var o=r[a];if(o!==$){var i=t[o];if(void 0===i&&!l(t,o))return!0;var s=n[o],c=s&&s[$];if(c?c.t!==i:!d(s,i))return!0}}var u=!!t[$];return r.length!==Y(t).length+(u?0:1)}function r(e){var t=e.k;if(t.length!==e.t.length)return!0;var n=Object.getOwnPropertyDescriptor(t,t.length-1);if(n&&!n.get)return!0;for(var r=0;rxe,zD:()=>Be,Z0:()=>ke});var U,z,H="undefined"!=typeof Symbol&&"symbol"==typeof Symbol("x"),G="undefined"!=typeof Map,j="undefined"!=typeof Set,V="undefined"!=typeof Proxy&&void 0!==Proxy.revocable&&"undefined"!=typeof Reflect,Z=H?Symbol.for("immer-nothing"):((U={})["immer-nothing"]=!0,U),W=H?Symbol.for("immer-draftable"):"__$immer_draftable",$=H?Symbol.for("immer-state"):"__$immer_state",q=("undefined"!=typeof Symbol&&Symbol.iterator,""+Object.prototype.constructor),Y="undefined"!=typeof Reflect&&Reflect.ownKeys?Reflect.ownKeys:void 0!==Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:Object.getOwnPropertyNames,K=Object.getOwnPropertyDescriptors||function(e){var t={};return Y(e).forEach((function(n){t[n]=Object.getOwnPropertyDescriptor(e,n)})),t},X={},Q={get:function(e,t){if(t===$)return e;var n=f(e);if(!l(n,t))return function(e,t,n){var r,a=O(t,n);return a?"value"in a?a.value:null===(r=a.get)||void 0===r?void 0:r.call(e.k):void 0}(e,n,t);var r=n[t];return e.I||!o(r)?r:r===k(e.t,t)?(D(e),e.o[t]=M(e.A.h,r,e)):r},has:function(e,t){return t in f(e)},ownKeys:function(e){return Reflect.ownKeys(f(e))},set:function(e,t,n){var r=O(f(e),t);if(null==r?void 0:r.set)return r.set.call(e.k,n),!0;if(!e.P){var a=k(f(e),t),o=null==a?void 0:a[$];if(o&&o.t===n)return e.o[t]=n,e.R[t]=!1,!0;if(d(n,a)&&(void 0!==n||l(e.t,t)))return!0;D(e),L(e)}return e.o[t]===n&&(void 0!==n||t in e.o)||Number.isNaN(n)&&Number.isNaN(e.o[t])||(e.o[t]=n,e.R[t]=!0),!0},deleteProperty:function(e,t){return void 0!==k(e.t,t)||t in e.t?(e.R[t]=!1,D(e),L(e)):delete e.R[t],e.o&&delete e.o[t],!0},getOwnPropertyDescriptor:function(e,t){var n=f(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r?{writable:!0,configurable:1!==e.i||"length"!==t,enumerable:r.enumerable,value:n[t]}:r},defineProperty:function(){r(11)},getPrototypeOf:function(e){return Object.getPrototypeOf(e.t)},setPrototypeOf:function(){r(12)}},J={};i(Q,(function(e,t){J[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}})),J.deleteProperty=function(e,t){return J.set.call(this,e,t,void 0)},J.set=function(e,t,n){return Q.set.call(this,e[0],t,n,e[0])};var ee=function(){function e(e){var t=this;this.O=V,this.D=!0,this.produce=function(e,n,a){if("function"==typeof e&&"function"!=typeof n){var i=n;n=e;var s=t;return function(e){var t=this;void 0===e&&(e=i);for(var r=arguments.length,a=Array(r>1?r-1:0),o=1;o1?r-1:0),o=1;o=0;n--){var r=t[n];if(0===r.path.length&&"replace"===r.op){e=r.value;break}}n>-1&&(t=t.slice(n+1));var o=v("Patches").$;return a(e)?o(e,t):this.produce(e,(function(e){return o(e,t)}))},e}(),te=new ee,ne=te.produce;te.produceWithPatches.bind(te),te.setAutoFreeze.bind(te),te.setUseProxies.bind(te),te.applyPatches.bind(te),te.createDraft.bind(te),te.finishDraft.bind(te);const re=ne;var ae=n(7048);function oe(e){return function(t){var n=t.dispatch,r=t.getState;return function(t){return function(a){return"function"===typeof a?a(n,r,e):t(a)}}}}var ie=oe();ie.withExtraArgument=oe;const se=ie;var le=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)}}(),ce=function(e,t){var n,r,a,o,i={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"===typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(a=2&o[0]?r.return:o[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,o[1])).done)return a;switch(r=0,a&&(o=[2&o[0],a.value]),o[0]){case 0:case 1:a=o;break;case 4:return i.label++,{value:o[1],done:!1};case 5:i.label++,r=o[1],o=[0];continue;case 7:o=i.ops.pop(),i.trys.pop();continue;default:if(!(a=(a=i.trys).length>0&&a[a.length-1])&&(6===o[0]||2===o[0])){i=0;continue}if(3===o[0]&&(!a||o[1]>a[0]&&o[1]{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;td,Gh:()=>O,HS:()=>L,Oi:()=>s,Rr:()=>p,pX:()=>F,pb:()=>x,rc:()=>a,sd:()=>k,tH:()=>B,ue:()=>h,zR:()=>i}),function(e){e.Pop="POP",e.Push="PUSH",e.Replace="REPLACE"}(a||(a={}));const o="popstate";function i(e){return void 0===e&&(e={}),m((function(e,t){let{pathname:n,search:r,hash:a}=e.location;return u("",{pathname:n,search:r,hash:a},t.state&&t.state.usr||null,t.state&&t.state.key||"default")}),(function(e,t){return"string"===typeof t?t:d(t)}),null,e)}function s(e,t){if(!1===e||null===e||"undefined"===typeof e)throw new Error(t)}function l(e,t){if(!e){"undefined"!==typeof console&&console.warn(t);try{throw new Error(t)}catch(n){}}}function c(e,t){return{usr:e.state,key:e.key,idx:t}}function u(e,t,n,a){return void 0===n&&(n=null),r({pathname:"string"===typeof e?e:e.pathname,search:"",hash:""},"string"===typeof t?p(t):t,{state:n,key:t&&t.key||a||Math.random().toString(36).substr(2,8)})}function d(e){let{pathname:t="/",search:n="",hash:r=""}=e;return n&&"?"!==n&&(t+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(t+="#"===r.charAt(0)?r:"#"+r),t}function p(e){let t={};if(e){let n=e.indexOf("#");n>=0&&(t.hash=e.substr(n),e=e.substr(0,n));let r=e.indexOf("?");r>=0&&(t.search=e.substr(r),e=e.substr(0,r)),e&&(t.pathname=e)}return t}function m(e,t,n,i){void 0===i&&(i={});let{window:l=document.defaultView,v5Compat:p=!1}=i,m=l.history,f=a.Pop,h=null,g=E();function E(){return(m.state||{idx:null}).idx}function b(){f=a.Pop;let e=E(),t=null==e?null:e-g;g=e,h&&h({action:f,location:y.location,delta:t})}function v(e){let t="null"!==l.location.origin?l.location.origin:l.location.href,n="string"===typeof e?e:d(e);return s(t,"No window.location.(origin|href) available to create URL for href: "+n),new URL(n,t)}null==g&&(g=0,m.replaceState(r({},m.state,{idx:g}),""));let y={get action(){return f},get location(){return e(l,m)},listen(e){if(h)throw new Error("A history only accepts one active listener");return l.addEventListener(o,b),h=e,()=>{l.removeEventListener(o,b),h=null}},createHref:e=>t(l,e),createURL:v,encodeLocation(e){let t=v(e);return{pathname:t.pathname,search:t.search,hash:t.hash}},push:function(e,t){f=a.Push;let r=u(y.location,e,t);n&&n(r,e),g=E()+1;let o=c(r,g),i=y.createHref(r);try{m.pushState(o,"",i)}catch(s){if(s instanceof DOMException&&"DataCloneError"===s.name)throw s;l.location.assign(i)}p&&h&&h({action:f,location:y.location,delta:1})},replace:function(e,t){f=a.Replace;let r=u(y.location,e,t);n&&n(r,e),g=E();let o=c(r,g),i=y.createHref(r);m.replaceState(o,"",i),p&&h&&h({action:f,location:y.location,delta:0})},go:e=>m.go(e)};return y}var f;!function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"}(f||(f={}));new Set(["lazy","caseSensitive","path","id","index","children"]);function h(e,t,n){void 0===n&&(n="/");let r=x(("string"===typeof t?p(t):t).pathname||"/",n);if(null==r)return null;let a=g(e);!function(e){e.sort(((e,t)=>e.score!==t.score?t.score-e.score:function(e,t){let n=e.length===t.length&&e.slice(0,-1).every(((e,n)=>e===t[n]));return n?e[e.length-1]-t[t.length-1]:0}(e.routesMeta.map((e=>e.childrenIndex)),t.routesMeta.map((e=>e.childrenIndex)))))}(a);let o=null;for(let i=0;null==o&&i{let i={relativePath:void 0===o?e.path||"":o,caseSensitive:!0===e.caseSensitive,childrenIndex:a,route:e};i.relativePath.startsWith("/")&&(s(i.relativePath.startsWith(r),'Absolute route path "'+i.relativePath+'" nested under path "'+r+'" is not valid. An absolute child route path must start with the combined path of all its parent routes.'),i.relativePath=i.relativePath.slice(r.length));let l=L([r,i.relativePath]),c=n.concat(i);e.children&&e.children.length>0&&(s(!0!==e.index,'Index routes must not have child routes. Please remove all child routes from route path "'+l+'".'),g(e.children,t,c,l)),(null!=e.path||e.index)&&t.push({path:l,score:C(l,e.index),routesMeta:c})};return e.forEach(((e,t)=>{var n;if(""!==e.path&&null!=(n=e.path)&&n.includes("?"))for(let r of E(e.path))a(e,t,r);else a(e,t)})),t}function E(e){let t=e.split("/");if(0===t.length)return[];let[n,...r]=t,a=n.endsWith("?"),o=n.replace(/\?$/,"");if(0===r.length)return a?[o,""]:[o];let i=E(r.join("/")),s=[];return s.push(...i.map((e=>""===e?o:[o,e].join("/")))),a&&s.push(...i),s.map((t=>e.startsWith("/")&&""===t?"/":t))}const b=/^:\w+$/,v=3,y=2,_=1,S=10,T=-2,A=e=>"*"===e;function C(e,t){let n=e.split("/"),r=n.length;return n.some(A)&&(r+=T),t&&(r+=y),n.filter((e=>!A(e))).reduce(((e,t)=>e+(b.test(t)?v:""===t?_:S)),r)}function w(e,t){let{routesMeta:n}=e,r={},a="/",o=[];for(let i=0;i(r.push(t),"/([^\\/]+)")));e.endsWith("*")?(r.push("*"),a+="*"===e||"/*"===e?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?a+="\\/*$":""!==e&&"/"!==e&&(a+="(?:(?=\\/|$))");let o=new RegExp(a,t?void 0:"i");return[o,r]}(e.path,e.caseSensitive,e.end),a=t.match(n);if(!a)return null;let o=a[0],i=o.replace(/(.)\/+$/,"$1"),s=a.slice(1);return{params:r.reduce(((e,t,n)=>{if("*"===t){let e=s[n]||"";i=o.slice(0,o.length-e.length).replace(/(.)\/+$/,"$1")}return e[t]=function(e,t){try{return decodeURIComponent(e)}catch(n){return l(!1,'The value for the URL param "'+t+'" will not be decoded because the string "'+e+'" is a malformed URL segment. This is probably due to a bad percent encoding ('+n+")."),e}}(s[n]||"",t),e}),{}),pathname:o,pathnameBase:i,pattern:e}}function I(e){try{return decodeURI(e)}catch(t){return l(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent encoding ('+t+")."),e}}function x(e,t){if("/"===t)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith("/")?t.length-1:t.length,r=e.charAt(n);return r&&"/"!==r?null:e.slice(n)||"/"}function R(e,t,n,r){return"Cannot include a '"+e+"' character in a manually specified `to."+t+"` field ["+JSON.stringify(r)+"]. Please separate it out to the `to."+n+'` field. Alternatively you may provide the full path as a string in and the router will parse it for you.'}function k(e){return e.filter(((e,t)=>0===t||e.route.path&&e.route.path.length>0))}function O(e,t,n,a){let o;void 0===a&&(a=!1),"string"===typeof e?o=p(e):(o=r({},e),s(!o.pathname||!o.pathname.includes("?"),R("?","pathname","search",o)),s(!o.pathname||!o.pathname.includes("#"),R("#","pathname","hash",o)),s(!o.search||!o.search.includes("#"),R("#","search","hash",o)));let i,l=""===e||""===o.pathname,c=l?"/":o.pathname;if(a||null==c)i=n;else{let e=t.length-1;if(c.startsWith("..")){let t=c.split("/");for(;".."===t[0];)t.shift(),e-=1;o.pathname=t.join("/")}i=e>=0?t[e]:"/"}let u=function(e,t){void 0===t&&(t="/");let{pathname:n,search:r="",hash:a=""}="string"===typeof e?p(e):e,o=n?n.startsWith("/")?n:function(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach((e=>{".."===e?n.length>1&&n.pop():"."!==e&&n.push(e)})),n.length>1?n.join("/"):"/"}(n,t):t;return{pathname:o,search:M(r),hash:P(a)}}(o,i),d=c&&"/"!==c&&c.endsWith("/"),m=(l||"."===c)&&n.endsWith("/");return u.pathname.endsWith("/")||!d&&!m||(u.pathname+="/"),u}const L=e=>e.join("/").replace(/\/\/+/g,"/"),D=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),M=e=>e&&"?"!==e?e.startsWith("?")?e:"?"+e:"",P=e=>e&&"#"!==e?e.startsWith("#")?e:"#"+e:"";class B extends Error{}function F(e){return null!=e&&"number"===typeof e.status&&"string"===typeof e.statusText&&"boolean"===typeof e.internal&&"data"in e}const U=["post","put","patch","delete"],z=(new Set(U),["get",...U]);new Set(z),new Set([301,302,303,307,308]),new Set([307,308]);Symbol("deferred")},2028:(e,t,n)=>{"use strict";var r=n(2),a=n(1712),o=a(r("String.prototype.indexOf"));e.exports=function(e,t){var n=r(e,!!t);return"function"===typeof n&&o(e,".prototype.")>-1?a(n):n}},1712:(e,t,n)=>{"use strict";var r=n(3864),a=n(2),o=n(5438),i=n(4902),s=a("%Function.prototype.apply%"),l=a("%Function.prototype.call%"),c=a("%Reflect.apply%",!0)||r.call(l,s),u=n(2090),d=a("%Math.max%");e.exports=function(e){if("function"!==typeof e)throw new i("a function is required");var t=c(r,l,arguments);return o(t,1+d(0,e.length-(arguments.length-1)),!0)};var p=function(){return c(r,s,arguments)};u?u(e.exports,"apply",{value:p}):e.exports.apply=p},1804:e=>{function t(e){if(e)return function(e){for(var n in t.prototype)e[n]=t.prototype[n];return e}(e)}e.exports=t,t.prototype.on=t.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks["$"+e]=this._callbacks["$"+e]||[]).push(t),this},t.prototype.once=function(e,t){function n(){this.off(e,n),t.apply(this,arguments)}return n.fn=t,this.on(e,n),this},t.prototype.off=t.prototype.removeListener=t.prototype.removeAllListeners=t.prototype.removeEventListener=function(e,t){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var n,r=this._callbacks["$"+e];if(!r)return this;if(1==arguments.length)return delete this._callbacks["$"+e],this;for(var a=0;a{"use strict";t.parse=function(e,t){if("string"!==typeof e)throw new TypeError("argument str must be a string");for(var r={},o=t||{},s=e.split(a),l=o.decode||n,c=0;c{"use strict";var r=n(2090),a=n(2557),o=n(4902),i=n(5558);e.exports=function(e,t,n){if(!e||"object"!==typeof e&&"function"!==typeof e)throw new o("`obj` must be an object or a function`");if("string"!==typeof t&&"symbol"!==typeof t)throw new o("`property` must be a string or a symbol`");if(arguments.length>3&&"boolean"!==typeof arguments[3]&&null!==arguments[3])throw new o("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&"boolean"!==typeof arguments[4]&&null!==arguments[4])throw new o("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&"boolean"!==typeof arguments[5]&&null!==arguments[5])throw new o("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&"boolean"!==typeof arguments[6])throw new o("`loose`, if provided, must be a boolean");var s=arguments.length>3?arguments[3]:null,l=arguments.length>4?arguments[4]:null,c=arguments.length>5?arguments[5]:null,u=arguments.length>6&&arguments[6],d=!!i&&i(e,t);if(r)r(e,t,{configurable:null===c&&d?d.configurable:!c,enumerable:null===s&&d?d.enumerable:!s,value:n,writable:null===l&&d?d.writable:!l});else{if(!u&&(s||l||c))throw new a("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.");e[t]=n}}},2090:(e,t,n)=>{"use strict";var r=n(2)("%Object.defineProperty%",!0)||!1;if(r)try{r({},"a",{value:1})}catch(a){r=!1}e.exports=r},9820:e=>{"use strict";e.exports=EvalError},9304:e=>{"use strict";e.exports=Error},1725:e=>{"use strict";e.exports=RangeError},5077:e=>{"use strict";e.exports=ReferenceError},2557:e=>{"use strict";e.exports=SyntaxError},4902:e=>{"use strict";e.exports=TypeError},3094:e=>{"use strict";e.exports=URIError},9765:function(e,t){!function(e){"use strict";var t="function"===typeof WeakSet,n=Object.keys;function r(e,t){return e===t||e!==e&&t!==t}function a(e){return e.constructor===Object||null==e.constructor}function o(e){return!!e&&"function"===typeof e.then}function i(e){return!(!e||!e.$$typeof)}function s(){var e=[];return{add:function(t){e.push(t)},has:function(t){return-1!==e.indexOf(t)}}}var l=t?function(){return new WeakSet}:s;function c(e){return function(t){var n=e||t;return function(e,t,r){void 0===r&&(r=l());var a=!!e&&"object"===typeof e,o=!!t&&"object"===typeof t;if(a||o){var i=a&&r.has(e),s=o&&r.has(t);if(i||s)return i&&s;a&&r.add(e),o&&r.add(t)}return n(e,t,r)}}}function u(e,t,n,r){var a=e.length;if(t.length!==a)return!1;for(;a-- >0;)if(!n(e[a],t[a],r))return!1;return!0}function d(e,t,n,r){var a=e.size===t.size;if(a&&e.size){var o={};e.forEach((function(e,i){if(a){var s=!1,l=0;t.forEach((function(t,a){s||o[l]||(s=n(i,a,r)&&n(e,t,r))&&(o[l]=!0),l++})),a=s}}))}return a}var p="_owner",m=Function.prototype.bind.call(Function.prototype.call,Object.prototype.hasOwnProperty);function f(e,t,r,a){var o=n(e),s=o.length;if(n(t).length!==s)return!1;if(s)for(var l=void 0;s-- >0;){if((l=o[s])===p){var c=i(e),u=i(t);if((c||u)&&c!==u)return!1}if(!m(t,l)||!r(e[l],t[l],a))return!1}return!0}function h(e,t){return e.source===t.source&&e.global===t.global&&e.ignoreCase===t.ignoreCase&&e.multiline===t.multiline&&e.unicode===t.unicode&&e.sticky===t.sticky&&e.lastIndex===t.lastIndex}function g(e,t,n,r){var a=e.size===t.size;if(a&&e.size){var o={};e.forEach((function(e){if(a){var i=!1,s=0;t.forEach((function(t){i||o[s]||(i=n(e,t,r))&&(o[s]=!0),s++})),a=i}}))}return a}var E="function"===typeof Map,b="function"===typeof Set;function v(e){var t="function"===typeof e?e(n):n;function n(e,n,i){if(e===n)return!0;if(e&&n&&"object"===typeof e&&"object"===typeof n){if(a(e)&&a(n))return f(e,n,t,i);var s=Array.isArray(e),l=Array.isArray(n);return s||l?s===l&&u(e,n,t,i):(s=e instanceof Date,l=n instanceof Date,s||l?s===l&&r(e.getTime(),n.getTime()):(s=e instanceof RegExp,l=n instanceof RegExp,s||l?s===l&&h(e,n):o(e)||o(n)?e===n:E&&(s=e instanceof Map,l=n instanceof Map,s||l)?s===l&&d(e,n,t,i):b&&(s=e instanceof Set,l=n instanceof Set,s||l)?s===l&&g(e,n,t,i):f(e,n,t,i)))}return e!==e&&n!==n}return n}var y=v(),_=v((function(){return r})),S=v(c()),T=v(c(r));e.circularDeepEqual=S,e.circularShallowEqual=T,e.createCustomEqual=v,e.deepEqual=y,e.sameValueZeroEqual=r,e.shallowEqual=_,Object.defineProperty(e,"__esModule",{value:!0})}(t)},5376:e=>{e.exports=i,i.default=i,i.stable=u,i.stableStringify=u;var t="[...]",n="[Circular]",r=[],a=[];function o(){return{depthLimit:Number.MAX_SAFE_INTEGER,edgesLimit:Number.MAX_SAFE_INTEGER}}function i(e,t,n,i){var s;"undefined"===typeof i&&(i=o()),l(e,"",0,[],void 0,0,i);try{s=0===a.length?JSON.stringify(e,t,n):JSON.stringify(e,p(t),n)}catch(u){return JSON.stringify("[unable to serialize, circular reference is too complex to analyze]")}finally{for(;0!==r.length;){var c=r.pop();4===c.length?Object.defineProperty(c[0],c[1],c[3]):c[0][c[1]]=c[2]}}return s}function s(e,t,n,o){var i=Object.getOwnPropertyDescriptor(o,n);void 0!==i.get?i.configurable?(Object.defineProperty(o,n,{value:e}),r.push([o,n,t,i])):a.push([t,n,e]):(o[n]=e,r.push([o,n,t]))}function l(e,r,a,o,i,c,u){var d;if(c+=1,"object"===typeof e&&null!==e){for(d=0;du.depthLimit)return void s(t,e,r,i);if("undefined"!==typeof u.edgesLimit&&a+1>u.edgesLimit)return void s(t,e,r,i);if(o.push(e),Array.isArray(e))for(d=0;dt?1:0}function u(e,t,n,i){"undefined"===typeof i&&(i=o());var s,l=d(e,"",0,[],void 0,0,i)||e;try{s=0===a.length?JSON.stringify(l,t,n):JSON.stringify(l,p(t),n)}catch(u){return JSON.stringify("[unable to serialize, circular reference is too complex to analyze]")}finally{for(;0!==r.length;){var c=r.pop();4===c.length?Object.defineProperty(c[0],c[1],c[3]):c[0][c[1]]=c[2]}}return s}function d(e,a,o,i,l,u,p){var m;if(u+=1,"object"===typeof e&&null!==e){for(m=0;mp.depthLimit)return void s(t,e,a,l);if("undefined"!==typeof p.edgesLimit&&o+1>p.edgesLimit)return void s(t,e,a,l);if(i.push(e),Array.isArray(e))for(m=0;m0)for(var r=0;r{"use strict";var t=Object.prototype.toString,n=Math.max,r=function(e,t){for(var n=[],r=0;r{"use strict";var r=n(7724);e.exports=Function.prototype.bind||r},8707:(e,t,n)=>{"use strict";function r(e){return Array.isArray?Array.isArray(e):"[object Array]"===p(e)}n.r(t),n.d(t,{default:()=>Y});const a=1/0;function o(e){return null==e?"":function(e){if("string"==typeof e)return e;let t=e+"";return"0"==t&&1/e==-a?"-0":t}(e)}function i(e){return"string"===typeof e}function s(e){return"number"===typeof e}function l(e){return!0===e||!1===e||function(e){return c(e)&&null!==e}(e)&&"[object Boolean]"==p(e)}function c(e){return"object"===typeof e}function u(e){return void 0!==e&&null!==e}function d(e){return!e.trim().length}function p(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":Object.prototype.toString.call(e)}const m=e=>"Missing ".concat(e," property in key"),f=e=>"Property 'weight' in key '".concat(e,"' must be a positive integer"),h=Object.prototype.hasOwnProperty;class g{constructor(e){this._keys=[],this._keyMap={};let t=0;e.forEach((e=>{let n=E(e);t+=n.weight,this._keys.push(n),this._keyMap[n.id]=n,t+=n.weight})),this._keys.forEach((e=>{e.weight/=t}))}get(e){return this._keyMap[e]}keys(){return this._keys}toJSON(){return JSON.stringify(this._keys)}}function E(e){let t=null,n=null,a=null,o=1,s=null;if(i(e)||r(e))a=e,t=b(e),n=v(e);else{if(!h.call(e,"name"))throw new Error(m("name"));const r=e.name;if(a=r,h.call(e,"weight")&&(o=e.weight,o<=0))throw new Error(f(r));t=b(r),n=v(r),s=e.getFn}return{path:t,id:n,weight:o,src:a,getFn:s}}function b(e){return r(e)?e:e.split(".")}function v(e){return r(e)?e.join("."):e}var y={isCaseSensitive:!1,includeScore:!1,keys:[],shouldSort:!0,sortFn:(e,t)=>e.score===t.score?e.idx{if(u(e))if(t[d]){const p=e[t[d]];if(!u(p))return;if(d===t.length-1&&(i(p)||s(p)||l(p)))n.push(o(p));else if(r(p)){a=!0;for(let e=0,n=p.length;e0&&void 0!==arguments[0]?arguments[0]:{};this.norm=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:3;const n=new Map,r=Math.pow(10,t);return{get(t){const a=t.match(_).length;if(n.has(a))return n.get(a);const o=1/Math.pow(a,.5*e),i=parseFloat(Math.round(o*r)/r);return n.set(a,i),i},clear(){n.clear()}}}(t,3),this.getFn=e,this.isCreated=!1,this.setIndexRecords()}setSources(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.docs=e}setIndexRecords(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.records=e}setKeys(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.keys=e,this._keysMap={},e.forEach(((e,t)=>{this._keysMap[e.id]=t}))}create(){!this.isCreated&&this.docs.length&&(this.isCreated=!0,i(this.docs[0])?this.docs.forEach(((e,t)=>{this._addString(e,t)})):this.docs.forEach(((e,t)=>{this._addObject(e,t)})),this.norm.clear())}add(e){const t=this.size();i(e)?this._addString(e,t):this._addObject(e,t)}removeAt(e){this.records.splice(e,1);for(let t=e,n=this.size();t{let o=t.getFn?t.getFn(e):this.getFn(e,t.path);if(u(o))if(r(o)){let e=[];const t=[{nestedArrIndex:-1,value:o}];for(;t.length;){const{nestedArrIndex:n,value:a}=t.pop();if(u(a))if(i(a)&&!d(a)){let t={v:a,i:n,n:this.norm.get(a)};e.push(t)}else r(a)&&a.forEach(((e,n)=>{t.push({nestedArrIndex:n,value:e})}))}n.$[a]=e}else if(i(o)&&!d(o)){let e={v:o,n:this.norm.get(o)};n.$[a]=e}})),this.records.push(n)}toJSON(){return{keys:this.keys,records:this.records}}}function T(e,t){let{getFn:n=y.getFn,fieldNormWeight:r=y.fieldNormWeight}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const a=new S({getFn:n,fieldNormWeight:r});return a.setKeys(e.map(E)),a.setSources(t),a.create(),a}function A(e){let{errors:t=0,currentLocation:n=0,expectedLocation:r=0,distance:a=y.distance,ignoreLocation:o=y.ignoreLocation}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const i=t/e.length;if(o)return i;const s=Math.abs(r-n);return a?i+s/a:s?1:i}const C=32;function w(e,t,n){let{location:r=y.location,distance:a=y.distance,threshold:o=y.threshold,findAllMatches:i=y.findAllMatches,minMatchCharLength:s=y.minMatchCharLength,includeMatches:l=y.includeMatches,ignoreLocation:c=y.ignoreLocation}=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(t.length>C)throw new Error("Pattern length exceeds max of ".concat(C,"."));const u=t.length,d=e.length,p=Math.max(0,Math.min(r,d));let m=o,f=p;const h=s>1||l,g=h?Array(d):[];let E;for(;(E=e.indexOf(t,f))>-1;){let e=A(t,{currentLocation:E,expectedLocation:p,distance:a,ignoreLocation:c});if(m=Math.min(e,m),f=E+u,h){let e=0;for(;e=s;i-=1){let r=i-1,o=n[e.charAt(r)];if(h&&(g[r]=+!!o),E[i]=(E[i+1]<<1|1)&o,y&&(E[i]|=(b[i+1]|b[i])<<1|1|b[i+1]),E[i]&S&&(v=A(t,{errors:y,currentLocation:r,expectedLocation:p,distance:a,ignoreLocation:c}),v<=m)){if(m=v,f=r,f<=p)break;s=Math.max(1,2*p-f)}}if(A(t,{errors:y+1,currentLocation:p,expectedLocation:p,distance:a,ignoreLocation:c})>m)break;b=E}const T={isMatch:f>=0,score:Math.max(.001,v)};if(h){const e=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:y.minMatchCharLength,n=[],r=-1,a=-1,o=0;for(let i=e.length;o=t&&n.push([r,a]),r=-1)}return e[o-1]&&o-r>=t&&n.push([r,o-1]),n}(g,s);e.length?l&&(T.indices=e):T.isMatch=!1}return T}function N(e){let t={};for(let n=0,r=e.length;n1&&void 0!==arguments[1]?arguments[1]:{};if(this.options={location:t,threshold:n,distance:r,includeMatches:a,findAllMatches:o,minMatchCharLength:i,isCaseSensitive:s,ignoreLocation:l},this.pattern=s?e:e.toLowerCase(),this.chunks=[],!this.pattern.length)return;const c=(e,t)=>{this.chunks.push({pattern:e,alphabet:N(e),startIndex:t})},u=this.pattern.length;if(u>C){let e=0;const t=u%C,n=u-t;for(;e{let{pattern:p,alphabet:m,startIndex:f}=t;const{isMatch:h,score:g,indices:E}=w(e,p,m,{location:r+f,distance:a,threshold:o,findAllMatches:i,minMatchCharLength:s,includeMatches:n,ignoreLocation:l});h&&(d=!0),u+=g,h&&E&&(c=[...c,...E])}));let p={isMatch:d,score:d?u/this.chunks.length:1};return d&&n&&(p.indices=c),p}}class x{constructor(e){this.pattern=e}static isMultiMatch(e){return R(e,this.multiRegex)}static isSingleMatch(e){return R(e,this.singleRegex)}search(){}}function R(e,t){const n=e.match(t);return n?n[1]:null}class k extends x{constructor(e){let{location:t=y.location,threshold:n=y.threshold,distance:r=y.distance,includeMatches:a=y.includeMatches,findAllMatches:o=y.findAllMatches,minMatchCharLength:i=y.minMatchCharLength,isCaseSensitive:s=y.isCaseSensitive,ignoreLocation:l=y.ignoreLocation}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};super(e),this._bitapSearch=new I(e,{location:t,threshold:n,distance:r,includeMatches:a,findAllMatches:o,minMatchCharLength:i,isCaseSensitive:s,ignoreLocation:l})}static get type(){return"fuzzy"}static get multiRegex(){return/^"(.*)"$/}static get singleRegex(){return/^(.*)$/}search(e){return this._bitapSearch.searchIn(e)}}class O extends x{constructor(e){super(e)}static get type(){return"include"}static get multiRegex(){return/^'"(.*)"$/}static get singleRegex(){return/^'(.*)$/}search(e){let t,n=0;const r=[],a=this.pattern.length;for(;(t=e.indexOf(this.pattern,n))>-1;)n=t+a,r.push([t,n-1]);const o=!!r.length;return{isMatch:o,score:o?0:1,indices:r}}}const L=[class extends x{constructor(e){super(e)}static get type(){return"exact"}static get multiRegex(){return/^="(.*)"$/}static get singleRegex(){return/^=(.*)$/}search(e){const t=e===this.pattern;return{isMatch:t,score:t?0:1,indices:[0,this.pattern.length-1]}}},O,class extends x{constructor(e){super(e)}static get type(){return"prefix-exact"}static get multiRegex(){return/^\^"(.*)"$/}static get singleRegex(){return/^\^(.*)$/}search(e){const t=e.startsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,this.pattern.length-1]}}},class extends x{constructor(e){super(e)}static get type(){return"inverse-prefix-exact"}static get multiRegex(){return/^!\^"(.*)"$/}static get singleRegex(){return/^!\^(.*)$/}search(e){const t=!e.startsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,e.length-1]}}},class extends x{constructor(e){super(e)}static get type(){return"inverse-suffix-exact"}static get multiRegex(){return/^!"(.*)"\$$/}static get singleRegex(){return/^!(.*)\$$/}search(e){const t=!e.endsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,e.length-1]}}},class extends x{constructor(e){super(e)}static get type(){return"suffix-exact"}static get multiRegex(){return/^"(.*)"\$$/}static get singleRegex(){return/^(.*)\$$/}search(e){const t=e.endsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[e.length-this.pattern.length,e.length-1]}}},class extends x{constructor(e){super(e)}static get type(){return"inverse-exact"}static get multiRegex(){return/^!"(.*)"$/}static get singleRegex(){return/^!(.*)$/}search(e){const t=-1===e.indexOf(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,e.length-1]}}},k],D=L.length,M=/ +(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/;const P=new Set([k.type,O.type]);class B{constructor(e){let{isCaseSensitive:t=y.isCaseSensitive,includeMatches:n=y.includeMatches,minMatchCharLength:r=y.minMatchCharLength,ignoreLocation:a=y.ignoreLocation,findAllMatches:o=y.findAllMatches,location:i=y.location,threshold:s=y.threshold,distance:l=y.distance}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.query=null,this.options={isCaseSensitive:t,includeMatches:n,minMatchCharLength:r,findAllMatches:o,ignoreLocation:a,location:i,threshold:s,distance:l},this.pattern=t?e:e.toLowerCase(),this.query=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.split("|").map((e=>{let n=e.trim().split(M).filter((e=>e&&!!e.trim())),r=[];for(let a=0,o=n.length;a!(!e[z]&&!e[H]),Z=e=>({[z]:Object.keys(e).map((t=>({[t]:e[t]})))});function W(e,t){let{auto:n=!0}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const a=e=>{let o=Object.keys(e);const s=(e=>!!e[G])(e);if(!s&&o.length>1&&!V(e))return a(Z(e));if((e=>!r(e)&&c(e)&&!V(e))(e)){const r=s?e[G]:o[0],a=s?e[j]:e[r];if(!i(a))throw new Error((e=>"Invalid value for key ".concat(e))(r));const l={keyId:v(r),pattern:a};return n&&(l.searcher=U(a,t)),l}let l={children:[],operator:o[0]};return o.forEach((t=>{const n=e[t];r(n)&&n.forEach((e=>{l.children.push(a(e))}))})),l};return V(e)||(e=Z(e)),a(e)}function $(e,t){const n=e.matches;t.matches=[],u(n)&&n.forEach((e=>{if(!u(e.indices)||!e.indices.length)return;const{indices:n,value:r}=e;let a={indices:n,value:r};e.key&&(a.key=e.key.src),e.idx>-1&&(a.refIndex=e.idx),t.matches.push(a)}))}function q(e,t){t.score=e.score}class Y{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0;this.options={...y,...t},this.options.useExtendedSearch,this._keyStore=new g(this.options.keys),this.setCollection(e,n)}setCollection(e,t){if(this._docs=e,t&&!(t instanceof S))throw new Error("Incorrect 'index' type");this._myIndex=t||T(this.options.keys,this._docs,{getFn:this.options.getFn,fieldNormWeight:this.options.fieldNormWeight})}add(e){u(e)&&(this._docs.push(e),this._myIndex.add(e))}remove(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>!1;const t=[];for(let n=0,r=this._docs.length;n1&&void 0!==arguments[1]?arguments[1]:{};const{includeMatches:n,includeScore:r,shouldSort:a,sortFn:o,ignoreFieldNorm:l}=this.options;let c=i(e)?i(this._docs[0])?this._searchStringList(e):this._searchObjectList(e):this._searchLogical(e);return function(e,t){let{ignoreFieldNorm:n=y.ignoreFieldNorm}=t;e.forEach((e=>{let t=1;e.matches.forEach((e=>{let{key:r,norm:a,score:o}=e;const i=r?r.weight:null;t*=Math.pow(0===o&&i?Number.EPSILON:o,(i||1)*(n?1:a))})),e.score=t}))}(c,{ignoreFieldNorm:l}),a&&c.sort(o),s(t)&&t>-1&&(c=c.slice(0,t)),function(e,t){let{includeMatches:n=y.includeMatches,includeScore:r=y.includeScore}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const a=[];return n&&a.push($),r&&a.push(q),e.map((e=>{const{idx:n}=e,r={item:t[n],refIndex:n};return a.length&&a.forEach((t=>{t(e,r)})),r}))}(c,this._docs,{includeMatches:n,includeScore:r})}_searchStringList(e){const t=U(e,this.options),{records:n}=this._myIndex,r=[];return n.forEach((e=>{let{v:n,i:a,n:o}=e;if(!u(n))return;const{isMatch:i,score:s,indices:l}=t.searchIn(n);i&&r.push({item:n,idx:a,matches:[{score:s,value:n,norm:o,indices:l}]})})),r}_searchLogical(e){const t=W(e,this.options),n=(e,t,r)=>{if(!e.children){const{keyId:n,searcher:a}=e,o=this._findMatches({key:this._keyStore.get(n),value:this._myIndex.getValueForItemAtKeyId(t,n),searcher:a});return o&&o.length?[{idx:r,item:t,matches:o}]:[]}const a=[];for(let o=0,i=e.children.length;o{let{$:r,i:i}=e;if(u(r)){let e=n(t,r,i);e.length&&(a[i]||(a[i]={idx:i,item:r,matches:[]},o.push(a[i])),e.forEach((e=>{let{matches:t}=e;a[i].matches.push(...t)})))}})),o}_searchObjectList(e){const t=U(e,this.options),{keys:n,records:r}=this._myIndex,a=[];return r.forEach((e=>{let{$:r,i:o}=e;if(!u(r))return;let i=[];n.forEach(((e,n)=>{i.push(...this._findMatches({key:e,value:r[n],searcher:t}))})),i.length&&a.push({idx:o,item:r,matches:i})})),a}_findMatches(e){let{key:t,value:n,searcher:a}=e;if(!u(n))return[];let o=[];if(r(n))n.forEach((e=>{let{v:n,i:r,n:i}=e;if(!u(n))return;const{isMatch:s,score:l,indices:c}=a.searchIn(n);s&&o.push({score:l,key:t,value:n,idx:r,norm:i,indices:c})}));else{const{v:e,n:r}=n,{isMatch:i,score:s,indices:l}=a.searchIn(e);i&&o.push({score:s,key:t,value:e,norm:r,indices:l})}return o}}Y.version="6.6.2",Y.createIndex=T,Y.parseIndex=function(e){let{getFn:t=y.getFn,fieldNormWeight:n=y.fieldNormWeight}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{keys:r,records:a}=e,o=new S({getFn:t,fieldNormWeight:n});return o.setKeys(r),o.setIndexRecords(a),o},Y.config=y,Y.parseQuery=W,function(){F.push(...arguments)}(B)},2:(e,t,n)=>{"use strict";var r,a=n(9304),o=n(9820),i=n(1725),s=n(5077),l=n(2557),c=n(4902),u=n(3094),d=Function,p=function(e){try{return d('"use strict"; return ('+e+").constructor;")()}catch(t){}},m=Object.getOwnPropertyDescriptor;if(m)try{m({},"")}catch(M){m=null}var f=function(){throw new c},h=m?function(){try{return f}catch(e){try{return m(arguments,"callee").get}catch(t){return f}}}():f,g=n(2108)(),E=n(951)(),b=Object.getPrototypeOf||(E?function(e){return e.__proto__}:null),v={},y="undefined"!==typeof Uint8Array&&b?b(Uint8Array):r,_={__proto__:null,"%AggregateError%":"undefined"===typeof AggregateError?r:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"===typeof ArrayBuffer?r:ArrayBuffer,"%ArrayIteratorPrototype%":g&&b?b([][Symbol.iterator]()):r,"%AsyncFromSyncIteratorPrototype%":r,"%AsyncFunction%":v,"%AsyncGenerator%":v,"%AsyncGeneratorFunction%":v,"%AsyncIteratorPrototype%":v,"%Atomics%":"undefined"===typeof Atomics?r:Atomics,"%BigInt%":"undefined"===typeof BigInt?r:BigInt,"%BigInt64Array%":"undefined"===typeof BigInt64Array?r:BigInt64Array,"%BigUint64Array%":"undefined"===typeof BigUint64Array?r:BigUint64Array,"%Boolean%":Boolean,"%DataView%":"undefined"===typeof DataView?r:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":a,"%eval%":eval,"%EvalError%":o,"%Float32Array%":"undefined"===typeof Float32Array?r:Float32Array,"%Float64Array%":"undefined"===typeof Float64Array?r:Float64Array,"%FinalizationRegistry%":"undefined"===typeof FinalizationRegistry?r:FinalizationRegistry,"%Function%":d,"%GeneratorFunction%":v,"%Int8Array%":"undefined"===typeof Int8Array?r:Int8Array,"%Int16Array%":"undefined"===typeof Int16Array?r:Int16Array,"%Int32Array%":"undefined"===typeof Int32Array?r:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":g&&b?b(b([][Symbol.iterator]())):r,"%JSON%":"object"===typeof JSON?JSON:r,"%Map%":"undefined"===typeof Map?r:Map,"%MapIteratorPrototype%":"undefined"!==typeof Map&&g&&b?b((new Map)[Symbol.iterator]()):r,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"===typeof Promise?r:Promise,"%Proxy%":"undefined"===typeof Proxy?r:Proxy,"%RangeError%":i,"%ReferenceError%":s,"%Reflect%":"undefined"===typeof Reflect?r:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"===typeof Set?r:Set,"%SetIteratorPrototype%":"undefined"!==typeof Set&&g&&b?b((new Set)[Symbol.iterator]()):r,"%SharedArrayBuffer%":"undefined"===typeof SharedArrayBuffer?r:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":g&&b?b(""[Symbol.iterator]()):r,"%Symbol%":g?Symbol:r,"%SyntaxError%":l,"%ThrowTypeError%":h,"%TypedArray%":y,"%TypeError%":c,"%Uint8Array%":"undefined"===typeof Uint8Array?r:Uint8Array,"%Uint8ClampedArray%":"undefined"===typeof Uint8ClampedArray?r:Uint8ClampedArray,"%Uint16Array%":"undefined"===typeof Uint16Array?r:Uint16Array,"%Uint32Array%":"undefined"===typeof Uint32Array?r:Uint32Array,"%URIError%":u,"%WeakMap%":"undefined"===typeof WeakMap?r:WeakMap,"%WeakRef%":"undefined"===typeof WeakRef?r:WeakRef,"%WeakSet%":"undefined"===typeof WeakSet?r:WeakSet};if(b)try{null.error}catch(M){var S=b(b(M));_["%Error.prototype%"]=S}var T=function e(t){var n;if("%AsyncFunction%"===t)n=p("async function () {}");else if("%GeneratorFunction%"===t)n=p("function* () {}");else if("%AsyncGeneratorFunction%"===t)n=p("async function* () {}");else if("%AsyncGenerator%"===t){var r=e("%AsyncGeneratorFunction%");r&&(n=r.prototype)}else if("%AsyncIteratorPrototype%"===t){var a=e("%AsyncGenerator%");a&&b&&(n=b(a.prototype))}return _[t]=n,n},A={__proto__:null,"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},C=n(3864),w=n(4384),N=C.call(Function.call,Array.prototype.concat),I=C.call(Function.apply,Array.prototype.splice),x=C.call(Function.call,String.prototype.replace),R=C.call(Function.call,String.prototype.slice),k=C.call(Function.call,RegExp.prototype.exec),O=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,L=/\\(\\)?/g,D=function(e,t){var n,r=e;if(w(A,r)&&(r="%"+(n=A[r])[0]+"%"),w(_,r)){var a=_[r];if(a===v&&(a=T(r)),"undefined"===typeof a&&!t)throw new c("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:n,name:r,value:a}}throw new l("intrinsic "+e+" does not exist!")};e.exports=function(e,t){if("string"!==typeof e||0===e.length)throw new c("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!==typeof t)throw new c('"allowMissing" argument must be a boolean');if(null===k(/^%?[^%]*%?$/,e))throw new l("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var n=function(e){var t=R(e,0,1),n=R(e,-1);if("%"===t&&"%"!==n)throw new l("invalid intrinsic syntax, expected closing `%`");if("%"===n&&"%"!==t)throw new l("invalid intrinsic syntax, expected opening `%`");var r=[];return x(e,O,(function(e,t,n,a){r[r.length]=n?x(a,L,"$1"):t||e})),r}(e),r=n.length>0?n[0]:"",a=D("%"+r+"%",t),o=a.name,i=a.value,s=!1,u=a.alias;u&&(r=u[0],I(n,N([0,1],u)));for(var d=1,p=!0;d=n.length){var E=m(i,f);i=(p=!!E)&&"get"in E&&!("originalValue"in E.get)?E.get:i[f]}else p=w(i,f),i=i[f];p&&!s&&(_[o]=i)}}return i}},5558:(e,t,n)=>{"use strict";var r=n(2)("%Object.getOwnPropertyDescriptor%",!0);if(r)try{r([],"length")}catch(a){r=null}e.exports=r},2101:(e,t,n)=>{"use strict";var r=n(2090),a=function(){return!!r};a.hasArrayLengthDefineBug=function(){if(!r)return null;try{return 1!==r([],"length",{value:1}).length}catch(e){return!0}},e.exports=a},951:e=>{"use strict";var t={__proto__:null,foo:{}},n=Object;e.exports=function(){return{__proto__:t}.foo===t.foo&&!(t instanceof n)}},2108:(e,t,n)=>{"use strict";var r="undefined"!==typeof Symbol&&Symbol,a=n(9534);e.exports=function(){return"function"===typeof r&&("function"===typeof Symbol&&("symbol"===typeof r("foo")&&("symbol"===typeof Symbol("bar")&&a())))}},9534:e=>{"use strict";e.exports=function(){if("function"!==typeof Symbol||"function"!==typeof Object.getOwnPropertySymbols)return!1;if("symbol"===typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),n=Object(t);if("string"===typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(n))return!1;for(t in e[t]=42,e)return!1;if("function"===typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"===typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var r=Object.getOwnPropertySymbols(e);if(1!==r.length||r[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"===typeof Object.getOwnPropertyDescriptor){var a=Object.getOwnPropertyDescriptor(e,t);if(42!==a.value||!0!==a.enumerable)return!1}return!0}},4384:(e,t,n)=>{"use strict";var r=Function.prototype.call,a=Object.prototype.hasOwnProperty,o=n(3864);e.exports=o.call(r,a)},219:(e,t,n)=>{"use strict";var r=n(2086),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return r.isMemo(e)?i:s[e.$$typeof]||a}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,m=Object.getPrototypeOf,f=Object.prototype;e.exports=function e(t,n,r){if("string"!==typeof n){if(f){var a=m(n);a&&a!==f&&e(t,a,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var s=l(t),h=l(n),g=0;g0?e-1:e;if("string"===typeof a.current[t]){if(0===t)return e;t-=1}return t}))):"ArrowDown"===e.key||e.ctrlKey&&"n"===e.key?(e.preventDefault(),e.stopPropagation(),p.setActiveIndex((function(e){var t=e{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Command=void 0;var n=function(e,t){var n=this;void 0===t&&(t={}),this.perform=function(){var r=e.perform();if("function"===typeof r){var a=t.history;a&&(n.historyItem&&a.remove(n.historyItem),n.historyItem=a.add({perform:e.perform,negate:r}),n.history={undo:function(){return a.undo(n.historyItem)},redo:function(){return a.redo(n.historyItem)}})}}};t.Command=n},4115:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.history=t.HistoryItemImpl=void 0;var r=n(847),a=function(){function e(e){this.perform=e.perform,this.negate=e.negate}return e.create=function(t){return new e(t)},e}();t.HistoryItemImpl=a;var o=new(function(){function e(){return this.undoStack=[],this.redoStack=[],e.instance||(e.instance=this,this.init()),e.instance}return e.prototype.init=function(){var e=this;"undefined"!==typeof window&&window.addEventListener("keydown",(function(t){var n;if((e.redoStack.length||e.undoStack.length)&&!(0,r.shouldRejectKeystrokes)()){var a=null===(n=t.key)||void 0===n?void 0:n.toLowerCase();t.metaKey&&"z"===a&&t.shiftKey?e.redo():t.metaKey&&"z"===a&&e.undo()}}))},e.prototype.add=function(e){var t=a.create(e);return this.undoStack.push(t),t},e.prototype.remove=function(e){var t=this.undoStack.findIndex((function(t){return t===e}));if(-1===t){var n=this.redoStack.findIndex((function(t){return t===e}));-1!==n&&this.redoStack.splice(n,1)}else this.undoStack.splice(t,1)},e.prototype.undo=function(e){if(!e){var t=this.undoStack.pop();if(!t)return;return null===t||void 0===t||t.negate(),this.redoStack.push(t),t}var n=this.undoStack.findIndex((function(t){return t===e}));if(-1!==n)return this.undoStack.splice(n,1),e.negate(),this.redoStack.push(e),e},e.prototype.redo=function(e){if(!e){var t=this.redoStack.pop();if(!t)return;return null===t||void 0===t||t.perform(),this.undoStack.push(t),t}var n=this.redoStack.findIndex((function(t){return t===e}));if(-1!==n)return this.redoStack.splice(n,1),e.perform(),this.undoStack.push(e),e},e.prototype.reset=function(){this.undoStack.splice(0),this.redoStack.splice(0)},e}());t.history=o,Object.freeze(o)},6101:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=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}),a(n(2588),t),a(n(93),t)},9726:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=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.Priority=t.createAction=void 0;var o=n(847);Object.defineProperty(t,"createAction",{enumerable:!0,get:function(){return o.createAction}}),Object.defineProperty(t,"Priority",{enumerable:!0,get:function(){return o.Priority}}),a(n(388),t),a(n(1780),t),a(n(9042),t),a(n(3334),t),a(n(8474),t),a(n(1223),t),a(n(9669),t),a(n(3942),t),a(n(5583),t),a(n(5955),t),a(n(6101),t)},826:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=["Shift","Meta","Alt","Control"],r="object"===typeof navigator&&/Mac|iPod|iPhone|iPad/.test(navigator.platform)?"Meta":"Control";function a(e,t){return"function"===typeof e.getModifierState&&e.getModifierState(t)}t.default=function(e,t,o){var i,s;void 0===o&&(o={});var l=null!==(i=o.timeout)&&void 0!==i?i:1e3,c=null!==(s=o.event)&&void 0!==s?s:"keydown",u=Object.keys(t).map((function(e){return[(n=e,n.trim().split(" ").map((function(e){var t=e.split(/\b\+/),n=t.pop();return[t=t.map((function(e){return"$mod"===e?r:e})),n]}))),t[e]];var n})),d=new Map,p=null,m=function(e){e instanceof KeyboardEvent&&(u.forEach((function(t){var r=t[0],o=t[1],i=d.get(r),s=i||r,l=s[0],c=function(e,t){return!(!/^[^A-Za-z0-9]$/.test(e.key)||t[1]!==e.key)||!(t[1].toUpperCase()!==e.key.toUpperCase()&&t[1]!==e.code||t[0].find((function(t){return!a(e,t)}))||n.find((function(n){return!t[0].includes(n)&&t[1]!==n&&a(e,n)})))}(e,l);c?s.length>1?d.set(r,s.slice(1)):(d.delete(r),o(e)):a(e,e.key)||d.delete(r)})),p&&clearTimeout(p),p=setTimeout(d.clear.bind(d),l))};return e.addEventListener(c,m),function(){e.removeEventListener(c,m)}}},5955:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.VisualState=void 0,function(e){e.animatingIn="animating-in",e.showing="showing",e.animatingOut="animating-out",e.hidden="hidden"}(t.VisualState||(t.VisualState={}))},1223:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0){for(var o=n[a].children,i=0;i-1)return this.subscribers.splice(t,1)}},e.prototype.notify=function(){this.subscribers.forEach((function(e){return e.collect()}))},e}(),h=function(){function e(e,t){this.collector=e,this.onChange=t}return e.prototype.collect=function(){try{var e=this.collector();(0,l.deepEqual)(e,this.collected)||(this.collected=e,this.onChange&&this.onChange(this.collected))}catch(t){console.warn(t)}},e}()},847:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.cookieOptions=Object.assign({path:"/"},t),s=void 0===t.prefix?s:t.prefix}return r(e,[{key:"getItem",value:function(e){var t=i.default.parse(document.cookie);return t&&t.hasOwnProperty(s+e)?t[s+e]:null}},{key:"setItem",value:function(e,t){return document.cookie=i.default.serialize(s+e,t,this.cookieOptions),t}},{key:"removeItem",value:function(e){var t=Object.assign({},this.cookieOptions,{maxAge:-1});return document.cookie=i.default.serialize(s+e,"",t),null}},{key:"clear",value:function(){var e=i.default.parse(document.cookie);for(var t in e)0===t.indexOf(s)&&this.removeItem(t.substr(s.length));return null}}]),e}();t.default=l},2080:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;n{"use strict";var r=i(n(1322)),a=i(n(3091)),o=i(n(2080));function i(e){return e&&e.__esModule?e:{default:e}}var s=null;s=(0,r.default)("localStorage")?window.localStorage:(0,r.default)("sessionStorage")?window.sessionStorage:(0,r.default)("cookieStorage")?new a.default:new o.default,t.Ay=s,r.default,a.default,o.default},1322:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"localStorage",t=String(e).replace(/storage$/i,"").toLowerCase();if("local"===t)return o("localStorage");if("session"===t)return o("sessionStorage");if("cookie"===t)return(0,r.hasCookies)();if("memory"===t)return!0;throw new Error("Storage method `"+e+"` is not available.\n Please use one of the following: localStorage, sessionStorage, cookieStorage, memoryStorage.")};var r=n(3091),a="__test";function o(e){try{var t=window[e];return t.setItem(a,"1"),t.removeItem(a),!0}catch(n){return!1}}},8724:(e,t,n)=>{var r=n(7615),a=n(5051),o=n(2154),i=n(8734),s=n(2662);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t{var r=n(7563),a=n(9935),o=n(4190),i=n(1946),s=n(1714);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t{var r=n(7937)(n(6552),"Map");e.exports=r},4816:(e,t,n)=>{var r=n(7251),a=n(7159),o=n(438),i=n(9394),s=n(6874);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t{var r=n(6552).Symbol;e.exports=r},149:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,a=Array(r);++n{var r=n(3211);e.exports=function(e,t){for(var n=e.length;n--;)if(r(e[n][0],t))return n;return-1}},2969:(e,t,n)=>{var r=n(5324),a=n(914);e.exports=function(e,t){for(var n=0,o=(t=r(t,e)).length;null!=e&&n{var r=n(9812),a=n(4552),o=n(6095),i=r?r.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":i&&i in Object(e)?a(e):o(e)}},6954:(e,t,n)=>{var r=n(1629),a=n(7857),o=n(6686),i=n(6996),s=/^\[object .+?Constructor\]$/,l=Function.prototype,c=Object.prototype,u=l.toString,d=c.hasOwnProperty,p=RegExp("^"+u.call(d).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=function(e){return!(!o(e)||a(e))&&(r(e)?p:s).test(i(e))}},8541:(e,t,n)=>{var r=n(9812),a=n(149),o=n(4052),i=n(9841),s=r?r.prototype:void 0,l=s?s.toString:void 0;e.exports=function e(t){if("string"==typeof t)return t;if(o(t))return a(t,e)+"";if(i(t))return l?l.call(t):"";var n=t+"";return"0"==n&&1/t==-1/0?"-0":n}},1141:(e,t,n)=>{var r=n(143),a=/^\s+/;e.exports=function(e){return e?e.slice(0,r(e)+1).replace(a,""):e}},5324:(e,t,n)=>{var r=n(4052),a=n(2597),o=n(4079),i=n(1069);e.exports=function(e,t){return r(e)?e:a(e,t)?[e]:o(i(e))}},3440:(e,t,n)=>{var r=n(6552)["__core-js_shared__"];e.exports=r},3118:(e,t,n)=>{var r=n(6552),a=n(9140),o=n(801),i=n(1069),s=r.isFinite,l=Math.min;e.exports=function(e){var t=Math[e];return function(e,n){if(e=o(e),(n=null==n?0:l(a(n),292))&&s(e)){var r=(i(e)+"e").split("e"),c=t(r[0]+"e"+(+r[1]+n));return+((r=(i(c)+"e").split("e"))[0]+"e"+(+r[1]-n))}return t(e)}}},7105:(e,t,n)=>{var r="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g;e.exports=r},2622:(e,t,n)=>{var r=n(705);e.exports=function(e,t){var n=e.__data__;return r(t)?n["string"==typeof t?"string":"hash"]:n.map}},7937:(e,t,n)=>{var r=n(6954),a=n(4657);e.exports=function(e,t){var n=a(e,t);return r(n)?n:void 0}},4552:(e,t,n)=>{var r=n(9812),a=Object.prototype,o=a.hasOwnProperty,i=a.toString,s=r?r.toStringTag:void 0;e.exports=function(e){var t=o.call(e,s),n=e[s];try{e[s]=void 0;var r=!0}catch(l){}var a=i.call(e);return r&&(t?e[s]=n:delete e[s]),a}},4657:e=>{e.exports=function(e,t){return null==e?void 0:e[t]}},7615:(e,t,n)=>{var r=n(5575);e.exports=function(){this.__data__=r?r(null):{},this.size=0}},5051:e=>{e.exports=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}},2154:(e,t,n)=>{var r=n(5575),a=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;if(r){var n=t[e];return"__lodash_hash_undefined__"===n?void 0:n}return a.call(t,e)?t[e]:void 0}},8734:(e,t,n)=>{var r=n(5575),a=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;return r?void 0!==t[e]:a.call(t,e)}},2662:(e,t,n)=>{var r=n(5575);e.exports=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=r&&void 0===t?"__lodash_hash_undefined__":t,this}},2597:(e,t,n)=>{var r=n(4052),a=n(9841),o=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,i=/^\w*$/;e.exports=function(e,t){if(r(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!a(e))||(i.test(e)||!o.test(e)||null!=t&&e in Object(t))}},705:e=>{e.exports=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}},7857:(e,t,n)=>{var r=n(3440),a=function(){var e=/[^.]+$/.exec(r&&r.keys&&r.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();e.exports=function(e){return!!a&&a in e}},7563:e=>{e.exports=function(){this.__data__=[],this.size=0}},9935:(e,t,n)=>{var r=n(1340),a=Array.prototype.splice;e.exports=function(e){var t=this.__data__,n=r(t,e);return!(n<0)&&(n==t.length-1?t.pop():a.call(t,n,1),--this.size,!0)}},4190:(e,t,n)=>{var r=n(1340);e.exports=function(e){var t=this.__data__,n=r(t,e);return n<0?void 0:t[n][1]}},1946:(e,t,n)=>{var r=n(1340);e.exports=function(e){return r(this.__data__,e)>-1}},1714:(e,t,n)=>{var r=n(1340);e.exports=function(e,t){var n=this.__data__,a=r(n,e);return a<0?(++this.size,n.push([e,t])):n[a][1]=t,this}},7251:(e,t,n)=>{var r=n(8724),a=n(7160),o=n(5204);e.exports=function(){this.size=0,this.__data__={hash:new r,map:new(o||a),string:new r}}},7159:(e,t,n)=>{var r=n(2622);e.exports=function(e){var t=r(this,e).delete(e);return this.size-=t?1:0,t}},438:(e,t,n)=>{var r=n(2622);e.exports=function(e){return r(this,e).get(e)}},9394:(e,t,n)=>{var r=n(2622);e.exports=function(e){return r(this,e).has(e)}},6874:(e,t,n)=>{var r=n(2622);e.exports=function(e,t){var n=r(this,e),a=n.size;return n.set(e,t),this.size+=n.size==a?0:1,this}},8259:(e,t,n)=>{var r=n(5797);e.exports=function(e){var t=r(e,(function(e){return 500===n.size&&n.clear(),e})),n=t.cache;return t}},5575:(e,t,n)=>{var r=n(7937)(Object,"create");e.exports=r},6095:e=>{var t=Object.prototype.toString;e.exports=function(e){return t.call(e)}},6552:(e,t,n)=>{var r=n(7105),a="object"==typeof self&&self&&self.Object===Object&&self,o=r||a||Function("return this")();e.exports=o},4079:(e,t,n)=>{var r=n(8259),a=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,o=/\\(\\)?/g,i=r((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(a,(function(e,n,r,a){t.push(r?a.replace(o,"$1"):n||e)})),t}));e.exports=i},914:(e,t,n)=>{var r=n(9841);e.exports=function(e){if("string"==typeof e||r(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}},6996:e=>{var t=Function.prototype.toString;e.exports=function(e){if(null!=e){try{return t.call(e)}catch(n){}try{return e+""}catch(n){}}return""}},143:e=>{var t=/\s/;e.exports=function(e){for(var n=e.length;n--&&t.test(e.charAt(n)););return n}},3950:(e,t,n)=>{var r=n(6686),a=n(4757),o=n(801),i=Math.max,s=Math.min;e.exports=function(e,t,n){var l,c,u,d,p,m,f=0,h=!1,g=!1,E=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function b(t){var n=l,r=c;return l=c=void 0,f=t,d=e.apply(r,n)}function v(e){var n=e-m;return void 0===m||n>=t||n<0||g&&e-f>=u}function y(){var e=a();if(v(e))return _(e);p=setTimeout(y,function(e){var n=t-(e-m);return g?s(n,u-(e-f)):n}(e))}function _(e){return p=void 0,E&&l?b(e):(l=c=void 0,d)}function S(){var e=a(),n=v(e);if(l=arguments,c=this,m=e,n){if(void 0===p)return function(e){return f=e,p=setTimeout(y,t),h?b(e):d}(m);if(g)return clearTimeout(p),p=setTimeout(y,t),b(m)}return void 0===p&&(p=setTimeout(y,t)),d}return t=o(t)||0,r(n)&&(h=!!n.leading,u=(g="maxWait"in n)?i(o(n.maxWait)||0,t):u,E="trailing"in n?!!n.trailing:E),S.cancel=function(){void 0!==p&&clearTimeout(p),f=0,l=m=c=p=void 0},S.flush=function(){return void 0===p?d:_(a())},S}},3211:e=>{e.exports=function(e,t){return e===t||e!==e&&t!==t}},1659:(e,t,n)=>{var r=n(3118)("floor");e.exports=r},3097:(e,t,n)=>{var r=n(2969);e.exports=function(e,t,n){var a=null==e?void 0:r(e,t);return void 0===a?n:a}},4052:e=>{var t=Array.isArray;e.exports=t},1629:(e,t,n)=>{var r=n(6913),a=n(6686);e.exports=function(e){if(!a(e))return!1;var t=r(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}},6686:e=>{e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},2761:e=>{e.exports=function(e){return null!=e&&"object"==typeof e}},9841:(e,t,n)=>{var r=n(6913),a=n(2761);e.exports=function(e){return"symbol"==typeof e||a(e)&&"[object Symbol]"==r(e)}},3536:function(e,t,n){var r;e=n.nmd(e),function(){var a,o="Expected a function",i="__lodash_hash_undefined__",s="__lodash_placeholder__",l=16,c=32,u=64,d=128,p=256,m=1/0,f=9007199254740991,h=NaN,g=4294967295,E=[["ary",d],["bind",1],["bindKey",2],["curry",8],["curryRight",l],["flip",512],["partial",c],["partialRight",u],["rearg",p]],b="[object Arguments]",v="[object Array]",y="[object Boolean]",_="[object Date]",S="[object Error]",T="[object Function]",A="[object GeneratorFunction]",C="[object Map]",w="[object Number]",N="[object Object]",I="[object Promise]",x="[object RegExp]",R="[object Set]",k="[object String]",O="[object Symbol]",L="[object WeakMap]",D="[object ArrayBuffer]",M="[object DataView]",P="[object Float32Array]",B="[object Float64Array]",F="[object Int8Array]",U="[object Int16Array]",z="[object Int32Array]",H="[object Uint8Array]",G="[object Uint8ClampedArray]",j="[object Uint16Array]",V="[object Uint32Array]",Z=/\b__p \+= '';/g,W=/\b(__p \+=) '' \+/g,$=/(__e\(.*?\)|\b__t\)) \+\n'';/g,q=/&(?:amp|lt|gt|quot|#39);/g,Y=/[&<>"']/g,K=RegExp(q.source),X=RegExp(Y.source),Q=/<%-([\s\S]+?)%>/g,J=/<%([\s\S]+?)%>/g,ee=/<%=([\s\S]+?)%>/g,te=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ne=/^\w*$/,re=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ae=/[\\^$.*+?()[\]{}|]/g,oe=RegExp(ae.source),ie=/^\s+/,se=/\s/,le=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,ce=/\{\n\/\* \[wrapped with (.+)\] \*/,ue=/,? & /,de=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,pe=/[()=,{}\[\]\/\s]/,me=/\\(\\)?/g,fe=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,he=/\w*$/,ge=/^[-+]0x[0-9a-f]+$/i,Ee=/^0b[01]+$/i,be=/^\[object .+?Constructor\]$/,ve=/^0o[0-7]+$/i,ye=/^(?:0|[1-9]\d*)$/,_e=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Se=/($^)/,Te=/['\n\r\u2028\u2029\\]/g,Ae="\\ud800-\\udfff",Ce="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",we="\\u2700-\\u27bf",Ne="a-z\\xdf-\\xf6\\xf8-\\xff",Ie="A-Z\\xc0-\\xd6\\xd8-\\xde",xe="\\ufe0e\\ufe0f",Re="\\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",ke="['\u2019]",Oe="["+Ae+"]",Le="["+Re+"]",De="["+Ce+"]",Me="\\d+",Pe="["+we+"]",Be="["+Ne+"]",Fe="[^"+Ae+Re+Me+we+Ne+Ie+"]",Ue="\\ud83c[\\udffb-\\udfff]",ze="[^"+Ae+"]",He="(?:\\ud83c[\\udde6-\\uddff]){2}",Ge="[\\ud800-\\udbff][\\udc00-\\udfff]",je="["+Ie+"]",Ve="\\u200d",Ze="(?:"+Be+"|"+Fe+")",We="(?:"+je+"|"+Fe+")",$e="(?:['\u2019](?:d|ll|m|re|s|t|ve))?",qe="(?:['\u2019](?:D|LL|M|RE|S|T|VE))?",Ye="(?:"+De+"|"+Ue+")"+"?",Ke="["+xe+"]?",Xe=Ke+Ye+("(?:"+Ve+"(?:"+[ze,He,Ge].join("|")+")"+Ke+Ye+")*"),Qe="(?:"+[Pe,He,Ge].join("|")+")"+Xe,Je="(?:"+[ze+De+"?",De,He,Ge,Oe].join("|")+")",et=RegExp(ke,"g"),tt=RegExp(De,"g"),nt=RegExp(Ue+"(?="+Ue+")|"+Je+Xe,"g"),rt=RegExp([je+"?"+Be+"+"+$e+"(?="+[Le,je,"$"].join("|")+")",We+"+"+qe+"(?="+[Le,je+Ze,"$"].join("|")+")",je+"?"+Ze+"+"+$e,je+"+"+qe,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",Me,Qe].join("|"),"g"),at=RegExp("["+Ve+Ae+Ce+xe+"]"),ot=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,it=["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[P]=lt[B]=lt[F]=lt[U]=lt[z]=lt[H]=lt[G]=lt[j]=lt[V]=!0,lt[b]=lt[v]=lt[D]=lt[y]=lt[M]=lt[_]=lt[S]=lt[T]=lt[C]=lt[w]=lt[N]=lt[x]=lt[R]=lt[k]=lt[L]=!1;var ct={};ct[b]=ct[v]=ct[D]=ct[M]=ct[y]=ct[_]=ct[P]=ct[B]=ct[F]=ct[U]=ct[z]=ct[C]=ct[w]=ct[N]=ct[x]=ct[R]=ct[k]=ct[O]=ct[H]=ct[G]=ct[j]=ct[V]=!0,ct[S]=ct[T]=ct[L]=!1;var ut={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},dt=parseFloat,pt=parseInt,mt="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,ft="object"==typeof self&&self&&self.Object===Object&&self,ht=mt||ft||Function("return this")(),gt=t&&!t.nodeType&&t,Et=gt&&e&&!e.nodeType&&e,bt=Et&&Et.exports===gt,vt=bt&&mt.process,yt=function(){try{var e=Et&&Et.require&&Et.require("util").types;return e||vt&&vt.binding&&vt.binding("util")}catch(t){}}(),_t=yt&&yt.isArrayBuffer,St=yt&&yt.isDate,Tt=yt&&yt.isMap,At=yt&&yt.isRegExp,Ct=yt&&yt.isSet,wt=yt&&yt.isTypedArray;function Nt(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 a=-1,o=null==e?0:e.length;++a-1}function Dt(e,t,n){for(var r=-1,a=null==e?0:e.length;++r-1;);return n}function rn(e,t){for(var n=e.length;n--&&jt(t,e[n],0)>-1;);return n}var an=qt({"\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"}),on=qt({"&":"&","<":"<",">":">",'"':""","'":"'"});function sn(e){return"\\"+ut[e]}function ln(e){return at.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,a=0,o=[];++n",""":'"',"'":"'"});var bn=function e(t){var n=(t=null==t?ht:bn.defaults(ht.Object(),t,bn.pick(ht,it))).Array,r=t.Date,se=t.Error,Ae=t.Function,Ce=t.Math,we=t.Object,Ne=t.RegExp,Ie=t.String,xe=t.TypeError,Re=n.prototype,ke=Ae.prototype,Oe=we.prototype,Le=t["__core-js_shared__"],De=ke.toString,Me=Oe.hasOwnProperty,Pe=0,Be=function(){var e=/[^.]+$/.exec(Le&&Le.keys&&Le.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}(),Fe=Oe.toString,Ue=De.call(we),ze=ht._,He=Ne("^"+De.call(Me).replace(ae,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Ge=bt?t.Buffer:a,je=t.Symbol,Ve=t.Uint8Array,Ze=Ge?Ge.allocUnsafe:a,We=un(we.getPrototypeOf,we),$e=we.create,qe=Oe.propertyIsEnumerable,Ye=Re.splice,Ke=je?je.isConcatSpreadable:a,Xe=je?je.iterator:a,Qe=je?je.toStringTag:a,Je=function(){try{var e=po(we,"defineProperty");return e({},"",{}),e}catch(t){}}(),nt=t.clearTimeout!==ht.clearTimeout&&t.clearTimeout,at=r&&r.now!==ht.Date.now&&r.now,ut=t.setTimeout!==ht.setTimeout&&t.setTimeout,mt=Ce.ceil,ft=Ce.floor,gt=we.getOwnPropertySymbols,Et=Ge?Ge.isBuffer:a,vt=t.isFinite,yt=Re.join,zt=un(we.keys,we),qt=Ce.max,vn=Ce.min,yn=r.now,_n=t.parseInt,Sn=Ce.random,Tn=Re.reverse,An=po(t,"DataView"),Cn=po(t,"Map"),wn=po(t,"Promise"),Nn=po(t,"Set"),In=po(t,"WeakMap"),xn=po(we,"create"),Rn=In&&new In,kn={},On=Fo(An),Ln=Fo(Cn),Dn=Fo(wn),Mn=Fo(Nn),Pn=Fo(In),Bn=je?je.prototype:a,Fn=Bn?Bn.valueOf:a,Un=Bn?Bn.toString:a;function zn(e){if(ts(e)&&!Vi(e)&&!(e instanceof Vn)){if(e instanceof jn)return e;if(Me.call(e,"__wrapped__"))return Uo(e)}return new jn(e)}var Hn=function(){function e(){}return function(t){if(!es(t))return{};if($e)return $e(t);e.prototype=t;var n=new e;return e.prototype=a,n}}();function Gn(){}function jn(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=a}function Vn(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=g,this.__views__=[]}function Zn(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t=t?e:t)),e}function lr(e,t,n,r,o,i){var s,l=1&t,c=2&t,u=4&t;if(n&&(s=o?n(e,r,o,i):n(e)),s!==a)return s;if(!es(e))return e;var d=Vi(e);if(d){if(s=function(e){var t=e.length,n=new e.constructor(t);t&&"string"==typeof e[0]&&Me.call(e,"index")&&(n.index=e.index,n.input=e.input);return n}(e),!l)return xa(e,s)}else{var p=ho(e),m=p==T||p==A;if(qi(e))return Ta(e,l);if(p==N||p==b||m&&!o){if(s=c||m?{}:Eo(e),!l)return c?function(e,t){return Ra(e,fo(e),t)}(e,function(e,t){return e&&Ra(t,Os(t),e)}(s,e)):function(e,t){return Ra(e,mo(e),t)}(e,ar(s,e))}else{if(!ct[p])return o?e:{};s=function(e,t,n){var r=e.constructor;switch(t){case D:return Aa(e);case y:case _:return new r(+e);case M:return function(e,t){var n=t?Aa(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}(e,n);case P:case B:case F:case U:case z:case H:case G:case j:case V:return Ca(e,n);case C:return new r;case w:case k:return new r(e);case x:return function(e){var t=new e.constructor(e.source,he.exec(e));return t.lastIndex=e.lastIndex,t}(e);case R:return new r;case O:return a=e,Fn?we(Fn.call(a)):{}}var a}(e,p,l)}}i||(i=new Yn);var f=i.get(e);if(f)return f;i.set(e,s),is(e)?e.forEach((function(r){s.add(lr(r,t,n,r,e,i))})):ns(e)&&e.forEach((function(r,a){s.set(a,lr(r,t,n,a,e,i))}));var h=d?a:(u?c?ao:ro:c?Os:ks)(e);return xt(h||e,(function(r,a){h&&(r=e[a=r]),tr(s,a,lr(r,t,n,a,e,i))})),s}function cr(e,t,n){var r=n.length;if(null==e)return!r;for(e=we(e);r--;){var o=n[r],i=t[o],s=e[o];if(s===a&&!(o in e)||!i(s))return!1}return!0}function ur(e,t,n){if("function"!=typeof e)throw new xe(o);return ko((function(){e.apply(a,n)}),t)}function dr(e,t,n,r){var a=-1,o=Lt,i=!0,s=e.length,l=[],c=t.length;if(!s)return l;n&&(t=Mt(t,Jt(n))),r?(o=Dt,i=!1):t.length>=200&&(o=tn,i=!1,t=new qn(t));e:for(;++a-1},Wn.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},$n.prototype.clear=function(){this.size=0,this.__data__={hash:new Zn,map:new(Cn||Wn),string:new Zn}},$n.prototype.delete=function(e){var t=co(this,e).delete(e);return this.size-=t?1:0,t},$n.prototype.get=function(e){return co(this,e).get(e)},$n.prototype.has=function(e){return co(this,e).has(e)},$n.prototype.set=function(e,t){var n=co(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this},qn.prototype.add=qn.prototype.push=function(e){return this.__data__.set(e,i),this},qn.prototype.has=function(e){return this.__data__.has(e)},Yn.prototype.clear=function(){this.__data__=new Wn,this.size=0},Yn.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},Yn.prototype.get=function(e){return this.__data__.get(e)},Yn.prototype.has=function(e){return this.__data__.has(e)},Yn.prototype.set=function(e,t){var n=this.__data__;if(n instanceof Wn){var r=n.__data__;if(!Cn||r.length<199)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new $n(r)}return n.set(e,t),this.size=n.size,this};var pr=La(yr),mr=La(_r,!0);function fr(e,t){var n=!0;return pr(e,(function(e,r,a){return n=!!t(e,r,a)})),n}function hr(e,t,n){for(var r=-1,o=e.length;++r0&&n(s)?t>1?Er(s,t-1,n,r,a):Pt(a,s):r||(a[a.length]=s)}return a}var br=Da(),vr=Da(!0);function yr(e,t){return e&&br(e,t,ks)}function _r(e,t){return e&&vr(e,t,ks)}function Sr(e,t){return Ot(t,(function(t){return Xi(e[t])}))}function Tr(e,t){for(var n=0,r=(t=va(t,e)).length;null!=e&&nt}function Nr(e,t){return null!=e&&Me.call(e,t)}function Ir(e,t){return null!=e&&t in we(e)}function xr(e,t,r){for(var o=r?Dt:Lt,i=e[0].length,s=e.length,l=s,c=n(s),u=1/0,d=[];l--;){var p=e[l];l&&t&&(p=Mt(p,Jt(t))),u=vn(p.length,u),c[l]=!r&&(t||i>=120&&p.length>=120)?new qn(l&&p):a}p=e[0];var m=-1,f=c[0];e:for(;++m=s?l:l*("desc"==n[r]?-1:1)}return e.index-t.index}(e,t,n)}))}function Zr(e,t,n){for(var r=-1,a=t.length,o={};++r-1;)s!==e&&Ye.call(s,l,1),Ye.call(e,l,1);return e}function $r(e,t){for(var n=e?t.length:0,r=n-1;n--;){var a=t[n];if(n==r||a!==o){var o=a;vo(a)?Ye.call(e,a,1):da(e,a)}}return e}function qr(e,t){return e+ft(Sn()*(t-e+1))}function Yr(e,t){var n="";if(!e||t<1||t>f)return n;do{t%2&&(n+=e),(t=ft(t/2))&&(e+=e)}while(t);return n}function Kr(e,t){return Oo(No(e,t,rl),e+"")}function Xr(e){return Xn(zs(e))}function Qr(e,t){var n=zs(e);return Mo(n,sr(t,0,n.length))}function Jr(e,t,n,r){if(!es(e))return e;for(var o=-1,i=(t=va(t,e)).length,s=i-1,l=e;null!=l&&++oo?0:o+t),(r=r>o?o:r)<0&&(r+=o),o=t>r?0:r-t>>>0,t>>>=0;for(var i=n(o);++a>>1,i=e[o];null!==i&&!ls(i)&&(n?i<=t:i=200){var c=t?null:Ya(e);if(c)return pn(c);i=!1,a=tn,l=new qn}else l=t?[]:s;e:for(;++r=r?e:ra(e,t,n)}var Sa=nt||function(e){return ht.clearTimeout(e)};function Ta(e,t){if(t)return e.slice();var n=e.length,r=Ze?Ze(n):new e.constructor(n);return e.copy(r),r}function Aa(e){var t=new e.constructor(e.byteLength);return new Ve(t).set(new Ve(e)),t}function Ca(e,t){var n=t?Aa(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}function wa(e,t){if(e!==t){var n=e!==a,r=null===e,o=e===e,i=ls(e),s=t!==a,l=null===t,c=t===t,u=ls(t);if(!l&&!u&&!i&&e>t||i&&s&&c&&!l&&!u||r&&s&&c||!n&&c||!o)return 1;if(!r&&!i&&!u&&e1?n[o-1]:a,s=o>2?n[2]:a;for(i=e.length>3&&"function"==typeof i?(o--,i):a,s&&yo(n[0],n[1],s)&&(i=o<3?a:i,o=1),t=we(t);++r-1?o[i?t[s]:s]:a}}function Ua(e){return no((function(t){var n=t.length,r=n,i=jn.prototype.thru;for(e&&t.reverse();r--;){var s=t[r];if("function"!=typeof s)throw new xe(o);if(i&&!l&&"wrapper"==io(s))var l=new jn([],!0)}for(r=l?r:n;++r1&&y.reverse(),m&&ul))return!1;var u=i.get(e),d=i.get(t);if(u&&d)return u==t&&d==e;var p=-1,m=!0,f=2&n?new qn:a;for(i.set(e,t),i.set(t,e);++p-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 xt(E,(function(n){var r="_."+n[0];t&n[1]&&!Lt(e,r)&&e.push(r)})),e.sort()}(function(e){var t=e.match(ce);return t?t[1].split(ue):[]}(r),n)))}function Do(e){var t=0,n=0;return function(){var r=yn(),o=16-(r-n);if(n=r,o>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(a,arguments)}}function Mo(e,t){var n=-1,r=e.length,o=r-1;for(t=t===a?r:t;++n1?e[t-1]:a;return n="function"==typeof n?(e.pop(),n):a,oi(e,n)}));function pi(e){var t=zn(e);return t.__chain__=!0,t}function mi(e,t){return t(e)}var fi=no((function(e){var t=e.length,n=t?e[0]:0,r=this.__wrapped__,o=function(t){return ir(t,e)};return!(t>1||this.__actions__.length)&&r instanceof Vn&&vo(n)?((r=r.slice(n,+n+(t?1:0))).__actions__.push({func:mi,args:[o],thisArg:a}),new jn(r,this.__chain__).thru((function(e){return t&&!e.length&&e.push(a),e}))):this.thru(o)}));var hi=ka((function(e,t,n){Me.call(e,n)?++e[n]:or(e,n,1)}));var gi=Fa(jo),Ei=Fa(Vo);function bi(e,t){return(Vi(e)?xt:pr)(e,lo(t,3))}function vi(e,t){return(Vi(e)?Rt:mr)(e,lo(t,3))}var yi=ka((function(e,t,n){Me.call(e,n)?e[n].push(t):or(e,n,[t])}));var _i=Kr((function(e,t,r){var a=-1,o="function"==typeof t,i=Wi(e)?n(e.length):[];return pr(e,(function(e){i[++a]=o?Nt(t,e,r):Rr(e,t,r)})),i})),Si=ka((function(e,t,n){or(e,n,t)}));function Ti(e,t){return(Vi(e)?Mt:Ur)(e,lo(t,3))}var Ai=ka((function(e,t,n){e[n?0:1].push(t)}),(function(){return[[],[]]}));var Ci=Kr((function(e,t){if(null==e)return[];var n=t.length;return n>1&&yo(e,t[0],t[1])?t=[]:n>2&&yo(t[0],t[1],t[2])&&(t=[t[0]]),Vr(e,Er(t,1),[])})),wi=at||function(){return ht.Date.now()};function Ni(e,t,n){return t=n?a:t,t=e&&null==t?e.length:t,Xa(e,d,a,a,a,a,t)}function Ii(e,t){var n;if("function"!=typeof t)throw new xe(o);return e=fs(e),function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=a),n}}var xi=Kr((function(e,t,n){var r=1;if(n.length){var a=dn(n,so(xi));r|=c}return Xa(e,r,t,n,a)})),Ri=Kr((function(e,t,n){var r=3;if(n.length){var a=dn(n,so(Ri));r|=c}return Xa(t,r,e,n,a)}));function ki(e,t,n){var r,i,s,l,c,u,d=0,p=!1,m=!1,f=!0;if("function"!=typeof e)throw new xe(o);function h(t){var n=r,o=i;return r=i=a,d=t,l=e.apply(o,n)}function g(e){var n=e-u;return u===a||n>=t||n<0||m&&e-d>=s}function E(){var e=wi();if(g(e))return b(e);c=ko(E,function(e){var n=t-(e-u);return m?vn(n,s-(e-d)):n}(e))}function b(e){return c=a,f&&r?h(e):(r=i=a,l)}function v(){var e=wi(),n=g(e);if(r=arguments,i=this,u=e,n){if(c===a)return function(e){return d=e,c=ko(E,t),p?h(e):l}(u);if(m)return Sa(c),c=ko(E,t),h(u)}return c===a&&(c=ko(E,t)),l}return t=gs(t)||0,es(n)&&(p=!!n.leading,s=(m="maxWait"in n)?qt(gs(n.maxWait)||0,t):s,f="trailing"in n?!!n.trailing:f),v.cancel=function(){c!==a&&Sa(c),d=0,r=u=i=c=a},v.flush=function(){return c===a?l:b(wi())},v}var Oi=Kr((function(e,t){return ur(e,1,t)})),Li=Kr((function(e,t,n){return ur(e,gs(t)||0,n)}));function Di(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new xe(o);var n=function(){var r=arguments,a=t?t.apply(this,r):r[0],o=n.cache;if(o.has(a))return o.get(a);var i=e.apply(this,r);return n.cache=o.set(a,i)||o,i};return n.cache=new(Di.Cache||$n),n}function Mi(e){if("function"!=typeof e)throw new xe(o);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)}}Di.Cache=$n;var Pi=ya((function(e,t){var n=(t=1==t.length&&Vi(t[0])?Mt(t[0],Jt(lo())):Mt(Er(t,1),Jt(lo()))).length;return Kr((function(r){for(var a=-1,o=vn(r.length,n);++a=t})),ji=kr(function(){return arguments}())?kr:function(e){return ts(e)&&Me.call(e,"callee")&&!qe.call(e,"callee")},Vi=n.isArray,Zi=_t?Jt(_t):function(e){return ts(e)&&Cr(e)==D};function Wi(e){return null!=e&&Ji(e.length)&&!Xi(e)}function $i(e){return ts(e)&&Wi(e)}var qi=Et||gl,Yi=St?Jt(St):function(e){return ts(e)&&Cr(e)==_};function Ki(e){if(!ts(e))return!1;var t=Cr(e);return t==S||"[object DOMException]"==t||"string"==typeof e.message&&"string"==typeof e.name&&!as(e)}function Xi(e){if(!es(e))return!1;var t=Cr(e);return t==T||t==A||"[object AsyncFunction]"==t||"[object Proxy]"==t}function Qi(e){return"number"==typeof e&&e==fs(e)}function Ji(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=f}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=Tt?Jt(Tt):function(e){return ts(e)&&ho(e)==C};function rs(e){return"number"==typeof e||ts(e)&&Cr(e)==w}function as(e){if(!ts(e)||Cr(e)!=N)return!1;var t=We(e);if(null===t)return!0;var n=Me.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&De.call(n)==Ue}var os=At?Jt(At):function(e){return ts(e)&&Cr(e)==x};var is=Ct?Jt(Ct):function(e){return ts(e)&&ho(e)==R};function ss(e){return"string"==typeof e||!Vi(e)&&ts(e)&&Cr(e)==k}function ls(e){return"symbol"==typeof e||ts(e)&&Cr(e)==O}var cs=wt?Jt(wt):function(e){return ts(e)&&Ji(e.length)&&!!lt[Cr(e)]};var us=Wa(Fr),ds=Wa((function(e,t){return e<=t}));function ps(e){if(!e)return[];if(Wi(e))return ss(e)?hn(e):xa(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=ho(e);return(t==C?cn:t==R?pn:zs)(e)}function ms(e){return e?(e=gs(e))===m||e===-1/0?17976931348623157e292*(e<0?-1:1):e===e?e:0:0===e?e:0}function fs(e){var t=ms(e),n=t%1;return t===t?n?t-n:t:0}function hs(e){return e?sr(fs(e),0,g):0}function gs(e){if("number"==typeof e)return e;if(ls(e))return h;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=Qt(e);var n=Ee.test(e);return n||ve.test(e)?pt(e.slice(2),n?2:8):ge.test(e)?h:+e}function Es(e){return Ra(e,Os(e))}function bs(e){return null==e?"":ca(e)}var vs=Oa((function(e,t){if(Ao(t)||Wi(t))Ra(t,ks(t),e);else for(var n in t)Me.call(t,n)&&tr(e,n,t[n])})),ys=Oa((function(e,t){Ra(t,Os(t),e)})),_s=Oa((function(e,t,n,r){Ra(t,Os(t),e,r)})),Ss=Oa((function(e,t,n,r){Ra(t,ks(t),e,r)})),Ts=no(ir);var As=Kr((function(e,t){e=we(e);var n=-1,r=t.length,o=r>2?t[2]:a;for(o&&yo(t[0],t[1],o)&&(r=1);++n1),t})),Ra(e,ao(e),n),r&&(n=lr(n,7,eo));for(var a=t.length;a--;)da(n,t[a]);return n}));var Ps=no((function(e,t){return null==e?{}:function(e,t){return Zr(e,t,(function(t,n){return Ns(e,n)}))}(e,t)}));function Bs(e,t){if(null==e)return{};var n=Mt(ao(e),(function(e){return[e]}));return t=lo(t),Zr(e,n,(function(e,n){return t(e,n[0])}))}var Fs=Ka(ks),Us=Ka(Os);function zs(e){return null==e?[]:en(e,ks(e))}var Hs=Pa((function(e,t,n){return t=t.toLowerCase(),e+(n?Gs(t):t)}));function Gs(e){return Ks(bs(e).toLowerCase())}function js(e){return(e=bs(e))&&e.replace(_e,an).replace(tt,"")}var Vs=Pa((function(e,t,n){return e+(n?"-":"")+t.toLowerCase()})),Zs=Pa((function(e,t,n){return e+(n?" ":"")+t.toLowerCase()})),Ws=Ma("toLowerCase");var $s=Pa((function(e,t,n){return e+(n?"_":"")+t.toLowerCase()}));var qs=Pa((function(e,t,n){return e+(n?" ":"")+Ks(t)}));var Ys=Pa((function(e,t,n){return e+(n?" ":"")+t.toUpperCase()})),Ks=Ma("toUpperCase");function Xs(e,t,n){return e=bs(e),(t=n?a:t)===a?function(e){return ot.test(e)}(e)?function(e){return e.match(rt)||[]}(e):function(e){return e.match(de)||[]}(e):e.match(t)||[]}var Qs=Kr((function(e,t){try{return Nt(e,a,t)}catch(n){return Ki(n)?n:new se(n)}})),Js=no((function(e,t){return xt(t,(function(t){t=Bo(t),or(e,t,xi(e[t],e))})),e}));function el(e){return function(){return e}}var tl=Ua(),nl=Ua(!0);function rl(e){return e}function al(e){return Mr("function"==typeof e?e:lr(e,1))}var ol=Kr((function(e,t){return function(n){return Rr(n,e,t)}})),il=Kr((function(e,t){return function(n){return Rr(e,n,t)}}));function sl(e,t,n){var r=ks(t),a=Sr(t,r);null!=n||es(t)&&(a.length||!r.length)||(n=t,t=e,e=this,a=Sr(t,ks(t)));var o=!(es(n)&&"chain"in n)||!!n.chain,i=Xi(e);return xt(a,(function(n){var r=t[n];e[n]=r,i&&(e.prototype[n]=function(){var t=this.__chain__;if(o||t){var n=e(this.__wrapped__);return(n.__actions__=xa(this.__actions__)).push({func:r,args:arguments,thisArg:e}),n.__chain__=t,n}return r.apply(e,Pt([this.value()],arguments))})})),e}function ll(){}var cl=ja(Mt),ul=ja(kt),dl=ja(Ut);function pl(e){return _o(e)?$t(Bo(e)):function(e){return function(t){return Tr(t,e)}}(e)}var ml=Za(),fl=Za(!0);function hl(){return[]}function gl(){return!1}var El=Ga((function(e,t){return e+t}),0),bl=qa("ceil"),vl=Ga((function(e,t){return e/t}),1),yl=qa("floor");var _l=Ga((function(e,t){return e*t}),1),Sl=qa("round"),Tl=Ga((function(e,t){return e-t}),0);return zn.after=function(e,t){if("function"!=typeof t)throw new xe(o);return e=fs(e),function(){if(--e<1)return t.apply(this,arguments)}},zn.ary=Ni,zn.assign=vs,zn.assignIn=ys,zn.assignInWith=_s,zn.assignWith=Ss,zn.at=Ts,zn.before=Ii,zn.bind=xi,zn.bindAll=Js,zn.bindKey=Ri,zn.castArray=function(){if(!arguments.length)return[];var e=arguments[0];return Vi(e)?e:[e]},zn.chain=pi,zn.chunk=function(e,t,r){t=(r?yo(e,t,r):t===a)?1:qt(fs(t),0);var o=null==e?0:e.length;if(!o||t<1)return[];for(var i=0,s=0,l=n(mt(o/t));io?0:o+n),(r=r===a||r>o?o:fs(r))<0&&(r+=o),r=n>r?0:hs(r);n>>0)?(e=bs(e))&&("string"==typeof t||null!=t&&!os(t))&&!(t=ca(t))&&ln(e)?_a(hn(e),0,n):e.split(t,n):[]},zn.spread=function(e,t){if("function"!=typeof e)throw new xe(o);return t=null==t?0:qt(fs(t),0),Kr((function(n){var r=n[t],a=_a(n,0,t);return r&&Pt(a,r),Nt(e,this,a)}))},zn.tail=function(e){var t=null==e?0:e.length;return t?ra(e,1,t):[]},zn.take=function(e,t,n){return e&&e.length?ra(e,0,(t=n||t===a?1:fs(t))<0?0:t):[]},zn.takeRight=function(e,t,n){var r=null==e?0:e.length;return r?ra(e,(t=r-(t=n||t===a?1:fs(t)))<0?0:t,r):[]},zn.takeRightWhile=function(e,t){return e&&e.length?ma(e,lo(t,3),!1,!0):[]},zn.takeWhile=function(e,t){return e&&e.length?ma(e,lo(t,3)):[]},zn.tap=function(e,t){return t(e),e},zn.throttle=function(e,t,n){var r=!0,a=!0;if("function"!=typeof e)throw new xe(o);return es(n)&&(r="leading"in n?!!n.leading:r,a="trailing"in n?!!n.trailing:a),ki(e,t,{leading:r,maxWait:t,trailing:a})},zn.thru=mi,zn.toArray=ps,zn.toPairs=Fs,zn.toPairsIn=Us,zn.toPath=function(e){return Vi(e)?Mt(e,Bo):ls(e)?[e]:xa(Po(bs(e)))},zn.toPlainObject=Es,zn.transform=function(e,t,n){var r=Vi(e),a=r||qi(e)||cs(e);if(t=lo(t,4),null==n){var o=e&&e.constructor;n=a?r?new o:[]:es(e)&&Xi(o)?Hn(We(e)):{}}return(a?xt:yr)(e,(function(e,r,a){return t(n,e,r,a)})),n},zn.unary=function(e){return Ni(e,1)},zn.union=ti,zn.unionBy=ni,zn.unionWith=ri,zn.uniq=function(e){return e&&e.length?ua(e):[]},zn.uniqBy=function(e,t){return e&&e.length?ua(e,lo(t,2)):[]},zn.uniqWith=function(e,t){return t="function"==typeof t?t:a,e&&e.length?ua(e,a,t):[]},zn.unset=function(e,t){return null==e||da(e,t)},zn.unzip=ai,zn.unzipWith=oi,zn.update=function(e,t,n){return null==e?e:pa(e,t,ba(n))},zn.updateWith=function(e,t,n,r){return r="function"==typeof r?r:a,null==e?e:pa(e,t,ba(n),r)},zn.values=zs,zn.valuesIn=function(e){return null==e?[]:en(e,Os(e))},zn.without=ii,zn.words=Xs,zn.wrap=function(e,t){return Bi(ba(t),e)},zn.xor=si,zn.xorBy=li,zn.xorWith=ci,zn.zip=ui,zn.zipObject=function(e,t){return ga(e||[],t||[],tr)},zn.zipObjectDeep=function(e,t){return ga(e||[],t||[],Jr)},zn.zipWith=di,zn.entries=Fs,zn.entriesIn=Us,zn.extend=ys,zn.extendWith=_s,sl(zn,zn),zn.add=El,zn.attempt=Qs,zn.camelCase=Hs,zn.capitalize=Gs,zn.ceil=bl,zn.clamp=function(e,t,n){return n===a&&(n=t,t=a),n!==a&&(n=(n=gs(n))===n?n:0),t!==a&&(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:a)},zn.cloneWith=function(e,t){return lr(e,4,t="function"==typeof t?t:a)},zn.conformsTo=function(e,t){return null==t||cr(e,t,ks(t))},zn.deburr=js,zn.defaultTo=function(e,t){return null==e||e!==e?t:e},zn.divide=vl,zn.endsWith=function(e,t,n){e=bs(e),t=ca(t);var r=e.length,o=n=n===a?r:sr(fs(n),0,r);return(n-=t.length)>=0&&e.slice(n,o)==t},zn.eq=zi,zn.escape=function(e){return(e=bs(e))&&X.test(e)?e.replace(Y,on):e},zn.escapeRegExp=function(e){return(e=bs(e))&&oe.test(e)?e.replace(ae,"\\$&"):e},zn.every=function(e,t,n){var r=Vi(e)?kt:fr;return n&&yo(e,t,n)&&(t=a),r(e,lo(t,3))},zn.find=gi,zn.findIndex=jo,zn.findKey=function(e,t){return Ht(e,lo(t,3),yr)},zn.findLast=Ei,zn.findLastIndex=Vo,zn.findLastKey=function(e,t){return Ht(e,lo(t,3),_r)},zn.floor=yl,zn.forEach=bi,zn.forEachRight=vi,zn.forIn=function(e,t){return null==e?e:br(e,lo(t,3),Os)},zn.forInRight=function(e,t){return null==e?e:vr(e,lo(t,3),Os)},zn.forOwn=function(e,t){return e&&yr(e,lo(t,3))},zn.forOwnRight=function(e,t){return e&&_r(e,lo(t,3))},zn.get=ws,zn.gt=Hi,zn.gte=Gi,zn.has=function(e,t){return null!=e&&go(e,t,Nr)},zn.hasIn=Ns,zn.head=Wo,zn.identity=rl,zn.includes=function(e,t,n,r){e=Wi(e)?e:zs(e),n=n&&!r?fs(n):0;var a=e.length;return n<0&&(n=qt(a+n,0)),ss(e)?n<=a&&e.indexOf(t,n)>-1:!!a&&jt(e,t,n)>-1},zn.indexOf=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var a=null==n?0:fs(n);return a<0&&(a=qt(r+a,0)),jt(e,t,a)},zn.inRange=function(e,t,n){return t=ms(t),n===a?(n=t,t=0):n=ms(n),function(e,t,n){return e>=vn(t,n)&&e=-9007199254740991&&e<=f},zn.isSet=is,zn.isString=ss,zn.isSymbol=ls,zn.isTypedArray=cs,zn.isUndefined=function(e){return e===a},zn.isWeakMap=function(e){return ts(e)&&ho(e)==L},zn.isWeakSet=function(e){return ts(e)&&"[object WeakSet]"==Cr(e)},zn.join=function(e,t){return null==e?"":yt.call(e,t)},zn.kebabCase=Vs,zn.last=Ko,zn.lastIndexOf=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var o=r;return n!==a&&(o=(o=fs(n))<0?qt(r+o,0):vn(o,r-1)),t===t?function(e,t,n){for(var r=n+1;r--;)if(e[r]===t)return r;return r}(e,t,o):Gt(e,Zt,o,!0)},zn.lowerCase=Zs,zn.lowerFirst=Ws,zn.lt=us,zn.lte=ds,zn.max=function(e){return e&&e.length?hr(e,rl,wr):a},zn.maxBy=function(e,t){return e&&e.length?hr(e,lo(t,2),wr):a},zn.mean=function(e){return Wt(e,rl)},zn.meanBy=function(e,t){return Wt(e,lo(t,2))},zn.min=function(e){return e&&e.length?hr(e,rl,Fr):a},zn.minBy=function(e,t){return e&&e.length?hr(e,lo(t,2),Fr):a},zn.stubArray=hl,zn.stubFalse=gl,zn.stubObject=function(){return{}},zn.stubString=function(){return""},zn.stubTrue=function(){return!0},zn.multiply=_l,zn.nth=function(e,t){return e&&e.length?jr(e,fs(t)):a},zn.noConflict=function(){return ht._===this&&(ht._=ze),this},zn.noop=ll,zn.now=wi,zn.pad=function(e,t,n){e=bs(e);var r=(t=fs(t))?fn(e):0;if(!t||r>=t)return e;var a=(t-r)/2;return Va(ft(a),n)+e+Va(mt(a),n)},zn.padEnd=function(e,t,n){e=bs(e);var r=(t=fs(t))?fn(e):0;return t&&rt){var r=e;e=t,t=r}if(n||e%1||t%1){var o=Sn();return vn(e+o*(t-e+dt("1e-"+((o+"").length-1))),t)}return qr(e,t)},zn.reduce=function(e,t,n){var r=Vi(e)?Bt:Yt,a=arguments.length<3;return r(e,lo(t,4),n,a,pr)},zn.reduceRight=function(e,t,n){var r=Vi(e)?Ft:Yt,a=arguments.length<3;return r(e,lo(t,4),n,a,mr)},zn.repeat=function(e,t,n){return t=(n?yo(e,t,n):t===a)?1:fs(t),Yr(bs(e),t)},zn.replace=function(){var e=arguments,t=bs(e[0]);return e.length<3?t:t.replace(e[1],e[2])},zn.result=function(e,t,n){var r=-1,o=(t=va(t,e)).length;for(o||(o=1,e=a);++rf)return[];var n=g,r=vn(e,g);t=lo(t),e-=g;for(var a=Xt(r,t);++n=i)return e;var l=n-fn(r);if(l<1)return r;var c=s?_a(s,0,l).join(""):e.slice(0,l);if(o===a)return c+r;if(s&&(l+=c.length-l),os(o)){if(e.slice(l).search(o)){var u,d=c;for(o.global||(o=Ne(o.source,bs(he.exec(o))+"g")),o.lastIndex=0;u=o.exec(d);)var p=u.index;c=c.slice(0,p===a?l:p)}}else if(e.indexOf(ca(o),l)!=l){var m=c.lastIndexOf(o);m>-1&&(c=c.slice(0,m))}return c+r},zn.unescape=function(e){return(e=bs(e))&&K.test(e)?e.replace(q,En):e},zn.uniqueId=function(e){var t=++Pe;return bs(e)+t},zn.upperCase=Ys,zn.upperFirst=Ks,zn.each=bi,zn.eachRight=vi,zn.first=Wo,sl(zn,function(){var e={};return yr(zn,(function(t,n){Me.call(zn.prototype,n)||(e[n]=t)})),e}(),{chain:!1}),zn.VERSION="4.17.21",xt(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(e){zn[e].placeholder=zn})),xt(["drop","take"],(function(e,t){Vn.prototype[e]=function(n){n=n===a?1:qt(fs(n),0);var r=this.__filtered__&&!t?new Vn(this):this.clone();return r.__filtered__?r.__takeCount__=vn(n,r.__takeCount__):r.__views__.push({size:vn(n,g),type:e+(r.__dir__<0?"Right":"")}),r},Vn.prototype[e+"Right"]=function(t){return this.reverse()[e](t).reverse()}})),xt(["filter","map","takeWhile"],(function(e,t){var n=t+1,r=1==n||3==n;Vn.prototype[e]=function(e){var t=this.clone();return t.__iteratees__.push({iteratee:lo(e,3),type:n}),t.__filtered__=t.__filtered__||r,t}})),xt(["head","last"],(function(e,t){var n="take"+(t?"Right":"");Vn.prototype[e]=function(){return this[n](1).value()[0]}})),xt(["initial","tail"],(function(e,t){var n="drop"+(t?"":"Right");Vn.prototype[e]=function(){return this.__filtered__?new Vn(this):this[n](1)}})),Vn.prototype.compact=function(){return this.filter(rl)},Vn.prototype.find=function(e){return this.filter(e).head()},Vn.prototype.findLast=function(e){return this.reverse().find(e)},Vn.prototype.invokeMap=Kr((function(e,t){return"function"==typeof e?new Vn(this):this.map((function(n){return Rr(n,e,t)}))})),Vn.prototype.reject=function(e){return this.filter(Mi(lo(e)))},Vn.prototype.slice=function(e,t){e=fs(e);var n=this;return n.__filtered__&&(e>0||t<0)?new Vn(n):(e<0?n=n.takeRight(-e):e&&(n=n.drop(e)),t!==a&&(n=(t=fs(t))<0?n.dropRight(-t):n.take(t-e)),n)},Vn.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},Vn.prototype.toArray=function(){return this.take(g)},yr(Vn.prototype,(function(e,t){var n=/^(?:filter|find|map|reject)|While$/.test(t),r=/^(?:head|last)$/.test(t),o=zn[r?"take"+("last"==t?"Right":""):t],i=r||/^find/.test(t);o&&(zn.prototype[t]=function(){var t=this.__wrapped__,s=r?[1]:arguments,l=t instanceof Vn,c=s[0],u=l||Vi(t),d=function(e){var t=o.apply(zn,Pt([e],s));return r&&p?t[0]:t};u&&n&&"function"==typeof c&&1!=c.length&&(l=u=!1);var p=this.__chain__,m=!!this.__actions__.length,f=i&&!p,h=l&&!m;if(!i&&u){t=h?t:new Vn(this);var g=e.apply(t,s);return g.__actions__.push({func:mi,args:[d],thisArg:a}),new jn(g,p)}return f&&h?e.apply(this,s):(g=this.thru(d),f?r?g.value()[0]:g.value():g)})})),xt(["pop","push","shift","sort","splice","unshift"],(function(e){var t=Re[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 a=this.value();return t.apply(Vi(a)?a:[],e)}return this[n]((function(n){return t.apply(Vi(n)?n:[],e)}))}})),yr(Vn.prototype,(function(e,t){var n=zn[t];if(n){var r=n.name+"";Me.call(kn,r)||(kn[r]=[]),kn[r].push({name:t,func:n})}})),kn[za(a,2).name]=[{name:"wrapper",func:a}],Vn.prototype.clone=function(){var e=new Vn(this.__wrapped__);return e.__actions__=xa(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=xa(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=xa(this.__views__),e},Vn.prototype.reverse=function(){if(this.__filtered__){var e=new Vn(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},Vn.prototype.value=function(){var e=this.__wrapped__.value(),t=this.__dir__,n=Vi(e),r=t<0,a=n?e.length:0,o=function(e,t,n){var r=-1,a=n.length;for(;++r=this.__values__.length;return{done:e,value:e?a:this.__values__[this.__index__++]}},zn.prototype.plant=function(e){for(var t,n=this;n instanceof Gn;){var r=Uo(n);r.__index__=0,r.__values__=a,t?o.__wrapped__=r:t=r;var o=r;n=n.__wrapped__}return o.__wrapped__=e,t},zn.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof Vn){var t=e;return this.__actions__.length&&(t=new Vn(this)),(t=t.reverse()).__actions__.push({func:mi,args:[ei],thisArg:a}),new jn(t,this.__chain__)}return this.thru(ei)},zn.prototype.toJSON=zn.prototype.valueOf=zn.prototype.value=function(){return fa(this.__wrapped__,this.__actions__)},zn.prototype.first=zn.prototype.head,Xe&&(zn.prototype[Xe]=function(){return this}),zn}();ht._=bn,(r=function(){return bn}.call(t,n,t,e))===a||(e.exports=r)}.call(this)},5797:(e,t,n)=>{var r=n(4816);function a(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var r=arguments,a=t?t.apply(this,r):r[0],o=n.cache;if(o.has(a))return o.get(a);var i=e.apply(this,r);return n.cache=o.set(a,i)||o,i};return n.cache=new(a.Cache||r),n}a.Cache=r,e.exports=a},4757:(e,t,n)=>{var r=n(6552);e.exports=function(){return r.Date.now()}},7303:(e,t,n)=>{var r=n(801),a=1/0;e.exports=function(e){return e?(e=r(e))===a||e===-1/0?17976931348623157e292*(e<0?-1:1):e===e?e:0:0===e?e:0}},9140:(e,t,n)=>{var r=n(7303);e.exports=function(e){var t=r(e),n=t%1;return t===t?n?t-n:t:0}},801:(e,t,n)=>{var r=n(1141),a=n(6686),o=n(9841),i=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,l=/^0o[0-7]+$/i,c=parseInt;e.exports=function(e){if("number"==typeof e)return e;if(o(e))return NaN;if(a(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=a(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=r(e);var n=s.test(e);return n||l.test(e)?c(e.slice(2),n?2:8):i.test(e)?NaN:+e}},1069:(e,t,n)=>{var r=n(8541);e.exports=function(e){return null==e?"":r(e)}},9923:(e,t,n)=>{"use strict";n.d(t,{$2v:()=>co,$5j:()=>yR,$R7:()=>zo,$iK:()=>qx,$nd:()=>mr,$rg:()=>ko,$vN:()=>hs,BFY:()=>CR,BK0:()=>ws,BYM:()=>WA,BlH:()=>Lo,C1y:()=>ll,CB9:()=>Oi,CTc:()=>os,D0K:()=>cs,DGR:()=>Go,DUd:()=>uR,Dk$:()=>ss,DtA:()=>ys,EGL:()=>Fd,EO4:()=>Hi,ESy:()=>Wo,EmB:()=>Sp,EsX:()=>$x,F7$:()=>yi,F7U:()=>Do,FRZ:()=>gR,FUY:()=>js,Fjq:()=>Vi,Fwq:()=>us,GQ2:()=>ro,Gg5:()=>Hs,HKb:()=>ho,Hbc:()=>jd,Hch:()=>fs,Hjg:()=>LR,IN:()=>wo,ITz:()=>fR,J2s:()=>Eo,J3j:()=>qd,JHI:()=>Gs,JMY:()=>rs,JMb:()=>Mo,JUN:()=>Ho,JrA:()=>Ws,K0:()=>Il,K8y:()=>ja,KKE:()=>jx,KLX:()=>$o,KPq:()=>ai,Kiw:()=>Oo,Kmb:()=>Ui,LPG:()=>dl,M3H:()=>oi,Mxu:()=>Zd,NBP:()=>$a,NTw:()=>jo,Nmx:()=>as,No_:()=>Po,ODz:()=>gs,OFF:()=>Ns,Owo:()=>Bo,P1T:()=>Fs,P3Z:()=>bs,PI5:()=>Ri,PPm:()=>rR,PcO:()=>iR,PoC:()=>fl,QpL:()=>Vs,QrX:()=>Ka,QvW:()=>mR,R$W:()=>Yi,REV:()=>li,RJ2:()=>Ii,ROG:()=>Bs,Rru:()=>pl,Sdx:()=>_o,SxS:()=>oC,Sxe:()=>$i,TFC:()=>xs,TdU:()=>Xo,Tir:()=>cl,TlP:()=>kR,Tp8:()=>Us,UaP:()=>ml,Ubg:()=>Wi,UfX:()=>oo,Uh:()=>Co,Uom:()=>sR,UtR:()=>Qo,VDx:()=>wi,VJE:()=>Xi,VSs:()=>ER,Vep:()=>Bx,Vey:()=>mp,VgG:()=>Mi,W1t:()=>Yp,W2Y:()=>Ji,WBh:()=>Qi,WC:()=>ei,WIv:()=>to,WJF:()=>ji,WN0:()=>Ko,WSU:()=>Gi,WXN:()=>so,Wei:()=>fC,Wh8:()=>Yo,XAi:()=>ds,XIK:()=>TR,XWb:()=>mo,XjC:()=>Vx,Xk0:()=>Hx,YGH:()=>Ys,YI8:()=>Gx,YJK:()=>dR,YMI:()=>Qx,YPx:()=>mi,YXz:()=>ki,YkU:()=>ts,Z3O:()=>Ts,Z4D:()=>zs,ZZX:()=>Ei,Zes:()=>ns,ZfC:()=>$s,Zui:()=>Yx,_0O:()=>Ls,_FR:()=>lo,_tF:()=>So,_xt:()=>Gd,aHM:()=>Oa,aJN:()=>Ai,aL$:()=>uo,aaC:()=>Va,azJ:()=>pd,b1c:()=>ol,bM2:()=>pR,bQt:()=>Pd,bWx:()=>Ms,b_$:()=>Zo,bdq:()=>Fx,bqg:()=>si,brV:()=>Ki,c2u:()=>vi,cGQ:()=>ks,cJw:()=>no,cl_:()=>Xd,cpY:()=>Zx,cyn:()=>Ao,d7y:()=>No,dLE:()=>Bi,dOG:()=>cp,dwU:()=>fo,eXQ:()=>Za,ehx:()=>go,evq:()=>vs,fAn:()=>Di,fJb:()=>ii,fNY:()=>qa,fRK:()=>Vo,fYD:()=>qs,flY:()=>To,fmr:()=>zi,g7G:()=>qo,gn6:()=>Es,gwF:()=>ci,hQD:()=>gi,hwo:()=>Jo,iv:()=>eo,j$V:()=>Zs,j1U:()=>ps,j6H:()=>_i,jCy:()=>_R,jG:()=>Uo,jJ3:()=>vo,j_m:()=>vR,jcB:()=>Io,jm5:()=>ui,kCK:()=>Jd,kH5:()=>dr,kQt:()=>yo,ke_:()=>Xx,kfP:()=>tR,l1Y:()=>Sl,l6P:()=>gp,l7M:()=>Jx,lD6:()=>ti,lVp:()=>zd,lcx:()=>tp,liv:()=>Qa,lwR:()=>Pi,mZW:()=>QA,m_M:()=>Ga,mo0:()=>Ds,mzI:()=>Ya,n$X:()=>bi,nA6:()=>NR,nDF:()=>Li,nLN:()=>lR,nTF:()=>Px,nag:()=>Xa,ndF:()=>xR,ndn:()=>va,ngX:()=>ap,nhF:()=>Kx,nhX:()=>Ss,nmC:()=>i,nwl:()=>es,o4l:()=>Zi,oPe:()=>eR,oVU:()=>ri,osr:()=>qi,pHQ:()=>po,pj3:()=>ms,qI7:()=>Cs,qM2:()=>aR,qUP:()=>Ja,qYV:()=>Os,qb_:()=>lC,r3Q:()=>Ps,rXL:()=>Rs,rgY:()=>As,rod:()=>ls,s3U:()=>Ni,s5I:()=>hi,sJx:()=>zx,sQ4:()=>pC,sjq:()=>Ks,t1M:()=>ao,t53:()=>KA,t6I:()=>pi,tUM:()=>em,tec:()=>is,uFi:()=>Ti,uMc:()=>ni,uYH:()=>io,ucK:()=>Ci,v5p:()=>Wx,vhL:()=>Wa,vmc:()=>ul,vwO:()=>qA,wD7:()=>Si,wKj:()=>xi,wNL:()=>xo,wPu:()=>cR,wWO:()=>tl,w_U:()=>Ux,wb9:()=>Ro,wm6:()=>Ge,wql:()=>nR,xA9:()=>Gr,xLb:()=>_s,xTG:()=>bo,xWY:()=>Fi,xhy:()=>Fo,xul:()=>Fr,y$O:()=>di,yEV:()=>hR,yTC:()=>oR,z21:()=>rC,z6M:()=>yp,z8D:()=>Is,z9t:()=>bR,zEc:()=>fi,zYs:()=>Ba});var r=n(5043),a=n(4574),o=n(7950),i={xs:0,sm:576,md:768,lg:992,xl:1200},s=function(e){if("auto"===e||"boolean"==typeof e&&e)return"100%";if(!1===e)return"initial";var t=Math.floor(e);return t>12?(t=12,console.warn("Grid fraction cannot be greater than 12")):t<1&&(t=1,console.warn("Grid fraction cannot be smaller than 1")),"".concat(100*t/12,"%")},l="#fff",c="#000",u="#2781B0",d="#E2E2E2",p="#FBFAFA",m="#5B5C5C",f="#E6EBEB",h="#E6EAEB",g="#D5D7D8",E="#E7EAEB",b="#07193E",v="#0D2453",y="#05132F",_="#C51B3F",S="#C83B51",T="#D5D7D7",A="#B4B4B4",C="#000110",w="#E5E5E5",N="#07193E",I="#4CCB92",x="#F8F8F8",R="#E6EBEB",k="#969FA8",O="#5E5E5E",L="#F1F4F4",D="#858585",M="#005C7E",P="#1B779A",B="#07506A",F="#FFBD62",U="linear-gradient(90deg, rgba(2,49,80,1) 0%, rgba(0,39,77,1) 50%, rgba(11,34,69,1) 100%)",z="#8399AB",H="#0A1C3C",G="linear-gradient(90deg, rgba(0,0,0,0) 0%, rgba(20,88,122,1) 100%)",j="#CADAE8",V="#0F446C",Z="#E8E8E8",W="#06274E",$="#052148",q="#EAEAEA",Y="#6e7781",K="#116329",X="#8250df",Q="#8c959f",J="#0550ae",ee="#0a3069",te="#cf222e",ne="#24292f",re="#ffaa00",ae="#2781B0",oe="#87888d",ie="#181F2A",se="#283140",le="#C4C9D0",ce="#4B586A",ue="#8E98A9",de="#283140",pe="#A2ADC0",me="#494A4D",fe="#4B586A",he="#707988",ge="#333D4B",Ee="#E6ECEC",be="#B5BCBD",ve="#EFEDED",ye="#C3CBCB",_e="#FF3958",Se="#616A7C",Te="#3A3F4A",Ae="#A3B7D9",Ce="#545D6A",we="#191E28",Ne="#E9F5F6",Ie="#58FAB1",xe="#A2ADC0",Re="#A2ADC0",ke="#494A4C",Oe="#1B637E",Le="#297E9D",De="#145B76",Me="#fCCE9D",Pe="#242D3E",Be="#8E98A9",Fe="#323C4E",Ue="#151E2E",ze={bgColor:l,fontColor:c,borderColor:d,bulletColor:u,logoColor:_,logoLabelColor:"#000000",logoLabelInverse:"#fff",loaderColor:"#113053",linkColor:ae,boxBackground:p,mutedText:oe,secondaryText:m,signalColors:{main:b,danger:_,good:I,info:u,warning:F,disabled:f,dark:c,clear:l},buttons:{regular:{enabled:{border:m,text:m,background:"transparent",iconColor:m},disabled:{border:A,text:A,background:T,iconColor:A},hover:{border:m,text:m,background:h,iconColor:m},pressed:{border:m,text:m,background:g,iconColor:m}},callAction:{enabled:{border:b,text:l,background:b,iconColor:l},disabled:{border:E,text:m,background:E,iconColor:m},hover:{border:v,text:l,background:v,iconColor:l},pressed:{border:y,text:l,background:y,iconColor:l}},secondary:{enabled:{border:_,text:_,background:"transparent",iconColor:_},disabled:{border:A,text:A,background:T,iconColor:A},hover:{border:S,text:_,background:"#FCF2F4",iconColor:_},pressed:{border:_,text:l,background:_,iconColor:l}},text:{enabled:{border:"transparent",text:m,background:"transparent",iconColor:m},disabled:{border:"transparent",text:A,background:"transparent",iconColor:A},hover:{border:h,text:m,background:h,iconColor:m},pressed:{border:g,text:m,background:g,iconColor:m}},subAction:{enabled:{border:M,text:l,background:M,iconColor:l},disabled:{border:E,text:m,background:E,iconColor:m},hover:{border:P,text:l,background:P,iconColor:l},pressed:{border:B,text:l,background:B,iconColor:l}}},login:{formBG:"#fff",bgFilter:"none",promoBG:C,promoHeader:l,promoText:"#A6DFEF",footerElements:u,footerDivider:"#F2F2F2"},pageHeader:{background:"#FFFFFF",border:w,color:"#000000"},tooltip:{background:"#737373",color:"#FFFFFF"},commonInput:{labelColor:N},checkbox:{checkBoxBorder:"#c3c3c3",checkBoxColor:I,disabledBorder:A,disabledColor:T},iconButton:{buttonBG:x,activeBG:"#5B5C5C80",hoverBG:"#EFEFEF",disabledBG:R,color:"#7C7C7C"},dataTable:{border:d,disabledBorder:f,disabledBG:T,selected:b,deletedDisabled:_,hoverColor:h},backLink:{color:"#073052",arrow:"#081C42",hover:"#eaedee"},inputBox:{border:d,hoverBorder:C,color:b,backgroundColor:l,error:_,placeholderColor:D,disabledBorder:A,disabledBackground:f,disabledPlaceholder:f,disabledText:A},breadcrumbs:{border:d,linksColor:k,textColor:"#969FA8",backgroundColor:"#FCFCFD",backButton:{border:"#EAEDEE",backgroundColor:l}},actionsList:{containerBorderColor:"#F1F1F1",backgroundColor:x,disabledOptionsTextColor:"#EBEBEB",optionsBorder:w,optionsHoverTextColor:c,optionsTextColor:O,titleColor:c},screenTitle:{border:d,subtitleColor:k,iconColor:b},modalBox:{closeColor:"#757575",closeHoverBG:"#EAEAEA",closeHoverColor:c,containerColor:l,overlayColor:"#00000050",titleColor:c,iconColor:{default:b,accept:I,delete:_}},switchButton:{bulletBGColor:L,bulletBorderColor:l,disabledBulletBGColor:h,disabledBulletBorderColor:L,offLabelColor:A,onLabelColor:b,onBackgroundColor:I,switchBackground:h,disabledBackground:h,disabledOnBackground:"#a9d3c5"},dropdownSelector:{hoverText:c,backgroundColor:l,hoverBG:h,selectedBGColor:g,selectedTextColor:c,optionTextColor:c,disabledText:f},readBox:{borderColor:w,backgroundColor:p,textColor:"#696969"},menu:{vertical:{background:U,textColor:j,hoverSelectedIconBorder:l,iconBorderColor:$,iconBGColor:W,dropArrowColor:z,dropArrowBackground:H,hoverSelectedBackground:G,hoverSelectedColor:l,notificationColor:_,sectionDividerColor:V,sectionLabelColor:l,menuCollapseColor:Z},horizontal:{menuHeaderBackground:U,textColor:O,hoverSelectedIconBorder:c,iconBorderColor:$,iconBGColor:p,dropArrowColor:z,dropArrowBackground:p,hoverSelectedBackground:b,hoverSelectedColor:c,notificationColor:S,sectionDividerColor:V,barBackground:p,dropBackground:p,dropHoverSelectedColor:l,noOptionsBar:u}},tabs:{vertical:{buttons:{hoverLabelColor:b,hoverBackground:"transparent",backgroundColor:x,labelColor:m,disabledBackgroundColor:T,disabledColor:A,selectedBackground:w,selectedLabelColor:b},backgroundColor:x,borders:q},horizontal:{buttons:{hoverLabelColor:b,hoverBackground:"transparent",backgroundColor:"transparent",labelColor:m,disabledBackgroundColor:"transparent",disabledColor:A,selectedBackground:"transparent",selectedLabelColor:b},backgroundColor:p,selectedIndicatorColor:b}},codeEditor:{backgroundColor:l,textColor:c,helpToolsBarBG:p,comment:Y,entityTag:K,entity:X,sublimelinterGutterMark:Q,constant:J,string:ee,keyword:te,markupBold:ne,codeEditorRegexp:re},tag:{alert:{background:_,label:l,deleteColor:l},default:{background:b,label:l,deleteColor:l},secondary:{background:M,label:l,deleteColor:l},warn:{background:F,label:c,deleteColor:c},ok:{background:I,label:c,deleteColor:c},grey:{background:E,label:c,deleteColor:c}},snackbar:{error:{backgroundColor:_,labelColor:l},default:{backgroundColor:b,labelColor:l},success:{backgroundColor:I,labelColor:l},warning:{backgroundColor:F,labelColor:c}},informativeMessage:{error:{backgroundColor:_,borderColor:_,textColor:l},default:{backgroundColor:b,borderColor:b,textColor:l},success:{backgroundColor:I,borderColor:I,textColor:l},warning:{backgroundColor:F,borderColor:F,textColor:c}},badge:{alert:{backgroundColor:_,textColor:l},default:{backgroundColor:b,textColor:l},secondary:{backgroundColor:M,textColor:l},warn:{backgroundColor:F,textColor:c},ok:{backgroundColor:I,textColor:c},grey:{backgroundColor:E,textColor:c}},wizard:{stepsBackground:p,vertical:{stepLabelColor:c,selectedStepBG:d,selectedStepLabelColor:c,disabledLabelColor:A},modal:{stepLabelColor:c,selectedStepBG:d,selectedStepLabelColor:c,disabledLabelColor:f}},slider:{bulletBG:u,railBG:d,disabledRail:"#dbdbdb",disabledBullet:A}},He={bgColor:ie,fontColor:le,borderColor:ue,bulletColor:ce,logoColor:_e,logoLabelColor:Ae,logoLabelInverse:"#fff",loaderColor:"#8E98A9",linkColor:"#85B3EE",boxBackground:de,mutedText:"#767a80",secondaryText:pe,signalColors:{main:pe,danger:_e,good:Ie,info:Le,warning:Me,disabled:me,dark:ie,clear:Ee},buttons:{regular:{enabled:{border:pe,text:pe,background:"transparent",iconColor:pe},disabled:{border:Te,text:Te,background:Se,iconColor:Te},hover:{border:pe,text:pe,background:fe,iconColor:pe},pressed:{border:he,text:he,background:ge,iconColor:he}},callAction:{enabled:{border:Ee,text:ie,background:Ee,iconColor:ie},disabled:{border:be,text:ie,background:be,iconColor:ie},hover:{border:ve,text:ie,background:ve,iconColor:ie},pressed:{border:ye,text:ie,background:ye,iconColor:ie}},secondary:{enabled:{border:_e,text:_e,background:"transparent",iconColor:_e},disabled:{border:Te,text:Te,background:Se,iconColor:Te},hover:{border:_e,text:_e,background:"#4B586A",iconColor:_e},pressed:{border:_e,text:ie,background:_e,iconColor:ie}},text:{enabled:{border:"transparent",text:pe,background:"transparent",iconColor:pe},disabled:{border:"transparent",text:Te,background:"transparent",iconColor:Te},hover:{border:fe,text:pe,background:fe,iconColor:pe},pressed:{border:ge,text:he,background:ge,iconColor:he}},subAction:{enabled:{border:Oe,text:Ee,background:Oe,iconColor:Ee},disabled:{border:be,text:ie,background:be,iconColor:ie},hover:{border:Le,text:Ee,background:Le,iconColor:Ee},pressed:{border:De,text:Ee,background:De,iconColor:Ee}}},login:{formBG:se,promoBG:"#000106",bgFilter:"grayscale(50%)",promoHeader:Ae,promoText:Ae,footerElements:"#85B3EE",footerDivider:Ce},pageHeader:{background:"#212936",border:we,color:Ne},tooltip:{background:"#8E98A9",color:"#161C24"},commonInput:{labelColor:"#A2ADC0"},checkbox:{checkBoxBorder:"#8E98A9",checkBoxColor:Ie,disabledBorder:Te,disabledColor:Se},iconButton:{buttonBG:xe,activeBG:"#707988",hoverBG:"#4B586A",disabledBG:"#494A4D",color:"#283140"},dataTable:{border:ue,disabledBorder:me,disabledBG:Se,selected:Ee,deletedDisabled:_e,hoverColor:fe},backLink:{color:"#8E98A9",arrow:Re,hover:"#3A3F4A"},inputBox:{border:ue,hoverBorder:Ee,color:pe,backgroundColor:ie,error:_e,placeholderColor:"#494A4D",disabledBorder:me,disabledBackground:Te,disabledPlaceholder:me,disabledText:Se},breadcrumbs:{border:ue,linksColor:pe,textColor:pe,backgroundColor:se,backButton:{border:ue,backgroundColor:se}},actionsList:{containerBorderColor:ce,backgroundColor:se,disabledOptionsTextColor:me,optionsBorder:ce,optionsHoverTextColor:ve,optionsTextColor:le,titleColor:le},screenTitle:{border:ue,subtitleColor:fe,iconColor:pe},modalBox:{closeColor:"#4B586A",closeHoverBG:"#4B586A",closeHoverColor:le,containerColor:de,overlayColor:"#00010650",titleColor:le,iconColor:{default:pe,accept:Ie,delete:_e}},switchButton:{bulletBGColor:"#D5DEEF",bulletBorderColor:Ee,disabledBulletBGColor:"#4B586B",disabledBulletBorderColor:Re,offLabelColor:fe,onLabelColor:ve,onBackgroundColor:Ie,switchBackground:Re,disabledBackground:ke,disabledOnBackground:"#a2d7c3"},dropdownSelector:{hoverText:ie,backgroundColor:se,hoverBG:pe,selectedBGColor:ce,selectedTextColor:Ee,optionTextColor:le,disabledText:me},readBox:{borderColor:we,backgroundColor:de,textColor:"#707988"},menu:{vertical:{background:Pe,textColor:"#8E98A9",hoverSelectedIconBorder:"#0E1119",iconBorderColor:Ue,iconBGColor:"#161F30",dropArrowColor:Be,dropArrowBackground:"#1C2436",hoverSelectedBackground:"linear-gradient(90deg, rgba(0,0,0,0) 0%, #1B212C 100%)",hoverSelectedColor:Ne,notificationColor:_e,sectionDividerColor:Fe,sectionLabelColor:Ne,menuCollapseColor:"#E8E8E8"},horizontal:{menuHeaderBackground:Pe,textColor:le,hoverSelectedIconBorder:le,iconBorderColor:Ue,iconBGColor:de,dropArrowColor:Be,dropArrowBackground:de,hoverSelectedBackground:pe,hoverSelectedColor:Ne,notificationColor:_e,sectionDividerColor:Fe,barBackground:de,dropBackground:de,dropHoverSelectedColor:ie,noOptionsBar:pe}},tabs:{vertical:{buttons:{hoverLabelColor:Ee,hoverBackground:"transparent",backgroundColor:de,labelColor:le,disabledBackgroundColor:Se,disabledColor:Te,selectedBackground:xe,selectedLabelColor:ie},backgroundColor:de,borders:ue},horizontal:{buttons:{hoverLabelColor:Ee,hoverBackground:"transparent",backgroundColor:"transparent",labelColor:le,disabledBackgroundColor:"transparent",disabledColor:Te,selectedBackground:"transparent",selectedLabelColor:Ee},backgroundColor:de,selectedIndicatorColor:Ee}},codeEditor:{backgroundColor:de,textColor:Ee,helpToolsBarBG:de,comment:"#8b949e",entityTag:"#7ee787",entity:"#d2a8ff",sublimelinterGutterMark:"#8E98A9",constant:"#79c0ff",string:"#a5d6ff",keyword:"#ff7b72",markupBold:"#c9d1d9",codeEditorRegexp:"#ffd582"},tag:{alert:{background:_e,label:Ee,deleteColor:Ee},default:{background:pe,label:ie,deleteColor:ie},secondary:{background:Oe,label:Ee,deleteColor:Ee},warn:{background:Me,label:ie,deleteColor:ie},ok:{background:Ie,label:ie,deleteColor:ie},grey:{background:Se,label:Ee,deleteColor:Ee}},snackbar:{error:{backgroundColor:_e,labelColor:Ee},default:{backgroundColor:pe,labelColor:ie},success:{backgroundColor:Ie,labelColor:ie},warning:{backgroundColor:Me,labelColor:ie}},informativeMessage:{error:{backgroundColor:_e,borderColor:_e,textColor:Ee},default:{backgroundColor:pe,borderColor:pe,textColor:ie},success:{backgroundColor:Ie,borderColor:Ie,textColor:ie},warning:{backgroundColor:Me,borderColor:Me,textColor:ie}},badge:{alert:{backgroundColor:_e,textColor:Ee},default:{backgroundColor:pe,textColor:ie},secondary:{backgroundColor:Oe,textColor:Ee},warn:{backgroundColor:Me,textColor:ie},ok:{backgroundColor:Ie,textColor:ie},grey:{backgroundColor:Se,textColor:Ee}},wizard:{stepsBackground:de,vertical:{stepLabelColor:le,selectedStepBG:ue,selectedStepLabelColor:ie,disabledLabelColor:me},modal:{stepLabelColor:le,selectedStepBG:ue,selectedStepLabelColor:Ee,disabledLabelColor:me}},slider:{bulletBG:le,railBG:Ce,disabledRail:ke,disabledBullet:"#939393"}},Ge=function(e){var t=e.darkMode,n=void 0!==t&&t,o=e.children,i=e.customTheme,s=n?He:ze;return i&&(s=i),r.createElement(a.NP,{theme:s},o)},je=function(){return je=Object.assign||function(e){for(var t,n=1,r=arguments.length;n-1},ln=function(e,t){var n=this.__data__,r=nn(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this};function cn(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t svg":{fill:Wn(n,"buttons.".concat(p,".enabled.text"),"#000"),color:Wn(n,"buttons.".concat(p,".enabled.text"),"#000"),width:14,height:14}},"&:disabled":{cursor:"not-allowed",backgroundColor:Wn(n,"buttons.".concat(p,".disabled.background"),"#fff"),borderColor:Wn(n,"buttons.".concat(p,".disabled.border"),"#000"),borderWeight:1,borderStyle:"solid",color:Wn(n,"buttons.".concat(p,".disabled.text"),"#000"),"& .buttonIcon > svg":{fill:Wn(n,"buttons.".concat(p,".disabled.text"),"#000"),color:Wn(n,"buttons.".concat(p,".disabled.text"),"#000")}},"&:hover:not(:disabled)":{backgroundColor:Wn(n,"buttons.".concat(p,".hover.background"),"#fff"),borderColor:Wn(n,"buttons.".concat(p,".hover.border"),"#000"),color:Wn(n,"buttons.".concat(p,".hover.text"),"#000"),"& .buttonIcon > svg":{fill:Wn(n,"buttons.".concat(p,".hover.text"),"#000"),color:Wn(n,"buttons.".concat(p,".hover.text"),"#000")}},"&:active:not(:disabled)":{backgroundColor:Wn(n,"buttons.".concat(p,".pressed.background"),"#fff"),borderColor:Wn(n,"buttons.".concat(p,".pressed.border"),"#000"),color:Wn(n,"buttons.".concat(p,".pressed.text"),"#000"),"& .buttonIcon > svg":{fill:Wn(n,"buttons.".concat(p,".pressed.text"),"#000"),color:Wn(n,"buttons.".concat(p,".pressed.text"),"#000")}}},f),d)})),mr=function(e){var t=e.label,n=e.variant,a=void 0===n?"regular":n,o=e.icon,i=e.iconLocation,s=void 0===i?"end":i,l=e.onClick,c=e.disabled,u=e.fullWidth,d=e.collapseOnSmall,p=void 0===d||d,m=e.children,f=e.className,h=Ve(e,["label","variant","icon","iconLocation","onClick","disabled","fullWidth","collapseOnSmall","children","className"]),g=null;return o&&(g=r.createElement("span",{className:"buttonIcon"},o)),r.createElement(pr,je({onClick:l,disabled:c||!1,variant:a||"regular",iconLocation:s||"end",label:t||"",fullWidth:u||!1,collapseOnSmall:!!p,icon:g,parentChildren:m||null,className:"".concat(f||""," button-").concat(a)},h),r.createElement(r.Fragment,null,o&&"start"===s&&g,r.createElement("span",{className:"button-label"},m,m&&t?" ":"",t),o&&"end"===s&&g))},fr=a.Ay.svg((function(e){var t=Wn(e,"theme.logoLabelColor","#000");return e.inverse&&(t=Wn(e,"theme.logoLabelInverse","#fff")),{"& .minioSection":{fill:Wn(e,"theme.logoColor","#C51C3F")},"& .minioApplicationName":{fill:t}}})),hr=function(e){var t=e.inverse,n=e.onClick;return r.createElement(fr,{viewBox:"0 0 184.538 51",inverse:t,onClick:n},r.createElement("g",{transform:"translate(-31.65 -18.133)"},r.createElement("g",{transform:"translate(-995 -63.754)"},r.createElement("g",{transform:"translate(1025.5 81.887)"},r.createElement("g",{transform:"translate(0 0)"},r.createElement("g",{transform:"translate(0 0)"},r.createElement("path",{d:"M10.338-17.825A8.815,8.815,0,0,0,1.15-8.75,8.815,8.815,0,0,0,10.338.325a8.825,8.825,0,0,0,9.2-9.075A8.825,8.825,0,0,0,10.338-17.825Zm0,3.35a5.4,5.4,0,0,1,5.55,5.725,5.4,5.4,0,0,1-5.55,5.725A5.41,5.41,0,0,1,4.788-8.75,5.41,5.41,0,0,1,10.338-14.475ZM22.05-17.5V0h7.575c4.2,0,6.588-1.65,6.588-5.013A4.2,4.2,0,0,0,33.3-8.938a3.9,3.9,0,0,0,2.537-3.713c0-3.337-2.562-4.85-6.638-4.85Zm7.4,10.225c1.925,0,3.138.45,3.138,2.088,0,1.675-1.212,2.125-3.138,2.125l-3.913-.013v-4.2Zm-.35-7.15c1.725,0,3.1.375,3.1,2.025,0,1.7-1.35,2.063-3.087,2.063H25.538v-4.088ZM48.788-17.5H45.3V-6.7c0,2.525-1.1,3.675-2.95,3.675a4.214,4.214,0,0,1-3.4-1.625L36.925-2.113A6.9,6.9,0,0,0,42.513.313c3.65,0,6.275-2.3,6.275-6.688ZM65.113-3.2H55.525V-7.225h9.05v-3.2h-9.05V-14.3h9.487v-3.2H52.037V0H65.113ZM76.3-17.825A8.794,8.794,0,0,0,67.113-8.75,8.794,8.794,0,0,0,76.3.325a8.713,8.713,0,0,0,7.387-3.7l-2.85-2.05a5.355,5.355,0,0,1-4.562,2.4A5.4,5.4,0,0,1,70.75-8.75a5.411,5.411,0,0,1,5.525-5.725A5.237,5.237,0,0,1,80.8-12.063l3-1.838A8.5,8.5,0,0,0,76.3-17.825Zm22.9.325H84.863v3.262h5.425V0h3.487V-14.238H99.2Zm19.787,1.738a10.5,10.5,0,0,0-6.25-1.925c-3.6,0-6.475,1.812-6.475,5.037,0,2.688,1.938,4.125,5.138,4.488l1.987.225c2.913.325,4.438,1.25,4.438,3.15,0,2.363-2.337,3.525-5.3,3.525a10.115,10.115,0,0,1-5.925-1.95L105.762-2A11.524,11.524,0,0,0,112.537.188c3.775,0,6.875-1.7,6.875-5.1,0-2.913-2.262-4.138-5.375-4.488l-1.912-.212c-2.988-.338-4.275-1.4-4.275-3.138,0-2.187,2.063-3.488,4.875-3.488a9.323,9.323,0,0,1,5.475,1.713ZM135.025-17.5H120.888v1.45h6.3V0h1.525V-16.05h6.313Zm9.875-.2a8.672,8.672,0,0,0-8.963,8.95A8.672,8.672,0,0,0,144.9.2a8.672,8.672,0,0,0,8.962-8.95A8.672,8.672,0,0,0,144.9-17.7Zm0,1.475a7.174,7.174,0,0,1,7.363,7.475A7.174,7.174,0,0,1,144.9-1.275a7.177,7.177,0,0,1-7.375-7.475A7.177,7.177,0,0,1,144.9-16.225ZM157.413-17.5V0h1.525V-7.763h2.675L168.138,0h1.9l-6.625-7.763h.688c3.725,0,6.025-1.862,6.025-4.875,0-3.1-2.175-4.863-6.037-4.863Zm6.663,1.438c2.875,0,4.475,1.188,4.475,3.425s-1.575,3.488-4.475,3.488h-5.138v-6.913ZM185.6-1.438H175.075V-8.1h10.138V-9.525H175.075v-6.538h10.438V-17.5H173.55V0H185.6Z",transform:"translate(0 32.612)",className:"minioApplicationName"}),r.createElement("g",{transform:"translate(2.003)"},r.createElement("g",{transform:"translate(0 0.129)"},r.createElement("rect",{width:"2.49",height:"7.352",transform:"translate(14.42)",className:"minioSection"}),r.createElement("path",{d:"M237.8,365.332l-5.053,3.086a.226.226,0,0,1-.235,0l-5.053-3.086a.694.694,0,0,0-.362-.1H227.1a.693.693,0,0,0-.693.693v6.65h2.489v-3.165a.249.249,0,0,1,.379-.212l2.832,1.733a.886.886,0,0,0,.912.009L236,369.184a.249.249,0,0,1,.374.215v3.174h2.488v-6.65a.693.693,0,0,0-.692-.693h-.006A.694.694,0,0,0,237.8,365.332Z",transform:"translate(-226.403 -365.23)",className:"minioSection"}),r.createElement("path",{d:"M257.822,365.23H255.3v3.346a.249.249,0,0,1-.366.22l-6.543-3.485a.7.7,0,0,0-.326-.081h0a.693.693,0,0,0-.693.693v6.651h2.5v-3.343a.249.249,0,0,1,.365-.22L256.8,372.5a.692.692,0,0,0,.325.081h0a.693.693,0,0,0,.693-.693Z",transform:"translate(-228.498 -365.23)",className:"minioSection"})),r.createElement("path",{d:"M261.159,372.582V365.23H262.3v7.352Z",transform:"translate(-229.877 -365.101)",className:"minioSection"}),r.createElement("path",{d:"M269.337,372.7c-3.082,0-5.268-1.462-5.268-3.805s2.2-3.806,5.268-3.806,5.281,1.462,5.281,3.806S272.458,372.7,269.337,372.7Zm0-6.637c-2.292,0-4.056,1-4.056,2.832s1.765,2.831,4.056,2.831,4.07-.988,4.07-2.831S271.628,366.062,269.337,366.062Z",transform:"translate(-230.168 -365.087)",className:"minioSection"})))))),r.createElement("path",{d:"M5.344-6a1.226,1.226,0,0,0-.57-.922A2.188,2.188,0,0,0,3.547-7.25a2.317,2.317,0,0,0-.928.172A1.468,1.468,0,0,0,2-6.605a1.126,1.126,0,0,0-.221.684.957.957,0,0,0,.154.549,1.3,1.3,0,0,0,.4.379,2.686,2.686,0,0,0,.508.246q.266.1.488.154l.813.219a7.221,7.221,0,0,1,.7.227,3.309,3.309,0,0,1,.738.393,2.04,2.04,0,0,1,.584.635,1.824,1.824,0,0,1,.23.949A2.115,2.115,0,0,1,6.053-1a2.329,2.329,0,0,1-.984.832A3.618,3.618,0,0,1,3.5.141,3.653,3.653,0,0,1,2.014-.137,2.355,2.355,0,0,1,1.029-.91a2.2,2.2,0,0,1-.4-1.152h1a1.236,1.236,0,0,0,.307.748,1.608,1.608,0,0,0,.68.438A2.7,2.7,0,0,0,3.5-.734a2.6,2.6,0,0,0,1-.182,1.687,1.687,0,0,0,.7-.508,1.2,1.2,0,0,0,.258-.764.938.938,0,0,0-.223-.648,1.634,1.634,0,0,0-.586-.406,6.157,6.157,0,0,0-.785-.273L2.875-3.8a3.666,3.666,0,0,1-1.484-.77A1.69,1.69,0,0,1,.844-5.875a1.942,1.942,0,0,1,.365-1.174,2.417,2.417,0,0,1,.984-.781,3.331,3.331,0,0,1,1.385-.279,3.269,3.269,0,0,1,1.375.275,2.409,2.409,0,0,1,.955.752A1.875,1.875,0,0,1,6.281-6Zm3.3-1.141V-8h6v.859H12.131V0h-.969V-7.141ZM16.638,0H15.622l2.938-8h1L22.5,0H21.481L19.091-6.734h-.062Zm.375-3.125h4.094v.859H17.013ZM31.191-8V0h-.937L25.894-6.281h-.078V0h-.969V-8h.938l4.375,6.3h.078V-8ZM36.7,0H34.228V-8h2.578a3.918,3.918,0,0,1,1.992.479,3.16,3.16,0,0,1,1.27,1.371,4.771,4.771,0,0,1,.441,2.135,4.8,4.8,0,0,1-.445,2.15,3.159,3.159,0,0,1-1.3,1.383A4.14,4.14,0,0,1,36.7,0ZM35.2-.859h1.438a3.209,3.209,0,0,0,1.645-.383,2.359,2.359,0,0,0,.973-1.09,4.054,4.054,0,0,0,.32-1.684,4.035,4.035,0,0,0-.316-1.67,2.347,2.347,0,0,0-.945-1.078,3,3,0,0,0-1.566-.377H35.2ZM43.188,0H42.172l2.938-8h1l2.938,8H48.031L45.641-6.734h-.062Zm.375-3.125h4.094v.859H43.563ZM51.4,0V-8h2.7a3.277,3.277,0,0,1,1.539.318,2.054,2.054,0,0,1,.891.873,2.69,2.69,0,0,1,.289,1.262,2.643,2.643,0,0,1-.289,1.254,2.026,2.026,0,0,1-.887.857,3.3,3.3,0,0,1-1.527.311H51.928V-4h2.156a2.415,2.415,0,0,0,1.033-.187,1.194,1.194,0,0,0,.57-.533,1.787,1.787,0,0,0,.178-.826,1.856,1.856,0,0,0-.18-.84,1.235,1.235,0,0,0-.574-.557,2.345,2.345,0,0,0-1.043-.2h-1.7V0Zm3.766-3.594L57.131,0H56.006L54.069-3.594ZM62,0H59.528V-8h2.578a3.918,3.918,0,0,1,1.992.479,3.16,3.16,0,0,1,1.27,1.371,4.771,4.771,0,0,1,.441,2.135,4.8,4.8,0,0,1-.445,2.15,3.159,3.159,0,0,1-1.3,1.383A4.14,4.14,0,0,1,62,0ZM60.5-.859h1.438a3.209,3.209,0,0,0,1.645-.383,2.359,2.359,0,0,0,.973-1.09,4.055,4.055,0,0,0,.32-1.684,4.035,4.035,0,0,0-.316-1.67,2.347,2.347,0,0,0-.945-1.078,3,3,0,0,0-1.566-.377H60.5ZM72.728,0V-8H73.7V-.859h3.719V0Zm8.256-8V0h-.969V-8Zm9.475,2.5h-.969a2.034,2.034,0,0,0-.3-.734,2.072,2.072,0,0,0-.516-.533,2.24,2.24,0,0,0-.67-.326,2.668,2.668,0,0,0-.766-.109,2.431,2.431,0,0,0-1.314.367,2.536,2.536,0,0,0-.934,1.082A4.007,4.007,0,0,0,84.647-4a4.007,4.007,0,0,0,.346,1.754,2.536,2.536,0,0,0,.934,1.082A2.431,2.431,0,0,0,87.241-.8a2.668,2.668,0,0,0,.766-.109,2.24,2.24,0,0,0,.67-.326,2.06,2.06,0,0,0,.516-.535,2.053,2.053,0,0,0,.3-.732h.969a3.227,3.227,0,0,1-.4,1.1,2.973,2.973,0,0,1-.719.822,3.129,3.129,0,0,1-.963.514,3.614,3.614,0,0,1-1.139.176,3.353,3.353,0,0,1-1.82-.5,3.431,3.431,0,0,1-1.254-1.422A4.874,4.874,0,0,1,83.709-4a4.874,4.874,0,0,1,.457-2.187A3.431,3.431,0,0,1,85.42-7.609a3.353,3.353,0,0,1,1.82-.5,3.614,3.614,0,0,1,1.139.176,3.129,3.129,0,0,1,.963.514,2.984,2.984,0,0,1,.719.82A3.208,3.208,0,0,1,90.459-5.5ZM93.122,0V-8H97.95v.859H94.091v2.7H97.7v.859H94.091V-.859h3.922V0Zm14.022-8V0h-.937l-4.359-6.281h-.078V0H100.8V-8h.938l4.375,6.3h.078V-8Zm7.412,2a1.226,1.226,0,0,0-.57-.922,2.188,2.188,0,0,0-1.227-.328,2.317,2.317,0,0,0-.928.172,1.468,1.468,0,0,0-.617.473,1.126,1.126,0,0,0-.221.684.957.957,0,0,0,.154.549,1.3,1.3,0,0,0,.4.379,2.686,2.686,0,0,0,.508.246q.266.1.488.154l.813.219a7.22,7.22,0,0,1,.7.227,3.309,3.309,0,0,1,.738.393,2.04,2.04,0,0,1,.584.635,1.824,1.824,0,0,1,.23.949A2.115,2.115,0,0,1,115.265-1a2.329,2.329,0,0,1-.984.832,3.618,3.618,0,0,1-1.568.309,3.653,3.653,0,0,1-1.486-.277,2.355,2.355,0,0,1-.984-.773,2.2,2.2,0,0,1-.4-1.152h1a1.236,1.236,0,0,0,.307.748,1.608,1.608,0,0,0,.68.438,2.7,2.7,0,0,0,.889.143,2.6,2.6,0,0,0,1-.182,1.687,1.687,0,0,0,.7-.508,1.2,1.2,0,0,0,.258-.764.938.938,0,0,0-.223-.648,1.634,1.634,0,0,0-.586-.406,6.157,6.157,0,0,0-.785-.273l-.984-.281a3.666,3.666,0,0,1-1.484-.77,1.69,1.69,0,0,1-.547-1.309,1.942,1.942,0,0,1,.365-1.174,2.417,2.417,0,0,1,.984-.781,3.331,3.331,0,0,1,1.385-.279,3.269,3.269,0,0,1,1.375.275,2.409,2.409,0,0,1,.955.752A1.875,1.875,0,0,1,115.494-6ZM118.3,0V-8h4.828v.859h-3.859v2.7h3.609v.859h-3.609V-.859h3.922V0Z",transform:"translate(93 68)",className:"minioApplicationName"})))},gr=function(e){var t=e.inverse,n=e.onClick;return r.createElement(fr,{viewBox:"0 0 184.45 55",inverse:t,onClick:n},r.createElement("g",{transform:"translate(-31.65 -18.133)"},r.createElement("g",{transform:"translate(-995 -63.754)"},r.createElement("g",{transform:"translate(1025.5 81.887)"},r.createElement("g",{transform:"translate(0 0)"},r.createElement("g",{transform:"translate(0 0)"},r.createElement("path",{d:"M10.338-17.825A8.815,8.815,0,0,0,1.15-8.75,8.815,8.815,0,0,0,10.338.325a8.825,8.825,0,0,0,9.2-9.075A8.825,8.825,0,0,0,10.338-17.825Zm0,3.35a5.4,5.4,0,0,1,5.55,5.725,5.4,5.4,0,0,1-5.55,5.725A5.41,5.41,0,0,1,4.788-8.75,5.41,5.41,0,0,1,10.338-14.475ZM22.05-17.5V0h7.575c4.2,0,6.588-1.65,6.588-5.013A4.2,4.2,0,0,0,33.3-8.938a3.9,3.9,0,0,0,2.537-3.713c0-3.337-2.562-4.85-6.638-4.85Zm7.4,10.225c1.925,0,3.138.45,3.138,2.088,0,1.675-1.212,2.125-3.138,2.125l-3.913-.013v-4.2Zm-.35-7.15c1.725,0,3.1.375,3.1,2.025,0,1.7-1.35,2.063-3.087,2.063H25.538v-4.088ZM48.788-17.5H45.3V-6.7c0,2.525-1.1,3.675-2.95,3.675a4.214,4.214,0,0,1-3.4-1.625L36.925-2.113A6.9,6.9,0,0,0,42.513.313c3.65,0,6.275-2.3,6.275-6.688ZM65.113-3.2H55.525V-7.225h9.05v-3.2h-9.05V-14.3h9.487v-3.2H52.037V0H65.113ZM76.3-17.825A8.794,8.794,0,0,0,67.113-8.75,8.794,8.794,0,0,0,76.3.325a8.713,8.713,0,0,0,7.387-3.7l-2.85-2.05a5.355,5.355,0,0,1-4.562,2.4A5.4,5.4,0,0,1,70.75-8.75a5.411,5.411,0,0,1,5.525-5.725A5.237,5.237,0,0,1,80.8-12.063l3-1.838A8.5,8.5,0,0,0,76.3-17.825Zm22.9.325H84.863v3.262h5.425V0h3.487V-14.238H99.2Zm19.787,1.738a10.5,10.5,0,0,0-6.25-1.925c-3.6,0-6.475,1.812-6.475,5.037,0,2.688,1.938,4.125,5.138,4.488l1.987.225c2.913.325,4.438,1.25,4.438,3.15,0,2.363-2.337,3.525-5.3,3.525a10.115,10.115,0,0,1-5.925-1.95L105.762-2A11.524,11.524,0,0,0,112.537.188c3.775,0,6.875-1.7,6.875-5.1,0-2.913-2.262-4.138-5.375-4.488l-1.912-.212c-2.988-.338-4.275-1.4-4.275-3.138,0-2.187,2.063-3.488,4.875-3.488a9.323,9.323,0,0,1,5.475,1.713ZM135.025-17.5H120.888v1.45h6.3V0h1.525V-16.05h6.313Zm9.875-.2a8.672,8.672,0,0,0-8.963,8.95A8.672,8.672,0,0,0,144.9.2a8.672,8.672,0,0,0,8.962-8.95A8.672,8.672,0,0,0,144.9-17.7Zm0,1.475a7.174,7.174,0,0,1,7.363,7.475A7.174,7.174,0,0,1,144.9-1.275a7.177,7.177,0,0,1-7.375-7.475A7.177,7.177,0,0,1,144.9-16.225ZM157.413-17.5V0h1.525V-7.763h2.675L168.138,0h1.9l-6.625-7.763h.688c3.725,0,6.025-1.862,6.025-4.875,0-3.1-2.175-4.863-6.037-4.863Zm6.663,1.438c2.875,0,4.475,1.188,4.475,3.425s-1.575,3.488-4.475,3.488h-5.138v-6.913ZM185.6-1.438H175.075V-8.1h10.138V-9.525H175.075v-6.538h10.438V-17.5H173.55V0H185.6Z",transform:"translate(0 32.612)",className:"minioApplicationName"}),r.createElement("g",{transform:"translate(2.003)"},r.createElement("g",{transform:"translate(0 0.129)"},r.createElement("rect",{width:"2.49",height:"7.352",transform:"translate(14.42)",className:"minioSection"}),r.createElement("path",{d:"M237.8,365.332l-5.053,3.086a.226.226,0,0,1-.235,0l-5.053-3.086a.694.694,0,0,0-.362-.1H227.1a.693.693,0,0,0-.693.693v6.65h2.489v-3.165a.249.249,0,0,1,.379-.212l2.832,1.733a.886.886,0,0,0,.912.009L236,369.184a.249.249,0,0,1,.374.215v3.174h2.488v-6.65a.693.693,0,0,0-.692-.693h-.006A.694.694,0,0,0,237.8,365.332Z",transform:"translate(-226.403 -365.23)",className:"minioSection"}),r.createElement("path",{d:"M257.822,365.23H255.3v3.346a.249.249,0,0,1-.366.22l-6.543-3.485a.7.7,0,0,0-.326-.081h0a.693.693,0,0,0-.693.693v6.651h2.5v-3.343a.249.249,0,0,1,.365-.22L256.8,372.5a.692.692,0,0,0,.325.081h0a.693.693,0,0,0,.693-.693Z",transform:"translate(-228.498 -365.23)",className:"minioSection"})),r.createElement("path",{d:"M261.159,372.582V365.23H262.3v7.352Z",transform:"translate(-229.877 -365.101)",className:"minioSection"}),r.createElement("path",{d:"M269.337,372.7c-3.082,0-5.268-1.462-5.268-3.805s2.2-3.806,5.268-3.806,5.281,1.462,5.281,3.806S272.458,372.7,269.337,372.7Zm0-6.637c-2.292,0-4.056,1-4.056,2.832s1.765,2.831,4.056,2.831,4.07-.988,4.07-2.831S271.628,366.062,269.337,366.062Z",transform:"translate(-230.168 -365.087)",className:"minioSection"}))))),r.createElement("g",{transform:"translate(1168.671 120.754)"},r.createElement("g",{transform:"translate(-65 0)"},r.createElement("path",{d:"M106.959,1769.479l-3.274,14.286h31.641a2.814,2.814,0,0,1-2.121-1.012,2.15,2.15,0,0,1-.209-.356c-.038-.092-.073-.185-.109-.28a2.832,2.832,0,0,1-.115-.985,7.182,7.182,0,0,1,1.312-3.389,18.271,18.271,0,0,1,3.616-3.945c.343-.284.7-.566,1.068-.839.458-.337.92-.648,1.383-.938a17.592,17.592,0,0,1,4.907-2.2,18.957,18.957,0,0,0-4.651,2.351l-.171.118a20.8,20.8,0,0,0-2.389,1.924c-2.254,2.119-3.445,4.315-2.9,5.6a1.6,1.6,0,0,0,.138.253c.582.856,2.024,1,3.851.544.124-.031.249-.067.377-.1a14.878,14.878,0,0,0,1.842-.677c.153-.068.309-.137.465-.212l.047-.023c2.015-1,3.563-2.153,3.9-2.845a.43.43,0,0,0,.041-.379c-.239-.485-1.912-.157-3.939.72-.163.07-.328.143-.494.221.136-.125.277-.252.421-.377.23-.2.468-.391.721-.582a14.277,14.277,0,0,1,1.191-.812c1.847-1.394,2.781-2.712,2.586-3.2a.343.343,0,0,0-.235-.194,3.4,3.4,0,0,0-1.942.374,14.514,14.514,0,0,0-2.333,1.25l-.112.073-.021.012-.394.262.226-.415a7.126,7.126,0,0,1,1.565-1.853,11.116,11.116,0,0,1,1.686-1.206c.233-.136.465-.262.7-.376s.476-.22.709-.312a8.2,8.2,0,0,1,1.98-.649c-.051,0-1.677.175-1.677.175H106.959Zm25.5.021a19.123,19.123,0,0,0,.8,5.76q.165.612.362,1.242.123.388.253.765c-.051.075-.1.149-.15.224a7.909,7.909,0,0,0-1.339,3.277,20.169,20.169,0,0,1-.712-3.562q-.059-.546-.091-1.08a15.688,15.688,0,0,1,.877-6.625Zm-15.424,1.833h3.533a1.217,1.217,0,0,1,.691.168.394.394,0,0,1,.185.435l-.415,1.874h-1.227l.4-1.824h-3.071L116.03,1777l-.4,1.815H118.7l0-.011.615-2.778h-1.442l.138-.626h2.668l-.765,3.466a.488.488,0,0,1-.053.138.765.765,0,0,1-.327.294,1.621,1.621,0,0,1-.765.168h-3.477a1.214,1.214,0,0,1-.691-.168.388.388,0,0,1-.185-.432l1.533-6.928a.664.664,0,0,1,.377-.435c.008,0,.016,0,.024-.009a1.6,1.6,0,0,1,.688-.159Zm5.454,0h4.38a1.215,1.215,0,0,1,.688.168.392.392,0,0,1,.188.435l-.818,3.695a.663.663,0,0,1-.38.433,1.612,1.612,0,0,1-.762.171h-3.183l-.615,2.774-.1.456h-1.2l.091-.412Zm6.051,0h1.2l-1.359,6.14-.3,1.341h2.871c.03.22.065.437.1.65h-4.319l.341-1.542Zm-5,.653-.8,3.6h2.992l.794-3.6Zm-6.38,8.485h.035a.85.85,0,0,1,.359.07.428.428,0,0,1,.221.218.532.532,0,0,1,.029.315l-.009.044h-.344l0-.041a.271.271,0,0,0-.032-.188l-.015-.018a.2.2,0,0,0-.029-.024.426.426,0,0,0-.221-.047.511.511,0,0,0-.291.068.258.258,0,0,0-.118.153.113.113,0,0,0,.024.109l0,0a.81.81,0,0,0,.291.1,2,2,0,0,1,.38.12.448.448,0,0,1,.218.209.458.458,0,0,1,.024.291.665.665,0,0,1-.156.291.789.789,0,0,1-.3.212,1,1,0,0,1-.382.076.955.955,0,0,1-.412-.076.473.473,0,0,1-.238-.244.6.6,0,0,1-.029-.356l.009-.041h.338l0,.041a.373.373,0,0,0,.021.189.23.23,0,0,0,.118.112.543.543,0,0,0,.235.047.649.649,0,0,0,.224-.038.4.4,0,0,0,.156-.094.261.261,0,0,0,.068-.126.138.138,0,0,0-.009-.1.214.214,0,0,0-.109-.08l-.288-.085a1.274,1.274,0,0,1-.332-.118.411.411,0,0,1-.18-.194.418.418,0,0,1-.015-.256.622.622,0,0,1,.144-.28.72.72,0,0,1,.288-.2A1.01,1.01,0,0,1,117.169,1780.47Zm3.089.006c.019,0,.036,0,.056,0l.212.023.071.006-.1.262-.021.041-.162-.015a.186.186,0,0,0-.106.023l-.006.006-.012.012a.279.279,0,0,0-.044.112l-.012.047h.253l-.065.292h-.247l-.25,1.121h-.341s.222-1,.25-1.121h-.2l.065-.292h.194c.009-.04.024-.091.024-.091a.717.717,0,0,1,.071-.209.441.441,0,0,1,.162-.159.491.491,0,0,1,.209-.059Zm.815.015-.112.5h.221l-.065.292H120.9c-.018.081-.159.709-.159.709s-.012.076-.012.1c0,0,0,0,0,0s0,0,0,0h0l.035,0,.162-.012-.018.262,0,.047-.232.026a.375.375,0,0,1-.209-.047.209.209,0,0,1-.094-.135.221.221,0,0,1-.006-.047,1.206,1.206,0,0,1,.035-.239s.124-.554.15-.671h-.162l.065-.292h.162c.015-.068.068-.3.068-.3l.274-.144.112-.059Zm-10.841.011h1.324l-.074.329h-.968l-.1.436h.838l-.074.329h-.838c-.018.082-.179.809-.179.809h-.356Zm1.774.465a.331.331,0,0,1,.041,0,.4.4,0,0,1,.238.079l.047.032-.182.3-.05-.035a.214.214,0,0,0-.118-.036.185.185,0,0,0-.1.036.258.258,0,0,0-.088.1.93.93,0,0,0-.088.241l-.159.724H111.2l.315-1.413h.318s-.011.043-.015.059c.015-.012.031-.027.044-.035A.358.358,0,0,1,112.006,1780.968Zm1.012,0c.021,0,.041,0,.062,0a.5.5,0,0,1,.432.2.545.545,0,0,1,.091.317,1.064,1.064,0,0,1-.026.227l-.026.1h-.959c0,.02,0,.041,0,.059a.28.28,0,0,0,.047.173.216.216,0,0,0,.053.053.261.261,0,0,0,.144.038.339.339,0,0,0,.188-.056.5.5,0,0,0,.153-.167h.365l-.032.07a.806.806,0,0,1-.288.329.779.779,0,0,1-.427.121.531.531,0,0,1-.459-.2.644.644,0,0,1-.065-.536.975.975,0,0,1,.3-.541.76.76,0,0,1,.45-.191Zm1.533,0c.021,0,.041,0,.062,0a.5.5,0,0,1,.432.2.545.545,0,0,1,.091.317,1.04,1.04,0,0,1-.026.224l-.026.106h-.959l0,.038s0,.012,0,.018v0c0,.013,0,.028,0,.041a.254.254,0,0,0,.044.132.227.227,0,0,0,.015.021.239.239,0,0,0,.182.071.336.336,0,0,0,.188-.056.5.5,0,0,0,.153-.167h.368l-.035.07a.806.806,0,0,1-.288.329.779.779,0,0,1-.427.121.49.49,0,0,1-.55-.52c0-.02,0-.041,0-.062a1.067,1.067,0,0,1,.024-.153.975.975,0,0,1,.3-.541A.768.768,0,0,1,114.551,1780.968Zm4.175,0c.021,0,.04,0,.062,0a.523.523,0,0,1,.444.2.627.627,0,0,1,.071.529,1.086,1.086,0,0,1-.171.415.811.811,0,0,1-.644.326.516.516,0,0,1-.444-.2.528.528,0,0,1-.094-.321,1.011,1.011,0,0,1,.026-.227.925.925,0,0,1,.341-.568.794.794,0,0,1,.409-.153Zm5.169,0c.025,0,.048,0,.074,0a.748.748,0,0,1,.282.041.31.31,0,0,1,.159.124.337.337,0,0,1,.044.179l-.035.215-.065.291a3.187,3.187,0,0,0-.071.377.377.377,0,0,0,.015.135l.024.077h-.347l-.015-.045a.417.417,0,0,1-.006-.07,1.03,1.03,0,0,1-.191.1.83.83,0,0,1-.271.047.446.446,0,0,1-.35-.123.313.313,0,0,1-.079-.218.474.474,0,0,1,.012-.1.492.492,0,0,1,.091-.2.55.55,0,0,1,.159-.141.71.71,0,0,1,.191-.077l.209-.035a2.331,2.331,0,0,0,.368-.068.185.185,0,0,1,.006-.021.188.188,0,0,0,0-.129l-.006-.006-.012-.012a.29.29,0,0,0-.177-.041.391.391,0,0,0-.206.044.382.382,0,0,0-.127.159h-.356l.032-.071a.75.75,0,0,1,.156-.241.648.648,0,0,1,.247-.144A.974.974,0,0,1,123.895,1780.968Zm1.492,0a.331.331,0,0,1,.041,0,.4.4,0,0,1,.241.079l.044.032-.182.3-.05-.035a.207.207,0,0,0-.115-.036.2.2,0,0,0-.106.036.259.259,0,0,0-.085.1.965.965,0,0,0-.088.241l-.162.724h-.341l.315-1.413h.318s-.008.043-.012.059a.536.536,0,0,1,.044-.035A.342.342,0,0,1,125.386,1780.968Zm1.009,0c.02,0,.041,0,.062,0a.5.5,0,0,1,.432.2.538.538,0,0,1,.091.317,1.077,1.077,0,0,1-.029.227l-.024.1h-.959c0,.02-.006.041-.006.059a.286.286,0,0,0,.047.173.251.251,0,0,0,.018.021l.012.012a.246.246,0,0,0,.171.059.339.339,0,0,0,.188-.056.508.508,0,0,0,.153-.167h.368l-.035.07a.813.813,0,0,1-.288.329.779.779,0,0,1-.427.121.525.525,0,0,1-.456-.2.647.647,0,0,1-.068-.536.972.972,0,0,1,.3-.541A.77.77,0,0,1,126.4,1780.968Zm-5.151.026h.35s.043.838.044.85c.014-.03.025-.055.026-.059l.385-.792h.321s.029.828.029.833l.438-.833h.347l-.765,1.413h-.315s-.03-.766-.032-.809l-.394.809h-.324Zm-8.22.268a.374.374,0,0,0-.224.088.433.433,0,0,0-.121.167h.58c0-.01,0-.023,0-.032a.244.244,0,0,0-.026-.123.207.207,0,0,0-.194-.1Zm1.533,0a.374.374,0,0,0-.224.088.443.443,0,0,0-.121.167h.58c0-.01,0-.023,0-.032a.234.234,0,0,0-.026-.123.244.244,0,0,0-.029-.038.219.219,0,0,0-.165-.062Zm11.856,0a.381.381,0,0,0-.232.088.454.454,0,0,0-.121.167h.577c0-.01,0-.023,0-.032a.234.234,0,0,0-.027-.123.21.21,0,0,0-.194-.1Zm-7.708.006a.39.39,0,0,0-.218.106.637.637,0,0,0-.174.341.779.779,0,0,0-.021.168.289.289,0,0,0,.038.159.316.316,0,0,0,.024.03.229.229,0,0,0,.174.068.372.372,0,0,0,.259-.109.654.654,0,0,0,.174-.347.419.419,0,0,0-.018-.317.213.213,0,0,0-.194-.1C118.734,1781.267,118.72,1781.266,118.705,1781.267Zm5.316.515a2.16,2.16,0,0,1-.288.056.968.968,0,0,0-.188.042.208.208,0,0,0-.079.056.173.173,0,0,0-.041.077.2.2,0,0,0,0,.032s0,0,0,0,0,.007,0,.009a.113.113,0,0,0,0,.015l0,.006a.087.087,0,0,0,0,.009l.006.009.009.012a.185.185,0,0,0,.138.038.465.465,0,0,0,.212-.047.409.409,0,0,0,.156-.135A.545.545,0,0,0,124.021,1781.782Zm-17.969-2.359,7.9-8.152h1.289l-1.906,8.152H112.27l.541-2.347H109.5l-2.249,2.347h-1.2m4.254-3.186h2.707l.5-2.047q.3-1.217.582-2.029-.559.7-1.479,1.662l-2.309,2.413",transform:"translate(-103.684 -1768.875)",className:"minioApplicationName"}),r.createElement("path",{d:"M627.829,1776.9a3.183,3.183,0,0,1-2.4-1.149,2.464,2.464,0,0,1-.241-.411c-.045-.107-.084-.207-.123-.307l.439-.17c.038.1.075.193.114.287a2,2,0,0,0,.19.323,2.685,2.685,0,0,0,2.04.958h1.032a9.027,9.027,0,0,0,1-.141,12.945,12.945,0,0,0,1.935-.55c.524-.191,1.054-.415,1.575-.666a22.265,22.265,0,0,0,3.559-2.154c.377-.278.756-.574,1.124-.881q.494-.411.947-.834a9.057,9.057,0,0,0,1.807-2.317c.348-.7.407-1.259.167-1.576a.989.989,0,0,0-.749-.326l-.622-.048.5-.375c1.786-1.34,2.8-2.927,2.457-3.858a1,1,0,0,0-.638-.59,2.032,2.032,0,0,0-.516-.106h-.549a8.415,8.415,0,0,0-2.824.8l-.207-.423a8.932,8.932,0,0,1,3.014-.845h.585a2.509,2.509,0,0,1,.656.133,1.455,1.455,0,0,1,.921.871c.387,1.063-.5,2.665-2.216,4.081a1.2,1.2,0,0,1,.564.4,1.959,1.959,0,0,1-.121,2.07,9.408,9.408,0,0,1-1.9,2.449q-.466.435-.97.854c-.376.313-.761.615-1.146.9a22.77,22.77,0,0,1-3.635,2.2c-.535.257-1.079.487-1.617.683a13.4,13.4,0,0,1-2.006.569,9.406,9.406,0,0,1-1.07.148Z",transform:"translate(-596.283 -1761.542)",className:"minioApplicationName"})))),r.createElement("path",{d:"M.969,0V-8h.969V-.859H5.656V0ZM9.225-8V0H8.256V-8ZM18.7-5.5h-.969a2.034,2.034,0,0,0-.3-.734,2.072,2.072,0,0,0-.516-.533,2.24,2.24,0,0,0-.67-.326,2.668,2.668,0,0,0-.766-.109,2.431,2.431,0,0,0-1.314.367,2.536,2.536,0,0,0-.934,1.082A4.007,4.007,0,0,0,12.887-4a4.007,4.007,0,0,0,.346,1.754,2.536,2.536,0,0,0,.934,1.082A2.431,2.431,0,0,0,15.481-.8a2.668,2.668,0,0,0,.766-.109,2.24,2.24,0,0,0,.67-.326,2.06,2.06,0,0,0,.516-.535,2.053,2.053,0,0,0,.3-.732H18.7a3.227,3.227,0,0,1-.4,1.1,2.973,2.973,0,0,1-.719.822,3.129,3.129,0,0,1-.963.514,3.614,3.614,0,0,1-1.139.176,3.353,3.353,0,0,1-1.82-.5,3.431,3.431,0,0,1-1.254-1.422A4.874,4.874,0,0,1,11.95-4a4.874,4.874,0,0,1,.457-2.187,3.431,3.431,0,0,1,1.254-1.422,3.353,3.353,0,0,1,1.82-.5,3.614,3.614,0,0,1,1.139.176,3.129,3.129,0,0,1,.963.514,2.984,2.984,0,0,1,.719.82A3.208,3.208,0,0,1,18.7-5.5ZM21.362,0V-8h4.828v.859H22.331v2.7h3.609v.859H22.331V-.859h3.922V0ZM35.384-8V0h-.937L30.087-6.281h-.078V0h-.969V-8h.938l4.375,6.3h.078V-8ZM42.8-6a1.226,1.226,0,0,0-.57-.922A2.188,2.188,0,0,0,41-7.25a2.317,2.317,0,0,0-.928.172,1.468,1.468,0,0,0-.617.473,1.126,1.126,0,0,0-.221.684.957.957,0,0,0,.154.549,1.3,1.3,0,0,0,.4.379,2.686,2.686,0,0,0,.508.246q.266.1.488.154l.813.219a7.221,7.221,0,0,1,.7.227,3.309,3.309,0,0,1,.738.393,2.04,2.04,0,0,1,.584.635,1.824,1.824,0,0,1,.23.949A2.115,2.115,0,0,1,43.506-1a2.329,2.329,0,0,1-.984.832,3.618,3.618,0,0,1-1.568.309,3.653,3.653,0,0,1-1.486-.277,2.355,2.355,0,0,1-.984-.773,2.2,2.2,0,0,1-.4-1.152h1a1.236,1.236,0,0,0,.307.748,1.608,1.608,0,0,0,.68.438,2.7,2.7,0,0,0,.889.143,2.6,2.6,0,0,0,1-.182,1.687,1.687,0,0,0,.7-.508,1.2,1.2,0,0,0,.258-.764.938.938,0,0,0-.223-.648,1.634,1.634,0,0,0-.586-.406,6.157,6.157,0,0,0-.785-.273L40.328-3.8a3.666,3.666,0,0,1-1.484-.77A1.69,1.69,0,0,1,38.3-5.875a1.942,1.942,0,0,1,.365-1.174,2.417,2.417,0,0,1,.984-.781,3.331,3.331,0,0,1,1.385-.279,3.269,3.269,0,0,1,1.375.275,2.409,2.409,0,0,1,.955.752A1.875,1.875,0,0,1,43.734-6Zm3.741,6V-8h4.828v.859H47.506v2.7h3.609v.859H47.506V-.859h3.922V0Z",transform:"translate(164 68)",className:"minioApplicationName"})))},Er=function(e){var t=e.inverse,n=e.onClick;return r.createElement(fr,{viewBox:"0 0 184.45 51",inverse:t,onClick:n},r.createElement("g",{transform:"translate(-31.65 -18.133)"},r.createElement("g",{transform:"translate(-995 -63.754)"},r.createElement("g",{transform:"translate(1025.5 81.887)"},r.createElement("g",{transform:"translate(0 0)"},r.createElement("g",{transform:"translate(0 0)"},r.createElement("path",{d:"M10.338-17.825A8.815,8.815,0,0,0,1.15-8.75,8.815,8.815,0,0,0,10.338.325a8.825,8.825,0,0,0,9.2-9.075A8.825,8.825,0,0,0,10.338-17.825Zm0,3.35a5.4,5.4,0,0,1,5.55,5.725,5.4,5.4,0,0,1-5.55,5.725A5.41,5.41,0,0,1,4.788-8.75,5.41,5.41,0,0,1,10.338-14.475ZM22.05-17.5V0h7.575c4.2,0,6.588-1.65,6.588-5.013A4.2,4.2,0,0,0,33.3-8.938a3.9,3.9,0,0,0,2.537-3.713c0-3.337-2.562-4.85-6.638-4.85Zm7.4,10.225c1.925,0,3.138.45,3.138,2.088,0,1.675-1.212,2.125-3.138,2.125l-3.913-.013v-4.2Zm-.35-7.15c1.725,0,3.1.375,3.1,2.025,0,1.7-1.35,2.063-3.087,2.063H25.538v-4.088ZM48.788-17.5H45.3V-6.7c0,2.525-1.1,3.675-2.95,3.675a4.214,4.214,0,0,1-3.4-1.625L36.925-2.113A6.9,6.9,0,0,0,42.513.313c3.65,0,6.275-2.3,6.275-6.688ZM65.113-3.2H55.525V-7.225h9.05v-3.2h-9.05V-14.3h9.487v-3.2H52.037V0H65.113ZM76.3-17.825A8.794,8.794,0,0,0,67.113-8.75,8.794,8.794,0,0,0,76.3.325a8.713,8.713,0,0,0,7.387-3.7l-2.85-2.05a5.355,5.355,0,0,1-4.562,2.4A5.4,5.4,0,0,1,70.75-8.75a5.411,5.411,0,0,1,5.525-5.725A5.237,5.237,0,0,1,80.8-12.063l3-1.838A8.5,8.5,0,0,0,76.3-17.825Zm22.9.325H84.863v3.262h5.425V0h3.487V-14.238H99.2Zm19.787,1.738a10.5,10.5,0,0,0-6.25-1.925c-3.6,0-6.475,1.812-6.475,5.037,0,2.688,1.938,4.125,5.138,4.488l1.987.225c2.913.325,4.438,1.25,4.438,3.15,0,2.363-2.337,3.525-5.3,3.525a10.115,10.115,0,0,1-5.925-1.95L105.762-2A11.524,11.524,0,0,0,112.537.188c3.775,0,6.875-1.7,6.875-5.1,0-2.913-2.262-4.138-5.375-4.488l-1.912-.212c-2.988-.338-4.275-1.4-4.275-3.138,0-2.187,2.063-3.488,4.875-3.488a9.323,9.323,0,0,1,5.475,1.713ZM135.025-17.5H120.888v1.45h6.3V0h1.525V-16.05h6.313Zm9.875-.2a8.672,8.672,0,0,0-8.963,8.95A8.672,8.672,0,0,0,144.9.2a8.672,8.672,0,0,0,8.962-8.95A8.672,8.672,0,0,0,144.9-17.7Zm0,1.475a7.174,7.174,0,0,1,7.363,7.475A7.174,7.174,0,0,1,144.9-1.275a7.177,7.177,0,0,1-7.375-7.475A7.177,7.177,0,0,1,144.9-16.225ZM157.413-17.5V0h1.525V-7.763h2.675L168.138,0h1.9l-6.625-7.763h.688c3.725,0,6.025-1.862,6.025-4.875,0-3.1-2.175-4.863-6.037-4.863Zm6.663,1.438c2.875,0,4.475,1.188,4.475,3.425s-1.575,3.488-4.475,3.488h-5.138v-6.913ZM185.6-1.438H175.075V-8.1h10.138V-9.525H175.075v-6.538h10.438V-17.5H173.55V0H185.6Z",transform:"translate(0 32.612)",className:"minioApplicationName"}),r.createElement("g",{transform:"translate(2.003)"},r.createElement("g",{transform:"translate(0 0.129)"},r.createElement("rect",{width:"2.49",height:"7.352",transform:"translate(14.42)",className:"minioSection"}),r.createElement("path",{d:"M237.8,365.332l-5.053,3.086a.226.226,0,0,1-.235,0l-5.053-3.086a.694.694,0,0,0-.362-.1H227.1a.693.693,0,0,0-.693.693v6.65h2.489v-3.165a.249.249,0,0,1,.379-.212l2.832,1.733a.886.886,0,0,0,.912.009L236,369.184a.249.249,0,0,1,.374.215v3.174h2.488v-6.65a.693.693,0,0,0-.692-.693h-.006A.694.694,0,0,0,237.8,365.332Z",transform:"translate(-226.403 -365.23)",className:"minioSection"}),r.createElement("path",{d:"M257.822,365.23H255.3v3.346a.249.249,0,0,1-.366.22l-6.543-3.485a.7.7,0,0,0-.326-.081h0a.693.693,0,0,0-.693.693v6.651h2.5v-3.343a.249.249,0,0,1,.365-.22L256.8,372.5a.692.692,0,0,0,.325.081h0a.693.693,0,0,0,.693-.693Z",transform:"translate(-228.498 -365.23)",className:"minioSection"})),r.createElement("path",{d:"M261.159,372.582V365.23H262.3v7.352Z",transform:"translate(-229.877 -365.101)",className:"minioSection"}),r.createElement("path",{d:"M269.337,372.7c-3.082,0-5.268-1.462-5.268-3.805s2.2-3.806,5.268-3.806,5.281,1.462,5.281,3.806S272.458,372.7,269.337,372.7Zm0-6.637c-2.292,0-4.056,1-4.056,2.832s1.765,2.831,4.056,2.831,4.07-.988,4.07-2.831S271.628,366.062,269.337,366.062Z",transform:"translate(-230.168 -365.087)",className:"minioSection"})))))),r.createElement("path",{d:"M.969,0V-8H5.8v.859H1.938v2.7H5.547v.859H1.938V-.859H5.859V0ZM14.991-8V0h-.937L9.694-6.281H9.616V0H8.647V-8h.938l4.375,6.3h.078V-8Zm2.6.859V-8h6v.859H21.075V0h-.969V-7.141ZM26.191,0V-8h4.828v.859H27.159v2.7h3.609v.859H27.159V-.859h3.922V0Zm7.678,0V-8h2.7a3.277,3.277,0,0,1,1.539.318A2.054,2.054,0,0,1,39-6.809a2.69,2.69,0,0,1,.289,1.262A2.643,2.643,0,0,1,39-4.293a2.026,2.026,0,0,1-.887.857,3.3,3.3,0,0,1-1.527.311H34.4V-4h2.156a2.415,2.415,0,0,0,1.033-.187,1.194,1.194,0,0,0,.57-.533,1.787,1.787,0,0,0,.178-.826,1.856,1.856,0,0,0-.18-.84,1.235,1.235,0,0,0-.574-.557,2.345,2.345,0,0,0-1.043-.2h-1.7V0Zm3.766-3.594L39.6,0H38.478L36.541-3.594ZM42,0V-8h2.7a3.116,3.116,0,0,1,1.541.338,2.141,2.141,0,0,1,.889.912,2.809,2.809,0,0,1,.289,1.281,2.849,2.849,0,0,1-.287,1.285,2.149,2.149,0,0,1-.885.92,3.057,3.057,0,0,1-1.531.342H42.781v-.859h1.906A2.084,2.084,0,0,0,45.723-4a1.337,1.337,0,0,0,.568-.6,2.013,2.013,0,0,0,.178-.861,2,2,0,0,0-.178-.859,1.3,1.3,0,0,0-.572-.6,2.173,2.173,0,0,0-1.047-.217h-1.7V0Zm8.084,0V-8h2.7a3.277,3.277,0,0,1,1.539.318,2.054,2.054,0,0,1,.891.873,2.69,2.69,0,0,1,.289,1.262,2.643,2.643,0,0,1-.289,1.254,2.026,2.026,0,0,1-.887.857,3.3,3.3,0,0,1-1.527.311H50.616V-4h2.156a2.415,2.415,0,0,0,1.033-.187,1.194,1.194,0,0,0,.57-.533,1.787,1.787,0,0,0,.178-.826,1.856,1.856,0,0,0-.18-.84,1.235,1.235,0,0,0-.574-.557,2.345,2.345,0,0,0-1.043-.2h-1.7V0ZM53.85-3.594,55.819,0H54.694L52.756-3.594ZM59.184-8V0h-.969V-8ZM66.6-6a1.226,1.226,0,0,0-.57-.922A2.188,2.188,0,0,0,64.8-7.25a2.318,2.318,0,0,0-.928.172,1.468,1.468,0,0,0-.617.473,1.126,1.126,0,0,0-.221.684.957.957,0,0,0,.154.549,1.3,1.3,0,0,0,.4.379,2.686,2.686,0,0,0,.508.246q.266.1.488.154l.813.219a7.22,7.22,0,0,1,.7.227,3.308,3.308,0,0,1,.738.393,2.04,2.04,0,0,1,.584.635,1.824,1.824,0,0,1,.23.949A2.115,2.115,0,0,1,67.306-1a2.329,2.329,0,0,1-.984.832,3.618,3.618,0,0,1-1.568.309,3.653,3.653,0,0,1-1.486-.277,2.355,2.355,0,0,1-.984-.773,2.2,2.2,0,0,1-.4-1.152h1a1.236,1.236,0,0,0,.307.748,1.608,1.608,0,0,0,.68.438,2.7,2.7,0,0,0,.889.143,2.6,2.6,0,0,0,1-.182,1.687,1.687,0,0,0,.7-.508,1.2,1.2,0,0,0,.258-.764.938.938,0,0,0-.223-.648,1.634,1.634,0,0,0-.586-.406,6.157,6.157,0,0,0-.785-.273L64.128-3.8a3.666,3.666,0,0,1-1.484-.77A1.69,1.69,0,0,1,62.1-5.875a1.942,1.942,0,0,1,.365-1.174,2.417,2.417,0,0,1,.984-.781,3.331,3.331,0,0,1,1.385-.279,3.269,3.269,0,0,1,1.375.275,2.409,2.409,0,0,1,.955.752A1.875,1.875,0,0,1,67.534-6Zm3.741,6V-8h4.828v.859H71.306v2.7h3.609v.859H71.306V-.859h3.922V0ZM82.209,0V-8h.969V-.859H86.9V0Zm8.256-8V0H89.5V-8Zm9.475,2.5h-.969a2.034,2.034,0,0,0-.3-.734,2.072,2.072,0,0,0-.516-.533,2.24,2.24,0,0,0-.67-.326,2.668,2.668,0,0,0-.766-.109,2.431,2.431,0,0,0-1.314.367,2.536,2.536,0,0,0-.934,1.082A4.007,4.007,0,0,0,94.128-4a4.007,4.007,0,0,0,.346,1.754,2.536,2.536,0,0,0,.934,1.082A2.431,2.431,0,0,0,96.722-.8a2.668,2.668,0,0,0,.766-.109,2.24,2.24,0,0,0,.67-.326,2.06,2.06,0,0,0,.516-.535,2.053,2.053,0,0,0,.3-.732h.969a3.227,3.227,0,0,1-.4,1.1,2.973,2.973,0,0,1-.719.822,3.129,3.129,0,0,1-.963.514,3.614,3.614,0,0,1-1.139.176,3.353,3.353,0,0,1-1.82-.5,3.431,3.431,0,0,1-1.254-1.422A4.874,4.874,0,0,1,93.191-4a4.874,4.874,0,0,1,.457-2.187A3.431,3.431,0,0,1,94.9-7.609a3.353,3.353,0,0,1,1.82-.5,3.614,3.614,0,0,1,1.139.176,3.129,3.129,0,0,1,.963.514,2.984,2.984,0,0,1,.719.82A3.208,3.208,0,0,1,99.941-5.5ZM102.6,0V-8h4.828v.859h-3.859v2.7h3.609v.859h-3.609V-.859h3.922V0Zm14.022-8V0h-.937l-4.359-6.281h-.078V0h-.969V-8h.938l4.375,6.3h.078V-8Zm7.412,2a1.226,1.226,0,0,0-.57-.922,2.188,2.188,0,0,0-1.227-.328,2.317,2.317,0,0,0-.928.172,1.468,1.468,0,0,0-.617.473,1.126,1.126,0,0,0-.221.684.957.957,0,0,0,.154.549,1.3,1.3,0,0,0,.4.379,2.686,2.686,0,0,0,.508.246q.266.1.488.154l.813.219a7.22,7.22,0,0,1,.7.227,3.309,3.309,0,0,1,.738.393,2.04,2.04,0,0,1,.584.635,1.824,1.824,0,0,1,.23.949A2.115,2.115,0,0,1,124.746-1a2.329,2.329,0,0,1-.984.832,3.618,3.618,0,0,1-1.568.309,3.653,3.653,0,0,1-1.486-.277,2.355,2.355,0,0,1-.984-.773,2.2,2.2,0,0,1-.4-1.152h1a1.236,1.236,0,0,0,.307.748,1.608,1.608,0,0,0,.68.438,2.7,2.7,0,0,0,.889.143,2.6,2.6,0,0,0,1-.182,1.687,1.687,0,0,0,.7-.508,1.2,1.2,0,0,0,.258-.764.938.938,0,0,0-.223-.648,1.634,1.634,0,0,0-.586-.406,6.157,6.157,0,0,0-.785-.273l-.984-.281a3.666,3.666,0,0,1-1.484-.77,1.69,1.69,0,0,1-.547-1.309,1.942,1.942,0,0,1,.365-1.174,2.417,2.417,0,0,1,.984-.781,3.331,3.331,0,0,1,1.385-.279,3.269,3.269,0,0,1,1.375.275,2.409,2.409,0,0,1,.955.752A1.875,1.875,0,0,1,124.975-6Zm3.741,6V-8h4.828v.859h-3.859v2.7h3.609v.859h-3.609V-.859h3.922V0Z",transform:"translate(83 68)",className:"minioApplicationName"})))},br=function(e){var t=e.inverse,n=e.onClick;return r.createElement(fr,{viewBox:"0 0 154.498 50.008",inverse:t,onClick:n},r.createElement("g",{transform:"translate(27.666 -11)"},r.createElement("g",{transform:"translate(-29 11)"},r.createElement("g",{transform:"translate(0 0)"},r.createElement("path",{d:"M11.992-20.677A10.225,10.225,0,0,0,1.334-10.15,10.225,10.225,0,0,0,11.992.377,10.237,10.237,0,0,0,22.664-10.15,10.237,10.237,0,0,0,11.992-20.677Zm0,3.886A6.268,6.268,0,0,1,18.43-10.15a6.268,6.268,0,0,1-6.438,6.641A6.276,6.276,0,0,1,5.554-10.15,6.276,6.276,0,0,1,11.992-16.791ZM33.887-7.424c4.814,0,7.4-2.523,7.4-6.424,0-3.929-2.581-6.453-7.424-6.453h-8.28V0h4.046V-7.424Zm-.1-9.15c2.2,0,3.35.914,3.35,2.726s-1.146,2.726-3.35,2.726H29.624v-5.452ZM59.174-3.712H48.053V-8.381h10.5v-3.712h-10.5v-4.5H59.059V-20.3H44.007V0H59.174ZM62.6-20.3V0h4.045V-8.077h1.189L73.747,0h4.9L72.4-8.135c3.9-.377,6.221-2.654,6.221-5.989,0-3.886-2.6-6.177-7.438-6.177Zm8.512,3.726c2.146,0,3.35.769,3.35,2.451,0,1.711-1.146,2.523-3.35,2.523H66.642v-4.974ZM92.278-20.3h-4.93L79.445,0h4.22l1.769-4.727H94.09L95.86,0h4.321Zm-2.508,4L92.7-8.454H86.826Zm25.288-4H98.426v3.785h6.293V0h4.045V-16.516h6.293Zm11.136-.377A10.225,10.225,0,0,0,115.536-10.15,10.225,10.225,0,0,0,126.194.377,10.237,10.237,0,0,0,136.866-10.15,10.237,10.237,0,0,0,126.194-20.677Zm0,3.886a6.268,6.268,0,0,1,6.438,6.641,6.268,6.268,0,0,1-6.438,6.641,6.276,6.276,0,0,1-6.438-6.641A6.276,6.276,0,0,1,126.194-16.791ZM139.78-20.3V0h4.046V-8.077h1.189L150.931,0h4.9l-6.25-8.135c3.9-.377,6.221-2.654,6.221-5.989,0-3.886-2.6-6.177-7.439-6.177Zm8.512,3.726c2.146,0,3.35.769,3.35,2.451,0,1.711-1.146,2.523-3.35,2.523h-4.466v-4.974Z",transform:"translate(0 37.951)",className:"minioApplicationName"}),r.createElement("g",{transform:"translate(2.356 0)"},r.createElement("g",{transform:"translate(0 0.151)"},r.createElement("rect",{width:"2.928",height:"8.645",transform:"translate(16.956)",className:"minioSection"}),r.createElement("path",{d:"M239.81,365.349l-5.942,3.629a.265.265,0,0,1-.276,0l-5.942-3.629a.816.816,0,0,0-.425-.119h-.007a.815.815,0,0,0-.815.815v7.82h2.926v-3.722a.293.293,0,0,1,.446-.25l3.33,2.037a1.042,1.042,0,0,0,1.072.011l3.515-2.062a.293.293,0,0,1,.44.253v3.733h2.925v-7.82a.814.814,0,0,0-.814-.815h-.007A.816.816,0,0,0,239.81,365.349Z",transform:"translate(-226.403 -365.23)",className:"minioSection"}),r.createElement("path",{d:"M259.662,365.23h-2.969v3.935a.293.293,0,0,1-.431.258l-7.694-4.1a.818.818,0,0,0-.383-.1h-.005a.815.815,0,0,0-.815.815v7.821h2.945v-3.931a.293.293,0,0,1,.43-.258l7.725,4.1a.814.814,0,0,0,.382.1h0a.815.815,0,0,0,.815-.815Z",transform:"translate(-225.18 -365.23)",className:"minioSection"})),r.createElement("path",{d:"M261.159,373.875V365.23h1.347v8.646Z",transform:"translate(-224.375 -365.079)",className:"minioSection"}),r.createElement("path",{d:"M270.264,374.038c-3.624,0-6.195-1.719-6.195-4.475s2.587-4.476,6.195-4.476,6.21,1.719,6.21,4.476S273.934,374.038,270.264,374.038Zm0-7.8c-2.695,0-4.77,1.177-4.77,3.33s2.075,3.329,4.77,3.329,4.786-1.162,4.786-3.329S272.958,366.233,270.264,366.233Z",transform:"translate(-224.205 -365.087)",className:"minioSection"}))))))},vr=function(e){var t=e.inverse,n=e.onClick;return r.createElement(fr,{viewBox:"0 0 184.538 50.008",inverse:t,onClick:n},r.createElement("g",{transform:"translate(26.456 -11)"},r.createElement("g",{transform:"translate(-29 11)"},r.createElement("g",{transform:"translate(0 0)"},r.createElement("path",{d:"M2.544-22.4V0h9.232c7.008,0,11.632-4.448,11.632-11.2S18.784-22.4,11.776-22.4Zm9.184,4.176c4.72,0,7.008,2.912,7.008,7.024,0,4.064-2.288,7.024-7.008,7.024H7.008V-18.224ZM31.088-22.4H26.624V0h4.464Zm4.288,0V0H39.84V-8.912h1.312L47.68,0h5.408l-6.9-8.976c4.3-.416,6.864-2.928,6.864-6.608,0-4.288-2.864-6.816-8.208-6.816Zm9.392,4.112c2.368,0,3.7.848,3.7,2.7,0,1.888-1.264,2.784-3.7,2.784H39.84v-5.488ZM73.072-4.1H60.8V-9.248H72.384v-4.1H60.8V-18.3H72.944v-4.1H56.336V0H73.072Zm14.32-18.72c-6.9,0-11.76,4.88-11.76,11.616S80.5.416,87.392.416A11.153,11.153,0,0,0,96.848-4.32L93.2-6.944a6.855,6.855,0,0,1-5.84,3.072c-3.952,0-7.056-2.832-7.072-7.328,0-4.352,3.008-7.328,7.072-7.328a6.7,6.7,0,0,1,5.792,3.088l3.84-2.352A10.88,10.88,0,0,0,87.392-22.816ZM116.7-22.4H98.352v4.176H105.3V0h4.464V-18.224H116.7ZM128.08-9.12c4.944,0,7.92-2.448,7.92-6.64s-2.976-6.64-7.92-6.64h-8.32V0h1.952V-9.12Zm-.048-11.44c3.744,0,5.936,1.632,5.936,4.8s-2.192,4.784-5.936,4.784h-6.32V-20.56Zm30.4-1.84h-2.016l-8.4,20.464L139.632-22.4h-2.08L146.784,0H149.2Z",transform:"translate(0 42.065)",className:"minioApplicationName"}),r.createElement("g",{transform:"translate(2.649 0)"},r.createElement("g",{transform:"translate(0 0.17)"},r.createElement("rect",{width:"3.292",height:"9.721",transform:"translate(19.066)",className:"minioSection"}),r.createElement("path",{d:"M241.479,365.364l-6.681,4.081a.3.3,0,0,1-.311,0l-6.681-4.081a.917.917,0,0,0-.478-.134h-.008a.917.917,0,0,0-.916.916v8.793h3.29v-4.185a.329.329,0,0,1,.5-.281l3.744,2.291a1.172,1.172,0,0,0,1.206.012l3.952-2.318a.329.329,0,0,1,.5.284v4.2h3.289v-8.793a.916.916,0,0,0-.915-.916h-.008A.917.917,0,0,0,241.479,365.364Z",transform:"translate(-226.403 -365.23)",className:"minioSection"}),r.createElement("path",{d:"M261.192,365.23h-3.338v4.425a.329.329,0,0,1-.484.29l-8.652-4.608a.919.919,0,0,0-.431-.107h-.006a.917.917,0,0,0-.916.916v8.795h3.312v-4.42a.329.329,0,0,1,.483-.29l8.686,4.607a.916.916,0,0,0,.43.107h0a.917.917,0,0,0,.916-.916Z",transform:"translate(-222.419 -365.23)",className:"minioSection"})),r.createElement("path",{d:"M261.159,374.952V365.23h1.515v9.722Z",transform:"translate(-219.797 -365.06)",className:"minioSection"}),r.createElement("path",{d:"M271.034,375.151c-4.075,0-6.965-1.933-6.965-5.032,0-3.082,2.908-5.033,6.965-5.033s6.983,1.933,6.983,5.033S275.162,375.151,271.034,375.151Zm0-8.776c-3.03,0-5.364,1.323-5.364,3.744,0,2.437,2.334,3.744,5.364,3.744s5.382-1.307,5.382-3.744C276.416,367.7,274.064,366.376,271.034,366.376Z",transform:"translate(-219.244 -365.087)",className:"minioSection"}))))))},yr=function(e){var t=e.inverse,n=e.onClick;return r.createElement(fr,{viewBox:"0 0 184.538 51",inverse:t,onClick:n},r.createElement("g",{transform:"translate(26.059 -11)"},r.createElement("g",{transform:"translate(-29 11)"},r.createElement("g",{transform:"translate(0 0)"},r.createElement("path",{d:"M19.7,0h6.7L14.726-13.265,25.586-25.9H19.111l-8.566,10.49H8.1V-25.9H2.942V0H8.1V-10.656H10.49ZM47.712-4.736H33.522v-5.957H46.916v-4.736H33.522v-5.735H47.564V-25.9h-19.2V0H47.712ZM72.039-23.588a18.223,18.223,0,0,0-9.9-2.757c-5.513,0-10.323,2.812-10.323,8.214,0,4.681,3.33,6.7,7.9,7.419l1.646.259c3.607.574,5.495,1.24,5.495,3.034,0,2-2.22,3.127-5.088,3.127a13.674,13.674,0,0,1-8.251-2.794L50.838-2.923C53.613-.685,57.831.463,61.753.463c5.568,0,10.6-2.72,10.6-8.436,0-4.514-3.626-6.494-8.251-7.252l-1.462-.241c-3.108-.518-5.347-1.092-5.347-3,0-1.961,2.054-3.108,4.958-3.108a13.919,13.919,0,0,1,7.345,2.2Z",transform:"translate(0 49.495)",className:"minioApplicationName"}),r.createElement("g",{transform:"translate(3.025 0)"},r.createElement("g",{transform:"translate(0 0.194)"},r.createElement("rect",{width:"3.76",height:"11.103",transform:"translate(21.776)",className:"minioSection"}),r.createElement("path",{d:"M243.621,365.383l-7.631,4.661a.34.34,0,0,1-.355,0l-7.631-4.661a1.048,1.048,0,0,0-.546-.153h-.009a1.047,1.047,0,0,0-1.047,1.046V376.32h3.758v-4.78a.376.376,0,0,1,.572-.321l4.276,2.616a1.338,1.338,0,0,0,1.377.014L240.9,371.2a.376.376,0,0,1,.565.325v4.794h3.757V366.276a1.046,1.046,0,0,0-1.045-1.046h-.01A1.047,1.047,0,0,0,243.621,365.383Z",transform:"translate(-226.403 -365.23)",className:"minioSection"}),r.createElement("path",{d:"M263.158,365.23h-3.813v5.053a.376.376,0,0,1-.553.332l-9.881-5.263a1.051,1.051,0,0,0-.492-.122h-.007a1.047,1.047,0,0,0-1.047,1.046v10.045h3.783v-5.048a.376.376,0,0,1,.552-.332l9.921,5.262a1.046,1.046,0,0,0,.491.122h0a1.047,1.047,0,0,0,1.047-1.047Z",transform:"translate(-218.873 -365.23)",className:"minioSection"})),r.createElement("path",{d:"M261.159,376.333v-11.1h1.73v11.1Z",transform:"translate(-213.918 -365.036)",className:"minioSection"}),r.createElement("path",{d:"M272.024,376.582c-4.654,0-7.955-2.207-7.955-5.747,0-3.52,3.322-5.748,7.955-5.748S280,367.294,280,370.835,276.738,376.582,272.024,376.582Zm0-10.023c-3.461,0-6.126,1.511-6.126,4.276,0,2.784,2.665,4.276,6.126,4.276s6.146-1.492,6.146-4.276C278.171,368.07,275.485,366.559,272.024,366.559Z",transform:"translate(-212.873 -365.087)",className:"minioSection"}))))))},_r=function(e){var t=e.inverse,n=e.onClick;return r.createElement(fr,{viewBox:"0 0 184.538 50.008",inverse:t,onClick:n},r.createElement("g",{transform:"translate(27.622 -11)"},r.createElement("g",{transform:"translate(-29 11)"},r.createElement("g",{transform:"translate(0 0)"},r.createElement("path",{d:"M17.995-18.488a14.283,14.283,0,0,0-7.758-2.161c-4.321,0-8.091,2.2-8.091,6.438,0,3.668,2.61,5.249,6.192,5.814l1.29.2c2.828.45,4.307.972,4.307,2.378,0,1.566-1.74,2.451-3.988,2.451A10.718,10.718,0,0,1,3.48-5.554l-2.1,3.263A14.124,14.124,0,0,0,9.933.363c4.365,0,8.309-2.132,8.309-6.612,0-3.538-2.842-5.09-6.467-5.684l-1.146-.188c-2.436-.406-4.191-.856-4.191-2.349,0-1.537,1.609-2.436,3.886-2.436a10.91,10.91,0,0,1,5.757,1.726ZM38.353-20.3h-4.06V-8.309c0,3.335-1.885,4.8-4.684,4.8s-4.684-1.465-4.684-4.8V-20.3h-4.06V-8.106c0,5.612,3.582,8.468,8.744,8.468s8.743-2.857,8.743-8.468Zm3.654,0V0h8.787c4.872,0,7.642-1.914,7.642-5.815a4.874,4.874,0,0,0-3.379-4.553A4.528,4.528,0,0,0,58-14.674c0-3.871-2.972-5.626-7.7-5.626ZM50.59-8.439c2.233,0,3.64.522,3.64,2.421,0,1.943-1.407,2.465-3.64,2.465l-4.538-.015V-8.439Zm-.406-8.294c2,0,3.6.435,3.6,2.349,0,1.972-1.566,2.393-3.582,2.393H46.052v-4.741ZM79.5-20.3h-4.06V-6.743L65.134-20.3H61.349V0h4.045l.015-13.558L75.7,0h3.8ZM98.557-3.712H87.435V-8.381h10.5v-3.712h-10.5v-4.5H98.441V-20.3H83.39V0H98.557ZM116.769-20.3H100.137v3.785h6.293V0h4.045V-16.516h6.293Z",transform:"translate(0 38.028)",className:"minioApplicationName"}),r.createElement("g",{transform:"translate(2.376 0)"},r.createElement("g",{transform:"translate(0 0.153)"},r.createElement("rect",{width:"2.953",height:"8.72",transform:"translate(17.103)",className:"minioSection"}),r.createElement("path",{d:"M239.926,365.35l-5.993,3.661a.267.267,0,0,1-.279,0l-5.993-3.661a.823.823,0,0,0-.429-.12h-.007a.822.822,0,0,0-.822.822v7.888h2.952v-3.754a.3.3,0,0,1,.449-.252l3.358,2.055a1.051,1.051,0,0,0,1.081.011l3.545-2.08a.3.3,0,0,1,.444.255v3.765h2.951v-7.888a.821.821,0,0,0-.821-.822h-.007A.823.823,0,0,0,239.926,365.35Z",transform:"translate(-226.403 -365.23)",className:"minioSection"}),r.createElement("path",{d:"M259.769,365.23h-2.994V369.2a.3.3,0,0,1-.434.26l-7.761-4.133a.825.825,0,0,0-.386-.1h-.005a.822.822,0,0,0-.822.822v7.889h2.971v-3.965a.3.3,0,0,1,.433-.26l7.792,4.132a.822.822,0,0,0,.385.1h0a.822.822,0,0,0,.822-.822Z",transform:"translate(-224.988 -365.23)",className:"minioSection"})),r.createElement("path",{d:"M261.159,373.95v-8.72h1.359v8.72Z",transform:"translate(-224.056 -365.077)",className:"minioSection"}),r.createElement("path",{d:"M270.317,374.115c-3.655,0-6.248-1.734-6.248-4.513s2.609-4.515,6.248-4.515,6.264,1.734,6.264,4.515S274.019,374.115,270.317,374.115Zm0-7.872c-2.718,0-4.811,1.187-4.811,3.358s2.093,3.358,4.811,3.358,4.827-1.172,4.827-3.358S273.035,366.243,270.317,366.243Z",transform:"translate(-223.86 -365.087)",className:"minioSection"}))))))},Sr=function(e){var t=e.inverse,n=e.onClick;return r.createElement(fr,{viewBox:"0 0 184.45 55",inverse:t,onClick:n},r.createElement("g",{transform:"translate(-31.65 -18.133)"},r.createElement("g",{transform:"translate(-995 -63.754)"},r.createElement("g",{transform:"translate(1025.5 81.887)"},r.createElement("g",{transform:"translate(0 0)"},r.createElement("g",{transform:"translate(0 0)"},r.createElement("path",{d:"M10.338-17.825A8.815,8.815,0,0,0,1.15-8.75,8.815,8.815,0,0,0,10.338.325a8.825,8.825,0,0,0,9.2-9.075A8.825,8.825,0,0,0,10.338-17.825Zm0,3.35a5.4,5.4,0,0,1,5.55,5.725,5.4,5.4,0,0,1-5.55,5.725A5.41,5.41,0,0,1,4.788-8.75,5.41,5.41,0,0,1,10.338-14.475ZM22.05-17.5V0h7.575c4.2,0,6.588-1.65,6.588-5.013A4.2,4.2,0,0,0,33.3-8.938a3.9,3.9,0,0,0,2.537-3.713c0-3.337-2.562-4.85-6.638-4.85Zm7.4,10.225c1.925,0,3.138.45,3.138,2.088,0,1.675-1.212,2.125-3.138,2.125l-3.913-.013v-4.2Zm-.35-7.15c1.725,0,3.1.375,3.1,2.025,0,1.7-1.35,2.063-3.087,2.063H25.538v-4.088ZM48.788-17.5H45.3V-6.7c0,2.525-1.1,3.675-2.95,3.675a4.214,4.214,0,0,1-3.4-1.625L36.925-2.113A6.9,6.9,0,0,0,42.513.313c3.65,0,6.275-2.3,6.275-6.688ZM65.113-3.2H55.525V-7.225h9.05v-3.2h-9.05V-14.3h9.487v-3.2H52.037V0H65.113ZM76.3-17.825A8.794,8.794,0,0,0,67.113-8.75,8.794,8.794,0,0,0,76.3.325a8.713,8.713,0,0,0,7.387-3.7l-2.85-2.05a5.355,5.355,0,0,1-4.562,2.4A5.4,5.4,0,0,1,70.75-8.75a5.411,5.411,0,0,1,5.525-5.725A5.237,5.237,0,0,1,80.8-12.063l3-1.838A8.5,8.5,0,0,0,76.3-17.825Zm22.9.325H84.863v3.262h5.425V0h3.487V-14.238H99.2Zm19.787,1.738a10.5,10.5,0,0,0-6.25-1.925c-3.6,0-6.475,1.812-6.475,5.037,0,2.688,1.938,4.125,5.138,4.488l1.987.225c2.913.325,4.438,1.25,4.438,3.15,0,2.363-2.337,3.525-5.3,3.525a10.115,10.115,0,0,1-5.925-1.95L105.762-2A11.524,11.524,0,0,0,112.537.188c3.775,0,6.875-1.7,6.875-5.1,0-2.913-2.262-4.138-5.375-4.488l-1.912-.212c-2.988-.338-4.275-1.4-4.275-3.138,0-2.187,2.063-3.488,4.875-3.488a9.323,9.323,0,0,1,5.475,1.713ZM135.025-17.5H120.888v1.45h6.3V0h1.525V-16.05h6.313Zm9.875-.2a8.672,8.672,0,0,0-8.963,8.95A8.672,8.672,0,0,0,144.9.2a8.672,8.672,0,0,0,8.962-8.95A8.672,8.672,0,0,0,144.9-17.7Zm0,1.475a7.174,7.174,0,0,1,7.363,7.475A7.174,7.174,0,0,1,144.9-1.275a7.177,7.177,0,0,1-7.375-7.475A7.177,7.177,0,0,1,144.9-16.225ZM157.413-17.5V0h1.525V-7.763h2.675L168.138,0h1.9l-6.625-7.763h.688c3.725,0,6.025-1.862,6.025-4.875,0-3.1-2.175-4.863-6.037-4.863Zm6.663,1.438c2.875,0,4.475,1.188,4.475,3.425s-1.575,3.488-4.475,3.488h-5.138v-6.913ZM185.6-1.438H175.075V-8.1h10.138V-9.525H175.075v-6.538h10.438V-17.5H173.55V0H185.6Z",transform:"translate(0 32.612)",className:"minioApplicationName"}),r.createElement("g",{transform:"translate(2.003)"},r.createElement("g",{transform:"translate(0 0.129)"},r.createElement("rect",{width:"2.49",height:"7.352",transform:"translate(14.42)",className:"minioSection"}),r.createElement("path",{d:"M237.8,365.332l-5.053,3.086a.226.226,0,0,1-.235,0l-5.053-3.086a.694.694,0,0,0-.362-.1H227.1a.693.693,0,0,0-.693.693v6.65h2.489v-3.165a.249.249,0,0,1,.379-.212l2.832,1.733a.886.886,0,0,0,.912.009L236,369.184a.249.249,0,0,1,.374.215v3.174h2.488v-6.65a.693.693,0,0,0-.692-.693h-.006A.694.694,0,0,0,237.8,365.332Z",transform:"translate(-226.403 -365.23)",className:"minioSection"}),r.createElement("path",{d:"M257.822,365.23H255.3v3.346a.249.249,0,0,1-.366.22l-6.543-3.485a.7.7,0,0,0-.326-.081h0a.693.693,0,0,0-.693.693v6.651h2.5v-3.343a.249.249,0,0,1,.365-.22L256.8,372.5a.692.692,0,0,0,.325.081h0a.693.693,0,0,0,.693-.693Z",transform:"translate(-228.498 -365.23)",className:"minioSection"})),r.createElement("path",{d:"M261.159,372.582V365.23H262.3v7.352Z",transform:"translate(-229.877 -365.101)",className:"minioSection"}),r.createElement("path",{d:"M269.337,372.7c-3.082,0-5.268-1.462-5.268-3.805s2.2-3.806,5.268-3.806,5.281,1.462,5.281,3.806S272.458,372.7,269.337,372.7Zm0-6.637c-2.292,0-4.056,1-4.056,2.832s1.765,2.831,4.056,2.831,4.07-.988,4.07-2.831S271.628,366.062,269.337,366.062Z",transform:"translate(-230.168 -365.087)",className:"minioSection"}))))))))},Tr=function(e){var t=e.inverse,n=e.onClick;return r.createElement(fr,{viewBox:"0 0 665.85156 145.5",inverse:t,onClick:n},r.createElement("g",null,r.createElement("rect",{className:"minioSection",x:"67.37841",y:".72967",width:"11.2565",height:"32.97504"}),r.createElement("path",{className:"minioSection",d:"m53.83768,1.04115l-22.84946,13.95519c-.32497.19877-.73368.19877-1.05894,0L7.07897,1.04115c-.49161-.30001-1.05636-.45948-1.63315-.45948h-.02811c-1.73067,0-3.13293,1.40226-3.13293,3.13293v29.99011s11.24934,0,11.24934,0v-14.23111c0-.87853.96228-1.41832,1.71202-.95998l12.80533,7.83389c1.26229.7724,2.84639.78674,4.12331.03872l13.51263-7.92568c.74975-.43998,1.69453.10067,1.69453.97031v14.27385s11.24934,0,11.24934,0V3.7146c0-1.73067-1.40226-3.13293-3.13293-3.13293h-.02811c-.57536,0-1.14097.15861-1.63258.45948Z"}),r.createElement("path",{className:"minioSection",d:"m134.87128.72164h-11.41598s0,15.13144,0,15.13144c0,.8487-.90435,1.39193-1.65409.99297L92.2161,1.08934c-.45289-.2415-.95912-.3677-1.47224-.3677h-.02008c-1.73067,0-3.13293,1.40226-3.13293,3.13293v29.85014s11.32505,0,11.32505,0v-14.88936c0-.84812.90262-1.39107,1.65265-.99354l29.70271,15.75412c.45202.23978.95568.36541,1.46822.36541h0c1.73067,0,3.13293-1.40226,3.13293-3.13293V.72164s-.00114,0-.00114,0Z"}),r.createElement("path",{className:"minioSection",d:"m144.00791,33.69667V.72164h5.23446v32.97504h-5.23446Z"}),r.createElement("path",{className:"minioSection",d:"m179.38707,34.41831c-13.93426,0-23.8189-6.61032-23.8189-17.20887C155.56787,6.66969,165.51219,0,179.38707,0c13.8746,0,23.87856,6.60946,23.87856,17.20887,0,10.59941-9.76591,17.20944-23.87856,17.20944Zm0-30.01248c-10.36107,0-18.34066,4.52572-18.34066,12.80304,0,8.33698,7.97959,12.80218,18.34066,12.80218,10.36107,0,18.40032-4.46606,18.40032-12.80218,0-8.27732-8.03927-12.80304-18.40032-12.80304Z"})),r.createElement("g",null,r.createElement("path",{className:"minioApplicationName",d:"m54.1377,87.12884c-5.87305-3.63086-13.02734-6.35352-21.1958-6.35352-8.38232,0-14.30859,3.30957-14.30859,8.96875,0,5.5,6.45996,7.15527,15.42969,8.64941l4.21777.69434c13.34766,2.18945,23.81201,7.90137,23.81201,20.92871,0,16.49805-14.52197,24.34668-30.59277,24.34668-11.31836,0-23.4917-3.31055-31.5-9.77051l7.74121-12.0127c5.39258,4.32422,14.20215,8.06152,23.8125,8.06152,8.27539,0,14.68213-3.25684,14.68213-9.02246,0-5.17969-5.4458-7.10156-15.85693-8.75684l-4.75146-.74707c-13.1875-2.08203-22.79785-7.90137-22.79785-21.40918,0-15.59082,13.88135-23.70605,29.79199-23.70605,10.46436,0,19.16699,2.34961,28.56396,7.95508l-7.04785,12.17383Z"}),r.createElement("path",{className:"minioApplicationName",d:"m138.80615,113.18255c0,20.66211-13.1875,31.18066-32.19482,31.18066s-32.19434-10.51855-32.19434-31.18066v-44.90137h14.94922v44.1543c0,12.28027,6.94092,17.67188,17.24512,17.67188s17.24512-5.3916,17.24512-17.67188v-44.1543h14.94971v44.90137Z"}),r.createElement("path",{className:"minioApplicationName",d:"m185.45703,68.28118c17.40527,0,28.35059,6.46094,28.35059,20.71582,0,7.52832-4.5918,13.56152-10.83838,15.85742,6.83398,2.29492,12.43994,8.70215,12.43994,16.76465,0,14.36133-10.19775,21.40918-28.13672,21.40918h-32.35449v-74.74707h30.53906Zm-15.64307,13.13477v17.45801h15.26953c7.42139,0,13.1875-1.54785,13.1875-8.80859,0-7.04785-5.87305-8.64941-13.24072-8.64941h-15.21631Zm0,30.53906v17.93945l16.71094.05273c8.22217,0,13.40088-1.92188,13.40088-9.07617,0-6.99414-5.17871-8.91602-13.40088-8.91602h-16.71094Z"}),r.createElement("path",{className:"minioApplicationName",d:"m295.64355,143.02825h-13.98828l-37.90723-49.91992-.05322,49.91992h-14.896v-74.74707h13.93457l37.96094,49.9209v-49.9209h14.94922v74.74707Z"}),r.createElement("path",{className:"minioApplicationName",d:"m368.45557,143.02825h-55.84619v-74.74707h55.41895v13.66797h-40.52295v16.55176h38.6543v13.66797h-38.6543v17.19141h40.9502v13.66797Z"}),r.createElement("path",{className:"minioApplicationName",d:"m438.17188,82.21673h-23.17139v60.81152h-14.896v-60.81152h-23.17139v-13.93555h61.23877v13.93555Z"}),r.createElement("path",{className:"minioApplicationName",d:"m523.16113,105.65521c0,22.42383-16.44434,38.22754-38.28076,38.22754s-38.28125-15.80371-38.28125-38.22754,16.44434-38.22754,38.28125-38.22754,38.28076,15.80371,38.28076,38.22754Zm-69.78125,0c0,19.06055,13.7749,31.92676,31.50049,31.92676,17.67236,0,31.44678-12.86621,31.44678-31.92676s-13.77441-31.92773-31.44678-31.92773c-17.72559,0-31.50049,12.86719-31.50049,31.92773Z"}),r.createElement("path",{className:"minioApplicationName",d:"m547.49512,112.59564v30.43262h-6.51367v-74.74707h27.76318c16.49756,0,26.42822,8.16895,26.42822,22.15723s-9.93066,22.15723-26.42822,22.15723h-21.24951Zm0-38.17383v31.98047h21.08936c12.49316,0,19.80762-5.39258,19.80762-15.96387s-7.31445-16.0166-19.80762-16.0166h-21.08936Z"}),r.createElement("path",{className:"minioApplicationName",d:"m660.67285,80.98821c-5.81934-4.11035-13.56104-7.31445-23.38525-7.31445-12.0127,0-20.82227,5.55273-20.82227,14.89648,0,7.4209,5.49951,11.95898,18.25977,13.40039l8.16895.9082c13.29395,1.49512,22.95752,6.72656,22.95752,19.16699,0,14.52246-13.24072,21.7832-29.36475,21.7832-11.21191,0-22.31689-4.11133-28.9375-9.34375l3.57715-5.17871c5.23242,4.16504,14.94922,8.3291,25.30713,8.3291,12.65332,0,22.6377-4.96484,22.6377-15.05566,0-8.11523-6.51367-12.06641-18.95361-13.45508l-8.48926-.96094c-13.66797-1.54785-21.94336-7.6875-21.94336-19.16699,0-13.77441,12.27979-21.5166,27.65625-21.5166,11.58545,0,20.23486,3.63086,26.69531,8.22266l-3.36377,5.28516Z"})))},Ar=function(e){var t=e.inverse,n=e.onClick;return r.createElement(fr,{viewBox:"0 0 184.538 52",inverse:t,onClick:n},r.createElement("path",{d:"m22.19,31.57h-3.13c-.19-.9-.51-1.69-.96-2.37-.46-.68-1.01-1.25-1.66-1.72-.65-.47-1.37-.82-2.16-1.05-.79-.24-1.61-.35-2.47-.35-1.56,0-2.98.4-4.24,1.19s-2.27,1.95-3.01,3.49c-.74,1.54-1.12,3.42-1.12,5.66s.37,4.12,1.12,5.66c.74,1.54,1.75,2.7,3.01,3.49,1.27.79,2.68,1.19,4.24,1.19.86,0,1.68-.12,2.47-.35.79-.24,1.51-.59,2.16-1.05.65-.47,1.21-1.04,1.66-1.73.46-.68.78-1.47.96-2.36h3.13c-.24,1.32-.66,2.5-1.29,3.54-.62,1.04-1.4,1.93-2.32,2.65-.92.73-1.96,1.28-3.11,1.66s-2.37.57-3.68.57c-2.2,0-4.16-.54-5.88-1.61s-3.06-2.61-4.05-4.59c-.98-1.98-1.48-4.34-1.48-7.06s.49-5.08,1.48-7.06c.98-1.98,2.33-3.51,4.05-4.59,1.71-1.08,3.67-1.61,5.88-1.61,1.3,0,2.53.19,3.68.57s2.18.93,3.11,1.66c.92.73,1.7,1.61,2.32,2.65.62,1.04,1.05,2.22,1.29,3.55h0Z",className:"minioApplicationName"}),r.createElement("path",{d:"m27.23,49.32v-25.82h3.13v23.05h12v2.77h-15.13Z",className:"minioApplicationName"}),r.createElement("path",{d:"m67.98,36.41c0,2.72-.49,5.08-1.48,7.06-.98,1.98-2.33,3.51-4.05,4.59s-3.67,1.61-5.88,1.61-4.16-.54-5.88-1.61-3.06-2.61-4.05-4.59c-.98-1.98-1.48-4.34-1.48-7.06s.49-5.08,1.48-7.06c.98-1.98,2.33-3.51,4.05-4.59,1.71-1.08,3.67-1.61,5.88-1.61s4.16.54,5.88,1.61c1.71,1.08,3.06,2.61,4.05,4.59.98,1.98,1.48,4.34,1.48,7.06Zm-3.03,0c0-2.24-.37-4.12-1.12-5.66-.74-1.54-1.75-2.7-3.01-3.49-1.27-.79-2.68-1.19-4.24-1.19s-2.98.4-4.24,1.19-2.27,1.95-3.01,3.49c-.74,1.54-1.12,3.42-1.12,5.66s.37,4.12,1.12,5.66c.74,1.54,1.75,2.7,3.01,3.49,1.27.79,2.68,1.19,4.24,1.19s2.98-.39,4.24-1.19c1.26-.79,2.27-1.95,3.01-3.49.74-1.54,1.12-3.42,1.12-5.66Z",className:"minioApplicationName"}),r.createElement("path",{d:"m90.17,23.5h3.13v17.1c0,1.76-.41,3.34-1.24,4.72-.83,1.38-1.99,2.47-3.5,3.27-1.5.79-3.27,1.19-5.3,1.19s-3.79-.4-5.3-1.19c-1.5-.79-2.67-1.88-3.5-3.27-.83-1.38-1.24-2.96-1.24-4.72v-17.1h3.13v16.84c0,1.26.28,2.38.83,3.36.55.98,1.35,1.75,2.38,2.31,1.03.56,2.26.84,3.7.84s2.67-.28,3.71-.84c1.03-.56,1.83-1.33,2.38-2.31.55-.98.83-2.1.83-3.36v-16.84Z",className:"minioApplicationName"}),r.createElement("path",{d:"m107.52,49.32h-7.97v-25.82h8.32c2.5,0,4.65.52,6.43,1.54,1.78,1.03,3.15,2.5,4.1,4.43.95,1.92,1.42,4.22,1.42,6.89s-.48,5-1.44,6.94c-.96,1.94-2.35,3.43-4.19,4.46-1.83,1.04-4.06,1.56-6.68,1.56Zm-4.84-2.77h4.64c2.13,0,3.9-.41,5.31-1.24,1.4-.82,2.45-2,3.14-3.52.69-1.52,1.03-3.33,1.03-5.43s-.34-3.88-1.02-5.39c-.68-1.51-1.7-2.67-3.05-3.48-1.35-.81-3.04-1.22-5.06-1.22h-4.99v20.27h0Z",className:"minioApplicationName"}),r.createElement("rect",{x:"21.65",y:".24",width:"3.74",height:"10.97",className:"minioSection"}),r.createElement("path",{d:"m17.14.35l-7.6,4.64c-.11.07-.24.07-.35,0L1.59.35c-.16-.1-.35-.15-.54-.15h0C.47.19,0,.66,0,1.24v9.97h3.74v-4.73c0-.29.32-.47.57-.32l4.26,2.61c.42.26.95.26,1.37.01l4.49-2.64c.25-.15.56.03.56.32v4.75h3.74V1.24c0-.58-.47-1.04-1.04-1.04h0c-.19,0-.38.05-.54.15h0Z",className:"minioSection"}),r.createElement("path",{d:"m44.09.24h-3.8v5.03c0,.28-.3.46-.55.33L29.9.36c-.15-.08-.32-.12-.49-.12h0c-.58,0-1.04.47-1.04,1.04v9.93h3.77v-4.95c0-.28.3-.46.55-.33l9.88,5.24c.15.08.32.12.49.12h0c.58,0,1.04-.47,1.04-1.04V.24h0,0Z",className:"minioSection"}),r.createElement("path",{d:"m47.13,11.21V.24h1.74v10.97h-1.74Z",className:"minioSection"}),r.createElement("path",{d:"m58.89,11.45c-4.63,0-7.92-2.2-7.92-5.72,0-3.5,3.31-5.72,7.92-5.72s7.94,2.2,7.94,5.72-3.25,5.72-7.94,5.72Zm0-9.98c-3.45,0-6.1,1.5-6.1,4.26s2.65,4.26,6.1,4.26,6.12-1.49,6.12-4.26-2.67-4.26-6.12-4.26h0Z",className:"minioSection"}))},Cr=function(e){var t=e.inverse,n=e.onClick;return r.createElement(fr,{viewBox:"0 0 189.7 49.96",inverse:t,onClick:n},r.createElement("g",null,r.createElement("g",null,r.createElement("rect",{x:"21.86",y:".19",width:"3.76",height:"11.1",className:"minioSection"}),r.createElement("path",{d:"m17.3.35l-7.63,4.66c-.11.07-.25.07-.35,0L1.69.35c-.16-.1-.35-.15-.55-.15h0C.55.19.08.66.08,1.24v10.04h3.76v-4.78c0-.21.17-.38.38-.38.07,0,.14.02.2.06l4.28,2.62c.42.26.95.26,1.38.01l4.51-2.65c.18-.1.41-.04.51.14.03.06.05.12.05.19v4.79h3.76V1.24c0-.58-.47-1.05-1.04-1.05h0c-.19,0-.38.05-.55.15Z",className:"minioSection"}),r.createElement("path",{d:"m44.37.19h-3.81v5.05c0,.21-.17.38-.38.38-.06,0-.12-.02-.18-.04L30.12.32c-.15-.08-.32-.12-.49-.12h0c-.58,0-1.05.47-1.05,1.05v10.05h3.78v-5.05c0-.21.17-.38.38-.38.06,0,.12.02.18.04l9.92,5.26c.15.08.32.12.49.12h0c.58,0,1.05-.47,1.05-1.05V.19Z",className:"minioSection"})),r.createElement("path",{d:"m47.32,11.3V.2h1.73v11.1h-1.73Z",className:"minioSection"}),r.createElement("path",{d:"m59.23,11.49c-4.65,0-7.95-2.21-7.95-5.75s3.32-5.75,7.95-5.75,7.98,2.21,7.98,5.75-3.26,5.75-7.98,5.75Zm0-10.02c-3.46,0-6.13,1.51-6.13,4.28s2.67,4.28,6.13,4.28,6.15-1.49,6.15-4.28c0-2.76-2.68-4.28-6.15-4.28Z",className:"minioSection"})),r.createElement("g",null,r.createElement("path",{d:"m0,24.14h10.73c3,0,5.29.67,6.89,2.02,1.6,1.35,2.4,3.25,2.4,5.7,0,2.09-.69,3.8-2.07,5.14s-3.28,2.12-5.71,2.35l7.81,10.17h-6.12l-7.39-10.09h-1.49v10.09H0v-25.37Zm10.64,4.66h-5.58v6.21h5.58c2.79,0,4.19-1.05,4.19-3.15s-1.4-3.06-4.19-3.06Z",className:"minioApplicationName"}),r.createElement("path",{d:"m43.59,44.87v4.64h-18.95v-25.37h18.81v4.64h-13.75v5.62h13.12v4.64h-13.12v5.83h13.9Z",className:"minioApplicationName"}),r.createElement("path",{d:"m67.24,44.78v4.73h-18.46v-25.37h5.06v20.64h13.41Z",className:"minioApplicationName"}),r.createElement("path",{d:"m89.65,44.87v4.64h-18.95v-25.37h18.81v4.64h-13.75v5.62h13.12v4.64h-13.12v5.83h13.9Z",className:"minioApplicationName"}),r.createElement("path",{d:"m108.37,24.14l9.88,25.37h-5.4l-2.21-5.91h-10.82l-2.21,5.91h-5.27l9.88-25.37h6.16Zm-3.13,5l-3.68,9.8h7.34l-3.66-9.8Z",className:"minioApplicationName"}),r.createElement("path",{d:"m140.8,26.4l-2.39,4.13c-2.33-1.44-4.73-2.16-7.19-2.16-1.45,0-2.62.27-3.51.81-.89.54-1.34,1.29-1.34,2.23,0,.45.12.83.36,1.16.24.33.62.6,1.14.82s1.05.4,1.6.53c.55.13,1.26.27,2.13.42l1.43.24c5.39.88,8.08,3.25,8.08,7.1,0,1.35-.28,2.57-.85,3.64-.57,1.08-1.33,1.94-2.3,2.6-.97.66-2.07,1.16-3.3,1.5-1.23.34-2.54.52-3.93.52-1.98,0-3.93-.29-5.84-.86-1.92-.57-3.53-1.39-4.85-2.46l2.63-4.08c.99.79,2.2,1.44,3.62,1.96,1.42.52,2.91.78,4.46.78,1.45,0,2.64-.27,3.58-.81.94-.54,1.4-1.29,1.4-2.25,0-.83-.42-1.46-1.27-1.88-.85-.42-2.22-.78-4.11-1.09l-1.61-.25c-5.16-.81-7.74-3.23-7.74-7.27,0-1.28.27-2.44.82-3.48.54-1.04,1.28-1.88,2.22-2.54.94-.65,2.01-1.15,3.22-1.5,1.21-.35,2.49-.53,3.86-.53,1.79,0,3.46.21,5,.64s3.11,1.11,4.69,2.06Z",className:"minioApplicationName"}),r.createElement("path",{d:"m164.66,44.87v4.64h-18.95v-25.37h18.81v4.64h-13.75v5.62h13.12v4.64h-13.12v5.83h13.9Z",className:"minioApplicationName"}),r.createElement("path",{d:"m189.4,26.4l-2.39,4.13c-2.33-1.44-4.73-2.16-7.19-2.16-1.45,0-2.62.27-3.51.81-.89.54-1.34,1.29-1.34,2.23,0,.45.12.83.36,1.16.24.33.62.6,1.14.82s1.05.4,1.6.53c.55.13,1.26.27,2.13.42l1.43.24c5.39.88,8.08,3.25,8.08,7.1,0,1.35-.28,2.57-.85,3.64-.57,1.08-1.33,1.94-2.3,2.6-.97.66-2.07,1.16-3.3,1.5-1.23.34-2.54.52-3.93.52-1.98,0-3.93-.29-5.84-.86-1.92-.57-3.53-1.39-4.85-2.46l2.63-4.08c.99.79,2.2,1.44,3.62,1.96,1.42.52,2.91.78,4.46.78,1.45,0,2.64-.27,3.58-.81.94-.54,1.4-1.29,1.4-2.25,0-.83-.42-1.46-1.27-1.88-.85-.42-2.22-.78-4.11-1.09l-1.61-.25c-5.16-.81-7.74-3.23-7.74-7.27,0-1.28.27-2.44.82-3.48.54-1.04,1.28-1.88,2.22-2.54.94-.65,2.01-1.15,3.22-1.5,1.21-.35,2.49-.53,3.86-.53,1.79,0,3.46.21,5,.64s3.11,1.11,4.69,2.06Z",className:"minioApplicationName"})))},wr=function(e){var t=e.inverse,n=e.onClick;return r.createElement(fr,{viewBox:"0 0 189.7 49.96",inverse:t,onClick:n},r.createElement("g",null,r.createElement("g",null,r.createElement("rect",{x:"21.92",y:".09",width:"3.8",height:"11.1",className:"minioSection"}),r.createElement("path",{d:"m17.33.29l-7.6,4.6c-.1.1-.2.1-.4,0L1.73.29c-.2-.1-.4-.2-.5-.2h0C.62.09.12.59.12,1.09v10h3.8v-4.7c0-.2.2-.4.4-.4q.1,0,.2.1l4.3,2.6c.4.3,1,.3,1.4,0l4.4-2.6c.2-.1.4,0,.5.1,0,.1.1.1.1.2v4.8h3.8V1.09c0-.6-.5-1-1-1h0c-.3,0-.5.1-.7.2Z",className:"minioSection"}),r.createElement("path",{d:"m44.42.09h-3.8v5.1c0,.2-.2.4-.4.4h-.2L30.12.19c-.1-.1-.3-.1-.5-.1h0c-.6,0-1,.5-1,1v10h3.8v-5c0-.2.2-.4.4-.4h.2l9.9,5.3c.2.1.3.1.5.1h0c.6,0,1-.5,1-1V.09Z",className:"minioSection"})),r.createElement("path",{d:"m47.33,11.2V.1h1.8v11.1h-1.8Z",className:"minioSection"}),r.createElement("path",{d:"m59.33,11.4c-4.7,0-8-2.2-8-5.7s3.3-5.7,8-5.7,8,2.2,8,5.7-3.3,5.7-8,5.7Zm0-10c-3.5,0-6.2,1.5-6.2,4.2s2.7,4.3,6.1,4.3,6.1-1.5,6.1-4.3c.1-2.7-2.6-4.2-6-4.2Z",className:"minioSection"})),r.createElement("g",null,r.createElement("path",{d:"m21.7,23.5l-8.2,21.8h-5.3L0,23.5h4.6l6.3,17.4,6.3-17.4h4.5Z",className:"minioApplicationName"}),r.createElement("path",{d:"m48.6,23.5v21.8h-4.3v-16.5l-5.4,14.4h-4.6l-5.4-14.2v16.3h-4.3v-21.8h6.4l5.7,14.7,5.7-14.7s6.2,0,6.2,0Z",className:"minioApplicationName"}),r.createElement("path",{d:"m51.9,23.5h8.4c2.4,0,4.4.5,5.8,1.4s2.1,2.4,2.1,4.4c0,1.2-.3,2.2-.9,3-.6.8-1.4,1.4-2.4,1.8,1.1.4,2.1,1,2.7,1.9s1,2,1,3.3c0,2.1-.7,3.6-2.1,4.6s-3.3,1.5-5.9,1.5h-8.9v-21.9h.2Zm8.4,2.4h-5.8v7.2h5.9c.8,0,1.5-.1,2.1-.2s1.2-.3,1.7-.6.9-.6,1.2-1.1c.3-.5.4-1.1.4-1.8s-.1-1.3-.4-1.8-.7-.9-1.2-1.1-1.1-.4-1.7-.6c-.7,0-1.4,0-2.2,0Zm.4,9.5h-6.2v7.5h6.2c.9,0,1.6-.1,2.2-.2.6-.1,1.2-.3,1.7-.6s.9-.7,1.1-1.2.4-1.1.4-1.8c0-1.4-.5-2.3-1.4-2.9s-2.3-.8-4-.8Z",className:"minioApplicationName"}),r.createElement("path",{d:"m73.8,23.5h8.6c2.5,0,4.3.5,5.6,1.6,1.3,1.1,2,2.6,2,4.6s-.7,3.4-2,4.5c-1.4,1.1-3.2,1.7-5.5,1.7h-.4l7.8,9.5h-3.1l-7.7-9.6h-2.8v9.5h-2.5v-21.8Zm8.5,2.4h-6v7.7h6c1.7,0,2.9-.3,3.8-1s1.3-1.6,1.3-2.9-.4-2.2-1.3-2.8-2.1-1-3.8-1Z",className:"minioApplicationName"}),r.createElement("path",{d:"m104.9,23.2c2.1,0,4.1.5,5.8,1.4,1.7,1,3.1,2.3,4,4,1,1.7,1.5,3.6,1.5,5.8s-.5,4.1-1.5,5.8-2.3,3-4,4-3.6,1.4-5.8,1.4c-1.6,0-3.1-.3-4.5-.8-1.4-.6-2.6-1.3-3.6-2.3s-1.8-2.2-2.3-3.6c-.6-1.4-.9-2.9-.9-4.5s.3-3.1.9-4.5,1.4-2.6,2.3-3.6c1-1,2.2-1.8,3.6-2.3s2.9-.8,4.5-.8Zm0,2.4c-1.2,0-2.4.2-3.4.6-1.1.4-2,1-2.7,1.8-.8.8-1.4,1.7-1.8,2.8-.4,1.1-.7,2.3-.7,3.6s.2,2.5.7,3.6c.4,1.1,1,2,1.8,2.8s1.7,1.4,2.7,1.8c1.1.4,2.2.6,3.4.6,1.6,0,3.1-.4,4.4-1.1,1.3-.7,2.3-1.8,3.1-3.1s1.1-2.9,1.1-4.6-.4-3.2-1.1-4.6-1.8-2.4-3.1-3.1c-1.3-.7-2.8-1.1-4.4-1.1Z",className:"minioApplicationName"}),r.createElement("path",{d:"m135.9,45.3l-9.6-9.8h-2.6v9.8h-2.5v-21.8h2.5v9.7h2.6l9.1-9.7h3.2l-10.3,10.7,10.9,11.1h-3.3Z",className:"minioApplicationName"}),r.createElement("path",{d:"m158.2,43v2.4h-15.4v-21.9h15.2v2.4h-12.7v7.3h12.3v2.3h-12.3v7.5h12.9Z",className:"minioApplicationName"}),r.createElement("path",{d:"m163.8,23.5h8.6c2.5,0,4.3.5,5.6,1.6s2,2.6,2,4.6-.7,3.4-2,4.5c-1.4,1.1-3.2,1.7-5.5,1.7h-.4l7.8,9.5h-3.1l-7.7-9.5h-2.8v9.5h-2.5v-21.9Zm8.6,2.4h-6v7.7h6c1.7,0,2.9-.3,3.8-1s1.3-1.6,1.3-2.9-.4-2.2-1.3-2.8-2.2-1-3.8-1Z",className:"minioApplicationName"})))},Nr=function(e){var t=e.inverse,n=e.onClick;return r.createElement(fr,{viewBox:"0 0 149.6 41.2",inverse:t,onClick:n},r.createElement("g",null,r.createElement("path",{className:"minioApplicationName",d:"M45.9,30.5c0,7.1-4.5,10.7-11,10.7s-11-3.6-11-10.7V15.1H29v15.1c0,4.2,2.4,6,5.9,6\n\t\ts5.9-1.8,5.9-6V15.1h5.1L45.9,30.5z"}),r.createElement("path",{className:"minioApplicationName",d:"M93.4,36v4.7H74.7V15.1h18.6v4.7H79.7v5.7h13v4.7h-13V36H93.4z"}),r.createElement("path",{className:"minioApplicationName",d:"M61.3,15.1c6.1,0,9.4,2.9,9.4,7.8c0,4.2-2.9,7.1-7.8,7.5l7.9,10.2h-6.2l-7.5-10.2h-1.5v10.2\n\t\th-5.1V15.1H61.3z M55.6,19.8v6.3h5.6c2.8,0,4.2-1,4.2-3.2c0-2.1-1.5-3.1-4.2-3.1H55.6z"}),r.createElement("path",{className:"minioApplicationName",d:"M106.3,30.2h-2.4v10.5h-5.1V15.1h5.1v10.4h2.4l8.5-10.4h6.4l-10.7,12.5L122,40.7h-6.6\n\t\tL106.3,30.2z"}),r.createElement("path",{className:"minioApplicationName",d:"M149.6,40.7h-5.4l-2.2-6H131l-2.2,6h-5.3l10-25.6h6.2L149.6,40.7z M132.8,30.1h7.4l-3.7-9.9\n\t\tL132.8,30.1z"})),r.createElement("g",null,r.createElement("path",{className:"minioSection",d:"M11.7,0.2L6.5,3.4c-0.1,0-0.2,0-0.2,0L1.1,0.2C1,0.2,0.8,0.1,0.7,0.1h0C0.3,0.1,0,0.5,0,0.8\n\t\tc0,0,0,0,0,0v6.8h2.5V4.4c0-0.1,0.1-0.3,0.3-0.3c0,0,0.1,0,0.1,0L5.8,6c0.3,0.2,0.6,0.2,0.9,0l3.1-1.8c0.1-0.1,0.3,0,0.3,0.1\n\t\tc0,0,0,0.1,0,0.1v3.3h2.5V0.8c0-0.4-0.3-0.7-0.7-0.7c0,0,0,0,0,0h0C11.9,0.1,11.8,0.2,11.7,0.2"}),r.createElement("rect",{x:"14.8",y:"0.1",className:"minioSection",width:"2.5",height:"7.5"}),r.createElement("path",{className:"minioSection",d:"M30,0.1h-2.6v3.4c0,0.1-0.1,0.3-0.3,0.3c0,0-0.1,0-0.1,0l-6.7-3.6c-0.1-0.1-0.2-0.1-0.3-0.1\n\t\tl0,0c-0.4,0-0.7,0.3-0.7,0.7v6.8h2.6V4.2C21.9,4.1,22,4,22.1,4c0,0,0.1,0,0.1,0L29,7.6c0.3,0.2,0.8,0.1,1-0.3C30,7.2,30,7.1,30,6.9\n\t\tL30,0.1z"}),r.createElement("rect",{x:"32",y:"0.1",className:"minioSection",width:"1.2",height:"7.5"}),r.createElement("path",{className:"minioSection",d:"M40.1,7.8c-3.2,0-5.4-1.5-5.4-3.9S37,0,40.1,0s5.4,1.5,5.4,3.9S43.3,7.8,40.1,7.8 M40.1,1\n\t\tC37.8,1,36,2,36,3.9s1.8,2.9,4.2,2.9s4.2-1,4.2-2.9S42.5,1,40.1,1L40.1,1z"}),r.createElement("rect",{className:"minioApplicationName",y:"15",width:"19.1",height:"5"}),r.createElement("rect",{className:"minioApplicationName",y:"25.5",width:"12.8",height:"5"}),r.createElement("rect",{className:"minioApplicationName",y:"36.1",width:"19.1",height:"5"})))},Ir=function(e){var t=e.inverse,n=e.onClick;return r.createElement(fr,{viewBox:"0 0 208.7 51",inverse:t,onClick:n},r.createElement("g",null,r.createElement("path",{id:"Path_116",className:"minioApplicationName",d:"M164.5,50.7c0.3,0,6.8,0,9.5,0v-0.4c-0.3-0.3-0.6-0.5-0.9-0.8c-6.3-5.2-12.5-10.4-18.8-15.5\n\t\tc-1.2-1-1.2-1.1,0-2.1c5.6-4.7,11.2-9.3,16.7-13.9c1-0.8,2-1.7,3.2-2.8c-0.7-0.1-1.1-0.1-1.5-0.1c-2.6,0-5.2-0.1-7.8,0\n\t\tc-0.8,0-1.6,0.3-2.2,0.8c-4.3,3.5-8.4,7.1-12.7,10.7c-0.4,0.3-0.8,0.5-1.4,1c0-0.8-0.1-1.2-0.1-1.7c0-6,0-12,0-18.1\n\t\tc0-1.1-0.3-1.5-1.4-1.4c-1.2,0.1-2.5,0-3.7,0c-1.2,0-1.7,0.6-1.7,1.7c0,7.2,0,14.3,0,21.5c0,6.6,0,13.1,0,19.7\n\t\tc0,0.5,0.1,0.9,0.3,1.1c0.2,0.2,0.6,0.2,1,0.2c0.8,0,1.6,0.1,2.4,0.1c0.7,0,1.4-0.1,2-0.1c0.4,0,0.7,0,0.9-0.2\n\t\tc0.2-0.2,0.3-0.5,0.3-1c0-3.2,0-6.3,0-9.5c0-0.4,0.1-0.9,0.1-1.5c0.6,0.4,1.1,0.7,1.5,1c4.3,3.5,8.3,7,10.5,8.7\n\t\tc0.1,0.1,0.4,0.3,0.8,0.6c1.1,0.8,1.1,0.8,1.9,1.4c0.2,0.1,0.4,0.2,0.6,0.4c0.1,0.1,0.3,0.2,0.4,0.2\n\t\tC164.3,50.6,164.4,50.7,164.5,50.7L164.5,50.7z"}),r.createElement("path",{id:"Path_117",className:"minioApplicationName",d:"M18.8,50.6c-5.5,0-11.1,0-16.6,0c-1.1,0-1.5-0.3-1.5-1.4c0.1-8.6,0.1-17.2,0-25.9\n\t\tC0.6,22.2,1,22,2.1,22c11.1,0,14.7,0,25.8,0c1.1,0,1.5,0.3,1.4,1.4c-0.1,1.4,0,2.9,0,4.3c0,1.1-0.6,1.6-1.7,1.6c-8.5,0-9.5,0-18,0\n\t\tc-1.2,0-1.7,0.3-1.6,1.6c0.1,3.6,0,7.3,0,10.9c0,1.6,0,1.6,1.7,1.6c8.4,0,16.9,0,25.3,0c1.2,0,1.9,0.6,1.9,1.9c0,1.4,0,2.8,0,4.2\n\t\tc0,0.9-0.3,1.2-1.2,1.2C30,50.6,24.4,50.6,18.8,50.6L18.8,50.6z"}),r.createElement("path",{id:"Path_118",className:"minioApplicationName",d:"M72.4,26.6c0,3.2,0.1,6.3,0,9.5c-0.2,8.3-7.5,14.9-15.9,14.6C49,50.6,41.9,44.3,41.7,36\n\t\tc-0.2-6.6,0-13.3-0.1-19.9c0-0.8,0.3-1.1,1.1-1.1c1.5,0,3,0.1,4.5,0c1.1-0.1,1.3,0.4,1.3,1.4c0,6.1,0,12.3,0,18.4\n\t\tc0,3.6,1.4,6.5,4.7,8.3c5.3,2.8,12-0.8,12.2-6.8c0.2-6.4,0.1-12.9,0.1-19.3c0-1.3,0.7-2,2-2c1.2,0,2.3,0.1,3.5,0\n\t\tc1.1-0.1,1.4,0.3,1.4,1.4C72.4,19.8,72.4,23.2,72.4,26.6L72.4,26.6L72.4,26.6z"}),r.createElement("path",{id:"Path_119",className:"minioApplicationName",d:"M77.5,39.5c0-2.9,0-5.9,0-8.8c0.1-7.1,4.2-12.9,10.9-15c2-0.6,4.1-0.6,6.2-0.7\n\t\tc1.4-0.1,2.8,0,4.2,0c0.8,0,1,0.3,1,1c0,1.6,0,3.1,0,4.7c0,0.9-0.3,1.2-1.2,1.1c-1.9,0-3.7,0-5.6,0c-5.1,0.1-8.7,3.6-8.8,8.7\n\t\tc-0.1,6.2-0.1,12.4,0,18.5c0,0.6-0.1,1-0.3,1.2c-0.2,0.2-0.5,0.2-1.1,0.2c-1.3,0-1.9,0.1-2,0.1c-0.1,0-0.7,0-2.1-0.1\n\t\tc-0.5,0-0.8,0-1.1-0.3c-0.2-0.2-0.3-0.6-0.3-1.1C77.5,46.1,77.5,42.8,77.5,39.5L77.5,39.5z"}),r.createElement("path",{id:"Path_120",className:"minioApplicationName",d:"M18.8,7.6c-5.5,0-11.1,0-16.6,0c-1.2,0-1.6-0.4-1.5-1.6c0.1-1.3,0-2.6,0-4\n\t\tc0-1.2,0.6-1.8,1.9-1.8h23.6c3.1,0,6.3,0,9.4,0c0.4-0.1,0.7,0.1,1,0.3c0.2,0.2,0.2,0.5,0.3,1c0,0.4,0,0.7,0,1.1c0,0.3,0,0.7,0,1\n\t\tc0,1.2,0,1.5,0,2.4c0,0.9-0.1,1.1-0.3,1.3c-0.2,0.3-0.7,0.4-1.3,0.3C29.8,7.6,24.3,7.7,18.8,7.6L18.8,7.6z"}),r.createElement("path",{id:"Path_121",className:"minioApplicationName",d:"M123.9,43.1c-0.1,0-0.2,0-0.2,0.1c-2.1,0.9-4.4,1-6.9,0.5c-3.3-0.7-6.1-2.8-7.6-5.8\n\t\tc-0.5-0.9-0.3-1.3,0.7-1.3c0.4,0,0.7,0,1.1,0c8.1,0,16.2,0,24.3,0c1.3,0,1.9-0.5,1.8-1.7c-0.1-2.3,0-4.8-0.6-7\n\t\tc-2.7-9.5-12.5-15.1-22-12.4c-10.7,2.9-16.3,14.7-11.7,24.8c5.2,11.3,19.2,14.1,28.5,5.9c0.7-0.6,1.3-1.2,1.8-1.9\n\t\tc0.2-0.3,0.2-0.7-0.1-0.9c-0.1-0.1-0.3-0.2-0.4-0.2H123.9L123.9,43.1z M119.4,21.6c4.7-0.1,9.8,3.7,10.4,7.4\n\t\tc0.1,0.4-0.2,0.7-0.6,0.8c0,0-0.1,0-0.1,0h-19.7c-0.4,0-0.7-0.3-0.7-0.7c0,0,0-0.1,0-0.1C109.3,25.5,114.8,21.7,119.4,21.6\n\t\tL119.4,21.6L119.4,21.6z"}),r.createElement("path",{id:"Path_122",className:"minioApplicationName",d:"M207.8,50.6h-6c-0.2,0-0.3-0.1-0.3-0.3l0,0v-3.2c-0.4,0.2-0.7,0.3-0.9,0.5\n\t\tc-10.1,6.6-23.1,1.9-26.6-9.6c-2.8-9.3,3.3-19.8,12.9-21.8c10.3-2.2,19.9,4.5,21.3,15c0,0.1,0,0.2,0,0.3c0,6.3,0,12.5,0,18.9\n\t\tC208.1,50.5,208,50.6,207.8,50.6L207.8,50.6z M180.1,33.1c-0.1,5.9,4.6,10.7,10.5,10.7c0,0,0,0,0,0c5.9,0.1,10.7-4.7,10.8-10.6\n\t\tc0,0,0-0.1,0-0.1c0-5.9-4.8-10.7-10.6-10.7C184.9,22.4,180.1,27.2,180.1,33.1C180.1,33.1,180.1,33.1,180.1,33.1L180.1,33.1\n\t\tL180.1,33.1z"}),r.createElement("g",null,r.createElement("rect",{x:"60.8",y:"0.3",className:"minioSection",width:"3.2",height:"8.4"}),r.createElement("g",null,r.createElement("g",null,r.createElement("path",{className:"minioSection",d:"M56.8,0.4L50.3,4C50.2,4,50,4,50,4l-6.6-3.5c-0.1-0.1-0.3-0.1-0.5-0.1h0c-0.5,0-0.9,0.4-0.9,0.8v7.6h3.2\n\t\t\t\t\tV5.1c0-0.2,0.3-0.4,0.5-0.2l3.7,2c0.4,0.2,0.8,0.2,1.2,0l3.9-2c0.2-0.1,0.5,0,0.5,0.2v3.6h3.2V1.1c0-0.4-0.4-0.8-0.9-0.8h0\n\t\t\t\t\tC57.1,0.3,57,0.3,56.8,0.4"}),r.createElement("path",{className:"minioSection",d:"M80.2,0.3h-3.3v3.8c0,0.2-0.3,0.4-0.5,0.2l-8.5-4c-0.1-0.1-0.3-0.1-0.4-0.1h0c-0.5,0-0.9,0.4-0.9,0.8v7.6\n\t\t\t\t\th3.3V4.9c0-0.2,0.3-0.4,0.5-0.2l8.6,4c0.1,0.1,0.3,0.1,0.4,0.1c0.5,0,0.9-0.4,0.9-0.8L80.2,0.3L80.2,0.3z"}),r.createElement("rect",{x:"82.7",y:"0.3",className:"minioSection",width:"1.5",height:"8.4"}),r.createElement("path",{className:"minioSection",d:"M93,8.9c-4,0-6.9-1.7-6.9-4.4S89,0.2,93,0.2c4,0,6.9,1.7,6.9,4.4S97.1,8.9,93,8.9 M93,1.3\n\t\t\t\t\tc-3,0-5.3,1.1-5.3,3.2S90,7.7,93,7.7c3,0,5.3-1.1,5.3-3.2S96,1.3,93,1.3"}))))))},xr=function(e){var t=e.inverse,n=e.onClick;return r.createElement(fr,{viewBox:"0 0 184.538 51",inverse:t,onClick:n},r.createElement("g",null,r.createElement("path",{className:"minioApplicationName",d:"M1.4,50.3V24.1h3.2v13h0.3l11.8-13h4.1l-11,11.8l11,14.4H17L7.9,38.1l-3.3,3.7v8.5H1.4z"}),r.createElement("path",{className:"minioApplicationName",d:"M24.9,24.1h3.8l8.9,21.7h0.3l8.9-21.7h3.8v26.2h-3V30.4h-0.3l-8.2,19.9h-2.9l-8.2-19.9h-0.3v19.9h-3\n\t\tC24.9,50.3,24.9,24.1,24.9,24.1z"}),r.createElement("path",{className:"minioApplicationName",d:"M71.3,30.6c-0.2-1.3-0.8-2.3-1.9-3c-1.1-0.7-2.4-1.1-4-1.1c-1.2,0-2.2,0.2-3,0.6s-1.5,0.9-2,1.5\n\t\tc-0.5,0.7-0.7,1.4-0.7,2.2c0,0.7,0.2,1.3,0.5,1.8c0.3,0.5,0.8,0.9,1.3,1.2c0.5,0.3,1.1,0.6,1.7,0.8c0.6,0.2,1.1,0.4,1.6,0.5\n\t\tl2.7,0.7c0.7,0.2,1.4,0.4,2.3,0.7c0.8,0.3,1.6,0.7,2.4,1.3c0.8,0.5,1.4,1.2,1.9,2.1c0.5,0.8,0.8,1.9,0.8,3.1c0,1.4-0.4,2.7-1.1,3.8\n\t\tc-0.7,1.1-1.8,2.1-3.2,2.7c-1.4,0.7-3.1,1-5.1,1c-1.9,0-3.5-0.3-4.9-0.9c-1.4-0.6-2.4-1.4-3.2-2.5c-0.8-1.1-1.2-2.3-1.3-3.8h3.3\n\t\tc0.1,1,0.4,1.8,1,2.4c0.6,0.6,1.3,1.1,2.2,1.4c0.9,0.3,1.9,0.5,2.9,0.5c1.2,0,2.3-0.2,3.3-0.6c1-0.4,1.7-1,2.3-1.7\n\t\tc0.6-0.7,0.8-1.5,0.8-2.5c0-0.9-0.2-1.6-0.7-2.1c-0.5-0.5-1.1-1-1.9-1.3c-0.8-0.3-1.7-0.6-2.6-0.9l-3.2-0.9c-2-0.6-3.7-1.4-4.9-2.5\n\t\tc-1.2-1.1-1.8-2.5-1.8-4.3c0-1.5,0.4-2.7,1.2-3.8c0.8-1.1,1.9-1.9,3.2-2.6c1.4-0.6,2.9-0.9,4.5-0.9c1.7,0,3.2,0.3,4.5,0.9\n\t\tc1.3,0.6,2.4,1.4,3.1,2.5c0.8,1,1.2,2.2,1.2,3.5L71.3,30.6L71.3,30.6z"}),r.createElement("rect",{x:"22",y:"0.5",className:"minioSection",width:"3.8",height:"11.1"}),r.createElement("path",{className:"minioSection",d:"M17.4,0.6L9.7,5.3c-0.1,0.1-0.2,0.1-0.4,0L1.6,0.6C1.5,0.5,1.3,0.4,1.1,0.4h0C0.5,0.4,0,0.9,0,1.5v10.1h3.8\n\t\tV6.8c0-0.3,0.3-0.5,0.6-0.3l4.3,2.6c0.4,0.3,1,0.3,1.4,0l4.6-2.7c0.3-0.1,0.6,0,0.6,0.3v4.8H19V1.5c0-0.6-0.5-1.1-1.1-1.1h0\n\t\tC17.8,0.4,17.6,0.5,17.4,0.6L17.4,0.6z"}),r.createElement("path",{className:"minioSection",d:"M44.7,0.5h-3.9v5.1c0,0.3-0.3,0.5-0.6,0.3l-10-5.3c-0.2-0.1-0.3-0.1-0.5-0.1h0c-0.6,0-1.1,0.5-1.1,1.1v10.1\n\t\th3.8v-5c0-0.3,0.3-0.5,0.6-0.3l10,5.3c0.2,0.1,0.3,0.1,0.5,0.1l0,0c0.6,0,1.1-0.5,1.1-1.1L44.7,0.5L44.7,0.5L44.7,0.5z"}),r.createElement("path",{className:"minioSection",d:"M47.8,11.6V0.5h1.8v11.1L47.8,11.6L47.8,11.6z"}),r.createElement("path",{className:"minioSection",d:"M59.8,11.9c-4.7,0-8-2.2-8-5.8c0-3.6,3.4-5.8,8-5.8c4.7,0,8.1,2.2,8.1,5.8S64.5,11.9,59.8,11.9z M59.8,1.7\n\t\tc-3.5,0-6.2,1.5-6.2,4.3c0,2.8,2.7,4.3,6.2,4.3c3.5,0,6.2-1.5,6.2-4.3C66,3.3,63.3,1.7,59.8,1.7L59.8,1.7z"})))},Rr=function(e){var t=e.inverse,n=e.onClick;return r.createElement(fr,{viewBox:"0 0 288.6 51",inverse:t,onClick:n},r.createElement("g",null,r.createElement("path",{className:"minioApplicationName",d:"M1,50.5V24.1h4.8v22.4h11.6v4H1z"}),r.createElement("path",{className:"minioApplicationName",d:"M44.1,37.3c0,2.8-0.5,5.3-1.6,7.3s-2.5,3.6-4.3,4.6c-1.8,1.1-3.9,1.6-6.2,1.6c-2.3,0-4.4-0.5-6.2-1.6\n\t\tc-1.8-1.1-3.3-2.6-4.3-4.7c-1.1-2-1.6-4.5-1.6-7.3c0-2.8,0.5-5.3,1.6-7.3c1.1-2,2.5-3.6,4.3-4.6c1.8-1.1,3.9-1.6,6.2-1.6\n\t\tc2.3,0,4.4,0.5,6.2,1.6c1.8,1.1,3.3,2.6,4.3,4.6C43.6,32.1,44.1,34.5,44.1,37.3z M39.3,37.3c0-2-0.3-3.7-0.9-5.1\n\t\tc-0.6-1.4-1.5-2.4-2.6-3.1c-1.1-0.7-2.4-1.1-3.8-1.1c-1.4,0-2.7,0.4-3.8,1.1c-1.1,0.7-2,1.8-2.6,3.1c-0.6,1.4-0.9,3.1-0.9,5.1\n\t\tc0,2,0.3,3.7,0.9,5.1c0.6,1.4,1.5,2.4,2.6,3.1c1.1,0.7,2.4,1.1,3.8,1.1c1.4,0,2.7-0.4,3.8-1.1c1.1-0.7,2-1.8,2.6-3.1\n\t\tC39,41,39.3,39.3,39.3,37.3z"}),r.createElement("path",{className:"minioApplicationName",d:"M50.6,50.5h-5.1l9.3-26.4h5.9L70,50.5h-5.1l-7.1-21h-0.2L50.6,50.5z M50.8,40.2h13.9V44H50.8V40.2z"}),r.createElement("path",{className:"minioApplicationName",d:"M82.4,50.5h-8.9V24.1h9.1c2.6,0,4.9,0.5,6.8,1.6c1.9,1.1,3.3,2.6,4.4,4.5c1,2,1.5,4.3,1.5,7.1\n\t\tc0,2.8-0.5,5.1-1.5,7.1s-2.5,3.5-4.4,4.6C87.4,50,85.1,50.5,82.4,50.5L82.4,50.5z M78.3,46.4h3.9c1.8,0,3.4-0.3,4.6-1\n\t\tc1.2-0.7,2.2-1.7,2.8-3c0.6-1.3,0.9-3,0.9-5c0-2-0.3-3.7-0.9-5c-0.6-1.3-1.5-2.3-2.7-3c-1.2-0.7-2.7-1-4.5-1h-4.1L78.3,46.4\n\t\tL78.3,46.4z"}),r.createElement("path",{className:"minioApplicationName",d:"M100.7,50.5V24.1h8.9c1.7,0,3.2,0.3,4.3,0.9c1.1,0.6,2,1.4,2.6,2.5c0.6,1,0.9,2.2,0.9,3.5c0,1.1-0.2,2-0.6,2.8\n\t\tc-0.4,0.8-0.9,1.4-1.5,1.9c-0.6,0.5-1.3,0.8-2.1,1V37c0.9,0.1,1.7,0.4,2.5,0.9c0.8,0.5,1.5,1.3,2,2.2s0.8,2.1,0.8,3.5\n\t\tc0,1.3-0.3,2.5-0.9,3.6c-0.6,1-1.5,1.9-2.7,2.5c-1.2,0.6-2.8,0.9-4.7,0.9H100.7z M103.1,36.1h6.7c1,0,2-0.2,2.7-0.6\n\t\tc0.8-0.4,1.4-1,1.8-1.8c0.4-0.8,0.7-1.6,0.7-2.6c0-1.4-0.5-2.5-1.4-3.4c-0.9-0.9-2.3-1.3-4.1-1.3h-6.5V36.1z M103.1,48.4h7\n\t\tc2,0,3.5-0.5,4.5-1.4c1-0.9,1.5-2,1.5-3.4c0-1-0.2-1.9-0.7-2.7c-0.5-0.8-1.2-1.5-2-2c-0.9-0.5-1.9-0.7-3.1-0.7h-7.1V48.4z"}),r.createElement("path",{className:"minioApplicationName",d:"M124.2,50.5h-2.5l9.6-26.4h2.6l9.6,26.4H141l-8.3-23.3h-0.2L124.2,50.5z M126,40.4h13.1v2.2H126V40.4z"}),r.createElement("path",{className:"minioApplicationName",d:"M148,50.5V24.1h2.4v24.2H163v2.2H148z"}),r.createElement("path",{className:"minioApplicationName",d:"M170.1,50.5h-2.5l9.6-26.4h2.6l9.6,26.4h-2.5l-8.3-23.3h-0.2L170.1,50.5L170.1,50.5z M171.9,40.4H185v2.2\n\t\th-13.1L171.9,40.4L171.9,40.4z"}),r.createElement("path",{className:"minioApplicationName",d:"M214.5,24.1v26.4h-2.3l-15.6-22.1h-0.2v22.1h-2.4V24.1h2.3l15.6,22.1h0.2V24.1\n\t\tC212.1,24.1,214.5,24.1,214.5,24.1z"}),r.createElement("path",{className:"minioApplicationName",d:"M242.1,32.4h-2.4c-0.2-0.9-0.5-1.7-1-2.5c-0.5-0.8-1.1-1.4-1.8-2c-0.7-0.6-1.5-1-2.4-1.3\n\t\tc-0.9-0.3-1.9-0.5-2.9-0.5c-1.7,0-3.2,0.4-4.6,1.3c-1.4,0.9-2.5,2.1-3.3,3.8c-0.8,1.7-1.2,3.7-1.2,6.2c0,2.4,0.4,4.5,1.2,6.2\n\t\tc0.8,1.7,1.9,2.9,3.3,3.8c1.4,0.9,2.9,1.3,4.6,1.3c1,0,2-0.2,2.9-0.5c0.9-0.3,1.7-0.8,2.4-1.3c0.7-0.6,1.3-1.2,1.8-2\n\t\tc0.5-0.8,0.8-1.6,1-2.5h2.4c-0.2,1.2-0.6,2.3-1.2,3.4c-0.6,1-1.3,2-2.2,2.7c-0.9,0.8-1.9,1.4-3.1,1.8c-1.2,0.4-2.5,0.7-3.9,0.7\n\t\tc-2.2,0-4.2-0.6-5.9-1.7c-1.7-1.1-3.1-2.7-4-4.7c-1-2-1.5-4.4-1.5-7.2s0.5-5.2,1.5-7.2c1-2,2.3-3.6,4-4.7c1.7-1.1,3.7-1.7,5.9-1.7\n\t\tc1.4,0,2.7,0.2,3.9,0.7c1.2,0.4,2.2,1,3.1,1.8c0.9,0.8,1.7,1.7,2.2,2.7C241.5,30,241.9,31.2,242.1,32.4z"}),r.createElement("path",{className:"minioApplicationName",d:"M247.8,50.5V24.1h15.3v2.2h-12.9v9.9h12.1v2.2h-12.1v10h13.2v2.2H247.8z"}),r.createElement("path",{className:"minioApplicationName",d:"M269.4,50.5V24.1h8.5c1.9,0,3.4,0.3,4.7,1c1.3,0.7,2.2,1.6,2.8,2.8c0.6,1.2,1,2.6,1,4.1c0,1.5-0.3,2.9-1,4.1\n\t\tc-0.6,1.2-1.6,2.1-2.8,2.8s-2.8,1-4.7,1h-7.3v-2.2h7.2c1.4,0,2.5-0.2,3.4-0.7c0.9-0.5,1.6-1.1,2-1.9c0.5-0.8,0.7-1.8,0.7-3\n\t\tc0-1.2-0.2-2.2-0.7-3c-0.5-0.9-1.1-1.5-2.1-2c-0.9-0.5-2.1-0.7-3.5-0.7h-6v24.2H269.4z M281,38.6l6.5,11.9h-2.8l-6.4-11.9H281z"}),r.createElement("rect",{x:"22.3",y:"0.4",className:"minioSection",width:"3.8",height:"11.2"}),r.createElement("path",{className:"minioSection",d:"M17.7,0.5L9.9,5.2c-0.1,0.1-0.2,0.1-0.4,0L1.8,0.5C1.6,0.4,1.4,0.3,1.2,0.3h0c-0.6,0-1.1,0.5-1.1,1.1v10.2H4\n\t\tV6.7c0-0.3,0.3-0.5,0.6-0.3l4.4,2.7c0.4,0.3,1,0.3,1.4,0l4.6-2.7c0.3-0.1,0.6,0,0.6,0.3v4.9h3.8V1.4c0-0.6-0.5-1.1-1.1-1.1h0\n\t\tC18,0.3,17.8,0.4,17.7,0.5L17.7,0.5z"}),r.createElement("path",{className:"minioSection",d:"M45.2,0.4h-3.9v5.1c0,0.3-0.3,0.5-0.6,0.3L30.7,0.5c-0.2-0.1-0.3-0.1-0.5-0.1h0c-0.6,0-1.1,0.5-1.1,1.1v10.1\n\t\tH33V6.5c0-0.3,0.3-0.5,0.6-0.3l10.1,5.4c0.2,0.1,0.3,0.1,0.5,0.1l0,0c0.6,0,1.1-0.5,1.1-1.1L45.2,0.4L45.2,0.4L45.2,0.4z"}),r.createElement("path",{className:"minioSection",d:"M48.3,11.6V0.4h1.8v11.2L48.3,11.6L48.3,11.6z"}),r.createElement("path",{className:"minioSection",d:"M60.3,11.8c-4.7,0-8.1-2.2-8.1-5.9c0-3.6,3.4-5.9,8.1-5.9c4.7,0,8.1,2.2,8.1,5.9S65.1,11.8,60.3,11.8z\n\t\t M60.3,1.6c-3.5,0-6.2,1.5-6.2,4.4c0,2.8,2.7,4.4,6.2,4.4c3.5,0,6.3-1.5,6.3-4.4C66.6,3.1,63.9,1.6,60.3,1.6L60.3,1.6z"})))},kr=function(e){var t=e.inverse,n=e.onClick;return r.createElement(fr,{viewBox:"0 0 184.538 51",inverse:t,onClick:n},r.createElement("g",null,r.createElement("path",{className:"minioApplicationName",d:"M4.7,24.3V51H1.5V24.3C1.5,24.3,4.7,24.3,4.7,24.3z"}),r.createElement("path",{className:"minioApplicationName",d:"M32.3,24.3V51h-3.1L14.7,30h-0.3v21h-3.2V24.3h3.1l14.6,21h0.3v-21C29.2,24.3,32.3,24.3,32.3,24.3z"}),r.createElement("path",{className:"minioApplicationName",d:"M47,51h-8.2V24.3h8.6c2.6,0,4.8,0.5,6.6,1.6c1.8,1.1,3.3,2.6,4.2,4.6c1,2,1.5,4.4,1.5,7.1\n\t\tc0,2.8-0.5,5.2-1.5,7.2c-1,2-2.4,3.5-4.3,4.6C52.1,50.5,49.7,51,47,51z M42,48.1h4.8c2.2,0,4-0.4,5.5-1.3c1.5-0.9,2.5-2.1,3.2-3.6\n\t\tc0.7-1.6,1.1-3.4,1.1-5.6c0-2.2-0.4-4-1.1-5.6c-0.7-1.6-1.8-2.8-3.2-3.6c-1.4-0.8-3.1-1.3-5.2-1.3H42V48.1L42,48.1z"}),r.createElement("path",{className:"minioApplicationName",d:"M65.2,51V24.3h16.1v2.9H68.4v9h12v2.9h-12v9.1h13.1V51H65.2z"}),r.createElement("path",{className:"minioApplicationName",d:"M88.7,24.3l6.9,11.1h0.2l6.9-11.1h3.8l-8.4,13.4l8.4,13.4h-3.8l-6.9-10.9h-0.2L88.7,51h-3.8l8.6-13.4\n\t\tl-8.6-13.4C84.9,24.3,88.7,24.3,88.7,24.3z"}),r.createElement("rect",{x:"22.4",y:"0.3",className:"minioSection",width:"3.9",height:"11.3"}),r.createElement("path",{className:"minioSection",d:"M17.7,0.4L9.9,5.2c-0.1,0.1-0.3,0.1-0.4,0L1.6,0.4C1.5,0.3,1.3,0.2,1.1,0.2h0C0.5,0.2,0,0.7,0,1.3v10.3h3.9\n\t\tV6.7c0-0.3,0.3-0.5,0.6-0.3l4.4,2.7c0.4,0.3,1,0.3,1.4,0l4.6-2.7c0.3-0.2,0.6,0,0.6,0.3v4.9h3.9V1.3c0-0.6-0.5-1.1-1.1-1.1h0\n\t\tC18.1,0.2,17.9,0.3,17.7,0.4L17.7,0.4z"}),r.createElement("path",{className:"minioSection",d:"M45.6,0.2h-3.9v5.2c0,0.3-0.3,0.5-0.6,0.3L30.9,0.4c-0.2-0.1-0.3-0.1-0.5-0.1h0c-0.6,0-1.1,0.5-1.1,1.1v10.3\n\t\th3.9V6.5c0-0.3,0.3-0.5,0.6-0.3L44,11.5c0.2,0.1,0.3,0.1,0.5,0.1l0,0c0.6,0,1.1-0.5,1.1-1.1L45.6,0.2L45.6,0.2L45.6,0.2z"}),r.createElement("path",{className:"minioSection",d:"M48.7,11.6V0.2h1.8v11.3L48.7,11.6L48.7,11.6z"}),r.createElement("path",{className:"minioSection",d:"M60.9,11.8c-4.8,0-8.2-2.3-8.2-5.9c0-3.6,3.4-5.9,8.2-5.9c4.8,0,8.2,2.3,8.2,5.9S65.8,11.8,60.9,11.8z\n\t\t M60.9,1.5c-3.6,0-6.3,1.6-6.3,4.4c0,2.9,2.7,4.4,6.3,4.4c3.6,0,6.3-1.5,6.3-4.4C67.2,3.1,64.5,1.5,60.9,1.5L60.9,1.5z"})))},Or=function(e){var t=e.inverse,n=e.onClick;return r.createElement(fr,{viewBox:"0 0 184.538 51",inverse:t,onClick:n},r.createElement("g",null,r.createElement("path",{className:"minioApplicationName",d:"M22.8,32.4h-3.2c-0.2-0.9-0.5-1.7-1-2.4c-0.5-0.7-1-1.3-1.7-1.8c-0.7-0.5-1.4-0.8-2.2-1.1\n\t\tc-0.8-0.2-1.7-0.4-2.5-0.4c-1.6,0-3.1,0.4-4.4,1.2s-2.3,2-3.1,3.6c-0.8,1.6-1.1,3.5-1.1,5.8s0.4,4.2,1.1,5.8\n\t\tc0.8,1.6,1.8,2.8,3.1,3.6c1.3,0.8,2.8,1.2,4.4,1.2c0.9,0,1.7-0.1,2.5-0.4c0.8-0.2,1.6-0.6,2.2-1.1c0.7-0.5,1.2-1.1,1.7-1.8\n\t\tc0.5-0.7,0.8-1.5,1-2.4h3.2c-0.2,1.4-0.7,2.6-1.3,3.6c-0.6,1.1-1.4,2-2.4,2.7c-0.9,0.7-2,1.3-3.2,1.7c-1.2,0.4-2.4,0.6-3.8,0.6\n\t\tc-2.3,0-4.3-0.6-6-1.7s-3.1-2.7-4.2-4.7c-1-2-1.5-4.5-1.5-7.2c0-2.8,0.5-5.2,1.5-7.2c1-2,2.4-3.6,4.2-4.7c1.8-1.1,3.8-1.7,6-1.7\n\t\tc1.3,0,2.6,0.2,3.8,0.6c1.2,0.4,2.2,1,3.2,1.7c0.9,0.7,1.7,1.7,2.4,2.7C22.1,29.8,22.5,31,22.8,32.4L22.8,32.4z"}),r.createElement("path",{className:"minioApplicationName",d:"M29,50.6h-3.4l9.7-26.5h3.3l9.7,26.5h-3.4l-7.9-22.3H37L29,50.6z M30.3,40.3h13.6v2.8H30.3V40.3z"}),r.createElement("path",{className:"minioApplicationName",d:"M72.7,32.4h-3.2c-0.2-0.9-0.5-1.7-1-2.4c-0.5-0.7-1-1.3-1.7-1.8c-0.7-0.5-1.4-0.8-2.2-1.1\n\t\tc-0.8-0.2-1.7-0.4-2.5-0.4c-1.6,0-3.1,0.4-4.4,1.2c-1.3,0.8-2.3,2-3.1,3.6c-0.8,1.6-1.1,3.5-1.1,5.8s0.4,4.2,1.1,5.8\n\t\tc0.8,1.6,1.8,2.8,3.1,3.6C59,47.6,60.4,48,62,48c0.9,0,1.7-0.1,2.5-0.4c0.8-0.2,1.6-0.6,2.2-1.1c0.7-0.5,1.2-1.1,1.7-1.8\n\t\tc0.5-0.7,0.8-1.5,1-2.4h3.2c-0.2,1.4-0.7,2.6-1.3,3.6c-0.6,1.1-1.4,2-2.4,2.7c-0.9,0.7-2,1.3-3.2,1.7C64.6,50.8,63.4,51,62,51\n\t\tc-2.3,0-4.3-0.6-6-1.7c-1.8-1.1-3.1-2.7-4.2-4.7c-1-2-1.5-4.5-1.5-7.2c0-2.8,0.5-5.2,1.5-7.2c1-2,2.4-3.6,4.2-4.7\n\t\tc1.8-1.1,3.8-1.7,6-1.7c1.3,0,2.6,0.2,3.8,0.6c1.2,0.4,2.2,1,3.2,1.7c0.9,0.7,1.7,1.7,2.4,2.7C72,29.8,72.5,31,72.7,32.4L72.7,32.4\n\t\tz"}),r.createElement("path",{className:"minioApplicationName",d:"M77.9,50.6V24.1h3.2v11.8h14.1V24.1h3.2v26.5h-3.2V38.8H81.1v11.9H77.9L77.9,50.6z"}),r.createElement("path",{className:"minioApplicationName",d:"M104.9,50.6V24.1h16V27h-12.8v9h12v2.8h-12v9h13v2.8H104.9z"}),r.createElement("rect",{x:"22.2",y:"0.2",className:"minioSection",width:"3.8",height:"11.3"}),r.createElement("path",{className:"minioSection",d:"M17.6,0.4L9.8,5.1c-0.1,0.1-0.3,0.1-0.4,0L1.6,0.4C1.5,0.3,1.3,0.2,1.1,0.2h0C0.5,0.2,0,0.7,0,1.3v10.2h3.8\n\t\tV6.6c0-0.3,0.3-0.5,0.6-0.3L8.8,9c0.4,0.3,1,0.3,1.4,0l4.6-2.7c0.3-0.2,0.6,0,0.6,0.3v4.9h3.8V1.3c0-0.6-0.5-1.1-1.1-1.1h0\n\t\tC18,0.2,17.8,0.3,17.6,0.4L17.6,0.4z"}),r.createElement("path",{className:"minioSection",d:"M45.3,0.2h-3.9v5.2c0,0.3-0.3,0.5-0.6,0.3L30.7,0.4c-0.2-0.1-0.3-0.1-0.5-0.1h0c-0.6,0-1.1,0.5-1.1,1.1v10.2\n\t\tH33V6.4c0-0.3,0.3-0.5,0.6-0.3l10.1,5.4c0.2,0.1,0.3,0.1,0.5,0.1l0,0c0.6,0,1.1-0.5,1.1-1.1L45.3,0.2L45.3,0.2L45.3,0.2z"}),r.createElement("path",{className:"minioSection",d:"M48.4,11.5V0.2h1.8v11.3L48.4,11.5L48.4,11.5z"}),r.createElement("path",{className:"minioSection",d:"M60.5,11.8c-4.8,0-8.1-2.3-8.1-5.9c0-3.6,3.4-5.9,8.1-5.9c4.7,0,8.2,2.3,8.2,5.9S65.3,11.8,60.5,11.8z\n\t\t M60.5,1.5c-3.5,0-6.3,1.5-6.3,4.4c0,2.8,2.7,4.4,6.3,4.4c3.5,0,6.3-1.5,6.3-4.4C66.7,3,64,1.5,60.5,1.5L60.5,1.5z"})))},Lr=function(e){var t=e.inverse,n=e.onClick;return r.createElement(fr,{viewBox:"0 0 167.8 51",inverse:t,onClick:n},r.createElement("g",null,r.createElement("path",{className:"minioApplicationName",d:"M1.4,24.1h3.8l9,22h0.3l9-22h3.8v26.5h-3V30.5h-0.3l-8.3,20.1H13L4.7,30.5H4.5v20.1h-3V24.1z"}),r.createElement("path",{className:"minioApplicationName",d:"M56.2,37.4c0,2.8-0.5,5.2-1.5,7.2c-1,2-2.4,3.6-4.2,4.7c-1.8,1.1-3.8,1.7-6,1.7c-2.3,0-4.3-0.6-6-1.7\n\t\tc-1.8-1.1-3.1-2.7-4.2-4.7c-1-2-1.5-4.5-1.5-7.2c0-2.8,0.5-5.2,1.5-7.2c1-2,2.4-3.6,4.2-4.7c1.8-1.1,3.8-1.7,6-1.7\n\t\tc2.3,0,4.3,0.6,6,1.7c1.8,1.1,3.1,2.7,4.2,4.7C55.7,32.2,56.2,34.6,56.2,37.4z M53.1,37.4c0-2.3-0.4-4.2-1.1-5.8\n\t\tc-0.8-1.6-1.8-2.8-3.1-3.6c-1.3-0.8-2.8-1.2-4.4-1.2s-3.1,0.4-4.4,1.2c-1.3,0.8-2.3,2-3.1,3.6c-0.8,1.6-1.1,3.5-1.1,5.8\n\t\ts0.4,4.2,1.1,5.8c0.8,1.6,1.8,2.8,3.1,3.6c1.3,0.8,2.8,1.2,4.4,1.2s3.1-0.4,4.4-1.2c1.3-0.8,2.3-2,3.1-3.6\n\t\tC52.7,41.6,53.1,39.7,53.1,37.4z"}),r.createElement("path",{className:"minioApplicationName",d:"M82.6,24.1v26.5h-3.1L65.1,29.8h-0.3v20.8h-3.2V24.1h3.1L79.2,45h0.3V24.1H82.6z"}),r.createElement("path",{className:"minioApplicationName",d:"M92.3,24.1v26.5h-3.2V24.1H92.3z"}),r.createElement("path",{className:"minioApplicationName",d:"M97.2,27v-2.8h19.9V27h-8.3v23.7h-3.2V27H97.2z"}),r.createElement("path",{className:"minioApplicationName",d:"M143.4,37.4c0,2.8-0.5,5.2-1.5,7.2c-1,2-2.4,3.6-4.2,4.7c-1.8,1.1-3.8,1.7-6,1.7c-2.3,0-4.3-0.6-6-1.7\n\t\tc-1.8-1.1-3.1-2.7-4.2-4.7c-1-2-1.5-4.5-1.5-7.2c0-2.8,0.5-5.2,1.5-7.2c1-2,2.4-3.6,4.2-4.7c1.8-1.1,3.8-1.7,6-1.7\n\t\tc2.3,0,4.3,0.6,6,1.7c1.8,1.1,3.1,2.7,4.2,4.7C142.9,32.2,143.4,34.6,143.4,37.4z M140.3,37.4c0-2.3-0.4-4.2-1.1-5.8\n\t\tc-0.8-1.6-1.8-2.8-3.1-3.6c-1.3-0.8-2.8-1.2-4.4-1.2c-1.6,0-3.1,0.4-4.4,1.2s-2.3,2-3.1,3.6c-0.8,1.6-1.1,3.5-1.1,5.8\n\t\ts0.4,4.2,1.1,5.8c0.8,1.6,1.8,2.8,3.1,3.6c1.3,0.8,2.8,1.2,4.4,1.2c1.6,0,3.1-0.4,4.4-1.2c1.3-0.8,2.3-2,3.1-3.6\n\t\tC139.9,41.6,140.3,39.7,140.3,37.4z"}),r.createElement("path",{className:"minioApplicationName",d:"M148.8,50.6V24.1h9c2.1,0,3.8,0.4,5.1,1.1c1.3,0.7,2.3,1.7,3,2.9c0.6,1.2,1,2.6,1,4.2s-0.3,2.9-1,4.2\n\t\tc-0.6,1.2-1.6,2.2-2.9,2.8c-1.3,0.7-3,1-5.1,1h-7.2v-2.9h7.1c1.4,0,2.6-0.2,3.4-0.6c0.9-0.4,1.5-1,1.9-1.8c0.4-0.8,0.6-1.7,0.6-2.7\n\t\tc0-1.1-0.2-2-0.6-2.8c-0.4-0.8-1-1.4-1.9-1.8c-0.9-0.4-2-0.7-3.5-0.7H152v23.7L148.8,50.6L148.8,50.6z M161.2,38.7l6.5,11.9H164\n\t\tl-6.4-11.9H161.2z"}),r.createElement("rect",{x:"22.2",y:"0.2",className:"minioSection",width:"3.8",height:"11.3"}),r.createElement("path",{className:"minioSection",d:"M17.6,0.4L9.8,5.1c-0.1,0.1-0.3,0.1-0.4,0L1.6,0.4C1.5,0.3,1.3,0.2,1.1,0.2h0C0.5,0.2,0,0.7,0,1.3v10.2h3.8\n\t\tV6.6c0-0.3,0.3-0.5,0.6-0.3L8.8,9c0.4,0.3,1,0.3,1.4,0l4.6-2.7c0.3-0.2,0.6,0,0.6,0.3v4.9h3.8V1.3c0-0.6-0.5-1.1-1.1-1.1h0\n\t\tC18,0.2,17.8,0.3,17.6,0.4L17.6,0.4z"}),r.createElement("path",{className:"minioSection",d:"M45.3,0.2h-3.9v5.2c0,0.3-0.3,0.5-0.6,0.3L30.7,0.4c-0.2-0.1-0.3-0.1-0.5-0.1h0c-0.6,0-1.1,0.5-1.1,1.1v10.2\n\t\tH33V6.4c0-0.3,0.3-0.5,0.6-0.3l10.1,5.4c0.2,0.1,0.3,0.1,0.5,0.1l0,0c0.6,0,1.1-0.5,1.1-1.1L45.3,0.2L45.3,0.2L45.3,0.2z"}),r.createElement("path",{className:"minioSection",d:"M48.4,11.5V0.2h1.8v11.3L48.4,11.5L48.4,11.5z"}),r.createElement("path",{className:"minioSection",d:"M60.5,11.8c-4.8,0-8.1-2.3-8.1-5.9c0-3.6,3.4-5.9,8.1-5.9c4.7,0,8.2,2.3,8.2,5.9S65.3,11.8,60.5,11.8z\n\t\t M60.5,1.5c-3.5,0-6.3,1.5-6.3,4.4c0,2.8,2.7,4.4,6.3,4.4c3.5,0,6.3-1.5,6.3-4.4C66.7,3,64,1.5,60.5,1.5L60.5,1.5z"})))},Dr=function(e){var t=e.inverse,n=e.onClick;return r.createElement(fr,{viewBox:"0 0 161.2 51",inverse:t,onClick:n},r.createElement("g",null,r.createElement("path",{className:"minioApplicationName",d:"M23.8,37.3c0,2.8-0.5,5.2-1.5,7.2c-1,2-2.4,3.6-4.1,4.7c-1.8,1.1-3.8,1.7-6,1.7c-2.3,0-4.3-0.6-6-1.7\n\t\ts-3.1-2.7-4.1-4.7c-1-2-1.5-4.4-1.5-7.2s0.5-5.2,1.5-7.2c1-2,2.4-3.6,4.1-4.7c1.8-1.1,3.8-1.7,6-1.7c2.3,0,4.3,0.6,6,1.7\n\t\tc1.8,1.1,3.1,2.7,4.1,4.7C23.3,32.1,23.8,34.5,23.8,37.3z M20.7,37.3c0-2.3-0.4-4.2-1.1-5.8c-0.8-1.6-1.8-2.8-3.1-3.6\n\t\tc-1.3-0.8-2.7-1.2-4.3-1.2S9,27.1,7.7,27.9c-1.3,0.8-2.3,2-3.1,3.6c-0.8,1.6-1.1,3.5-1.1,5.8s0.4,4.2,1.1,5.8\n\t\tc0.8,1.6,1.8,2.8,3.1,3.6c1.3,0.8,2.7,1.2,4.3,1.2s3.1-0.4,4.3-1.2c1.3-0.8,2.3-2,3.1-3.6C20.3,41.5,20.7,39.6,20.7,37.3z"}),r.createElement("path",{className:"minioApplicationName",d:"M29.1,50.5V24.1h9.2c1.8,0,3.4,0.3,4.6,0.9c1.2,0.6,2.1,1.5,2.7,2.5c0.6,1.1,0.9,2.2,0.9,3.5\n\t\tc0,1.1-0.2,2.1-0.6,2.8c-0.4,0.7-0.9,1.3-1.6,1.8c-0.7,0.4-1.4,0.7-2.1,1v0.3c0.8,0.1,1.6,0.3,2.4,0.9c0.8,0.5,1.5,1.3,2.1,2.2\n\t\tc0.6,1,0.8,2.1,0.8,3.5c0,1.3-0.3,2.5-0.9,3.6c-0.6,1.1-1.6,1.9-2.9,2.5c-1.3,0.6-3,0.9-5.1,0.9L29.1,50.5L29.1,50.5z M32.3,35.7\n\t\th5.9c1,0,1.8-0.2,2.6-0.6c0.8-0.4,1.4-0.9,1.9-1.6c0.5-0.7,0.7-1.5,0.7-2.4c0-1.2-0.4-2.2-1.2-3c-0.8-0.8-2.1-1.2-3.8-1.2h-6V35.7z\n\t\t M32.3,47.7h6.4c2.1,0,3.6-0.4,4.5-1.2c0.9-0.8,1.3-1.8,1.3-3c0-0.9-0.2-1.7-0.7-2.5c-0.5-0.8-1.1-1.4-2-1.8\n\t\tc-0.8-0.5-1.8-0.7-3-0.7h-6.5C32.3,38.5,32.3,47.7,32.3,47.7z"}),r.createElement("path",{className:"minioApplicationName",d:"M67.3,30.7c-0.2-1.3-0.8-2.3-1.9-3c-1.1-0.7-2.5-1.1-4.1-1.1c-1.2,0-2.2,0.2-3.1,0.6c-0.9,0.4-1.6,0.9-2,1.6\n\t\tc-0.5,0.7-0.7,1.4-0.7,2.3c0,0.7,0.2,1.3,0.5,1.8c0.3,0.5,0.8,0.9,1.3,1.3c0.5,0.3,1.1,0.6,1.7,0.8c0.6,0.2,1.1,0.4,1.6,0.5\n\t\tl2.7,0.7c0.7,0.2,1.5,0.4,2.3,0.7c0.8,0.3,1.7,0.8,2.4,1.3c0.8,0.5,1.4,1.2,1.9,2.1c0.5,0.9,0.8,1.9,0.8,3.1c0,1.4-0.4,2.7-1.1,3.9\n\t\tc-0.7,1.2-1.8,2.1-3.3,2.8c-1.4,0.7-3.2,1-5.2,1c-1.9,0-3.5-0.3-4.9-0.9c-1.4-0.6-2.5-1.5-3.3-2.6c-0.8-1.1-1.2-2.4-1.3-3.8H55\n\t\tc0.1,1,0.4,1.8,1,2.5c0.6,0.7,1.3,1.1,2.2,1.4c0.9,0.3,1.9,0.5,2.9,0.5c1.2,0,2.3-0.2,3.3-0.6c1-0.4,1.7-1,2.3-1.7\n\t\tc0.6-0.7,0.9-1.6,0.9-2.5c0-0.9-0.2-1.6-0.7-2.1c-0.5-0.6-1.1-1-1.9-1.3s-1.7-0.6-2.6-0.9L59.1,38c-2.1-0.6-3.7-1.4-4.9-2.5\n\t\tc-1.2-1.1-1.8-2.5-1.8-4.3c0-1.5,0.4-2.8,1.2-3.9c0.8-1.1,1.9-2,3.3-2.6c1.4-0.6,2.9-0.9,4.6-0.9c1.7,0,3.2,0.3,4.5,0.9\n\t\tc1.3,0.6,2.4,1.4,3.2,2.5c0.8,1.1,1.2,2.2,1.2,3.6L67.3,30.7L67.3,30.7z"}),r.createElement("path",{className:"minioApplicationName",d:"M76,50.5V24.1h16v2.8H79.2v8.9h11.9v2.8H79.2v9h13v2.8H76z"}),r.createElement("path",{className:"minioApplicationName",d:"M97.8,50.5V24.1h8.9c2.1,0,3.8,0.4,5.1,1.1c1.3,0.7,2.3,1.7,2.9,2.9c0.6,1.2,1,2.6,1,4.2s-0.3,2.9-1,4.1\n\t\tc-0.6,1.2-1.6,2.2-2.9,2.8c-1.3,0.7-3,1-5.1,1h-7.2v-2.9h7.1c1.4,0,2.6-0.2,3.4-0.6c0.9-0.4,1.5-1,1.9-1.8c0.4-0.8,0.6-1.7,0.6-2.7\n\t\tc0-1.1-0.2-2-0.6-2.8c-0.4-0.8-1-1.4-1.9-1.8c-0.9-0.4-2-0.7-3.4-0.7H101v23.6L97.8,50.5L97.8,50.5z M110.2,38.6l6.5,11.9H113\n\t\tl-6.4-11.9H110.2z"}),r.createElement("path",{className:"minioApplicationName",d:"M121.5,24.1l7.9,22.3h0.3l7.9-22.3h3.4l-9.7,26.5h-3.3l-9.7-26.5H121.5z"}),r.createElement("path",{className:"minioApplicationName",d:"M145,50.5V24.1h16v2.8h-12.8v8.9h11.9v2.8h-11.9v9h13v2.8H145z"}),r.createElement("rect",{x:"22.2",y:"0.2",className:"minioSection",width:"3.8",height:"11.2"}),r.createElement("path",{className:"minioSection",d:"M17.6,0.4L9.8,5.1c-0.1,0.1-0.2,0.1-0.4,0L1.6,0.4C1.5,0.3,1.3,0.2,1.1,0.2h0C0.5,0.2,0,0.7,0,1.3v10.2h3.8\n\t\tV6.6c0-0.3,0.3-0.5,0.6-0.3L8.8,9c0.4,0.3,1,0.3,1.4,0l4.6-2.7c0.3-0.1,0.6,0,0.6,0.3v4.9h3.8V1.3c0-0.6-0.5-1.1-1.1-1.1h0\n\t\tC17.9,0.2,17.7,0.3,17.6,0.4L17.6,0.4z"}),r.createElement("path",{className:"minioSection",d:"M45.2,0.2h-3.9v5.2c0,0.3-0.3,0.5-0.6,0.3L30.6,0.4c-0.2-0.1-0.3-0.1-0.5-0.1h0c-0.6,0-1.1,0.5-1.1,1.1v10.2\n\t\th3.9V6.4c0-0.3,0.3-0.5,0.6-0.3l10.1,5.4c0.2,0.1,0.3,0.1,0.5,0.1l0,0c0.6,0,1.1-0.5,1.1-1.1L45.2,0.2L45.2,0.2L45.2,0.2z"}),r.createElement("path",{className:"minioSection",d:"M48.3,11.5V0.2h1.8v11.2L48.3,11.5L48.3,11.5z"}),r.createElement("path",{className:"minioSection",d:"M60.3,11.7c-4.7,0-8.1-2.3-8.1-5.9c0-3.6,3.4-5.9,8.1-5.9c4.7,0,8.1,2.3,8.1,5.9S65.2,11.7,60.3,11.7z\n\t\t M60.3,1.5c-3.5,0-6.2,1.5-6.2,4.4c0,2.8,2.7,4.4,6.2,4.4c3.5,0,6.3-1.5,6.3-4.4C66.6,3,63.9,1.5,60.3,1.5L60.3,1.5z"})))},Mr=function(e){var t=e.inverse,n=e.onClick;return r.createElement(fr,{viewBox:"0 0 327.6 51",inverse:t,onClick:n},r.createElement("g",null,r.createElement("path",{className:"minioApplicationName",d:"M0.8,24.1h5.8L14.4,43h0.3l7.7-18.9h5.8v26.1h-4.5V32.3h-0.2l-7.2,17.9h-3.4L5.6,32.3H5.4v18H0.8\n\t\tC0.8,50.2,0.8,24.1,0.8,24.1z"}),r.createElement("path",{className:"minioApplicationName",d:"M38.1,24.1v26.1h-4.7V24.1C33.4,24.1,38.1,24.1,38.1,24.1z"}),r.createElement("path",{className:"minioApplicationName",d:"M57.4,31.3c-0.1-1.1-0.6-2-1.5-2.6c-0.9-0.6-2-0.9-3.4-0.9c-1,0-1.8,0.1-2.5,0.4c-0.7,0.3-1.2,0.7-1.6,1.2\n\t\ts-0.6,1.1-0.6,1.7c0,0.5,0.1,1,0.4,1.4c0.3,0.4,0.6,0.7,1,1s0.9,0.5,1.4,0.7c0.5,0.2,1.1,0.3,1.6,0.5l2.4,0.6\n\t\tc1,0.2,1.9,0.5,2.8,0.9c0.9,0.4,1.7,0.9,2.5,1.5c0.7,0.6,1.3,1.3,1.7,2.2c0.4,0.8,0.6,1.8,0.6,3c0,1.5-0.4,2.9-1.2,4\n\t\tc-0.8,1.2-1.9,2.1-3.4,2.7c-1.5,0.7-3.3,1-5.3,1c-2,0-3.8-0.3-5.3-0.9c-1.5-0.6-2.7-1.5-3.5-2.8c-0.8-1.2-1.3-2.7-1.4-4.4h4.7\n\t\tc0.1,0.9,0.3,1.7,0.8,2.3c0.5,0.6,1.1,1.1,1.9,1.4c0.8,0.3,1.7,0.4,2.7,0.4c1,0,1.9-0.2,2.7-0.5c0.8-0.3,1.4-0.7,1.8-1.3\n\t\tc0.4-0.6,0.7-1.2,0.7-2c0-0.7-0.2-1.2-0.6-1.7c-0.4-0.4-0.9-0.8-1.6-1.1c-0.7-0.3-1.5-0.6-2.5-0.8l-3-0.8c-2.1-0.6-3.8-1.4-5.1-2.5\n\t\tc-1.2-1.1-1.9-2.6-1.9-4.5c0-1.5,0.4-2.9,1.3-4c0.8-1.2,2-2.1,3.4-2.7c1.4-0.6,3.1-1,4.9-1c1.9,0,3.5,0.3,4.9,1\n\t\tc1.4,0.6,2.5,1.5,3.3,2.7c0.8,1.1,1.2,2.4,1.2,3.9H57.4z"}),r.createElement("path",{className:"minioApplicationName",d:"M80.7,31.3c-0.1-1.1-0.6-2-1.5-2.6c-0.9-0.6-2-0.9-3.4-0.9c-1,0-1.8,0.1-2.5,0.4c-0.7,0.3-1.2,0.7-1.6,1.2\n\t\tc-0.4,0.5-0.6,1.1-0.6,1.7c0,0.5,0.1,1,0.4,1.4c0.3,0.4,0.6,0.7,1,1c0.4,0.3,0.9,0.5,1.4,0.7c0.5,0.2,1.1,0.3,1.6,0.5l2.4,0.6\n\t\tc1,0.2,1.9,0.5,2.8,0.9c0.9,0.4,1.7,0.9,2.5,1.5c0.7,0.6,1.3,1.3,1.7,2.2c0.4,0.8,0.6,1.8,0.6,3c0,1.5-0.4,2.9-1.2,4\n\t\tc-0.8,1.2-1.9,2.1-3.4,2.7c-1.5,0.7-3.3,1-5.3,1c-2,0-3.8-0.3-5.3-0.9c-1.5-0.6-2.7-1.5-3.5-2.8c-0.8-1.2-1.3-2.7-1.4-4.4h4.7\n\t\tc0.1,0.9,0.3,1.7,0.8,2.3c0.5,0.6,1.1,1.1,1.9,1.4c0.8,0.3,1.7,0.4,2.7,0.4c1,0,1.9-0.2,2.7-0.5c0.8-0.3,1.4-0.7,1.8-1.3\n\t\tc0.4-0.6,0.7-1.2,0.7-2c0-0.7-0.2-1.2-0.6-1.7c-0.4-0.4-0.9-0.8-1.6-1.1s-1.5-0.6-2.5-0.8l-3-0.8c-2.1-0.6-3.8-1.4-5.1-2.5\n\t\tc-1.2-1.1-1.9-2.6-1.9-4.5c0-1.5,0.4-2.9,1.3-4c0.8-1.2,2-2.1,3.4-2.7c1.4-0.6,3.1-1,4.9-1c1.9,0,3.5,0.3,4.9,1\n\t\tc1.4,0.6,2.5,1.5,3.3,2.7c0.8,1.1,1.2,2.4,1.2,3.9H80.7z"}),r.createElement("path",{className:"minioApplicationName",d:"M94.5,24.1v26.1h-4.7V24.1C89.8,24.1,94.5,24.1,94.5,24.1z"}),r.createElement("path",{className:"minioApplicationName",d:"M123,37.2c0,2.8-0.5,5.2-1.6,7.2c-1,2-2.5,3.5-4.3,4.6c-1.8,1.1-3.9,1.6-6.1,1.6c-2.3,0-4.3-0.5-6.1-1.6\n\t\tc-1.8-1.1-3.2-2.6-4.3-4.6c-1-2-1.6-4.4-1.6-7.2c0-2.8,0.5-5.2,1.6-7.2c1-2,2.5-3.5,4.3-4.6c1.8-1.1,3.9-1.6,6.1-1.6\n\t\tc2.3,0,4.3,0.5,6.1,1.6c1.8,1.1,3.2,2.6,4.3,4.6C122.5,32,123,34.4,123,37.2z M118.2,37.2c0-2-0.3-3.7-0.9-5\n\t\tc-0.6-1.4-1.5-2.4-2.6-3.1c-1.1-0.7-2.3-1.1-3.8-1.1c-1.4,0-2.7,0.4-3.8,1.1c-1.1,0.7-1.9,1.7-2.6,3.1c-0.6,1.4-0.9,3-0.9,5\n\t\tc0,2,0.3,3.7,0.9,5c0.6,1.4,1.5,2.4,2.6,3.1c1.1,0.7,2.3,1.1,3.8,1.1c1.4,0,2.7-0.4,3.8-1.1c1.1-0.7,1.9-1.7,2.6-3.1\n\t\tC117.9,40.8,118.2,39.2,118.2,37.2z"}),r.createElement("path",{className:"minioApplicationName",d:"M148.9,24.1v26.1h-4.2l-12.3-17.8h-0.2v17.8h-4.7V24.1h4.2L144,41.9h0.2V24.1\n\t\tC144.2,24.1,148.9,24.1,148.9,24.1z"}),r.createElement("path",{className:"minioApplicationName",d:"M175.4,32.3H173c-0.2-0.9-0.5-1.7-1-2.5c-0.5-0.8-1-1.4-1.7-2c-0.7-0.6-1.5-1-2.4-1.3\n\t\tc-0.9-0.3-1.8-0.5-2.9-0.5c-1.6,0-3.2,0.4-4.5,1.3c-1.4,0.9-2.4,2.1-3.2,3.8c-0.8,1.7-1.2,3.7-1.2,6.1c0,2.4,0.4,4.5,1.2,6.1\n\t\tc0.8,1.7,1.9,2.9,3.2,3.8c1.4,0.9,2.9,1.3,4.5,1.3c1,0,2-0.2,2.9-0.5c0.9-0.3,1.7-0.8,2.4-1.3c0.7-0.6,1.3-1.2,1.7-2\n\t\tc0.5-0.8,0.8-1.6,1-2.5h2.4c-0.2,1.2-0.6,2.3-1.2,3.3c-0.6,1-1.3,1.9-2.2,2.7c-0.9,0.8-1.9,1.4-3.1,1.8c-1.2,0.4-2.4,0.6-3.8,0.6\n\t\tc-2.2,0-4.1-0.5-5.8-1.7c-1.7-1.1-3-2.7-4-4.7c-1-2-1.4-4.4-1.4-7.1s0.5-5.1,1.4-7.1c1-2,2.3-3.6,4-4.7c1.7-1.1,3.6-1.7,5.8-1.7\n\t\tc1.4,0,2.7,0.2,3.8,0.6c1.2,0.4,2.2,1,3.1,1.8c0.9,0.8,1.6,1.7,2.2,2.7C174.8,30,175.2,31.1,175.4,32.3z"}),r.createElement("path",{className:"minioApplicationName",d:"M202.4,37.2c0,2.7-0.5,5.1-1.5,7.1c-1,2-2.3,3.6-4,4.7c-1.7,1.1-3.6,1.7-5.8,1.7c-2.2,0-4.1-0.5-5.8-1.7\n\t\tc-1.7-1.1-3-2.7-4-4.7c-1-2-1.4-4.4-1.4-7.1c0-2.7,0.5-5.1,1.4-7.1c1-2,2.3-3.6,4-4.7c1.7-1.1,3.6-1.7,5.8-1.7\n\t\tc2.2,0,4.1,0.6,5.8,1.7c1.7,1.1,3,2.7,4,4.7C201.9,32.1,202.4,34.5,202.4,37.2z M200.1,37.2c0-2.3-0.4-4.3-1.2-6\n\t\tc-0.8-1.7-1.8-2.9-3.2-3.8c-1.4-0.9-2.9-1.3-4.6-1.3c-1.7,0-3.2,0.4-4.6,1.3c-1.4,0.9-2.4,2.2-3.2,3.8c-0.8,1.7-1.2,3.7-1.2,6\n\t\tc0,2.3,0.4,4.3,1.2,6c0.8,1.7,1.8,2.9,3.2,3.8c1.4,0.9,2.9,1.3,4.6,1.3c1.7,0,3.3-0.4,4.6-1.3c1.4-0.9,2.4-2.2,3.2-3.8\n\t\tC199.7,41.5,200.1,39.5,200.1,37.2z"}),r.createElement("path",{className:"minioApplicationName",d:"M228.5,24.1v26.1h-2.3l-15.4-21.9h-0.2v21.9h-2.4V24.1h2.3L225.9,46h0.2V24.1\n\t\tC226.1,24.1,228.5,24.1,228.5,24.1z"}),r.createElement("path",{className:"minioApplicationName",d:"M233.8,26.3v-2.1h18.9v2.1h-8.3v24h-2.4v-24C242.1,26.3,233.8,26.3,233.8,26.3z"}),r.createElement("path",{className:"minioApplicationName",d:"M258.1,50.2V24.1h8.4c1.9,0,3.4,0.3,4.6,1s2.2,1.6,2.8,2.8c0.6,1.2,0.9,2.5,0.9,4c0,1.5-0.3,2.9-0.9,4\n\t\tc-0.6,1.2-1.6,2.1-2.8,2.7c-1.2,0.7-2.8,1-4.6,1h-7.2v-2.2h7.1c1.4,0,2.5-0.2,3.4-0.7c0.9-0.5,1.6-1.1,2-1.9c0.4-0.8,0.7-1.8,0.7-3\n\t\tc0-1.1-0.2-2.1-0.7-3s-1.1-1.5-2-2c-0.9-0.5-2-0.7-3.4-0.7h-6v24H258.1z M269.6,38.5l6.4,11.8h-2.8l-6.4-11.8H269.6z"}),r.createElement("path",{className:"minioApplicationName",d:"M302.2,37.2c0,2.7-0.5,5.1-1.5,7.1c-1,2-2.3,3.6-4,4.7c-1.7,1.1-3.6,1.7-5.8,1.7c-2.2,0-4.1-0.5-5.8-1.7\n\t\tc-1.7-1.1-3-2.7-4-4.7c-1-2-1.4-4.4-1.4-7.1c0-2.7,0.5-5.1,1.4-7.1c1-2,2.3-3.6,4-4.7c1.7-1.1,3.6-1.7,5.8-1.7\n\t\tc2.2,0,4.1,0.6,5.8,1.7c1.7,1.1,3,2.7,4,4.7C301.7,32.1,302.2,34.5,302.2,37.2z M299.8,37.2c0-2.3-0.4-4.3-1.2-6s-1.8-2.9-3.2-3.8\n\t\tc-1.4-0.9-2.9-1.3-4.6-1.3c-1.7,0-3.2,0.4-4.6,1.3c-1.4,0.9-2.4,2.2-3.2,3.8c-0.8,1.7-1.2,3.7-1.2,6c0,2.3,0.4,4.3,1.2,6\n\t\tc0.8,1.7,1.8,2.9,3.2,3.8c1.4,0.9,2.9,1.3,4.6,1.3c1.7,0,3.3-0.4,4.6-1.3c1.4-0.9,2.4-2.2,3.2-3.8S299.8,39.5,299.8,37.2z"}),r.createElement("path",{className:"minioApplicationName",d:"M307.9,50.2V24.1h2.4v24h12.4v2.1H307.9z"}),r.createElement("rect",{x:"21.9",y:"0.6",className:"minioSection",width:"3.8",height:"11.1"}),r.createElement("path",{className:"minioSection",d:"M17.3,0.7L9.6,5.4c-0.1,0.1-0.2,0.1-0.4,0L1.6,0.7C1.4,0.6,1.3,0.6,1.1,0.6h0C0.5,0.6,0,1,0,1.6v10.1h3.8V6.9\n\t\tc0-0.3,0.3-0.5,0.6-0.3l4.3,2.6c0.4,0.3,1,0.3,1.4,0l4.5-2.7c0.3-0.1,0.6,0,0.6,0.3v4.8h3.8V1.6c0-0.6-0.5-1.1-1.1-1.1h0\n\t\tC17.7,0.6,17.5,0.6,17.3,0.7L17.3,0.7z"}),r.createElement("path",{className:"minioSection",d:"M44.6,0.6h-3.8v5.1c0,0.3-0.3,0.5-0.6,0.3l-9.9-5.3c-0.2-0.1-0.3-0.1-0.5-0.1h0c-0.6,0-1.1,0.5-1.1,1.1v10h3.8\n\t\tv-5c0-0.3,0.3-0.5,0.6-0.3l10,5.3c0.2,0.1,0.3,0.1,0.5,0.1l0,0c0.6,0,1.1-0.5,1.1-1.1L44.6,0.6L44.6,0.6L44.6,0.6z"}),r.createElement("path",{className:"minioSection",d:"M47.6,11.7V0.6h1.8v11.1L47.6,11.7L47.6,11.7z"}),r.createElement("path",{className:"minioSection",d:"M59.5,11.9c-4.7,0-8-2.2-8-5.8c0-3.5,3.3-5.8,8-5.8c4.7,0,8,2.2,8,5.8S64.3,11.9,59.5,11.9z M59.5,1.9\n\t\tc-3.5,0-6.2,1.5-6.2,4.3c0,2.8,2.7,4.3,6.2,4.3c3.5,0,6.2-1.5,6.2-4.3C65.7,3.4,63,1.9,59.5,1.9L59.5,1.9z"})))},Pr=function(e){var t=e.inverse;return r.createElement(fr,{viewBox:"0 0 219 51",inverse:t},r.createElement("g",null,r.createElement("rect",{x:"22.2",y:"0.2",className:"minioSection",width:"3.8",height:"11.2"}),r.createElement("path",{className:"minioSection",d:"M17.6,0.4L9.8,5.1c-0.1,0.1-0.2,0.1-0.4,0L1.6,0.4C1.5,0.3,1.3,0.2,1.1,0.2l0,0C0.5,0.2,0,0.7,0,1.3v10.2h3.8\n\t\tV6.6c0-0.3,0.3-0.5,0.6-0.3L8.8,9c0.4,0.3,1,0.3,1.4,0l4.6-2.7c0.3-0.1,0.6,0,0.6,0.3v4.9h3.8V1.3c0-0.6-0.5-1.1-1.1-1.1l0,0\n\t\tC17.9,0.2,17.7,0.3,17.6,0.4L17.6,0.4z"}),r.createElement("path",{className:"minioSection",d:"M45.2,0.2h-3.9v5.2c0,0.3-0.3,0.5-0.6,0.3L30.6,0.4c-0.2-0.1-0.3-0.1-0.5-0.1l0,0c-0.6,0-1.1,0.5-1.1,1.1v10.2\n\t\th3.9V6.4c0-0.3,0.3-0.5,0.6-0.3l10.1,5.4c0.2,0.1,0.3,0.1,0.5,0.1l0,0c0.6,0,1.1-0.5,1.1-1.1L45.2,0.2L45.2,0.2L45.2,0.2z"}),r.createElement("path",{className:"minioSection",d:"M48.3,11.5V0.2h1.8v11.2L48.3,11.5L48.3,11.5z"}),r.createElement("path",{className:"minioSection",d:"M60.3,11.7c-4.7,0-8.1-2.3-8.1-5.9s3.4-5.9,8.1-5.9s8.1,2.3,8.1,5.9S65.2,11.7,60.3,11.7z M60.3,1.5\n\t\tc-3.5,0-6.2,1.5-6.2,4.4c0,2.8,2.7,4.4,6.2,4.4s6.3-1.5,6.3-4.4S63.9,1.5,60.3,1.5L60.3,1.5z"}),r.createElement("g",null,r.createElement("path",{className:"minioApplicationName",d:"M15.6,19.8c2.6,0,5.1,0.6,7.3,1.7c2.2,1.1,3.9,2.7,5.1,4.6l-2.9,1.9c-1-1.5-2.3-2.7-4-3.6c-1.7-0.9-3.5-1.3-5.5-1.3\n\t\t\tc-1.7,0-3.3,0.3-4.7,0.9c-1.5,0.6-2.7,1.4-3.8,2.5c-1.1,1.1-1.9,2.3-2.5,3.9c-0.6,1.5-0.9,3.2-0.9,5s0.3,3.4,0.9,5\n\t\t\tc0.6,1.5,1.5,2.8,2.5,3.9c1.1,1.1,2.3,1.9,3.8,2.5c1.5,0.6,3.1,0.9,4.7,0.9c2,0,3.8-0.4,5.5-1.3c1.6-0.9,3-2,4-3.6l2.8,2.1\n\t\t\tc-1.3,1.9-3,3.4-5.1,4.5c-2.2,1.1-4.5,1.6-7.1,1.6c-2.2,0-4.3-0.4-6.2-1.2c-1.9-0.8-3.6-1.9-5-3.2c-1.4-1.4-2.5-3-3.3-4.9\n\t\t\tc-0.8-1.9-1.2-4-1.2-6.3s0.4-4.3,1.2-6.3c0.8-1.9,1.9-3.6,3.3-4.9c1.4-1.4,3-2.4,5-3.2C11.3,20.2,13.4,19.8,15.6,19.8z"}),r.createElement("path",{className:"minioApplicationName",d:"M48.2,19.8c3,0,5.6,0.7,8,2c2.4,1.3,4.2,3.2,5.6,5.5c1.3,2.4,2,5.1,2,8s-0.7,5.7-2,8c-1.3,2.4-3.2,4.2-5.6,5.6\n\t\t\tc-2.4,1.3-5.1,2-8,2c-2.2,0-4.3-0.4-6.2-1.2c-1.9-0.8-3.6-1.9-5-3.2c-1.4-1.4-2.5-3-3.3-4.9c-0.8-1.9-1.2-4-1.2-6.3\n\t\t\ts0.4-4.3,1.2-6.3c0.8-1.9,1.9-3.6,3.3-4.9c1.4-1.4,3-2.4,5-3.2C43.9,20.2,46,19.8,48.2,19.8z M48.2,23.2c-1.7,0-3.3,0.3-4.7,0.9\n\t\t\tc-1.5,0.6-2.7,1.4-3.8,2.5c-1.1,1.1-1.9,2.3-2.5,3.9c-0.6,1.5-0.9,3.2-0.9,5s0.3,3.4,0.9,5c0.6,1.5,1.5,2.8,2.5,3.9\n\t\t\tc1.1,1.1,2.3,1.9,3.8,2.5c1.5,0.6,3.1,0.9,4.7,0.9c2.3,0,4.3-0.5,6.1-1.5c1.8-1,3.3-2.5,4.3-4.3c1.1-1.9,1.6-4,1.6-6.4\n\t\t\ts-0.5-4.5-1.6-6.4s-2.5-3.3-4.3-4.3C52.5,23.7,50.5,23.2,48.2,23.2z"}),r.createElement("path",{className:"minioApplicationName",d:"M96.2,20.3v30.3h-3.1L74.3,26.2v24.3h-3.5V20.3H74l18.8,24.3V20.3H96.2z"}),r.createElement("path",{className:"minioApplicationName",d:"M126.5,23.2l-1.8,2.8c-2.8-1.9-5.8-2.8-9.1-2.8c-2.3,0-4.2,0.5-5.7,1.5c-1.4,1-2.2,2.3-2.2,4c0,1.4,0.6,2.5,1.7,3.3\n\t\t\tc1.1,0.8,2.9,1.3,5.3,1.6l2.9,0.3c1.3,0.2,2.5,0.4,3.6,0.8c1.1,0.4,2.1,0.8,3,1.4c0.9,0.6,1.6,1.4,2.1,2.4c0.5,1,0.8,2.1,0.8,3.4\n\t\t\tc0,1.9-0.6,3.6-1.7,5c-1.1,1.4-2.5,2.4-4.3,3.1c-1.8,0.7-3.8,1-6,1c-2.2,0-4.3-0.4-6.5-1.1s-4-1.7-5.4-2.8l1.9-2.8\n\t\t\tc1.1,0.9,2.6,1.7,4.4,2.4c1.8,0.7,3.7,1,5.6,1c2.5,0,4.5-0.5,6-1.4c1.6-1,2.4-2.3,2.4-4.1c0-1.4-0.6-2.6-1.8-3.4\n\t\t\tc-1.2-0.8-3.1-1.3-5.5-1.6l-3.1-0.3c-2.7-0.3-4.9-1.1-6.5-2.4c-1.6-1.3-2.4-3.2-2.4-5.6c0-1.9,0.5-3.5,1.6-4.9\n\t\t\tc1-1.4,2.4-2.4,4.1-3.1c1.7-0.7,3.6-1,5.8-1C119.8,19.9,123.4,21,126.5,23.2z"}),r.createElement("path",{className:"minioApplicationName",d:"M147.9,19.8c3,0,5.6,0.7,8,2c2.4,1.3,4.2,3.2,5.6,5.5c1.3,2.4,2,5.1,2,8s-0.7,5.7-2,8c-1.3,2.4-3.2,4.2-5.6,5.6\n\t\t\tc-2.4,1.3-5.1,2-8,2c-2.2,0-4.3-0.4-6.2-1.2c-1.9-0.8-3.6-1.9-5-3.2c-1.4-1.4-2.5-3-3.3-4.9c-0.8-1.9-1.2-4-1.2-6.3\n\t\t\ts0.4-4.3,1.2-6.3s1.9-3.6,3.3-4.9c1.4-1.4,3-2.4,5-3.2C143.6,20.2,145.7,19.8,147.9,19.8z M147.9,23.2c-1.7,0-3.3,0.3-4.7,0.9\n\t\t\tc-1.5,0.6-2.7,1.4-3.8,2.5c-1.1,1.1-1.9,2.3-2.5,3.9c-0.6,1.5-0.9,3.2-0.9,5s0.3,3.4,0.9,5c0.6,1.5,1.5,2.8,2.5,3.9\n\t\t\tc1.1,1.1,2.3,1.9,3.8,2.5c1.5,0.6,3.1,0.9,4.7,0.9c2.3,0,4.3-0.5,6.1-1.5c1.8-1,3.3-2.5,4.3-4.3c1.1-1.9,1.6-4,1.6-6.4\n\t\t\ts-0.5-4.5-1.6-6.4s-2.5-3.3-4.3-4.3C152.2,23.7,150.2,23.2,147.9,23.2z"}),r.createElement("path",{className:"minioApplicationName",d:"M191.6,47.3v3.3h-21V20.3h3.5v27H191.6z"}),r.createElement("path",{className:"minioApplicationName",d:"M218.2,47.3v3.3h-21.3V20.3H218v3.3h-17.6v10.1h17.1v3.2h-17.1v10.4H218.2z"}))))},Br=a.Ay.svg((function(e){return{fill:Wn(e,"theme.logoColor","#C51C3F")}})),Fr=function(e){var t=e.width,n=e.onClick;return r.createElement(Br,{viewBox:"0 0 162.612 24.465",width:t,onClick:n},r.createElement("path",{d:"M52.751.414h9.108v23.63h-9.108zM41.711.74l-18.488 9.92a.919.919 0 0 1-.856 0L3.879.74A2.808 2.808 0 0 0 2.558.414h-.023A2.4 2.4 0 0 0 0 2.641v21.376h9.1V13.842a.918.918 0 0 1 1.385-.682l10.361 5.568a3.634 3.634 0 0 0 3.336.028l10.933-5.634a.917.917 0 0 1 1.371.69v10.205h9.1V2.641A2.4 2.4 0 0 0 43.055.414h-.023a2.808 2.808 0 0 0-1.321.326zm65.564-.326h-9.237v10.755a.913.913 0 0 1-1.338.706L72.762.675a2.824 2.824 0 0 0-1.191-.261h-.016a2.4 2.4 0 0 0-2.535 2.227v21.377h9.163V13.275a.914.914 0 0 1 1.337-.707l24.032 11.2a2.813 2.813 0 0 0 1.188.26 2.4 2.4 0 0 0 2.535-2.227zm7.161 23.63V.414h4.191v23.63zm28.856.421c-11.274 0-19.272-4.7-19.272-12.232C124.02 4.741 132.066 0 143.292 0s19.32 4.7 19.32 12.233-7.902 12.232-19.32 12.232zm0-21.333c-8.383 0-14.84 3.217-14.84 9.1 0 5.926 6.457 9.1 14.84 9.1s14.887-3.174 14.887-9.1c0-5.883-6.504-9.1-14.887-9.1z"}))},Ur=function(e){var t=e.inverse,n=e.onClick;return r.createElement(fr,{viewBox:"0 0 249.2 51",inverse:t,onClick:n},r.createElement("g",{transform:"translate(26.059 -11)"},r.createElement("g",{transform:"translate(-29 11)"},r.createElement("g",{transform:"translate(0 0)"},r.createElement("g",{transform:"translate(3.025 0)"},r.createElement("g",{transform:"translate(0 0.194)"},r.createElement("g",null,r.createElement("rect",{x:"21.8",y:"0",className:"minioSection",width:"3.8",height:"11.1"})),r.createElement("g",null,r.createElement("path",{className:"minioSection",d:"M17.2,0.2L9.6,4.8c-0.1,0.1-0.2,0.1-0.4,0L1.6,0.2C1.4,0.1,1.2,0,1.1,0l0,0C0.5,0,0,0.5,0,1v10h3.8\n\t\t\t\t\t\t\tV6.3c0-0.2,0.2-0.4,0.4-0.4c0.1,0,0.1,0,0.2,0.1l4.3,2.6c0.4,0.3,1,0.3,1.4,0L14.5,6c0.2-0.1,0.4,0,0.5,0.1\n\t\t\t\t\t\t\tc0,0.1,0.1,0.1,0.1,0.2v4.8h3.8V1c0-0.6-0.5-1-1-1l0,0C17.6,0,17.4,0.1,17.2,0.2z"})),r.createElement("g",null,r.createElement("path",{className:"minioSection",d:"M44.3,0h-3.8v5.1c0,0.2-0.2,0.4-0.4,0.4c-0.1,0-0.1,0-0.2,0L30,0.1C29.9,0,29.7,0,29.5,0l0,0\n\t\t\t\t\t\t\tc-0.6,0-1,0.5-1,1v10h3.8V6c0-0.2,0.2-0.4,0.4-0.4c0.1,0,0.1,0,0.2,0l9.9,5.3C43,11,43.1,11,43.3,11l0,0c0.6,0,1-0.5,1-1V0z"}))),r.createElement("g",null,r.createElement("path",{className:"minioSection",d:"M47.2,11.3V0.2H49v11.1H47.2z"})),r.createElement("g",null,r.createElement("path",{className:"minioSection",d:"M59.2,11.5c-4.7,0-8-2.2-8-5.7s3.3-5.7,8-5.7s8,2.2,8,5.7S63.9,11.5,59.2,11.5z M59.2,1.5\n\t\t\t\t\t\tC55.7,1.5,53,3,53,5.7c0,2.8,2.7,4.3,6.1,4.3s6.1-1.5,6.1-4.3C65.3,3,62.6,1.5,59.2,1.5z"})))),r.createElement("g",null,r.createElement("path",{className:"minioApplicationName",d:"M23.1,45.2v4.2H2.8V21.6h20v4.2H7.3v7.5h15v4.2h-15v7.7H23.1z"}),r.createElement("path",{className:"minioApplicationName",d:"M53.9,21.6v27.8h-4L34.4,29.3l0,20.1h-4.5V21.6h4l15.5,20.1V21.6H53.9z"}),r.createElement("path",{className:"minioApplicationName",d:"M80.9,21.6v4.2h-9v23.5h-4.5V25.9h-9v-4.2H80.9z"}),r.createElement("path",{className:"minioApplicationName",d:"M105.7,45.2v4.2H85.4V21.6h20v4.2H89.9v7.5h15v4.2h-15v7.7H105.7z"}),r.createElement("path",{className:"minioApplicationName",d:"M112.5,21.6h11.4c3.2,0,5.6,0.7,7.3,2.1c1.7,1.4,2.5,3.4,2.5,6c0,2.4-0.8,4.3-2.5,5.7c-1.7,1.5-3.9,2.2-6.8,2.3l9.2,11.7\n\t\t\t\th-5.6l-8.9-11.7H117v11.7h-4.5V21.6z M123.8,25.8H117v7.8h6.8c1.8,0,3.1-0.3,4-1c0.9-0.7,1.3-1.7,1.3-3c0-1.3-0.4-2.3-1.3-2.9\n\t\t\t\tC126.9,26.2,125.6,25.8,123.8,25.8z"}),r.createElement("path",{className:"minioApplicationName",d:"M150.5,38.5h-6.3v10.9h-4.5V21.6h10.8c3.2,0,5.6,0.7,7.3,2.2s2.6,3.6,2.6,6.2s-0.9,4.7-2.6,6.2\n\t\t\t\tC156.1,37.8,153.7,38.5,150.5,38.5z M150.4,25.9h-6.2v8.4h6.2c1.8,0,3.1-0.3,4-1c0.9-0.7,1.3-1.7,1.3-3.2s-0.4-2.5-1.3-3.2\n\t\t\t\tC153.6,26.2,152.2,25.9,150.4,25.9z"}),r.createElement("path",{className:"minioApplicationName",d:"M166,21.6h11.4c3.2,0,5.6,0.7,7.3,2.1c1.7,1.4,2.5,3.4,2.5,6c0,2.4-0.8,4.3-2.5,5.7c-1.7,1.5-3.9,2.2-6.8,2.3l9.2,11.7\n\t\t\t\th-5.6l-8.9-11.7h-2.3v11.7H166V21.6z M177.3,25.8h-6.8v7.8h6.8c1.8,0,3.1-0.3,4-1c0.9-0.7,1.3-1.7,1.3-3c0-1.3-0.4-2.3-1.3-2.9\n\t\t\t\tS179.1,25.8,177.3,25.8z"}),r.createElement("path",{className:"minioApplicationName",d:"M197.7,21.6v27.8h-4.5V21.6H197.7z"}),r.createElement("path",{className:"minioApplicationName",d:"M225.8,24.2l-2.3,3.6c-2.5-1.6-5.1-2.4-7.8-2.4c-1.9,0-3.4,0.4-4.5,1.1c-1.2,0.8-1.7,1.8-1.7,3c0,1.1,0.5,1.9,1.4,2.5\n\t\t\t\ts2.4,1,4.3,1.3l1.9,0.3c6,0.8,9,3.4,9,7.6c0,1.8-0.5,3.4-1.5,4.8c-1,1.4-2.4,2.4-4,3c-1.7,0.7-3.5,1-5.5,1c-2,0-4-0.3-6-1\n\t\t\t\ts-3.8-1.6-5.1-2.8l2.4-3.6c1,0.9,2.3,1.6,3.9,2.2c1.6,0.6,3.2,0.9,4.8,0.9c1.9,0,3.4-0.4,4.6-1.1c1.2-0.7,1.8-1.7,1.8-3\n\t\t\t\tc0-1.1-0.5-1.9-1.5-2.5c-1-0.6-2.6-1-4.7-1.3l-2.2-0.3c-0.9-0.1-1.7-0.3-2.5-0.5c-0.8-0.2-1.5-0.5-2.2-1\n\t\t\t\tc-0.7-0.4-1.3-0.9-1.9-1.4c-0.5-0.5-0.9-1.2-1.2-2.1c-0.3-0.8-0.5-1.7-0.5-2.7c0-1.8,0.5-3.4,1.5-4.7s2.3-2.3,4-3\n\t\t\t\tc1.6-0.7,3.5-1,5.5-1C219.4,21.2,222.8,22.2,225.8,24.2z"}),r.createElement("path",{className:"minioApplicationName",d:"M252.4,45.2v4.2h-20.3V21.6h20v4.2h-15.5v7.5h15v4.2h-15v7.7H252.4z"})))))},zr=function(e){var t=e.applicationName,n=e.subVariant,a=void 0===n?"simple":n,o=e.inverse,i=e.onClick;switch(t){case"console":switch(a){case"standard":return r.createElement(hr,{inverse:!!o,onClick:i});case"enterprise":return r.createElement(Er,{inverse:!!o,onClick:i});case"AGPL":return r.createElement(gr,{inverse:!!o,onClick:i});default:return r.createElement(Sr,{inverse:!!o,onClick:i})}case"directpv":return r.createElement(vr,{inverse:!!o,onClick:i});case"subnet":return r.createElement(_r,{inverse:!!o,onClick:i});case"kes":return r.createElement(yr,{inverse:!!o,onClick:i});case"operator":return r.createElement(br,{inverse:!!o,onClick:i});case"subnetops":return r.createElement(Tr,{inverse:!!o,onClick:i});case"cloud":return r.createElement(Ar,{inverse:!!o,onClick:i});case"releases":return r.createElement(Cr,{inverse:!!o,onClick:i});case"vmbroker":return r.createElement(wr,{inverse:!!o,onClick:i});case"eureka":return"new"===a?r.createElement(Nr,{inverse:!!o,onClick:i}):r.createElement(Ir,{inverse:!!o,onClick:i});case"kms":return r.createElement(xr,{inverse:!!o,onClick:i});case"loadbalancer":return r.createElement(Rr,{inverse:!!o,onClick:i});case"index":return r.createElement(kr,{inverse:!!o,onClick:i});case"cache":return r.createElement(Or,{inverse:!!o,onClick:i});case"monitor":return r.createElement(Lr,{inverse:!!o,onClick:i});case"observe":return r.createElement(Dr,{inverse:!!o,onClick:i});case"missioncontrol":return r.createElement(Mr,{inverse:!!o,onClick:i});case"globalconsole":return r.createElement(Pr,{inverse:!!o,onClick:i});case"enterprise":return r.createElement(Ur,{inverse:!!o,onClick:i});case"minio":return r.createElement(Fr,{onClick:i})}},Hr=a.Ay.div((function(e){var t={boxSizing:"border-box"};if(e.container)t={display:"flex",flexWrap:e.wrap||"wrap",flexDirection:e.direction||"row",columnGap:"".concat(e.columnSpacing,"px")||0,rowGap:"".concat(e.rowSpacing,"px")||0,boxSizing:"content-box"};else if(e.item){var n=Object.keys(i);n.forEach((function(r,a){var o,l,c=Wn(e,r,!1);if(c){var u={};if("number"==typeof c&&(u={flexBasis:s(Wn(e,r,12)),width:s(Wn(e,r,12))}),"hidden"===c){var d="";n[a+1]&&(d="and (max-width: ".concat(Wn(i,n[a+1],0),"px)")),t=je(je({},t),((o={})["@media (min-width: ".concat(Wn(i,r,0),"px) ").concat(d)]={display:"none"},o))}t=je(je({},t),((l={})["@media (min-width: ".concat(Wn(i,r,0),"px)")]=je({flexGrow:"1"},u),l))}}))}return je(je({},t),e.sx)})),Gr=function(e){return r.createElement(Hr,je({},e),e.children)};function jr(e,t,n,r){return new(n||(n=Promise))((function(a,o){function i(e){try{l(r.next(e))}catch(e){o(e)}}function s(e){try{l(r.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,s)}l((r=r.apply(e,t||[])).next())}))}const Vr=["geforce 320m","geforce 8600","geforce 8600m gt","geforce 8800 gs","geforce 8800 gt","geforce 9400","geforce 9400m g","geforce 9400m","geforce 9600m gt","geforce 9600m","geforce fx go5200","geforce gt 120","geforce gt 130","geforce gt 330m","geforce gtx 285","google swiftshader","intel g41","intel g45","intel gma 4500mhd","intel gma x3100","intel hd 3000","intel q45","legacy","mali-2","mali-3","mali-4","quadro fx 1500","quadro fx 4","quadro fx 5","radeon hd 2400","radeon hd 2600","radeon hd 4670","radeon hd 4850","radeon hd 4870","radeon hd 5670","radeon hd 5750","radeon hd 6290","radeon hd 6300","radeon hd 6310","radeon hd 6320","radeon hd 6490m","radeon hd 6630m","radeon hd 6750m","radeon hd 6770m","radeon hd 6970m","sgx 543","sgx543"];function Zr(e){return e.toLowerCase().replace(/.*angle ?\((.+)\)(?: on vulkan [0-9.]+)?$/i,"$1").replace(/\s(\d{1,2}gb|direct3d.+$)|\(r\)| \([^)]+\)$/g,"").replace(/(?:vulkan|opengl) \d+\.\d+(?:\.\d+)?(?: \((.*)\))?/,"$1")}const Wr="undefined"==typeof window,$r=(()=>{if(Wr)return;const{userAgent:e,platform:t,maxTouchPoints:n}=window.navigator,r=/(iphone|ipod|ipad)/i.test(e),a="iPad"===t||"MacIntel"===t&&n>0&&!window.MSStream;return{isIpad:a,isMobile:/android/i.test(e)||r||a,isSafari12:/Version\/12.+Safari/.test(e)}})();class qr extends Error{constructor(e){super(e),Object.setPrototypeOf(this,new.target.prototype)}}const Yr=[],Kr=[];function Xr(e,t){if(e===t)return 0;const n=e;e.length>t.length&&(e=t,t=n);let r=e.length,a=t.length;for(;r>0&&e.charCodeAt(~-r)===t.charCodeAt(~-a);)r--,a--;let o,i=0;for(;ic?l>c?c+1:l:l>s?s+1:l;return c}function Qr(e){return null!=e}const Jr=function(){let{mobileTiers:e=[0,15,30,60],desktopTiers:t=[0,15,30,60],override:n={},glContext:r,failIfMajorPerformanceCaveat:a=!1,benchmarksURL:o="https://unpkg.com/detect-gpu@5.0.37/dist/benchmarks"}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return jr(void 0,void 0,void 0,(function*(){const i={};if(Wr)return{tier:0,type:"SSR"};const{isIpad:s=!!(null==$r?void 0:$r.isIpad),isMobile:l=!!(null==$r?void 0:$r.isMobile),screenSize:c=window.screen,loadBenchmarks:u=(e=>jr(void 0,void 0,void 0,(function*(){const t=yield fetch("".concat(o,"/").concat(e)).then((e=>e.json()));if(parseInt(t.shift().split(".")[0],10)<4)throw new qr("Detect GPU benchmark data is out of date. Please update to version 4x");return t})))}=n;let{renderer:d}=n;const p=(e,t,n,r,a)=>({device:a,fps:r,gpu:n,isMobile:l,tier:e,type:t});let m,f="";if(d)d=Zr(d),m=[d];else{const e=r||function(e){const t={alpha:!1,antialias:!1,depth:!1,failIfMajorPerformanceCaveat:arguments.length>1&&void 0!==arguments[1]&&arguments[1],powerPreference:"high-performance",stencil:!1};e&&delete t.powerPreference;const n=window.document.createElement("canvas"),r=n.getContext("webgl",t)||n.getContext("experimental-webgl",t);return null!=r?r:void 0}(null==$r?void 0:$r.isSafari12,a);if(!e)return p(0,"WEBGL_UNSUPPORTED");const t=e.getExtension("WEBGL_debug_renderer_info");if(t&&(d=e.getParameter(t.UNMASKED_RENDERER_WEBGL)),!d)return p(1,"FALLBACK");f=d,d=Zr(d),m=function(e,t,n){return"apple gpu"===t?function(e,t,n){if(!n)return[t];const r=function(e){const t=e.createShader(35633),n=e.createShader(35632),r=e.createProgram();if(!(n&&t&&r))return;e.shaderSource(t,"\n precision highp float;\n attribute vec3 aPosition;\n varying float vvv;\n void main() {\n vvv = 0.31622776601683794;\n gl_Position = vec4(aPosition, 1.0);\n }\n "),e.shaderSource(n,"\n precision highp float;\n varying float vvv;\n void main() {\n vec4 enc = vec4(1.0, 255.0, 65025.0, 16581375.0) * vvv;\n enc = fract(enc);\n enc -= enc.yzww * vec4(1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0, 0.0);\n gl_FragColor = enc;\n }\n "),e.compileShader(t),e.compileShader(n),e.attachShader(r,t),e.attachShader(r,n),e.linkProgram(r),e.detachShader(r,t),e.detachShader(r,n),e.deleteShader(t),e.deleteShader(n),e.useProgram(r);const a=e.createBuffer();e.bindBuffer(34962,a),e.bufferData(34962,new Float32Array([-1,-1,0,3,-1,0,-1,3,0]),35044);const o=e.getAttribLocation(r,"aPosition");e.vertexAttribPointer(o,3,5126,!1,0,0),e.enableVertexAttribArray(o),e.clearColor(1,1,1,1),e.clear(16384),e.viewport(0,0,1,1),e.drawArrays(4,0,3);const i=new Uint8Array(4);return e.readPixels(0,0,1,1,6408,5121,i),e.deleteProgram(r),e.deleteBuffer(a),i.join("")}(e),a="801621810",o="8016218135",i="80162181161",s=(null==$r?void 0:$r.isIpad)?[["a7",i,12],["a8",o,15],["a8x",o,15],["a9",o,15],["a9x",o,15],["a10",o,15],["a10x",o,15],["a12",a,15],["a12x",a,15],["a12z",a,15],["a14",a,15],["m1",a,15]]:[["a7",i,12],["a8",o,12],["a9",o,15],["a10",o,15],["a11",a,15],["a12",a,15],["a13",a,15],["a14",a,15]];let l;return"80162181255"===r?l=s.filter((e=>{let[,,t]=e;return t>=14})):(l=s.filter((e=>{let[,t]=e;return t===r})),l.length||(l=s)),l.map((e=>{let[t]=e;return"apple ".concat(t," gpu")}))}(e,t,n):[t]}(e,d,l)}const h=(yield Promise.all(m.map((function(e){var t;return jr(this,void 0,void 0,(function*(){const n=(e=>{const t=l?["adreno","apple","mali-t","mali","nvidia","powervr","samsung"]:["intel","apple","amd","radeon","nvidia","geforce"];for(const n of t)if(e.includes(n))return n})(e);if(!n)return;const r="".concat(l?"m":"d","-").concat(n).concat(s?"-ipad":"",".json"),a=i[r]=null!==(t=i[r])&&void 0!==t?t:u(r);let o;try{o=yield a}catch(n){if(n instanceof qr)throw n;return}const d=function(e){var t;const n=(e=e.replace(/\([^)]+\)/,"")).match(/\d+/)||e.match(/(\W|^)([A-Za-z]{1,3})(\W|$)/g);return null!==(t=null==n?void 0:n.join("").replace(/\W|amd/g,""))&&void 0!==t?t:""}(e);let p=o.filter((e=>{let[,t]=e;return t===d}));p.length||(p=o.filter((t=>{let[n]=t;return n.includes(e)})));const m=p.length;if(0===m)return;const f=e.split(/[.,()\[\]/\s]/g).sort().filter(((e,t,n)=>0===t||e!==n[t-1])).join(" ");let h,[g,,,,E]=m>1?p.map((e=>[e,Xr(f,e[2])])).sort(((e,t)=>{let[,n]=e,[,r]=t;return n-r}))[0][0]:p[0],b=Number.MAX_VALUE;const{devicePixelRatio:v}=window,y=c.width*v*c.height*v;for(const e of E){const[t,n]=e,r=t*n,a=Math.abs(y-r);a{let[n=Number.MAX_VALUE,r]=e,[a=Number.MAX_VALUE,o]=t;return n===a?r-o:n-a}));if(!h.length){const e=Vr.find((e=>d.includes(e)));return e?p(0,"BLOCKLISTED",e):p(1,"FALLBACK","".concat(d," (").concat(f,")"))}const[,g,E,b]=h[0];if(-1===g)return p(0,"BLOCKLISTED",E,g,b);const v=l?e:t;let y=0;for(let e=0;e=v[e]&&(y=e);return p(y,"BENCHMARK",E,g,b)}))};var ea,ta,na,ra,aa,oa,ia,sa,la,ca,ua,da,pa,ma,fa,ha,ga=n(4967),Ea=n(9671),ba=a.Ay.div((function(e){var t,n=e.theme;return{"& .mainContainer":{height:"100vh"},"& .decorationPanel":{position:"relative",backgroundColor:Wn(n,"login.promoBG","#000110"),"& .videoContainer":{width:"100%",height:"auto",minHeight:200,position:"absolute",bottom:"0",right:0,filter:Wn(n,"login.bgFilter","none"),"&:before":{position:"absolute",width:"100%",height:60,display:"block",content:"' '",background:"linear-gradient(to bottom, rgba(0,1,16,1) 0%,rgba(0,0,0,0.02) 100%)",top:0},"&:after":{position:"absolute",width:120,height:"100%",display:"block",content:"' '",background:"linear-gradient(to right, rgba(0,1,16,1) 0%,rgba(0,0,0,0.02) 100%)",top:0},"& .videoBG":{width:"100%"}},"& .bgExtend":{backgroundImage:"linear-gradient(45deg,rgba(172,223,234,0) 0,#7fc0e4 100%)",position:"absolute",width:500,left:0},"& .promoContainer":{zIndex:100,width:"80%",maxWidth:"687px",position:"absolute",top:"190px",left:"50%",transform:"translateX(-50%)","& .promoHeader":{color:Wn(n,"login.promoHeader","#fff"),fontSize:"46px",textAlign:"left",fontWeight:"900",lineHeight:"60px"},"& .promoInfo":{marginTop:"31px",maxWidth:"542px",color:Wn(n,"login.promoText","#fff"),fontSize:"18px",textAlign:"left",fontWeight:"300",lineHeight:"30px",textShadow:"0 0 5ppx #000","& a":{color:Wn(n,"login.promoText","#fff"),textDecoration:"none",fontWeight:"bold","&:hover":{textDecoration:"underline"}}}}},"& .formPanel":(t={maxWidth:"520px",backgroundColor:Wn(n,"login.formBG","#fff")},t["@media (min-width: ".concat(Wn(i,"xs",0),"px) and (max-width: ").concat(Wn(i,"md",0),"px)")]={maxWidth:"100%"},t["& .logoContainer"]={display:"flex",height:"215px",alignItems:"center",justifyContent:"center",boxShadow:"0 3px 10px 2px #00000010","& svg":{width:"325px"}},t["& .formContainer"]={paddingTop:"40px",display:"flex",flexDirection:"column",alignItems:"center",minHeight:"calc(100vh - 215px)","& .form":{width:"328px",flexGrow:"1",height:"100%"},"& .footer":{display:"flex",width:"328px",borderTop:"".concat(Wn(n,"login.footerDivider","#f2f2f2")," 1px solid"),padding:"35px 0",textAlign:"center",alignItems:"flex-end",justifyContent:"center"},"& .footer, & .footer a":{color:Wn(n,"login.footerElements","#000"),fontSize:"14px",textDecoration:"none"}},t)}})),va=function(e){var t=e.logoProps,n=e.form,a=e.formFooter,o=e.promoInfo,i=e.promoHeader,s=e.backgroundAnimation,l=void 0===s||s,c=(0,r.useState)(!1),u=c[0],d=c[1];return(0,r.useEffect)((function(){!function(e,t,n,r){new(n||(n=Promise))((function(a,o){function i(e){try{l(r.next(e))}catch(e){o(e)}}function s(e){try{l(r.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,s)}l((r=r.apply(e,t||[])).next())}))}(void 0,void 0,void 0,(function(){var e;return function(e,t){var n,r,a,o,i={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(s){return function(l){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,s[0]&&(i=0)),i;)try{if(n=1,r&&(a=2&s[0]?r.return:s[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,s[1])).done)return a;switch(r=0,a&&(s=[2&s[0],a.value]),s[0]){case 0:case 1:a=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,r=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!((a=(a=i.trys).length>0&&a[a.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!a||s[1]>a[0]&&s[1]=2),[2]}}))}))}),[]),r.createElement(ba,null,r.createElement(Gr,{container:!0,className:"mainContainer",wrap:"nowrap"},r.createElement(Gr,{item:!0,xs:"hidden",sm:"hidden",md:!0,className:"decorationPanel"},(o||i)&&r.createElement(Gr,{container:!0},r.createElement(Gr,{item:!0,className:"promoContainer"},r.createElement(Gr,{item:!0,className:"promoHeader"},i),r.createElement(Gr,{item:!0,className:"promoInfo"},o))),r.createElement(Gr,{item:!0,className:"videoContainer"},u&&l?r.createElement("video",{autoPlay:!0,playsInline:!0,muted:!0,loop:!0,disablePictureInPicture:!0,poster:Ea,className:"videoBG"},r.createElement("source",{src:ga,type:"video/mp4"})):r.createElement("img",{src:Ea,className:"videoBG"}))),r.createElement(Gr,{item:!0,xs:12,className:"formPanel"},r.createElement(Gr,{container:!0},r.createElement(Gr,{item:!0,xs:12,className:"logoContainer"},r.createElement(zr,je({},t))),r.createElement(Gr,{item:!0,xs:12,className:"formContainer"},r.createElement(Gr,{item:!0,xs:!0,className:"form"},n),a&&r.createElement(Gr,{item:!0,xs:!0,className:"footer"},a))))))},ya=(0,a.i7)(ea||(ea=We(["0% {\n transform: translate(139.785027px, 140.086989px) rotate(45.236493deg);\n animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1);\n }\n 10% {\n transform: translate(139.785027px, 140.086989px) rotate(-197.740907deg);\n animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1);\n }\n 20% {\n transform: translate(139.785027px, 140.086989px) rotate(-108.6deg);\n animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1);\n }\n 30% {\n transform: translate(139.785027px, 140.086989px) rotate(-17.484014deg);\n animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1);\n }\n 33.333333% {\n transform: translate(139.785027px, 140.086989px) rotate(-17.48deg);\n animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1);\n }\n 43.333333% {\n transform: translate(139.785027px, 140.086989px) rotate(160.887995deg);\n }\n 100% {\n transform: translate(139.785027px, 140.086989px) rotate(160.887995deg);\n }"],["0% {\n transform: translate(139.785027px, 140.086989px) rotate(45.236493deg);\n animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1);\n }\n 10% {\n transform: translate(139.785027px, 140.086989px) rotate(-197.740907deg);\n animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1);\n }\n 20% {\n transform: translate(139.785027px, 140.086989px) rotate(-108.6deg);\n animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1);\n }\n 30% {\n transform: translate(139.785027px, 140.086989px) rotate(-17.484014deg);\n animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1);\n }\n 33.333333% {\n transform: translate(139.785027px, 140.086989px) rotate(-17.48deg);\n animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1);\n }\n 43.333333% {\n transform: translate(139.785027px, 140.086989px) rotate(160.887995deg);\n }\n 100% {\n transform: translate(139.785027px, 140.086989px) rotate(160.887995deg);\n }"]))),_a=(0,a.i7)(ta||(ta=We(["\n 0% {\n transform: scale(1, 0.995019);\n }\n 33.333333% {\n transform: scale(1, 0.995019);\n animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1);\n }\n 43.333333% {\n transform: scale(0.101121, 0.102033);\n animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1);\n }\n 50% {\n transform: scale(0.1, 0.1);\n animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1);\n }\n 60% {\n transform: scale(1, 1);\n }\n 100% {\n transform: scale(1, 1);\n }\n"],["\n 0% {\n transform: scale(1, 0.995019);\n }\n 33.333333% {\n transform: scale(1, 0.995019);\n animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1);\n }\n 43.333333% {\n transform: scale(0.101121, 0.102033);\n animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1);\n }\n 50% {\n transform: scale(0.1, 0.1);\n animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1);\n }\n 60% {\n transform: scale(1, 1);\n }\n 100% {\n transform: scale(1, 1);\n }\n"]))),Sa=(0,a.i7)(na||(na=We(["\n 0% {\n opacity: 1;\n }\n 6.666667% {\n opacity: 1;\n }\n 10% {\n opacity: 0;\n }\n 13.333333% {\n opacity: 0;\n }\n 20% {\n opacity: 1;\n }\n 30% {\n opacity: 1;\n }\n 36.666667% {\n opacity: 1;\n }\n 40% {\n opacity: 0;\n }\n 100% {\n opacity: 0;\n }\n"],["\n 0% {\n opacity: 1;\n }\n 6.666667% {\n opacity: 1;\n }\n 10% {\n opacity: 0;\n }\n 13.333333% {\n opacity: 0;\n }\n 20% {\n opacity: 1;\n }\n 30% {\n opacity: 1;\n }\n 36.666667% {\n opacity: 1;\n }\n 40% {\n opacity: 0;\n }\n 100% {\n opacity: 0;\n }\n"]))),Ta=(0,a.i7)(ra||(ra=We(['\n 0% {\n d: path("M85.4,249.8C109.08,255.3,133.72,257.37,157.65,252.14C181.65,246.89,202.95,233.55,219.27,215.35C227.84,205.79,213.74,191.6,205.13,201.21C190.9,217.1,173.27,228.26,152.34,232.86C132.03,237.32,110.79,235.19,90.73,230.52C78.19,227.61,72.85,246.88,85.4,249.8C85.4,249.8,85.4,249.8,85.4,249.8Z");\n }\n 10% {\n d: path("M85.4,249.8C85.4,249.8,85.399999,249.800001,85.399999,249.800001C85.399999,249.800001,85.4,249.800002,85.4,249.800002C85.4,249.800002,90.484102,251.966034,95.043213,248.269966C100.484052,243.859082,98.694728,236.722769,97.073675,234.469349C95.517658,232.306335,94.559418,231.751273,90.73,230.52C78.19,227.61,72.85,246.88,85.4,249.8C85.4,249.8,85.4,249.8,85.4,249.8Z");\n }\n 20% {\n d: path("M85.4,249.8C85.4,249.8,85.399999,249.800001,85.399999,249.800001C85.399999,249.800001,85.4,249.800002,85.4,249.800002C85.4,249.800002,90.484102,251.966034,95.043213,248.269966C100.484052,243.859082,98.694728,236.722769,97.073675,234.469349C95.517658,232.306335,94.559418,231.751273,90.73,230.52C78.19,227.61,72.85,246.88,85.4,249.8C85.4,249.8,85.4,249.8,85.4,249.8Z");\n }\n 30% {\n d: path("M85.4,249.8C109.08,255.3,133.72,257.37,157.65,252.14C181.65,246.89,202.95,233.55,219.27,215.35C227.84,205.79,213.74,191.6,205.13,201.21C190.9,217.1,173.27,228.26,152.34,232.86C132.03,237.32,110.79,235.19,90.73,230.52C78.19,227.61,72.85,246.88,85.4,249.8C85.4,249.8,85.4,249.8,85.4,249.8Z");\n }\n 33.333333% {\n d: path("M85.4,249.8C109.08,255.3,133.72,257.37,157.65,252.14C181.65,246.89,202.95,233.55,219.27,215.35C227.84,205.79,213.74,191.6,205.13,201.21C190.9,217.1,173.27,228.26,152.34,232.86C132.03,237.32,110.79,235.19,90.73,230.52C78.19,227.61,72.85,246.88,85.4,249.8C85.4,249.8,85.4,249.8,85.4,249.8Z");\n }\n 43.333333% {\n d: path("M84.281285,246.076032C107.50521,254.051555,133.72,257.37,157.65,252.14C181.65,246.89,202.95,233.55,219.27,215.35C227.84,205.79,213.74,191.6,205.13,201.21C190.9,217.1,173.27,228.26,152.34,232.86C132.03,237.32,86.465691,239.82846,53.85604,207.193233C41.31604,204.283233,32.439249,213.928672,40.474905,219.54755C40.474905,219.54755,61.310295,238.187372,84.281285,246.076032Z");\n }\n 100% {\n d: path("M84.281285,246.076032C107.50521,254.051555,133.72,257.37,157.65,252.14C181.65,246.89,202.95,233.55,219.27,215.35C227.84,205.79,213.74,191.6,205.13,201.21C190.9,217.1,173.27,228.26,152.34,232.86C132.03,237.32,86.465691,239.82846,53.85604,207.193233C41.31604,204.283233,32.439249,213.928672,40.474905,219.54755C40.474905,219.54755,61.310295,238.187372,84.281285,246.076032Z");\n }\n'],['\n 0% {\n d: path("M85.4,249.8C109.08,255.3,133.72,257.37,157.65,252.14C181.65,246.89,202.95,233.55,219.27,215.35C227.84,205.79,213.74,191.6,205.13,201.21C190.9,217.1,173.27,228.26,152.34,232.86C132.03,237.32,110.79,235.19,90.73,230.52C78.19,227.61,72.85,246.88,85.4,249.8C85.4,249.8,85.4,249.8,85.4,249.8Z");\n }\n 10% {\n d: path("M85.4,249.8C85.4,249.8,85.399999,249.800001,85.399999,249.800001C85.399999,249.800001,85.4,249.800002,85.4,249.800002C85.4,249.800002,90.484102,251.966034,95.043213,248.269966C100.484052,243.859082,98.694728,236.722769,97.073675,234.469349C95.517658,232.306335,94.559418,231.751273,90.73,230.52C78.19,227.61,72.85,246.88,85.4,249.8C85.4,249.8,85.4,249.8,85.4,249.8Z");\n }\n 20% {\n d: path("M85.4,249.8C85.4,249.8,85.399999,249.800001,85.399999,249.800001C85.399999,249.800001,85.4,249.800002,85.4,249.800002C85.4,249.800002,90.484102,251.966034,95.043213,248.269966C100.484052,243.859082,98.694728,236.722769,97.073675,234.469349C95.517658,232.306335,94.559418,231.751273,90.73,230.52C78.19,227.61,72.85,246.88,85.4,249.8C85.4,249.8,85.4,249.8,85.4,249.8Z");\n }\n 30% {\n d: path("M85.4,249.8C109.08,255.3,133.72,257.37,157.65,252.14C181.65,246.89,202.95,233.55,219.27,215.35C227.84,205.79,213.74,191.6,205.13,201.21C190.9,217.1,173.27,228.26,152.34,232.86C132.03,237.32,110.79,235.19,90.73,230.52C78.19,227.61,72.85,246.88,85.4,249.8C85.4,249.8,85.4,249.8,85.4,249.8Z");\n }\n 33.333333% {\n d: path("M85.4,249.8C109.08,255.3,133.72,257.37,157.65,252.14C181.65,246.89,202.95,233.55,219.27,215.35C227.84,205.79,213.74,191.6,205.13,201.21C190.9,217.1,173.27,228.26,152.34,232.86C132.03,237.32,110.79,235.19,90.73,230.52C78.19,227.61,72.85,246.88,85.4,249.8C85.4,249.8,85.4,249.8,85.4,249.8Z");\n }\n 43.333333% {\n d: path("M84.281285,246.076032C107.50521,254.051555,133.72,257.37,157.65,252.14C181.65,246.89,202.95,233.55,219.27,215.35C227.84,205.79,213.74,191.6,205.13,201.21C190.9,217.1,173.27,228.26,152.34,232.86C132.03,237.32,86.465691,239.82846,53.85604,207.193233C41.31604,204.283233,32.439249,213.928672,40.474905,219.54755C40.474905,219.54755,61.310295,238.187372,84.281285,246.076032Z");\n }\n 100% {\n d: path("M84.281285,246.076032C107.50521,254.051555,133.72,257.37,157.65,252.14C181.65,246.89,202.95,233.55,219.27,215.35C227.84,205.79,213.74,191.6,205.13,201.21C190.9,217.1,173.27,228.26,152.34,232.86C132.03,237.32,86.465691,239.82846,53.85604,207.193233C41.31604,204.283233,32.439249,213.928672,40.474905,219.54755C40.474905,219.54755,61.310295,238.187372,84.281285,246.076032Z");\n }\n']))),Aa=(0,a.i7)(aa||(aa=We(['\n 0% {\n d: path("M249.74,169.63C255.24,145.95,257.31,121.31,252.08,97.38C246.83,73.38,233.49,52.08,215.29,35.76C205.73,27.19,191.54,41.29,201.15,49.9C217.04,64.13,228.2,81.76,232.8,102.69C237.26,123,235.13,144.24,230.46,164.3C227.54,176.84,246.82,182.18,249.74,169.63C249.74,169.63,249.74,169.63,249.74,169.63Z");\n }\n 10% {\n d: path("M250.887564,168.08137C250.887564,168.081368,250.887563,168.081375,250.887563,168.081375C250.887563,168.081375,253.7831,157.676613,244.778825,154.781475C235.762034,151.882313,232.694053,158.881918,231.752888,162.486547C231.017121,165.304508,231.564293,168.517464,232.231509,169.666243C233.407087,171.690293,235.517449,173.828597,238.467701,174.606956C241.339242,175.364549,245.542656,175.427978,248.770823,172.704057C248.770823,172.704057,250.400569,171.202441,250.887564,168.08137Z");\n }\n 20% {\n d: path("M250.887564,168.08137C250.887564,168.081368,250.887563,168.081375,250.887563,168.081375C250.887563,168.081375,253.7831,157.676613,244.778825,154.781475C235.762034,151.882313,232.694053,158.881918,231.752888,162.486547C231.017121,165.304508,231.564293,168.517464,232.231509,169.666243C233.407087,171.690293,235.517449,173.828597,238.467701,174.606956C241.339242,175.364549,245.542656,175.427978,248.770823,172.704057C248.770823,172.704057,250.400569,171.202441,250.887564,168.08137Z");\n }\n 30% {\n d: path("M249.74,169.63C255.24,145.95,257.31,121.31,252.08,97.38C246.83,73.38,233.49,52.08,215.29,35.76C205.73,27.19,191.54,41.29,201.15,49.9C217.04,64.13,228.2,81.76,232.8,102.69C237.26,123,235.13,144.24,230.46,164.3C227.54,176.84,246.82,182.18,249.74,169.63C249.74,169.63,249.74,169.63,249.74,169.63Z");\n }\n 33.333333% {\n d: path("M249.74,169.63C255.24,145.95,257.31,121.31,252.08,97.38C246.83,73.38,233.49,52.08,215.29,35.76C205.73,27.19,191.54,41.29,201.15,49.9C217.04,64.13,228.2,81.76,232.8,102.69C237.26,123,235.13,144.24,230.46,164.3C227.54,176.84,246.82,182.18,249.74,169.63C249.74,169.63,249.74,169.63,249.74,169.63Z");\n }\n 43.333333% {\n d: path("M241.985702,180.287452C255.201364,145.393106,257.31,121.31,252.08,97.38C246.83,73.38,233.49,52.08,215.29,35.76C205.73,27.19,189.760952,38.146938,199.370952,46.756938C229.706596,66.855753,234.126292,101.544407,234.194759,127.574104C235.798839,155.047874,216.192342,185.901625,205.13,201.21C199.980012,208.336696,214.039151,220.128533,219.270001,215.35C219.270001,215.35,237.299554,192.660656,241.985702,180.287452Z");\n }\n 100% {\n d: path("M241.985702,180.287452C255.201364,145.393106,257.31,121.31,252.08,97.38C246.83,73.38,233.49,52.08,215.29,35.76C205.73,27.19,189.760952,38.146938,199.370952,46.756938C229.706596,66.855753,234.126292,101.544407,234.194759,127.574104C235.798839,155.047874,216.192342,185.901625,205.13,201.21C199.980012,208.336696,214.039151,220.128533,219.270001,215.35C219.270001,215.35,237.299554,192.660656,241.985702,180.287452Z");\n }\n'],['\n 0% {\n d: path("M249.74,169.63C255.24,145.95,257.31,121.31,252.08,97.38C246.83,73.38,233.49,52.08,215.29,35.76C205.73,27.19,191.54,41.29,201.15,49.9C217.04,64.13,228.2,81.76,232.8,102.69C237.26,123,235.13,144.24,230.46,164.3C227.54,176.84,246.82,182.18,249.74,169.63C249.74,169.63,249.74,169.63,249.74,169.63Z");\n }\n 10% {\n d: path("M250.887564,168.08137C250.887564,168.081368,250.887563,168.081375,250.887563,168.081375C250.887563,168.081375,253.7831,157.676613,244.778825,154.781475C235.762034,151.882313,232.694053,158.881918,231.752888,162.486547C231.017121,165.304508,231.564293,168.517464,232.231509,169.666243C233.407087,171.690293,235.517449,173.828597,238.467701,174.606956C241.339242,175.364549,245.542656,175.427978,248.770823,172.704057C248.770823,172.704057,250.400569,171.202441,250.887564,168.08137Z");\n }\n 20% {\n d: path("M250.887564,168.08137C250.887564,168.081368,250.887563,168.081375,250.887563,168.081375C250.887563,168.081375,253.7831,157.676613,244.778825,154.781475C235.762034,151.882313,232.694053,158.881918,231.752888,162.486547C231.017121,165.304508,231.564293,168.517464,232.231509,169.666243C233.407087,171.690293,235.517449,173.828597,238.467701,174.606956C241.339242,175.364549,245.542656,175.427978,248.770823,172.704057C248.770823,172.704057,250.400569,171.202441,250.887564,168.08137Z");\n }\n 30% {\n d: path("M249.74,169.63C255.24,145.95,257.31,121.31,252.08,97.38C246.83,73.38,233.49,52.08,215.29,35.76C205.73,27.19,191.54,41.29,201.15,49.9C217.04,64.13,228.2,81.76,232.8,102.69C237.26,123,235.13,144.24,230.46,164.3C227.54,176.84,246.82,182.18,249.74,169.63C249.74,169.63,249.74,169.63,249.74,169.63Z");\n }\n 33.333333% {\n d: path("M249.74,169.63C255.24,145.95,257.31,121.31,252.08,97.38C246.83,73.38,233.49,52.08,215.29,35.76C205.73,27.19,191.54,41.29,201.15,49.9C217.04,64.13,228.2,81.76,232.8,102.69C237.26,123,235.13,144.24,230.46,164.3C227.54,176.84,246.82,182.18,249.74,169.63C249.74,169.63,249.74,169.63,249.74,169.63Z");\n }\n 43.333333% {\n d: path("M241.985702,180.287452C255.201364,145.393106,257.31,121.31,252.08,97.38C246.83,73.38,233.49,52.08,215.29,35.76C205.73,27.19,189.760952,38.146938,199.370952,46.756938C229.706596,66.855753,234.126292,101.544407,234.194759,127.574104C235.798839,155.047874,216.192342,185.901625,205.13,201.21C199.980012,208.336696,214.039151,220.128533,219.270001,215.35C219.270001,215.35,237.299554,192.660656,241.985702,180.287452Z");\n }\n 100% {\n d: path("M241.985702,180.287452C255.201364,145.393106,257.31,121.31,252.08,97.38C246.83,73.38,233.49,52.08,215.29,35.76C205.73,27.19,189.760952,38.146938,199.370952,46.756938C229.706596,66.855753,234.126292,101.544407,234.194759,127.574104C235.798839,155.047874,216.192342,185.901625,205.13,201.21C199.980012,208.336696,214.039151,220.128533,219.270001,215.35C219.270001,215.35,237.299554,192.660656,241.985702,180.287452Z");\n }\n']))),Ca=(0,a.i7)(oa||(oa=We(['\n 0% {\n d: path("M171.68,7.71C148.17,1.51,123.61,-1.28,99.53,3.25C75.39,7.79,53.7,20.49,36.85,38.21C28.01,47.52,41.68,62.11,50.57,52.76C65.27,37.3,83.22,26.66,104.27,22.68C124.7,18.82,145.87,21.58,165.79,26.83C178.22,30.11,184.14,11,171.68,7.71C171.68,7.71,171.68,7.71,171.68,7.71Z");\n }\n 10% {\n d: path("M171.58686,7.8192C164.834536,7.661923,162.882928,13.414575,162.613915,14.669774C162.613914,14.669774,161.858025,17.37084,162.366976,18.743708C162.782522,19.864622,163.527502,21.022768,164.723558,21.957074C165.842173,22.830886,168.859974,24.254302,168.859974,24.254302C168.859974,24.254302,168.859968,24.254306,168.859967,24.254304C181.289967,27.534304,184.046866,11.109212,171.586866,7.819212C171.586866,7.819212,171.58686,7.8192,171.58686,7.8192Z");\n }\n 20% {\n d: path("M171.58686,7.8192C164.834536,7.661923,162.882928,13.414575,162.613915,14.669774C162.613914,14.669774,161.858025,17.37084,162.366976,18.743708C162.782522,19.864622,163.527502,21.022768,164.723558,21.957074C165.842173,22.830886,168.859974,24.254302,168.859974,24.254302C168.859974,24.254302,168.859968,24.254306,168.859967,24.254304C181.289967,27.534304,184.046866,11.109212,171.586866,7.819212C171.586866,7.819212,171.58686,7.8192,171.58686,7.8192Z");\n }\n 30% {\n d: path("M171.68,7.71C148.17,1.51,123.61,-1.28,99.53,3.25C75.39,7.79,53.7,20.49,36.85,38.21C28.01,47.52,41.68,62.11,50.57,52.76C65.27,37.3,83.22,26.66,104.27,22.68C124.7,18.82,145.87,21.58,165.79,26.83C178.22,30.11,184.14,11,171.68,7.71C171.68,7.71,171.68,7.71,171.68,7.71Z");\n }\n 33.333333% {\n d: path("M171.68,7.71C148.17,1.51,123.61,-1.28,99.53,3.25C75.39,7.79,53.7,20.49,36.85,38.21C28.01,47.52,41.68,62.11,50.57,52.76C65.27,37.3,83.22,26.66,104.27,22.68C124.7,18.82,145.87,21.58,165.79,26.83C178.22,30.11,184.14,11,171.68,7.71C171.68,7.71,171.68,7.71,171.68,7.71Z");\n }\n 43.333333% {\n d: path("M154.601291,1.547478C127.732134,-3.659063,101.676041,0.16217,89.834975,4.047622C73.018778,9.565582,43.015709,29.967817,36.85,38.21C28.01,47.52,41.568561,62.002759,50.57,52.76C67.005248,35.884138,77.788003,22.937369,100.935291,18.024709C148.028227,8.029949,175.904245,24.591662,199.370952,46.756938C210.775532,51.88401,219.463487,39.878796,215.289997,35.759998C189.664787,10.470596,154.601291,1.547478,154.601291,1.547478Z");\n }\n 100% {\n d: path("M154.601291,1.547478C127.732134,-3.659063,101.676041,0.16217,89.834975,4.047622C73.018778,9.565582,43.015709,29.967817,36.85,38.21C28.01,47.52,41.568561,62.002759,50.57,52.76C67.005248,35.884138,77.788003,22.937369,100.935291,18.024709C148.028227,8.029949,175.904245,24.591662,199.370952,46.756938C210.775532,51.88401,219.463487,39.878796,215.289997,35.759998C189.664787,10.470596,154.601291,1.547478,154.601291,1.547478Z");\n }\n'],['\n 0% {\n d: path("M171.68,7.71C148.17,1.51,123.61,-1.28,99.53,3.25C75.39,7.79,53.7,20.49,36.85,38.21C28.01,47.52,41.68,62.11,50.57,52.76C65.27,37.3,83.22,26.66,104.27,22.68C124.7,18.82,145.87,21.58,165.79,26.83C178.22,30.11,184.14,11,171.68,7.71C171.68,7.71,171.68,7.71,171.68,7.71Z");\n }\n 10% {\n d: path("M171.58686,7.8192C164.834536,7.661923,162.882928,13.414575,162.613915,14.669774C162.613914,14.669774,161.858025,17.37084,162.366976,18.743708C162.782522,19.864622,163.527502,21.022768,164.723558,21.957074C165.842173,22.830886,168.859974,24.254302,168.859974,24.254302C168.859974,24.254302,168.859968,24.254306,168.859967,24.254304C181.289967,27.534304,184.046866,11.109212,171.586866,7.819212C171.586866,7.819212,171.58686,7.8192,171.58686,7.8192Z");\n }\n 20% {\n d: path("M171.58686,7.8192C164.834536,7.661923,162.882928,13.414575,162.613915,14.669774C162.613914,14.669774,161.858025,17.37084,162.366976,18.743708C162.782522,19.864622,163.527502,21.022768,164.723558,21.957074C165.842173,22.830886,168.859974,24.254302,168.859974,24.254302C168.859974,24.254302,168.859968,24.254306,168.859967,24.254304C181.289967,27.534304,184.046866,11.109212,171.586866,7.819212C171.586866,7.819212,171.58686,7.8192,171.58686,7.8192Z");\n }\n 30% {\n d: path("M171.68,7.71C148.17,1.51,123.61,-1.28,99.53,3.25C75.39,7.79,53.7,20.49,36.85,38.21C28.01,47.52,41.68,62.11,50.57,52.76C65.27,37.3,83.22,26.66,104.27,22.68C124.7,18.82,145.87,21.58,165.79,26.83C178.22,30.11,184.14,11,171.68,7.71C171.68,7.71,171.68,7.71,171.68,7.71Z");\n }\n 33.333333% {\n d: path("M171.68,7.71C148.17,1.51,123.61,-1.28,99.53,3.25C75.39,7.79,53.7,20.49,36.85,38.21C28.01,47.52,41.68,62.11,50.57,52.76C65.27,37.3,83.22,26.66,104.27,22.68C124.7,18.82,145.87,21.58,165.79,26.83C178.22,30.11,184.14,11,171.68,7.71C171.68,7.71,171.68,7.71,171.68,7.71Z");\n }\n 43.333333% {\n d: path("M154.601291,1.547478C127.732134,-3.659063,101.676041,0.16217,89.834975,4.047622C73.018778,9.565582,43.015709,29.967817,36.85,38.21C28.01,47.52,41.568561,62.002759,50.57,52.76C67.005248,35.884138,77.788003,22.937369,100.935291,18.024709C148.028227,8.029949,175.904245,24.591662,199.370952,46.756938C210.775532,51.88401,219.463487,39.878796,215.289997,35.759998C189.664787,10.470596,154.601291,1.547478,154.601291,1.547478Z");\n }\n 100% {\n d: path("M154.601291,1.547478C127.732134,-3.659063,101.676041,0.16217,89.834975,4.047622C73.018778,9.565582,43.015709,29.967817,36.85,38.21C28.01,47.52,41.568561,62.002759,50.57,52.76C67.005248,35.884138,77.788003,22.937369,100.935291,18.024709C148.028227,8.029949,175.904245,24.591662,199.370952,46.756938C210.775532,51.88401,219.463487,39.878796,215.289997,35.759998C189.664787,10.470596,154.601291,1.547478,154.601291,1.547478Z");\n }\n']))),wa=(0,a.i7)(ia||(ia=We(['\n 0% {\n d: path("M5.83,85.46C0.33,109.14,-1.74,133.78,3.49,157.71C8.74,181.71,22.08,203.01,40.28,219.33C49.84,227.9,64.03,213.8,54.42,205.19C38.53,190.96,27.37,173.33,22.77,152.4C18.31,132.09,20.44,110.85,25.11,90.79C28.03,78.25,8.75,72.91,5.83,85.46L5.83,85.46Z");\n }\n 3.333333% {\n d: path("M4.90273,88.748028C1.236063,104.534694,0.694614,122.375568,4.181281,138.328902C7.119767,155.82704,18.329955,178.442148,31.722495,188.944182C39.448991,194.869945,48.960631,181.919808,35.808325,167.974185C27.053341,155.46954,26.778713,144.786038,23.180834,130.168643C19.139468,114.899686,18.114526,100.786543,20.952073,87.411869C21.572437,79.045425,6.897064,77.595457,4.916661,86.915441L4.90273,88.748028Z");\n }\n 10% {\n d: path("M3.04819,95.324083C3.04819,95.324083,5.563842,99.566705,5.563842,99.566705C5.563842,99.566705,11.253926,104.287825,15.031546,103.153927C19.091035,103.791214,24.274539,98.764542,25.851733,95.404259C27.275674,92.370488,25.596139,87.698114,24.002501,85.705929C20.798403,80.519057,13.463578,80.659628,12.636219,80.655608C8.65731,80.636275,3.191193,86.96637,3.089982,89.826322L3.04819,95.324083Z");\n }\n 20% {\n d: path("M3.04819,95.324083C3.04819,95.324083,5.563842,99.566705,5.563842,99.566705C5.563842,99.566705,11.253926,104.287825,15.031546,103.153927C19.091035,103.791214,24.274539,98.764542,25.851733,95.404259C27.275674,92.370488,25.596139,87.698114,24.002501,85.705929C20.798403,80.519057,13.463578,80.659628,12.636219,80.655608C8.65731,80.636275,3.191193,86.96637,3.089982,89.826322L3.04819,95.324083Z");\n }\n 30% {\n d: path("M5.83,85.46C0.33,109.14,-1.74,133.78,3.49,157.71C8.74,181.71,22.08,203.01,40.28,219.33C49.84,227.9,64.03,213.8,54.42,205.19C38.53,190.96,27.37,173.33,22.77,152.4C18.31,132.09,20.44,110.85,25.11,90.79C28.03,78.25,8.75,72.91,5.83,85.46L5.83,85.46Z");\n }\n 33.333333% {\n d: path("M5.83,85.46C0.33,109.14,-1.74,133.78,3.49,157.71C8.74,181.71,22.08,203.01,40.28,219.33C49.84,227.9,64.03,213.8,54.42,205.19C38.53,190.96,27.37,173.33,22.77,152.4C18.31,132.09,20.44,110.85,25.11,90.79C28.03,78.25,8.75,72.91,5.83,85.46L5.83,85.46Z");\n }\n 43.333333% {\n d: path("M36.436007,38.11681C-7.498754,85.801617,-0.826469,134.911183,5.658972,158.164678C15.873566,192.855226,35.43893,215.965329,40.28,219.33C49.84,227.9,63.271136,215.585685,53.661136,206.975685C38.384036,191.128398,25.999041,166.121323,22.77,152.4C12.429986,121.009925,27.020185,73.061168,50.245766,52.61587C65.058304,39.576508,51.054205,23.186387,36.436019,38.116819L36.436007,38.11681Z");\n }\n 100% {\n d: path("M36.436007,38.11681C-7.498754,85.801617,-0.826469,134.911183,5.658972,158.164678C15.873566,192.855226,35.43893,215.965329,40.28,219.33C49.84,227.9,63.271136,215.585685,53.661136,206.975685C38.384036,191.128398,25.999041,166.121323,22.77,152.4C12.429986,121.009925,27.020185,73.061168,50.245766,52.61587C65.058304,39.576508,51.054205,23.186387,36.436019,38.116819L36.436007,38.11681Z");\n }\n'],['\n 0% {\n d: path("M5.83,85.46C0.33,109.14,-1.74,133.78,3.49,157.71C8.74,181.71,22.08,203.01,40.28,219.33C49.84,227.9,64.03,213.8,54.42,205.19C38.53,190.96,27.37,173.33,22.77,152.4C18.31,132.09,20.44,110.85,25.11,90.79C28.03,78.25,8.75,72.91,5.83,85.46L5.83,85.46Z");\n }\n 3.333333% {\n d: path("M4.90273,88.748028C1.236063,104.534694,0.694614,122.375568,4.181281,138.328902C7.119767,155.82704,18.329955,178.442148,31.722495,188.944182C39.448991,194.869945,48.960631,181.919808,35.808325,167.974185C27.053341,155.46954,26.778713,144.786038,23.180834,130.168643C19.139468,114.899686,18.114526,100.786543,20.952073,87.411869C21.572437,79.045425,6.897064,77.595457,4.916661,86.915441L4.90273,88.748028Z");\n }\n 10% {\n d: path("M3.04819,95.324083C3.04819,95.324083,5.563842,99.566705,5.563842,99.566705C5.563842,99.566705,11.253926,104.287825,15.031546,103.153927C19.091035,103.791214,24.274539,98.764542,25.851733,95.404259C27.275674,92.370488,25.596139,87.698114,24.002501,85.705929C20.798403,80.519057,13.463578,80.659628,12.636219,80.655608C8.65731,80.636275,3.191193,86.96637,3.089982,89.826322L3.04819,95.324083Z");\n }\n 20% {\n d: path("M3.04819,95.324083C3.04819,95.324083,5.563842,99.566705,5.563842,99.566705C5.563842,99.566705,11.253926,104.287825,15.031546,103.153927C19.091035,103.791214,24.274539,98.764542,25.851733,95.404259C27.275674,92.370488,25.596139,87.698114,24.002501,85.705929C20.798403,80.519057,13.463578,80.659628,12.636219,80.655608C8.65731,80.636275,3.191193,86.96637,3.089982,89.826322L3.04819,95.324083Z");\n }\n 30% {\n d: path("M5.83,85.46C0.33,109.14,-1.74,133.78,3.49,157.71C8.74,181.71,22.08,203.01,40.28,219.33C49.84,227.9,64.03,213.8,54.42,205.19C38.53,190.96,27.37,173.33,22.77,152.4C18.31,132.09,20.44,110.85,25.11,90.79C28.03,78.25,8.75,72.91,5.83,85.46L5.83,85.46Z");\n }\n 33.333333% {\n d: path("M5.83,85.46C0.33,109.14,-1.74,133.78,3.49,157.71C8.74,181.71,22.08,203.01,40.28,219.33C49.84,227.9,64.03,213.8,54.42,205.19C38.53,190.96,27.37,173.33,22.77,152.4C18.31,132.09,20.44,110.85,25.11,90.79C28.03,78.25,8.75,72.91,5.83,85.46L5.83,85.46Z");\n }\n 43.333333% {\n d: path("M36.436007,38.11681C-7.498754,85.801617,-0.826469,134.911183,5.658972,158.164678C15.873566,192.855226,35.43893,215.965329,40.28,219.33C49.84,227.9,63.271136,215.585685,53.661136,206.975685C38.384036,191.128398,25.999041,166.121323,22.77,152.4C12.429986,121.009925,27.020185,73.061168,50.245766,52.61587C65.058304,39.576508,51.054205,23.186387,36.436019,38.116819L36.436007,38.11681Z");\n }\n 100% {\n d: path("M36.436007,38.11681C-7.498754,85.801617,-0.826469,134.911183,5.658972,158.164678C15.873566,192.855226,35.43893,215.965329,40.28,219.33C49.84,227.9,63.271136,215.585685,53.661136,206.975685C38.384036,191.128398,25.999041,166.121323,22.77,152.4C12.429986,121.009925,27.020185,73.061168,50.245766,52.61587C65.058304,39.576508,51.054205,23.186387,36.436019,38.116819L36.436007,38.11681Z");\n }\n']))),Na=(0,a.i7)(sa||(sa=We(["\n 0% {\n transform: translate(139.784999px, 140.086986px) scale(1, 1);\n }\n 30% {\n transform: translate(139.784999px, 140.086986px) scale(1, 1);\n }\n 43.333333% {\n transform: translate(139.784999px, 140.086986px) scale(0.102813, 0.102813);\n }\n 50% {\n transform: translate(139.784999px, 140.086986px) scale(0.102813, 0.102813);\n }\n 60% {\n transform: translate(139.784999px, 140.086986px) scale(1.001075, 1.001075);\n }\n 100% {\n transform: translate(139.784999px, 140.086986px) scale(1.001075, 1.001075);\n }\n"],["\n 0% {\n transform: translate(139.784999px, 140.086986px) scale(1, 1);\n }\n 30% {\n transform: translate(139.784999px, 140.086986px) scale(1, 1);\n }\n 43.333333% {\n transform: translate(139.784999px, 140.086986px) scale(0.102813, 0.102813);\n }\n 50% {\n transform: translate(139.784999px, 140.086986px) scale(0.102813, 0.102813);\n }\n 60% {\n transform: translate(139.784999px, 140.086986px) scale(1.001075, 1.001075);\n }\n 100% {\n transform: translate(139.784999px, 140.086986px) scale(1.001075, 1.001075);\n }\n"]))),Ia=(0,a.i7)(la||(la=We(["\n 0% {\n opacity: 0;\n }\n 30% {\n opacity: 0;\n }\n 36.666667% {\n opacity: 0;\n }\n 40% {\n opacity: 1;\n }\n 100% {\n opacity: 1;\n }\n"],["\n 0% {\n opacity: 0;\n }\n 30% {\n opacity: 0;\n }\n 36.666667% {\n opacity: 0;\n }\n 40% {\n opacity: 1;\n }\n 100% {\n opacity: 1;\n }\n"]))),xa=(0,a.i7)(ca||(ca=We(["0% {\n transform: translate(139.785004px, 140.086979px) rotate(0deg);\n }\n 10% {\n transform: translate(139.785004px, 140.086979px) rotate(0deg);\n }\n 20% {\n transform: translate(139.785004px, 140.086979px) rotate(90.041277deg);\n }\n 100% {\n transform: translate(139.785004px, 140.086979px) rotate(90.041277deg);\n }"],["0% {\n transform: translate(139.785004px, 140.086979px) rotate(0deg);\n }\n 10% {\n transform: translate(139.785004px, 140.086979px) rotate(0deg);\n }\n 20% {\n transform: translate(139.785004px, 140.086979px) rotate(90.041277deg);\n }\n 100% {\n transform: translate(139.785004px, 140.086979px) rotate(90.041277deg);\n }"]))),Ra=(0,a.i7)(ua||(ua=We(["\n 0% {\n opacity: 0;\n }\n 6.666667% {\n opacity: 0;\n }\n 10% {\n opacity: 1;\n }\n 13.333333% {\n opacity: 1;\n }\n 20% {\n opacity: 0;\n }\n 100% {\n opacity: 0;\n }\n"],["\n 0% {\n opacity: 0;\n }\n 6.666667% {\n opacity: 0;\n }\n 10% {\n opacity: 1;\n }\n 13.333333% {\n opacity: 1;\n }\n 20% {\n opacity: 0;\n }\n 100% {\n opacity: 0;\n }\n"]))),ka=a.Ay.svg({width:40,height:40},(0,a.AH)(da||(da=We(["\n path {\n fill: ",";\n }\n #section1 {\n animation: "," 3000ms linear infinite normal forwards;\n }\n #section2 {\n animation: "," 3000ms linear infinite normal forwards;\n }\n #section3 {\n animation: "," 3000ms linear infinite normal forwards;\n }\n #section4 {\n animation: "," 3000ms linear infinite normal forwards;\n }\n #section5 {\n animation: "," 3000ms linear infinite normal forwards;\n }\n #section6 {\n animation: "," 3000ms linear infinite normal forwards;\n }\n #section7 {\n animation: "," 3000ms linear infinite normal forwards;\n }\n #section8 {\n animation: "," 3000ms linear infinite normal forwards;\n }\n #section9 {\n animation: "," 3000ms linear infinite normal forwards;\n }\n #section10 {\n animation: "," 3000ms linear infinite normal forwards;\n }\n #section11 {\n animation: "," 3000ms linear infinite normal forwards;\n }\n "],["\n path {\n fill: ",";\n }\n #section1 {\n animation: "," 3000ms linear infinite normal forwards;\n }\n #section2 {\n animation: "," 3000ms linear infinite normal forwards;\n }\n #section3 {\n animation: "," 3000ms linear infinite normal forwards;\n }\n #section4 {\n animation: "," 3000ms linear infinite normal forwards;\n }\n #section5 {\n animation: "," 3000ms linear infinite normal forwards;\n }\n #section6 {\n animation: "," 3000ms linear infinite normal forwards;\n }\n #section7 {\n animation: "," 3000ms linear infinite normal forwards;\n }\n #section8 {\n animation: "," 3000ms linear infinite normal forwards;\n }\n #section9 {\n animation: "," 3000ms linear infinite normal forwards;\n }\n #section10 {\n animation: "," 3000ms linear infinite normal forwards;\n }\n #section11 {\n animation: "," 3000ms linear infinite normal forwards;\n }\n "])),(function(e){return Wn(e,"theme.loaderColor","#113053")}),ya,_a,Sa,Ta,Aa,Ca,wa,Na,Ia,xa,Ra)),Oa=function(e){return r.createElement(ka,je({viewBox:"0 0 280 280",shapeRendering:"geometricPrecision",textRendering:"geometricPrecision",className:"min-loader"},e),r.createElement("g",{id:"section1",transform:"translate(139.785027,140.086989) rotate(45.236493)"},r.createElement("g",{id:"section2",transform:"scale(1,0.995019)"},r.createElement("g",{id:"section3",transform:"translate(-127.784998,-128.086989)"},r.createElement("g",null,r.createElement("path",{id:"section4",d:"M85.4,249.8c23.68,5.5,48.32,7.57,72.25,2.34c24-5.25,45.3-18.59,61.62-36.79c8.57-9.56-5.53-23.75-14.14-14.14-14.23,15.89-31.86,27.05-52.79,31.65-20.31,4.46-41.55,2.33-61.61-2.34-12.54-2.91-17.88,16.36-5.33,19.28c0,0,0,0,0,0Z"})),r.createElement("g",null,r.createElement("path",{id:"section5",d:"M249.74,169.63c5.5-23.68,7.57-48.32,2.34-72.25-5.25-24-18.59-45.3-36.79-61.62-9.56-8.57-23.75,5.53-14.14,14.14c15.89,14.23,27.05,31.86,31.65,52.79c4.46,20.31,2.33,41.55-2.34,61.61-2.92,12.54,16.36,17.88,19.28,5.33c0,0,0,0,0,0Z"})),r.createElement("g",null,r.createElement("path",{id:"section6",d:"M171.68,7.71c-23.51-6.2-48.07-8.99-72.15-4.46C75.39,7.79,53.7,20.49,36.85,38.21c-8.84,9.31,4.83,23.9,13.72,14.55c14.7-15.46,32.65-26.1,53.7-30.08c20.43-3.86,41.6-1.1,61.52,4.15c12.43,3.28,18.35-15.83,5.89-19.12c0,0,0,0,0,0Z"})),r.createElement("g",null,r.createElement("path",{id:"section7",d:"M5.83,85.46c-5.5,23.68-7.57,48.32-2.34,72.25c5.25,24,18.59,45.3,36.79,61.62c9.56,8.57,23.75-5.53,14.14-14.14-15.89-14.23-27.05-31.86-31.65-52.79-4.46-20.31-2.33-41.55,2.34-61.61C28.03,78.25,8.75,72.91,5.83,85.46v0Z",transform:"translate(.194904 0.217549)"}))))),r.createElement("g",{id:"section8",transform:"translate(139.784999,140.086986) scale(1,1)"},r.createElement("g",{id:"section9",transform:"translate(-127.999996,-128.000003)",opacity:"0"},r.createElement("path",{d:"M234.23,128c0-58.67-47.56-106.23-106.23-106.23s-106.23,47.56-106.23,106.23s47.56,106.23,106.23,106.23c58.64-.06,106.17-47.59,106.23-106.23m21.25,0c0,70.4-57.07,127.48-127.48,127.48s-127.48-57.08-127.48-127.48s57.08-127.48,127.48-127.48s127.48,57.08,127.48,127.48Z"}))),r.createElement("g",{id:"section10",transform:"translate(139.785004,140.086979) rotate(0)"},r.createElement("g",{id:"section11",transform:"translate(-127.999968,-127.995139)",opacity:"0"},r.createElement("path",{d:"M128,0.47h.33c.36,0,.73,0,1.09.01h.17c5.45.09,9.79,4.57,9.73,10.02-.07,5.51-4.57,9.93-10.07,9.91h-1.24c-5.51-.04-9.96-4.51-9.96-10.02-.01-5.45,4.39-9.88,9.84-9.91h.11ZM245.62,118.39h.03c5.45.01,9.86,4.42,9.88,9.87c0,.04,0,.08,0,.12v0c0,.12,0,.24,0,.36v0c0,.01,0,.03,0,.04v.09c0,.37,0,.73-.01,1.09-.11,5.45-4.6,9.78-10.05,9.7-5.51-.08-9.92-4.6-9.88-10.1l.01-1.24c.06-5.49,4.52-9.92,10.02-9.93ZM126.01,235.58h.12l1.24.01c5.51.07,9.93,4.57,9.9,10.08-.04,5.48-4.51,9.89-9.99,9.85-.01,0-.02,0-.03,0h-.46-.19l-.82-.01h-.12c-5.45-.12-9.77-4.63-9.67-10.07.09-5.47,4.55-9.85,10.02-9.86ZM10.4,115.63h.2c5.51.12,9.89,4.65,9.82,10.16l-.02,1.24c-.09,5.5-4.59,9.91-10.1,9.88-5.45-.04-9.85-4.47-9.83-9.93c0-.04,0-.08,0-.12v0c0-.36,0-.73.01-1.09v-.09v0c0-.13,0-.27.01-.41.14-5.37,4.54-9.64,9.91-9.64Z"}))))},La=a.Ay.div((function(e){var t,n=e.theme,r=e.sx;return je(((t={display:"flex",flexDirection:"row",width:"100%",minHeight:83,backgroundColor:Wn(n,"pageHeader.background","#fff"),left:0,borderBottom:"1px solid ".concat(Wn(n,"pageHeader.border","#E5E5E5")),flexWrap:"wrap",justifyContent:"space-between",alignItems:"center"})["@media (max-width: ".concat(Wn(i,"md",0),"px)")]={"& > div":{margin:"4px 0",padding:"0 20px,"}},t),r)})),Da=a.Ay.div((function(e){var t=e.theme;return{color:Wn(t,"pageHeader.color","#000"),fontSize:18,fontWeight:700,paddingLeft:20,display:"flex",flexGrow:1,marginRight:10,"& a":{color:Wn(t,"pageHeader.color","#000"),textDecoration:"none"}}})),Ma=a.Ay.div((function(){return{display:"flex",justifyContent:"center",alignItems:"center",flexGrow:1,margin:"0 10px"}})),Pa=a.Ay.div((function(){return{display:"flex",justifyContent:"flex-end",paddingRight:20,flexGrow:1,marginLeft:10,"& button":{marginLeft:8}}})),Ba=function(e){var t=e.label,n=e.middleComponent,a=e.actions,o=e.sx;return r.createElement(La,{sx:o,className:"page-header"},r.createElement(Gr,{className:"page-header-label",item:!0,xs:12,sm:12,md:n?4:6},r.createElement(Da,null,t)),n&&r.createElement(Gr,{className:"page-header-middle",item:!0,xs:12,sm:12,md:4},r.createElement(Ma,null,n)),r.createElement(Gr,{className:"page-header-actions",item:!0,xs:12,sm:12,md:n?4:6},r.createElement(Pa,null,a)))},Fa=(0,a.i7)(pa||(pa=We(["\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n"],["\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n"]))),Ua=a.Ay.span({display:"inline-flex",position:"relative"},(0,a.AH)(ma||(ma=We(["\n &:hover {\n & .tooltipElement {\n display: block;\n animation: "," 1s;\n }\n }\n "],["\n &:hover {\n & .tooltipElement {\n display: block;\n animation: "," 1s;\n }\n }\n "])),Fa)),za=a.Ay.div((function(e){var t=e.theme,n=e.placement,r="6px",a=Wn(t,"tooltip.background","#737373"),o=Wn(t,"tooltip.color","#FFFFFF"),i={},s={content:"' '",left:"50%",border:"solid transparent",height:0,width:0,position:"absolute",pointerEvents:"none",borderWidth:r,marginLeft:"calc(".concat(r," * -1);")};switch(n){case"top":i={transform:"translateX(-50%) translateY(-50%)","&::before":je(je({},s),{top:"100%",borderTopColor:a})};break;case"right":i={transform:"translateX(0) translateY(-50%)","&::before":je(je({},s),{left:"calc(".concat(r," * -1)"),top:"50%",transform:"translateX(0) translateY(-50%)",borderRightColor:a})};break;case"left":i={transform:"translateX(-100%) translateY(-50%)","&::before":je(je({},s),{left:"auto",right:"calc(".concat(r," * -2)"),top:"50%",transform:"translateX(0) translateY(-50%)",borderLeftColor:a})};break;default:i={transform:"translateX(-50%)","&::before":je(je({},s),{bottom:"100%",borderBottomColor:a})}}return je({position:"fixed",borderRadius:4,color:o,background:a,lineHeight:1,zIndex:10001,padding:8,fontSize:12,boxShadow:"#00000050 0px 3px 10px",maxWidth:350},i)})),Ha=function(e){var t=e.placement,n=e.content,a=e.anchorEl,o={},i=t;if(a){var s=a.getBoundingClientRect(),l=document.documentElement.offsetWidth,c=document.documentElement.offsetHeight;switch(t){case"bottom":s.top+s.height+45>c&&(i="top");break;case"left":s.left-175<0&&(i="right");break;case"right":s.left+s.width+175>l&&(i="left");break;case"top":s.top<45&&(i="bottom")}switch(i){case"bottom":o={top:s.top+s.height+10,left:s.left+s.width/2};break;case"left":o={top:s.top+s.height/2,left:s.left-12};break;case"right":o={top:s.top+s.height/2,left:s.left+s.width+12};break;case"top":o={top:s.top-s.height/2-10,left:s.left+s.width/2}}}return r.createElement(za,{placement:i,style:o},n)},Ga=function(e){var t=e.children,n=e.tooltip,a=e.errorProps,i=e.placement,s=void 0===i?"bottom":i,l=(0,r.useState)(null),c=l[0],u=l[1],d=(0,r.useState)(!1),p=d[0],m=d[1];return""===n?r.createElement(r.Fragment,null,a?(0,r.cloneElement)(t,je({},a)):t):r.createElement(r.Fragment,null,r.createElement(Ua,{onPointerEnter:function(e){u(e.currentTarget),m(!0)},onPointerLeave:function(){m(!1)}},a?(0,r.cloneElement)(t,je({},a)):t,p&&(0,o.createPortal)(r.createElement(Ha,{placement:s,content:n,anchorEl:c}),document.body)))},ja=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 10.906 10.906"},e),r.createElement("path",{id:"Trazado_7002","data-name":"Trazado 7002",d:"M8.577,3a5.447,5.447,0,1,0,5.144,4.037,8.109,8.109,0,0,1-.951.783,6.211,6.211,0,0,1-2.174,1,2.252,2.252,0,0,1-2.143-.373,2.252,2.252,0,0,1-.373-2.143,6.234,6.234,0,0,1,1-2.174,8.085,8.085,0,0,1,.783-.951A5.483,5.483,0,0,0,8.577,3Zm2.961,8.536a4.343,4.343,0,0,0,1.228-2.42c-1.934,1.115-3.964,1.225-5.083.106s-1.009-3.149.106-5.083a4.362,4.362,0,1,0,3.75,7.4Z",transform:"translate(-3.001 -3.001)",fill:"#969fa8"}))},Va=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 16 16"},e),r.createElement("g",null,r.createElement("path",{id:"Trazado_7232","data-name":"Trazado 7232",d:"M8,0a8,8,0,1,0,8,8A8,8,0,0,0,8,0m3.235,5.4L8.965,8.174,10.949,10.6a.857.857,0,0,1-1.327,1.086h0L7.857,9.528,6.092,11.686A.857.857,0,0,1,4.765,10.6L6.749,8.174,4.479,5.4A.857.857,0,0,1,5.806,4.314L7.857,6.821l2.05-2.506A.857.857,0,1,1,11.235,5.4"})))},Za=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",viewBox:"0 0 256 256",fill:"currentcolor"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"clip-path"},r.createElement("rect",{id:"Rect\xe1ngulo_1043","data-name":"Rect\xe1ngulo 1043",width:"255.479",height:"241.736",fill:"none"})),r.createElement("clipPath",{id:"clip-Format_Drives"},r.createElement("rect",{width:"256",height:"256"}))),r.createElement("g",{id:"Format_Drives","data-name":"Format Drives",clipPath:"url(#clip-Format_Drives)"},r.createElement("g",{id:"Format_Drives_Icon","data-name":"Format Drives Icon"},r.createElement("g",{id:"Format_Drives_Icon-2","data-name":"Format Drives Icon",transform:"translate(0 -3)"},r.createElement("g",{id:"Grupo_2430","data-name":"Grupo 2430",transform:"translate(0 10)"},r.createElement("path",{id:"Trazado_7192","data-name":"Trazado 7192",d:"M0,256.464v65.03c0,9.7,41.2,28.6,116.725,28.6s116.722-18.726,116.722-28.6v-65.13c-26.62,13.381-71.916,20.19-116.722,20.19S26.621,269.674,0,256.464M40.1,318.11A17.441,17.441,0,1,1,45.765,294.1,17.442,17.442,0,0,1,40.1,318.11",transform:"translate(0 -108.359)"}),r.createElement("path",{id:"Trazado_7193","data-name":"Trazado 7193",d:"M223.775,18.83C207.485,9.744,170.954,0,116.724,0,41.2,0,0,18.9,0,28.6S41.2,57.2,116.724,57.2l0,0a393.878,393.878,0,0,0,42.7-2.213,48.4,48.4,0,0,0,.4,20.494,428.272,428.272,0,0,1-43.1,2.145c-44.807,0-90.1-6.877-116.724-20.19v61.728c0,9.7,41.2,28.6,116.724,28.6s116.722-18.9,116.722-28.6V104.95a48.484,48.484,0,0,0-9.672-86.12M40.1,121.058a17.441,17.441,0,1,1,5.666-24.006A17.441,17.441,0,0,1,40.1,121.058m167.186-18.426a38.3,38.3,0,1,1,38.3-38.3,38.3,38.3,0,0,1-38.3,38.3",transform:"translate(0)"}),r.createElement("path",{id:"Trazado_7194","data-name":"Trazado 7194",d:"M352.322,69.425,344.043,77.7l-.913-.912a9.594,9.594,0,0,0-13.553,0L316.939,89.432a.185.185,0,0,0-.014.017.823.823,0,0,0-.054.065h0a1.109,1.109,0,0,0-.091.125c-.006.009-.013.016-.018.025l-4.4,7.751a1.091,1.091,0,0,0,.177,1.309l2.98,2.979v0l0,0,3.79,3.79,0,0,0,0,3.79,3.79v0h0l3.789,3.789,0,0,0,0,3.79,3.79v0h0l3.79,3.79,0,0,0,0,2.981,2.98a1.09,1.09,0,0,0,1.719-.233l4.327-7.623,12.534-12.534a9.6,9.6,0,0,0,0-13.553l-.912-.913,8.279-8.28a7.844,7.844,0,0,0-11.093-11.093M338,121.1l-1.383-1.385,2.27-4a1.091,1.091,0,0,0-1.9-1.077l-1.973,3.477-2.193-2.193,2.27-4a1.09,1.09,0,0,0-1.9-1.076l-1.973,3.477-2.194-2.195,2.27-4a1.09,1.09,0,0,0-1.9-1.077l-1.973,3.477-2.193-2.193,2.27-4a1.09,1.09,0,0,0-1.9-1.076l-1.973,3.477-2.194-2.194,2.27-4a1.09,1.09,0,0,0-1.9-1.077l-1.973,3.477-2.194-2.194,2.271-4a1.091,1.091,0,0,0-1.9-1.077l-1.973,3.477-1.382-1.382,3.283-5.784,23.33,23.33Z",transform:"translate(-131.967 -28.375)"}))),r.createElement("rect",{id:"Rect\xe1ngulo_1044","data-name":"Rect\xe1ngulo 1044",width:"256",height:"256",fill:"none"}))))},Wa=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("g",{"data-name":"SpeedTestIcon"},r.createElement("path",{"data-name":"Rect\\xE1ngulo 850",fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Trazado 426",d:"m63.413 63.057-.1.084a5.326 5.326 0 0 0 3.505 9.344l-.011.063a5.319 5.319 0 0 0 3.516-1.371l.1-.084q.167-.135.322-.281a5.337 5.337 0 1 0-7.333-7.756Z"}),r.createElement("path",{"data-name":"Trazado 427",d:"M48.827 88.433a4.336 4.336 0 0 0-5.884 1.729v.095a4.336 4.336 0 0 0 3.817 6.344l-.011.01a4.361 4.361 0 0 0 2.078-8.178Z"}),r.createElement("path",{"data-name":"Trazado 428",d:"M127.29 52.816h.293a7.816 7.816 0 1 0-.046-15.631h-.247a7.816 7.816 0 0 0 0 15.631Z"}),r.createElement("path",{"data-name":"Trazado 429",d:"M37.263 119.721h-.028a2.958 2.958 0 0 0-3.324 2.541v.08a2.973 2.973 0 0 0 2.559 3.336 3.173 3.173 0 0 0 .379 0l-.021.007a2.972 2.972 0 0 0 2.959-2.558v-.056a2.966 2.966 0 0 0-2.524-3.35Z"}),r.createElement("path",{"data-name":"Trazado 430",d:"m91.954 44.052-.209.078a7.07 7.07 0 0 0 2.5 13.688l-.022.065a7.009 7.009 0 0 0 2.537-.529l.165-.066.1-.039a7.071 7.071 0 1 0-5.076-13.2Z"}),r.createElement("path",{"data-name":"Trazado 431",d:"M192.48 73.763a9.817 9.817 0 0 0-.929-13.852l-.268-.235a9.817 9.817 0 0 0-12.881 14.8l.246.212a9.806 9.806 0 0 0 6.452 2.426 9.815 9.815 0 0 0 7.38-3.351Z"}),r.createElement("path",{"data-name":"Trazado 432",d:"M205.131 108.033Z"}),r.createElement("path",{"data-name":"Trazado 433",d:"m227.69 121.128-.067-.495a12.786 12.786 0 0 0-12.612-11.007 12.761 12.761 0 0 0-12.638 14.485v.428a12.786 12.786 0 0 0 12.612 11.047 13.068 13.068 0 0 0 1.778-.12 12.76 12.76 0 0 0 10.927-14.338Z"}),r.createElement("path",{"data-name":"Trazado 434",d:"M210.416 102.215a11.283 11.283 0 0 0 4.537-15.3l-.2-.361a16.398 16.398 0 0 0-.27-.5 11.283 11.283 0 1 0-19.545 11.281l.187.336a11.278 11.278 0 0 0 15.289 4.538Z"}),r.createElement("path",{"data-name":"Trazado 435",d:"m160.575 42.633-.289-.111a8.657 8.657 0 1 0-6.052 16.222l.255.1a8.643 8.643 0 0 0 3.048.556l-.01.066a8.7 8.7 0 0 0 3.048-16.833Z"}),r.createElement("path",{"data-name":"Trazado 436",d:"m148.433 112.148-13.839 11.867a.333.333 0 0 1-.331 0 17.171 17.171 0 1 0 10.435 12.167.333.333 0 0 1 0-.316l13.9-11.866a7.807 7.807 0 0 0-10.165-11.851Zm-12.039 27.588a8.26 8.26 0 1 1-8.26-8.26 8.26 8.26 0 0 1 8.26 8.259Z"}),r.createElement("path",{"data-name":"Trazado 437",d:"M138.134 194.756h-20.3a3.765 3.765 0 0 0 0 7.53h20.33a3.764 3.764 0 0 0 3.764-3.765v-.03a3.765 3.765 0 0 0-3.794-3.735Z"}),r.createElement("path",{"data-name":"Trazado 438",d:"M127.999 0a128 128 0 1 0 128 128 128.15 128.15 0 0 0-128-128Zm0 233.412A105.412 105.412 0 1 1 233.414 128a105.412 105.412 0 0 1-105.415 105.412Z"}))))},$a=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 864",fill:"none",d:"M0 0h256v255.259H0z"}),r.createElement("path",{"data-name":"Trazado 396",d:"M241.464 0H14.521A14.433 14.433 0 0 0 .001 14.3v51.963a14.433 14.433 0 0 0 14.52 14.3h226.943A14.437 14.437 0 0 0 256 66.263V14.3A14.437 14.437 0 0 0 241.464 0Zm.285 66.263a.283.283 0 0 1-.285.28l-227.224-.28.281-52.241 227.229.278Z",stroke:"#000"}),r.createElement("path",{"data-name":"Trazado 397",d:"M241.464 87.715H14.521a14.431 14.431 0 0 0-14.52 14.3v51.959a14.432 14.432 0 0 0 14.52 14.3h226.943a14.436 14.436 0 0 0 14.536-14.3v-51.959a14.435 14.435 0 0 0-14.536-14.3Zm.285 66.259a.281.281 0 0 1-.285.28l-227.224-.28.281-52.241 227.229.282Z",stroke:"#000"}),r.createElement("path",{"data-name":"Trazado 398",d:"M241.464 175.427H14.521a14.441 14.441 0 0 0-14.52 14.31v51.959a14.434 14.434 0 0 0 14.52 14.3h226.943a14.437 14.437 0 0 0 14.536-14.3v-51.959a14.445 14.445 0 0 0-14.536-14.31Zm.285 66.269a.279.279 0 0 1-.285.281l-227.224-.281.281-52.245 227.229.286Z",stroke:"#000"}),r.createElement("rect",{"data-name":"Rect\\xE1ngulo 813",width:23.651,height:15.695,rx:.643,transform:"translate(20.301 21.991)",stroke:"#000",strokeWidth:.5}),r.createElement("rect",{"data-name":"Rect\\xE1ngulo 814",width:23.651,height:15.695,rx:.643,transform:"translate(20.301 111.056)",stroke:"#000",strokeWidth:.5}),r.createElement("rect",{"data-name":"Rect\\xE1ngulo 815",width:23.651,height:15.695,rx:.643,transform:"translate(20.301 200.016)",stroke:"#000",strokeWidth:.5})))},qa=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Trazado 373",d:"M18 145.888A110.2 110.2 0 0 1 126.767 35.85L113.78 22.869c-12.378-12.378 6.448-31.2 18.822-18.824l37.722 37.72a13.32 13.32 0 0 1 0 18.979l-37.722 37.714c-12.374 12.374-31.2-6.442-18.822-18.82l14.085-14.085a80.434 80.434 0 0 0-80.1 80.335 80.443 80.443 0 0 0 80.349 80.35 80.441 80.441 0 0 0 80.349-80.35 14.878 14.878 0 0 1 14.879-14.877 14.879 14.879 0 0 1 14.882 14.877A110.234 110.234 0 0 1 128.114 256 110.232 110.232 0 0 1 18 145.888Z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 871",fill:"none",d:"M0 0h256v256H0z"})))},Ya=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{d:"m144.506 255.256-14.883-15.1a2.5 2.5 0 0 1-.721-1.758v-88.02c-4.229 2.145-8.4 4.255-12.479 6.313-5.391 2.731-10.971 5.553-16.449 8.336l-20.359 10.364-11.967 6.092a2.514 2.514 0 0 1-2.635-.217 2.508 2.508 0 0 1-.973-2.458 120.437 120.437 0 0 1 4.3-16.642 154.087 154.087 0 0 1 7.375-18.167 160.659 160.659 0 0 1 10.453-18.526 148.6 148.6 0 0 1 13.559-17.688 161.263 161.263 0 0 1 21-19.616 157.34 157.34 0 0 1 24.42-15.569 2.512 2.512 0 0 1 2.455.086 2.512 2.512 0 0 1 1.205 2.145v43.791a27.491 27.491 0 0 0 8.039-6.747 27.647 27.647 0 0 0 5.527-11.558 27.41 27.41 0 0 0-.295-12.7 27.57 27.57 0 0 0-6.549-11.788c-5.266-5.679-10.748-11.349-16.051-16.837-4.262-4.407-8.676-8.97-12.955-13.52-.342-.365-.689-.729-1.039-1.1-2.916-3.07-5.934-6.248-7.914-10.09a22.79 22.79 0 0 1-1.416-17.614 23.808 23.808 0 0 1 4.559-8.124 24.373 24.373 0 0 1 7.617-5.952A23.519 23.519 0 0 1 138.992 0a25.109 25.109 0 0 1 12.957 3.756 30.3 30.3 0 0 1 9.525 9.222l1.318 1.945c.018.026.035.056.053.082l1.033 1.663c2.971 4.767 6.035 9.7 9.018 14.584a9375.397 9375.397 0 0 1 19.088 31.434 7.057 7.057 0 0 1 .754 1.962c.049.183.1.352.141.486a2.514 2.514 0 0 1-1.117 2.948l-.582.343a2.514 2.514 0 0 1-2.895-.251 27.192 27.192 0 0 0-.447-.369 13.275 13.275 0 0 1-1.291-1.137l-2.756-2.875c-8.3-8.649-16.881-17.593-25.3-26.415a2847.157 2847.157 0 0 1-5.229-5.5c-4.15-4.372-9.322-9.816-10.338-10.841a5.772 5.772 0 0 0-4-1.88 4.533 4.533 0 0 0-3.152 1.333 4.7 4.7 0 0 0-1.594 3.269 5.364 5.364 0 0 0 1.693 3.791 7287.52 7287.52 0 0 0 18.535 19.351c4.8 5.01 9.777 10.19 14.656 15.292a47.4 47.4 0 0 1 6.354 8.306 46.309 46.309 0 0 1 4.229 9.152 46.6 46.6 0 0 1 2.131 9.648 46.826 46.826 0 0 1 .061 9.786 46.84 46.84 0 0 1-1.953 9.539 46.211 46.211 0 0 1-3.947 9 46.028 46.028 0 0 1-5.895 8.114 46.986 46.986 0 0 1-7.812 6.874 79.956 79.956 0 0 1-9.746 5.548 192.77 192.77 0 0 0-3.555 1.833c-.039.021-.084.047-.121.065v113.437a2.517 2.517 0 0 1-1.561 2.323 2.529 2.529 0 0 1-.951.186 2.513 2.513 0 0 1-1.79-.748Zm-23.9-141.771a136 136 0 0 0-10.672 11.727 137.8 137.8 0 0 0-9.287 12.973q-2.262 3.589-4.359 7.394c.139-.074.277-.143.416-.217 4.941-2.527 9.605-4.915 14.33-7.342l1.783-.916c5.258-2.7 10.693-5.5 16-8.306.018-.014.039-.035.061-.053.061-7.372.053-15.174.039-22.768a139.007 139.007 0 0 0-8.312 7.508Z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 861",fill:"none",d:"M0 0h256v256H0z"})))},Ka=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{d:"m127.996 255.998-48-64H42.252a31.385 31.385 0 0 1-14.189-3.563 54.7 54.7 0 0 1-14.061-10.69 55.543 55.543 0 0 1-10.5-14.313 32.835 32.835 0 0 1-3.5-14.434v-106a32.839 32.839 0 0 1 3.5-14.438 55.538 55.538 0 0 1 10.5-14.312A54.623 54.623 0 0 1 28.063 3.561 31.4 31.4 0 0 1 42.252 0h171.494a31.389 31.389 0 0 1 14.188 3.561 54.7 54.7 0 0 1 14.068 10.687 55.531 55.531 0 0 1 10.5 14.313 32.839 32.839 0 0 1 3.5 14.437v106a32.835 32.835 0 0 1-3.5 14.438 55.532 55.532 0 0 1-10.5 14.313 54.676 54.676 0 0 1-14.064 10.69 31.371 31.371 0 0 1-14.187 3.563h-37.758l-47.994 64Zm2.3-164.808c3.25 6.531 8.105 16.287 12.771 25.671l2.207 4.436c4.8 9.657 8.277 16.634 8.4 16.856a28.061 28.061 0 0 0 11.422 12.328 33.352 33.352 0 0 0 16.873 4.511 34.058 34.058 0 0 0 9.076-1.229 7.893 7.893 0 0 0 4.939-3.831 6.445 6.445 0 0 0 .395-5.167 7.229 7.229 0 0 0-2.971-3.688 8.874 8.874 0 0 0-4.754-1.376 9.005 9.005 0 0 0-2.395.324 16.147 16.147 0 0 1-4.268.574 15.731 15.731 0 0 1-8.162-2.244 13.156 13.156 0 0 1-5.385-6.093l-.385-.771-2.3-4.636-.037-.073c-8.051-16.214-29.434-59.283-32.84-65.75l-.711-1.376-.127-.241v-.007c-2.111-3.99-5.3-10.021-10.895-15.062a34.192 34.192 0 0 0-10.361-6.44 40.584 40.584 0 0 0-14.949-2.656c-4.457 0-8.082 3.223-8.082 7.185s3.625 7.19 8.082 7.19h.014c12.277 0 16.834 6.963 21.516 16.065l.779 1.469c.379.724 1 1.938 1.85 3.617l.105.211 1.953 3.842-44.129 69.447a6.471 6.471 0 0 0-.658 5.161 7.3 7.3 0 0 0 3.842 4.43 8.881 8.881 0 0 0 3.973.933 8.922 8.922 0 0 0 3.906-.893 7.746 7.746 0 0 0 3-2.558l38.313-60.161Z"})))},Xa=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 21 21"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"clip-path-help-icon"},r.createElement("rect",{id:"Rect\xe1ngulo_961","data-name":"Rect\xe1ngulo 961",width:"21",height:"21",transform:"translate(0 -0.159)",fill:"currentcolor"}))),r.createElement("g",{id:"HelpIcon-Full",transform:"translate(0 0.159)"},r.createElement("g",{id:"Grupo_2320","data-name":"Grupo 2320",clipPath:"url(#clip-path-help-icon)"},r.createElement("path",{id:"Trazado_7048","data-name":"Trazado 7048",d:"M10.42,0A10.42,10.42,0,1,0,20.84,10.42,10.42,10.42,0,0,0,10.42,0M9.534,18.477a2,2,0,0,1-1.953-1.953h0a1.943,1.943,0,1,1,1.953,1.953m1.309-6.32-.082,1.176H8.3V9.856h.982c1.974,0,3.037-.624,3.037-1.82,0-1.1-1.053-1.7-3.007-1.7-.552,0-1.125.041-1.554.081L7.561,3.73A15.939,15.939,0,0,1,9.626,3.6c3.569,0,5.635,1.647,5.635,4.234,0,2.362-1.575,3.876-4.418,4.326",fill:"currentcolor"}))))},Qa=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 860",fill:"none",d:"M0 0h256v256H0z"}),r.createElement("g",{"data-name":"share-icn"},r.createElement("path",{"data-name":"Trazado 410",d:"M251.315 67.671 207.79 25.459c-14.279-13.851-35.342 7.862-21.063 21.716l12.959 12.567a156.689 156.689 0 0 0-82.95 23.182 156.774 156.774 0 0 0-71.051 97.677 15.547 15.547 0 0 0 11.474 18.755 15.62 15.62 0 0 0 3.655.438 15.555 15.555 0 0 0 15.1-11.909c14.6-60.586 70.74-100.461 130.9-96.758l-3.335 4.317-15.767 16.248c-13.849 14.285 7.867 35.345 21.719 21.063l42.214-43.518a15.131 15.131 0 0 0-.33-21.566Z"}),r.createElement("path",{"data-name":"Trazado 411",d:"M229.501 156.071c-7.927 0-14.351 6.747-14.351 15.066v54.731H28.703V30.133h126.71c7.925 0 14.351-6.744 14.351-15.066S163.337.001 155.413.001h-130.1C11.356.001.002 11.921.002 26.575v202.854c0 14.652 11.354 26.572 25.311 26.572h193.23c13.957 0 25.311-11.92 25.311-26.572v-58.291c-.001-8.32-6.428-15.067-14.353-15.067Z"}))))},Ja=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"edit-icn",d:"M201.683 0a56.44 56.44 0 0 0-38.86 15.85L18.897 159.94a13.219 13.219 0 0 0-3.838 7.2L.187 239.67a13.355 13.355 0 0 0 3.838 12.488A14.56 14.56 0 0 0 14.1 256a6.078 6.078 0 0 0 2.879-.48l71.962-13.932a13.2 13.2 0 0 0 7.2-3.842L240.063 93.658c21.109-21.133 21.109-56.2 0-77.328A52.948 52.948 0 0 0 201.683 0ZM51.521 220.938a29.883 29.883 0 0 0-6.717-9.126 40.622 40.622 0 0 0-9.115-6.724l5.277-24.976a46.056 46.056 0 0 1 23.508 12.008 42.7 42.7 0 0 1 11.994 23.535ZM220.393 73.966 92.299 201.726a56.271 56.271 0 0 0-14.872-23.054 65.573 65.573 0 0 0-23.028-14.89l128.094-128.24a26.406 26.406 0 0 1 19.19-7.685 28.509 28.509 0 0 1 19.19 7.685 27.729 27.729 0 0 1-.48 38.424Z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 867",fill:"none",d:"M0 0h256v256H0z"})))},eo=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("g",{"data-name":"JSONIcon"},r.createElement("g",{"data-name":"Grupo 2269"},r.createElement("path",{"data-name":"Uni\\xF3n 21",d:"M190.07 233.208a8.967 8.967 0 0 1-2.645-6.377 8.974 8.974 0 0 1 2.645-6.389 8.949 8.949 0 0 1 6.375-2.633 24.023 24.023 0 0 0 9.363-1.895 23.98 23.98 0 0 0 7.656-5.163 24.228 24.228 0 0 0 5.152-7.648 23.763 23.763 0 0 0 1.895-9.361v-47.057a26.541 26.541 0 0 1 7.129-18.122 26.567 26.567 0 0 1-7.129-18.133V63.373a23.707 23.707 0 0 0-1.895-9.351 23.978 23.978 0 0 0-5.152-7.648 23.977 23.977 0 0 0-7.656-5.162 23.815 23.815 0 0 0-9.363-1.9 8.959 8.959 0 0 1-6.375-2.644 8.95 8.95 0 0 1-2.645-6.378 8.949 8.949 0 0 1 2.645-6.377 8.959 8.959 0 0 1 6.375-2.644 42.145 42.145 0 0 1 42.109 42.1v47.057a8.636 8.636 0 0 0 8.625 8.624 8.959 8.959 0 0 1 6.375 2.644 8.967 8.967 0 0 1 2.645 6.377c0 .148 0 .307-.012.488.012.17.012.329.012.477a8.974 8.974 0 0 1-2.645 6.389 8.949 8.949 0 0 1-6.375 2.633 8.636 8.636 0 0 0-8.625 8.624v47.057a42.154 42.154 0 0 1-42.109 42.109 8.959 8.959 0 0 1-6.375-2.64ZM17.465 193.742v-47.057a8.641 8.641 0 0 0-8.625-8.624 8.981 8.981 0 0 1-6.387-2.645 8.936 8.936 0 0 1-2.633-6.377c0-.147 0-.307.012-.477-.012-.182-.012-.34-.012-.488a8.956 8.956 0 0 1 2.633-6.377 8.98 8.98 0 0 1 6.387-2.644 8.641 8.641 0 0 0 8.625-8.624V63.372a42.142 42.142 0 0 1 42.1-42.1 8.972 8.972 0 0 1 6.391 2.633 8.963 8.963 0 0 1 2.633 6.388 8.957 8.957 0 0 1-2.633 6.378 8.982 8.982 0 0 1-6.391 2.644 23.8 23.8 0 0 0-9.359 1.9 24.22 24.22 0 0 0-7.648 5.151 23.985 23.985 0 0 0-5.164 7.659 23.975 23.975 0 0 0-1.883 9.351v47.057a26.56 26.56 0 0 1-7.137 18.133 26.512 26.512 0 0 1 7.137 18.122v47.057a24.07 24.07 0 0 0 1.883 9.361 24.068 24.068 0 0 0 5.164 7.648 24.076 24.076 0 0 0 7.648 5.163 23.994 23.994 0 0 0 9.359 1.884 8.982 8.982 0 0 1 6.391 2.644 8.963 8.963 0 0 1 2.633 6.389 8.956 8.956 0 0 1-2.633 6.377 8.982 8.982 0 0 1-6.391 2.644 42.151 42.151 0 0 1-42.1-42.115ZM160 128.008a16 16 0 0 1 16-16 16.006 16.006 0 0 1 16.012 16 16.012 16.012 0 0 1-16.012 16 16.007 16.007 0 0 1-16-16Zm-48 0a16 16 0 0 1 16-16 16 16 0 0 1 16 16 16 16 0 0 1-16 16 16.01 16.01 0 0 1-16-16Zm-47 0a15.758 15.758 0 0 1 15.5-16 15.758 15.758 0 0 1 15.5 16 15.764 15.764 0 0 1-15.5 16 15.764 15.764 0 0 1-15.5-16Z"})),r.createElement("path",{"data-name":"Rect\\xE1ngulo 891",fill:"none",d:"M0 0h256v256H0z"}))))},to=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("g",{"data-name":"search-icn"},r.createElement("path",{"data-name":"Trazado 399",d:"M200.076 179.436a109.04 109.04 0 0 0 24.225-68.582C224.301 49.663 174.057 0 112.151 0S.001 49.663.001 110.854s50.243 110.855 112.15 110.855a111.975 111.975 0 0 0 66.393-21.58l52.037 51.437A15.108 15.108 0 0 0 241.048 256a14.929 14.929 0 0 0 10.467-25.423ZM29.908 110.854c0-44.933 36.785-81.293 82.243-81.293s82.243 36.36 82.243 81.293-37.084 81.293-82.243 81.293-82.243-36.36-82.243-81.293Z"})),r.createElement("path",{"data-name":"Rect\\xE1ngulo 866",fill:"none",d:"M0 0h256v255.7H0z"})))},no=function(e){return r.createElement("svg",je({id:"WarnIcon",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256"},e,{className:"min-icon",fill:"currentcolor"}),r.createElement("g",{id:"download-icn",transform:"translate(0 0.087)"},r.createElement("path",{id:"Uni\xf3n_24","data-name":"Uni\xf3n 24",d:"M19388-6740.606a107.642,107.642,0,0,0-107.52,107.52,107.642,107.642,0,0,0,107.52,107.52,107.642,107.642,0,0,0,107.52-107.52,107.642,107.642,0,0,0-107.52-107.52m0-20.48a128,128,0,0,1,128,128,128,128,0,0,1-128,128,128,128,0,0,1-128-128A128,128,0,0,1,19388-6761.087Z",transform:"translate(-19260 6761)"})),r.createElement("rect",{id:"Rect\xe1ngulo_893","data-name":"Rect\xe1ngulo 893",width:"256",height:"256",fill:"none"}),r.createElement("path",{id:"Trazado_7001","data-name":"Trazado 7001",d:"M43.3-140H12.1l3.6,91.9h24ZM27.8-35.5c-10.2,0-19.1,8.7-19.1,18.9A19.565,19.565,0,0,0,27.8,2.5c10.1,0,18.9-8.9,18.9-19.1A19.282,19.282,0,0,0,27.8-35.5Z",transform:"translate(101 201)"}))},ro=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("circle",{"data-name":"circle-icn",cx:128,cy:128,r:128}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 852",fill:"none",d:"M0 0h256v256H0z"})))},ao=function(e){return r.createElement("svg",je({},e,{className:"min-icon",fill:"currentcolor",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256"}),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{"data-name":"Object Browser",clipPath:"url(#prefix__a)"},r.createElement("g",{"data-name":"Grupo 1541",transform:"translate(87.918 103.898)"},r.createElement("circle",{"data-name":"Elipse 57",cx:11.515,cy:11.515,r:11.515,transform:"rotate(-10.901 280.738 -178.561)"}),r.createElement("rect",{"data-name":"Rect\\xE1ngulo 805",width:24.592,height:20.853,rx:1.35,transform:"translate(14.546 25.545)"}),r.createElement("path",{"data-name":"Trazado 365",d:"M28.151 60.295a2.427 2.427 0 00-4.2 0l-9.1 15.761a2.425 2.425 0 002.1 3.64h18.2a2.43 2.43 0 002.105-3.64z"}),r.createElement("path",{"data-name":"Trazado 366",d:"M79.273 28.199a151.334 151.334 0 00-.187-17.51c-.395-4.294-2.262-7.942-6.512-9.468a15.5 15.5 0 00-1.836-.529 38.335 38.335 0 00-7.332-.658c-4.289-.125-8.57.136-12.855.116-8.582-.036-17.16.116-25.746.152H6.301a6.308 6.308 0 00-6.3 6.3v80.617a6.307 6.307 0 006.3 6.3h66.684a6.3 6.3 0 006.3-6.3V47.054c-.004-6.273-.168-12.584-.012-18.855zm-7.648 53.334a5.435 5.435 0 01-5.434 5.439h-54.2a5.442 5.442 0 01-5.441-5.439V12.3a5.441 5.441 0 015.441-5.442h36.367v9.3a13.809 13.809 0 0013.789 13.794h9.48zm0-57.6h-9.48a7.781 7.781 0 01-7.773-7.777v-9.3h11.82a5.435 5.435 0 015.434 5.442z"})),r.createElement("path",{"data-name":"Trazado 367",d:"M101.585 42.067c6.6 0 13.672 18.858 20.742 18.858h87.934a9.453 9.453 0 019.426 9.429v4.715H40.292V51.496h-.234a9.455 9.455 0 019.426-9.429h52.1m124.219 44.5a9.8 9.8 0 019.773 9.772L225.56 204.095a9.8 9.8 0 01-9.773 9.771H39.615a9.8 9.8 0 01-9.773-9.771L20.065 96.339a9.806 9.806 0 019.777-9.772h195.961M101.584 21.999h-52.1a29.528 29.528 0 00-29.492 29.5 20.028 20.028 0 00.234 3.081v13.513A29.9 29.9 0 00-.001 96.344c0 .605.031 1.208.086 1.814l9.711 107.089a29.874 29.874 0 0029.82 28.691h176.172a29.873 29.873 0 0029.813-28.663l9.961-107.074c.051-.617.082-1.239.082-1.857a29.875 29.875 0 00-15.887-26.376 29.534 29.534 0 00-29.5-29.106H128.87c-.4-.532-.785-1.059-1.121-1.517-5.094-6.906-12.785-17.342-26.168-17.342z"})))},oo=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Trazado 373",d:"M18 145.888A110.2 110.2 0 0 1 126.767 35.85L113.78 22.869c-12.378-12.378 6.448-31.2 18.822-18.824l37.722 37.72a13.32 13.32 0 0 1 0 18.979l-37.722 37.714c-12.374 12.374-31.2-6.442-18.822-18.82l14.085-14.085a80.434 80.434 0 0 0-80.1 80.335 80.443 80.443 0 0 0 80.349 80.35 80.441 80.441 0 0 0 80.349-80.35 14.878 14.878 0 0 1 14.879-14.877 14.879 14.879 0 0 1 14.882 14.877A110.234 110.234 0 0 1 128.114 256 110.232 110.232 0 0 1 18 145.888Z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 871",fill:"none",d:"M0 0h256v256H0z"})))},io=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",viewBox:"0 0 256 256",fill:"currentcolor"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"clip-path"},r.createElement("rect",{id:"Rect\xe1ngulo_1045","data-name":"Rect\xe1ngulo 1045",width:"256",height:"230.638",fill:"none"})),r.createElement("clipPath",{id:"clip-Change_Access_Policy"},r.createElement("rect",{width:"256",height:"256"}))),r.createElement("g",{id:"Change_Access_Policy","data-name":"Change Access Policy",clipPath:"url(#clip-Change_Access_Policy)"},r.createElement("g",{id:"Change_Access_Policy_Icon","data-name":"Change Access Policy Icon"},r.createElement("g",{id:"Grupo_2432","data-name":"Grupo 2432",transform:"translate(0 13)"},r.createElement("g",{id:"Grupo_2431","data-name":"Grupo 2431"},r.createElement("path",{id:"Trazado_7195","data-name":"Trazado 7195",d:"M230.943,74.7A72.225,72.225,0,0,0,217.05,30.786,74.4,74.4,0,0,0,82.376,74.139a73.1,73.1,0,0,0,3.216,21.5L0,181.212v49.426H49.426l2.217-2.22L38.01,214.786l17.257-17.257L68.9,211.161l14.776-14.778L70.043,182.753,87.3,165.5l13.629,13.63L135,145.045a73.794,73.794,0,0,0,41.481.594A45.523,45.523,0,1,0,230.943,74.7m15.771,40.663a35.971,35.971,0,1,1-35.971-35.971,35.971,35.971,0,0,1,35.971,35.971M228.838,99.516A8.172,8.172,0,0,0,222.913,97a8.71,8.71,0,0,0-6,2.447l-22.22,22.245a2.041,2.041,0,0,0-.593,1.112L191.8,134a2.062,2.062,0,0,0,.593,1.928,2.246,2.246,0,0,0,1.555.593.938.938,0,0,0,.444-.074l11.11-2.152a2.036,2.036,0,0,0,1.111-.593l22.219-22.245a8.511,8.511,0,0,0,0-11.938M148.261,65.9a16.475,16.475,0,1,1,16.475,16.475A16.475,16.475,0,0,1,148.261,65.9",transform:"translate(0 0)"}))),r.createElement("rect",{id:"Rect\xe1ngulo_1046","data-name":"Rect\xe1ngulo 1046",width:"256",height:"256",fill:"none"}))))},so=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("g",{"data-name":"servers-icn"},r.createElement("path",{"data-name":"Trazado 404",d:"M128 0C64.408 0 0 15.267 0 44.414v167.17c0 29.147 64.408 44.415 128 44.415s128-15.268 128-44.415V44.414C256 15.267 191.592 0 128 0Zm105.743 211.584c0 8.945-37.324 25.909-105.739 25.909s-105.74-17.118-105.74-25.909v-58.911c24.116 11.967 65.15 18.2 105.74 18.2s81.623-6.169 105.739-18.29Zm0-85.128c0 8.791-37.324 25.908-105.739 25.908s-105.74-17.118-105.74-25.908V70.537c24.116 12.06 65.15 18.29 105.74 18.29s81.623-6.168 105.739-18.29ZM128.004 70.321c-68.416 0-105.74-17.118-105.74-25.908s37.324-25.908 105.74-25.908 105.739 17.119 105.739 25.909S196.415 70.323 128 70.323Z"}),r.createElement("circle",{"data-name":"Elipse 59",cx:15.793,cy:15.793,r:15.793,transform:"rotate(-31.72 348.405 44.732)"}),r.createElement("circle",{"data-name":"Elipse 60",cx:15.793,cy:15.793,r:15.793,transform:"rotate(-31.72 207.061 4.576)"})),r.createElement("path",{"data-name":"Rect\\xE1ngulo 854",fill:"none",d:"M0 0h256v256H0z"})))},lo=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("g",{transform:"translate(14.827 15.767) rotate(180)"},r.createElement("path",{fill:"currentcolor",d:"M-147.9-183c-4.1-4.1-10.8-4.1-14.9,0c0,0,0,0,0,0l-63.3,63.3c-4.1,4.1-4.1,10.8,0,14.9\n\t\tc0,0,0,0,0,0l63.3,63.3c4.1,4.1,10.8,4.1,14.9,0c4.1-4.1,4.1-10.8,0-14.9l-55.9-55.9l55.9-55.9C-143.7-172.2-143.7-178.9-147.9-183\n\t\tC-147.9-183-147.9-183-147.9-183L-147.9-183z"}),r.createElement("path",{fill:"currentcolor",d:"M-60.4-112.2c0-5.8-4.7-10.5-10.5-10.5h-137.1c-5.8,0-10.6,4.7-10.6,10.6\n\t\tc0,5.8,4.7,10.6,10.6,10.6h137.1C-65.1-101.7-60.4-106.4-60.4-112.2C-60.4-112.2-60.4-112.2-60.4-112.2z M-7.6,14.4\n\t\tc-5.8,0-10.5-4.7-10.5-10.5v-232.2c0-5.8,4.7-10.6,10.6-10.6c5.8,0,10.6,4.7,10.6,10.6V3.9C2.9,9.7-1.8,14.4-7.6,14.4L-7.6,14.4z"})))},co=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 10.868 22"},e),r.createElement("path",{id:"minio-logo-color",d:"M36.179,13.541q-.834-1.379-1.673-2.755c-.29-.476-.585-.949-.88-1.422l-.116-.172a2.047,2.047,0,0,0-2.624-.836,1.84,1.84,0,0,0-.846,2.481,4.385,4.385,0,0,0,.749.931c.841.894,1.709,1.762,2.544,2.662a2.626,2.626,0,0,1-.915,4.225l-.056.023V14.492a13.556,13.556,0,0,0-3.918,3.036,13.227,13.227,0,0,0-3.075,6.117L28.2,22.2c.942-.479,1.878-.95,2.856-1.446V28.83l1.3,1.323V20.076s.03-.014.127-.067a10.787,10.787,0,0,0,1.143-.633,3.862,3.862,0,0,0,.567-5.84c-.969-1.013-1.942-2.022-2.91-3.037a.623.623,0,0,1,0-.93.643.643,0,0,1,.935.053c.135.136,1.043,1.1,1.367,1.435q1.228,1.286,2.459,2.567a1.752,1.752,0,0,0,.136.116l.051-.03A.815.815,0,0,0,36.179,13.541Zm-5.124,5.715a.235.235,0,0,1-.119.159c-.519.275-1.042.543-1.564.811l-1.9.976a12.318,12.318,0,0,1,3.568-4.421l.023-.019C31.06,17.572,31.063,18.448,31.055,19.257Z",transform:"translate(-25.369 -8.153)"}))},uo=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Uni\\xF3n 18",d:"M17.271 255.95a17.247 17.247 0 0 1-12.236-5.086 17.291 17.291 0 0 1-5.086-12.239V17.274A17.25 17.25 0 0 1 5.035 5.035 17.245 17.245 0 0 1 17.271-.051h221.354a17.237 17.237 0 0 1 12.244 5.091 17.238 17.238 0 0 1 5.08 12.253v221.332a17.256 17.256 0 0 1-5.084 12.239 17.256 17.256 0 0 1-12.24 5.086Zm5.121-233.556a14.786 14.786 0 0 0-4.357 10.526v190.083a14.784 14.784 0 0 0 4.357 10.521 14.782 14.782 0 0 0 10.52 4.362h190.09a14.788 14.788 0 0 0 10.518-4.362 14.778 14.778 0 0 0 4.359-10.521l-.016-190.083a14.758 14.758 0 0 0-4.357-10.521 14.758 14.758 0 0 0-10.514-4.362H32.912a14.777 14.777 0 0 0-10.52 4.356Zm133.525 194.628a15.4 15.4 0 0 1-10.963-4.539 15.409 15.409 0 0 1-4.545-10.969V178.65a15.406 15.406 0 0 1 4.545-10.964 15.4 15.4 0 0 1 10.957-4.539h48.84a15.4 15.4 0 0 1 10.959 4.539 15.409 15.409 0 0 1 4.539 10.964v22.873a15.4 15.4 0 0 1-4.539 10.959 15.385 15.385 0 0 1-10.959 4.539Zm-99.047-.02c-8.545 0-15.5-6.375-15.5-14.213v-74.217c0-7.838 6.957-14.218 15.5-14.218h48.834c8.547 0 15.5 6.38 15.5 14.218v74.217c0 7.837-6.949 14.213-15.5 14.213Zm99.047-75.462c-8.545 0-15.5-6.375-15.5-14.213V53.11c0-7.838 6.957-14.218 15.5-14.218h48.824c8.553 0 15.508 6.38 15.508 14.218v74.217c0 7.838-6.955 14.213-15.508 14.213ZM56.87 92.781a15.4 15.4 0 0 1-10.957-4.539 15.407 15.407 0 0 1-4.545-10.964V54.395a15.406 15.406 0 0 1 4.545-10.964 15.4 15.4 0 0 1 10.957-4.539h48.824a15.408 15.408 0 0 1 10.969 4.544A15.4 15.4 0 0 1 121.2 54.4v22.873a15.4 15.4 0 0 1-4.537 10.964 15.408 15.408 0 0 1-10.969 4.544Z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 881",fill:"none",d:"M0 0h256v256H0z"})))},po=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Uni\\xF3n 41",d:"M175.369 255.999a41.227 41.227 0 0 1-40.01-31.491h-14.736a41.3 41.3 0 0 1-39.988 31.491h-.006a41.192 41.192 0 0 1-41.152-41.145 41.068 41.068 0 0 1 14.268-31.134l-8.084-14.819a41.386 41.386 0 0 1-4.5.251A41.2 41.2 0 0 1 .007 128.003a41.2 41.2 0 0 1 41.154-41.154 41.31 41.31 0 0 1 6.041.443l7.676-14.071a41.09 41.09 0 0 1-15.393-32.069A41.194 41.194 0 0 1 80.637-.002a41.211 41.211 0 0 1 40.893 36.5h12.957a41.207 41.207 0 0 1 40.891-36.5 41.194 41.194 0 0 1 41.152 41.154 41.115 41.115 0 0 1-14.035 30.886l8.193 15.021a41.42 41.42 0 0 1 4.172-.21 41.2 41.2 0 0 1 41.148 41.154 41.273 41.273 0 0 1-41.148 41.149q-1.31 0-2.6-.082l-8.652 15.861a41.05 41.05 0 0 1 12.926 29.922 41.263 41.263 0 0 1-41.148 41.145Zm-15.461-41.145a15.479 15.479 0 0 0 15.461 15.462 15.485 15.485 0 0 0 15.471-15.462 15.515 15.515 0 0 0-15.471-15.471 15.485 15.485 0 0 0-15.461 15.473Zm-94.744 0a15.484 15.484 0 0 0 15.465 15.462 15.484 15.484 0 0 0 15.467-15.462 15.512 15.512 0 0 0-15.471-15.471 15.485 15.485 0 0 0-15.461 15.473Zm69.055-.351a41.147 41.147 0 0 1 18.393-33.922l-8.525-14.725a40.926 40.926 0 0 1-16.082 3.3 40.981 40.981 0 0 1-12.812-2.042l-8.984 15.522a41.109 41.109 0 0 1 15.578 31.87Zm61.25-35.552 6.477-11.871a41.28 41.28 0 0 1-27.734-32.58h-5.58a41.235 41.235 0 0 1-14.312 25.076l9.186 15.868a41.037 41.037 0 0 1 11.865-1.744 40.9 40.9 0 0 1 20.098 5.253Zm-133.391-.828a40.919 40.919 0 0 1 18.551-4.423 40.934 40.934 0 0 1 15.193 2.907l8.617-14.884A41.216 41.216 0 0 1 87.363 134.5h-5.582a41.378 41.378 0 0 1-26.059 31.969Zm137.309-50.119a15.477 15.477 0 0 0 15.465 15.462 15.477 15.477 0 0 0 15.461-15.462 15.5 15.5 0 0 0-15.471-15.471 15.483 15.483 0 0 0-15.455 15.472ZM128 143.467a15.477 15.477 0 0 0 15.465-15.462A15.5 15.5 0 0 0 128 112.534a15.4 15.4 0 0 0-5.734 1.1l-3.818 2.21A15.452 15.452 0 0 0 112.54 128a15.441 15.441 0 0 0 5.914 12.155l3.789 2.2a15.379 15.379 0 0 0 5.757 1.112ZM25.686 128.005a15.482 15.482 0 0 0 15.467 15.462 15.481 15.481 0 0 0 15.465-15.462 15.507 15.507 0 0 0-15.465-15.471 15.49 15.49 0 0 0-15.467 15.471Zm148.379-5.5a41.276 41.276 0 0 1 26.506-33.1l-6.379-11.693a40.928 40.928 0 0 1-18.818 4.591 41.039 41.039 0 0 1-11.865-1.743l-9.17 15.843a41.135 41.135 0 0 1 14.451 26.1Zm-86.848 0a41.2 41.2 0 0 1 17.221-28.223l-8.627-14.9a40.952 40.952 0 0 1-15.176 2.925h-.006a40.908 40.908 0 0 1-17.254-3.794l-6.3 11.548a41.266 41.266 0 0 1 24.863 32.448Zm56.881-32.375 8.514-14.707a41.2 41.2 0 0 1-18.049-28.922h-13.135a41.238 41.238 0 0 1-15.242 26.844l9 15.549A41 41 0 0 1 128 86.852a40.932 40.932 0 0 1 16.1 3.278Zm15.811-48.976a15.476 15.476 0 0 0 15.461 15.461 15.482 15.482 0 0 0 15.471-15.461 15.515 15.515 0 0 0-15.471-15.471 15.484 15.484 0 0 0-15.462 15.471Zm-94.744 0A15.481 15.481 0 0 0 80.63 56.615a15.481 15.481 0 0 0 15.467-15.461 15.512 15.512 0 0 0-15.471-15.471 15.484 15.484 0 0 0-15.462 15.471Z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 924",fill:"none",d:"M0 0h256v256H0z"})))},mo=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Uni\\xF3n 39",d:"M119.5 246.769v-19a9 9 0 0 1 9-9 9 9 0 0 1 9 9v19a9 9 0 0 1-9 9 9.006 9.006 0 0 1-9-9Zm0-43.852v-19a9.006 9.006 0 0 1 9-9 9 9 0 0 1 9 9v19a9 9 0 0 1-9 9 9.006 9.006 0 0 1-9-9Zm117.967-22.283-71.154-41.4a12.875 12.875 0 0 1-6.463-11.237 12.889 12.889 0 0 1 6.463-11.237l71.154-41.394A13 13 0 0 1 257 86.6v82.794a13.018 13.018 0 0 1-13.021 13.02 12.877 12.877 0 0 1-6.514-1.78Zm-54.674-52.636 56.211 32.7v-65.4ZM0 169.4V86.6a13 13 0 0 1 19.535-11.237l71.15 41.394a12.879 12.879 0 0 1 6.461 11.237 12.865 12.865 0 0 1-6.461 11.237l-71.15 41.4a12.9 12.9 0 0 1-6.518 1.783A13.015 13.015 0 0 1 0 169.4Zm18-8.7L74.205 128 18 95.3Zm101.5-1.636v-19a9 9 0 0 1 9-9 9 9 0 0 1 9 9v19a9 9 0 0 1-9 9 9 9 0 0 1-9-8.998Zm0-43.857v-19a9.006 9.006 0 0 1 9-9 9 9 0 0 1 9 9v19a9 9 0 0 1-9 9 9.006 9.006 0 0 1-9-8.999Zm0-43.852v-19a9 9 0 0 1 9-9 9 9 0 0 1 9 9v19a9 9 0 0 1-9 9 9 9 0 0 1-9-8.998Zm0-43.857v-19a9.006 9.006 0 0 1 9-9 9 9 0 0 1 9 9v19a9 9 0 0 1-9 9 9.006 9.006 0 0 1-9-8.998Z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 923",fill:"none",d:"M0 0h256v256H0z"})))},fo=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("g",{"data-name":"ToolsIcon"},r.createElement("path",{"data-name":"Rect\\xE1ngulo 846",fill:"none",d:"M0 0h255.535v255.516H0z"}),r.createElement("g",{"data-name":"Grupo 1552"},r.createElement("path",{"data-name":"Uni\\xF3n 12",d:"M187.377 246.393 68.398 127.416q-2.3.164-4.6.164a63.373 63.373 0 0 1-45.111-18.629A64.284 64.284 0 0 1 2.218 47.216a19.958 19.958 0 0 1 33.414-9.02l12.7 12.695 3.006-3-12.7-12.7a19.962 19.962 0 0 1 9.02-33.412A65.038 65.038 0 0 1 64.283-.384a63.344 63.344 0 0 1 45.113 18.635 64.122 64.122 0 0 1 18.461 49.688l.59.59c.146-.153.291-.3.441-.453l23.5-23.312-.055-3.286a19.965 19.965 0 0 1 10.5-17.912l40.215-21.659a19.949 19.949 0 0 1 23.523 3.4l23.526 23.33a19.973 19.973 0 0 1 3.266 24.089l-22.524 39.362a19.955 19.955 0 0 1-17.4 10.049l-2.51-.009-24.086 23.888c-.15.151-.3.3-.461.443l60.469 60.463a31.038 31.038 0 0 1 0 43.848l-15.619 15.622a31.015 31.015 0 0 1-43.855 0Zm14.119-14.117a11.039 11.039 0 0 0 15.617 0l15.619-15.617a11.033 11.033 0 0 0 0-15.617L106.566 74.884a43.813 43.813 0 0 0-53.811-53.81L79.57 47.886l-31.239 31.23-26.812-26.8a43.815 43.815 0 0 0 53.809 53.8Zm-29.2-191.135.2 11.8-29.549 29.307 29.838 29.6 29.951-29.712 10.777.041 22.524-39.368-23.52-23.331Z"}),r.createElement("g",{"data-name":"Grupo 1551"},r.createElement("path",{"data-name":"Trazado 444",d:"m80.891 143.919-57.656 57.656a10.859 10.859 0 0 0 0 15.357l15.357 15.359a10.861 10.861 0 0 0 15.359 0l57.652-57.655-30.712-30.717m0-20a20 20 0 0 1 14.142 5.858l30.716 30.717a20 20 0 0 1 0 28.284l-57.656 57.656a30.661 30.661 0 0 1-21.822 9.039 30.658 30.658 0 0 1-21.821-9.039l-15.358-15.36a30.657 30.657 0 0 1-9.038-21.82 30.656 30.656 0 0 1 9.04-21.822l57.654-57.655a20 20 0 0 1 14.143-5.858Z"}))))))},ho=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"arrow-icn",d:"M19.795 108.063c-26.394 0-26.394 40.032 0 40.032h167.688l-22.739 22.669c-18.656 18.622 9.725 46.922 28.382 28.316l56.877-56.732a19.991 19.991 0 000-28.548l-56.877-56.716c-18.656-18.6-47.038 9.684-28.382 28.3l22.739 22.68H19.795z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 863",fill:"none",d:"M0 0h256v256H0z"})))},go=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Trazado 463",d:"M32.291 232.53a32.336 32.336 0 0 1-32.289-32.3V76.935a32.33 32.33 0 0 1 32.289-32.3 8.837 8.837 0 0 1 8.832 8.822 8.845 8.845 0 0 1-8.832 8.831 14.663 14.663 0 0 0-14.648 14.648v123.295a14.661 14.661 0 0 0 14.648 14.64h191.4a14.66 14.66 0 0 0 14.641-14.64V76.936a14.661 14.661 0 0 0-14.641-14.648h-54.07a8.845 8.845 0 0 1-8.832-8.831 8.762 8.762 0 0 1 2.586-6.236 8.735 8.735 0 0 1 6.246-2.586h54.07a32.345 32.345 0 0 1 32.313 32.3V200.23a32.351 32.351 0 0 1-32.312 32.3Zm140.445-33.006a3.078 3.078 0 0 1-3.082-3.07V179.02a3.08 3.08 0 0 1 3.082-3.08h47.18a3.077 3.077 0 0 1 3.07 3.08v17.434a3.075 3.075 0 0 1-3.07 3.07Zm-113.141 0a22.643 22.643 0 0 1-20.648-12.767 26.835 26.835 0 0 1 1.891-26.579l.02-.019c.094-.143.2-.285.3-.428.273-.409.559-.827.871-1.245a70.651 70.651 0 0 1 52.277-28.5 62.967 62.967 0 0 1 3.543-.095 67.043 67.043 0 0 1 15.211 1.777 71.594 71.594 0 0 1 14.734 5.219 71.248 71.248 0 0 1 26.73 22.149 27.371 27.371 0 0 1 2.672 27.53 22.363 22.363 0 0 1-20.629 12.956Zm-3.719-30.372v.01l-.047.058c-.191.256-.371.5-.531.741v.028l-.258.371a8.365 8.365 0 0 0-.715 8.261 5.526 5.526 0 0 0 5.27 3.1h76.969a6.062 6.062 0 0 0 3.156-.761 4.988 4.988 0 0 0 1.949-2.243 8.485 8.485 0 0 0 .715-4.524 9.18 9.18 0 0 0-1.7-4.468 54.088 54.088 0 0 0-42.969-22.007c-.93 0-1.75.019-2.508.066h-.012a53.055 53.055 0 0 0-39.318 21.368Zm116.859-5.01a3.08 3.08 0 0 1-3.082-3.079v-17.425a3.08 3.08 0 0 1 3.082-3.08h47.18a3.077 3.077 0 0 1 3.07 3.08v17.425a3.077 3.077 0 0 1-3.07 3.079Zm-.59-38.7a2.5 2.5 0 0 1-2.492-2.5V82.066a2.5 2.5 0 0 1 2.492-2.5h48.348a2.5 2.5 0 0 1 2.492 2.5v40.876a2.5 2.5 0 0 1-2.492 2.5ZM50.981 74.213c0-28.233 22.09-51.209 49.242-51.209s49.258 22.976 49.258 51.209a52.579 52.579 0 0 1-3.867 19.906 51.257 51.257 0 0 1-10.551 16.274 49.07 49.07 0 0 1-15.656 11 47.257 47.257 0 0 1-19.184 4.041c-27.151 0-49.241-22.976-49.241-51.22Zm17.977 0c0 18.033 14.031 32.711 31.266 32.711 17.262 0 31.3-14.678 31.3-32.711s-14.039-32.7-31.3-32.7c-17.234 0-31.265 14.668-31.265 32.701Z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 883",fill:"none",d:"M0 0h256v256H0z"})))},Eo=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"online-registration-back_svg__a"},r.createElement("path",{"data-name":"Rect\\xE1ngulo 1600",fill:"#2781b0",d:"M0 0h256v199.269H0z"}))),r.createElement("path",{"data-name":"Rect\\xE1ngulo 1602",fill:"none",d:"M0 0h256v256H0z"}),r.createElement("g",{"data-name":"Grupo 2521"},r.createElement("g",{"data-name":"Grupo 2520",clipPath:"url(#online-registration-back_svg__a)",fill:"#2781b0",transform:"translate(0 22.634)"},r.createElement("path",{"data-name":"Trazado 7245",d:"M110.325 123.433a78.259 78.259 0 0 0 .768 10.936h13.5v-21.871h-13.5a78.271 78.271 0 0 0-.768 10.936Z"}),r.createElement("path",{"data-name":"Trazado 7246",d:"M112.411 105.696h12.187V85.56c-4.871 2.382-9.583 9.676-12.187 20.141"}),r.createElement("path",{"data-name":"Trazado 7247",d:"M124.599 161.316v-20.141h-12.188c2.6 10.464 7.316 17.761 12.187 20.141"}),r.createElement("path",{"data-name":"Trazado 7248",d:"M162.4 105.7a38.951 38.951 0 0 0-18.91-17.748 52.941 52.941 0 0 1 7.113 17.748Z"}),r.createElement("path",{"data-name":"Trazado 7249",d:"M103.53 123.433a85.92 85.92 0 0 1 .711-10.937H90.854a38.2 38.2 0 0 0 0 21.873h13.384a86.293 86.293 0 0 1-.711-10.936"}),r.createElement("path",{"data-name":"Trazado 7250",d:"M112.5 87.95a38.954 38.954 0 0 0-18.909 17.748h11.8a53.038 53.038 0 0 1 7.113-17.748"}),r.createElement("path",{"data-name":"Trazado 7251",d:"M93.597 141.173a38.956 38.956 0 0 0 18.909 17.748 52.942 52.942 0 0 1-7.113-17.748Z"}),r.createElement("path",{"data-name":"Trazado 7252",d:"M151.757 112.499a84.331 84.331 0 0 1 0 21.873h13.385a38.182 38.182 0 0 0 0-21.873Z"}),r.createElement("path",{"data-name":"Trazado 7253",d:"M143.491 158.922a38.962 38.962 0 0 0 18.91-17.748h-11.8a52.968 52.968 0 0 1-7.113 17.748"}),r.createElement("path",{"data-name":"Trazado 7254",d:"M192.789 69.359c.12-1.539.177-2.98.177-4.393a64.966 64.966 0 0 0-129.932 0c0 1.413.058 2.854.177 4.393a64.967 64.967 0 0 0 1.754 129.91h126.069a64.967 64.967 0 0 0 1.754-129.91Zm-21.947 69.376a3.373 3.373 0 0 1-.2.561 45.463 45.463 0 0 1-85.276 0 3.126 3.126 0 0 1-.2-.561 44.686 44.686 0 0 1 0-30.59 3.233 3.233 0 0 1 .2-.561 45.463 45.463 0 0 1 85.277 0 3.128 3.128 0 0 1 .2.561 44.711 44.711 0 0 1 0 30.59"}),r.createElement("path",{"data-name":"Trazado 7255",d:"M131.398 141.173v20.141c4.871-2.38 9.583-9.677 12.187-20.141Z"}),r.createElement("path",{"data-name":"Trazado 7256",d:"M131.398 85.557v20.141h12.187c-2.6-10.464-7.316-17.758-12.187-20.141"}),r.createElement("path",{"data-name":"Trazado 7257",d:"M145.671 123.433a78.26 78.26 0 0 0-.769-10.937h-13.5v21.872h13.5a78.262 78.262 0 0 0 .769-10.936Z"}))))},bo=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Uni\\xF3n 43",d:"M65.865 256a8.03 8.03 0 0 1-8.029-8.035 8.03 8.03 0 0 1 8.029-8.034h163.867a8.035 8.035 0 0 1 8.033 8.034 8.035 8.035 0 0 1-8.033 8.035Zm-57.834 0a8.03 8.03 0 0 1-8.029-8.035 8.03 8.03 0 0 1 8.029-8.034h29.99a8.035 8.035 0 0 1 8.033 8.034A8.035 8.035 0 0 1 38.021 256Zm57.834-28.917a8.03 8.03 0 0 1-8.029-8.034 8.03 8.03 0 0 1 8.029-8.035h163.867a8.035 8.035 0 0 1 8.033 8.035 8.035 8.035 0 0 1-8.033 8.034Zm-57.834 0a8.03 8.03 0 0 1-8.029-8.034 8.03 8.03 0 0 1 8.029-8.035h29.99a8.035 8.035 0 0 1 8.033 8.035 8.035 8.035 0 0 1-8.033 8.034Zm163.459-28.384H142a8.173 8.173 0 0 1-2.906-.533H65.865a8.03 8.03 0 0 1-8.029-8.034 8.03 8.03 0 0 1 8.029-8.035h34.445a8.134 8.134 0 0 1-3.521-2.068L76 159.218a8.128 8.128 0 0 1-2.377-5.208 8.128 8.128 0 0 1 1.641-5.474l12.373-16.585a68.993 68.993 0 0 1-2.988-7.079l-20.311-2.926a8.163 8.163 0 0 1-7.025-8.15V84.375a8.167 8.167 0 0 1 7.025-8.15l20.311-2.926a70.215 70.215 0 0 1 2.988-7.073L75.258 49.792a8.178 8.178 0 0 1-1.635-5.48 8.113 8.113 0 0 1 2.381-5.2l20.781-20.807a8.141 8.141 0 0 1 5.779-2.393 8.1 8.1 0 0 1 4.93 1.657l16.5 12.373a69.937 69.937 0 0 1 7.09-2.972l2.914-20.333a8.146 8.146 0 0 1 2.723-5.016 8.155 8.155 0 0 1 5.428-2h29.572a8.159 8.159 0 0 1 5.342 2 8.138 8.138 0 0 1 2.727 5.016l2.92 20.333a72.131 72.131 0 0 1 7.086 2.972l16.439-12.373a8.039 8.039 0 0 1 4.9-1.657 8.109 8.109 0 0 1 5.766 2.393l20.8 20.958a8.142 8.142 0 0 1 2.381 5.2 8.135 8.135 0 0 1-1.633 5.474l-12.314 16.434a71.975 71.975 0 0 1 2.994 7.079l20.334 2.926a8.147 8.147 0 0 1 4.957 2.757 8.174 8.174 0 0 1 1.971 5.318v29.5a8.192 8.192 0 0 1-1.971 5.387 8.161 8.161 0 0 1-5.039 2.757l-20.34 2.926a67.225 67.225 0 0 1-2.971 7.079l12.234 16.353a8.209 8.209 0 0 1 1.627 5.486 8.133 8.133 0 0 1-2.367 5.208l-20.8 20.8a8.119 8.119 0 0 1-3.8 2.149h16.77a8.035 8.035 0 0 1 8.033 8.035 8.035 8.035 0 0 1-8.033 8.034h-55.26a8.157 8.157 0 0 1-2.9.533Zm37.543-16.6a8.118 8.118 0 0 1-2.953-1.413l-16.418-12.3a71.877 71.877 0 0 1-7.084 2.972l-1.547 10.745Zm-44.514 0 2.627-17.766a8.133 8.133 0 0 1 5.891-6.691 57.883 57.883 0 0 0 13.561-5.59 8.188 8.188 0 0 1 4.322-1.228 8.164 8.164 0 0 1 4.328 1.234l.039.029 14.875 11.371 10.77-10.995-11.168-14.9a8.122 8.122 0 0 1-1.275-4.368 8.1 8.1 0 0 1 1.264-4.35 62.735 62.735 0 0 0 5.26-13.358l.006-.011a8.194 8.194 0 0 1 6.7-5.868l18.439-2.676-.215-15.16-18.449-2.676a8.116 8.116 0 0 1-6.684-5.868 63.168 63.168 0 0 0-5.6-13.532 8.106 8.106 0 0 1 .578-8.961l11.367-14.876-10.984-10.774-14.9 11.168a8.1 8.1 0 0 1-4.594 1.413 8.215 8.215 0 0 1-4.066-1.083 57.452 57.452 0 0 0-13.562-5.584h-.006a8.154 8.154 0 0 1-5.891-6.7l-2.682-18.438h-15.23l-2.676 18.143a8.113 8.113 0 0 1-5.873 6.679 58.28 58.28 0 0 0-13.592 5.59 8.08 8.08 0 0 1-4.309 1.24 8.15 8.15 0 0 1-4.322-1.245l-.039-.029-14.877-11.371-10.988 10.995 11.395 14.911a8.111 8.111 0 0 1 1.264 4.362 8.137 8.137 0 0 1-1.252 4.344 64.4 64.4 0 0 0-5.283 13.509v.006a8.131 8.131 0 0 1-6.68 5.874l-18.449 2.688v15.229l18.139 2.676a8.163 8.163 0 0 1 6.678 5.874 63.854 63.854 0 0 0 5.59 13.509 8.183 8.183 0 0 1 1.258 4.356 8.161 8.161 0 0 1-1.264 4.368l-.029.035-11.365 14.864 10.988 10.775 14.9-11.168a8.127 8.127 0 0 1 4.58-1.408 8.129 8.129 0 0 1 4.063 1.089 58.074 58.074 0 0 0 13.59 5.584h.006a8.142 8.142 0 0 1 5.873 6.691l2.629 18.073Zm-31.975 0-1.551-10.745a68.569 68.569 0 0 1-7.08-2.972l-16.416 12.373a8.134 8.134 0 0 1-2.682 1.344ZM8.03 198.168a8.03 8.03 0 0 1-8.029-8.034 8.03 8.03 0 0 1 8.029-8.035h29.99a8.035 8.035 0 0 1 8.033 8.035 8.035 8.035 0 0 1-8.033 8.034Zm0-28.917a8.03 8.03 0 0 1-8.029-8.035 8.025 8.025 0 0 1 8.029-8.029h29.99a8.03 8.03 0 0 1 8.033 8.029 8.035 8.035 0 0 1-8.033 8.035Zm0-28.917a8.03 8.03 0 0 1-8.029-8.035 8.025 8.025 0 0 1 8.029-8.029h29.99a8.03 8.03 0 0 1 8.033 8.029 8.035 8.035 0 0 1-8.033 8.035Zm133.771-5.561a38.591 38.591 0 0 1-12.279-8.278 38.613 38.613 0 0 1-8.279-12.286 38.374 38.374 0 0 1-3.035-15.038 38.381 38.381 0 0 1 3.035-15.044 38.551 38.551 0 0 1 8.279-12.286 38.512 38.512 0 0 1 12.279-8.284 38.369 38.369 0 0 1 15.037-3.035 38.407 38.407 0 0 1 15.051 3.035 38.476 38.476 0 0 1 12.291 8.284 38.551 38.551 0 0 1 8.279 12.286 38.381 38.381 0 0 1 3.035 15.044 38.374 38.374 0 0 1-3.035 15.038 38.613 38.613 0 0 1-8.279 12.286 38.554 38.554 0 0 1-12.291 8.278 38.408 38.408 0 0 1-15.051 3.041 38.4 38.4 0 0 1-15.038-3.045Zm6.354-56.19a22.131 22.131 0 0 0-7.094 4.791 22.181 22.181 0 0 0-4.785 7.1 22.193 22.193 0 0 0-1.754 8.7 22.187 22.187 0 0 0 1.754 8.689 22.221 22.221 0 0 0 4.785 7.1 22.2 22.2 0 0 0 7.094 4.785 22.166 22.166 0 0 0 8.684 1.755 22.233 22.233 0 0 0 8.7-1.755 22.259 22.259 0 0 0 7.1-4.785 22.268 22.268 0 0 0 4.779-7.1 22.222 22.222 0 0 0 1.754-8.689 22.228 22.228 0 0 0-1.754-8.7 22.228 22.228 0 0 0-4.779-7.1 22.186 22.186 0 0 0-7.1-4.791 22.232 22.232 0 0 0-8.7-1.755 22.166 22.166 0 0 0-8.683 1.751ZM8.03 111.416a8.03 8.03 0 0 1-8.029-8.035 8.025 8.025 0 0 1 8.029-8.029h29.99a8.03 8.03 0 0 1 8.033 8.029 8.035 8.035 0 0 1-8.033 8.035Zm0-28.917a8.03 8.03 0 0 1-8.029-8.034 8.025 8.025 0 0 1 8.029-8.029h29.99a8.03 8.03 0 0 1 8.033 8.029 8.035 8.035 0 0 1-8.033 8.034Z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 925",fill:"none",d:"M0 0h256v256H0z"})))},vo=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("g",{"data-name":"watch-icn",transform:"translate(4333.082 464.859)"},r.createElement("g",{"data-name":"Grupo 1495"},r.createElement("path",{"data-name":"Trazado 345",d:"M-4237.731-461.928h-70.438a21.991 21.991 0 0 0-21.981 21.98v72.661a5.084 5.084 0 0 0 5.083 5.084h7.4a5.09 5.09 0 0 0 5.1-5.084v-57.382a19.671 19.671 0 0 1 19.665-19.672h55.169a5.081 5.081 0 0 0 5.076-5.084v-7.416a5.081 5.081 0 0 0-5.074-5.087Z"}),r.createElement("path",{"data-name":"Trazado 345 - Contorno",d:"M-4308.169-464.859h70.439a8.021 8.021 0 0 1 8.008 8.015v7.416a8.021 8.021 0 0 1-8.008 8.015h-55.17a16.756 16.756 0 0 0-16.733 16.74v57.386a8.032 8.032 0 0 1-8.03 8.015h-7.4a8.023 8.023 0 0 1-8.014-8.015v-72.661a24.94 24.94 0 0 1 24.908-24.911Zm70.439 17.583a2.151 2.151 0 0 0 2.145-2.152v-7.416a2.151 2.151 0 0 0-2.145-2.156h-70.439a19.071 19.071 0 0 0-19.05 19.049v72.661a2.154 2.154 0 0 0 2.151 2.153h7.4a2.163 2.163 0 0 0 2.168-2.153v-57.386a22.625 22.625 0 0 1 22.6-22.6Z"}),r.createElement("path",{"data-name":"Trazado 346",d:"M-4101.983-461.928h-77.172a5.088 5.088 0 0 0-5.09 5.084v7.416a5.088 5.088 0 0 0 5.09 5.084h61.9a19.677 19.677 0 0 1 19.674 19.672v57.386a5.085 5.085 0 0 0 5.089 5.084h7.4a5.076 5.076 0 0 0 5.074-5.084v-72.661a21.977 21.977 0 0 0-21.965-21.981Z"}),r.createElement("path",{"data-name":"Trazado 346 - Contorno",d:"M-4179.155-464.859h77.172a24.935 24.935 0 0 1 24.9 24.911v72.661a8.02 8.02 0 0 1-8.006 8.015h-7.4a8.028 8.028 0 0 1-8.021-8.015v-57.386a16.761 16.761 0 0 0-16.743-16.74h-61.9a8.027 8.027 0 0 1-8.021-8.015v-7.416a8.027 8.027 0 0 1 8.019-8.015Zm94.067 99.725a2.15 2.15 0 0 0 2.143-2.153v-72.661A19.066 19.066 0 0 0-4101.983-459h-77.172a2.158 2.158 0 0 0-2.158 2.153v7.416a2.158 2.158 0 0 0 2.158 2.152h61.9a22.63 22.63 0 0 1 22.605 22.6v57.386a2.158 2.158 0 0 0 2.158 2.153Z"}),r.createElement("path",{"data-name":"Trazado 347",d:"M-4085.088-313.79h-7.4a5.085 5.085 0 0 0-5.089 5.084v59.661a19.685 19.685 0 0 1-19.674 19.68h-61.9a5.086 5.086 0 0 0-5.094 5.075v7.424a5.085 5.085 0 0 0 5.09 5.075h77.172a21.972 21.972 0 0 0 21.97-21.98v-74.935a5.075 5.075 0 0 0-5.075-5.084Z"}),r.createElement("path",{"data-name":"Trazado 347 - Contorno",d:"M-4092.489-316.721h7.4a8.02 8.02 0 0 1 8.006 8.015v74.935a24.935 24.935 0 0 1-24.9 24.911h-77.172a8.023 8.023 0 0 1-8.021-8.006v-7.424a8.023 8.023 0 0 1 8.021-8.007h61.9a16.765 16.765 0 0 0 16.743-16.749v-59.661a8.027 8.027 0 0 1 8.023-8.014Zm-9.494 102a19.065 19.065 0 0 0 19.039-19.049v-74.935a2.15 2.15 0 0 0-2.143-2.153h-7.4a2.158 2.158 0 0 0-2.158 2.153v59.661a22.634 22.634 0 0 1-22.605 22.611h-61.9a2.153 2.153 0 0 0-2.158 2.144v7.424a2.153 2.153 0 0 0 2.158 2.143Z"}),r.createElement("path",{"data-name":"Trazado 348",d:"M-4237.731-229.365h-55.169a19.679 19.679 0 0 1-19.665-19.68v-59.661a5.089 5.089 0 0 0-5.1-5.084h-7.4a5.083 5.083 0 0 0-5.083 5.084v74.935a21.985 21.985 0 0 0 21.979 21.981h70.439a5.079 5.079 0 0 0 5.076-5.075v-7.425a5.079 5.079 0 0 0-5.077-5.075Z"}),r.createElement("path",{"data-name":"Trazado 348 - Contorno",d:"M-4237.73-208.859h-70.439a24.94 24.94 0 0 1-24.913-24.911v-74.935a8.023 8.023 0 0 1 8.014-8.015h7.4a8.032 8.032 0 0 1 8.03 8.015v59.661a16.76 16.76 0 0 0 16.733 16.749h55.169a8.016 8.016 0 0 1 8.008 8.007v7.424a8.016 8.016 0 0 1-8.002 8.005Zm-87.338-102a2.154 2.154 0 0 0-2.151 2.153v74.935a19.071 19.071 0 0 0 19.05 19.049h70.439a2.147 2.147 0 0 0 2.145-2.143v-7.424a2.147 2.147 0 0 0-2.145-2.144h-55.17a22.629 22.629 0 0 1-22.6-22.611v-59.661a2.163 2.163 0 0 0-2.168-2.153Z"})),r.createElement("ellipse",{"data-name":"Elipse 56",cx:56.415,cy:56.414,rx:56.415,ry:56.414,transform:"translate(-4260.489 -392.445)"}),r.createElement("path",{"data-name":"Elipse 56 - Contorno",d:"M-4205.074-393.376a51.345 51.345 0 1 1-51.346 51.345 51.4 51.4 0 0 1 51.346-51.345Zm0 96.827a45.482 45.482 0 1 0-45.483-45.482 45.535 45.535 0 0 0 45.483 45.482Z"})),r.createElement("path",{"data-name":"Rect\\xE1ngulo 890",fill:"none",d:"M0 0h256v256H0z"})))},yo=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"clip-path"},r.createElement("rect",{id:"Rect\xe1ngulo_1007","data-name":"Rect\xe1ngulo 1007",width:"256",height:"174.517",fill:"none"})),r.createElement("clipPath",{id:"clip-New_Service_Account_Created"},r.createElement("rect",{width:"256",height:"256"}))),r.createElement("g",{id:"New_Service_Account_Created","data-name":"New Access Key Created",clipPath:"url(#clip-New_Service_Account_Created)"},r.createElement("g",{id:"Create_Service_Account_Icon","data-name":"Create Access Key Icon"},r.createElement("rect",{id:"Rect\xe1ngulo_1006","data-name":"Rect\xe1ngulo 1006",width:"256",height:"256",fill:"none"}),r.createElement("g",{id:"Grupo_2394","data-name":"Grupo 2394",transform:"translate(0 41.709)"},r.createElement("g",{id:"Grupo_2393","data-name":"Grupo 2393",transform:"translate(0 -0.001)"},r.createElement("path",{id:"Trazado_7132","data-name":"Trazado 7132",d:"M209.54,0a46.254,46.254,0,0,0-29.083,10.24H27.839a27.482,27.482,0,0,0-10.808,2.2A28.109,28.109,0,0,0,2.2,27.269,27.507,27.507,0,0,0,0,38.078v108.6a27.507,27.507,0,0,0,2.2,10.809,28.112,28.112,0,0,0,14.834,14.834,27.5,27.5,0,0,0,10.808,2.2H195.985a27.5,27.5,0,0,0,10.808-2.2,28.11,28.11,0,0,0,14.833-14.834,27.486,27.486,0,0,0,2.2-10.809v-56A46.462,46.462,0,0,0,209.54,0m-5.828,67.986V53.635H189.362V39.283h14.351V24.933h14.351V39.283h14.351V53.635H218.064V67.985Zm-69.071,1.7h34.67a46.667,46.667,0,0,0,17.844,17.486H134.641a8.743,8.743,0,1,1,0-17.486M68.625,23.35h0c19.765,0,35.837,16.716,35.837,37.255a38.068,38.068,0,0,1-2.816,14.482,37.124,37.124,0,0,1-7.674,11.841,35.566,35.566,0,0,1-11.39,8A34.44,34.44,0,0,1,68.65,97.872h-.025C48.872,97.872,32.8,81.148,32.8,60.606S48.872,23.35,68.625,23.35m41.452,122.5a16.272,16.272,0,0,1-14.76,9.426H38.868a16.474,16.474,0,0,1-14.823-9.289,19.517,19.517,0,0,1,1.376-19.337l.013-.014c.051-.08.111-.164.162-.236l.056-.078c.24-.358.435-.637.635-.9a51.4,51.4,0,0,1,38.031-20.735c.806-.046,1.673-.07,2.578-.07v0a48.828,48.828,0,0,1,11.065,1.3,52.471,52.471,0,0,1,10.723,3.8,51.858,51.858,0,0,1,19.446,16.116,19.952,19.952,0,0,1,1.946,20.028m85.765,8.641h-61.2a8.743,8.743,0,1,1,0-17.486h61.2a8.743,8.743,0,1,1,0,17.486m0-33.223h-61.2a8.743,8.743,0,1,1,0-17.485h61.2a8.743,8.743,0,1,1,0,17.485m13.976-38.1a36.707,36.707,0,1,1,36.707-36.707,36.707,36.707,0,0,1-36.707,36.707",transform:"translate(0 0.001)",fill:"#4ccb92"}))))))},_o=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"heal-icn",d:"m157.546 239.085-4.729-4.747-24.864-24.809-29.5 29.555a57.519 57.519 0 0 1-81.482 0 57.729 57.729 0 0 1 0-81.769l29.5-29.547-24.864-24.927-4.635-4.629a57.738 57.738 0 0 1 0-81.777c21.764-21.913 59.749-21.913 81.482 0l4.729 4.645 24.77 24.911 29.593-29.555c21.764-21.913 59.718-21.913 81.482 0a57.738 57.738 0 0 1 0 81.777l-29.5 29.555 24.864 24.793 4.635 4.755a57.718 57.718 0 1 1-81.482 81.769Zm13.654-23.036 4.572 4.629c12.15 12.028 33.006 12.028 45.031 0a31.967 31.967 0 0 0 0-44.957l-4.791-4.747ZM35.261 175.721a31.814 31.814 0 0 0 0 44.957c11.962 12.028 32.943 12.028 44.968 0l29.471-29.547-45-45.09Zm22.954-72.88 6.482 6.52 81.638 81.769 6.482 6.5 44.968-45.074-6.482-6.52-81.603-81.63-6.514-6.52Zm117.556-67.992-29.436 29.557 44.965 44.955 29.5-29.555a31.6 31.6 0 0 0 9.238-22.541 31.28 31.28 0 0 0-9.238-22.416 32.381 32.381 0 0 0-45.031 0Zm-140.51 0a31.211 31.211 0 0 0-9.3 22.416 31.525 31.525 0 0 0 9.3 22.541l4.729 4.762 44.843-45.09-4.6-4.629a31.61 31.61 0 0 0-44.968 0Zm105.562 118.465a12.731 12.731 0 1 1 12.746 12.892 12.816 12.816 0 0 1-12.746-12.892Zm-25.616-25.546a12.808 12.808 0 1 1 12.745 12.773 12.747 12.747 0 0 1-12.744-12.773Zm-25.49-25.679a12.746 12.746 0 1 1 12.714 12.9 12.8 12.8 0 0 1-12.714-12.901Z"}),r.createElement("path",{"data-name":"heal-icn - Contorno",d:"M198.286 256.5a57.755 57.755 0 0 1-41.094-17.062l-4.729-4.747-24.509-24.455-29.146 29.2a57.907 57.907 0 0 1-82.189 0A57.353 57.353 0 0 1 3.9 220.544a58.292 58.292 0 0 1-4.4-22.407 57.536 57.536 0 0 1 17.121-41.177l29.144-29.192-24.512-24.573-4.634-4.629a58.238 58.238 0 0 1 0-82.486A54.985 54.985 0 0 1 35.647 3.644 59.5 59.5 0 0 1 46.5.536a61.384 61.384 0 0 1 22.457 0A59.431 59.431 0 0 1 79.8 3.644a54.885 54.885 0 0 1 19.007 12.437l4.73 4.646 24.417 24.555 29.238-29.2a54.994 54.994 0 0 1 19.023-12.438A59.465 59.465 0 0 1 187.061.536a61.355 61.355 0 0 1 22.451 0 59.465 59.465 0 0 1 10.846 3.108 55 55 0 0 1 19.024 12.439 58.238 58.238 0 0 1 0 82.485l-29.143 29.2 24.515 24.445 4.631 4.751a57.534 57.534 0 0 1 17.115 41.173 58.292 58.292 0 0 1-4.4 22.407 58.2 58.2 0 0 1-53.811 35.956Zm-70.334-47.678 25.218 25.162 4.73 4.748a57.218 57.218 0 0 0 80.775-81.061l-.006-.006-4.632-4.752-25.216-25.144 29.852-29.909a57.238 57.238 0 0 0 0-81.069 54.007 54.007 0 0 0-18.681-12.217 58.461 58.461 0 0 0-10.663-3.055 60.354 60.354 0 0 0-22.084 0 58.461 58.461 0 0 0-10.663 3.055A54 54 0 0 0 157.9 16.788l-29.948 29.91-25.124-25.265-4.728-4.646A53.891 53.891 0 0 0 79.432 4.574a58.431 58.431 0 0 0-10.663-3.055 60.384 60.384 0 0 0-22.09 0 58.5 58.5 0 0 0-10.666 3.055 54 54 0 0 0-18.686 12.214 57.238 57.238 0 0 0 0 81.07l4.636 4.63 25.217 25.28-29.851 29.9A56.544 56.544 0 0 0 .5 198.137a57.3 57.3 0 0 0 4.327 22.024 56.362 56.362 0 0 0 12.5 18.568 57.019 57.019 0 0 0 80.776 0Zm70.381 21.377a33.611 33.611 0 0 1-12.273-2.293 31.079 31.079 0 0 1-10.641-6.876l-4.92-4.982 45.513-45.78 5.146 5.1a31.859 31.859 0 0 1 6.984 10.44 32.695 32.695 0 0 1-6.983 35.226 30.651 30.651 0 0 1-10.571 6.877 33.426 33.426 0 0 1-12.255 2.288Zm-22.209-9.874a30.085 30.085 0 0 0 10.3 6.653 32.98 32.98 0 0 0 23.8 0 29.659 29.659 0 0 0 10.229-6.654 31.294 31.294 0 0 0 0-44.25l-4.435-4.394-44.118 44.37Zm-118.4 9.874a33.463 33.463 0 0 1-12.264-2.293 30.418 30.418 0 0 1-10.554-6.879 32.165 32.165 0 0 1 0-45.664L64.7 145.332l45.707 45.8-29.82 29.9a30.63 30.63 0 0 1-10.593 6.874 33.555 33.555 0 0 1-12.273 2.293ZM64.7 146.75l-29.084 29.324a31.314 31.314 0 0 0 0 44.25 29.428 29.428 0 0 0 10.212 6.655 33.006 33.006 0 0 0 23.8 0 29.635 29.635 0 0 0 10.246-6.653l29.115-29.194Zm88.119 51.593-6.836-6.859-81.64-81.769-6.834-6.874 45.675-45.663 6.867 6.874 81.607 81.636 6.834 6.874Zm-93.9-95.5 6.132 6.163 81.637 81.769 6.129 6.149 44.262-44.367-6.131-6.167-81.605-81.632-6.16-6.166Zm94.65 63.863a13.334 13.334 0 0 1-13.245-13.391 13.231 13.231 0 1 1 13.245 13.391Zm0-25.664a12.316 12.316 0 0 0-12.245 12.273 12.23 12.23 0 1 0 20.867-8.667 12.1 12.1 0 0 0-8.622-3.607Zm-25.616 0a13 13 0 0 1-5.134-1.051 13.319 13.319 0 0 1-4.211-2.855 13.254 13.254 0 0 1 9.345-22.648 13.351 13.351 0 0 1 9.44 3.857 13.2 13.2 0 0 1 0 18.792 13.32 13.32 0 0 1-9.44 3.904Zm0-25.554a12.277 12.277 0 0 0 0 24.554 12.326 12.326 0 0 0 8.737-3.614 12.2 12.2 0 0 0 0-17.371 12.357 12.357 0 0 0-8.737-3.57Zm-25.522 0A13.347 13.347 0 0 1 93.1 92.729a13.255 13.255 0 0 1 22.607 9.36 13.353 13.353 0 0 1-13.276 13.398Zm0-25.664a12.3 12.3 0 0 0-12.214 12.265 12.246 12.246 0 1 0 24.49 0 12.331 12.331 0 0 0-12.277-12.265Zm88.869 20.245-45.672-45.663 29.788-29.909a30.775 30.775 0 0 1 10.606-6.947 33.717 33.717 0 0 1 24.527 0 30.776 30.776 0 0 1 10.607 6.947 31.725 31.725 0 0 1 6.981 10.426 32.714 32.714 0 0 1-6.983 35.237Zm-44.259-45.663 44.262 44.25 29.145-29.2a31.714 31.714 0 0 0 6.765-34.15 30.732 30.732 0 0 0-6.764-10.1 29.784 29.784 0 0 0-10.266-6.723 32.717 32.717 0 0 0-23.792 0 29.782 29.782 0 0 0-10.265 6.723ZM39.989 85.278l-5.083-5.119a32.15 32.15 0 0 1 0-45.661 32.11 32.11 0 0 1 45.679 0l4.952 4.98Zm17.725-59.32a30.554 30.554 0 0 0-22.095 9.24l-.006.006a31.314 31.314 0 0 0 0 44.247l4.376 4.408 44.138-44.381-4.256-4.28a30.629 30.629 0 0 0-22.157-9.24Z",fill:"rgba(0,0,0,0)"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 879",fill:"none",d:"M0 0h256v256H0z"})))},So=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 33.055 39.954"},e),r.createElement("path",{id:"Trazado_6934","data-name":"Trazado 6934",d:"M2.663,53.686,0,55.018V78.391l2.663,1.324.016-.019V53.7l-.016-.018",transform:"translate(0 -46.754)",fill:"#8c3123"}),r.createElement("path",{id:"Trazado_6935","data-name":"Trazado 6935",d:"M34.876,76.323,20.624,79.715V53.686L34.876,57V76.323",transform:"translate(-17.961 -46.754)",fill:"#e05243"}),r.createElement("path",{id:"Trazado_6936","data-name":"Trazado 6936",d:"M81.178,125.086l6.045.77.038-.088.034-9.913-.072-.077-6.045.758v8.55",transform:"translate(-70.696 -100.829)",fill:"#8c3123"}),r.createElement("path",{id:"Trazado_6937","data-name":"Trazado 6937",d:"M128,76.361l13.864,3.362.022-.035V53.709l-.022-.023L128,57.043V76.361",transform:"translate(-111.469 -46.754)",fill:"#8c3123"}),r.createElement("path",{id:"Trazado_6938","data-name":"Trazado 6938",d:"M134.043,125.086l-6.047.77V115.778l6.047.758v8.55",transform:"translate(-111.469 -100.829)",fill:"#e05243"}),r.createElement("path",{id:"Trazado_6939","data-name":"Trazado 6939",d:"M93.27,78.958l-6.047,1.1-6.045-1.1,6.038-1.583,6.055,1.583",transform:"translate(-70.696 -67.384)",fill:"#5e1f18"}),r.createElement("path",{id:"Trazado_6940","data-name":"Trazado 6940",d:"M93.27,212.319l-6.047-1.109-6.045,1.109L87.216,214l6.054-1.685",transform:"translate(-70.696 -183.938)",fill:"#f2b0a9"}),r.createElement("path",{id:"Trazado_6941","data-name":"Trazado 6941",d:"M81.178,11.573l6.045-1.5.049-.015V.04L87.223,0,81.178,3.023v8.55",transform:"translate(-70.696)",fill:"#8c3123"}),r.createElement("path",{id:"Trazado_6942","data-name":"Trazado 6942",d:"M134.043,11.573,128,10.077V0l6.047,3.023v8.55",transform:"translate(-111.469)",fill:"#e05243"}),r.createElement("path",{id:"Trazado_6943","data-name":"Trazado 6943",d:"M87.219,231.378l-6.046-3.022v-8.55l6.046,1.5.089.1-.024,9.8-.065.174",transform:"translate(-70.692 -191.424)",fill:"#8c3123"}),r.createElement("path",{id:"Trazado_6944","data-name":"Trazado 6944",d:"M128,231.378l6.046-3.022v-8.55L128,221.3v10.077",transform:"translate(-111.469 -191.424)",fill:"#e05243"}),r.createElement("path",{id:"Trazado_6945","data-name":"Trazado 6945",d:"M235.367,53.686l2.664,1.332V78.391l-2.664,1.331V53.686",transform:"translate(-204.976 -46.754)",fill:"#e05243"}))},To=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{d:"M19.805 108.063c-26.4 0-26.4 40.032 0 40.032h167.684l-22.739 22.668c-18.656 18.622 9.725 46.922 28.382 28.316l56.873-56.731a19.991 19.991 0 0 0 0-28.548l-56.877-56.716c-18.656-18.6-47.038 9.684-28.382 28.3l22.743 22.679H19.805Z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 863",fill:"none",d:"M.003 0h256v256h-256z"})))},Ao=function(e){return r.createElement("svg",je({version:"1.1",id:"Layer_1",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("g",null,r.createElement("defs",null,r.createElement("rect",{id:"SVGID_1_",x:"2.6",y:"47.4",width:"250.4",height:"161.2"})),r.createElement("g",null,r.createElement("path",{d:"M127.8,95.5c-18,0-32.5,14.6-32.5,32.5c0,18,14.6,32.5,32.5,32.5l0,0\n\t\t\tc18,0,32.5-14.6,32.5-32.5C160.3,110,145.8,95.5,127.8,95.5",fill:"currentcolor"}),r.createElement("path",{d:"M248.2,112C204.1,45.5,114.5,27.4,48,71.4C31.9,82.1,18.1,95.9,7.5,112\n\t\t\tc-6.5,9.7-6.5,22.3,0,32c44.1,66.5,133.7,84.6,200.1,40.5c16.1-10.7,29.9-24.5,40.5-40.5C254.6,134.3,254.6,121.7,248.2,112\n\t\t\t M127.8,181.2c-29.4,0-53.2-23.8-53.2-53.2s23.8-53.2,53.2-53.2S181,98.6,181,128l0,0C181,157.4,157.2,181.2,127.8,181.2",fill:"currentcolor"}))))},Co=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",viewBox:"0 0 256 256",fill:"currentcolor"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"clip-path"},r.createElement("rect",{id:"Rect\xe1ngulo_1024","data-name":"Rect\xe1ngulo 1024",width:"256",height:"255.998",fill:"none"})),r.createElement("clipPath",{id:"clip-Enable_Bucket_Quota"},r.createElement("rect",{width:"256",height:"256"}))),r.createElement("g",{id:"Enable_Bucket_Quota","data-name":"Enable Bucket Quota",clipPath:"url(#clip-Enable_Bucket_Quota)"},r.createElement("g",{id:"Enable_Bucket_Quota_icon","data-name":"Enable Bucket Quota icon"},r.createElement("g",{id:"Grupo_2411","data-name":"Grupo 2411"},r.createElement("path",{id:"Trazado_7154","data-name":"Trazado 7154",d:"M250.852,8.773A21.516,21.516,0,0,0,233.731,0H22.263A21.507,21.507,0,0,0,5.148,8.773,25.866,25.866,0,0,0,.394,28.758c5.223,30.385,16.208,94.421,25,145.533l.015.1c4.457,26,8.336,48.644,10.616,61.787C37.988,247.665,47.17,256,57.875,256H198.129c10.712,0,19.873-8.33,21.859-19.818l10.59-61.711.077-.375,14.334-83.62.049-.243L255.6,28.758a25.8,25.8,0,0,0-4.748-19.985M37.855,98a9.546,9.546,0,0,1-9.408-7.931l-.007-.041a9.544,9.544,0,0,1,9.406-11.159H73.505A76.487,76.487,0,0,0,61.131,98ZM52.393,181.92a9.542,9.542,0,0,1-9.408-7.93l-.007-.041a9.543,9.543,0,0,1,9.406-11.158h9.537a76.056,76.056,0,0,0,13.085,19.123ZM95.5,184.747A65.491,65.491,0,0,1,166.073,74.4l-6.682,6.683a56.3,56.3,0,0,0-68.414,88.287h.016a56.4,56.4,0,0,0,68.255,8.755l6.7,6.7a65.481,65.481,0,0,1-70.445-.081m81.526-2.408-3.147-3.147L124.27,129.579l49.47-49.515,3.27-3.27,3.27,3.27a69.643,69.643,0,0,1,14.386,20.891q.409.909.789,1.828a70,70,0,0,1,0,53.585l.016-.013q-.46,1.113-.964,2.208A69.625,69.625,0,0,1,180.3,179.069Zm36.084-8.449h0a9.543,9.543,0,0,1-9.413,7.989l-11.062,0a80.263,80.263,0,0,0,11.888-18.775c.039-.085.079-.177.118-.264a9.542,9.542,0,0,1,8.469,11.047M227.4,89.971a9.542,9.542,0,0,1-9.414,7.989l-12.633,0c-.216-.509-.431-1.019-.659-1.526a80.169,80.169,0,0,0-10.75-17.566h24.04a9.544,9.544,0,0,1,9.416,11.1",transform:"translate(0)"}),r.createElement("path",{id:"Trazado_7155","data-name":"Trazado 7155",d:"M137.27,129.555,176.915,169.2a60.81,60.81,0,0,0,0-79.259Z",transform:"translate(-0.011)"})))))},wo=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{"data-name":"Select Multiple",clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{d:"M234.667 234.667v-30.486h-30.473v30.485h30.473m-91.43 0v-30.485h-30.473v30.485h30.473m-91.43 0v-30.485H21.333v30.485h30.473m182.861-91.43v-30.472h-30.473v30.473h30.473m-91.43 0v-30.473h-30.473v30.473h30.473m-91.43 0v-30.473H21.333v30.473h30.473m182.861-91.43V21.333h-30.473v30.473h30.473m-91.43 0V21.333h-30.473v30.473h30.473m-91.43 0V21.333H21.333v30.473h30.473M241.779 256h-44.7a14.225 14.225 0 0 1-14.221-14.234v-44.684a14.225 14.225 0 0 1 14.221-14.234h44.7A14.225 14.225 0 0 1 256 197.082v44.685A14.225 14.225 0 0 1 241.779 256Zm-91.43 0h-44.7a14.225 14.225 0 0 1-14.219-14.234v-44.684a14.225 14.225 0 0 1 14.221-14.234h44.7a14.225 14.225 0 0 1 14.221 14.234v44.685A14.225 14.225 0 0 1 150.349 256Zm-91.43 0h-44.7A14.233 14.233 0 0 1 0 241.766v-44.684a14.233 14.233 0 0 1 14.221-14.234h44.7a14.225 14.225 0 0 1 14.221 14.234v44.685A14.225 14.225 0 0 1 58.918 256Zm182.861-91.43h-44.7a14.222 14.222 0 0 1-14.221-14.221v-44.7a14.214 14.214 0 0 1 14.223-14.219h44.7A14.214 14.214 0 0 1 256 105.651v44.7a14.222 14.222 0 0 1-14.221 14.219Zm-91.43 0h-44.7a14.222 14.222 0 0 1-14.22-14.221v-44.7a14.214 14.214 0 0 1 14.221-14.219h44.7a14.214 14.214 0 0 1 14.221 14.221v44.7a14.222 14.222 0 0 1-14.223 14.219Zm-91.43 0h-44.7A14.23 14.23 0 0 1 0 150.349v-44.7A14.222 14.222 0 0 1 14.221 91.43h44.7a14.214 14.214 0 0 1 14.221 14.221v44.7a14.222 14.222 0 0 1-14.224 14.219Zm182.861-91.43h-44.7a14.214 14.214 0 0 1-14.221-14.221v-44.7A14.214 14.214 0 0 1 197.082 0h44.7A14.214 14.214 0 0 1 256 14.221v44.7a14.214 14.214 0 0 1-14.221 14.218Zm-91.43 0h-44.7A14.214 14.214 0 0 1 91.43 58.918v-44.7A14.214 14.214 0 0 1 105.651 0h44.7a14.214 14.214 0 0 1 14.219 14.221v44.7a14.214 14.214 0 0 1-14.221 14.218Zm-91.43 0h-44.7A14.222 14.222 0 0 1 0 58.918v-44.7A14.222 14.222 0 0 1 14.221 0h44.7a14.214 14.214 0 0 1 14.218 14.221v44.7a14.214 14.214 0 0 1-14.221 14.218Z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 915",fill:"none",d:"M0 0h256v256H0z"})))},No=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("g",{id:"trash-icn",transform:"translate(0 0)"},r.createElement("path",{fill:"currentcolor",d:"M219.6,16.2h-49.7V8.4c0-3.4-2.7-6.1-6.1-6.1H92.2c-3.4,0-6.1,2.7-6.1,6.1v7.8H36.3\n\t\tc-3.4,0-6.1,2.8-6.1,6.2V38c0,3.4,2.7,6.1,6.1,6.1h183.3c3.4,0,6.1-2.7,6.1-6.1V22.4C225.8,19,223.1,16.2,219.6,16.2\n\t\tC219.7,16.2,219.6,16.2,219.6,16.2z"}),r.createElement("path",{fill:"currentcolor",d:"M44.2,225.5c0,15.6,12.7,28.2,28.2,28.2h111.2c15.6-0.1,28.2-12.7,28.2-28.2V58.1H44.2V225.5z"})))},Io=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",viewBox:"0 0 256 256",fill:"currentcolor"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"clip-path"},r.createElement("rect",{id:"Rect\xe1ngulo_1012","data-name":"Rect\xe1ngulo 1012",width:"219.579",height:"256"})),r.createElement("clipPath",{id:"clip-Edit_YAML"},r.createElement("rect",{width:"256",height:"256"}))),r.createElement("g",{id:"Edit_YAML","data-name":"Edit YAML",clipPath:"url(#clip-Edit_YAML)"},r.createElement("g",{id:"Edit_YAML_Icon","data-name":"Edit YAML Icon"},r.createElement("rect",{id:"Rect\xe1ngulo_1013","data-name":"Rect\xe1ngulo 1013",width:"256",height:"256",fill:"none"}),r.createElement("g",{id:"Grupo_2399","data-name":"Grupo 2399",transform:"translate(25)"},r.createElement("g",{id:"Grupo_2398","data-name":"Grupo 2398"},r.createElement("path",{id:"Trazado_7135","data-name":"Trazado 7135",d:"M393.716,60.148a7.412,7.412,0,0,0-5.1,2.082L369.7,81.158a1.738,1.738,0,0,0-.5.946l-1.953,9.528a1.754,1.754,0,0,0,.5,1.64,1.912,1.912,0,0,0,1.323.5.8.8,0,0,0,.378-.063l9.453-1.83a1.736,1.736,0,0,0,.946-.5l18.906-18.928a7.242,7.242,0,0,0,0-10.158,6.957,6.957,0,0,0-5.042-2.145",transform:"translate(-207.088 -33.921)"}),r.createElement("path",{id:"Trazado_7136","data-name":"Trazado 7136",d:"M176.1,0a43.4,43.4,0,0,0-34.3,16.755c-4.119.092-8.241.181-12.357.164-21.964-.1-43.951.3-65.928.385-2.625.014-5.267.014-7.914.014H16.136A16.146,16.146,0,0,0,0,33.445V239.878A16.142,16.142,0,0,0,16.136,256H186.882A16.131,16.131,0,0,0,203,239.877V137.027c0-16.076-.4-32.234-.013-48.284.089-3.731.185-7.51.262-11.308A43.478,43.478,0,0,0,176.1,0M51.689,162.377v19.369H37.8V162.56l-19.3-31.977H34.44l10.343,19.333,10.306-19.333H70.547Zm81.6,19.369H119.4V149.733L111.182,177h-14.8l-8.223-27.262v32.014H74.271V130.583H93.53L103.8,161.354l10.233-30.771h19.259Zm45.823,0H140.6V130.583h13.888v38.372h24.631ZM176.359,77.831a34.352,34.352,0,1,1,34.352-34.352,34.352,34.352,0,0,1-34.352,34.352"}))))))},xo=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{"data-name":"Reported Usage",clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Trazado 390",d:"M128.003 0a128.151 128.151 0 0 0-128 128c0 70.573 57.424 127.995 128 127.995a128.147 128.147 0 0 0 128-127.995 128.15 128.15 0 0 0-128-128Zm0 223.078a95.188 95.188 0 0 1-95.085-95.075 95.191 95.191 0 0 1 95.085-95.084v95.084h95.075a95.184 95.184 0 0 1-95.075 95.074Z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 869",fill:"none",d:"M0 0h256v256H0z"})))},Ro=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("g",{"data-name":"PrometheusIcon"},r.createElement("path",{d:"M128.908 0a128 128 0 1 0 128 128 128 128 0 0 0-128-128Zm0 239.565c-20.112 0-36.42-13.435-36.42-30h72.839c.004 16.561-16.302 30-36.419 30Zm60.154-39.941H68.751v-21.818h120.317v21.817Zm-.432-33.046H69.094c-.4-.458-.8-.91-1.188-1.375-12.315-14.954-15.216-22.76-18.032-30.717-.048-.262 14.933 3.06 25.556 5.45 0 0 5.466 1.265 13.458 2.722a49.95 49.95 0 0 1-12.23-32.117c0-25.658 19.68-48.08 12.58-66.2 6.91.562 14.3 14.583 14.8 36.506 7.346-10.152 10.42-28.691 10.42-40.057 0-11.769 7.755-25.44 15.512-25.908-6.915 11.4 1.79 21.165 9.53 45.4 2.9 9.1 2.532 24.423 4.772 34.139.744-20.178 4.213-49.621 17.014-59.785-5.647 12.8.836 28.819 5.27 36.519 7.154 12.424 11.49 21.836 11.49 39.639a49.518 49.518 0 0 1-11.84 31.959c8.452-1.586 14.289-3.016 14.289-3.016l27.451-5.355s-3.985 16.4-19.312 32.196Z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 895",fill:"none",d:"M0 0h256v256H0z"}))))},ko=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"clip-path"},r.createElement("rect",{id:"Rect\xe1ngulo_1028","data-name":"Rect\xe1ngulo 1028",width:"256",height:"256",fill:"none"})),r.createElement("clipPath",{id:"clip-Generic_Confirmation"},r.createElement("rect",{width:"256",height:"256"}))),r.createElement("g",{id:"Generic_Confirmation","data-name":"Generic Confirmation",clipPath:"url(#clip-Generic_Confirmation)"},r.createElement("g",{id:"Generic_Confirmation_Icon","data-name":"Generic Confirmation Icon"},r.createElement("g",{id:"Grupo_2416","data-name":"Grupo 2416"},r.createElement("path",{id:"Trazado_7167","data-name":"Trazado 7167",d:"M128,0A128,128,0,1,0,256,128,128,128,0,0,0,128,0m.762,229.13A101.13,101.13,0,1,1,229.892,128a101.13,101.13,0,0,1-101.13,101.13M167.851,81.8,111,137.769,90.83,117.862A14.916,14.916,0,0,0,69.884,139.1l41.148,40.543,77.952-76.6a14.973,14.973,0,1,0-20.732-21.609q-.188.181-.37.367Z",fill:"#4ccb92"})))))},Oo=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("g",{"data-name":"NextArrowIcon"},r.createElement("path",{d:"M19.805 108.063c-26.4 0-26.4 40.032 0 40.032h167.684l-22.739 22.668c-18.656 18.622 9.725 46.922 28.382 28.316l56.873-56.731a19.991 19.991 0 0 0 0-28.548l-56.877-56.716c-18.656-18.6-47.038 9.684-28.382 28.3l22.743 22.679H19.805Z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 863",fill:"none",d:"M.003 0h256v256h-256z"}))))},Lo=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Uni\\xF3n 36",d:"m203.074 254.064-74.746-44.835-74.746 44.835a13.592 13.592 0 0 1-20.586-11.636V46.276A46.324 46.324 0 0 1 79.277 0h98.078a46.328 46.328 0 0 1 46.281 46.276v196.152a13.576 13.576 0 0 1-20.562 11.636Zm-67.778-72.319 61.176 36.71V46.276a19.133 19.133 0 0 0-19.113-19.133H79.277a19.148 19.148 0 0 0-19.113 19.133v172.179l61.16-36.71a13.569 13.569 0 0 1 13.969 0Z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 921",fill:"none",d:"M0 0h256v256H0z"})))},Do=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 42.239 33.998"},e),r.createElement("g",{id:"google-cloud-logo-color",transform:"translate(-526 -141)"},r.createElement("g",{id:"Grupo_1820","data-name":"Grupo 1820",transform:"translate(526 141)"},r.createElement("path",{id:"Trazado_6946","data-name":"Trazado 6946",d:"M78,40.648h1.288l3.671-3.671.18-1.559A16.5,16.5,0,0,0,56.295,43.47a1.988,1.988,0,0,1,1.288-.076l7.343-1.212s.373-.619.568-.581a9.159,9.159,0,0,1,12.535-.953Z",transform:"translate(-51.201 -31.287)",fill:"#ea4335"}),r.createElement("path",{id:"Trazado_6947","data-name":"Trazado 6947",d:"M238.1,84.8a16.527,16.527,0,0,0-4.985-8.037l-5.152,5.152a9.161,9.161,0,0,1,3.362,7.267V90.1a4.587,4.587,0,0,1,0,9.173h-9.173l-.915.928v5.5l.915.915h9.173A11.932,11.932,0,0,0,238.1,84.8Z",transform:"translate(-201.103 -72.617)",fill:"#4285f4"}),r.createElement("path",{id:"Trazado_6948","data-name":"Trazado 6948",d:"M12.273,142.319a11.928,11.928,0,0,0-7.2,21.384l5.319-5.319a4.586,4.586,0,1,1,6.067-6.067L21.779,147a11.9,11.9,0,0,0-9.505-4.678Z",transform:"translate(-0.415 -132.197)",fill:"#fbbc05"}))))},Mo=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("g",{"data-name":"account"},r.createElement("path",{"data-name":"Trazado 463",d:"M32.291 232.53a32.336 32.336 0 0 1-32.289-32.3V76.935a32.33 32.33 0 0 1 32.289-32.3 8.837 8.837 0 0 1 8.832 8.822 8.845 8.845 0 0 1-8.832 8.831 14.663 14.663 0 0 0-14.648 14.648v123.295a14.661 14.661 0 0 0 14.648 14.64h191.4a14.66 14.66 0 0 0 14.641-14.64V76.936a14.661 14.661 0 0 0-14.641-14.648h-54.07a8.845 8.845 0 0 1-8.832-8.831 8.762 8.762 0 0 1 2.586-6.236 8.735 8.735 0 0 1 6.246-2.586h54.07a32.345 32.345 0 0 1 32.313 32.3V200.23a32.351 32.351 0 0 1-32.312 32.3Zm140.445-33.006a3.078 3.078 0 0 1-3.082-3.07V179.02a3.08 3.08 0 0 1 3.082-3.08h47.18a3.077 3.077 0 0 1 3.07 3.08v17.434a3.075 3.075 0 0 1-3.07 3.07Zm-113.141 0a22.643 22.643 0 0 1-20.648-12.767 26.835 26.835 0 0 1 1.891-26.579l.02-.019c.094-.143.2-.285.3-.428.273-.409.559-.827.871-1.245a70.651 70.651 0 0 1 52.277-28.5 62.967 62.967 0 0 1 3.543-.095 67.043 67.043 0 0 1 15.211 1.777 71.594 71.594 0 0 1 14.734 5.219 71.248 71.248 0 0 1 26.73 22.149 27.371 27.371 0 0 1 2.672 27.53 22.363 22.363 0 0 1-20.629 12.956Zm-3.719-30.372v.01l-.047.058c-.191.256-.371.5-.531.741v.028l-.258.371a8.365 8.365 0 0 0-.715 8.261 5.526 5.526 0 0 0 5.27 3.1h76.969a6.062 6.062 0 0 0 3.156-.761 4.988 4.988 0 0 0 1.949-2.243 8.485 8.485 0 0 0 .715-4.524 9.18 9.18 0 0 0-1.7-4.468 54.088 54.088 0 0 0-42.969-22.007c-.93 0-1.75.019-2.508.066h-.012a53.055 53.055 0 0 0-39.318 21.368Zm116.859-5.01a3.08 3.08 0 0 1-3.082-3.079v-17.425a3.08 3.08 0 0 1 3.082-3.08h47.18a3.077 3.077 0 0 1 3.07 3.08v17.425a3.077 3.077 0 0 1-3.07 3.079Zm-.59-38.7a2.5 2.5 0 0 1-2.492-2.5V82.066a2.5 2.5 0 0 1 2.492-2.5h48.348a2.5 2.5 0 0 1 2.492 2.5v40.876a2.5 2.5 0 0 1-2.492 2.5ZM50.981 74.213c0-28.233 22.09-51.209 49.242-51.209s49.258 22.976 49.258 51.209a52.579 52.579 0 0 1-3.867 19.906 51.257 51.257 0 0 1-10.551 16.274 49.07 49.07 0 0 1-15.656 11 47.257 47.257 0 0 1-19.184 4.041c-27.151 0-49.241-22.976-49.241-51.22Zm17.977 0c0 18.033 14.031 32.711 31.266 32.711 17.262 0 31.3-14.678 31.3-32.711s-14.039-32.7-31.3-32.7c-17.234 0-31.265 14.668-31.265 32.701Z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 883",fill:"none",d:"M0 0h256v256H0z"}))))},Po=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",viewBox:"0 0 256 256"},e),r.createElement("g",{id:"Add_Access_Rule","data-name":"Add Access Rule",clipPath:"url(#clip-Add_Access_Rule)"},r.createElement("g",{id:"Add_Access_Rule_Icon","data-name":"Add Access Rule Icon"},r.createElement("g",{id:"Grupo_2406","data-name":"Grupo 2406",transform:"translate(18)"},r.createElement("g",{id:"Grupo_2405","data-name":"Grupo 2405"},r.createElement("path",{id:"Trazado_7142","data-name":"Trazado 7142",d:"M104.258,94.5a8.671,8.671,0,1,0,12.263,0,8.672,8.672,0,0,0-12.263,0",fill:"#4ccb92"}),r.createElement("path",{id:"Trazado_7143","data-name":"Trazado 7143",d:"M220.846,46.255a15.346,15.346,0,0,0-15.422-14.381h-.01l-2.217.017c-18.3,0-53.371-3.671-82.6-28.236A15.2,15.2,0,0,0,110.742,0a15.03,15.03,0,0,0-9.748,3.6C71.681,28.225,36.7,31.9,18.452,31.9l-2.764-.028A15.124,15.124,0,0,0,.665,46.358C-1.156,93.424-.821,159.771,23,192.41c22.161,30.467,65.486,55.314,78.912,61.614a20.721,20.721,0,0,0,17.7-.015c14.415-6.8,56.684-31.109,78.885-61.582,23.832-32.654,24.168-99,22.347-146.172m-92.069,94.893,0,25.363H118.635v12.845h10.146v11H118.635V203.2h10.148v1.651l-18.394,18.394L92,204.849l.007-63.7a38.469,38.469,0,0,1-9.2-6.8A39.158,39.158,0,0,1,116.79,68.09a38.019,38.019,0,0,1,23.45,13.338,39.022,39.022,0,0,1-11.463,59.72",fill:"#4ccb92"}))),r.createElement("rect",{id:"Rect\xe1ngulo_1019","data-name":"Rect\xe1ngulo 1019",width:"256",height:"256",fill:"none"}))))},Bo=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("g",{"data-name":"UptimeIcon"},r.createElement("path",{"data-name":"Rect\\xE1ngulo 851",fill:"none",d:"M0 0h256v256H0z"}),r.createElement("g",{"data-name":"Grupo 1558"},r.createElement("path",{"data-name":"Sustracci\\xF3n 3",d:"M220.67 154.223h-10.627c.012-.6.016-1.149.016-1.669a82.374 82.374 0 0 0-1.073-13.283h-64.771v-78.9l25.611 11.287 45.143 34.182 4.232 33.5a53.041 53.041 0 0 1 5.371 4.445 22.28 22.28 0 0 1 3.4 3.962c.938 1.48 1.252 2.729.941 3.709-.577 1.836-3.35 2.767-8.243 2.767Z",fill:"#e3e3e3"}),r.createElement("path",{"data-name":"Uni\\xF3n 9",d:"M24.003 152.341a102.96 102.96 0 0 1 24.863-67.172 104.134 104.134 0 0 1 61.651-35.019l.586-.1v22.866l-.4.084a81.178 81.178 0 0 0-64.137 79.337c0 44.762 36.557 81.18 81.492 81.18s81.492-36.418 81.492-81.18a80.636 80.636 0 0 0-18.828-51.854 81.865 81.865 0 0 0-20.838-17.8 80.846 80.846 0 0 0-26.053-10l-.408-.084V49.8l.582.089a103.267 103.267 0 0 1 34.789 11.962 104.595 104.595 0 0 1 27.953 22.727 103.042 103.042 0 0 1 25.363 67.76C232.114 209.5 185.437 256 128.062 256S24.003 209.5 24.003 152.341Zm104.625 9.91a10.07 10.07 0 0 1-1.023-.054c-4.723-.094-9.377-3.03-9.377-8.8V30.467l-10.9 10.113c-8.939 8.3-22.533-4.325-13.594-12.619l27.248-25.3a10.162 10.162 0 0 1 13.719 0l27.252 25.3c8.943 8.294-4.658 20.918-13.6 12.619L137.46 30.467v113.674h41.412a9.055 9.055 0 1 1 0 18.11Z"})))))},Fo=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 16 16"},e),r.createElement("g",null,r.createElement("path",{d:"M8,0a8,8,0,1,0,8,8A8,8,0,0,0,8,0m4.575,5.769-.005.005L7.837,11.69a.89.89,0,0,1-.635.284H7.185a.889.889,0,0,1-.628-.26h0L3.421,8.577a.889.889,0,1,1,1.2-1.31q.028.025.053.053L7.16,9.8l4.117-5.246.024-.026h0a.889.889,0,0,1,1.275,1.24"})))},Uo=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",viewBox:"0 0 256 256",fill:"currentcolor"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"clip-path"},r.createElement("rect",{id:"Rect\xe1ngulo_1031","data-name":"Rect\xe1ngulo 1031",width:"217",height:"256.004",fill:"none"})),r.createElement("clipPath",{id:"clip-Object_Preview"},r.createElement("rect",{width:"256",height:"256"}))),r.createElement("g",{id:"Object_Preview","data-name":"Object Preview",clipPath:"url(#clip-Object_Preview)"},r.createElement("g",{id:"Object_Preview_Icon","data-name":"Object Preview Icon"},r.createElement("g",{id:"Grupo_2420","data-name":"Grupo 2420",transform:"translate(20)"},r.createElement("g",{id:"Grupo_2419","data-name":"Grupo 2419"},r.createElement("path",{id:"Trazado_7171","data-name":"Trazado 7171",d:"M110.1,110.805A28.093,28.093,0,1,0,138.137,138.9,28.063,28.063,0,0,0,110.1,110.805m-.064,42.209a14.079,14.079,0,1,1,14.05-14.079,14.065,14.065,0,0,1-14.05,14.079",transform:"translate(-0.168)"}),r.createElement("path",{id:"Trazado_7172","data-name":"Trazado 7172",d:"M216.564,77.2c.166-6.9.359-13.945.413-21h-31.1A25.6,25.6,0,0,1,160.334,30.6l0-30.544q-3.775.06-7.553.148c-4.892.108-9.79.228-14.681.208C114.67.31,91.212.733,67.766.824c-2.8.016-5.619.016-8.444.016H17.216A17.241,17.241,0,0,0,0,18.08V238.769A17.238,17.238,0,0,0,17.216,256l182.163,0a17.226,17.226,0,0,0,17.2-17.235V128.815c0-17.186-.424-34.46-.013-51.618m-34.353,71.335a86.569,86.569,0,0,1-144.462,0,17.428,17.428,0,0,1,0-19.27,86.569,86.569,0,0,1,144.462,0,17.435,17.435,0,0,1,0,19.27",transform:"translate(0)"}),r.createElement("path",{id:"Trazado_7173","data-name":"Trazado 7173",d:"M203.277,0H171.758V22.411c-1.233,19.062,12.107,22.137,22.106,22.151h23.489V13.406c0-7.007-7.08-13.4-14.074-13.406",transform:"translate(-0.351)"}))),r.createElement("rect",{id:"Rect\xe1ngulo_1032","data-name":"Rect\xe1ngulo 1032",width:"256",height:"256",fill:"none"}))))},zo=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{"data-name":"Tenants Outline",clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Trazado 452",d:"M135.881 213.702a42.222 42.222 0 0 1 7.779-24.429l-29.932-38.917a76.63 76.63 0 0 1-20.656 5.106l-.867 16.144a24.837 24.837 0 0 1 7.207 17.521 24.937 24.937 0 0 1-24.893 24.918 24.94 24.94 0 0 1-24.891-24.918 24.779 24.779 0 0 1 18.055-23.967l.6-11.047A78.47 78.47 0 0 1 7.002 77.955 78 78 0 0 1 84.861-.005a78 78 0 0 1 77.863 77.96 77.537 77.537 0 0 1-1.119 13.111l28.8 4.184a31.653 31.653 0 0 1 25.73-12.966 32.13 32.13 0 0 1 32.082 32.115 32.128 32.128 0 0 1-32.082 32.108 32.267 32.267 0 0 1-31.66-27.009l-31.1-4.519a78.56 78.56 0 0 1-18.219 22.474l28.188 36.653a42.235 42.235 0 0 1 14.787-2.7 42.307 42.307 0 0 1 42.238 42.293 42.313 42.313 0 0 1-42.238 42.293 42.322 42.322 0 0 1-42.25-42.29Zm28.877-23.668-3.377 1.911-2.689 2.762a27.045 27.045 0 0 0-7.75 19 27.231 27.231 0 0 0 27.182 27.218 27.232 27.232 0 0 0 27.184-27.218 27.232 27.232 0 0 0-27.184-27.218 27 27 0 0 0-13.366 3.548Zm-100.051-.906a9.84 9.84 0 0 0 9.813 9.842 9.847 9.847 0 0 0 9.824-9.842 9.889 9.889 0 0 0-4.2-8.058l-2.445-1.711-2.979-.054a9.827 9.827 0 0 0-10.016 9.826ZM22.078 77.956a62.885 62.885 0 0 0 55.014 62.386l4.365.535 4.355-.063a62.125 62.125 0 0 0 26.91-6.511l4-1.992 3.578-2.455a63.038 63.038 0 0 0 21.867-26.212l1.793-3.993 1.268-4.381a63.234 63.234 0 0 0 2.424-17.313 62.907 62.907 0 0 0-62.793-62.883A62.9 62.9 0 0 0 22.078 77.96Zm178.871 28.831-1.549 3.061-.219 3.54c-.051 10.4 7.58 18.045 16.949 18.045a17.044 17.044 0 0 0 17.018-17.032 17.046 17.046 0 0 0-17.018-17.04 16.888 16.888 0 0 0-15.181 9.429Z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 865",fill:"none",d:"M0 0h256v256H0z"})))},Ho=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Trazado 423",d:"M34.549 188.281h186.9a6.641 6.641 0 1 1 0 13.282h-186.9a6.641 6.641 0 0 1-6.641-6.641 6.641 6.641 0 0 1 6.641-6.641Z"}),r.createElement("path",{"data-name":"Trazado 425",d:"M38.567 162.693a10.385 10.385 0 1 1-10.385 10.385 10.385 10.385 0 0 1 10.385-10.385Z"}),r.createElement("path",{"data-name":"Trazado 424",d:"M66.709 162.83a10.384 10.384 0 1 1-8.588 11.911 10.384 10.384 0 0 1 8.588-11.912Z"}),r.createElement("path",{"data-name":"Trazado 405",d:"M255.699 154.149a37.6 37.6 0 0 0-2.994-12.568l-41.95-104.219C207.537 29.62 199.33 24 191.241 24H64.759c-8.089 0-16.3 5.62-19.514 13.362L3.295 141.581a37.61 37.61 0 0 0-2.994 12.568 22.107 22.107 0 0 0-.3 3.612v51.4a22.089 22.089 0 0 0 22.065 22.064h211.87a22.09 22.09 0 0 0 22.065-22.064v-51.4a22.134 22.134 0 0 0-.302-3.612ZM65.754 46.413h124.491l36.053 89.283H30.013Zm167.833 162.4H22.412v-50.708h211.175Z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 855",fill:"none",d:"M0 0h256v256H0z"})))},Go=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"clip-path"},r.createElement("rect",{id:"Rect\xe1ngulo_1026","data-name":"Rect\xe1ngulo 1026",width:"255.576",height:"182.735",fill:"none"})),r.createElement("clipPath",{id:"clip-Create_New_Path"},r.createElement("rect",{width:"256",height:"256"}))),r.createElement("g",{id:"Create_New_Path","data-name":"Create New Path",clipPath:"url(#clip-Create_New_Path)"},r.createElement("g",{id:"Create_New_Path_Icon","data-name":"Create New Path Icon"},r.createElement("g",{id:"Grupo_2415","data-name":"Grupo 2415",transform:"translate(0.424 26.642)"},r.createElement("g",{id:"Grupo_2414","data-name":"Grupo 2414"},r.createElement("path",{id:"Trazado_7162","data-name":"Trazado 7162",d:"M21.8,141.76c-11.745,0-21.8,9.96-21.8,21.517a22.187,22.187,0,0,0,21.8,21.8c11.557,0,21.517-10.054,21.517-21.8A21.949,21.949,0,0,0,21.8,141.76",transform:"translate(0 -59.036)",fill:"#4ccb92"}),r.createElement("path",{id:"Trazado_7163","data-name":"Trazado 7163",d:"M21.8,235.632c-11.745,0-21.8,9.96-21.8,21.517a22.187,22.187,0,0,0,21.8,21.8c11.557,0,21.517-10.054,21.517-21.8A21.949,21.949,0,0,0,21.8,235.632",transform:"translate(0 -98.13)",fill:"#4ccb92"}),r.createElement("path",{id:"Trazado_7164","data-name":"Trazado 7164",d:"M200.314,0H187.871A11.54,11.54,0,0,0,177.5,6.479L99.6,166.135a11.54,11.54,0,0,0,10.371,16.6h12.443a11.54,11.54,0,0,0,10.371-6.479L210.684,16.6A11.539,11.539,0,0,0,200.314,0",transform:"translate(-40.986)",fill:"#4ccb92"}),r.createElement("path",{id:"Trazado_7165","data-name":"Trazado 7165",d:"M294.178,82.251c-1.23,0-2.445.061-3.652.149l32.106-65.8A11.539,11.539,0,0,0,312.262,0H299.819a11.539,11.539,0,0,0-10.371,6.479l-77.9,159.656a11.539,11.539,0,0,0,10.37,16.6h12.443a11.54,11.54,0,0,0,10.371-6.479l8.685-17.8a49,49,0,1,0,40.762-76.205m.292,87.721a38.717,38.717,0,1,1,38.717-38.717,38.717,38.717,0,0,1-38.717,38.717",transform:"translate(-87.607)",fill:"#4ccb92"}),r.createElement("path",{id:"Trazado_7166","data-name":"Trazado 7166",d:"M347.565,193.708H335.42v12.145H323.275V218H335.42v12.145h12.145V218h12.145V205.853H347.565Z",transform:"translate(-134.629 -80.67)",fill:"#4ccb92"}))),r.createElement("rect",{id:"Rect\xe1ngulo_1027","data-name":"Rect\xe1ngulo 1027",width:"256",height:"256",fill:"none"}))))},jo=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Uni\\xF3n 30",d:"M.002 128.002a128 128 0 0 1 128-128 128 128 0 0 1 128 128 128 128 0 0 1-128 128 127.993 127.993 0 0 1-128-128Zm25 0a103.115 103.115 0 0 0 103 103 103.116 103.116 0 0 0 103-103 103.117 103.117 0 0 0-103-103A103.116 103.116 0 0 0 25 128.002Zm75.211 58.614c0-10.971 9.48-20.238 20.342-20.238a20.541 20.541 0 0 1 20.133 20.133c0 10.966-9.377 20.447-20.133 20.447-10.864 0-20.344-9.481-20.344-20.342Zm7.457-33.227v-36.213h10.223c20.557 0 31.633-6.495 31.633-18.956 0-11.5-10.971-17.675-31.312-17.675-5.748 0-11.715.423-16.186.846l-2.023-28.008a165.912 165.912 0 0 1 21.508-1.386c37.17 0 58.684 17.147 58.684 44.094 0 24.6-16.4 40.365-46.008 45.051l-.852 12.247Z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 917",fill:"none",d:"M0 0h256v256H0z"})))},Vo=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 37.001 37"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"rep-quota-clip-path"},r.createElement("rect",{id:"Rect\xe1ngulo_959","data-name":"Rect\xe1ngulo 959",width:"37",height:"37",transform:"translate(0 0)"}))),r.createElement("g",{id:"reported-usage-icn-full",transform:"translate(-0.213 -0.213)"},r.createElement("rect",{id:"Rect\xe1ngulo_869","data-name":"Rect\xe1ngulo 869",width:"37",height:"37",transform:"translate(0.213 0.213)",fill:"none"}),r.createElement("g",{id:"Grupo_2317","data-name":"Grupo 2317",transform:"translate(0.213 0.213)"},r.createElement("g",{id:"Grupo_2316","data-name":"Grupo 2316",transform:"translate(0 0)",clipPath:"url(#rep-quota-clip-path)"},r.createElement("path",{id:"Trazado_7046","data-name":"Trazado 7046",d:"M18.5,0A18.5,18.5,0,1,0,37,18.5,18.5,18.5,0,0,0,18.5,0m0,18.5V4.756A13.757,13.757,0,0,1,32.238,18.5H18.5Z",transform:"translate(0.074 0.074)"})))))},Zo=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",viewBox:"0 0 256 256"},e),r.createElement("g",null,r.createElement("g",{transform:"translate(0 7.836)"},r.createElement("g",null,r.createElement("path",{d:"M227.22,126.576A53.114,53.114,0,1,0,155.674,55.03L109.365,8.722A29.86,29.86,0,0,0,88.94,0L29.97.032A30.021,30.021,0,0,0,0,29.99l0,59.2a29.8,29.8,0,0,0,8.7,20.186L133.237,233.909a29.806,29.806,0,0,0,21.266,8.758v0a29.813,29.813,0,0,0,21.25-8.743l58.162-58.157a30.211,30.211,0,0,0-.018-42.511ZM60.958,76.033A15.072,15.072,0,1,1,76.031,60.96,15.091,15.091,0,0,1,60.958,76.033m100.274,3.334A41.967,41.967,0,1,1,203.2,121.334a41.967,41.967,0,0,1-41.967-41.967",fill:"#4ccb92"}),r.createElement("path",{d:"M316.362,94.258H303.2v13.164H290.033v13.165H303.2v13.165h13.164V120.587h13.164V107.422H316.362Z",transform:"translate(-106.58 -34.638)",fill:"#4ccb92"})))))},Wo=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"online-registration-icn_svg__a"},r.createElement("path",{"data-name":"Rect\\xE1ngulo 1601",fill:"none",d:"M0 0h256v189.799H0z"}))),r.createElement("g",{"data-name":"Grupo 2523"},r.createElement("g",{"data-name":"Grupo 2522",transform:"translate(0 32.999)",clipPath:"url(#online-registration-icn_svg__a)"},r.createElement("path",{"data-name":"Trazado 7258",d:"M105.956 117.2a75.071 75.071 0 0 0 .763 10.469h12.926v-20.938h-12.926a75.072 75.072 0 0 0-.763 10.469"}),r.createElement("path",{"data-name":"Trazado 7259",d:"M119.607 100.222V80.94a29.091 29.091 0 0 0-11.667 19.282Z"}),r.createElement("path",{"data-name":"Trazado 7260",d:"M119.614 153.467h.008v-19.282h-11.675a29.062 29.062 0 0 0 11.667 19.282"}),r.createElement("path",{"data-name":"Trazado 7261",d:"M155.805 100.221a37.276 37.276 0 0 0-18.1-16.993 50.754 50.754 0 0 1 6.807 16.993Z"}),r.createElement("path",{"data-name":"Trazado 7262",d:"M99.417 117.2h.034a81.388 81.388 0 0 1 .679-10.469H87.323a36.628 36.628 0 0 0 0 20.938h12.773a82.781 82.781 0 0 1-.679-10.469"}),r.createElement("path",{"data-name":"Trazado 7263",d:"M108.039 83.229a37.31 37.31 0 0 0-18.099 16.992h11.293a50.754 50.754 0 0 1 6.806-16.993"}),r.createElement("path",{"data-name":"Trazado 7264",d:"M89.947 134.178a37.31 37.31 0 0 0 18.1 16.993 50.754 50.754 0 0 1-6.806-16.993Z"}),r.createElement("path",{"data-name":"Trazado 7265",d:"M145.603 106.731a80.807 80.807 0 0 1 0 20.938h12.811a36.5 36.5 0 0 0 0-20.938Z"}),r.createElement("path",{"data-name":"Trazado 7266",d:"M137.706 151.171a37.31 37.31 0 0 0 18.1-16.993h-11.294a50.754 50.754 0 0 1-6.806 16.993"}),r.createElement("path",{"data-name":"Trazado 7267",d:"m230.957 100.848-.443.221-.473.16a13.816 13.816 0 0 1-4.494.748v-.023h-.671a22.917 22.917 0 0 1-9.309-2.884 4.907 4.907 0 0 0-.671-.313q-.275.114-.549.252a18.913 18.913 0 0 1-13.636 2.472l-.992-.2-.9-.443a19.76 19.76 0 0 1-9.619-10.306 5.449 5.449 0 0 0-.305-.542 5.087 5.087 0 0 0-.488-.107 19.2 19.2 0 0 1-12.5-6.4l-.61-.687-.427-.809a20.457 20.457 0 0 1-1.908-13.735 5.126 5.126 0 0 0 .046-.969 5.773 5.773 0 0 0-.443-.526 20.249 20.249 0 0 1-6.379-12.682l-.092-.832.092-.832a20.268 20.268 0 0 1 6.394-12.682 4.831 4.831 0 0 0 .427-.549 5.1 5.1 0 0 0-.069-.961 20.376 20.376 0 0 1 .992-11.552A62.2 62.2 0 0 0 60.692 61.216c0 1.351.053 2.732.168 4.2a62.2 62.2 0 0 0 1.678 124.381h120.683a62.1 62.1 0 0 0 53.886-93.717 19.522 19.522 0 0 1-6.15 4.769m-67.064 30.957a3.466 3.466 0 0 1-.2.534 43.494 43.494 0 0 1-81.645 0 2.641 2.641 0 0 1-.2-.534 42.738 42.738 0 0 1 0-29.285 2.641 2.641 0 0 1 .2-.534 43.494 43.494 0 0 1 81.645 0 2.642 2.642 0 0 1 .2.534 42.827 42.827 0 0 1 0 29.285"}),r.createElement("path",{"data-name":"Trazado 7268",d:"M126.131 134.178v19.282a29.062 29.062 0 0 0 11.67-19.282Z"}),r.createElement("path",{"data-name":"Trazado 7269",d:"M126.131 80.94v19.282h11.67a29.091 29.091 0 0 0-11.67-19.282"}),r.createElement("path",{"data-name":"Trazado 7270",d:"M139.79 117.194Z"}),r.createElement("path",{"data-name":"Trazado 7271",d:"M139.789 117.2a75.154 75.154 0 0 0-.763-10.469H126.1v20.93h12.926a74.96 74.96 0 0 0 .763-10.461"}),r.createElement("path",{"data-name":"Trazado 7272",d:"m251.907 61.322-.023-.008a12.677 12.677 0 0 0 4.113-8.02 12.677 12.677 0 0 0-4.113-8.02 12.75 12.75 0 0 1-2.564-3.632 13.77 13.77 0 0 1 0-4.746 12.755 12.755 0 0 0-1.167-8.783 11.643 11.643 0 0 0-7.714-3.884 12.384 12.384 0 0 1-4.3-1.442 13.206 13.206 0 0 1-2.564-3.739 12.157 12.157 0 0 0-5.99-6.532 11.279 11.279 0 0 0-8.279 1.526 12.67 12.67 0 0 1-4.419 1.528 12.67 12.67 0 0 1-4.426-1.526 11.279 11.279 0 0 0-8.279-1.526 12.2 12.2 0 0 0-5.975 6.524 13.175 13.175 0 0 1-2.587 3.762 12.346 12.346 0 0 1-4.281 1.435 11.643 11.643 0 0 0-7.714 3.884 12.757 12.757 0 0 0-1.152 8.737 14.158 14.158 0 0 1 0 4.746 13.16 13.16 0 0 1-2.587 3.67 12.632 12.632 0 0 0-4.105 8.027 12.6 12.6 0 0 0 4.113 8.012 13.135 13.135 0 0 1 2.587 3.632 14.2 14.2 0 0 1 0 4.754 12.8 12.8 0 0 0 1.16 8.783 11.643 11.643 0 0 0 7.714 3.884 12.346 12.346 0 0 1 4.281 1.435 13.246 13.246 0 0 1 2.587 3.754 12.165 12.165 0 0 0 5.975 6.493 11.285 11.285 0 0 0 8.279-1.526 12.67 12.67 0 0 1 4.43-1.527 12.67 12.67 0 0 1 4.426 1.526 15.413 15.413 0 0 0 6.219 1.923 6.5 6.5 0 0 0 2.053-.336 12.155 12.155 0 0 0 5.975-6.516 13.246 13.246 0 0 1 2.587-3.754 12.346 12.346 0 0 1 4.281-1.435 11.643 11.643 0 0 0 7.714-3.884 12.717 12.717 0 0 0 1.167-8.828 14.158 14.158 0 0 1 0-4.746 12.834 12.834 0 0 1 2.587-3.624m-41.363 7.706L194.689 52.44l5.631-5.883 10.233 10.683 18.931-19.679 5.631 5.883Z"}))),r.createElement("path",{"data-name":"Rect\\xE1ngulo 1602",fill:"none",d:"M0 0h256v256H0z"}))},$o=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Uni\\xF3n 17",d:"M.449 128.494A128.188 128.188 0 0 1 128.494.45h10.6v52.857a76.1 76.1 0 0 1 46.531 25.151 75.572 75.572 0 0 1 13.854 22.845 75.251 75.251 0 0 1 5.039 27.189 76.11 76.11 0 0 1-76.023 76.022 76.1 76.1 0 0 1-76.012-76.022 75.291 75.291 0 0 1 5.037-27.189 75.678 75.678 0 0 1 13.85-22.845 76.135 76.135 0 0 1 46.555-25.151v-31.18a106.369 106.369 0 0 0-19.6 3.814 106.378 106.378 0 0 0-18.193 7.25 107.579 107.579 0 0 0-16.385 10.312A108.253 108.253 0 0 0 49.54 56.524a108.229 108.229 0 0 0-11.676 15.37 107.348 107.348 0 0 0-8.787 17.356 106.17 106.17 0 0 0-7.459 39.244 107.008 107.008 0 0 0 106.877 106.892 107.017 107.017 0 0 0 106.9-106.892 10.5 10.5 0 0 1 3.1-7.479 10.49 10.49 0 0 1 7.475-3.1 10.593 10.593 0 0 1 10.584 10.58 128.2 128.2 0 0 1-128.057 128.057A128.2 128.2 0 0 1 .449 128.494Zm99.967-47.048a55.106 55.106 0 0 0-14.062 12.016 54.643 54.643 0 0 0-9.336 16.083 54.492 54.492 0 0 0-3.379 18.95 54.464 54.464 0 0 0 4.316 21.333 54.924 54.924 0 0 0 5.068 9.317 55.648 55.648 0 0 0 6.7 8.12 55.546 55.546 0 0 0 8.125 6.7 54.955 54.955 0 0 0 9.316 5.068 54.353 54.353 0 0 0 21.328 4.316 54.917 54.917 0 0 0 54.854-54.857 54.492 54.492 0 0 0-3.379-18.95 54.614 54.614 0 0 0-9.326-16.083 55.144 55.144 0 0 0-14.049-12.016 54.571 54.571 0 0 0-17.5-6.723v30.482a25.816 25.816 0 0 1 10.824 9.254 25.366 25.366 0 0 1 4.211 14.035 25.433 25.433 0 0 1-2.014 9.982 25.524 25.524 0 0 1-5.494 8.145 25.5 25.5 0 0 1-8.145 5.493 25.518 25.518 0 0 1-9.982 2.015 25.477 25.477 0 0 1-9.973-2.015 25.621 25.621 0 0 1-8.148-5.493 25.538 25.538 0 0 1-5.488-8.145 25.522 25.522 0 0 1-2.016-9.982 25.393 25.393 0 0 1 4.207-14.035 25.82 25.82 0 0 1 10.848-9.254V74.72a54.537 54.537 0 0 0-17.508 6.73Z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 878",fill:"none",d:"M0 0h256v256H0z"})))},qo=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{"data-name":"Object Browser",clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("g",{"data-name":"Grupo 1559"},r.createElement("g",{"data-name":"Grupo 1541",transform:"translate(88.095 103.898)"},r.createElement("circle",{"data-name":"Elipse 57",cx:11.515,cy:11.515,r:11.515,transform:"rotate(-10.901 280.738 -178.561)"}),r.createElement("rect",{"data-name":"Rect\\xE1ngulo 805",width:24.592,height:20.853,rx:1.35,transform:"translate(14.546 25.545)"}),r.createElement("path",{"data-name":"Trazado 365",d:"M28.151 60.295a2.427 2.427 0 0 0-4.2 0l-9.1 15.761a2.425 2.425 0 0 0 2.1 3.64h18.2a2.43 2.43 0 0 0 2.105-3.64Z"}),r.createElement("path",{"data-name":"Trazado 366",d:"M79.273 28.199a151.334 151.334 0 0 0-.187-17.51c-.395-4.294-2.262-7.942-6.512-9.468a15.5 15.5 0 0 0-1.836-.529 38.335 38.335 0 0 0-7.332-.658c-4.289-.125-8.57.136-12.855.116-8.582-.036-17.16.116-25.746.152H6.301a6.308 6.308 0 0 0-6.3 6.3v80.617a6.307 6.307 0 0 0 6.3 6.3h66.684a6.3 6.3 0 0 0 6.3-6.3V47.054c-.004-6.273-.168-12.584-.012-18.855Zm-7.648 53.334a5.435 5.435 0 0 1-5.434 5.439h-54.2a5.442 5.442 0 0 1-5.441-5.439V12.3a5.441 5.441 0 0 1 5.441-5.442h36.367v9.3a13.809 13.809 0 0 0 13.789 13.794h9.48Zm0-57.6h-9.48a7.781 7.781 0 0 1-7.773-7.777v-9.3h11.82a5.435 5.435 0 0 1 5.434 5.442Z"})),r.createElement("path",{"data-name":"Trazado 367",d:"M101.726 42.067c6.607 0 13.691 18.858 20.771 18.858h88.056a9.46 9.46 0 0 1 9.439 9.429v4.715H40.348V51.496h-.235a9.462 9.462 0 0 1 9.439-9.429h52.174m124.392 44.5a9.812 9.812 0 0 1 9.787 9.772l-10.03 107.756a9.811 9.811 0 0 1-9.787 9.771H39.671a9.808 9.808 0 0 1-9.787-9.771L20.093 96.339a9.813 9.813 0 0 1 9.791-9.772h196.233M101.725 21.999H49.551a29.549 29.549 0 0 0-29.533 29.5 20 20 0 0 0 .235 3.081v13.513A29.9 29.9 0 0 0-.002 96.344c0 .605.031 1.208.086 1.814l9.724 107.089a29.9 29.9 0 0 0 29.862 28.691h176.417a29.9 29.9 0 0 0 29.854-28.663l9.975-107.074c.051-.617.082-1.239.082-1.857a29.87 29.87 0 0 0-15.909-26.376 29.555 29.555 0 0 0-29.537-29.106h-81.5c-.4-.532-.786-1.059-1.123-1.517-5.1-6.906-12.8-17.342-26.2-17.342Z"})),r.createElement("path",{"data-name":"Rect\\xE1ngulo 875",fill:"none",d:"M0 0h256v256H0z"})))},Yo=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 24.858 50.321"},e),r.createElement("path",{id:"minio-logo-color",d:"M50.1,20.478q-1.908-3.154-3.826-6.3c-.664-1.088-1.339-2.171-2.012-3.254l-.266-.393a4.682,4.682,0,0,0-6-1.913,4.208,4.208,0,0,0-1.936,5.674,10.029,10.029,0,0,0,1.714,2.129c1.924,2.044,3.91,4.031,5.818,6.089a6.008,6.008,0,0,1-2.092,9.664l-.128.052V22.652A31.007,31.007,0,0,0,32.4,29.6a30.255,30.255,0,0,0-7.034,13.992l6.481-3.3c2.155-1.1,4.295-2.172,6.532-3.308V55.447l2.984,3.027V35.425s.068-.032.292-.152a24.676,24.676,0,0,0,2.614-1.448,8.834,8.834,0,0,0,1.3-13.358c-2.216-2.318-4.443-4.626-6.656-6.946a1.424,1.424,0,0,1,0-2.128,1.47,1.47,0,0,1,2.138.12c.308.311,2.386,2.506,3.127,3.283q2.808,2.941,5.625,5.872a4.005,4.005,0,0,0,.311.266l.117-.069A1.864,1.864,0,0,0,50.1,20.478ZM38.375,33.551a.538.538,0,0,1-.273.364c-1.186.629-2.382,1.241-3.577,1.855C33.109,36.5,31.69,37.223,30.17,38a28.176,28.176,0,0,1,8.16-10.112l.053-.044C38.386,29.7,38.392,31.7,38.375,33.551Z",transform:"translate(-25.369 -8.153)",fill:"#c72c48"}))},Ko=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"WarpIcon",d:"M223.777 256c-4.293 0-7.777-3.137-7.777-7V7c0-3.868 3.484-7 7.777-7h24.445c4.295 0 7.777 3.132 7.777 7v242c0 3.862-3.482 7-7.777 7Zm-54 0c-4.293 0-7.777-3.137-7.777-7V60c0-3.868 3.484-7 7.777-7h24.445c4.295 0 7.777 3.132 7.777 7v189c0 3.862-3.482 7-7.777 7Zm-54 0c-4.293 0-7.777-3.137-7.777-7V111c0-3.868 3.484-7 7.777-7h24.445c4.295 0 7.777 3.132 7.777 7v138c0 3.862-3.482 7-7.777 7Zm-54 0c-4.293 0-7.777-3.137-7.777-7v-87c0-3.868 3.484-7 7.777-7h24.445c4.295 0 7.777 3.132 7.777 7v87c0 3.862-3.482 7-7.777 7Zm-54 0C3.484 256 0 252.863 0 249v-35c0-3.862 3.484-7 7.777-7h24.445c4.295 0 7.777 3.137 7.777 7v35c0 3.862-3.482 7-7.777 7Z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 922",fill:"none",d:"M0 0h256v256H0z"})))},Xo=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Trazado 6972",d:"M215.641 255.9H87.69a22.585 22.585 0 0 1-16.605-6.812 22.542 22.542 0 0 1-6.8-16.6v-162.8a21.969 21.969 0 0 1 6.807-16.058 22.654 22.654 0 0 1 16.6-6.807h127.951a21.95 21.95 0 0 1 16.059 6.807 22.014 22.014 0 0 1 6.813 16.058v162.8a22.6 22.6 0 0 1-6.812 16.613 21.94 21.94 0 0 1-16.037 6.8ZM87.69 232.486h127.951v-162.8H87.69ZM18 189V12A12 12 0 0 1 30 0h139a12 12 0 0 1 12 12 12 12 0 0 1-12 12H42v165a12 12 0 0 1-11.992 12A12 12 0 0 1 18 189Z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 918",fill:"none",d:"M0 0h256v256H0z"})))},Qo=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("g",{"data-name":"OpenListIcon"},r.createElement("path",{"data-name":"Trazado 6842",d:"M0 71.037a14.843 14.843 0 0 1 4.511-10.526 14.978 14.978 0 0 1 21.427 0l101.874 101.874 102.25-101.874a14.978 14.978 0 0 1 21.427 0 14.978 14.978 0 0 1 0 21.427L138.714 194.714a14.843 14.843 0 0 1-10.526 4.511 13.65 13.65 0 0 1-10.526-4.511L4.887 81.938A15.229 15.229 0 0 1 0 71.037Z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 896",fill:"none",d:"M0 0h256v256H0z"}))))},Jo=function(e){return r.createElement("svg",je({},e,{className:"min-icon",fill:"currentcolor",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16"}),r.createElement("g",{id:"repliaction-icn",transform:"translate(0 0)"},r.createElement("g",{id:"Grupo_1696","data-name":"Grupo 1696",transform:"translate(3.434)"},r.createElement("path",{id:"Trazado_6841","data-name":"Trazado 6841",d:"M-502.661-53.081a1.054,1.054,0,0,0-.84-.432h-10.382a1.055,1.055,0,0,0-.84.432,1.272,1.272,0,0,0-.233.983l.178,1.038h7.843a1.894,1.894,0,0,1,1.509.776,2.21,2.21,0,0,1,.342.661h1.366l-.16.932h-1.107c-.005.058-.013.117-.023.175l-.518,3.021v0h1.1l-.16.932h-1.1l-.546,3.189-.005.032-.072.422h1.06a1.124,1.124,0,0,0,1.073-.975l.52-3.036c0-.006,0-.012,0-.018l.7-4.114,0-.012.518-3.024A1.271,1.271,0,0,0-502.661-53.081Z",transform:"translate(514.975 53.513)"})),r.createElement("path",{id:"Trazado_6842","data-name":"Trazado 6842",d:"M-609.21,43.432a1.055,1.055,0,0,0-.84-.432h-10.382a1.054,1.054,0,0,0-.84.432,1.271,1.271,0,0,0-.233.983c.256,1.495.8,4.646,1.226,7.16a.035.035,0,0,0,0,.005l.521,3.04a1.124,1.124,0,0,0,1.073.975h6.886a1.124,1.124,0,0,0,1.073-.975l.52-3.036,0-.018.7-4.114s0-.008,0-.012l.518-3.024A1.271,1.271,0,0,0-609.21,43.432Zm-1.924,8.519-8.214.01-.16-.932,8.534-.01Zm.708-4.131-9.629.01-.16-.932,9.949-.01Z",transform:"translate(621.524 -39.595)"})))},ei=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"clip-path"},r.createElement("rect",{id:"Rect\xe1ngulo_1016","data-name":"Rect\xe1ngulo 1016",width:"234.495",height:"256",fill:"#4ccb92"})),r.createElement("clipPath",{id:"clip-Add_Members_to_Group"},r.createElement("rect",{width:"256",height:"256"}))),r.createElement("g",{id:"Add_Members_to_Group","data-name":"Add Members to Group",clipPath:"url(#clip-Add_Members_to_Group)"},r.createElement("g",{id:"Add_Members_to_Group_Icon","data-name":"Add Members to Group Icon"},r.createElement("g",{id:"Grupo_2404","data-name":"Grupo 2404",transform:"translate(12)"},r.createElement("g",{id:"Grupo_2403","data-name":"Grupo 2403"},r.createElement("path",{id:"Trazado_7140","data-name":"Trazado 7140",d:"M88.829,144.6h.048a66.829,66.829,0,0,0,27.035-5.707,69.009,69.009,0,0,0,22.1-15.529,72.055,72.055,0,0,0,14.891-22.977,73.863,73.863,0,0,0,5.463-28.1C158.372,32.435,127.183,0,88.831,0h0C50.5,0,19.316,32.43,19.316,72.292S50.5,144.6,88.829,144.6",transform:"translate(1.421)",fill:"#4ccb92"}),r.createElement("path",{id:"Trazado_7141","data-name":"Trazado 7141",d:"M170.085,117.467a64.39,64.39,0,0,0-57.412,35.223c-1.427-.4-2.86-.784-4.3-1.124A94.705,94.705,0,0,0,86.9,149.044v.005c-1.755,0-3.439.046-5,.135A99.747,99.747,0,0,0,8.1,189.42c-.388.519-.767,1.061-1.234,1.756l-.107.15c-.1.142-.214.3-.312.458l-.027.028a37.88,37.88,0,0,0-2.671,37.522A31.97,31.97,0,0,0,32.509,247.36H142.044a31.485,31.485,0,0,0,13.08-2.84,64.408,64.408,0,1,0,14.961-127.054m.383,115.3a50.889,50.889,0,1,1,50.888-50.888,50.888,50.888,0,0,1-50.888,50.888m-7.982-26.944V189.859H146.524V173.895h15.963V157.931H178.45v15.964h15.963v15.964H178.45v15.963Z",transform:"translate(0 8.64)",fill:"#4ccb92"}))),r.createElement("rect",{id:"Rect\xe1ngulo_1017","data-name":"Rect\xe1ngulo 1017",width:"256",height:"256",fill:"none"}))))},ti=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("path",{"data-name":"Rect\\xE1ngulo 1602",fill:"none",d:"M0 0h256v256H0z"}),r.createElement("g",{fill:"#2781b0"},r.createElement("path",{"data-name":"Trazado 7242",d:"m20.695 32.211 11.313-11.318 203.3 203.4-11.313 11.318Z"}),r.createElement("path",{"data-name":"Trazado 7243",d:"M19.371 106.631C6.694 118.186 0 133.962 0 152.26a61.725 61.725 0 0 0 20.253 46.312c12.578 11.424 29.547 17.714 47.778 17.714h114.108L55.275 89.429c-14.007 2.7-26.556 8.672-35.911 17.2Z"}),r.createElement("path",{"data-name":"Trazado 7244",d:"M238.286 203.889C249.875 194.662 256 180.961 256 164.264c0-30.939-24.23-47.692-48.894-51.341-3.258-20.595-12.03-38.216-25.568-51.249a76.817 76.817 0 0 0-53.589-21.459 73.336 73.336 0 0 0-41.553 12.506l151.47 151.492c.128-.107.285-.206.42-.313Z"})))},ni=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 23.786 22.2"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"clip-path-prom-error"},r.createElement("rect",{id:"Rect\xe1ngulo_1578","data-name":"Rect\xe1ngulo 1578",width:"23.786",height:"22.2",fill:"none"}))),r.createElement("g",{id:"Grupo_2402","data-name":"Grupo 2402",clipPath:"url(#clip-path-prom-error)"},r.createElement("path",{id:"Trazado_7049","data-name":"Trazado 7049",d:"M23.786,7.136a3.967,3.967,0,0,0-4.824-3.871A11.1,11.1,0,1,0,22.2,11.1c0-.26-.01-.518-.027-.773a3.958,3.958,0,0,0,1.613-3.192M11.1,20.776v0a2.92,2.92,0,0,1-3.158-2.6h6.317a2.922,2.922,0,0,1-3.159,2.6m5.217-3.464H5.883V15.42H16.317Zm-.038-2.865H5.913c-.035-.04-.07-.079-.1-.119a7.561,7.561,0,0,1-1.564-2.664c0-.023,1.295.266,2.22.476,0,0,.476.109,1.167.238A4.332,4.332,0,0,1,6.573,9.592c0-2.225,1.707-4.17,1.091-5.741.6.048,1.24,1.269,1.284,3.166a6.8,6.8,0,0,0,.9-3.474c0-1.02.672-2.207,1.348-2.247-.6.988.159,1.835.826,3.937.251.793.22,2.118.414,2.961.064-1.75.366-4.3,1.476-5.185a3.83,3.83,0,0,0,.457,3.167,6,6,0,0,1,1,3.437,4.294,4.294,0,0,1-1.031,2.775c.733-.137,1.239-.262,1.239-.262l2.379-.465a6.749,6.749,0,0,1-1.676,2.785M19.822,10.7A3.568,3.568,0,1,1,23.39,7.136,3.568,3.568,0,0,1,19.822,10.7",transform:"translate(0 -0.001)",fill:"#c83b51"}),r.createElement("path",{id:"Trazado_7050","data-name":"Trazado 7050",d:"M491.022,131.222l.121-2.851h-1.17l.121,2.851Z",transform:"translate(-470.607 -123.297)",fill:"#c83b51"}),r.createElement("path",{id:"Trazado_7051","data-name":"Trazado 7051",d:"M488.865,209.66a.655.655,0,1,0,.65.65.667.667,0,0,0-.65-.65",transform:"translate(-468.913 -201.374)",fill:"#c83b51"})))},ri=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",viewBox:"0 0 256 256",fill:"currentcolor"},e),r.createElement("g",{transform:"translate(23.344 0.006)"},r.createElement("g",null,r.createElement("g",null,r.createElement("g",null,r.createElement("path",{d:"M76.7,73.6c4.6,4.6,11.9,4.6,16.5,0l0,0l25-25c4.6-4.6,4.6-11.9,0-16.5l0,0l-25-25\n\t\t\t\t\t\t\t\tc-4.6-4.6-11.9-4.6-16.5,0s-4.6,11.9,0,16.5l7.2,7.2c-47,9.9-80.8,51.3-80.8,99.4c0,6.4,5.2,11.7,11.7,11.7\n\t\t\t\t\t\t\t\ts11.7-5.2,11.7-11.7c0-32.4,20-61.4,50.2-73C72.2,61.8,72.2,69.1,76.7,73.6"}),r.createElement("path",{d:"M208.8,126.8c0-6.4-5.2-11.7-11.7-11.7c-6.4,0-11.7,5.2-11.7,11.7c0,32.4-20,61.4-50.2,73\n\t\t\t\t\t\t\t\tc4.5-4.6,4.4-12-0.2-16.5c-4.6-4.5-11.9-4.4-16.4,0.1l-25,25c-1.4,1.4-2.4,3.1-2.9,4.9c-0.5,1.8-0.6,3.7-0.3,5.5\n\t\t\t\t\t\t\t\tc0.4,2.3,1.6,4.4,3.2,6l0,0l25,25c4.6,4.6,11.9,4.6,16.5,0s4.6-11.9,0-16.5l-7.2-7.2C175,216.3,208.7,174.9,208.8,126.8"}),r.createElement("path",{d:"M92.8,157.8l6-4.5c0.9,0.4,1.8,0.8,2.8,1.2l1.1,7.5c0.2,1.4,1.4,2.4,2.8,2.4h10.6\n\t\t\t\t\t\t\t\tc1.4,0,2.6-1,2.8-2.4l1.1-7.5c0.9-0.3,1.9-0.7,2.8-1.2l6,4.5c1.1,0.8,2.6,0.7,3.6-0.2l7.5-7.5c1-1,1.1-2.5,0.2-3.6l-4.5-6\n\t\t\t\t\t\t\t\tc0.4-0.9,0.8-1.8,1.2-2.8l7.5-1.1c1.4-0.2,2.4-1.4,2.4-2.8v-10.7c0-1.4-1-2.5-2.3-2.7l-7.5-1.1c-0.3-0.9-0.7-1.9-1.2-2.8\n\t\t\t\t\t\t\t\tl4.5-6c0.8-1.1,0.7-2.6-0.3-3.6l-7.5-7.6c-1-1-2.5-1.1-3.6-0.2l-6,4.5c-0.9-0.4-1.8-0.8-2.8-1.2l-1.1-7.5\n\t\t\t\t\t\t\t\tc-0.2-1.4-1.4-2.4-2.8-2.4h-10.7c-1.4,0-2.6,1-2.7,2.4l-1.1,7.5c-0.9,0.3-1.9,0.7-2.8,1.2l-6-4.5c-1.1-0.8-2.6-0.7-3.6,0.2\n\t\t\t\t\t\t\t\tl-7.5,7.5c-1,1-1.1,2.5-0.3,3.6l4.5,6c-0.4,0.9-0.8,1.8-1.2,2.8l-7.5,1.1c-1.4,0.2-2.4,1.4-2.4,2.8v10.6c0,1.4,1,2.6,2.4,2.8\n\t\t\t\t\t\t\t\tl7.5,1.1c0.3,0.9,0.7,1.9,1.2,2.8l-4.5,6.1c-0.8,1.1-0.7,2.6,0.3,3.6l7.5,7.5C90.2,158.6,91.7,158.7,92.8,157.8 M102.5,128.5\n\t\t\t\t\t\t\t\tc-0.1-4.6,3.6-8.3,8.2-8.3c4.6-0.1,8.3,3.6,8.3,8.2c0,0.1,0,0.1,0,0.2l0,0c0,4.6-3.7,8.3-8.2,8.3l0,0\n\t\t\t\t\t\t\t\tC106.2,136.8,102.5,133.1,102.5,128.5L102.5,128.5L102.5,128.5z"}))))))},ai=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"clip-path"},r.createElement("rect",{id:"Rect\xe1ngulo_1025","data-name":"Rect\xe1ngulo 1025",width:"256",height:"236.235",fill:"none"})),r.createElement("clipPath",{id:"clip-Drive_Format_Errors"},r.createElement("rect",{width:"256",height:"256"}))),r.createElement("g",{id:"Drive_Format_Errors","data-name":"Drive Format Errors",clipPath:"url(#clip-Drive_Format_Errors)"},r.createElement("g",{id:"Drive_Format_Errors-Icon","data-name":"Drive Format Errors-Icon"},r.createElement("rect",{id:"Rect\xe1ngulo_1004","data-name":"Rect\xe1ngulo 1004",width:"256",height:"256",fill:"none"}),r.createElement("g",{id:"Grupo_2413","data-name":"Grupo 2413",transform:"translate(0.637 9.778)"},r.createElement("g",{id:"Grupo_2412","data-name":"Grupo 2412",transform:"translate(0 0.001)"},r.createElement("path",{id:"Trazado_7156","data-name":"Trazado 7156",d:"M97.03,336.139a9.708,9.708,0,1,1,.007,0",transform:"translate(-47.133 -168.561)",fill:"#c83b51"}),r.createElement("path",{id:"Trazado_7157","data-name":"Trazado 7157",d:"M139.7,336.054a6.907,6.907,0,1,0-7.923-5.713,6.907,6.907,0,0,0,7.923,5.713",transform:"translate(-68.864 -168.564)",fill:"#c83b51"}),r.createElement("path",{id:"Trazado_7158","data-name":"Trazado 7158",d:"M256.009,77.663A47.444,47.444,0,0,0,198.24,31.346a118.111,118.111,0,1,0,38,86.785c0-.642-.014-1.281-.024-1.921a47.383,47.383,0,0,0,19.793-38.546M43.519,118.312,67.309,58.88A5.7,5.7,0,0,1,72.6,55.3h91.06a5.686,5.686,0,0,1,2.687.677,47.446,47.446,0,0,0,26.623,66.516,5.7,5.7,0,0,1-5.312,3.641H48.809a5.7,5.7,0,0,1-5.29-7.818M201.9,175.033a5.937,5.937,0,0,1-5.936,5.936H40.294a5.936,5.936,0,0,1-5.936-5.936V146.671a5.936,5.936,0,0,1,5.936-5.936H195.96a5.937,5.937,0,0,1,5.936,5.936Zm6.94-59.871A37.494,37.494,0,1,1,246.33,77.668a37.494,37.494,0,0,1-37.494,37.494",transform:"translate(-0.009 -0.013)",fill:"#c83b51"}),r.createElement("path",{id:"Trazado_7159","data-name":"Trazado 7159",d:"M282.274,335.577h-80.98a4.182,4.182,0,0,1-4.169-4.169v-5.956a4.182,4.182,0,0,1,4.169-4.169h80.98a4.182,4.182,0,0,1,4.169,4.169v5.956a4.182,4.182,0,0,1-4.169,4.169",transform:"translate(-103.088 -168.017)",fill:"#c83b51"}),r.createElement("path",{id:"Trazado_7160","data-name":"Trazado 7160",d:"M435.958,142.765l1.282-30.209h-12.4l1.282,30.209Z",transform:"translate(-222.172 -58.862)",fill:"#c83b51"}),r.createElement("path",{id:"Trazado_7161","data-name":"Trazado 7161",d:"M430.2,183.9a6.94,6.94,0,1,0,6.887,6.993v-.106A7.067,7.067,0,0,0,430.2,183.9",transform:"translate(-221.316 -96.17)",fill:"#c83b51"}))))))},oi=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",width:20,height:20,className:"min-icon",fill:"currentcolor"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"registration-icon_svg__a"},r.createElement("path",{"data-name":"Rect\\xE1ngulo 1593",fill:"#4ccb92",d:"M0 0h20v20H0z"}))),r.createElement("g",{"data-name":"Grupo 2469",clipPath:"url(#registration-icon_svg__a)"},r.createElement("path",{"data-name":"Trazado 7117",d:"M19.075 11.962a3.1 3.1 0 0 0 1.008-1.965 3.1 3.1 0 0 0-1.008-1.963 3.134 3.134 0 0 1-.633-.894 3.4 3.4 0 0 1 0-1.164 3.121 3.121 0 0 0-.286-2.154 2.856 2.856 0 0 0-1.892-.952 3.024 3.024 0 0 1-1.053-.353 3.232 3.232 0 0 1-.628-.917A2.982 2.982 0 0 0 13.118 0a2.77 2.77 0 0 0-2.029.383 3.079 3.079 0 0 1-1.085.368 3.079 3.079 0 0 1-1.085-.37A2.77 2.77 0 0 0 6.89-.002a2.99 2.99 0 0 0-1.465 1.599 3.236 3.236 0 0 1-.633.922 3.033 3.033 0 0 1-1.05.351 2.856 2.856 0 0 0-1.892.953 3.133 3.133 0 0 0-.284 2.142 3.448 3.448 0 0 1 0 1.164 3.216 3.216 0 0 1-.633.9A3.1 3.1 0 0 0-.075 9.996a3.1 3.1 0 0 0 1.008 1.965 3.246 3.246 0 0 1 .633.89 3.462 3.462 0 0 1 0 1.166 3.133 3.133 0 0 0 .284 2.154 2.856 2.856 0 0 0 1.892.952 3.033 3.033 0 0 1 1.05.351 3.234 3.234 0 0 1 .633.921 2.982 2.982 0 0 0 1.465 1.592 2.77 2.77 0 0 0 2.029-.383 3.076 3.076 0 0 1 1.085-.37 3.077 3.077 0 0 1 1.085.368 3.769 3.769 0 0 0 1.525.472 1.561 1.561 0 0 0 .5-.082 2.978 2.978 0 0 0 1.465-1.6 3.249 3.249 0 0 1 .633-.921 3.032 3.032 0 0 1 1.05-.351 2.856 2.856 0 0 0 1.892-.952 3.113 3.113 0 0 0 .284-2.157 3.445 3.445 0 0 1 0-1.164 3.16 3.16 0 0 1 .633-.889m-10.13 1.894-3.89-4.066 1.38-1.437 2.51 2.618 4.638-4.833 1.38 1.442Z",fill:"currentcolor"})))},ii=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 26 25"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"clip-path-call-home-feature"},r.createElement("rect",{id:"Rect\xe1ngulo_1614","data-name":"Rect\xe1ngulo 1614",width:"6.172",height:"6.309",stroke:"rgba(0,0,0,0)",strokeWidth:"1"}))),r.createElement("g",{id:"Grupo_2540","data-name":"Grupo 2540",transform:"translate(0.531 0.596)"},r.createElement("path",{id:"call-home-icon",d:"M16.865,8.241a1.7,1.7,0,0,1-1.6,1.092h-.633v5.3a1.694,1.694,0,0,1-1.694,1.694h-8.9a1.7,1.7,0,0,1-1.694-1.694v-5.3H1.71A1.694,1.694,0,0,1,.58,6.362L7.358.432a1.694,1.694,0,0,1,2.259,0L16.4,6.362h0a1.694,1.694,0,0,1,.47,1.879",transform:"translate(0 0)",fill:"#07193e",stroke:"rgba(0,0,0,0)",strokeWidth:"1"}),r.createElement("g",{id:"Grupo_2539","data-name":"Grupo 2539",transform:"translate(5.441 6.68)"},r.createElement("g",{id:"Grupo_2539-2","data-name":"Grupo 2539",clipPath:"url(#clip-path-call-home-feature)"},r.createElement("path",{id:"Trazado_7262","data-name":"Trazado 7262",d:"M4.6,38.068a.164.164,0,0,0-.231,0l-.377.377a.149.149,0,0,1-.21,0L2.254,36.918a.149.149,0,0,1,0-.21l.377-.377a.164.164,0,0,0,0-.231L1.4,34.871a.164.164,0,0,0-.231,0l-.763.763a1.4,1.4,0,0,0,0,1.982l2.669,2.672a1.4,1.4,0,0,0,1.982,0l.763-.763a.164.164,0,0,0,0-.231Z",transform:"translate(0 -34.389)",stroke:"rgba(0,0,0,0)",strokeWidth:"1"}))),r.createElement("g",{id:"Grupo_2537","data-name":"Grupo 2537",transform:"translate(12.323 0)"},r.createElement("g",{id:"Elipse_623","data-name":"Elipse 623",transform:"translate(-0.323 -0.249)",fill:"#4ccb92",stroke:"#fff",strokeWidth:"1"},r.createElement("circle",{cx:"7",cy:"7",r:"7",stroke:"none"}),r.createElement("circle",{cx:"7",cy:"7",r:"6.5",fill:"none"})),r.createElement("g",{id:"check",transform:"translate(2.934 4.069)"},r.createElement("path",{id:"Trazado_7261","data-name":"Trazado 7261",d:"M14.9,10.862a.622.622,0,1,1,.889.871l-3.311,4.139a.622.622,0,0,1-.9.017L9.384,13.694a.622.622,0,1,1,.879-.879L12,14.551l2.881-3.67.017-.018Z",transform:"translate(-9.182 -10.676)"})))))},si=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"trace-icn",d:"m28.428 74.404 56.9 62.738v110.977A8.062 8.062 0 0 1 77.154 256H65.065a8.082 8.082 0 0 1-8.189-7.881v-98.742L.003 82.287V7.879A8.036 8.036 0 0 1 8.16 0h12.105a8.043 8.043 0 0 1 8.166 7.879Zm56.9-66.525A8.061 8.061 0 0 0 77.154 0H65.065a8.081 8.081 0 0 0-8.189 7.879v71.315l56.921 67.091v101.834a8.045 8.045 0 0 0 8.166 7.881h12.1a8.058 8.058 0 0 0 8.157-7.881V134.051L85.331 71.322ZM134.059 0h-12.1a8.044 8.044 0 0 0-8.166 7.879v39.1a8.044 8.044 0 0 0 8.166 7.88h12.1a8.058 8.058 0 0 0 8.157-7.88v-39.1a8.057 8.057 0 0 0-8.16-7.88Zm44.783 118.856h12.105a8.05 8.05 0 0 0 8.166-7.88V7.876a8.049 8.049 0 0 0-8.166-7.879h-12.105a8.056 8.056 0 0 0-8.174 7.879v103.1a8.058 8.058 0 0 0 8.172 7.88ZM247.818-.001h-12.1a8.043 8.043 0 0 0-8.165 7.879v39.1a8.044 8.044 0 0 0 8.165 7.88h12.1a8.059 8.059 0 0 0 8.182-7.88v-39.1a8.058 8.058 0 0 0-8.182-7.879Zm0 173.715h-12.1a8.044 8.044 0 0 0-8.165 7.881v66.523a8.044 8.044 0 0 0 8.165 7.881h12.1a8.059 8.059 0 0 0 8.182-7.881v-66.519a8.058 8.058 0 0 0-8.182-7.884Zm0-82.286h-12.1a8.044 8.044 0 0 0-8.165 7.881v17.727l-56.889 56.678v74.4a8.057 8.057 0 0 0 8.174 7.881h12.105a8.05 8.05 0 0 0 8.166-7.881v-56.115l56.889-67.09v-25.6a8.059 8.059 0 0 0-8.18-7.881ZM20.262 137.142H8.157A8.038 8.038 0 0 0 0 145.022v103.1a8.037 8.037 0 0 0 8.157 7.881h12.105a8.044 8.044 0 0 0 8.166-7.881v-103.1a8.045 8.045 0 0 0-8.166-7.88Z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 880",fill:"none",d:"M0 0h256v256H0z"})))},li=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 858",fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Uni\\xF3n 20",d:"M102.405 230.399v-76.79h-76.8a25.607 25.607 0 0 1 0-51.214h76.8V25.601a25.6 25.6 0 1 1 51.2 0v76.792h76.8a25.607 25.607 0 0 1 0 51.214h-76.8v76.792a25.6 25.6 0 1 1-51.2 0Z"})))},ci=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 21.883 17.614"},e),r.createElement("g",{id:"Grupo_2504","data-name":"Grupo 2504",transform:"translate(-492.881 -516.58)"},r.createElement("g",{id:"google-cloud-logo-color",transform:"translate(492.881 516.58)"},r.createElement("g",{id:"Grupo_1820","data-name":"Grupo 1820"},r.createElement("path",{id:"Trazado_6946","data-name":"Trazado 6946",d:"M67.542,36.137h.667l1.9-1.9.093-.808A8.55,8.55,0,0,0,56.3,37.6a1.03,1.03,0,0,1,.667-.039l3.8-.628s.193-.321.294-.3a4.745,4.745,0,0,1,6.494-.494Z",transform:"translate(-53.656 -31.287)"}),r.createElement("path",{id:"Trazado_6947","data-name":"Trazado 6947",d:"M229.968,80.926a8.562,8.562,0,0,0-2.582-4.164l-2.669,2.669a4.746,4.746,0,0,1,1.742,3.765v.474a2.376,2.376,0,0,1,0,4.752h-4.752l-.474.481v2.85l.474.474h4.752a6.182,6.182,0,0,0,3.51-11.3Z",transform:"translate(-210.804 -74.614)",fill:"#6b8295"}),r.createElement("path",{id:"Trazado_6948","data-name":"Trazado 6948",d:"M6.558,142.319A6.18,6.18,0,0,0,2.828,153.4l2.756-2.756A2.376,2.376,0,1,1,8.727,147.5l2.756-2.756a6.166,6.166,0,0,0-4.924-2.423Z",transform:"translate(-0.415 -137.075)",fill:"#9aafbf"})))))},ui=function(e){return r.createElement("svg",je({},e,{className:"min-icon",fill:"currentcolor",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 10 10"}),r.createElement("path",{d:"M0,0v10l2.8-2.2H10V0H0z M6.6,6L5.6,6.4l-0.8-2l-1.5,2L2.5,5.9l1.9-2.6L4.1,2.4H3.2v-1h1.5l1.4,3.7l0.9-0.4\n\tl0.4,0.9L6.6,6z"}))},di=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{"data-name":"Back Settings",clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"arrow-icn",d:"M236.198 108.063c26.394 0 26.394 40.032 0 40.032H68.514l22.739 22.668c18.656 18.623-9.726 46.923-28.382 28.318L5.998 142.348a19.991 19.991 0 0 1 0-28.548l56.877-56.716c18.656-18.6 47.038 9.684 28.382 28.3l-22.743 22.679h167.684Z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 863",fill:"none",d:"M0 0h256v256H0z"})))},pi=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Uni\\xF3n 16",d:"M15.084 248.677c-8.375 0-15.186-7.333-15.186-16.344V70.89c0-9.016 6.811-16.354 15.186-16.354l118.74-1.037a62.9 62.9 0 0 1 4.355-11.793 62.879 62.879 0 0 1 6.645-10.7 61.818 61.818 0 0 1 8.719-9.186 61.885 61.885 0 0 1 10.6-7.323 62.176 62.176 0 0 1 29.791-7.6 62.232 62.232 0 0 1 62.164 62.164 61.645 61.645 0 0 1-3.574 20.762 61.809 61.809 0 0 1-9.9 17.787 62.654 62.654 0 0 1-14.977 13.581 61.989 61.989 0 0 1-18.74 8.129v103.014c0 9.011-6.8 16.344-15.17 16.344Zm4.492-172.963a14.386 14.386 0 0 0-3.795 9.851V217.65c0 7.682 5.8 13.93 12.939 13.93h151.4c7.121 0 12.916-6.248 12.916-13.93v-86.472a61.49 61.49 0 0 1-23.232-4.875 61.964 61.964 0 0 1-19.193-12.784 62.138 62.138 0 0 1-13.236-18.857 61.664 61.664 0 0 1-5.465-23.021H28.723a12.414 12.414 0 0 0-9.147 4.072Zm152.111-47.433a46.458 46.458 0 0 0-24.189 40.779 46.493 46.493 0 0 0 46.438 46.442 46.4 46.4 0 0 0 14.4-2.311 5.7 5.7 0 0 0 .391-.509l.184-.269v.566a46.525 46.525 0 0 0 12.549-6.574 46.832 46.832 0 0 0 10-10.039 46.2 46.2 0 0 0 6.57-12.7 46.119 46.119 0 0 0 2.357-14.6 46.5 46.5 0 0 0-46.453-46.447 46.451 46.451 0 0 0-22.247 5.662ZM45.818 209.303a1.006 1.006 0 0 1-1-1.009v-20.649a1.006 1.006 0 0 1 1-1.009h110.521a1.011 1.011 0 0 1 1.01 1.009v20.649a1.011 1.011 0 0 1-1.01 1.009Zm0-44.934a1.006 1.006 0 0 1-1-1.009v-20.649a1.006 1.006 0 0 1 1-1.009h110.521a1.011 1.011 0 0 1 1.01 1.009v20.649a1.011 1.011 0 0 1-1.01 1.009Zm0-44.934a1.006 1.006 0 0 1-1-1.009V97.777a1.006 1.006 0 0 1 1-1.009h88.053a1.009 1.009 0 0 1 1.008 1.009v20.649a1.009 1.009 0 0 1-1.008 1.009Zm144.836-27.656h-.023a6.229 6.229 0 0 1-4.484-1.886L172.17 75.921a6.4 6.4 0 0 1 .316-9.04 6.387 6.387 0 0 1 4.361-1.716 6.392 6.392 0 0 1 4.357 1.716l9.449 9.459 23.482-23.436a6.3 6.3 0 0 1 4.518-1.881 6.312 6.312 0 0 1 4.461 1.825l.053.057a6.323 6.323 0 0 1 1.895 4.484 6.3 6.3 0 0 1-1.838 4.5l-.057.057-27.982 27.951a6.211 6.211 0 0 1-4.48 1.886Z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 877",fill:"none",d:"M0 0h256v256H0z"})))},mi=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Trazado 6970",d:"M27 101h202a27 27 0 0 1 0 54H27a27 27 0 0 1 0-54Z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 916",fill:"none",d:"M0 0h256v256H0z"})))},fi=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 28 28"},e),r.createElement("g",{id:"Tiers-NotAvailable-icon",transform:"translate(-340 -149)"},r.createElement("circle",{id:"Elipse_594","data-name":"Elipse 594",cx:"14",cy:"14",r:"14",transform:"translate(340 149)",fill:"#c83b51"}),r.createElement("g",{id:"Grupo_2399","data-name":"Grupo 2399"},r.createElement("g",{id:"TiersIcon",transform:"translate(345 154)"},r.createElement("rect",{id:"Rect\xe1ngulo_848","data-name":"Rect\xe1ngulo 848",width:"17.95",height:"17.95",transform:"translate(0 0.021)",fill:"none"}),r.createElement("g",{id:"tiers-icn",transform:"translate(-0.001 0)"},r.createElement("g",{id:"tiers"},r.createElement("path",{id:"Trazado_441","data-name":"Trazado 441",d:"M13,3a.8.8,0,0,0-.392.092L4.374,7.482a.666.666,0,0,0,0,1.2l2.54,1.354-2.54,1.354a.666.666,0,0,0,0,1.2l2.54,1.353-2.54,1.354a.666.666,0,0,0,0,1.2l8.236,4.39a.8.8,0,0,0,.749,0l8.236-4.39a.666.666,0,0,0,0-1.2l-2.54-1.354,2.54-1.353a.666.666,0,0,0,0-1.2l-2.54-1.354L21.6,8.678a.666.666,0,0,0,0-1.2L13.36,3.092A.8.8,0,0,0,13,3ZM8.414,10.832l4.2,2.237a.8.8,0,0,0,.749,0l4.2-2.237,2.167,1.154-6.739,3.591L6.246,11.986Zm0,3.9,4.2,2.237a.8.8,0,0,0,.749,0l4.2-2.237,2.166,1.154-6.739,3.591L6.246,15.89Z",transform:"translate(-4 -3)"})))),r.createElement("g",{id:"Grupo_2398","data-name":"Grupo 2398",transform:"translate(-3 5)"},r.createElement("circle",{id:"Elipse_593","data-name":"Elipse 593",cx:"5",cy:"5",r:"5",transform:"translate(358 156)"}),r.createElement("path",{id:"Elipse_593_-_Contorno","data-name":"Elipse 593 - Contorno",d:"M5,1A4,4,0,1,0,9,5,4,4,0,0,0,5,1M5,0A5,5,0,1,1,0,5,5,5,0,0,1,5,0Z",transform:"translate(358 156)",fill:"#c83b51"}),r.createElement("g",{id:"Page-1",transform:"translate(361.707 159.513)"},r.createElement("g",{id:"Fill-2",transform:"translate(0 0)"},r.createElement("path",{id:"Trazado_6970","data-name":"Trazado 6970",d:"M2.978.3l-.3-.3L1.489,1.189.3,0,0,.3,1.189,1.489,0,2.678l.3.3L1.489,1.789,2.678,2.978l.3-.3L1.789,1.489Z",transform:"translate(0 0)",fill:"#c83b51"}),r.createElement("path",{id:"Trazado_6970_-_Contorno","data-name":"Trazado 6970 - Contorno",d:"M.3-.354,1.489.835,2.678-.354,3.331.3,2.142,1.489,3.331,2.678l-.653.653L1.489,2.142.3,3.331l-.653-.653L.835,1.489-.354.3Z",transform:"translate(0 0)",fill:"#c83b51"})))))))},hi=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 25 23"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"clip-path-perf-feat-icon"},r.createElement("rect",{id:"Rect\xe1ngulo_985","data-name":"Rect\xe1ngulo 985",width:"17",height:"17",transform:"translate(-0.12 0.298)",fill:"#07193e"}))),r.createElement("g",{id:"Grupo_2543","data-name":"Grupo 2543",transform:"translate(0.12 0.101)"},r.createElement("g",{id:"speedtest-icon-full",transform:"translate(0 5.601)"},r.createElement("g",{id:"Grupo_2352","data-name":"Grupo 2352",transform:"translate(0 0)",clipPath:"url(#clip-path-perf-feat-icon)"},r.createElement("path",{id:"Trazado_7077","data-name":"Trazado 7077",d:"M120.559,129.741a.529.529,0,1,0,.529.529h0a.529.529,0,0,0-.529-.529",transform:"translate(-112.345 -121.572)",fill:"#07193e"}),r.createElement("path",{id:"Trazado_7078","data-name":"Trazado 7078",d:"M8.2,0a8.2,8.2,0,1,0,8.2,8.2A8.2,8.2,0,0,0,8.2,0M8.16,2.27h.027a.5.5,0,1,1-.008,1H8.16a.5.5,0,0,1,0-1m-5.6,5.5v0a.19.19,0,0,1-.189.164H2.345a.19.19,0,0,1-.164-.214V7.717h0a.189.189,0,0,1,.213-.163h0a.19.19,0,0,1,.162.214M3,6.075H3a.278.278,0,0,1-.244-.406V5.662h0A.278.278,0,1,1,3,6.075M4.54,4.423l-.021.018-.006.005a.34.34,0,0,1-.225.088v0a.341.341,0,0,1-.224-.6l.006-.005h0l0,0a.342.342,0,1,1,.466.5m1.683-.868-.006,0-.011,0a.449.449,0,0,1-.162.034v0a.453.453,0,0,1-.16-.876l.013,0h0a.453.453,0,1,1,.325.845M9.1,12.6h0a.241.241,0,0,1-.241.241h-1.3a.241.241,0,1,1,0-.482h1.3A.241.241,0,0,1,9.1,12.6Zm1.067-4.771-.89.76a.021.021,0,0,0,0,.02,1.1,1.1,0,1,1-.668-.779.021.021,0,0,0,.021,0l.886-.76h0a.5.5,0,0,1,.651.759M10.1,3.7v0a.552.552,0,0,1-.2-.036L9.885,3.65a.554.554,0,0,1,.387-1.039l.019.007A.557.557,0,0,1,10.1,3.7m1.765,1.13a.628.628,0,0,1-.413-.155l-.016-.014a.629.629,0,0,1,.825-.948l.017.015a.628.628,0,0,1-.413,1.1M12.5,6.142l-.012-.022A.722.722,0,0,1,13.743,5.4l.017.032.013.023h0a.722.722,0,0,1-.291.979h0a.722.722,0,0,1-.979-.291m1.385,2.42a.817.817,0,0,1-.921-.7V7.835a.817.817,0,0,1,.809-.927.819.819,0,0,1,.807.7l0,.032a.817.817,0,0,1-.7.918",transform:"translate(0 -0.138)",fill:"#07193e"}))),r.createElement("g",{id:"Grupo_2538","data-name":"Grupo 2538",transform:"translate(11.203 0)"},r.createElement("g",{id:"Elipse_623","data-name":"Elipse 623",transform:"translate(-0.324 -0.101)",fill:"#4ccb92",stroke:"#fff",strokeWidth:"1"},r.createElement("circle",{cx:"7",cy:"7",r:"7",stroke:"none"}),r.createElement("circle",{cx:"7",cy:"7",r:"6.5",fill:"none"})),r.createElement("g",{id:"check",transform:"translate(2.797 4.098)"},r.createElement("path",{id:"Trazado_7261","data-name":"Trazado 7261",d:"M14.938,10.864a.627.627,0,1,1,.895.877L12.5,15.91a.627.627,0,0,1-.9.017l-2.21-2.211a.627.627,0,1,1,.886-.886l1.75,1.748,2.9-3.7.017-.018Z",transform:"translate(-9.182 -10.676)"})))))},gi=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{"data-name":"Add Folder",clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("g",{"data-name":"add folder-icn"},r.createElement("path",{"data-name":"Uni\\xF3n 11",d:"M39.666 233.405A29.865 29.865 0 0 1 9.8 204.786L.074 97.965A20.666 20.666 0 0 1 0 96.155a29.835 29.835 0 0 1 20.248-28.183V54.5a20.051 20.051 0 0 1-.236-3.083A29.515 29.515 0 0 1 49.549 22h52.166c13.4 0 21.111 10.416 26.211 17.3.338.458.727.981 1.119 1.513h81.508a29.514 29.514 0 0 1 29.531 29.034A29.779 29.779 0 0 1 256 96.155c0 .619-.031 1.234-.092 1.853l-9.963 106.8a29.87 29.87 0 0 1-29.865 28.593ZM20.092 96.155l9.787 107.485a9.8 9.8 0 0 0 9.787 9.749H216.08a9.8 9.8 0 0 0 9.8-9.749l10.03-107.485a9.809 9.809 0 0 0-9.8-9.753H29.879a9.8 9.8 0 0 0-9.787 9.753Zm20.015-44.734h.227v23.514H219.99v-4.7a9.449 9.449 0 0 0-9.437-9.4H122.5c-7.082 0-14.17-18.814-20.783-18.814H49.549a9.449 9.449 0 0 0-9.442 9.4Zm80.588 128.7v-23.339H97.264a7.783 7.783 0 1 1 0-15.565H120.7v-23.335a7.809 7.809 0 0 1 15.617 0v23.335h23.432a7.783 7.783 0 1 1 0 15.565h-23.436v23.335a7.809 7.809 0 0 1-15.617 0Z",stroke:"rgba(0,0,0,0)",strokeMiterlimit:10})),r.createElement("path",{"data-name":"Rect\\xE1ngulo 873",fill:"none",d:"M0 0h256v256H0z"})))},Ei=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 18.201 22"},e),r.createElement("path",{id:"Trazado_6934","data-name":"Trazado 6934",d:"M1.477,53.686,0,54.417V67.239l1.477.726.009-.011V53.7l-.009-.01",transform:"translate(0 -49.842)",fill:"#6b8295"}),r.createElement("path",{id:"Trazado_6935","data-name":"Trazado 6935",d:"M28.526,66.1l-7.9,1.861V53.686l7.9,1.821V66.1",transform:"translate(-19.147 -49.842)"}),r.createElement("path",{id:"Trazado_6936","data-name":"Trazado 6936",d:"M81.178,120.939l3.352.427.021-.049.019-5.5-.04-.043-3.352.421v4.74",transform:"translate(-75.415 -107.566)",fill:"#6b8295"}),r.createElement("path",{id:"Trazado_6937","data-name":"Trazado 6937",d:"M128,66.125l7.687,1.844.012-.019V53.7l-.012-.013L128,55.527v10.6",transform:"translate(-118.959 -49.842)",fill:"#6b8295"}),r.createElement("path",{id:"Trazado_6938","data-name":"Trazado 6938",d:"M131.349,120.939l-3.353.427v-5.588l3.353.421v4.74",transform:"translate(-118.91 -107.566)"}),r.createElement("path",{id:"Trazado_6939","data-name":"Trazado 6939",d:"M87.883,78.252l-3.353.611-3.352-.611,3.348-.877,3.357.877",transform:"translate(-75.429 -71.876)",fill:"#5a6e7e"}),r.createElement("path",{id:"Trazado_6940","data-name":"Trazado 6940",d:"M87.883,211.825l-3.353-.615-3.352.615,3.348.934,3.357-.934",transform:"translate(-75.429 -196.201)",fill:"#9aafbf"}),r.createElement("path",{id:"Trazado_6941","data-name":"Trazado 6941",d:"M81.178,6.417l3.352-.829.027-.008V.022L84.53,0,81.178,1.676V6.417",transform:"translate(-75.415)",fill:"#6b8295"}),r.createElement("path",{id:"Trazado_6942","data-name":"Trazado 6942",d:"M131.349,6.417,128,5.587V0l3.353,1.676V6.417",transform:"translate(-118.91)"}),r.createElement("path",{id:"Trazado_6943","data-name":"Trazado 6943",d:"M84.525,226.222l-3.352-1.676v-4.741l3.352.829.049.056-.013,5.434-.036.1",transform:"translate(-75.411 -204.222)",fill:"#6b8295"}),r.createElement("path",{id:"Trazado_6944","data-name":"Trazado 6944",d:"M128,226.222l3.352-1.676v-4.741l-3.352.829v5.587",transform:"translate(-118.91 -204.222)"}),r.createElement("path",{id:"Trazado_6945","data-name":"Trazado 6945",d:"M235.367,53.686l1.477.731V67.239l-1.477.73V53.686",transform:"translate(-218.643 -49.842)"}))},bi=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{"data-name":"IAM Policies",clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("g",{"data-name":"iam-policies-icn"},r.createElement("path",{"data-name":"Trazado 339",d:"M234.915 46.468v-.073a12.276 12.276 0 0 0-12.458-11.593c-19.233.3-55.932-3-86.768-28.92a12.132 12.132 0 0 0-15.811-.046C88.971 31.804 52.271 35.119 33.152 34.81a12.226 12.226 0 0 0-12.561 11.657c-1.8 46.628-1.509 112.307 21.777 144.214 21.779 29.942 64.527 54.463 77.79 60.687a17.75 17.75 0 0 0 7.584 1.7 17.744 17.744 0 0 0 7.619-1.713c14.233-6.71 55.947-30.7 77.768-60.659 23.292-31.913 23.59-97.599 21.786-144.228Zm-33.666 135.567c-19.9 27.341-59.77 50.186-72.17 56.035a3.18 3.18 0 0 1-2.687 0c-12.364-5.814-52.168-28.577-72.141-56.044-22.29-30.539-20.117-104.8-19.071-132.5h.273c21.464 0 59.431-4.411 92.3-31.128 32.821 26.709 70.8 31.119 92.384 31.119h.18c1.052 27.835 3.211 101.997-19.068 132.518Z"}),r.createElement("path",{"data-name":"Trazado 339 - Contorno",d:"M127.739.004a15.2 15.2 0 0 1 9.855 3.655c29.229 24.565 64.3 28.236 82.6 28.236l2.217-.017h.01a15.346 15.346 0 0 1 15.422 14.381c1.821 47.169 1.485 113.518-22.347 146.172-22.2 30.473-64.469 54.785-78.885 61.582a20.555 20.555 0 0 1-8.869 1.993 20.584 20.584 0 0 1-8.833-1.978c-13.426-6.3-56.751-31.147-78.912-61.614-23.821-32.639-24.156-98.986-22.335-146.052a15.124 15.124 0 0 1 15.023-14.484l2.764.028c18.245 0 53.229-3.677 82.542-28.306a15.029 15.029 0 0 1 9.748-3.596Zm92.455 37.753c-19.1 0-55.72-3.849-86.39-29.625a9.344 9.344 0 0 0-6.065-2.265 9.18 9.18 0 0 0-5.956 2.2c-30.753 25.84-67.289 29.7-86.332 29.7l-2.345-.019h-.019a9.344 9.344 0 0 0-9.568 8.874c-1.785 46.156-1.53 111.17 21.217 142.338 21.44 29.477 63.592 53.625 76.668 59.761a14.916 14.916 0 0 0 12.7-.009c14.043-6.621 55.179-30.255 76.653-59.736 22.757-31.181 23.013-96.2 21.227-142.389a9.343 9.343 0 0 0-9.2-8.852Zm-92.44-23.131 1.849 1.5c32.569 26.5 70.7 30.462 90.534 30.462h2.822l.286 2.82c.957 25.27 3.867 102.168-19.628 134.352-20.261 27.833-60.713 51.027-73.287 56.958a6.169 6.169 0 0 1-5.167.01c-12.568-5.909-52.967-29.043-73.282-56.98C28.394 151.57 31.298 74.683 32.252 49.417l.107-2.821h2.822c20.053 0 58.106-3.959 90.724-30.471Zm89.734 37.8c-21.007-.373-57.672-5.123-89.736-30.274-32.229 25.255-68.984 29.947-89.744 30.287-2.23 64.873 4.028 107.88 18.61 127.858 19.6 26.948 58.824 49.384 71.021 55.119l.1.019a.225.225 0 0 0 .1-.021c12.214-5.762 51.5-28.26 71.043-55.106 14.585-19.984 20.843-63.004 18.606-127.883Z"}),r.createElement("path",{"data-name":"Trazado 339 - Contorno",d:"M127.739 2.837a12.358 12.358 0 0 1 8.015 2.976 120.447 120.447 0 0 0 45.936 23.8 142.22 142.22 0 0 0 21.155 4.1 149.679 149.679 0 0 0 17.35 1.015c.753 0 1.514-.006 2.262-.018h.333a12.159 12.159 0 0 1 8.378 3.393 12.225 12.225 0 0 1 3.846 8.3v.077c1.8 46.64 1.506 112.345-21.805 144.286-21.848 29.994-63.571 53.979-77.8 60.689a17.751 17.751 0 0 1-7.66 1.722 17.771 17.771 0 0 1-7.625-1.708c-13.258-6.222-56.016-30.731-77.828-60.718-23.3-31.93-23.6-97.632-21.8-144.275a12.414 12.414 0 0 1 3.8-8.343 12.055 12.055 0 0 1 8.393-3.417c.156 0 .314 0 .47.009.757.012 1.529.018 2.294.018a148.3 148.3 0 0 0 17.294-1.019 141.918 141.918 0 0 0 21.123-4.113 120.786 120.786 0 0 0 45.948-23.838 12.209 12.209 0 0 1 7.921-2.936Zm92.455 32.086a149.9 149.9 0 0 1-17.373-1.016 142.431 142.431 0 0 1-21.184-4.107 120.644 120.644 0 0 1-46.01-23.838 12.163 12.163 0 0 0-7.888-2.929 12.012 12.012 0 0 0-7.8 2.883 120.985 120.985 0 0 1-46.021 23.877 142.125 142.125 0 0 1-21.153 4.119 148.491 148.491 0 0 1-17.317 1.021c-.766 0-1.54-.006-2.3-.018a12.138 12.138 0 0 0-.465-.009 11.861 11.861 0 0 0-8.258 3.362 12.22 12.22 0 0 0-3.739 8.211c-1.8 46.613-1.509 112.271 21.758 144.151 21.788 29.954 64.506 54.44 77.753 60.656a17.576 17.576 0 0 0 7.542 1.69 17.555 17.555 0 0 0 7.577-1.7c14.221-6.7 55.907-30.666 77.73-60.628 23.276-31.892 23.571-97.552 21.768-144.167v-.076a12.027 12.027 0 0 0-3.785-8.16 11.963 11.963 0 0 0-8.243-3.339h-.329c-.746.006-1.508.012-2.263.012Zm-92.441-16.645.062.05a135.656 135.656 0 0 0 50.371 25.557 157.366 157.366 0 0 0 23.039 4.435 163.564 163.564 0 0 0 18.913 1.106h.273v.094c.294 7.782.6 17.213.6 28.16 0 13.373-.462 25.856-1.382 37.1-2.583 31.568-8.74 54.215-18.3 67.312-19.915 27.358-59.8 50.216-72.208 56.066a3.228 3.228 0 0 1-1.38.307 3.288 3.288 0 0 1-1.389-.307c-12.38-5.821-52.213-28.618-72.179-56.075-9.563-13.1-15.723-35.768-18.3-67.365-.919-11.247-1.384-23.729-1.381-37.1 0-10.914.3-20.327.6-28.1v-.094h.367a162.536 162.536 0 0 0 18.844-1.106 157.194 157.194 0 0 0 23-4.436 135.97 135.97 0 0 0 50.391-25.564Zm92.469 31.343h-.085a163.735 163.735 0 0 1-18.936-1.107 157.57 157.57 0 0 1-23.067-4.44 135.854 135.854 0 0 1-50.381-25.544 136.178 136.178 0 0 1-50.4 25.551 157.4 157.4 0 0 1-23.033 4.441 162.713 162.713 0 0 1-18.866 1.107h-.179c-.292 7.748-.59 17.127-.592 27.994 0 13.364.461 25.84 1.38 37.082 2.579 31.56 8.725 54.192 18.268 67.266 19.942 27.424 59.736 50.2 72.1 56.013a3.094 3.094 0 0 0 1.307.288 3.035 3.035 0 0 0 1.3-.288c12.392-5.845 52.242-28.68 72.132-56 9.541-13.068 15.686-35.681 18.265-67.213.919-11.241 1.384-23.719 1.382-37.086-.002-10.91-.301-20.307-.594-28.069Z"}),r.createElement("path",{"data-name":"Trazado 340",d:"m154.932 82.763-7.4-3.7-5.737-2.866-14.1-7.057v12.363l-15.307 6.115 15.307-6.115v-12.37L100.447 82.76v9.628l-5.029 2.014v18.257l5.029.589v8.032l11.941-1.191v54.127l7.145 2.86v11.538l8.162 4.08v-86.488l-7.206 1.441V90.14l7.206-2.528v.007l7.195 2.521v17.5l-7.195-1.435v86.488l8.159-4.08v-11.538l13.528-5.367-.024-10.18-13.5 4.006v-11.54l13.528-2.689v-9.99l5.55-.5v-9.9h-11.929v-10.822l5.524.552 6.4.639v-9.628l5.036 1.008V94.407l-5.036-2.014Zm3.2 12.886v14.772l-2.83-.567-2.2-.44v9.843l-4.4-.441-5.525-.552-2.019-.206v14.7h11.941v6.387l-3.88.344-1.67.147v10.166l-12.063 2.4-1.473.293v15.51l2.353-.7 11.151-3.315.032 6.476-12.376 4.909-1.16.455v11.657l-4.487 2.242v-81.286l5 1.008 2.2.434v-1.876l6.277 1.265V87.622l-7.149-2.866-4.933-1.971-1.39-.552v-10.12l11.433 5.717 5.749 2.875 6.391 3.19v9.745l1.152.457Z"}),r.createElement("path",{"data-name":"Trazado 340 - Contorno",d:"m126.229 66.764 1.465.734 1.466-.733v1.466l13.293 6.652 5.736 2.866 8.208 4.11V91.4l5.036 2.014v21.037l-5.036-1.008v9.46l-11.93-1.191v7.741h11.93v12.707l-5.55.5v9.853l-13.529 2.689v8.373l13.5-4 .032 13.136-13.531 5.368v11.449l-8.158 4.08v1.465l-1.466-.733-1.465.733v-1.466l-8.163-4.08v-11.452l-7.145-2.86v-53.5l-11.941 1.191v-8.347l-5.028-.589V93.417l5.028-2.014v-9.542l27.249-13.627Zm0 13.743v-9l-24.317 12.161v9.714l-5.029 2.014v15.961l5.029.589v7.717l11.941-1.191v54.754l7.145 2.86v11.624l5.231 2.615v-82.33l-7.206 1.441V89.102l10.137-3.556v1.035l7.195 2.521v17.336l5.181 1.044v-18.87l-6.229-2.5-4.932-1.971-2.311-.917v-.3L112.93 88.97l-1.088-2.722Zm25.408 4.3-5.58-2.786-15.061-7.532v6.754l.464.184 4.937 1.973 8.07 3.235v24.434l-6.276-1.265v1.869l-3.954-.781-3.241-.654v77.122l1.555-.777v-11.751l2.086-.818 11.446-4.54-.018-3.52-13.514 4.017v-18.682l2.653-.528 10.884-2.162v-10.3l5.549-.491v-3.581h-11.941V116.44l3.633.37 8.308.831V107.63l5.029 1.007V96.645l-2.95-1.182-2.079-.823Zm-18.214 6.38-5.739-2.011-5.73 2.01v14.68l4.275-.855v-.585l1.465.292 1.466-.293v.586l4.263.85Z"}),r.createElement("path",{"data-name":"Trazado 340 - Contorno",d:"m127.597 68.978.1.049.1-.049v.1l14.049 7.03 5.737 2.866 7.451 3.731v9.623l5.037 2.014v18.443l-5.037-1.008v9.617l-11.929-1.191v10.621h11.929v10.088l-5.549.5v9.98l-.079.016-13.45 2.674v11.329l13.5-4.006v.131l.025 10.246-.062.025-13.467 5.342v11.532l-.054.027-8.1 4.053v.1l-.1-.049-.1.049v-.1l-8.162-4.08v-11.532l-7.145-2.86v-54.085l-11.941 1.191v-8.058l-5.029-.589V94.337l.062-.025 4.967-1.99v-9.623l.054-.027 27.194-13.6Zm0 12.455V69.294l-27.053 13.529v9.634l-5.028 2.014v18.1l5.028.589v8.011l11.941-1.191v54.168l7.145 2.86v11.544l7.967 3.982v-86.211l-7.206 1.441v-17.7l.065-.023 7.336-2.573v.076l7.194 2.521v17.689l-.117-.023-7.078-1.411v86.217l7.962-3.982v-11.544l.062-.024 13.467-5.342-.024-9.983-13.5 4.006v-11.751l.079-.016 13.45-2.674v-10l5.55-.5v-9.714h-11.93v-11.032l11.93 1.191v-9.64l5.036 1.008V94.468l-5.036-2.014V82.82l-7.343-3.677-5.736-2.866-13.961-6.986v12.271l-.062.025-15.308 6.115-.072-.181Zm7.195 8.779-7.107-2.49-7.1 2.49v17.319l7.011-1.4v-.039l.1.019.1-.019v.039l7 1.4Zm-5.359-18.257.142.071 17.181 8.592 6.445 3.217v9.739l1.091.432 3.938 1.577v14.954l-5.029-1.008v9.831l-4.5-.452-5.525-.552-1.912-.195v14.493h11.941v6.574l-5.55.492v10.156l-13.536 2.689v15.3l13.5-4.014v.13l.032 6.542-.062.025-12.376 4.909-1.1.431v11.651l-.054.027-4.628 2.313v-81.561l5.113 1.031 2.082.411v-1.876l6.276 1.265V87.683l-7.087-2.841-4.933-1.971-1.451-.576Zm23.573 12-6.337-3.163-17.04-8.521v9.9l1.328.527 4.933 1.971 7.21 2.891v21.837l-6.277-1.265v1.876l-2.315-.457-4.879-.984v81.007l4.291-2.145v-11.664l1.222-.479 12.313-4.885-.031-6.279-13.5 4.014v-15.721l1.552-.309 11.984-2.38v-10.179l5.55-.492v-6.2h-11.941v-14.9l2.127.217 9.814.982V109.3l5.028 1.008V95.721l-3.814-1.528-1.214-.481Z"})),r.createElement("path",{"data-name":"Rect\\xE1ngulo 887",fill:"none",d:"M0 0h256v256H0z"})))},vi=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("g",{"data-name":"users-icn"},r.createElement("path",{"data-name":"Trazado 331",d:"M128.212 142.371c39.3 0 71.279-31.6 71.279-70.444S167.512 1.483 128.212 1.483s-71.268 31.6-71.268 70.444 31.977 70.444 71.268 70.444Zm0-121.306c28.383 0 51.463 22.818 51.463 50.862s-23.08 50.862-51.463 50.862-51.445-22.816-51.445-50.862 23.066-50.862 51.445-50.862Z"}),r.createElement("path",{"data-name":"Trazado 331 - Contorno",d:"M128.212 143.853c-40.124 0-72.768-32.266-72.768-71.927S88.088-.001 128.212-.001s72.779 32.266 72.779 71.927-32.649 71.927-72.779 71.927Zm0-140.888c-38.47 0-69.768 30.936-69.768 68.961s31.3 68.961 69.768 68.961 69.779-30.936 69.779-68.961-31.303-68.961-69.779-68.961Zm0 121.305c-29.194 0-52.945-23.481-52.945-52.344s23.751-52.345 52.945-52.345 52.963 23.482 52.963 52.345-23.76 52.345-52.963 52.345Zm0-101.724c-27.54 0-49.945 22.152-49.945 49.38s22.405 49.379 49.945 49.379 49.963-22.151 49.963-49.379-22.414-49.379-49.963-49.379Z"}),r.createElement("path",{"data-name":"Trazado 332",d:"M215.129 199.095a108.6 108.6 0 0 0-41.184-32.37 111.377 111.377 0 0 0-51.553-10.081c-31.26 1.575-62.109 17.524-80.5 41.632-.613.8-1.213 1.624-1.8 2.439a35.274 35.274 0 0 0-2.746 36.518c5.68 10.824 16.691 17.287 29.441 17.287h122.867c12.885 0 23.883-6.551 29.4-17.513a36.09 36.09 0 0 0-3.925-37.912Zm-13.812 29.2c-1.529 3.029-4.8 6.648-11.662 6.648H66.783c-7.25 0-10.545-4.215-11.861-6.724a15.692 15.692 0 0 1 1.361-16.225c.473-.647.938-1.29 1.43-1.93 14.951-19.6 40.129-32.58 65.688-33.869 1.408-.068 2.816-.1 4.213-.1 27.5 0 55.287 13.376 71.729 34.828a16.785 16.785 0 0 1 1.974 17.372Z"}),r.createElement("path",{"data-name":"Trazado 332 - Contorno",d:"M127.643 155.028a110.952 110.952 0 0 1 23.833 2.624 115.878 115.878 0 0 1 23.1 7.726 110.137 110.137 0 0 1 41.751 32.821 37.565 37.565 0 0 1 4.07 39.465 33.137 33.137 0 0 1-5.348 7.707 32.51 32.51 0 0 1-7.156 5.772 33.964 33.964 0 0 1-8.59 3.612 37.261 37.261 0 0 1-9.646 1.247H66.783a37.248 37.248 0 0 1-9.57-1.23 34.36 34.36 0 0 1-8.568-3.563 33.1 33.1 0 0 1-7.191-5.693 33.672 33.672 0 0 1-5.443-7.6 36.758 36.758 0 0 1 2.851-38.053l.009-.012c.576-.794 1.2-1.642 1.825-2.466 18.644-24.445 49.918-40.623 81.618-42.22 1.769-.092 3.556-.137 5.329-.137Zm62.011 98.007c12.31 0 22.8-6.24 28.053-16.691a34.607 34.607 0 0 0-3.773-36.354 107.135 107.135 0 0 0-40.617-31.92 112.854 112.854 0 0 0-22.492-7.524 107.908 107.908 0 0 0-23.179-2.552c-1.722 0-3.463.044-5.174.13-30.837 1.554-61.251 17.281-79.375 41.044-.608.8-1.214 1.627-1.779 2.4a33.793 33.793 0 0 0-2.638 34.976c5.418 10.324 15.926 16.488 28.11 16.488Zm-62.037-78.43a93.962 93.962 0 0 1 40.673 9.521 90.119 90.119 0 0 1 32.251 25.895 18.687 18.687 0 0 1 3.738 9.3 17.136 17.136 0 0 1-1.619 9.631 13.216 13.216 0 0 1-4.318 5.019 15.031 15.031 0 0 1-8.688 2.453H66.783a15.1 15.1 0 0 1-9.041-2.706 13.981 13.981 0 0 1-4.152-4.818 17.173 17.173 0 0 1 1.466-17.761l.01-.015.19-.261c.4-.554.822-1.127 1.258-1.694 15.213-19.942 40.813-33.145 66.808-34.457a84.647 84.647 0 0 1 4.295-.108Zm62.037 58.85a12.08 12.08 0 0 0 6.975-1.922 10.268 10.268 0 0 0 3.345-3.9 14.2 14.2 0 0 0 1.324-7.982 15.738 15.738 0 0 0-3.147-7.833 87.116 87.116 0 0 0-31.182-25.025 90.916 90.916 0 0 0-39.353-9.218c-1.373 0-2.765.034-4.14.1a89.517 89.517 0 0 0-36.2 9.9 84.252 84.252 0 0 0-28.362 23.379v.005c-.414.538-.8 1.072-1.216 1.637l-.186.254a14.21 14.21 0 0 0-1.252 14.683 10.988 10.988 0 0 0 3.259 3.788 12.148 12.148 0 0 0 7.271 2.136Z"})),r.createElement("path",{"data-name":"Rect\\xE1ngulo 885",fill:"none",d:"M0 0h256v256H0z"})))},yi=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Uni\\xF3n 44",d:"M68.023 254.27a84.932 84.932 0 0 1-16-4.981 85.034 85.034 0 0 1-14.469-7.867 85.9 85.9 0 0 1-12.605-10.417 86.052 86.052 0 0 1-10.4-12.633 85.293 85.293 0 0 1-7.857-14.5 84.868 84.868 0 0 1-4.965-16.024 86.347 86.347 0 0 1-1.732-17.194 85.284 85.284 0 0 1 4.422-27.2 84.814 84.814 0 0 1 12.285-23.571 85.562 85.562 0 0 1 18.707-18.5q2.35-1.7 4.787-3.216V19.084c0-5.291 2.291-9.882 6.814-13.658A23.864 23.864 0 0 1 62.7.001h101.867a23.167 23.167 0 0 1 15.266 5.427c4.512 3.771 6.807 8.362 6.813 13.648v55.263h47.275a23.173 23.173 0 0 1 15.264 5.427c4.512 3.775 6.8 8.367 6.813 13.648v108.21a17.675 17.675 0 0 1-6.812 14.023 23.153 23.153 0 0 1-15.248 5.421h-80.016a86.359 86.359 0 0 1-25.8 23.31 84.684 84.684 0 0 1-20.33 8.577 85.257 85.257 0 0 1-22.617 3.046 86.2 86.2 0 0 1-17.152-1.731ZM35.275 136.923a60 60 0 0 0-10.312 33.733A60.345 60.345 0 0 0 85.18 230.99a59.739 59.739 0 0 0 36.213-12.148 22.746 22.746 0 0 1-5.031-3.2 17.621 17.621 0 0 1-6.812-14.018v-54.893H62.71a23.732 23.732 0 0 1-15.7-5.431 17.831 17.831 0 0 1-6.568-10.988 60.318 60.318 0 0 0-5.167 6.61Zm100.654 60.824h94.119V97.293h-43.4v29.992a17.675 17.675 0 0 1-6.812 14.023 23.148 23.148 0 0 1-15.252 5.421H135.93Zm0-74.337H160.7V97.294h-24.771Zm-69.348 0h42.967V93.418c0-5.286 2.295-9.882 6.813-13.653a23.874 23.874 0 0 1 15.693-5.427H160.7V22.956H66.581Z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 926",fill:"none",d:"M0 0h256v256H0z"})))},_i=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",viewBox:"0 0 256 256",fill:"currentcolor"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"clip-path"},r.createElement("rect",{id:"Rect\xe1ngulo_1023","data-name":"Rect\xe1ngulo 1023",width:"256",height:"255.998",fill:"none"})),r.createElement("clipPath",{id:"clip-Enable_Bucket_Encryption"},r.createElement("rect",{width:"256",height:"256"}))),r.createElement("g",{id:"Enable_Bucket_Encryption","data-name":"Enable Bucket Encryption",clipPath:"url(#clip-Enable_Bucket_Encryption)"},r.createElement("g",{id:"Enable_Bucket_Encryption_Icon","data-name":"Enable Bucket Encryption Icon"},r.createElement("g",{id:"Grupo_2410","data-name":"Grupo 2410"},r.createElement("path",{id:"Trazado_7149","data-name":"Trazado 7149",d:"M127.927,130.84a8.009,8.009,0,0,0-4.486,14.645v6.451a4.238,4.238,0,0,0,4.228,4.228h.511a4.237,4.237,0,0,0,4.227-4.228v-6.451a8.009,8.009,0,0,0-4.48-14.645",transform:"translate(-0.009)"}),r.createElement("path",{id:"Trazado_7150","data-name":"Trazado 7150",d:"M250.852,8.773A21.516,21.516,0,0,0,233.732,0H22.264A21.507,21.507,0,0,0,5.148,8.773,25.864,25.864,0,0,0,.395,28.759c5.223,30.384,16.208,94.421,25,145.533l.014.1c4.457,26,8.337,48.644,10.616,61.787C37.988,247.666,47.17,256,57.875,256H198.129c10.712,0,19.873-8.332,21.859-19.818l10.591-61.712.076-.375,14.334-83.619.049-.243L255.6,28.759a25.8,25.8,0,0,0-4.748-19.986M37.855,98a9.544,9.544,0,0,1-9.408-7.93l-.007-.042a9.544,9.544,0,0,1,9.406-11.158h62.969A29.6,29.6,0,0,0,94.2,97.433v.176h-1.06a32.022,32.022,0,0,0-4.912.382Zm14.538,83.918a9.544,9.544,0,0,1-9.408-7.93l-.007-.041a9.544,9.544,0,0,1,9.405-11.159H63.256a26.924,26.924,0,0,0,8.909,18.292q.468.428.952.833ZM181.632,161.14c0,9.2-8.235,16.705-18.456,16.935l-35.261,6.136-35.259-6.135C82.434,177.844,74.2,170.337,74.2,161.14V125.55c0-9.342,8.5-16.941,18.943-16.941H105.2V97.433c0-11.162,10.19-20.244,22.714-20.244s22.714,9.08,22.714,20.244v11.176h12.059c10.446,0,18.944,7.6,18.944,16.941Zm31.479,12.751h0a9.543,9.543,0,0,1-9.413,7.989l-20.95.006c.311-.262.618-.529.918-.8a26.921,26.921,0,0,0,8.91-18.292H203.7a9.544,9.544,0,0,1,9.415,11.1M227.4,89.972a9.544,9.544,0,0,1-9.414,7.989l-50.5.012a32.024,32.024,0,0,0-4.8-.364h-1.06v-.176a29.6,29.6,0,0,0-6.613-18.56h62.97a9.544,9.544,0,0,1,9.416,11.1",transform:"translate(0)"}),r.createElement("path",{id:"Trazado_7151","data-name":"Trazado 7151",d:"M127.923,85.575c-7.334,0-13.3,5.32-13.3,11.858l0,11.175h26.61l0-11.175c0-6.538-5.967-11.858-13.3-11.858",transform:"translate(-0.009)"})))))},Si=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"documentation-icn",d:"M19.922 256.001H8.633a8.842 8.842 0 0 1-8.631-8.962V77.449a8.845 8.845 0 0 1 8.631-8.962h7.291a8.841 8.841 0 0 1 8.645 8.962v152.944h119.164a8.848 8.848 0 0 1 8.65 8.962v7.685a8.845 8.845 0 0 1-8.65 8.962Zm41.08-46a14.994 14.994 0 0 1-15-15v-180a15 15 0 0 1 15-15h180a15 15 0 0 1 15 15v180a15 15 0 0 1-15 15Zm5-20h170v-170h-170Zm28.742-18.884a.906.906 0 0 1-.9-.906v-23.3a.906.906 0 0 1 .9-.906H210a.907.907 0 0 1 .906.906v23.3a.907.907 0 0 1-.906.906Zm0-52a.91.91 0 0 1-.9-.91v-23.3a.909.909 0 0 1 .9-.905H210a.909.909 0 0 1 .906.905v23.3a.91.91 0 0 1-.906.91Zm0-53a.91.91 0 0 1-.9-.91v-23.3a.907.907 0 0 1 .9-.91H210a.908.908 0 0 1 .906.91v23.3a.911.911 0 0 1-.906.91Z",stroke:"rgba(0,0,0,0)",strokeMiterlimit:10}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 876",fill:"none",d:"M0 0h256v256H0z"})))},Ti=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 26 25"},e),r.createElement("g",{id:"Grupo_2542","data-name":"Grupo 2542",transform:"translate(0 0.249)"},r.createElement("g",{id:"health-icon",transform:"translate(0 7.842)"},r.createElement("path",{id:"Uni\xf3n_51","data-name":"Uni\xf3n 51",d:"M1.977,17A1.976,1.976,0,0,1,0,15.015V4.938H2.144v9.918h9.892V17Zm12.591-.443V14.584h1.974v1.973Zm.288-4.538V2.144H4.965V0H15.023A1.98,1.98,0,0,1,17,1.973V12.019Zm-4.8,0V10.045h1.979v1.973Zm-5.094,0V10.045H6.944v1.973Zm5.094-5.106V4.938h1.979V6.912Zm-5.09,0V4.938H6.942V6.912ZM.458,2.448V.475H2.432V2.448Z",transform:"translate(0 -0.091)",fill:"#07193e"})),r.createElement("g",{id:"Grupo_2537","data-name":"Grupo 2537",transform:"translate(12.323 0)"},r.createElement("g",{id:"Elipse_623","data-name":"Elipse 623",transform:"translate(-0.323 -0.249)",fill:"#4ccb92",stroke:"#fff",strokeWidth:"1"},r.createElement("circle",{cx:"7",cy:"7",r:"7",stroke:"none"}),r.createElement("circle",{cx:"7",cy:"7",r:"6.5",fill:"none"})),r.createElement("g",{id:"check",transform:"translate(2.934 4.069)"},r.createElement("path",{id:"Trazado_7261","data-name":"Trazado 7261",d:"M14.9,10.862a.622.622,0,1,1,.889.871l-3.311,4.139a.622.622,0,0,1-.9.017L9.384,13.694a.622.622,0,1,1,.879-.879L12,14.551l2.881-3.67.017-.018Z",transform:"translate(-9.182 -10.676)"})))))},Ai=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 14 14"},e),r.createElement("path",{d:"M141.421,148.182a4.5,4.5,0,0,0-4.3,5.805l-5.188,5.195v3h3l5.187-5.2a4.5,4.5,0,0,0,5.8-3.936,4.39,4.39,0,0,0-.823-3A4.492,4.492,0,0,0,141.421,148.182Zm.5,5a1,1,0,1,1,1-1A1,1,0,0,1,141.92,153.182Z",transform:"translate(-131.934 -148.182)"}))},Ci=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("g",{"data-name":"Grupo 1557"},r.createElement("path",{"data-name":"Rect\\xE1ngulo 826",fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Uni\\xF3n 10",d:"M71.113 256a37.94 37.94 0 01-37.889-37.9V60.906a15.426 15.426 0 01-14.227-15.353V29.621a15.423 15.423 0 0115.4-15.4h41.541A15.378 15.378 0 0191.258.003h72.871a15.393 15.393 0 0115.334 14.218h41.531a15.423 15.423 0 0115.4 15.4v15.932a15.426 15.426 0 01-14.227 15.353V218.1a37.942 37.942 0 01-37.9 37.9zm-19.605-37.9a19.634 19.634 0 0019.605 19.614h113.164A19.637 19.637 0 00203.89 218.1V60.951H51.507zM218.117 38.6v-6.1h-56.893V18.278H94.177V32.5H37.286v6.1z"}))))},wi=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"clip-Subscribe_to_event"},r.createElement("rect",{width:"256",height:"256"}))),r.createElement("g",{id:"Subscribe_to_event","data-name":"Subscribe to event",clipPath:"url(#clip-Subscribe_to_event)"},r.createElement("g",{id:"subscribe_to_event_icon","data-name":"subscribe to event icon",transform:"translate(-675.16 -286.16)"},r.createElement("g",{id:"Grupo_2272","data-name":"Grupo 2272",transform:"translate(676.2 287.84)"},r.createElement("g",{id:"Grupo_2271","data-name":"Grupo 2271"},r.createElement("path",{id:"Trazado_7031","data-name":"Trazado 7031",d:"M218.265,151a12.276,12.276,0,0,0-12.37,12.1v3.147H184.5c-17.317,0-31.3,13.678-31.3,30.383v178.3c0,16.7,14.1,30.383,31.3,30.383h191.73c17.318,0,31.3-13.678,31.3-30.383v-178.3c0-16.7-14.1-30.383-31.3-30.383h-24.74V163.1a12.372,12.372,0,0,0-24.739,0v3.147H230.634V163.1A12.275,12.275,0,0,0,218.265,151Zm157.96,229.99H184.5a6.408,6.408,0,0,1-6.556-6.173v-127.7H382.9v127.7A6.6,6.6,0,0,1,376.225,380.99ZM326.746,190.461v3.39a12.372,12.372,0,0,0,24.739,0v-3.39h24.74a6.408,6.408,0,0,1,6.556,6.174v26.388H177.939V196.635a6.408,6.408,0,0,1,6.556-6.174h21.4v3.39a12.373,12.373,0,0,0,24.74,0v-3.39Z",transform:"translate(-153.2 -151)",fill:"#4ccb92"}),r.createElement("path",{id:"Trazado_7032","data-name":"Trazado 7032",d:"M320.582,251.052l-58.245,57.325-20.692-20.386a15.283,15.283,0,0,0-21.459,21.766L262.337,351.3l79.857-78.478a15.336,15.336,0,1,0-21.612-21.765Z",transform:"translate(-151.567 -145.725)",fill:"#4ccb92"}))))))},Ni=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 870",fill:"none",d:"M0 0h256v256H0z"}),r.createElement("g",{"data-name":"download-icn"},r.createElement("path",{"data-name":"Trazado 362",d:"M0 104.08c0-21.751 32.822-21.751 32.822 0v118.833h190.356V104.08c0-21.751 32.822-21.751 32.822 0v135.381a16.48 16.48 0 0 1-16.4 16.54H16.415a16.485 16.485 0 0 1-16.413-16.54V104.08Zm144.415-87.773c0-21.741-32.826-21.741-32.826 0v138.227l-18.591-18.743c-15.263-15.385-38.474 8.006-23.211 23.391l46.51 46.879a16.339 16.339 0 0 0 23.406 0l46.507-46.879c15.266-15.385-7.945-38.776-23.208-23.391l-18.587 18.743V16.306Z"}))))},Ii=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("g",{"data-name":"ComputerLineIcon"},r.createElement("path",{"data-name":"ComputerLineIcon",d:"M19.678 227.007A19.678 19.678 0 0 1 0 207.328v-25.736h256.887v25.736a19.683 19.683 0 0 1-19.682 19.682Zm-4.844-19.682a4.541 4.541 0 0 0 4.541 4.541h218.289a4.541 4.541 0 0 0 4.541-4.541v-14.152h-75.387a12.4 12.4 0 0 1-11.354 7.567H101.5a12.416 12.416 0 0 1-11.355-7.567H14.836Zm204.662-40.871v-121.1H37.846v121.1H22.709V41.568a11.353 11.353 0 0 1 11.35-11.354h189.225a11.354 11.354 0 0 1 11.355 11.354v124.886Zm-166.516-.91V60.49h136.09l-11.957 12.108H65.093v92.945Z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 892",fill:"none",d:"M0 0h256v256H0z"}))))},xi=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{"data-name":"All Buckets",clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Uni\\xF3n 45",d:"M78.373 256c-7.594 0-14.115-5.922-15.51-14.087-1.619-9.346-4.373-25.445-7.537-43.926l-.01-.074C49.08 161.58 41.277 116.057 37.57 94.461a18.4 18.4 0 0 1 3.377-14.209 15.24 15.24 0 0 1 12.148-6.235h150.137a15.259 15.259 0 0 1 12.154 6.235 18.358 18.358 0 0 1 3.369 14.209l-7.5 43.7-.035.171-10.184 59.448-.049.265-7.523 43.872c-1.408 8.165-7.914 14.087-15.516 14.087Zm-3.418-16.57a3.582 3.582 0 0 0 3.418 3.1h99.58a3.582 3.582 0 0 0 3.424-3.105l6.178-36.084H68.768c2.591 15.142 4.818 28.093 6.187 36.086Zm-8.5-49.559h123.42l7.928-46.218H58.539c2.609 15.186 5.363 31.301 7.916 46.216ZM50.416 88.858a4.087 4.087 0 0 0-.738 3.12c1.572 9.228 3.922 22.825 6.549 38.2h143.895l6.531-38.2a4.055 4.055 0 0 0-.74-3.115 3.354 3.354 0 0 0-2.68-1.381H53.086a3.359 3.359 0 0 0-2.67 1.374Zm170.543 29.158v-1.083l.014-.088 1.615-9.414h6.221a1.281 1.281 0 0 0 1.188-1.151c.074-.412.148-.847.227-1.3l.029-.162c.043-.25.088-.5.131-.764.02-.127.045-.255.064-.382s.049-.279.074-.421c.063-.377.131-.759.2-1.156l.031-.171c.043-.25.088-.509.131-.769l.045-.245c.029-.191.063-.382.1-.578l.67-3.884c.855-4.981 1.486-8.66 2.055-12h-10.43l-.244-.656a25.505 25.505 0 0 0-3.664-6.74c-.4-.529-.822-1.043-1.252-1.523l-1.49-1.666h18.9l.158-.936c.172-1.009.35-2.038.525-3.061.367-2.15.734-4.3 1.076-6.289.1-.568.2-1.137.293-1.709.117-.676.23-1.362.348-2.042l.5-2.915c.59-3.443 1.2-6.989 1.8-10.5h-86.41l3.648 21.243h-10.016l-4.379-25.588-4.787-27.855a12.711 12.711 0 0 1 2.342-9.826 10.739 10.739 0 0 1 8.545-4.379h95.705a10.723 10.723 0 0 1 8.541 4.379 12.715 12.715 0 0 1 2.342 9.826c-.414 2.419-.9 5.241-1.463 8.5l-.943 5.535c-.143.8-.279 1.622-.426 2.454l-.189 1.117q-.381 2.249-.793 4.619l-.982 5.73c-1.7 9.958-3.67 21.39-5.25 30.579l-.68 3.962-.578 3.375v.039l-.713 4.183c-.1.563-.2 1.131-.3 1.758-.1.593-.211 1.229-.334 1.944l-.4 2.312-1 5.843c-.787 4.585-1.531 8.915-2.072 12.049-.975 5.682-5.547 9.806-10.875 9.806ZM148.313 11.072a1.612 1.612 0 0 0-.289 1.225l4.025 23.516h90.041a16029.61 16029.61 0 0 1 3.365-19.617l.088-.485.582-3.414a1.611 1.611 0 0 0-.289-1.225 1.174 1.174 0 0 0-.9-.475h-95.715a1.154 1.154 0 0 0-.909.473ZM34.038 118.016h-6.852c-5.326 0-9.9-4.125-10.877-9.811-.539-3.13-1.281-7.459-2.07-12.049l-.287-1.7-.711-4.144-.4-2.307c-.127-.72-.234-1.361-.336-1.954l-.3-1.749-.717-4.183v-.039l-1.252-7.293c-1.58-9.2-3.545-20.65-5.252-30.623L4 36.434q-.407-2.381-.8-4.639l-.186-1.1c-.143-.833-.283-1.651-.426-2.449l-.953-5.588C1.078 19.41.598 16.609.182 14.204a12.722 12.722 0 0 1 2.342-9.826 10.729 10.729 0 0 1 8.543-4.379h95.705a10.744 10.744 0 0 1 8.545 4.379 12.719 12.719 0 0 1 2.342 9.826l-4.809 27.968-4.359 25.475H98.479l.2-1.171 3.449-20.072H15.716c.607 3.512 1.213 7.058 1.8 10.5l.5 2.915c.117.681.23 1.366.346 2.047l.293 1.7c.344 1.993.711 4.153 1.082 6.313.17 1.019.348 2.038.52 3.037l.16.936h18.9l-1.49 1.666c-.432.48-.854.994-1.252 1.523a25.567 25.567 0 0 0-3.666 6.74l-.244.656H22.237c.566 3.34 1.2 7.019 2.053 12l.672 3.884c.035.2.068.387.1.583l.045.24c.043.26.088.52.131.769l.006.01.023.162c.07.4.137.779.2 1.151l.074.426c.025.142.045.255.064.382.043.254.088.509.131.754l.029.171c.078.451.152.886.227 1.3a1.284 1.284 0 0 0 1.188 1.151h6.223l1.629 9.5v1.083ZM10.155 11.077a1.609 1.609 0 0 0-.285 1.22l.672 3.9c1.027 5.966 2.318 13.509 3.365 19.617h90.041l4.025-23.516a1.612 1.612 0 0 0-.289-1.225 1.159 1.159 0 0 0-.908-.475H11.061a1.185 1.185 0 0 0-.907.477Z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 927",fill:"none",d:"M0 0h256v256H0z"})))},Ri=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("g",{"data-name":"LambdaIcon"},r.createElement("path",{"data-name":"Rect\\xE1ngulo 847",fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Trazado 442",d:"M40.266 0c-9.543 0-17.279 6.878-17.279 15.363S30.723 30.73 40.266 30.73c26.265 0 36.01 14.872 46.032 34.353l1.659 3.134c1.382 2.643 4.354 8.542 8.363 16.408L1.975 233.094c-4.327 7.346-1.317 16.42 6.8 20.5s18.415 1.7 23.265-5.384l81.9-128.623c21.91 44 49.488 99.494 49.972 100.415 12.921 27.82 47.568 42.291 79.9 33.369 9.123-2.512 14.229-11.123 11.4-19.235s-12.511-12.651-21.634-10.14c-15.631 4.28-32.31-2.987-38.084-16.593-2.765-5.531-67.32-135.751-76.029-152.282l-1.521-2.95C109.038 35.336 90.86 0 40.266 0Z"}))))},ki=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("g",{"data-name":"groups-icn"},r.createElement("path",{"data-name":"Trazado 464",d:"M80.48 229.312a27.075 27.075 0 0 1-24.56-14.615 29.94 29.94 0 0 1 2.269-30.668v-.007c.519-.729.982-1.367 1.418-1.952l.008-.006a84.019 84.019 0 0 1 28.115-23.5 87.373 87.373 0 0 1 35.739-9.917 83.994 83.994 0 0 1 4.172-.107 85.882 85.882 0 0 1 18.631 2.076 89.934 89.934 0 0 1 18.062 6.117 86.479 86.479 0 0 1 32.679 25.974 30.568 30.568 0 0 1 3.2 31.789 26.323 26.323 0 0 1-9.982 10.9 28.124 28.124 0 0 1-14.539 3.924Zm43.97-61.409a67.92 67.92 0 0 0-27.724 7.673 64.647 64.647 0 0 0-21.71 18.1c-.32.426-.626.852-.945 1.3l-.116.162a10.394 10.394 0 0 0-.91 10.676 7.736 7.736 0 0 0 2.277 2.691 8.546 8.546 0 0 0 5.158 1.516h95.217c3.461 0 5.9-1.382 7.255-4.114v-.007a10.376 10.376 0 0 0 .951-5.807 11.664 11.664 0 0 0-2.273-5.746 66.98 66.98 0 0 0-23.879-19.38 68.976 68.976 0 0 0-30.14-7.144 70.658 70.658 0 0 0-3.161.076Zm87.819 40.475.254-2.2a40.828 40.828 0 0 0-.3-11.552l-.392-2.3h21.988c2.574 0 4.378-1.014 5.361-3.014v-.014a7.766 7.766 0 0 0 .718-4.344 8.714 8.714 0 0 0-1.715-4.319 52.307 52.307 0 0 0-18.683-15.17 53.964 53.964 0 0 0-23.583-5.594c-.883 0-1.722.021-2.488.062h-.01c-1.158.055-2.323.21-3.557.372-.15.021-.306.041-.457.058l-.817.106-.649-.505a98.534 98.534 0 0 0-13.759-8.872l-3.959-2.151 4.269-1.443a67.359 67.359 0 0 1 18.122-3.6c1.1-.055 2.213-.083 3.315-.083a67.958 67.958 0 0 1 14.8 1.649 71.23 71.23 0 0 1 14.336 4.849 68.418 68.418 0 0 1 25.905 20.624 24.5 24.5 0 0 1 2.584 25.507 21.121 21.121 0 0 1-8.038 8.776 22.614 22.614 0 0 1-11.7 3.154Zm-189.943 0a22.751 22.751 0 0 1-11.626-3.113 21.723 21.723 0 0 1-8.137-8.636v-.006a24.022 24.022 0 0 1 1.831-24.617 42.21 42.21 0 0 1 1.138-1.567 66.738 66.738 0 0 1 22.314-18.666 69.372 69.372 0 0 1 28.369-7.873 68.088 68.088 0 0 1 3.265-.079 68.894 68.894 0 0 1 21.835 3.618l4.27 1.423-3.944 2.168a99.584 99.584 0 0 0-13.552 8.982l-.657.519-.827-.113a50.98 50.98 0 0 0-7.089-.55c-.908 0-1.719.021-2.488.062h-.007a53.11 53.11 0 0 0-21.686 6 50.7 50.7 0 0 0-16.979 14.13c-.214.309-.44.615-.657.91l-.2.275a7.817 7.817 0 0 0-.675 7.986l.008.01a5.536 5.536 0 0 0 1.663 1.966 6.355 6.355 0 0 0 3.832 1.12h21.83l-.389 2.295a40.514 40.514 0 0 0-.269 11.55l.262 2.2ZM70.893 84.196a57.261 57.261 0 0 1 57.2-57.2 57.257 57.257 0 0 1 57.188 57.2 57.26 57.26 0 0 1-57.188 57.2 57.264 57.264 0 0 1-57.2-57.197Zm19.29 0a37.952 37.952 0 0 0 37.909 37.909 37.952 37.952 0 0 0 37.911-37.909 37.952 37.952 0 0 0-37.911-37.908 37.952 37.952 0 0 0-37.909 37.911Zm95.572 53.568a45.7 45.7 0 0 1-9.626-3.508l-2.433-1.213 1.908-1.935a66.163 66.163 0 0 0 7.772-9.446l.876-1.3 1.464.563a29.378 29.378 0 0 0 10.546 2.041 29.531 29.531 0 0 0 29.507-29.49 29.532 29.532 0 0 0-29.507-29.493 12.65 12.65 0 0 0-1.656.154c-.381.052-.773.107-1.189.145l-1.553.141-.5-1.478a66.318 66.318 0 0 0-4.962-11.288l-1.325-2.381 2.676-.512a45.609 45.609 0 0 1 8.5-.828 45.6 45.6 0 0 1 45.548 45.54 45.594 45.594 0 0 1-45.548 45.537 44.9 44.9 0 0 1-10.496-1.249Zm-171.42-44.29a45.586 45.586 0 0 1 45.526-45.54 45.391 45.391 0 0 1 8.56.835l2.69.512-1.339 2.385a66.792 66.792 0 0 0-4.993 11.292l-.5 1.48-1.557-.154c-.395-.038-.77-.089-1.134-.141a12.977 12.977 0 0 0-1.726-.162 29.517 29.517 0 0 0-29.479 29.493 29.517 29.517 0 0 0 29.479 29.49 29.18 29.18 0 0 0 10.57-2.048l1.453-.561.884 1.285a68.636 68.636 0 0 0 7.794 9.46l1.913 1.941-2.439 1.206a46.366 46.366 0 0 1-9.652 3.512 44.893 44.893 0 0 1-10.522 1.25 45.583 45.583 0 0 1-45.527-45.535Z"})),r.createElement("path",{"data-name":"Rect\\xE1ngulo 886",fill:"none",d:"M0 0h256v256H0z"})))},Oi=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("path",{d:"M125.65,0h0C56.26,0,0,56.26,0,125.65H0c0,69.4,56.26,125.65,125.65,125.65h0c69.4,0,125.65-56.26,125.65-125.65S195.05,0,125.65,0m41.51,163.77l-31.76,31.76c-5.32,5.39-14,5.45-19.39,.13-.04-.04-.09-.09-.13-.13h0l-31.74-31.76c-3.97-3.69-5.22-9.46-3.14-14.47,2.19-5.32,7.3-8.87,13.05-9.06,3.57,.06,6.97,1.55,9.42,4.15l8.4,8.4V65.26c0-7.57,6.15-13.71,13.72-13.7,7.57,0,13.7,6.14,13.7,13.7v87.52l8.4-8.39c2.45-2.6,5.85-4.1,9.42-4.16,5.76,.18,10.87,3.73,13.05,9.06,2.09,5,.83,10.78-3.14,14.47"}))},Li=function(e){return r.createElement("svg",je({},e,{className:"min-icon",fill:"currentcolor",xmlns:"http://www.w3.org/2000/svg",viewBox:"-1 -37.9 256 256"}),r.createElement("defs",null,r.createElement("clipPath",{id:"a"},r.createElement("path",{d:"M53.548,94.912v44.816c.43-.22.737-.378,1.517-.759a20.07,20.07,0,0,1,27.673,15.21c.1.677.115.688.163,1.1.063.567.084.968.108,1.463.01.21.068,1.914.072,2,.2,2.214.363,4.336.452,6.449.269,6.381.536,11,.957,15.5.6,6.412.964,12.128,1.066,17.7a19.838,19.838,0,0,1-.976,6.231c.683,6.455,1.592,14.938,1.752,16.438.014.128.023.253.036.38,3.927-.511,5.969-.716,8.382-.813,8.553-.344,16.809-.382,29.335-.235,1.42.017,2.559.021,5.094.054,10.044.13,14.46.163,19.906.127.93-.007,1.643,0,3.234,0,7.429.005,10.477-.237,12.174-.958-.178-1.123-.351-2.228-.614-3.558-.313-1.589-.586-2.862-1.264-5.979-2.292-10.53-3.161-15.585-3.414-22.508a68.539,68.539,0,0,1,2.764-23.067A29.713,29.713,0,0,1,164.278,159c.461-.922.889-1.737,1.372-2.547a22.021,22.021,0,0,1,1.987-2.836,19.87,19.87,0,0,1,3.776-3.5A19.984,19.984,0,0,1,192.33,125.6a20.223,20.223,0,0,1,9.195,3V94.912Z",fill:"none"})),r.createElement("clipPath",{id:"b"},r.createElement("path",{d:"M204.03,236.91c-.393.722-.717,1.447-1.156,2.168-.795,1.3-1.66,2.592-2.547,3.811h3.7Z",fill:"none"}))),r.createElement("g",{transform:"translate(-0.036 -24.789)"},r.createElement("path",{d:"M239.185,72.637A29.456,29.456,0,0,0,209.767,43.6H128.581l-1.119-1.512c-5.078-6.886-12.756-17.3-26.1-17.3H49.394A29.455,29.455,0,0,0,19.972,54.21a19.778,19.778,0,0,0,.236,3.081V70.763A29.818,29.818,0,0,0,.036,98.947c0,.6.023,1.205.076,1.806L9.8,207.577A29.8,29.8,0,0,0,39.545,236.2h175.73A29.8,29.8,0,0,0,245.021,207.6L254.947,100.8q.088-.928.09-1.852A29.792,29.792,0,0,0,239.185,72.637ZM49.394,44.808h51.963c6.586,0,13.645,18.813,20.7,18.813h87.709a9.429,9.429,0,0,1,9.4,9.4v4.7H40.213V54.206h-.229A9.431,9.431,0,0,1,49.394,44.808ZM225.031,206.43a9.781,9.781,0,0,1-9.754,9.748H39.547a9.779,9.779,0,0,1-9.75-9.748L20.051,98.947A9.782,9.782,0,0,1,29.8,89.192H225.268a9.788,9.788,0,0,1,9.758,9.755Z"}),r.createElement("g",{transform:"translate(-351.512 467)"},r.createElement("g",{transform:"translate(352 -469)",clipPath:"url(#a)"},r.createElement("path",{d:"M118.046,203.4c0,12.123,18.976,12.123,18.976,0V126.379l10.748,10.443c8.823,8.569,22.236-4.465,13.415-13.034L134.3,97.665a9.685,9.685,0,0,0-13.526,0L93.89,123.788c-8.82,8.568,4.592,21.6,13.415,13.034l10.745-10.443V203.4Z"}))),r.createElement("g",{clipPath:"url(#b)"},r.createElement("path",{d:"M56.052,158.235c0-12.121,18.978-12.121,18.978,0v66.218H185.056V158.235c0-12.121,18.973-12.121,18.973,0v75.436a9.357,9.357,0,0,1-9.486,9.217h-129a9.357,9.357,0,0,1-9.486-9.217V158.235Zm64.5,45.162c0,12.123,18.976,12.123,18.976,0V126.379l10.748,10.443c8.823,8.569,22.236-4.465,13.415-13.034L136.8,97.665a9.685,9.685,0,0,0-13.526,0L96.394,123.788c-8.82,8.568,4.593,21.6,13.415,13.034l10.745-10.443V203.4Z"}))))},Di=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("g",{"data-name":"TiersIcon"},r.createElement("path",{"data-name":"Rect\\xE1ngulo 848",fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Trazado 441",d:"M128.249 0a11.373 11.373 0 0 0-5.583 1.308L5.334 63.851a9.483 9.483 0 0 0 0 17.039l36.187 19.289-36.187 19.288a9.485 9.485 0 0 0 0 17.058l36.187 19.27-36.187 19.288a9.485 9.485 0 0 0 0 17.058l117.331 62.54a11.442 11.442 0 0 0 10.666 0l117.331-62.54a9.485 9.485 0 0 0 0-17.058l-36.187-19.289 36.187-19.27a9.485 9.485 0 0 0 0-17.058l-36.187-19.289 36.187-19.289a9.483 9.483 0 0 0 0-17.039L133.332 1.311A11.349 11.349 0 0 0 128.249 0ZM62.875 111.563l59.791 31.866a11.442 11.442 0 0 0 10.666 0l59.791-31.866 30.876 16.443-96 51.154-96-51.154Zm-.021 55.617 59.812 31.866a11.442 11.442 0 0 0 10.667 0l59.812-31.866 30.854 16.442-96 51.155-96-51.155Z"}))))},Mi=function(e){return r.createElement("svg",je({},e,{className:"min-icon",fill:"currentcolor",id:"Account_Icon","data-name":"Account Icon",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16.409 13.096"}),r.createElement("path",{id:"Trazado_391","data-name":"Trazado 391",d:"M-4332.855-1143.481a3.023,3.023,0,0,0,2.958-3.078,3.023,3.023,0,0,0-2.958-3.078,3.023,3.023,0,0,0-2.958,3.078A3.023,3.023,0,0,0-4332.855-1143.481Zm0-5.194a2.078,2.078,0,0,1,2.03,2.116,2.077,2.077,0,0,1-2.03,2.116,2.075,2.075,0,0,1-2.028-2.116A2.076,2.076,0,0,1-4332.855-1148.675Z",transform:"translate(4339.12 1149.637)"}),r.createElement("path",{id:"Trazado_392","data-name":"Trazado 392",d:"M-4337.952-1130.053a1.374,1.374,0,0,0,1.252.775h4.993a1.354,1.354,0,0,0,1.25-.786,1.675,1.675,0,0,0-.164-1.686,4.521,4.521,0,0,0-1.7-1.405,4.361,4.361,0,0,0-2.125-.438,4.483,4.483,0,0,0-3.318,1.808c-.026.035-.051.071-.075.106A1.641,1.641,0,0,0-4337.952-1130.053Zm6.663-.437a.426.426,0,0,1-.417.25h-4.993a.453.453,0,0,1-.427-.254.64.64,0,0,1,.053-.632h0c.017-.027.037-.054.057-.08a3.539,3.539,0,0,1,2.622-1.424c.056,0,.113,0,.168,0a3.606,3.606,0,0,1,2.864,1.466A.686.686,0,0,1-4331.29-1130.49Z",transform:"translate(4340.467 1140.236)"}),r.createElement("path",{id:"Trazado_393","data-name":"Trazado 393",d:"M-4329.387-1146.951h-3.506a.476.476,0,0,0-.477.476.477.477,0,0,0,.477.476h3.506a1.047,1.047,0,0,1,1.046,1.045v7.99a1.047,1.047,0,0,1-1.046,1.045H-4341.8a1.047,1.047,0,0,1-1.046-1.045v-7.99A1.048,1.048,0,0,1-4341.8-1146a.476.476,0,0,0,.476-.476.476.476,0,0,0-.476-.476,2,2,0,0,0-2,2v7.99a2,2,0,0,0,2,2h12.412a2,2,0,0,0,2-2v-7.99A2,2,0,0,0-4329.387-1146.951Z",transform:"translate(4343.797 1148.063)"}),r.createElement("rect",{id:"Rect\xe1ngulo_809","data-name":"Rect\xe1ngulo 809",width:"3.266",height:"2.781",rx:"1.024",transform:"translate(11.002 3.376)"}),r.createElement("rect",{id:"Rect\xe1ngulo_810","data-name":"Rect\xe1ngulo 810",width:"3.266",height:"1.336",rx:"0.668",transform:"translate(11.002 7.328)"}),r.createElement("rect",{id:"Rect\xe1ngulo_811","data-name":"Rect\xe1ngulo 811",width:"3.266",height:"1.336",rx:"0.668",transform:"translate(11.002 9.621)"}))},Pi=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"clip-path"},r.createElement("rect",{id:"Rect\xe1ngulo_1039","data-name":"Rect\xe1ngulo 1039",width:"256",height:"215.188",fill:"none"})),r.createElement("clipPath",{id:"clip-Create_Group"},r.createElement("rect",{width:"256",height:"256"}))),r.createElement("g",{id:"Create_Group","data-name":"Create Group",clipPath:"url(#clip-Create_Group)"},r.createElement("g",{id:"Create_Group_Icon","data-name":"Create Group Icon"},r.createElement("g",{id:"Grupo_2428","data-name":"Grupo 2428",transform:"translate(0 20)"},r.createElement("g",{id:"Grupo_2427","data-name":"Grupo 2427"},r.createElement("path",{id:"Trazado_7184","data-name":"Trazado 7184",d:"M498.413,74.672a63.2,63.2,0,0,1-3.786,21.575c.9.049,1.8.078,2.709.078,26.871,0,48.733-21.605,48.733-48.162S524.2,0,497.337,0a48.855,48.855,0,0,0-36.642,16.469,64.109,64.109,0,0,1,37.719,58.2",transform:"translate(-305.609 0)",fill:"#4ccb92"}),r.createElement("path",{id:"Trazado_7185","data-name":"Trazado 7185",d:"M95.34,96.326c.921,0,1.836-.031,2.744-.081A63.2,63.2,0,0,1,94.3,74.674a64.109,64.109,0,0,1,37.693-58.2A48.867,48.867,0,0,0,95.34,0C68.473,0,46.614,21.605,46.614,48.163S68.473,96.326,95.34,96.326",transform:"translate(-30.922 0)",fill:"#4ccb92"}),r.createElement("path",{id:"Trazado_7186","data-name":"Trazado 7186",d:"M80.135,346.621a97.66,97.66,0,0,1,21.039-9.138,64.833,64.833,0,0,1-30.526-28.792c-2.2-.2-4.4-.306-6.612-.308-1.071,0-2.152.027-3.221.075-.121,0-.243.005-.365.011a70.315,70.315,0,0,0-7.835.841c-18.427,3-35.857,13.09-46.8,27.434-.419.55-.838,1.119-1.223,1.65l-.005.008a24.616,24.616,0,0,0-1.906,25.48,22.559,22.559,0,0,0,3.644,5.089,22.224,22.224,0,0,0,4.817,3.812,23.01,23.01,0,0,0,5.736,2.385,24.94,24.94,0,0,0,6.409.823H49.714a37.659,37.659,0,0,1,2.685-4.371l.027-.038.046-.063c.569-.785,1.067-1.457,1.525-2.058a90.337,90.337,0,0,1,26.138-22.841",transform:"translate(0 -204.572)",fill:"#4ccb92"}),r.createElement("path",{id:"Trazado_7187","data-name":"Trazado 7187",d:"M215.477,113.623c0,30.276,24.92,54.907,55.549,54.907s55.557-24.63,55.557-54.907-24.929-54.907-55.557-54.907-55.549,24.63-55.549,54.907",transform:"translate(-142.94 -38.95)",fill:"#4ccb92"}),r.createElement("path",{id:"Trazado_7188","data-name":"Trazado 7188",d:"M358.424,337.287l0,0a73.77,73.77,0,0,0-27.955-21.978A77.668,77.668,0,0,0,315,310.141a74.21,74.21,0,0,0-15.959-1.757c-1.071,0-2.152.028-3.22.075-.122.005-.244.006-.365.011-.73.036-1.46.088-2.189.147a64.831,64.831,0,0,1-14.437,18.4,47.462,47.462,0,0,0-24.218,17.921c-.357-.083-.713-.172-1.071-.252a84.586,84.586,0,0,0-18.192-2c-1.221,0-2.454.031-3.671.085-.138.005-.277.006-.416.012a80.086,80.086,0,0,0-8.933.959c-21.008,3.419-40.879,14.924-53.349,31.275-.478.628-.955,1.276-1.394,1.882l-.006.008a28.062,28.062,0,0,0-2.177,29.05,25.77,25.77,0,0,0,4.155,5.8,25.368,25.368,0,0,0,5.491,4.346,26.29,26.29,0,0,0,6.541,2.718,28.435,28.435,0,0,0,7.306.938h93.79a28.421,28.421,0,0,0,5.814-.589,47.926,47.926,0,0,0,4.917.253A47.353,47.353,0,0,0,340.6,375.992a24.947,24.947,0,0,0,6.424-.835,22.741,22.741,0,0,0,5.751-2.418,21.778,21.778,0,0,0,4.793-3.867,22.122,22.122,0,0,0,3.581-5.16,25.152,25.152,0,0,0-2.726-26.426m-64.729,72.2a37.411,37.411,0,1,1,37.411-37.411A37.411,37.411,0,0,1,293.7,409.484",transform:"translate(-107.694 -204.572)",fill:"#4ccb92"}),r.createElement("path",{id:"Trazado_7189","data-name":"Trazado 7189",d:"M523.713,445.287H511.978v11.735H500.243v11.735h11.735v11.735h11.735V468.757h11.735V457.022H523.713Z",transform:"translate(-331.844 -295.388)",fill:"#4ccb92"}))),r.createElement("rect",{id:"Rect\xe1ngulo_1040","data-name":"Rect\xe1ngulo 1040",width:"256",height:"256",fill:"none"}))))},Bi=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("g",{"data-name":"CollapseIcon"},r.createElement("path",{"data-name":"Rect\\xE1ngulo 841",fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 842",d:"M0 46h256v28H0z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 843",d:"M0 116h256v28H0z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 844",d:"M0 186h256v28H0z"}))))},Fi=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"clip-path"},r.createElement("rect",{id:"Rect\xe1ngulo_1030","data-name":"Rect\xe1ngulo 1030",width:"256.722",height:"256.722",fill:"none"})),r.createElement("clipPath",{id:"clip-Generic_Delete"},r.createElement("rect",{width:"256",height:"256"}))),r.createElement("g",{id:"Generic_Delete","data-name":"Generic Delete",clipPath:"url(#clip-Generic_Delete)"},r.createElement("g",{id:"Generic_Delete_Icon","data-name":"Generic Delete Icon"},r.createElement("g",{id:"Grupo_2418","data-name":"Grupo 2418"},r.createElement("path",{id:"Trazado_7169","data-name":"Trazado 7169",d:"M128.362,0a128.361,128.361,0,1,0,128.36,128.361A128.361,128.361,0,0,0,128.362,0m.764,229.776A101.415,101.415,0,1,1,230.541,128.361,101.415,101.415,0,0,1,129.126,229.776",fill:"#c83b51"}),r.createElement("path",{id:"Trazado_7170","data-name":"Trazado 7170",d:"M239.678,162.575l-18.744-19.187a4.572,4.572,0,0,0-6.36,0l-22.136,22.661-22.133-22.661a4.44,4.44,0,0,0-6.356,0L145.2,162.575a4.45,4.45,0,0,0,0,6.211L167.491,191.6,145.2,214.411a4.45,4.45,0,0,0,0,6.211l18.746,19.189a4.571,4.571,0,0,0,6.358,0l22.133-22.661,22.136,22.661a4.442,4.442,0,0,0,6.358,0l18.744-19.189a4.445,4.445,0,0,0,0-6.211L217.392,191.6l22.286-22.814a4.445,4.445,0,0,0,0-6.211",transform:"translate(-64.082 -63.239)",fill:"#c83b51"})))))},Ui=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"Offline-Registration_svg__a"},r.createElement("path",{"data-name":"Rect\\xE1ngulo 1604",fill:"none",d:"M0 0h256v199.086H0z"}))),r.createElement("path",{"data-name":"Rect\\xE1ngulo 1602",fill:"none",d:"M0 0h256v256H0z"}),r.createElement("g",{"data-name":"Grupo 2526"},r.createElement("path",{"data-name":"Rect\\xE1ngulo 1603",d:"m19.235 39.602 10.497-10.49L218.26 217.77l-10.497 10.49z"}),r.createElement("g",{"data-name":"Grupo 2525"},r.createElement("g",{"data-name":"Grupo 2524",clipPath:"url(#Offline-Registration_svg__a)",transform:"translate(0 29.146)"},r.createElement("path",{"data-name":"Trazado 7273",d:"m17.968 79.492.007.015a55.559 55.559 0 0 0-17.96 42.3 57.238 57.238 0 0 0 18.783 42.92 65.482 65.482 0 0 0 44.3 16.431h105.817L51.268 63.545a68.63 68.63 0 0 0-33.3 15.947"}),r.createElement("path",{"data-name":"Trazado 7274",d:"m222.825 99.169-.074.015h-.333l-.326-.03a22.226 22.226 0 0 1-9.028-2.8 4.017 4.017 0 0 0-.651-.3 3.823 3.823 0 0 0-.533.244 18.331 18.331 0 0 1-9.665 2.745 18.542 18.542 0 0 1-3.559-.348l-.955-.185-.866-.429a19.149 19.149 0 0 1-9.332-10 5.281 5.281 0 0 0-.3-.525 4.064 4.064 0 0 0-.474-.1 18.625 18.625 0 0 1-12.12-6.21l-.585-.666-.422-.792a19.8 19.8 0 0 1-1.843-13.35 6.256 6.256 0 0 0 .067-.9 4.811 4.811 0 0 0-.437-.511 19.647 19.647 0 0 1-6.209-12.306l-.089-.807.089-.8a19.526 19.526 0 0 1 5.21-11.211c-.644-.688-1.251-1.413-1.924-2.079a71.234 71.234 0 0 0-49.687-19.901 68.071 68.071 0 0 0-38.525 11.6l140.41 140.462c.118-.1.266-.192.392-.289v-.007a45.043 45.043 0 0 0 16.428-36.742c0-14.652-5.876-25.849-14.66-33.774"}),r.createElement("path",{"data-name":"Trazado 7275",d:"M255.963 51.509a15.953 15.953 0 0 0-5.121-10.049 8.872 8.872 0 0 1-1.48-1.991 9.8 9.8 0 0 1 .059-2.753 16.071 16.071 0 0 0-1.487-10.967l-.207-.385-.3-.333a14.943 14.943 0 0 0-9.82-5 8.149 8.149 0 0 1-2.316-.7 8.935 8.935 0 0 1-1.359-2.096 15.448 15.448 0 0 0-7.563-8.192l-.437-.215-.481-.1a14.62 14.62 0 0 0-10.633 1.965 8.262 8.262 0 0 1-2.405.888 8.3 8.3 0 0 1-2.401-.888 14.639 14.639 0 0 0-10.638-1.961l-.474.1-.444.215a15.505 15.505 0 0 0-7.563 8.192 8.821 8.821 0 0 1-1.369 2.109 8.149 8.149 0 0 1-2.316.7 14.96 14.96 0 0 0-9.82 5l-.3.333-.207.392a16.144 16.144 0 0 0-1.48 10.9 9.96 9.96 0 0 1 .059 2.775 9.2 9.2 0 0 1-1.487 2.013 15.9 15.9 0 0 0-5.103 10.048l-.044.4.044.4a15.934 15.934 0 0 0 5.106 10.057 9.031 9.031 0 0 1 1.487 1.983 9.861 9.861 0 0 1-.059 2.76 16.112 16.112 0 0 0 1.48 10.952l.207.392.3.333a14.96 14.96 0 0 0 9.82 5 8.149 8.149 0 0 1 2.316.7 9.082 9.082 0 0 1 1.376 2.109 15.446 15.446 0 0 0 7.563 8.162l.437.215.474.089a14.639 14.639 0 0 0 10.635-1.96 8.262 8.262 0 0 1 2.405-.888 8.533 8.533 0 0 1 2.472.925 18.627 18.627 0 0 0 7.526 2.331l.155.015h.185a9.794 9.794 0 0 0 3.16-.525l.229-.074.215-.111a15.421 15.421 0 0 0 7.57-8.185 9.2 9.2 0 0 1 1.376-2.1 8.03 8.03 0 0 1 2.309-.7 14.943 14.943 0 0 0 9.82-5l.3-.326.2-.392a15.981 15.981 0 0 0 1.487-10.982 10.04 10.04 0 0 1-.059-2.745 8.957 8.957 0 0 1 1.48-1.976 15.953 15.953 0 0 0 5.121-10.049l.044-.407Zm-47.751 15.655-15.387-16.081 5.454-5.683 9.933 10.353 18.342-19.108 5.458 5.706Z"})))))},zi=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Trazado 394",d:"M222.617 88.875a26.012 26.012 0 0 0-23.281 14.452l-44.307-6.454a74.856 74.856 0 0 0 2.892-20.607A74.732 74.732 0 0 0 83.285 1.439 74.732 74.732 0 0 0 8.643 76.266a74.763 74.763 0 0 0 65.415 74.236l-1.38 25.452c-.127-.006-.249-.019-.371-.019a18.44 18.44 0 0 0-18.42 18.46 18.441 18.441 0 0 0 18.42 18.466 18.443 18.443 0 0 0 18.42-18.466 18.459 18.459 0 0 0-7.851-15.108l1.535-28.223a74.164 74.164 0 0 0 32.006-7.749l39.5 51.413a36.849 36.849 0 0 0-10.488 25.784 36.884 36.884 0 0 0 36.84 36.927 36.88 36.88 0 0 0 36.834-36.927 36.881 36.881 0 0 0-36.834-36.931 36.539 36.539 0 0 0-18.137 4.811l-38.7-50.376a75.035 75.035 0 0 0 25.967-31.174l45.242 6.59c-.029.519-.078 1.032-.078 1.556a26.082 26.082 0 0 0 26.051 26.112 26.082 26.082 0 0 0 26.05-26.112 26.082 26.082 0 0 0-26.047-26.113Z"}),r.createElement("path",{"data-name":"Trazado 395",d:"M181.396 256a38.679 38.679 0 0 1-38.636-38.643 38.393 38.393 0 0 1 9.576-25.436l-36.435-47.307a74.862 74.862 0 0 1-28.494 6.932l-1.318 24.217a20.571 20.571 0 0 1 7.657 15.975 20.545 20.545 0 0 1-20.52 20.514 20.54 20.54 0 0 1-20.518-20.514 20.549 20.549 0 0 1 18.6-20.432l1.125-20.571A75.865 75.865 0 0 1 8.2 75.818 75.907 75.907 0 0 1 84.02-.005a75.908 75.908 0 0 1 75.822 75.823 75.76 75.76 0 0 1-2.229 18.236l39.257 5.7a27.844 27.844 0 0 1 24.216-13.965 28.051 28.051 0 0 1 28.018 28.022 28.051 28.051 0 0 1-28.018 28.022 28.052 28.052 0 0 1-28.02-27.48l-40.61-5.9a76.059 76.059 0 0 1-23.551 28.463l35.308 45.854a38.644 38.644 0 0 1 17.18-4.049 38.678 38.678 0 0 1 38.633 38.634A38.678 38.678 0 0 1 181.396 256Zm-64.078-117.413 41.329 53.665-1.453 1.492a33.619 33.619 0 0 0-9.635 23.618 33.876 33.876 0 0 0 33.837 33.84 33.875 33.875 0 0 0 33.835-33.84 33.874 33.874 0 0 0-33.835-33.837 33.822 33.822 0 0 0-16.657 4.409l-1.814 1.027-40.89-53.094 2.092-1.434a71.22 71.22 0 0 0 24.718-29.586l.739-1.65 48.482 7.038-.133 2.2c-.049.739-.073 1.055-.073 1.381a23.253 23.253 0 0 0 23.227 23.225 23.249 23.249 0 0 0 23.222-23.225 23.246 23.246 0 0 0-23.222-23.224 23.1 23.1 0 0 0-20.759 12.852l-.776 1.549-48.012-6.975.759-2.639a71.253 71.253 0 0 0 2.749-19.559A71.1 71.1 0 0 0 84.022 4.794 71.1 71.1 0 0 0 12.999 75.82a71.061 71.061 0 0 0 62.243 70.465l2.225.273-1.608 29.524-2.318-.043h-.037a15.779 15.779 0 0 0-16 15.7 15.739 15.739 0 0 0 15.721 15.717 15.741 15.741 0 0 0 15.722-15.717 15.763 15.763 0 0 0-6.7-12.866l-1.09-.763 1.7-31.26 2.235-.033a70.305 70.305 0 0 0 30.455-7.355Z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 868",fill:"none",d:"M0 0h256v256H0z"})))},Hi=function(e){return r.createElement("svg",je({},e,{className:"min-icon",fill:"currentcolor",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 13 12.996"}),r.createElement("g",{transform:"translate(-63.686 -70.783)"},r.createElement("path",{className:"a",d:"M74.736,79.879v1.95h-9.1v-1.95h-1.95v3.9h13v-3.9Z"}),r.createElement("path",{className:"a",d:"M69.211,80.533h1.95V73.861h1.525l-2.5-3.078-2.5,3.078h1.525Z"})))},Gi=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 858",fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Uni\\xF3n 20",d:"M102.405 230.399v-76.79h-76.8a25.607 25.607 0 0 1 0-51.214h76.8V25.601a25.6 25.6 0 1 1 51.2 0v76.792h76.8a25.607 25.607 0 0 1 0 51.214h-76.8v76.792a25.6 25.6 0 1 1-51.2 0Z"})))},ji=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"clip-path"},r.createElement("rect",{id:"Rect\xe1ngulo_1005","data-name":"Rect\xe1ngulo 1005",width:"228.951",height:"256",fill:"none"})),r.createElement("clipPath",{id:"clip-Expand_Tenant:_Add_Pools"},r.createElement("rect",{width:"256",height:"256"}))),r.createElement("g",{id:"Expand_Tenant:_Add_Pools","data-name":"Expand Tenant: Add Pools",clipPath:"url(#clip-Expand_Tenant:_Add_Pools)"},r.createElement("g",{id:"Expand_Tenants_Add_Pools","data-name":"Expand Tenants Add Pools"},r.createElement("g",{id:"Grupo_2392","data-name":"Grupo 2392",transform:"translate(14)"},r.createElement("g",{id:"Grupo_2391","data-name":"Grupo 2391"},r.createElement("path",{id:"Trazado_7129","data-name":"Trazado 7129",d:"M210.46,96.042a56.244,56.244,0,1,0-90.223-64.6A71.157,71.157,0,0,0,0,83.178v0A71.315,71.315,0,0,0,62.4,154l-1.316,24.278c-.121-.006-.238-.018-.354-.018a17.611,17.611,0,0,0,0,35.223h0a17.613,17.613,0,0,0,10.082-32.025l1.464-26.922a70.737,70.737,0,0,0,30.53-7.391l37.678,49.042a35.174,35.174,0,1,0,60.272,24.6h0a35.181,35.181,0,0,0-35.132-35.228h0a34.864,34.864,0,0,0-17.3,4.589L111.4,142.085a71.574,71.574,0,0,0,24.769-29.736l43.156,6.286c-.028.495-.075.985-.075,1.484A24.849,24.849,0,1,0,210.46,96.042m-39.406,4.639A44.437,44.437,0,1,1,215.49,56.244a44.437,44.437,0,0,1-44.437,44.437",transform:"translate(0)",fill:"#4ccb92"}),r.createElement("path",{id:"Trazado_7130","data-name":"Trazado 7130",d:"M224.419,96.438l-6.231-6.231V108.9H236.88l-6.23-6.231L243.11,90.207l-6.231-6.23Z",transform:"translate(-72.057 -27.733)",fill:"#4ccb92"}),r.createElement("path",{id:"Trazado_7131","data-name":"Trazado 7131",d:"M267.86,53,255.4,65.457l6.23,6.231L274.09,59.227l6.231,6.23V46.766H261.629Z",transform:"translate(-84.346 -15.444)",fill:"#4ccb92"}))),r.createElement("rect",{id:"Rect\xe1ngulo_1006","data-name":"Rect\xe1ngulo 1006",width:"256",height:"256",fill:"none"}))))},Vi=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 849",fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"sync-icn",d:"M37.848 131.79c0-.057.006-.114.006-.166l-5.4 6.524-9.992 11.438c-11.006 12.6-30.166-4.136-19.16-16.739l33.545-38.416a12.732 12.732 0 0 1 18.1-1.222l38.41 33.549c12.6 11.006-4.133 30.171-16.74 19.165l-14.342-12.527-2.316-2.123c0 .175.023.346.023.517a73.159 73.159 0 0 0 73.078 73.078 73.28 73.28 0 0 0 59.584-30.763 11.067 11.067 0 0 1 15.432-2.6 11.062 11.062 0 0 1 2.6 15.432 95.45 95.45 0 0 1-77.611 40.059 95.316 95.316 0 0 1-95.217-95.206Zm163.207 21.989-38.4-33.549c-12.6-11.011 4.131-30.176 16.738-19.17l14.338 12.532 2.32 2.118c0-.171-.023-.336-.023-.512A73.159 73.159 0 0 0 122.95 42.12a73.289 73.289 0 0 0-59.588 30.759 11.068 11.068 0 0 1-15.432 2.6 11.071 11.071 0 0 1-2.6-15.431 95.439 95.439 0 0 1 77.615-40.06 95.317 95.317 0 0 1 95.209 95.209c0 .057-.01.109-.01.166l5.4-6.529 9.992-11.433c11.006-12.6 30.17 4.136 19.16 16.739l-33.545 38.415a12.894 12.894 0 0 1-9.689 4.43 12.7 12.7 0 0 1-8.407-3.205Z",stroke:"rgba(0,0,0,0)",strokeMiterlimit:10})))},Zi=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 870",fill:"none",d:"M255.999.001v256h-256v-256z"}),r.createElement("path",{"data-name":"Trazado 454",d:"M-.001 16.413A16.487 16.487 0 0 1 16.536-.001h135.381c21.752 0 21.752 32.824 0 32.824H33.088v190.355h118.829c21.752 0 21.752 32.822 0 32.822H16.536A16.477 16.477 0 0 1-.001 239.6Zm61.308 95.176h138.227l-18.743-18.588c-15.385-15.262 8-38.471 23.393-23.205l46.878 46.5a16.345 16.345 0 0 1 0 23.408l-46.878 46.51c-15.39 15.266-38.777-7.949-23.393-23.211l18.744-18.592H61.308c-10.872 0-16.307-8.205-16.307-16.41s5.435-16.412 16.307-16.412Z"}),r.createElement("path",{"data-name":"Trazado 454 - Contorno",d:"M-.501 239.601V16.417A17 17 0 0 1 16.536-.497h135.381a16.259 16.259 0 0 1 12.61 5.3 16.393 16.393 0 0 1 3.156 5.422 18.547 18.547 0 0 1 1.048 6.193 18.547 18.547 0 0 1-1.048 6.193 16.393 16.393 0 0 1-3.156 5.422 16.259 16.259 0 0 1-12.61 5.3H33.588v189.355h118.329a16.259 16.259 0 0 1 12.61 5.3 16.374 16.374 0 0 1 3.156 5.422 18.528 18.528 0 0 1 1.048 6.191 18.531 18.531 0 0 1-1.048 6.193 16.374 16.374 0 0 1-3.156 5.422 16.259 16.259 0 0 1-12.61 5.3H16.536a17.034 17.034 0 0 1-6.625-1.328 16.992 16.992 0 0 1-5.416-3.621 16.846 16.846 0 0 1-3.655-5.373 16.663 16.663 0 0 1-1.341-6.593ZM167.731 16.415a17.535 17.535 0 0 0-.991-5.859 15.388 15.388 0 0 0-2.962-5.094A15.286 15.286 0 0 0 151.917.503H16.536A15.994 15.994 0 0 0 .499 16.417v223.184a15.989 15.989 0 0 0 16.037 15.9h135.381a15.286 15.286 0 0 0 11.861-4.959 15.368 15.368 0 0 0 2.962-5.094 17.518 17.518 0 0 0 .991-5.859 17.515 17.515 0 0 0-.991-5.857 15.368 15.368 0 0 0-2.962-5.094 15.286 15.286 0 0 0-11.861-4.959H32.588V32.324h119.329a15.286 15.286 0 0 0 11.861-4.959 15.388 15.388 0 0 0 2.962-5.094 17.526 17.526 0 0 0 .992-5.86ZM44.499 128.001a18.547 18.547 0 0 1 1.048-6.193 16.37 16.37 0 0 1 3.154-5.422 16.248 16.248 0 0 1 12.6-5.3h137.013L180.432 93.35a16.238 16.238 0 0 1-5.179-11.6 16.682 16.682 0 0 1 3.251-9.711 19.071 19.071 0 0 1 8.051-6.451 15.968 15.968 0 0 1 8.961-1.051 17 17 0 0 1 9.013 4.9l46.878 46.5a16.869 16.869 0 0 1 5.084 12.006 16.81 16.81 0 0 1-1.3 6.482 17.213 17.213 0 0 1-3.786 5.631l-46.879 46.51a16.976 16.976 0 0 1-9.01 4.9 15.975 15.975 0 0 1-8.958-1.049 19.084 19.084 0 0 1-8.054-6.453 16.694 16.694 0 0 1-3.254-9.715 16.237 16.237 0 0 1 5.179-11.6l17.882-17.736H61.298a16.249 16.249 0 0 1-12.6-5.3 16.351 16.351 0 0 1-3.154-5.422 18.527 18.527 0 0 1-1.045-6.19Zm156.248-15.912H61.306a15.275 15.275 0 0 0-11.855 4.959 15.365 15.365 0 0 0-2.961 5.094 17.538 17.538 0 0 0-.991 5.859 17.547 17.547 0 0 0 .991 5.859 15.375 15.375 0 0 0 2.961 5.092 15.276 15.276 0 0 0 11.855 4.959h139.443l-.862.855-18.744 18.592a15.257 15.257 0 0 0-4.883 10.891 15.7 15.7 0 0 0 3.067 9.133 18.064 18.064 0 0 0 7.625 6.111 14.955 14.955 0 0 0 8.4.988 16 16 0 0 0 8.482-4.625l46.878-46.51a16.222 16.222 0 0 0 3.567-5.3 15.825 15.825 0 0 0 1.222-6.1 15.868 15.868 0 0 0-4.789-11.295l-46.878-46.5a16.011 16.011 0 0 0-8.485-4.627 15 15 0 0 0-8.4.988 18.055 18.055 0 0 0-7.623 6.111 15.688 15.688 0 0 0-3.064 9.129 15.259 15.259 0 0 0 4.883 10.893Z",fill:"rgba(0,0,0,0)"})))},Wi=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 22 17.043"},e),r.createElement("g",{id:"azure-logo-gray",transform:"translate(-437.603 -471.382)"},r.createElement("g",{id:"layer1-1",transform:"translate(437.603 471.382)"},r.createElement("path",{id:"path21",d:"M447.781,487.513l5.188-.917.049-.011-2.668-3.173c-1.467-1.746-2.668-3.181-2.668-3.188s2.756-7.6,2.771-7.63c.006-.009,1.881,3.229,4.545,7.847l4.572,7.923.035.062-8.479,0-8.48,0S447.781,487.513,447.781,487.513Zm-10.178-.969s1.257-2.187,2.794-4.85l2.794-4.842,3.257-2.733c1.792-1.5,3.261-2.735,3.266-2.737a.672.672,0,0,1-.052.132c-.035.074-1.627,3.487-3.535,7.583l-3.472,7.448-2.525,0C438.739,486.551,437.6,486.55,437.6,486.544Z",transform:"translate(-437.603 -471.382)"}))))},$i=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{"data-name":"Total Objects",clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"total-objects-icn",d:"M-.004 128.002a128.148 128.148 0 0 1 128-128 128.148 128.148 0 0 1 128 128 128.144 128.144 0 0 1-128 128 128.144 128.144 0 0 1-128-128Zm19.844 0a108.275 108.275 0 0 0 108.156 108.155 108.28 108.28 0 0 0 108.16-108.155 108.283 108.283 0 0 0-108.16-108.157A108.278 108.278 0 0 0 19.842 128.002Zm27.555 31.581a37.6 37.6 0 0 1 37.564-37.565 37.608 37.608 0 0 1 37.561 37.565 37.609 37.609 0 0 1-37.561 37.565 37.606 37.606 0 0 1-37.563-37.566Zm108.127 34.939a17.425 17.425 0 0 1-17.408-17.4v-37.7a17.429 17.429 0 0 1 17.408-17.407h37.689a17.429 17.429 0 0 1 17.408 17.407v37.7a17.425 17.425 0 0 1-17.408 17.4Zm-54.881-81.311a13.3 13.3 0 0 1-11.477-6.625 13.3 13.3 0 0 1 0-13.249l26.861-46.521a13.287 13.287 0 0 1 11.477-6.629 13.281 13.281 0 0 1 11.475 6.629l26.861 46.521a13.285 13.285 0 0 1 0 13.249 13.294 13.294 0 0 1-11.479 6.625Z",stroke:"rgba(0,0,0,0)",strokeMiterlimit:10}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 853",fill:"none",d:"M0 0h256v256H0z"})))},qi=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("g",null,r.createElement("path",{fill:"currentcolor",d:"M145.4,20C86.3,20.1,38.3,67.6,37.5,126.6L24.8,114c-5.2-5-13.4-4.9-18.5,0.2\n\t\tc-4.9,5.1-4.9,13.2,0,18.2l37,37c5.1,5.1,13.3,5.2,18.5,0.1c0,0,0.1-0.1,0.1-0.1l37-37c4.9-5.3,4.6-13.5-0.7-18.5\n\t\tc-5-4.7-12.8-4.7-17.8,0l-13.8,13.8c0.2-43.4,35.4-78.5,78.8-78.5c43.5,0,78.8,35.3,78.8,78.8c0,43.5-35.3,78.8-78.8,78.8\n\t\tc-8.1,0-14.6,6.5-14.6,14.6s6.5,14.6,14.6,14.6c59.6-0.1,107.8-48.4,107.9-107.9C253.4,68.5,205.1,20.1,145.4,20z"}),r.createElement("path",{fill:"currentcolor",d:"M150.7,81.1c0.2-1.5-0.3-3-1.2-4.2c-1.3-0.9-2.9-1.3-4.4-1.1h-7.4c-1.2-0.1-2.3,0.2-3.3,0.8\n\t\tc-0.9,1.1-1.4,2.5-1.2,4c0,18.9,0,37.8,0,56.6v0.9l40.4,40.4c0.6,0.7,1.4,1.3,2.3,1.5c1.2,0.1,2.5-0.4,3.4-1.2c2.7-2,5-4.4,7-7.1\n\t\tc0.9-0.9,1.3-2.1,1.2-3.4c-0.3-0.9-0.8-1.8-1.6-2.4l-29.6-29.4c-1.9-1.7-3.5-3.7-4.7-6c-1-2.8-1.3-5.7-1-8.6\n\t\tC150.9,108.3,150.9,94.7,150.7,81.1z"})))},Yi=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"clip-path"},r.createElement("rect",{id:"Rect\xe1ngulo_1016","data-name":"Rect\xe1ngulo 1016",width:"234.495",height:"256",fill:"#4ccb92"})),r.createElement("clipPath",{id:"clip-Create_User"},r.createElement("rect",{width:"256",height:"256"}))),r.createElement("g",{id:"Create_User","data-name":"Create User",clipPath:"url(#clip-Create_User)"},r.createElement("g",{id:"Create_User-2","data-name":"Create User"},r.createElement("g",{id:"Grupo_2404","data-name":"Grupo 2404",transform:"translate(12)"},r.createElement("g",{id:"Grupo_2403","data-name":"Grupo 2403"},r.createElement("path",{id:"Trazado_7140","data-name":"Trazado 7140",d:"M88.829,144.6h.048a66.829,66.829,0,0,0,27.035-5.707,69.009,69.009,0,0,0,22.1-15.529,72.055,72.055,0,0,0,14.891-22.977,73.863,73.863,0,0,0,5.463-28.1C158.372,32.435,127.183,0,88.831,0h0C50.5,0,19.316,32.43,19.316,72.292S50.5,144.6,88.829,144.6",transform:"translate(1.421)",fill:"#4ccb92"}),r.createElement("path",{id:"Trazado_7141","data-name":"Trazado 7141",d:"M170.085,117.467a64.39,64.39,0,0,0-57.412,35.223c-1.427-.4-2.86-.784-4.3-1.124A94.705,94.705,0,0,0,86.9,149.044v.005c-1.755,0-3.439.046-5,.135A99.747,99.747,0,0,0,8.1,189.42c-.388.519-.767,1.061-1.234,1.756l-.107.15c-.1.142-.214.3-.312.458l-.027.028a37.88,37.88,0,0,0-2.671,37.522A31.97,31.97,0,0,0,32.509,247.36H142.044a31.485,31.485,0,0,0,13.08-2.84,64.408,64.408,0,1,0,14.961-127.054m.383,115.3a50.889,50.889,0,1,1,50.888-50.888,50.888,50.888,0,0,1-50.888,50.888m-7.982-26.944V189.859H146.524V173.895h15.963V157.931H178.45v15.964h15.963v15.964H178.45v15.963Z",transform:"translate(0 8.64)",fill:"#4ccb92"}))),r.createElement("rect",{id:"Rect\xe1ngulo_1017","data-name":"Rect\xe1ngulo 1017",width:"256",height:"256",fill:"none"}))))},Ki=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("g",null,r.createElement("path",{d:"M244.1,8.4c-3.9-5.3-10.1-8.5-16.7-8.5H21.6C15,0,8.8,3.1,4.9,8.4C0.8,14-0.9,21,0.3,27.9\n\t\t\t\t\t\tc5.1,29.6,15.8,91.9,24.3,141.7v0.1C29,195,32.8,217.1,35,229.9c1.4,10.8,10.4,18.9,21.3,19.3h136.5\n\t\t\t\t\t\tc10.9-0.4,19.9-8.5,21.3-19.3l10.3-60.1l0.1-0.4L238.4,88v-0.2l10.3-59.9C249.9,21,248.3,14,244.1,8.4 M206.1,177h-163\n\t\t\t\t\t\tl-3.2-18.6h169.3L206.1,177z M220,95.3H28.9l-3.2-18.6h197.4L220,95.3z"})))},Xi=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("path",{d:"M125.65,251.3h0c69.4,0,125.65-56.26,125.65-125.65h0C251.3,56.26,195.05,0,125.65,0h0C56.26,0,0,56.26,0,125.65s56.26,125.65,125.65,125.65M84.14,87.53l31.76-31.76c5.32-5.39,14-5.45,19.39-.13,.04,.04,.09,.09,.13,.13h0l31.74,31.76c3.97,3.69,5.22,9.46,3.14,14.47-2.19,5.32-7.3,8.87-13.05,9.06-3.57-.06-6.97-1.55-9.42-4.15l-8.4-8.4v87.53c0,7.57-6.15,13.71-13.72,13.7-7.57,0-13.7-6.14-13.7-13.7V98.53l-8.4,8.39c-2.45,2.6-5.85,4.1-9.42,4.16-5.76-.18-10.87-3.73-13.05-9.06-2.09-5-.83-10.78,3.14-14.47"}))},Qi=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"clip-path"},r.createElement("rect",{id:"Rect\xe1ngulo_1021","data-name":"Rect\xe1ngulo 1021",width:"256",height:"191.369",fill:"#4ccb92"})),r.createElement("clipPath",{id:"clip-Set_Bucket_Replication"},r.createElement("rect",{width:"256",height:"256"}))),r.createElement("g",{id:"Set_Bucket_Replication","data-name":"Set Bucket Replication",clipPath:"url(#clip-Set_Bucket_Replication)"},r.createElement("g",{id:"Set_Bucket_Replication_icon","data-name":"Set Bucket Replication icon"},r.createElement("g",{id:"Grupo_2409","data-name":"Grupo 2409",transform:"translate(0 32)"},r.createElement("g",{id:"Grupo_2408","data-name":"Grupo 2408"},r.createElement("path",{id:"Trazado_7146","data-name":"Trazado 7146",d:"M21.3,87.4l-1.578-9.192H46.838c-.123-.722-.249-1.449-.371-2.162-1.931-11.245-3.66-21.315-4.976-28.97l-27.171.006-1.577-9.19H40.71a20.546,20.546,0,0,1,3.951-10.1,17.7,17.7,0,0,1,14.016-7.169h62.949l1.169-6.805a12.394,12.394,0,0,0-2.281-9.6A10.335,10.335,0,0,0,112.289,0H10.7A10.33,10.33,0,0,0,2.474,4.215a12.426,12.426,0,0,0-2.284,9.6C2.7,28.413,7.977,59.178,12.2,83.733l.007.048c2.141,12.491,4,23.369,5.1,29.683.943,5.519,5.354,9.523,10.5,9.523H54.529C52.5,111.17,50.4,98.923,48.415,87.392Z",transform:"translate(0)",fill:"#4ccb92"}),r.createElement("path",{id:"Trazado_7147","data-name":"Trazado 7147",d:"M264.2,97.863l2.41-14.045.037-.18,6.887-40.172.024-.117,5.074-29.533a12.4,12.4,0,0,0-2.281-9.6A10.336,10.336,0,0,0,268.128,0H166.535a10.331,10.331,0,0,0-8.223,4.215,12.425,12.425,0,0,0-2.283,9.6c.341,1.985.735,4.278,1.169,6.805H220.27A17.746,17.746,0,0,1,234.334,27.8a20.491,20.491,0,0,1,3.944,10.091h27.69l-1.514,9.169-26.959.006-5.351,31.141H259.1l-1.514,9.17-7.244,0A54.53,54.53,0,0,0,228,81.1l6.547-38.106a16.846,16.846,0,0,0-3.1-13.05,14.048,14.048,0,0,0-11.179-5.728H82.193a14.042,14.042,0,0,0-11.176,5.728,16.889,16.889,0,0,0-3.1,13.05C71.324,62.83,78.5,104.644,84.236,138.017l.01.065c2.91,16.977,5.443,31.762,6.932,40.344,1.282,7.5,7.277,12.942,14.267,12.942h91.579a13.777,13.777,0,0,0,9.436-3.82A54.824,54.824,0,0,0,264.2,97.863M87.119,88.2l-2.144-12.49H217.335l-.974,5.9a54.43,54.43,0,0,0-18.853,6.571ZM96.611,143l-2.144-12.492h75.608c-.168,1.748-.261,3.518-.261,5.31a55.27,55.27,0,0,0,.481,7.163Zm128.363,36.14A43.322,43.322,0,1,1,268.3,135.817a43.322,43.322,0,0,1-43.322,43.322",transform:"translate(-23.479)",fill:"#4ccb92"}),r.createElement("path",{id:"Trazado_7148","data-name":"Trazado 7148",d:"M313.356,176.316c-.055.053-.11.107-.163.162h-.014l-25.036,24.646-8.883-8.767a6.569,6.569,0,1,0-9.224,9.354l18.121,17.855,34.329-33.735a6.594,6.594,0,1,0-9.13-9.516",transform:"translate(-93.036 -60.553)",fill:"#4ccb92"}))),r.createElement("rect",{id:"Rect\xe1ngulo_1022","data-name":"Rect\xe1ngulo 1022",width:"256",height:"256",fill:"none"}))))},Ji=function(e){return r.createElement("svg",je({},e,{className:"min-icon",fill:"currentcolor",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256"}),r.createElement("g",null,r.createElement("g",{x:"2.7",y:"36.8"},r.createElement("path",{d:"M77.2,168.6c4,4.1,10.6,4.3,14.7,0.3c0,0,0,0,0.1-0.1l0.2-0.2l29.7-29.9\n\t\t\tc3.9-4.3,3.6-10.9-0.7-14.9c-4-3.7-10.1-3.7-14.1-0.1l-12,12V47.3h0.1c0-5.8-4.7-10.5-10.5-10.5s-10.5,4.7-10.5,10.5v88.3\n\t\t\tl-11.9-12c-4.3-4-10.9-3.7-14.9,0.5c-3.8,4.1-3.8,10.4,0.1,14.4L77.2,168.6z"}),r.createElement("path",{d:"M148.3,84.9l11.9-12v88.3h-0.1c0,5.8,4.7,10.5,10.5,10.5s10.5-4.7,10.5-10.5V72.9l11.9,12\n\t\t\tc4.3,4,10.9,3.7,14.9-0.5c3.8-4.1,3.8-10.4-0.1-14.4l-29.7-30c-4-4.1-10.6-4.2-14.7-0.2l-0.2,0.2l-29.7,29.9\n\t\t\tc-4,4.2-3.8,10.9,0.4,14.9C138.1,88.6,144.3,88.7,148.3,84.9"}),r.createElement("path",{d:"M242.1,154.9c-6.2,0-11.2,5-11.2,11.1l0,0v27.4c0,1.9-1.6,3.5-3.5,3.5H28.5\n\t\t\tc-1.9,0-3.5-1.6-3.5-3.5v-27.3c0.2-6.2-4.7-11.3-10.8-11.5s-11.3,4.7-11.5,10.8c0,0.2,0,0.4,0,0.7v27.4\n\t\t\tc0,14.2,11.6,25.7,25.8,25.8h198.8c14.2,0,25.8-11.6,25.8-25.8v-27.4C253.1,159.9,248.1,154.9,242.1,154.9L242.1,154.9"}))))},es=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{"data-name":"Object Browser",clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Uni\\xF3n 19",d:"M36.252 256a17.257 17.257 0 0 1-17.25-17.235V18.076A17.261 17.261 0 0 1 36.252.836h42.193c2.83 0 5.654 0 8.461-.015 23.494-.092 47-.514 70.48-.412 4.9.02 9.809-.1 14.711-.208 6.822-.155 13.645-.311 20.467-.107 6.662.194 13.539.315 20.1 1.793a44.27 44.27 0 0 1 5.01 1.444c11.648 4.182 16.736 14.163 17.836 25.918 1.453 15.7.877 32.2.5 47.945-.412 17.158.014 34.432.014 51.618v109.952a17.244 17.244 0 0 1-17.234 17.235Zm.7-222.336v189.523a14.876 14.876 0 0 0 14.875 14.89H200.2a14.9 14.9 0 0 0 14.885-14.89V81.992h-25.957a37.8 37.8 0 0 1-37.754-37.761V18.769H51.823a14.877 14.877 0 0 0-14.874 14.895Zm130.881 10.567a21.33 21.33 0 0 0 21.3 21.3h25.957V33.663a14.9 14.9 0 0 0-14.885-14.9h-32.371ZM65.4 218.152a6.644 6.644 0 0 1-5.756-9.967l24.891-43.139a6.658 6.658 0 0 1 11.527 0l24.906 43.139a6.652 6.652 0 0 1-5.758 9.967Zm65.869-50.693a31.523 31.523 0 0 1 24.992-36.917 31.529 31.529 0 0 1 36.918 24.993 31.53 31.53 0 0 1-24.992 36.917 31.742 31.742 0 0 1-5.994.574 31.536 31.536 0 0 1-30.927-25.567Zm-70.568-40.454a1.894 1.894 0 0 1-1.895-1.895V71.815a1.894 1.894 0 0 1 1.895-1.895h63.533a1.894 1.894 0 0 1 1.895 1.895v53.295a1.894 1.894 0 0 1-1.895 1.895Z",stroke:"rgba(0,0,0,0)",strokeMiterlimit:10}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 882",fill:"none",d:"M0 0h256v256H0z"})))},ts=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 255.999"},e),r.createElement("path",{id:"recover-icn",d:"M17866.783-5487a16.655,16.655,0,0,1-4.354-.6l-57.238-15.5a14.778,14.778,0,0,1-10.492-18.271l15.535-57.135c5.1-18.748,33.652-11.014,28.557,7.734l-5.8,21.333-1.033,3.5c.176-.094.342-.2.525-.288a84.861,84.861,0,0,0,39.223-113.4,85.2,85.2,0,0,0-62.492-46.565,12.846,12.846,0,0,1-10.568-14.789,12.864,12.864,0,0,1,14.811-10.552,110.978,110.978,0,0,1,81.389,60.667,109.742,109.742,0,0,1,11.158,47.846v.683a110.648,110.648,0,0,1-62.258,99.21c-.059.032-.121.049-.18.077l9.572,2.328,17.045,4.615c17.252,4.673,12.115,29.111-3.393,29.111Zm-122.105-11.284a13.242,13.242,0,0,1-2.135-.175,110.98,110.98,0,0,1-81.387-60.667,109.694,109.694,0,0,1-11.154-48.088v-.229a110.629,110.629,0,0,1,62.252-99.421c.064-.032.123-.05.186-.081l-9.576-2.323-17.041-4.615c-17.234-4.669-12.129-29.053,3.334-29.115h.131a16.69,16.69,0,0,1,4.283.606l57.242,15.5a14.775,14.775,0,0,1,10.488,18.272l-15.531,57.134c-5.1,18.749-33.658,11.015-28.562-7.734l5.8-21.336,1.039-3.5c-.176.094-.346.2-.531.288a84.855,84.855,0,0,0-39.217,113.4,85.188,85.188,0,0,0,62.486,46.569,12.845,12.845,0,0,1,10.57,14.785,12.866,12.866,0,0,1-12.674,10.731ZM17757-5615a21,21,0,0,1,21-21,21,21,0,0,1,21,21,21,21,0,0,1-21,21A21,21,0,0,1,17757-5615Z",transform:"translate(-17650.002 5743.001)"}))},ns=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("g",{"data-name":"settings-icn"},r.createElement("path",{"data-name":"Trazado 341",d:"m247.385 99.227-26.7-3.841a92.362 92.362 0 0 0-4.166-9.853l16.176-21.584a9.834 9.834 0 0 0-.9-12.9l-26.889-27.1a9.825 9.825 0 0 0-12.893-.887l-21.6 16.254a89.085 89.085 0 0 0-9.857-4.134l-3.83-26.7a9.856 9.856 0 0 0-9.852-8.476H108.73a9.843 9.843 0 0 0-9.844 8.476l-3.836 26.7a89.115 89.115 0 0 0-9.859 4.134L63.53 23.06a9.881 9.881 0 0 0-12.936.887l-26.881 26.9a9.832 9.832 0 0 0-.9 12.9l16.27 21.584a87.181 87.181 0 0 0-4.166 9.851l-26.68 3.843a9.85 9.85 0 0 0-8.482 9.854v38.036a9.851 9.851 0 0 0 8.482 9.854l26.68 3.84a85.76 85.76 0 0 0 4.166 9.855l-16.27 21.777a9.848 9.848 0 0 0 .9 12.914l26.881 26.9a9.891 9.891 0 0 0 12.936.879l21.561-16.256a85.986 85.986 0 0 0 9.859 4.136l3.844 26.705a9.843 9.843 0 0 0 9.857 8.475h38.031a9.867 9.867 0 0 0 9.859-8.475l3.842-26.705a90.284 90.284 0 0 0 9.859-4.136l21.568 16.157a9.852 9.852 0 0 0 12.906-.878l26.9-26.9a9.856 9.856 0 0 0 .889-12.915l-16.061-21.485a89.562 89.562 0 0 0 4.131-9.853l26.709-3.842a9.867 9.867 0 0 0 8.475-9.853v-38.133a9.868 9.868 0 0 0-8.374-9.749Zm-11.236 39.413-24.443 3.549a9.888 9.888 0 0 0-8.088 7.1 82.022 82.022 0 0 1-6.875 17.436 9.813 9.813 0 0 0 0 10.549l14.764 19.707-14.764 15.072-19.719-15.072a9.863 9.863 0 0 0-10.461 0 75.566 75.566 0 0 1-17.711 7.291 9.814 9.814 0 0 0-7.105 8.085l-3.549 24.034h-20.895l-3.549-24.436a9.8 9.8 0 0 0-7.092-8.073 76.134 76.134 0 0 1-17.738-7.294 9.831 9.831 0 0 0-10.439.393l-19.711 14.777-15.072-14.777 15.072-19.707a9.844 9.844 0 0 0 0-10.549 82.861 82.861 0 0 1-7.3-17.634 9.841 9.841 0 0 0-8.074-7.095l-24.035-3.55v-20.889l24.443-3.55a9.85 9.85 0 0 0 8.074-7.1 82.89 82.89 0 0 1 6.891-17.635 9.84 9.84 0 0 0 0-10.546l-15.072-19.71 15.072-15.071 19.711 15.071a9.816 9.816 0 0 0 10.439 0 76.209 76.209 0 0 1 17.738-7.291 9.806 9.806 0 0 0 7.092-8.074l3.549-24.044h20.895l3.549 24.435a9.839 9.839 0 0 0 7.105 8.084 75.193 75.193 0 0 1 17.711 7.291 9.866 9.866 0 0 0 10.461-.4l19.719-14.778 15.057 14.778-15.057 19.71a9.822 9.822 0 0 0-.7 10.839 82.237 82.237 0 0 1 7.3 17.644 9.84 9.84 0 0 0 8.074 7.088l24.443 3.547Z"}),r.createElement("path",{"data-name":"Trazado 342",d:"M127.742 78.73a49.269 49.269 0 0 0-49.258 49.275 49.266 49.266 0 0 0 49.258 49.267 49.271 49.271 0 0 0 49.281-49.267 49.274 49.274 0 0 0-49.281-49.275Zm0 78.836a29.553 29.553 0 0 1-29.547-29.561 29.56 29.56 0 0 1 29.547-29.57 29.555 29.555 0 0 1 29.564 29.57 29.548 29.548 0 0 1-29.564 29.561Z"})),r.createElement("path",{"data-name":"Rect\\xE1ngulo 888",fill:"none",d:"M0 0h256v256H0z"})))},rs=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 870",fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Trazado 454",d:"M16.412 256A16.487 16.487 0 0 1-.002 239.463V104.082c0-21.752 32.824-21.752 32.824 0v118.829h190.355V104.082c0-21.752 32.822-21.752 32.822 0v135.381a16.477 16.477 0 0 1-16.4 16.537Zm95.176-61.308V56.465L93 75.208c-15.262 15.385-38.471-8-23.205-23.393l46.5-46.878a16.345 16.345 0 0 1 23.408 0l46.51 46.878c15.266 15.39-7.949 38.777-23.211 23.393L144.41 56.464v138.227c0 10.872-8.205 16.307-16.41 16.307s-16.412-5.435-16.412-16.307Z"}),r.createElement("path",{"data-name":"Trazado 454 - Contorno",d:"M239.6 256.5H16.416A17 17 0 0 1-.498 239.463V104.082a16.259 16.259 0 0 1 5.3-12.61 16.393 16.393 0 0 1 5.422-3.156 18.547 18.547 0 0 1 6.193-1.048 18.547 18.547 0 0 1 6.193 1.048 16.393 16.393 0 0 1 5.422 3.156 16.259 16.259 0 0 1 5.3 12.61v118.329h189.355V104.082a16.259 16.259 0 0 1 5.3-12.61 16.374 16.374 0 0 1 5.422-3.156 18.528 18.528 0 0 1 6.191-1.048 18.531 18.531 0 0 1 6.193 1.048 16.374 16.374 0 0 1 5.422 3.156 16.259 16.259 0 0 1 5.3 12.61v135.381a17.034 17.034 0 0 1-1.328 6.625 16.992 16.992 0 0 1-3.621 5.416 16.846 16.846 0 0 1-5.373 3.655 16.663 16.663 0 0 1-6.593 1.341ZM16.414 88.268a17.535 17.535 0 0 0-5.859.991 15.388 15.388 0 0 0-5.094 2.962 15.286 15.286 0 0 0-4.959 11.861v135.381A15.994 15.994 0 0 0 16.416 255.5H239.6a15.989 15.989 0 0 0 15.9-16.037V104.082a15.286 15.286 0 0 0-4.959-11.861 15.368 15.368 0 0 0-5.094-2.962 17.518 17.518 0 0 0-5.859-.991 17.515 17.515 0 0 0-5.857.991 15.368 15.368 0 0 0-5.094 2.962 15.286 15.286 0 0 0-4.959 11.861v119.329H32.323V104.082a15.286 15.286 0 0 0-4.959-11.861 15.388 15.388 0 0 0-5.094-2.962 17.526 17.526 0 0 0-5.86-.992ZM128 211.5a18.547 18.547 0 0 1-6.193-1.048 16.37 16.37 0 0 1-5.422-3.154 16.248 16.248 0 0 1-5.3-12.6V57.685L93.349 75.567a16.238 16.238 0 0 1-11.6 5.179 16.682 16.682 0 0 1-9.711-3.251 19.071 19.071 0 0 1-6.451-8.051 15.968 15.968 0 0 1-1.051-8.961 17 17 0 0 1 4.9-9.013l46.5-46.878a16.869 16.869 0 0 1 12.006-5.084 16.81 16.81 0 0 1 6.482 1.3 17.213 17.213 0 0 1 5.631 3.786l46.51 46.879a16.976 16.976 0 0 1 4.9 9.01 15.975 15.975 0 0 1-1.049 8.958 19.084 19.084 0 0 1-6.453 8.054 16.694 16.694 0 0 1-9.715 3.254 16.237 16.237 0 0 1-11.6-5.179l-17.736-17.882v137.013a16.249 16.249 0 0 1-5.3 12.6 16.351 16.351 0 0 1-5.422 3.154A18.527 18.527 0 0 1 128 211.5ZM112.088 55.252v139.441a15.275 15.275 0 0 0 4.959 11.855 15.365 15.365 0 0 0 5.094 2.961 17.538 17.538 0 0 0 5.859.991 17.547 17.547 0 0 0 5.859-.991 15.375 15.375 0 0 0 5.092-2.961 15.276 15.276 0 0 0 4.959-11.855V55.25l.855.862 18.592 18.744a15.257 15.257 0 0 0 10.891 4.883 15.7 15.7 0 0 0 9.133-3.067 18.064 18.064 0 0 0 6.111-7.625 14.955 14.955 0 0 0 .988-8.4 16 16 0 0 0-4.625-8.482l-46.51-46.878a16.222 16.222 0 0 0-5.3-3.567 15.825 15.825 0 0 0-6.1-1.222 15.868 15.868 0 0 0-11.295 4.789l-46.5 46.878a16.011 16.011 0 0 0-4.627 8.485 15 15 0 0 0 .988 8.4 18.055 18.055 0 0 0 6.111 7.623 15.688 15.688 0 0 0 9.129 3.064 15.259 15.259 0 0 0 10.893-4.883Z",fill:"rgba(0,0,0,0)"})))},as=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 47.137 36.516"},e),r.createElement("g",{id:"azure-logo-color",transform:"translate(-437.603 -471.382)"},r.createElement("g",{id:"layer1-1",transform:"translate(437.603 471.382)"},r.createElement("path",{id:"path21",d:"M459.411,505.944c6.055-1.07,11.056-1.953,11.115-1.965l.1-.024-5.717-6.8c-3.143-3.74-5.717-6.815-5.717-6.831,0-.032,5.9-16.291,5.936-16.347.012-.019,4.03,6.919,9.738,16.812,5.347,9.266,9.755,16.9,9.8,16.975l.075.132-18.168,0-18.169,0S459.411,505.944,459.411,505.944ZM437.6,503.868c0-.008,2.693-4.686,5.987-10.391l5.987-10.375,6.978-5.856c3.839-3.219,6.986-5.86,7-5.864a1.448,1.448,0,0,1-.112.282c-.075.159-3.485,7.471-7.574,16.247l-7.44,15.957-5.41.008C440.037,503.884,437.6,503.88,437.6,503.868Z",transform:"translate(-437.603 -471.382)",fill:"#2a94dc"}))))},os=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("g",{"data-name":"Calendar-icn"},r.createElement("path",{"data-name":"Trazado 412",d:"M65.175 146.527h24.651c3.4 0 6.162-3.188 6.162-7.115s-2.762-7.115-6.162-7.115H65.175c-3.4 0-6.164 3.188-6.164 7.115s2.758 7.115 6.164 7.115Z"}),r.createElement("path",{"data-name":"Trazado 413",d:"M118.028 146.527h24.651c3.4 0 6.162-3.188 6.162-7.115s-2.76-7.115-6.162-7.115h-24.651c-3.4 0-6.162 3.188-6.162 7.115s2.762 7.115 6.162 7.115Z"}),r.createElement("path",{"data-name":"Trazado 414",d:"M166.344 146.527h24.651c3.4 0 6.162-3.188 6.162-7.115s-2.762-7.115-6.162-7.115h-24.651c-3.4 0-6.165 3.188-6.165 7.115s2.762 7.115 6.165 7.115Z"}),r.createElement("path",{"data-name":"Trazado 415",d:"M65.175 178.762h24.651c3.4 0 6.162-3.188 6.162-7.115s-2.762-7.115-6.162-7.115H65.175c-3.4 0-6.164 3.188-6.164 7.115s2.758 7.115 6.164 7.115Z"}),r.createElement("path",{"data-name":"Trazado 416",d:"M118.028 178.762h24.651c3.4 0 6.162-3.188 6.162-7.115s-2.76-7.115-6.162-7.115h-24.651c-3.4 0-6.162 3.188-6.162 7.115s2.762 7.115 6.162 7.115Z"}),r.createElement("path",{"data-name":"Trazado 417",d:"M166.344 178.762h24.651c3.4 0 6.162-3.188 6.162-7.115s-2.762-7.115-6.162-7.115h-24.651c-3.4 0-6.165 3.188-6.165 7.115s2.762 7.115 6.165 7.115Z"}),r.createElement("path",{"data-name":"Trazado 418",d:"M65.175 210.997h24.651c3.4 0 6.162-3.187 6.162-7.115s-2.762-7.115-6.162-7.115H65.175c-3.4 0-6.164 3.188-6.164 7.115s2.758 7.115 6.164 7.115Z"}),r.createElement("path",{"data-name":"Trazado 419",d:"M118.028 210.997h24.651c3.4 0 6.162-3.187 6.162-7.115s-2.76-7.115-6.162-7.115h-24.651c-3.4 0-6.162 3.188-6.162 7.115s2.762 7.115 6.162 7.115Z"}),r.createElement("path",{"data-name":"Trazado 420",d:"M166.344 210.997h24.651c3.4 0 6.162-3.187 6.162-7.115s-2.762-7.115-6.162-7.115h-24.651c-3.4 0-6.165 3.188-6.165 7.115s2.762 7.115 6.165 7.115Z"}),r.createElement("path",{"data-name":"Trazado 421",d:"M215.81 30.376h-15.951V10.455a10.661 10.661 0 0 0-10.6-10.661 10.66 10.66 0 0 0-10.595 10.661v19.921h-40.089V10.455a10.661 10.661 0 0 0-10.6-10.661 10.66 10.66 0 0 0-10.595 10.661v19.921H77.291V10.455a10.661 10.661 0 0 0-10.6-10.661 10.66 10.66 0 0 0-10.595 10.661v19.921h-15.08a23.369 23.369 0 0 0-23.295 23.44v178.332a23.367 23.367 0 0 0 23.295 23.44h174.782a23.367 23.367 0 0 0 23.295-23.44V53.816a23.367 23.367 0 0 0-23.283-23.44Zm-3.051 198.641a.062.062 0 0 1-.062.062H44.14a.062.062 0 0 1-.064-.062V114.344h168.683Z"})),r.createElement("path",{"data-name":"Rect\\xE1ngulo 862",fill:"none",d:"M0 0h256v255.794H0z"})))},is=function(e){return r.createElement("svg",je({},e,{className:"min-icon",fill:"currentcolor",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 10 9.5"}),r.createElement("g",{transform:"translate(231 719.516)"},r.createElement("path",{d:"M-125.5,7.984a4.5,4.5,0,0,1,4.5-4.5,4.5,4.5,0,0,1,4.5,4.5Z",transform:"translate(-105 -720)"}),r.createElement("rect",{width:"10",height:"1",transform:"translate(-231 -711.016)"}),r.createElement("path",{d:"M-119.5.484h-3v1h1v1h1v-1h1Z",transform:"translate(-105 -720)"})))},ss=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("g",{"data-name":"logs-icn"},r.createElement("path",{"data-name":"Uni\\xF3n 20",d:"M17.298 255.999a17.314 17.314 0 0 1-17.3-17.291V17.302a17.322 17.322 0 0 1 17.3-17.3h221.4a17.325 17.325 0 0 1 17.3 17.3v221.406a17.316 17.316 0 0 1-17.3 17.291Zm.7-32.922a14.938 14.938 0 0 0 14.934 14.937H223.07A14.935 14.935 0 0 0 238 223.077v-133.4H18Zm45.949-69.443a6.943 6.943 0 0 1-6.814-7.061v-16.314a6.937 6.937 0 0 1 6.814-7.054h62.056a6.924 6.924 0 0 1 6.795 7.054v16.318a6.929 6.929 0 0 1-6.795 7.061Z"}),r.createElement("path",{"data-name":"Trazado 343 - Contorno",d:"M17.3-.1h221.4a17.421 17.421 0 0 1 17.4 17.4v221.409a17.416 17.416 0 0 1-17.4 17.391H17.3A17.416 17.416 0 0 1-.1 238.709V17.301A17.421 17.421 0 0 1 17.3-.1Zm221.4 256a17.216 17.216 0 0 0 17.2-17.191V17.301a17.221 17.221 0 0 0-17.2-17.2H17.3a17.221 17.221 0 0 0-17.2 17.2v221.408A17.216 17.216 0 0 0 17.3 255.9ZM17.9 89.576h220.2v133.5a14.945 14.945 0 0 1-4.4 10.634 14.93 14.93 0 0 1-10.627 4.405H32.931a14.93 14.93 0 0 1-10.627-4.405 14.942 14.942 0 0 1-4.4-10.634Zm220 .2H18.1v133.3a14.745 14.745 0 0 0 4.346 10.493 14.73 14.73 0 0 0 10.486 4.347h190.139a14.73 14.73 0 0 0 10.486-4.347 14.745 14.745 0 0 0 4.346-10.493Z"}),r.createElement("path",{"data-name":"Trazado 344 - Contorno",d:"M63.948 123.102h62.057a6.726 6.726 0 0 1 4.878 2.1 7.247 7.247 0 0 1 2.015 5.058v16.318a7.038 7.038 0 0 1-6.893 7.16H63.948a7.049 7.049 0 0 1-6.915-7.16V130.26a7.045 7.045 0 0 1 6.915-7.158Zm62.057 30.431a6.838 6.838 0 0 0 6.693-6.96v-16.318a7.047 7.047 0 0 0-1.959-4.919 6.526 6.526 0 0 0-4.733-2.034H63.949a6.845 6.845 0 0 0-6.714 6.953v16.318a6.848 6.848 0 0 0 6.714 6.96Z"})),r.createElement("path",{"data-name":"Rect\\xE1ngulo 889",fill:"none",d:"M0 0h256v256H0z"})))},ls=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 36.369 36.346"},e),r.createElement("g",{id:"hardquota-icn",transform:"translate(-98.002 -28.027)"},r.createElement("path",{id:"Trazado_7233","data-name":"Trazado 7233",d:"M344.76,203.93l2.664-2.664,8.15,8.15-2.664,2.664Z",transform:"translate(-228.962 -160.744)"}),r.createElement("path",{id:"Trazado_7234","data-name":"Trazado 7234",d:"M464.768,316.895a1.11,1.11,0,0,0-1.575,0l-2.827,2.827h0a1.111,1.111,0,0,0,0,1.575l5.182,5.182a1.114,1.114,0,0,0,.787.327,1.1,1.1,0,0,0,.808-.327l2.827-2.827a1.11,1.11,0,0,0,0-1.575Z",transform:"translate(-335.926 -267.73)"}),r.createElement("path",{id:"Trazado_7235","data-name":"Trazado 7235",d:"M235.486,84.317l-5.408-5.408a2.141,2.141,0,0,1-.157-.174L222.2,86.45c.061.052.121.105.178.161l5.4,5.4c.057.057.109.117.161.178l7.718-7.718a2.2,2.2,0,0,1-.178-.157Z",transform:"translate(-115.243 -47.051)"}),r.createElement("path",{id:"Trazado_7236","data-name":"Trazado 7236",d:"M337.566,36.693a1.912,1.912,0,0,0,2.706-2.7l-5.408-5.4a1.91,1.91,0,1,0-2.7,2.7Z",transform:"translate(-216.754)"}),r.createElement("path",{id:"Trazado_7237","data-name":"Trazado 7237",d:"M174.741,188.807a1.912,1.912,0,1,0-2.7,2.706l5.408,5.392a1.911,1.911,0,1,0,2.7-2.7Z",transform:"translate(-68.177 -148.665)"}),r.createElement("path",{id:"Trazado_7238","data-name":"Trazado 7238",d:"M143.562,432.083a3.239,3.239,0,0,1,.525.048v-.565a2.383,2.383,0,0,0-2.379-2.383h-15.63a2.383,2.383,0,0,0-2.379,2.383v.565a3.245,3.245,0,0,1,.525-.048Z",transform:"translate(-23.844 -372.224)"}),r.createElement("path",{id:"Trazado_7239","data-name":"Trazado 7239",d:"M122.1,482.968a2.379,2.379,0,0,0-2.379-2.379H100.381A2.379,2.379,0,0,0,98,482.968V484.3h24.1Z",transform:"translate(0 -419.924)"})))},cs=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("path",{d:"m215.56,0H21.56C9.7,0,0,9.7,0,21.56v150.89c0,11.86,9.7,21.56,21.56,21.56h194c11.86,0,21.56-9.7,21.56-21.56V21.56c0-11.86-9.7-21.56-21.56-21.56Zm0,172.44H21.56v-32.33h194v32.33Z"}))},us=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"clip-path"},r.createElement("rect",{id:"Rect\xe1ngulo_1033","data-name":"Rect\xe1ngulo 1033",width:"234.584",height:"256",fill:"#4ccb92"})),r.createElement("clipPath",{id:"clip-Change_User_Password"},r.createElement("rect",{width:"256",height:"256"}))),r.createElement("g",{id:"Change_User_Password","data-name":"Change User Password",clipPath:"url(#clip-Change_User_Password)"},r.createElement("g",{id:"Change_User_Password_Icon","data-name":"Change User Password Icon"},r.createElement("g",{id:"Grupo_2422","data-name":"Grupo 2422",transform:"translate(11)"},r.createElement("g",{id:"Grupo_2421","data-name":"Grupo 2421"},r.createElement("path",{id:"Trazado_7174","data-name":"Trazado 7174",d:"M89.039,144.5h.048a66.549,66.549,0,0,0,26.922-5.683,68.721,68.721,0,0,0,22.01-15.464,71.754,71.754,0,0,0,14.829-22.881,73.555,73.555,0,0,0,5.44-27.984C158.291,32.8,127.233.5,89.04.5h0C50.868.5,19.816,32.794,19.816,72.49S50.868,144.5,89.039,144.5",transform:"translate(1.369 0.035)",fill:"#4ccb92"}),r.createElement("path",{id:"Trazado_7175","data-name":"Trazado 7175",d:"M89.039,144.5h.048a66.549,66.549,0,0,0,26.922-5.683,68.721,68.721,0,0,0,22.01-15.464,71.754,71.754,0,0,0,14.829-22.881,73.555,73.555,0,0,0,5.44-27.984C158.291,32.8,127.233.5,89.04.5h0C50.868.5,19.816,32.794,19.816,72.49S50.868,144.5,89.039,144.5Z",transform:"translate(1.369 0.035)",fill:"#4ccb92"}),r.createElement("path",{id:"Trazado_7176","data-name":"Trazado 7176",d:"M169.875,117.967A64.121,64.121,0,0,0,112.7,153.043c-1.421-.4-2.848-.78-4.286-1.119a94.31,94.31,0,0,0-21.382-2.511v.005c-1.748,0-3.424.045-4.982.135A99.34,99.34,0,0,0,8.563,189.619c-.386.516-.763,1.056-1.228,1.749l-.107.15c-.1.141-.213.3-.311.456L6.89,192a37.722,37.722,0,0,0-2.66,37.365,31.837,31.837,0,0,0,28.644,17.951H141.951a31.362,31.362,0,0,0,13.027-2.828,64.139,64.139,0,1,0,14.9-126.523m.382,114.817a50.676,50.676,0,1,1,50.676-50.676,50.676,50.676,0,0,1-50.676,50.676",transform:"translate(0.035 8.148)",fill:"#4ccb92"}),r.createElement("path",{id:"Trazado_7177","data-name":"Trazado 7177",d:"M169.875,117.967A64.121,64.121,0,0,0,112.7,153.043c-1.421-.4-2.848-.78-4.286-1.119a94.31,94.31,0,0,0-21.382-2.511v.005c-1.748,0-3.424.045-4.982.135A99.34,99.34,0,0,0,8.563,189.619c-.386.516-.763,1.056-1.228,1.749l-.107.15c-.1.141-.213.3-.311.456L6.89,192a37.722,37.722,0,0,0-2.66,37.365,31.837,31.837,0,0,0,28.644,17.951H141.951a31.362,31.362,0,0,0,13.027-2.828,64.139,64.139,0,1,0,14.9-126.523Zm.382,114.817a50.676,50.676,0,1,1,50.676-50.676A50.676,50.676,0,0,1,170.256,232.784Z",transform:"translate(0.035 8.148)",fill:"#4ccb92"}),r.createElement("path",{id:"Trazado_7178","data-name":"Trazado 7178",d:"M175.869,148.182a20.812,20.812,0,0,0-20.809,20.813,20.593,20.593,0,0,0,.9,6.036l-24.028,24.024v13.874h13.875L169.833,188.9a20.816,20.816,0,0,0,26.849-18.2,20.283,20.283,0,0,0-3.813-13.874,20.814,20.814,0,0,0-17-8.642m2.311,23.125a4.625,4.625,0,1,1,4.626-4.624,4.625,4.625,0,0,1-4.626,4.624",transform:"translate(9.112 10.235)",fill:"#4ccb92"}),r.createElement("path",{id:"Trazado_7179","data-name":"Trazado 7179",d:"M175.869,148.182a20.812,20.812,0,0,0-20.809,20.813,20.593,20.593,0,0,0,.9,6.036l-24.028,24.024v13.874h13.875L169.833,188.9a20.816,20.816,0,0,0,26.849-18.2,20.283,20.283,0,0,0-3.813-13.874A20.814,20.814,0,0,0,175.869,148.182Zm2.311,23.125a4.625,4.625,0,1,1,4.626-4.624A4.625,4.625,0,0,1,178.181,171.307Z",transform:"translate(9.112 10.235)",fill:"#4ccb92"}))),r.createElement("rect",{id:"Rect\xe1ngulo_1034","data-name":"Rect\xe1ngulo 1034",width:"256",height:"256",fill:"none"}))))},ds=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"prefix__a"},r.createElement("path",{d:"M0 0h256v256H0z"}))),r.createElement("g",{clipPath:"url(#prefix__a)"},r.createElement("path",{fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Rect\\xE1ngulo 856",fill:"none",d:"M0 0h256v256H0z"}),r.createElement("path",{"data-name":"Trazado 406",d:"M210.861 74.863h-28.736V48.236C182.125 21.636 157.844 0 128 0S73.875 21.638 73.875 48.236v26.627H45.139C20.25 74.863.001 92.971.001 115.23v84.8c0 21.912 19.623 39.8 43.979 40.353l84.021 14.62 84.021-14.62c24.356-.551 43.979-18.441 43.979-40.353v-84.8c-.001-22.259-20.25-40.367-45.14-40.367ZM96.296 48.236c0-15.579 14.222-28.254 31.7-28.254s31.7 12.675 31.7 28.254v26.627H96.289Zm137.281 151.79c0 11.24-10.191 20.385-22.717 20.385h-1.084l-81.777 14.229-81.777-14.229h-1.084c-12.526 0-22.716-9.145-22.716-20.385v-84.8c0-11.24 10.19-20.385 22.716-20.385h165.723c12.526 0 22.717 9.145 22.717 20.385Z"}),r.createElement("path",{"data-name":"Trazado 407",d:"M127.707 139.723a19.085 19.085 0 0 0-19.085 19.086 19.066 19.066 0 0 0 8.4 15.818v15.377a10.1 10.1 0 0 0 10.073 10.073h1.218a10.1 10.1 0 0 0 10.073-10.073v-15.377a19.067 19.067 0 0 0 8.4-15.818 19.086 19.086 0 0 0-19.079-19.086Z"})))},ps=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("path",{id:"Path_7269",d:"M147.85,227.97c-2.7,0-4.89-2.19-4.89-4.89l0,0V32.93c0-2.7,2.19-4.89,4.89-4.89c0,0,0,0,0,0\n\th98.98c2.7,0,4.89,2.19,4.89,4.89c0,0,0,0,0,0v190.14c0,2.7-2.19,4.89-4.89,4.89l0,0H147.85z M71.37,205.43\n\tc-2.7,0-4.89-2.19-4.89-4.89l0,0V55.48c-0.01-2.7,2.17-4.9,4.87-4.91c0.01,0,0.01,0,0.02,0h56.4c2.7,0,4.89,2.19,4.89,4.89l0,0\n\tv145.05c0,2.7-2.19,4.89-4.89,4.89c0,0,0,0,0,0L71.37,205.43z M9.17,182.88c-2.7,0-4.88-2.18-4.89-4.87V78.02\n\tc0-2.7,2.19-4.89,4.89-4.89h42.15c2.7,0,4.89,2.19,4.89,4.89V178c0,2.7-2.19,4.89-4.89,4.89l0,0L9.17,182.88z"}))},ms=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("g",null,r.createElement("path",{d:"M23.4,121.5c-11.5,0-21.4,9.8-21.4,21.2c0.2,11.8,9.7,21.2,21.4,21.4\n\t\t\t\tc11.4,0,21.2-9.9,21.2-21.4C44.3,131.1,35,121.7,23.4,121.5"}),r.createElement("path",{d:"M23.4,175.4c-11.5,0-21.4,9.8-21.4,21.2c0.2,11.8,9.7,21.2,21.4,21.4\n\t\t\t\tc11.4,0,21.2-9.9,21.2-21.4C44.3,184.9,35,175.6,23.4,175.4"}),r.createElement("path",{d:"M158.6,40.2h-12.2c-4.3,0-8.3,2.5-10.2,6.4l-76.6,157c-2.7,5.6-0.4,12.4,5.2,15.2\n\t\t\t\tc1.6,0.8,3.3,1.2,5,1.2H82c4.3,0,8.3-2.5,10.2-6.4l76.6-157c2.7-5.6,0.4-12.4-5.2-15.2C162,40.6,160.3,40.2,158.6,40.2"}),r.createElement("path",{d:"M205,121.1c-1.2,0-2.4,0.1-3.6,0.1L233,56.5c2.7-5.6,0.4-12.4-5.2-15.2\n\t\t\t\tc-1.6-0.8-3.3-1.2-5-1.2h-12.2c-4.3,0-8.3,2.5-10.2,6.4l-76.6,157c-2.7,5.6-0.4,12.4,5.2,15.2c1.6,0.8,3.3,1.2,5,1.2h12.2\n\t\t\t\tc4.3,0,8.3-2.5,10.2-6.4L165,196c14.8,22.1,44.7,28.1,66.8,13.3s28.1-44.7,13.3-66.8C236.2,129.1,221.1,121.1,205,121.1\n\t\t\t\t M205.3,207.3c-21,0-38.1-17-38.1-38.1c0-21,17-38.1,38.1-38.1c21,0,38.1,17,38.1,38.1c0,0,0,0,0,0\n\t\t\t\tC243.4,190.3,226.3,207.3,205.3,207.3"}),r.createElement("path",{d:"M211.3,151.3h-11.9v11.9h-11.9v11.9h11.9v11.9h11.9v-11.9h11.9v-11.9h-11.9V151.3z"})))},fs=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("path",{d:"M128,3.14C58.12,3.14,1.46,59,1.46,128S58.12,252.86,128,252.86,254.54,197,254.54,128h0C254.48,59.07,197.86,3.2,128,3.14M84.46,204.56a36.93,36.93,0,0,1-37.09-36.65h0c0-20.24,16.63-36.65,37.14-36.65s37.14,16.41,37.14,36.65S105,204.56,84.51,204.56h0M100,122.67a13,13,0,0,1-13.11-12.9,12.77,12.77,0,0,1,1.76-6.48l26.52-45.38a13.18,13.18,0,0,1,17.88-4.74,13,13,0,0,1,4.8,4.74l26.55,45.38a12.83,12.83,0,0,1-4.78,17.65,13.14,13.14,0,0,1-6.57,1.73ZM208.74,185a17.12,17.12,0,0,1-17.24,17H154.22A17.12,17.12,0,0,1,137,185V148.24a17.11,17.11,0,0,1,17.21-17h37.22a17.12,17.12,0,0,1,17.25,17v0Z",transform:"translate(-1.46 -3.14)"}))},hs=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("path",{d:"M234.64,2.55H64.58a9,9,0,0,0-8.95,8.94V92h44.75a9,9,0,0,1,8.94,8.94v125.3a9,9,0,0,1-8.94,8.95H55.63v8.94a9,9,0,0,0,8.95,8.94H234.64a9,9,0,0,0,9-8.94V11.49A9,9,0,0,0,234.64,2.55ZM198.78,208.4H136.13a9,9,0,1,1,0-17.9h62.65a9,9,0,0,1,0,17.9Zm0-35.8H136.13a9,9,0,0,1,0-17.9h62.65a8.95,8.95,0,0,1,0,17.9Zm0-35.8H136.13a9,9,0,1,1,0-17.9h62.65a9,9,0,0,1,0,17.9Zm0-35.8H136.13a9,9,0,1,1,0-17.9h62.65a9,9,0,0,1,0,17.9Zm0-35.81H100.33a8.95,8.95,0,0,1,0-17.9h98.45a8.95,8.95,0,0,1,0,17.9Z",transform:"translate(-10.89 -2.55)"}),r.createElement("path",{d:"M91.43,101H19.83a9,9,0,0,0-8.94,8.94v107.4a9,9,0,0,0,8.94,8.94h71.6a9,9,0,0,0,8.95-8.94V109.94A9,9,0,0,0,91.43,101Zm-17.9,98.44H37.73a8.95,8.95,0,1,1,0-17.9h35.8a8.95,8.95,0,0,1,0,17.9Zm0-26.84H37.73a8.95,8.95,0,1,1,0-17.9h35.8a8.95,8.95,0,0,1,0,17.9Zm0-26.85H37.73a8.95,8.95,0,1,1,0-17.9h35.8a8.95,8.95,0,0,1,0,17.9Z",transform:"translate(-10.89 -2.55)"}))},gs=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("path",{d:"M253.46,219.34a17.76,17.76,0,0,1-5.37,13L232.57,248a18.57,18.57,0,0,1-13.19,5.38,17.74,17.74,0,0,1-13-5.38l-52.61-52.77a17.23,17.23,0,0,1-5.5-13.05,19.26,19.26,0,0,1,6.27-13.93L117.34,131.2,99.08,149.45a7,7,0,0,1-9.85,0l1.82,1.74a16.14,16.14,0,0,1,1.82,1.88,16.44,16.44,0,0,0,1.44,1.67,7.38,7.38,0,0,1,1.45,2c.19.49.48,1.14.87,2a9.89,9.89,0,0,1,.8,2.41,14.26,14.26,0,0,1-3.85,12.55q-.43.44-2.4,2.61t-2.76,3q-.8.79-2.7,2.4a16.88,16.88,0,0,1-3.2,2.24,28.58,28.58,0,0,1-3.2,1.3,11.22,11.22,0,0,1-3.76.65,13.45,13.45,0,0,1-9.85-4.06L6.6,122.42a13.43,13.43,0,0,1-4.06-9.85,11.4,11.4,0,0,1,.75-3.7,27,27,0,0,1,1.21-3.18,17.84,17.84,0,0,1,2.24-3.2c1.06-1.25,1.86-2.15,2.41-2.68s1.53-1.45,3-2.76l2.61-2.38a14.26,14.26,0,0,1,12.55-3.85,9.68,9.68,0,0,1,2.4.8l2,.87a7.33,7.33,0,0,1,2,1.45,20.77,20.77,0,0,0,1.67,1.44,19.1,19.1,0,0,1,1.89,1.82L38.9,99a7,7,0,0,1,0-9.85L89.21,38.78a7,7,0,0,1,9.85,0L97.24,37a13.64,13.64,0,0,1-1.8-1.92A11,11,0,0,0,94,33.44a6,6,0,0,1-1.44-2,20.39,20.39,0,0,0-.88-2,8.81,8.81,0,0,1-.8-2.4,17.58,17.58,0,0,1-.23-2.61,14.07,14.07,0,0,1,4.06-9.85c.29-.3,1.1-1.17,2.41-2.62s2.23-2.43,2.76-2.95,1.42-1.33,2.67-2.4a16.88,16.88,0,0,1,3.2-2.24,27.73,27.73,0,0,1,3.18-1.21,11.22,11.22,0,0,1,3.76-.65,13.48,13.48,0,0,1,9.79,4L181.7,65.67a13.39,13.39,0,0,1,4.05,9.85,11.22,11.22,0,0,1-.65,3.76,26.74,26.74,0,0,1-1.29,3.2,16.88,16.88,0,0,1-2.24,3.2q-1.59,1.88-2.4,2.67t-3,2.7l-2.62,2.41A14.24,14.24,0,0,1,161,97.3a10.31,10.31,0,0,1-2.41-.79l-1.86-.84a7.3,7.3,0,0,1-2-1.44,19.31,19.31,0,0,0-1.68-1.44A18,18,0,0,1,151.25,91l-1.73-1.82a7,7,0,0,1,0,9.85l-18.28,18.27,37.12,37.12a19.24,19.24,0,0,1,13.92-6.27,18.53,18.53,0,0,1,13.2,5.37l52.61,52.57a18.59,18.59,0,0,1,5.37,13.19Z",transform:"translate(-2.54 -2.58)"}))},Es=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("path",{d:"M222.54,17.88h-24.4V14.76a12.2,12.2,0,1,0-24.4,0V17.9H78.93V14.76a12.21,12.21,0,1,0-24.41,0V17.9H33.42a30.46,30.46,0,0,0-30.88,30V223.47a30.54,30.54,0,0,0,30.88,30H222.56a30.47,30.47,0,0,0,30.86-29.94V47.9a30.53,30.53,0,0,0-30.88-30M26.94,47.79a6.27,6.27,0,0,1,6.45-6.08H54.52v3.34a12.21,12.21,0,0,0,24.39,0V41.71h94.81v3.34a12.2,12.2,0,0,0,24.4,0V41.71h24.4A6.28,6.28,0,0,1,229,47.77h0v26h-202ZM229.14,223.4a6.5,6.5,0,0,1-6.6,6.09H33.42A6.27,6.27,0,0,1,27,223.42h0V97.55H229.14Z",transform:"translate(-2.54 -2.55)"}),r.createElement("path",{d:"M96.62,195.15,128,200.61l31.36-5.46a16,16,0,0,0,16.41-15.05V148.49a16.05,16.05,0,0,0-16.85-15.05H148.22v-9.93a20.35,20.35,0,0,0-40.42,0v9.93H97.08a16.05,16.05,0,0,0-16.85,15.05v31.63a16,16,0,0,0,16.41,15M132,166.22v5.72a3.76,3.76,0,0,1-3.76,3.77h-.46a3.76,3.76,0,0,1-3.76-3.77h0v-5.72a7.13,7.13,0,1,1,9.9-1.92,7,7,0,0,1-1.92,1.92m-15.82-42.69a11.91,11.91,0,0,1,23.66,0v9.93H116.17Z",transform:"translate(-2.54 -2.55)"}))},bs=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("path",{d:"M8.18,94.43V21.24A20.26,20.26,0,0,1,27.69,1.74h73.19A51,51,0,0,1,134.25,15.6L242.6,136.2a21,21,0,0,1,0,27.73l-84.8,84.81a20.17,20.17,0,0,1-27.74,0L22.05,127.8A55.46,55.46,0,0,1,8.18,94.43ZM39.94,52.24a19.31,19.31,0,0,0,18.7,18.94A19.42,19.42,0,0,0,77.58,52.24,19.29,19.29,0,0,0,58.64,33.53,19.17,19.17,0,0,0,39.94,52.24Z",transform:"translate(-8.18 -1.74)"}))},vs=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"clip-path-alert-close-icon"},r.createElement("rect",{id:"Rect\xe1ngulo_1612","data-name":"Rect\xe1ngulo 1612",width:"256",height:"256",fill:"none"})),r.createElement("clipPath",{id:"clip-path-2-alert-close-icon"},r.createElement("rect",{id:"Rect\xe1ngulo_1611","data-name":"Rect\xe1ngulo 1611",width:"256",height:"256"}))),r.createElement("g",{id:"AlertCloseIcon",clipPath:"url(#clip-path-alert-close-icon)"},r.createElement("g",{id:"AlertCloseIcon-2","data-name":"AlertCloseIcon"},r.createElement("g",{id:"Grupo_2527","data-name":"Grupo 2527",clipPath:"url(#clip-path-2-alert-close-icon)"},r.createElement("path",{id:"Trazado_7276","data-name":"Trazado 7276",d:"M230.082,256.006a25.853,25.853,0,0,1-18.328-7.6l-83.761-83.735L44.259,248.41A25.92,25.92,0,0,1,7.6,211.754l83.735-83.735L7.6,44.259A25.92,25.92,0,0,1,44.259,7.6l83.735,83.735L211.754,7.6A25.92,25.92,0,0,1,248.41,44.259l-83.735,83.761,83.735,83.735a25.924,25.924,0,0,1-18.328,44.252",transform:"translate(-0.006 -0.006)"})))))},ys=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 12.425 12.024"},e),r.createElement("path",{id:"opensource",d:"M8.4,12.024,7.074,8.372a2.312,2.312,0,0,0,1.468-2.16,2.32,2.32,0,0,0-2.33-2.33,2.32,2.32,0,0,0-2.33,2.33,2.313,2.313,0,0,0,1.468,2.16L4.028,12.024A6.2,6.2,0,0,1,1.122,9.761,5.992,5.992,0,0,1,0,6.212,6.094,6.094,0,0,1,.491,3.8,6.079,6.079,0,0,1,3.8.491a6.177,6.177,0,0,1,4.829,0A6.079,6.079,0,0,1,11.933,3.8a6.094,6.094,0,0,1,.491,2.415A5.993,5.993,0,0,1,11.3,9.761,6.2,6.2,0,0,1,8.4,12.024Z",fill:"#fff"}))},_s=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 16 15.1"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"clip-path-lic-doc"},r.createElement("rect",{id:"Rect\xe1ngulo_963","data-name":"Rect\xe1ngulo 963",width:"16",height:"15.1",fill:"currentcolor"}))),r.createElement("g",{id:"Grupo_2324","data-name":"Grupo 2324",clipPath:"url(#clip-path-lic-doc)"},r.createElement("path",{id:"Trazado_7051","data-name":"Trazado 7051",d:"M12.118,0A3.867,3.867,0,0,0,9.051,1.506a3.9,3.9,0,0,0-.687,1.4L.948,2.975A.988.988,0,0,0,0,4V14.079A.988.988,0,0,0,.948,15.1H12.105a.987.987,0,0,0,.947-1.021V7.645a3.871,3.871,0,0,0,1.17-.508,3.914,3.914,0,0,0,.935-.848A3.878,3.878,0,0,0,12.118,0M1.057,5.621a.516.516,0,0,1,.515-.515h3.8a.516.516,0,0,1,.515.515v.686a.516.516,0,0,1-.515.515h-3.8a.516.516,0,0,1-.515-.515Zm10.7,7.573a.516.516,0,0,1-.515.515H1.571a.516.516,0,0,1-.515-.515v-.686a.516.516,0,0,1,.515-.515h9.666a.516.516,0,0,1,.515.515Zm0-3.443a.516.516,0,0,1-.515.515H1.571a.516.516,0,0,1-.515-.515V9.064a.516.516,0,0,1,.515-.515h9.666a.516.516,0,0,1,.515.515Zm2.025-6.511,0,0L12.026,4.988a.388.388,0,0,1-.28.118h0a.389.389,0,0,1-.28-.118l-.873-.873a.4.4,0,0,1,.564-.565l.59.591L13.21,2.678a.4.4,0,0,1,.561,0l0,0a.4.4,0,0,1,0,.561",fill:"currentcolor"})))},Ss=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("path",{d:"M99.18,223A7.66,7.66,0,0,1,92.42,219L77.91,191.41c-6.34-12-13-24.57-15.72-29.84h0l-1-2,0,0-.31-.58h0c-3.09-6.75,3.06-10.09,3.12-10.12A7.48,7.48,0,0,1,74.09,152l0,0,.37.7,0,0L100.43,202c22-31.37,93.39-144.89,121-189.3h0a.61.61,0,0,0,.07-.1l.24-.4h0A7.61,7.61,0,0,1,230.32,9a19.44,19.44,0,0,1,3,1.21s.69.74,1.37,1.5a6.63,6.63,0,0,1,.93,2.73s.61,3.62-1.21,5.67l.07,0-.31.49,0,0c-.93,1.6-2.46,4-5,8.05-3.39,5.43-8.24,13.18-14.07,22.48-10.65,17-26.76,42.59-43.08,68.29-18.35,28.88-33.19,52-44.13,68.58-22.22,33.77-23.42,34-27,34.86A7.64,7.64,0,0,1,99.18,223Zm-30.35-64L71,163.15Z",transform:"translate(-18.77 -7.2)"}),r.createElement("path",{d:"M99.18,224.54a9.09,9.09,0,0,1-8.08-4.86L58.81,158.4l.17-.09c-2.34-7.14,4.23-10.72,4.3-10.76a8.91,8.91,0,0,1,11.29,2.54l.15-.08,1.09,2,24.8,47.08C123.8,165.54,192,57.25,220.17,11.9l1.08-1.73.14.08a9.06,9.06,0,0,1,9.29-2.73A21.56,21.56,0,0,1,234,8.85l.24.12.18.2s.7.75,1.4,1.52a7.38,7.38,0,0,1,1.3,3.55c.06.35.57,3.76-1.12,6.26l-.54.91-.79,1.28,0,0c-.94,1.57-2.28,3.71-4.19,6.77-3.39,5.42-8.24,13.17-14.08,22.48-10.68,17-26.82,42.68-43.08,68.29-18.37,28.93-33.23,52-44.15,68.61-22.55,34.27-23.79,34.55-27.92,35.49A8.66,8.66,0,0,1,99.18,224.54ZM62.35,158.65l.12.24,31.28,59.39a6.17,6.17,0,0,0,6.79,3.11c3-.68,4.2-1,26.09-34.22,10.91-16.59,25.75-39.66,44.11-68.57C187,93,203.14,67.34,213.82,50.32c5.83-9.3,10.68-17,14.07-22.47,2.14-3.42,3.55-5.68,4.5-7.26l-.21-.13,1-1.24.41-.72.07,0a7.12,7.12,0,0,0,.47-3.87,5.71,5.71,0,0,0-.57-2l-1.16-1.27a17.3,17.3,0,0,0-2.46-1A6.11,6.11,0,0,0,223,13.06l-.3.44c-28.8,46.29-99.28,158.28-121,189.35l-1.41,2L72.81,152.82c-3.09-5.07-7.63-2.88-8.13-2.62a6,6,0,0,0-2.46,8.18Zm7.29,5.2-2.14-4.07,2.66-1.4,2.14,4.07Z",transform:"translate(-18.77 -7.2)"}),r.createElement("path",{d:"M226.15,50.25,223.65,54a12,12,0,0,1,5.09,9.78v165a12,12,0,0,1-12,12h-178a12,12,0,0,1-12-12v-165a12,12,0,0,1,12-12H187l3-4.5H38.77a16.52,16.52,0,0,0-16.5,16.5v165a16.52,16.52,0,0,0,16.5,16.5h178a16.52,16.52,0,0,0,16.5-16.5v-165A16.5,16.5,0,0,0,226.15,50.25Z",transform:"translate(-18.77 -7.2)"}),r.createElement("path",{d:"M216.74,248.8h-178a20,20,0,0,1-20-20v-165a20,20,0,0,1,20-20H196.53l-7.64,11.5H38.77a8.51,8.51,0,0,0-8.5,8.5v165a8.51,8.51,0,0,0,8.5,8.5h178a8.51,8.51,0,0,0,8.5-8.5v-165a8.54,8.54,0,0,0-3.61-6.93l-2.77-2,6.36-9.56,2.93,2a20,20,0,0,1,8.59,16.41v165A20,20,0,0,1,216.74,248.8Z",transform:"translate(-18.77 -7.2)"}),r.createElement("path",{d:"M224.24,63.79v165a7.5,7.5,0,0,1-7.5,7.5h-178a7.51,7.51,0,0,1-7.5-7.5v-165a7.51,7.51,0,0,1,7.5-7.5H184l3-4.5H38.77a12,12,0,0,0-12,12v165a12,12,0,0,0,12,12h178a12,12,0,0,0,12-12v-165A12,12,0,0,0,223.65,54l-2.48,3.74A7.48,7.48,0,0,1,224.24,63.79Z",transform:"translate(-18.77 -7.2)"}),r.createElement("path",{d:"M216.74,244.3h-178a15.52,15.52,0,0,1-15.5-15.5v-165a15.52,15.52,0,0,1,15.5-15.5H193.54l-7.65,11.5H38.77a4,4,0,0,0-4,4v165a4,4,0,0,0,4,4h178a4,4,0,0,0,4-4v-165a4,4,0,0,0-1.65-3.22l-2.69-2,6.34-9.52,2.94,2.09a15.52,15.52,0,0,1,6.56,12.63v165A15.51,15.51,0,0,1,216.74,244.3Z",transform:"translate(-18.77 -7.2)"}))},Ts=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor"},e,{viewBox:"0 0 18 12"}),r.createElement("defs",null),r.createElement("g",{id:"Page-1",stroke:"none",strokeWidth:"1",fill:"none",fillRule:"evenodd"},r.createElement("g",{fill:"currentcolor",id:"Fill-2"},r.createElement("polygon",{points:"17.9999987 4.99999934 3.82999951 4.99999934 7.40999918 1.4099994 5.99999946 -3.60000001e-07 -1.80000029e-07 5.99999928 5.99999946 11.9999989 7.40999918 10.5899991 3.82999951 6.99999922 17.9999987 6.99999922"}))))},As=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",viewBox:"0 0 256 256",fill:"currentcolor"},e),r.createElement("path",{d:"M222.83,0H114.08a5.38,5.38,0,0,0-5.38,5.37V118.1c.62.39,1.24.79,1.85,1.2a74.53,74.53,0,0,1,22.09,100.36h90.19a5.36,5.36,0,0,0,5.37-5.37V5.37A5.37,5.37,0,0,0,222.83,0Z"}),r.createElement("path",{d:"M106,125.38a68,68,0,1,0,30,56.35A67.59,67.59,0,0,0,106,125.38Zm8.16,94.78-7.77,7.76L68,189.5,29.56,227.92l-7.77-7.76,38.42-38.43L21.79,143.31l7.77-7.77L68,174l38.42-38.42,7.77,7.77L75.75,181.73Z"}))},Cs=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("g",{transform:"translate(0 -0.853)"},r.createElement("path",{d:"M89.25,173.48c-2.67-.25-5.25-1.12-7.54-2.52-2.52-2.16-3.51-5.62-2.52-8.78l7.55-35.2L204.84,8.87C210.17,4.17,216.73,1.09,223.76,0c7.06-.19,13.88,2.53,18.86,7.54,10.33,11.14,9.77,28.52-1.26,38.97l-116.9,118.1-33.94,7.55-1.26,1.25v.07Zm12.58-37.71l-5.04,20.12,20.13-5.03L231.28,36.46c4.78-4.21,5.34-11.46,1.26-16.35-2.52-2.52-5.03-3.77-7.54-2.52-3.34-.09-6.56,1.3-8.8,3.78l-114.39,114.39h.01Z"}),r.createElement("path",{d:"M179.76,227.54H23.88C10.69,227.54,0,216.84,0,203.65V47.78c0-13.19,10.69-23.88,23.88-23.88H108.1v15.07H23.88c-4.46,.46-7.77,4.34-7.54,8.81V203.65c-.24,4.47,3.08,8.34,7.54,8.8H179.76c4.75,.12,8.69-3.63,8.81-8.38,0-.14,0-.28,0-.42v-49.03h16.33v49.03c-1.03,13.25-11.92,23.57-25.21,23.88h.07Z"})))},ws=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 10.155 8.367"},e),r.createElement("path",{id:"Intersecci\xf3n_8","data-name":"Intersecci\xf3n 8",d:"M14368.751,22047.6a1.045,1.045,0,1,1,1.467-1.488l1.411,1.395,3.98-3.918h0c.008-.01.017-.018.025-.027a1.048,1.048,0,0,1,1.451,1.514l-5.456,5.361Z",transform:"translate(-14367.849 -22042.768)",fill:"currentcolor",stroke:"rgba(0,0,0,0)",strokeWidth:"1"}))},Ns=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 15 15"},e),r.createElement("path",{d:"M7.5,0h0A7.5,7.5,0,0,0,0,7.5H0A7.5,7.5,0,0,0,7.5,15h0a7.5,7.5,0,0,0,0-15M9.978,9.776l-1.9,1.9a.819.819,0,0,1-1.166,0h0L5.022,9.776a.773.773,0,0,1-.186-.864.875.875,0,0,1,.779-.541.793.793,0,0,1,.565.247l.5.5V3.9a.818.818,0,0,1,1.636,0V9.119l.5-.5a.79.79,0,0,1,.564-.248.872.872,0,0,1,.779.541.772.772,0,0,1-.185.864",transform:"translate(15 15) rotate(180)"}))},Is=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 15 15"},e),r.createElement("path",{d:"M7.5,0h0A7.5,7.5,0,0,0,0,7.5H0A7.5,7.5,0,0,0,7.5,15h0a7.5,7.5,0,0,0,0-15M9.978,9.776l-1.9,1.9a.819.819,0,0,1-1.166,0h0L5.023,9.776a.773.773,0,0,1-.186-.864.875.875,0,0,1,.779-.541.793.793,0,0,1,.565.247l.5.5V3.9a.818.818,0,0,1,1.636,0V9.119l.5-.5a.79.79,0,0,1,.564-.248.872.872,0,0,1,.779.541.772.772,0,0,1-.185.864"}))},xs=function(e){return r.createElement("svg",je({},e,{className:"min-icon",fill:"currentcolor",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256"}),r.createElement("g",null,r.createElement("path",{d:"M216,169H83.14a34,34,0,0,1-24.09-10.15L9.56,108A33.56,33.56,0,0,1,9.56,61L59,10.1A33.91,33.91,0,0,1,83.13,0H216a33.68,33.68,0,0,1,33.65,33.65V135.37A33.68,33.68,0,0,1,216,169M83.14,9A24.93,24.93,0,0,0,65.5,16.42L16,67.36a24.54,24.54,0,0,0,0,34.29l49.5,50.92A24.91,24.91,0,0,0,83.12,160H216a24.64,24.64,0,0,0,24.66-24.62V33.65A24.64,24.64,0,0,0,216,9H83.14Z"}),r.createElement("path",{d:"M162.57,96h0a7.23,7.23,0,1,1-10,10.46l-.2-.24L138.78,92.68l-13.54,13.57a7.21,7.21,0,1,1-10.79-9.58c.12-.14.25-.27.38-.4l.24-.24,13.56-13.55L115.09,68.94a7.22,7.22,0,0,1,10.17-10.21l13.59,13.58,13.54-13.58a7.22,7.22,0,0,1,10.18,10.21L149,82.48Z"})))},Rs=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("path",{d:"M126.09,0C56.45,0,0,56.45,0,126.09s56.45,126.09,126.09,126.09,126.09-56.45,126.09-126.09S195.72,0,126.09,0Zm79.61,146.23H46.48c-11.08,0-20.14-9.07-20.14-20.14h0c0-11.08,9.07-20.14,20.14-20.14H205.7c11.08,0,20.14,9.07,20.14,20.14h0c0,11.08-9.07,20.14-20.14,20.14Z"}))},ks=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",viewBox:"0 0 256 256"},e),r.createElement("g",{transform:"translate(0 0)"},r.createElement("g",{transform:"translate(0 0)"},r.createElement("path",{d:"M224.54,131.96c26.08-14.98,35.99-47.67,22.62-74.61-11.77-25.71-42.15-37.02-67.87-25.25-.96,.44-1.9,.91-2.83,1.4-9.84,5.4-17.74,13.74-22.62,23.85L108.09,9.09C102.84,3.49,95.57,.22,87.9,0H29.63C12.83,.49-.41,14.46,0,31.25v61.73c.19,7.83,3.25,15.33,8.6,21.05l123.12,129.87c10.78,11.6,28.92,12.27,40.52,1.49,.52-.48,1.01-.98,1.49-1.49l57.48-60.63c11.52-12.53,11.52-31.8,0-44.32l-6.68-6.98ZM60.25,79.27c-8.45-.23-15.12-7.27-14.89-15.72-.23-8.45,6.44-15.49,14.89-15.72,8.45,.24,15.11,7.27,14.89,15.72,.22,8.45-6.44,15.48-14.89,15.72m99.09,3.47h0c-.61-23.53,17.95-43.11,41.47-43.75,23.53,.64,42.09,20.22,41.47,43.75,.61,23.53-17.95,43.11-41.47,43.75-23.53-.64-42.09-20.22-41.47-43.75",fill:"#4ccb92"}),r.createElement("path",{d:"M217.93,64.76c-1.49-1.66-3.62-2.61-5.85-2.61-2.24,.02-4.37,.94-5.92,2.55l-21.93,23.19c-.31,.32-.52,.72-.59,1.16l-2.28,11.67c-.15,.73,.07,1.48,.59,2.01,.41,.4,.96,.62,1.53,.61,.14,.04,.29,.04,.44,0l10.98-2.24c.42-.08,.81-.3,1.1-.62l21.93-23.19c3.22-3.52,3.22-8.92,0-12.45v-.07Z",fill:"#4ccb92"}))))},Os=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("path",{d:"M230.01,21.29c-27.36-27.35-71.33-28.49-100.07-2.6h0l-36.83,36.7c-6.45,6.46-11.62,14.09-15.24,22.48-7.22,3.1-13.89,7.37-19.73,12.62h0L21.29,127.17c-28.39,28.39-28.39,74.42,0,102.81,28.39,28.39,74.42,28.39,102.81,0l36.77-36.77h0c5.25-5.85,9.52-12.51,12.62-19.73,8.39-3.62,16.01-8.79,22.48-15.24l36.77-36.77h0c25.9-28.73,24.76-72.72-2.6-100.07l-.12-.12ZM99.3,203.86h0c-14.33,14.33-37.55,14.33-51.88,0-14.33-14.33-14.33-37.55,0-51.88h0l26.81-26.81c6.56,25.45,26.43,45.32,51.88,51.88l-26.81,26.81Zm19.92-71.8c-6.28-6.28-10.05-14.63-10.62-23.49,18.38,1.16,33.02,15.81,34.17,34.19-8.86-.57-17.21-4.34-23.49-10.62l-.06-.08Zm86.94-35.05l-2.25,2.25h0l-26.81,26.81c-6.56-25.45-26.43-45.32-51.88-51.88l26.81-26.81h0l2.25-2.25h0c15.54-13,38.67-10.94,51.68,4.59,11.4,13.62,11.4,33.46,0,47.08v.1l.21,.1Z"}))},Ls=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("path",{d:"M125.28,0C56.09,0,0,56.09,0,125.28s56.09,125.28,125.28,125.28,125.28-56.09,125.28-125.28S194.47,0,125.28,0Zm-17.54,35.55h31.6V105.62c0,7.43-.39,14.78-1.16,22.05-.78,7.27-1.86,14.82-3.25,22.66h-22.78c-1.39-7.84-2.47-15.39-3.25-22.66-.78-7.27-1.16-14.62-1.16-22.05V35.55Zm33.81,167.7c-1.06,2.37-2.49,4.43-4.29,6.19-1.8,1.76-3.9,3.12-6.31,4.1-2.41,.98-5,1.47-7.78,1.47s-5.49-.49-7.9-1.47c-2.41-.98-4.51-2.35-6.31-4.1-1.8-1.76-3.21-3.82-4.23-6.19-1.02-2.37-1.53-4.94-1.53-7.72s.51-5.25,1.53-7.66c1.02-2.41,2.43-4.49,4.23-6.25,1.8-1.76,3.9-3.14,6.31-4.17,2.41-1.02,5.04-1.53,7.9-1.53s5.37,.51,7.78,1.53c2.41,1.02,4.51,2.41,6.31,4.17,1.79,1.76,3.22,3.84,4.29,6.25,1.06,2.41,1.59,4.96,1.59,7.66s-.53,5.35-1.59,7.72Z"}))},Ds=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("path",{d:"M126.32,0C56.55,0,0,56.55,0,126.32s56.55,126.32,126.32,126.32,126.32-56.55,126.32-126.32S196.08,0,126.32,0Zm13.11,197.19h-26.22V99.24h26.22v97.94Zm1.81-119.6c-.89,1.9-2.08,3.58-3.56,5.04-1.49,1.46-3.23,2.6-5.23,3.42-2,.82-4.13,1.23-6.41,1.23-2.15,0-4.2-.41-6.13-1.23-1.93-.82-3.63-1.96-5.08-3.42-1.46-1.46-2.61-3.14-3.47-5.04s-1.28-3.96-1.28-6.17,.43-4.29,1.28-6.22c.85-1.93,2.01-3.62,3.47-5.08s3.15-2.6,5.08-3.42c1.93-.82,3.97-1.24,6.13-1.24,2.28,0,4.42,.41,6.41,1.24,2,.82,3.74,1.96,5.23,3.42,1.49,1.46,2.67,3.15,3.56,5.08,.89,1.93,1.33,4.01,1.33,6.22s-.44,4.27-1.33,6.17Z"}))},Ms=function(e){return r.createElement("svg",je({},e,{className:"min-icon",fill:"currentcolor",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 113.208 29.822"}),r.createElement("g",{transform:"translate(-1.655)"},r.createElement("path",{d:"M12.721-19.038A8.7,8.7,0,0,0,7.609-20.59c-2.992,0-5.427,1.532-5.427,4.27,0,2.424,1.866,3.51,4.209,3.794l1.319.162c2.211.274,3.4.9,3.4,2.221,0,1.6-1.664,2.465-3.783,2.465A7.586,7.586,0,0,1,2.7-9.25L1.726-7.83a9.2,9.2,0,0,0,5.6,1.846c3.073,0,5.64-1.481,5.64-4.311,0-2.505-2.059-3.479-4.463-3.773L7.254-14.22c-2.13-.264-3.215-.923-3.215-2.211,0-1.532,1.481-2.465,3.56-2.465a7.431,7.431,0,0,1,4.209,1.308Zm13.338-1.349H14.587v1.694h4.849V-6.187h1.785V-18.693h4.838Zm7.668,0H31.506l-5.772,14.2h1.856l1.552-3.875H36.03l1.562,3.875h1.917Zm-1.136,1.765,2.759,6.867H29.822Zm21.281-1.765H52.087V-9.24L43.5-20.4H41.883V-6.187h1.785l.01-11.147L52.259-6.176h1.613Zm4.047,0v14.2h5.417c4.585,0,7.526-2.779,7.526-7.1s-2.942-7.1-7.526-7.1Zm5.417,1.694c3.723,0,5.65,2.171,5.65,5.406,0,3.215-1.927,5.406-5.65,5.406H59.7V-18.693Zm16.686-1.694H77.8l-5.772,14.2h1.856l1.552-3.875h6.887l1.562,3.875H85.8Zm-1.136,1.765,2.759,6.867H76.117Zm9.291-1.765v14.2h1.785v-6.127h1.664L96.5-6.187h2.211l-5-6.127h.112c3.043,0,4.96-1.582,4.96-4.047,0-2.587-1.765-4.027-4.97-4.027Zm5.6,1.674c2.059,0,3.155.781,3.155,2.353,0,1.592-1.065,2.424-3.155,2.424H89.962v-4.777Zm8.165-1.674v14.2h5.417c4.585,0,7.526-2.779,7.526-7.1s-2.942-7.1-7.526-7.1Zm5.417,1.694c3.723,0,5.65,2.171,5.65,5.406,0,3.215-1.927,5.406-5.65,5.406h-3.631V-18.693Z",transform:"translate(-0.021 35.806)"}),r.createElement("path",{d:"M15.951.127h2.468V7.417H15.951Zm-2.993.1L7.949,3.288a.224.224,0,0,1-.233,0L2.707.228a.69.69,0,0,0-.359-.1H2.342a.688.688,0,0,0-.687.687V7.407H4.122V4.269a.247.247,0,0,1,.376-.21L7.305,5.777a.879.879,0,0,0,.9.009l2.963-1.738a.249.249,0,0,1,.246,0,.245.245,0,0,1,.125.212V7.406H14.01V.813a.686.686,0,0,0-.686-.687h-.006a.686.686,0,0,0-.359.1Zm17.769-.1h-2.5V3.445a.245.245,0,0,1-.12.211.248.248,0,0,1-.243.006L21.374.208a.693.693,0,0,0-.323-.08h0a.688.688,0,0,0-.687.687V7.409h2.483V4.094a.247.247,0,0,1,.362-.218L29.719,7.33a.686.686,0,0,0,.322.08h0a.688.688,0,0,0,.687-.687Zm1.941,7.289V.127h1.136V7.417Zm7.819.13c-3.056,0-5.223-1.449-5.223-3.773S37.447,0,40.488,0s5.236,1.449,5.236,3.774-2.141,3.773-5.236,3.773Zm0-6.58c-2.272,0-4.022.992-4.022,2.807s1.749,2.807,4.022,2.807,4.035-.979,4.035-2.807S42.761.967,40.488.967Z",transform:"translate(0)"})))},Ps=function(e){return r.createElement("svg",je({},e,{className:"min-icon",fill:"currentcolor",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 121.755 28.546"}),r.createElement("g",{transform:"translate(-1.655)"},r.createElement("path",{d:"M12.537-8.4H4.594v-4.437h7.593v-1.612H4.594v-4.34H12.44v-1.6H2.886V-6.8h9.651ZM27.5-20.4H25.79V-9.725l-8.224-10.68H16.022V-6.8h1.709l.01-10.671,8.214,10.68H27.5Zm13.312,0H29.829v1.621H34.47V-6.8h1.709V-18.774h4.631ZM52.782-8.4H44.84v-4.437h7.593v-1.612H44.84v-4.34h7.845v-1.6H43.131V-6.8h9.651ZM56.268-20.4V-6.8h1.709v-5.865h1.592L64.239-6.8h2.117l-4.787-5.865h.107c2.913,0,4.748-1.515,4.748-3.874,0-2.476-1.689-3.855-4.758-3.855Zm5.36,1.6c1.971,0,3.02.748,3.02,2.253,0,1.524-1.019,2.321-3.02,2.321H57.977v-4.573ZM74.609-12.24c3.068,0,4.806-1.534,4.806-4.078S77.677-20.4,74.609-20.4H69.444V-6.8h1.709V-12.24Zm-.039-6.544c2.01,0,3.068.816,3.068,2.466s-1.058,2.466-3.068,2.466H71.153v-4.932ZM82.328-20.4V-6.8h1.709v-5.865h1.592L90.3-6.8h2.117l-4.787-5.865h.107c2.913,0,4.748-1.515,4.748-3.874,0-2.476-1.689-3.855-4.758-3.855Zm5.36,1.6c1.971,0,3.02.748,3.02,2.253,0,1.524-1.02,2.321-3.02,2.321H84.037v-4.573Zm9.525-1.6H95.5V-6.8h1.709ZM110.835-19.1a8.323,8.323,0,0,0-4.894-1.486c-2.864,0-5.195,1.466-5.195,4.088,0,2.321,1.787,3.359,4.029,3.631l1.262.155c2.117.262,3.253.864,3.253,2.126,0,1.534-1.592,2.359-3.622,2.359a7.261,7.261,0,0,1-4.428-1.5l-.932,1.359a8.808,8.808,0,0,0,5.36,1.767c2.942,0,5.4-1.418,5.4-4.127,0-2.4-1.971-3.33-4.272-3.612l-1.194-.146c-2.039-.252-3.078-.884-3.078-2.117,0-1.466,1.418-2.359,3.408-2.359a7.113,7.113,0,0,1,4.029,1.253ZM123.817-8.4h-7.942v-4.437h7.593v-1.612h-7.593v-4.34h7.845v-1.6h-9.554V-6.8h9.651Z",transform:"translate(-0.407 35.155)"}),r.createElement("path",{d:"M15.34.122H17.7V7.1H15.34Zm-2.865.1L7.68,3.147a.214.214,0,0,1-.223,0L2.662.218a.66.66,0,0,0-.344-.1H2.313a.659.659,0,0,0-.658.658V7.091H4.017v-3a.236.236,0,0,1,.36-.2L7.063,5.53a.841.841,0,0,0,.865.009l2.836-1.664a.239.239,0,0,1,.236,0,.234.234,0,0,1,.12.2V7.089h2.361V.778a.656.656,0,0,0-.657-.658h-.006a.656.656,0,0,0-.344.1Zm17.009-.1h-2.4V3.3a.234.234,0,0,1-.115.2.237.237,0,0,1-.232.006L20.531.2a.663.663,0,0,0-.309-.077h0a.659.659,0,0,0-.658.658V7.092h2.377V3.919a.236.236,0,0,1,.347-.208l6.235,3.307a.656.656,0,0,0,.308.077h0a.659.659,0,0,0,.658-.658ZM31.342,7.1V.122H32.43V7.1Zm7.485.125c-2.925,0-5-1.387-5-3.611S35.916,0,38.827,0,43.84,1.387,43.84,3.613s-2.05,3.611-5.012,3.611Zm0-6.3c-2.175,0-3.85.95-3.85,2.687S36.652,6.3,38.827,6.3s3.862-.937,3.862-2.687S41,.925,38.827.925Z",transform:"translate(0)"})))},Bs=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor"},e,{viewBox:"0 0 117.104 38.414"}),r.createElement("g",{id:"ConsoleAGPLV3-Logo-License",transform:"translate(6804.003 4884.319)"},r.createElement("g",{id:"agpl-logo",transform:"translate(-6804.003 -4884.319)"},r.createElement("g",{id:"g2",transform:"translate(0 0)"},r.createElement("path",{id:"path1",d:"M111.872,1769.742l-8.188,35.724h79.124a7.037,7.037,0,0,1-5.3-2.53,5.366,5.366,0,0,1-.522-.89c-.094-.232-.183-.464-.272-.7a7.08,7.08,0,0,1-.287-2.464,17.963,17.963,0,0,1,3.281-8.475,45.721,45.721,0,0,1,9.041-9.865c.857-.711,1.743-1.414,2.671-2.1,1.146-.843,2.3-1.62,3.458-2.347a43.96,43.96,0,0,1,12.271-5.51,47.417,47.417,0,0,0-11.631,5.878c-.144.1-.285.2-.427.294a52.021,52.021,0,0,0-5.974,4.812c-5.636,5.3-8.615,10.79-7.261,14.007a4,4,0,0,0,.346.632c1.455,2.139,5.06,2.51,9.63,1.361.311-.077.622-.166.942-.258a37.1,37.1,0,0,0,4.605-1.691c.384-.17.771-.344,1.162-.53.04-.019.078-.037.118-.059,5.038-2.5,8.909-5.383,9.748-7.113a1.076,1.076,0,0,0,.1-.949c-.6-1.213-4.782-.394-9.851,1.8-.407.176-.819.358-1.236.551.339-.314.692-.63,1.052-.942.574-.495,1.169-.978,1.8-1.456a35.749,35.749,0,0,1,2.979-2.031c4.619-3.485,6.954-6.781,6.467-8a.861.861,0,0,0-.589-.486c-.963-.306-2.72.059-4.855.935a36.256,36.256,0,0,0-5.834,3.126l-.28.184-.051.03-.986.653.566-1.037a17.819,17.819,0,0,1,3.914-4.634,27.8,27.8,0,0,1,4.215-3.017c.582-.34,1.162-.656,1.744-.94s1.191-.55,1.773-.781a20.5,20.5,0,0,1,4.951-1.623c-.128,0-4.194.438-4.194.438H111.872Zm63.778.051c-.231,3.521.452,8.679,2,14.4q.413,1.53.9,3.106.307.971.633,1.911c-.127.187-.255.373-.375.56a19.777,19.777,0,0,0-3.347,8.2,50.449,50.449,0,0,1-1.78-8.909q-.148-1.366-.228-2.7c-.381-6.461.462-12.317,2.192-16.568Zm-38.571,4.583c.044,0,.087,0,.132,0h8.7a3.042,3.042,0,0,1,1.729.419.985.985,0,0,1,.464,1.089l-1.037,4.686H144l1.008-4.561h-7.68l-2.773,12.536-1,4.539h7.673l.007-.029,1.538-6.946h-3.6l.346-1.567h6.672l-1.913,8.667a1.226,1.226,0,0,1-.132.345,1.916,1.916,0,0,1-.816.736,4.054,4.054,0,0,1-1.913.419h-8.7a3.037,3.037,0,0,1-1.729-.419.97.97,0,0,1-.463-1.081l3.833-17.326a1.661,1.661,0,0,1,.942-1.089c.019-.009.04-.011.059-.022a4.014,4.014,0,0,1,1.722-.4Zm13.639,0h10.954a3.037,3.037,0,0,1,1.721.419.98.98,0,0,1,.471,1.089l-2.045,9.24a1.658,1.658,0,0,1-.949,1.081,4.025,4.025,0,0,1-1.905.427h-7.96l-1.538,6.938-.25,1.14h-3l.228-1.03,4.274-19.3Zm15.133,0h3l-3.4,15.353-.743,3.355h7.18c.075.55.163,1.091.258,1.626h-10.8l.853-3.856Zm-12.492,1.633-1.994,8.99h7.482l1.986-8.99Zm-15.954,21.218c.029,0,.059,0,.088,0a2.111,2.111,0,0,1,.9.176,1.068,1.068,0,0,1,.552.545,1.329,1.329,0,0,1,.074.787l-.022.11h-.861l.007-.1a.679.679,0,0,0-.081-.471.471.471,0,0,0-.037-.044.518.518,0,0,0-.074-.059,1.063,1.063,0,0,0-.552-.118,1.284,1.284,0,0,0-.728.17.647.647,0,0,0-.294.382.283.283,0,0,0,.059.272l.007.007a2.009,2.009,0,0,0,.728.258,4.948,4.948,0,0,1,.949.3,1.121,1.121,0,0,1,.544.523,1.145,1.145,0,0,1,.059.729,1.669,1.669,0,0,1-.39.728,1.973,1.973,0,0,1-.743.529,2.506,2.506,0,0,1-.956.191,2.384,2.384,0,0,1-1.03-.191,1.184,1.184,0,0,1-.6-.61,1.5,1.5,0,0,1-.074-.89l.022-.1h.846l-.007.1a.93.93,0,0,0,.051.471.578.578,0,0,0,.294.28,1.365,1.365,0,0,0,.589.117,1.626,1.626,0,0,0,.559-.1.986.986,0,0,0,.39-.236.653.653,0,0,0,.169-.316.348.348,0,0,0-.022-.257.537.537,0,0,0-.272-.2l-.721-.214a3.2,3.2,0,0,1-.831-.294,1.029,1.029,0,0,1-.449-.486,1.043,1.043,0,0,1-.037-.639,1.555,1.555,0,0,1,.36-.7,1.8,1.8,0,0,1,.721-.493A2.532,2.532,0,0,1,137.406,1797.228Zm7.725.014c.047,0,.09,0,.14,0l.53.059.177.015-.257.654-.052.1-.4-.037a.469.469,0,0,0-.265.058l-.015.016a.164.164,0,0,0-.029.028.7.7,0,0,0-.11.279s-.015.064-.029.118h.633l-.162.729h-.618c-.047.212-.625,2.8-.625,2.8h-.853s.555-2.49.625-2.8h-.493l.162-.729h.485c.024-.1.059-.228.059-.228a1.807,1.807,0,0,1,.177-.522,1.11,1.11,0,0,1,.4-.4,1.238,1.238,0,0,1,.522-.147Zm2.038.037-.28,1.257h.552l-.162.729h-.552c-.045.2-.4,1.773-.4,1.773s-.029.189-.029.243c0,0,0,.005,0,.007s0,.007,0,.007h.007l.088.007.4-.029-.044.656.007.117-.581.066a.944.944,0,0,1-.522-.117.524.524,0,0,1-.235-.339.548.548,0,0,1-.015-.118,3.014,3.014,0,0,1,.088-.6s.309-1.386.375-1.677h-.4l.162-.729h.4c.038-.17.169-.75.169-.75l.684-.361.28-.146Zm-27.109.028h3.31l-.184.824h-2.42c-.038.166-.189.844-.243,1.089h2.1l-.184.824h-2.1c-.045.206-.449,2.024-.449,2.024H119Zm4.436,1.163a.905.905,0,0,1,.1,0,1,1,0,0,1,.6.2l.118.081-.456.75-.125-.088a.532.532,0,0,0-.294-.089.46.46,0,0,0-.257.089.641.641,0,0,0-.221.243,2.32,2.32,0,0,0-.221.6l-.4,1.81h-.853l.787-3.532h.794s-.027.107-.037.148c.038-.029.077-.068.11-.089A.9.9,0,0,1,124.5,1798.471Zm2.531,0c.051,0,.1,0,.155,0a1.247,1.247,0,0,1,1.081.5,1.363,1.363,0,0,1,.228.794,2.659,2.659,0,0,1-.066.567l-.066.257h-2.4c0,.051-.007.1-.007.148a.7.7,0,0,0,.118.433.534.534,0,0,0,.132.133.652.652,0,0,0,.36.1.845.845,0,0,0,.471-.14,1.235,1.235,0,0,0,.383-.419h.912l-.081.177a2.017,2.017,0,0,1-.721.823,1.945,1.945,0,0,1-1.067.3,1.327,1.327,0,0,1-1.148-.5,1.609,1.609,0,0,1-.162-1.34,2.439,2.439,0,0,1,.75-1.353,1.906,1.906,0,0,1,1.126-.478Zm3.833,0c.051,0,.1,0,.154,0a1.247,1.247,0,0,1,1.081.5,1.363,1.363,0,0,1,.228.794,2.591,2.591,0,0,1-.066.559l-.066.264h-2.4c0,.034-.005.064-.007.1,0,.012,0,.031,0,.044s0,0,0,.008c0,.034,0,.069.007.1a.635.635,0,0,0,.11.331c.012.017.023.037.037.052a.6.6,0,0,0,.456.176.839.839,0,0,0,.471-.14,1.233,1.233,0,0,0,.383-.419h.92l-.088.177a2.017,2.017,0,0,1-.721.823,1.945,1.945,0,0,1-1.067.3,1.226,1.226,0,0,1-1.376-1.3c0-.049,0-.1.007-.154a2.667,2.667,0,0,1,.059-.383,2.439,2.439,0,0,1,.743-1.353A1.926,1.926,0,0,1,130.859,1798.471Zm10.439,0c.053,0,.1,0,.155,0a1.309,1.309,0,0,1,1.111.493,1.569,1.569,0,0,1,.177,1.324,2.724,2.724,0,0,1-.427,1.038,2.023,2.023,0,0,1-1.611.816,1.289,1.289,0,0,1-1.111-.5,1.317,1.317,0,0,1-.235-.8,2.523,2.523,0,0,1,.066-.566,2.307,2.307,0,0,1,.853-1.42,1.983,1.983,0,0,1,1.023-.383Zm12.926,0c.062,0,.12,0,.184,0a1.873,1.873,0,0,1,.706.1.772.772,0,0,1,.4.308.845.845,0,0,1,.11.449l-.088.538-.162.728a7.979,7.979,0,0,0-.177.941.948.948,0,0,0,.037.339l.059.192h-.868l-.037-.111a1.047,1.047,0,0,1-.015-.176,2.594,2.594,0,0,1-.478.243,2.071,2.071,0,0,1-.677.118,1.114,1.114,0,0,1-.876-.309.782.782,0,0,1-.2-.544,1.191,1.191,0,0,1,.029-.25,1.225,1.225,0,0,1,.228-.493,1.371,1.371,0,0,1,.4-.354,1.775,1.775,0,0,1,.478-.191l.522-.088a5.716,5.716,0,0,0,.92-.169.458.458,0,0,1,.015-.051.47.47,0,0,0-.007-.324s-.012-.012-.015-.015a.391.391,0,0,0-.029-.029.722.722,0,0,0-.441-.1.974.974,0,0,0-.515.11.955.955,0,0,0-.316.4h-.89l.081-.177a1.881,1.881,0,0,1,.39-.6,1.61,1.61,0,0,1,.618-.36A2.445,2.445,0,0,1,154.223,1798.471Zm3.73,0a.9.9,0,0,1,.1,0,1.015,1.015,0,0,1,.6.2l.11.081-.456.75-.125-.088a.514.514,0,0,0-.287-.089.488.488,0,0,0-.265.089.642.642,0,0,0-.213.243,2.4,2.4,0,0,0-.221.6l-.4,1.81h-.853l.787-3.532h.795s-.02.107-.029.148a1.309,1.309,0,0,1,.11-.089A.857.857,0,0,1,157.953,1798.471Zm2.523,0c.051,0,.1,0,.154,0a1.244,1.244,0,0,1,1.082.5,1.346,1.346,0,0,1,.228.794,2.7,2.7,0,0,1-.074.567l-.059.257h-2.4c0,.051-.015.1-.015.148a.719.719,0,0,0,.118.433c.012.017.031.037.044.052l.029.029a.614.614,0,0,0,.427.147.845.845,0,0,0,.471-.14,1.259,1.259,0,0,0,.383-.419h.92l-.088.177a2.035,2.035,0,0,1-.721.823,1.945,1.945,0,0,1-1.067.3,1.312,1.312,0,0,1-1.14-.5,1.617,1.617,0,0,1-.169-1.34,2.43,2.43,0,0,1,.743-1.353A1.933,1.933,0,0,1,160.477,1798.471Zm-12.882.066h.875s.108,2.1.11,2.126c.035-.075.063-.137.066-.147l.964-1.979h.8s.074,2.07.074,2.082c.024-.042,1.1-2.082,1.1-2.082h.868l-1.913,3.532h-.787s-.076-1.914-.081-2.024l-.986,2.024h-.809Zm-20.555.67a.935.935,0,0,0-.559.221,1.084,1.084,0,0,0-.3.419h1.449c0-.026.007-.057.007-.081a.612.612,0,0,0-.066-.309.517.517,0,0,0-.486-.25Zm3.833,0a.936.936,0,0,0-.559.221,1.11,1.11,0,0,0-.3.419h1.449c0-.026.007-.057.007-.081a.587.587,0,0,0-.066-.309.629.629,0,0,0-.074-.1.548.548,0,0,0-.412-.154Zm29.647,0a.949.949,0,0,0-.581.221,1.137,1.137,0,0,0-.3.419h1.442c0-.026.007-.057.007-.081a.588.588,0,0,0-.066-.309.525.525,0,0,0-.486-.25Zm-19.275.015a.979.979,0,0,0-.544.266,1.593,1.593,0,0,0-.434.853,1.94,1.94,0,0,0-.052.419.723.723,0,0,0,.1.4.735.735,0,0,0,.059.074.572.572,0,0,0,.434.169.928.928,0,0,0,.647-.272,1.633,1.633,0,0,0,.434-.868,1.047,1.047,0,0,0-.044-.794.534.534,0,0,0-.486-.244C141.32,1799.221,141.282,1799.217,141.246,1799.221Zm13.293,1.288a5.367,5.367,0,0,1-.721.14,2.463,2.463,0,0,0-.471.1.527.527,0,0,0-.2.139.433.433,0,0,0-.1.192.515.515,0,0,0-.007.08s0,.005,0,.007,0,.017,0,.023a.289.289,0,0,0,.007.037s.006.011.007.014,0,.016.007.022.011.016.015.022a.322.322,0,0,0,.022.03.465.465,0,0,0,.346.1,1.169,1.169,0,0,0,.53-.118,1.028,1.028,0,0,0,.39-.338A1.363,1.363,0,0,0,154.54,1800.508Zm-44.936-5.9,19.744-20.385h3.224l-4.767,20.385h-2.652l1.354-5.868H118.23l-5.625,5.868h-3m10.637-7.968h6.769l1.249-5.118q.756-3.044,1.456-5.074-1.4,1.75-3.7,4.157l-5.775,6.034",transform:"translate(-103.684 -1768.232)",fill:"#fff"}),r.createElement("path",{id:"path2",d:"M631.974,1799.956c-2.732-.236-4.789-1.228-6-2.873a6.137,6.137,0,0,1-.6-1.028c-.113-.269-.209-.518-.307-.768l1.1-.427c.094.242.188.482.286.719a5.018,5.018,0,0,0,.475.807c1.017,1.382,2.734,2.189,5.1,2.395l2.581,0a22.475,22.475,0,0,0,2.5-.352,32.267,32.267,0,0,0,4.839-1.375c1.309-.477,2.635-1.036,3.938-1.663a55.682,55.682,0,0,0,8.9-5.387c.944-.694,1.89-1.437,2.811-2.2q1.236-1.028,2.369-2.085a22.658,22.658,0,0,0,4.519-5.8c.87-1.748,1.018-3.148.418-3.941a2.475,2.475,0,0,0-1.874-.815l-1.556-.12,1.249-.937c4.467-3.351,6.994-7.319,6.145-9.648a2.5,2.5,0,0,0-1.6-1.474,5.106,5.106,0,0,0-1.291-.264l-1.372,0a21.024,21.024,0,0,0-7.061,1.994l-.518-1.057a22.329,22.329,0,0,1,7.537-2.112h1.464a6.307,6.307,0,0,1,1.641.332,3.639,3.639,0,0,1,2.3,2.179c.968,2.657-1.24,6.664-5.541,10.2a3.012,3.012,0,0,1,1.41,1.01c.9,1.185.792,2.975-.3,5.176a23.549,23.549,0,0,1-4.763,6.125q-1.166,1.088-2.425,2.135c-.939.783-1.9,1.539-2.867,2.247a56.9,56.9,0,0,1-9.089,5.5c-1.338.644-2.7,1.219-4.044,1.709a33.472,33.472,0,0,1-5.016,1.424,23.259,23.259,0,0,1-2.675.371Z",transform:"translate(-553.088 -1761.542)",fill:"#fff"})))))},Fs=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor"},e,{viewBox:"0 0 77.654 32.135"}),r.createElement("g",{id:"g2",transform:"translate(1.364)"},r.createElement("path",{id:"path1",d:"M109.019,1769.589l-5.334,23.273h51.548a4.585,4.585,0,0,1-3.456-1.649,3.482,3.482,0,0,1-.34-.58c-.061-.15-.119-.3-.177-.456a4.613,4.613,0,0,1-.187-1.605,11.7,11.7,0,0,1,2.138-5.521,29.773,29.773,0,0,1,5.89-6.427c.558-.464,1.135-.921,1.74-1.366.747-.55,1.5-1.056,2.253-1.529a28.644,28.644,0,0,1,7.994-3.59,30.9,30.9,0,0,0-7.577,3.829c-.094.063-.186.128-.278.192a33.879,33.879,0,0,0-3.892,3.134c-3.672,3.452-5.612,7.03-4.73,9.125a2.636,2.636,0,0,0,.225.412c.948,1.394,3.3,1.635,6.274.886.2-.051.4-.108.613-.168a24.153,24.153,0,0,0,3-1.1c.25-.11.5-.224.757-.345l.077-.038c3.282-1.631,5.8-3.507,6.35-4.635a.7.7,0,0,0,.067-.618c-.39-.79-3.115-.256-6.417,1.174-.265.115-.534.233-.805.36.221-.205.451-.411.685-.614.374-.323.762-.638,1.174-.949a23.412,23.412,0,0,1,1.941-1.323c3.009-2.27,4.53-4.418,4.213-5.215a.56.56,0,0,0-.383-.316,5.536,5.536,0,0,0-3.163.609,23.646,23.646,0,0,0-3.8,2.037l-.182.12-.034.019-.642.427.369-.676a11.606,11.606,0,0,1,2.55-3.02,18.123,18.123,0,0,1,2.746-1.965c.379-.222.757-.428,1.136-.613s.776-.358,1.155-.508a13.345,13.345,0,0,1,3.226-1.057c-.083,0-2.732.285-2.732.285h-63.99Zm41.55.034a31.158,31.158,0,0,0,1.3,9.384q.269,1,.589,2.022.2.633.412,1.246c-.083.122-.166.243-.244.364a12.887,12.887,0,0,0-2.181,5.339,32.871,32.871,0,0,1-1.16-5.8q-.1-.89-.149-1.759a25.555,25.555,0,0,1,1.428-10.793Zm-25.128,2.986H131.2a1.979,1.979,0,0,1,1.126.273.641.641,0,0,1,.3.709l-.676,3.053h-2l.657-2.971h-5l-1.807,8.167-.652,2.957h5l0-.019,1-4.524H126.8l.225-1.021h4.347l-1.246,5.646a.8.8,0,0,1-.086.225,1.246,1.246,0,0,1-.532.479,2.643,2.643,0,0,1-1.246.273H122.6a1.979,1.979,0,0,1-1.126-.273.632.632,0,0,1-.3-.7l2.5-11.287a1.081,1.081,0,0,1,.613-.709c.012-.007.026-.008.038-.014a2.612,2.612,0,0,1,1.122-.259Zm8.886,0h7.136a1.976,1.976,0,0,1,1.121.273.638.638,0,0,1,.307.709l-1.332,6.02a1.078,1.078,0,0,1-.618.7,2.621,2.621,0,0,1-1.241.278h-5.186l-1,4.52-.163.743h-1.955l.149-.671,2.785-12.576Zm9.859,0h1.955l-2.214,10-.484,2.185h4.678c.049.359.106.711.168,1.059h-7.036l.556-2.511Zm-8.138,1.064-1.3,5.857h4.874l1.294-5.857ZM125.653,1787.5h.058a1.374,1.374,0,0,1,.585.115.694.694,0,0,1,.359.355.866.866,0,0,1,.048.513l-.014.072h-.561l0-.067a.441.441,0,0,0-.053-.307.255.255,0,0,0-.072-.067.694.694,0,0,0-.359-.077.837.837,0,0,0-.474.11.422.422,0,0,0-.192.249.185.185,0,0,0,.038.177l0,0a1.31,1.31,0,0,0,.474.168,3.21,3.21,0,0,1,.618.2.731.731,0,0,1,.355.34.746.746,0,0,1,.038.475,1.081,1.081,0,0,1-.254.474,1.286,1.286,0,0,1-.484.345,1.635,1.635,0,0,1-.623.125,1.556,1.556,0,0,1-.671-.125.773.773,0,0,1-.388-.4.976.976,0,0,1-.048-.58l.014-.067h.551l0,.067a.6.6,0,0,0,.034.307.371.371,0,0,0,.192.182.878.878,0,0,0,.383.077,1.051,1.051,0,0,0,.364-.062.642.642,0,0,0,.254-.153.426.426,0,0,0,.11-.206.227.227,0,0,0-.014-.168.351.351,0,0,0-.177-.129l-.47-.139a2.106,2.106,0,0,1-.542-.192.672.672,0,0,1-.292-.316.682.682,0,0,1-.024-.417,1.014,1.014,0,0,1,.235-.455,1.179,1.179,0,0,1,.47-.321A1.648,1.648,0,0,1,125.653,1787.5Zm5.032.01c.03,0,.059,0,.091,0l.345.038.115.01-.168.427-.034.067-.264-.024a.3.3,0,0,0-.173.038l-.01.01a.172.172,0,0,0-.019.019.452.452,0,0,0-.072.182s-.01.042-.019.077h.412l-.105.474h-.4l-.407,1.826h-.556s.361-1.622.407-1.826h-.321l.105-.474h.316c.015-.066.038-.149.038-.149a1.17,1.17,0,0,1,.115-.34.725.725,0,0,1,.264-.259.805.805,0,0,1,.34-.1Zm1.328.024-.182.82h.359l-.105.474h-.359c-.029.132-.259,1.155-.259,1.155s-.019.123-.019.158c0,0,0,0,0,0s0,0,0,0h0l.058,0,.264-.019-.029.427,0,.077-.379.043a.614.614,0,0,1-.34-.077.339.339,0,0,1-.153-.22.363.363,0,0,1-.01-.077,1.959,1.959,0,0,1,.058-.388s.2-.9.244-1.093h-.264l.105-.474h.264c.025-.11.11-.489.11-.489l.446-.235.182-.1Zm-17.661.019h2.157l-.12.537h-1.577c-.025.109-.123.55-.158.709h1.366l-.12.537h-1.366c-.029.134-.292,1.318-.292,1.318h-.58Zm2.89.757a.512.512,0,0,1,.067,0,.652.652,0,0,1,.388.129l.077.053-.3.489-.081-.058a.35.35,0,0,0-.192-.058.3.3,0,0,0-.168.058.423.423,0,0,0-.144.158,1.513,1.513,0,0,0-.144.393l-.259,1.179h-.556l.513-2.3h.518s-.018.07-.024.1c.025-.019.05-.044.072-.058A.591.591,0,0,1,117.242,1788.305Zm1.649,0c.033,0,.066,0,.1,0a.812.812,0,0,1,.7.326.89.89,0,0,1,.149.518,1.73,1.73,0,0,1-.043.369l-.043.168H118.2c0,.032,0,.067,0,.1a.459.459,0,0,0,.077.283.358.358,0,0,0,.086.086.426.426,0,0,0,.235.062.555.555,0,0,0,.307-.091.81.81,0,0,0,.249-.273h.594l-.053.115a1.316,1.316,0,0,1-.47.537,1.269,1.269,0,0,1-.695.2.864.864,0,0,1-.748-.326,1.047,1.047,0,0,1-.105-.872,1.59,1.59,0,0,1,.489-.882,1.238,1.238,0,0,1,.733-.311Zm2.5,0c.033,0,.066,0,.1,0a.812.812,0,0,1,.7.326.889.889,0,0,1,.149.518,1.687,1.687,0,0,1-.043.364l-.043.173h-1.562c0,.021,0,.041,0,.062s0,.02,0,.029,0,0,0,0c0,.023,0,.046,0,.067a.414.414,0,0,0,.072.216c.008.011.015.024.024.033a.389.389,0,0,0,.3.115.55.55,0,0,0,.307-.091.807.807,0,0,0,.249-.273h.6l-.057.115a1.316,1.316,0,0,1-.47.537,1.269,1.269,0,0,1-.695.2.8.8,0,0,1-.9-.848c0-.032,0-.067,0-.1a1.74,1.74,0,0,1,.038-.249,1.589,1.589,0,0,1,.484-.882,1.254,1.254,0,0,1,.738-.312Zm6.8,0c.034,0,.066,0,.1,0a.851.851,0,0,1,.724.321,1.022,1.022,0,0,1,.115.863,1.766,1.766,0,0,1-.278.676,1.321,1.321,0,0,1-1.05.532.839.839,0,0,1-.724-.326.858.858,0,0,1-.153-.522,1.647,1.647,0,0,1,.043-.369,1.5,1.5,0,0,1,.556-.925,1.294,1.294,0,0,1,.666-.249Zm8.421,0c.04,0,.078,0,.12,0a1.23,1.23,0,0,1,.46.067.508.508,0,0,1,.259.2.55.55,0,0,1,.072.292l-.057.35-.105.475a5.233,5.233,0,0,0-.115.613.617.617,0,0,0,.024.22l.038.125h-.566l-.024-.072a.682.682,0,0,1-.01-.115,1.7,1.7,0,0,1-.312.158,1.354,1.354,0,0,1-.441.077.726.726,0,0,1-.57-.2.51.51,0,0,1-.129-.355.772.772,0,0,1,.019-.163.8.8,0,0,1,.149-.321.9.9,0,0,1,.259-.23,1.163,1.163,0,0,1,.312-.125l.34-.057a3.732,3.732,0,0,0,.6-.11.293.293,0,0,1,.01-.033.306.306,0,0,0,0-.211l-.01-.01a.213.213,0,0,0-.019-.019.475.475,0,0,0-.288-.067.637.637,0,0,0-.335.072.626.626,0,0,0-.206.259h-.58l.053-.115a1.224,1.224,0,0,1,.254-.393,1.061,1.061,0,0,1,.4-.235,1.6,1.6,0,0,1,.4-.076Zm2.43,0a.513.513,0,0,1,.067,0,.662.662,0,0,1,.393.129l.072.053-.3.489-.081-.058a.339.339,0,0,0-.187-.058.317.317,0,0,0-.173.058.425.425,0,0,0-.139.158,1.57,1.57,0,0,0-.144.393l-.264,1.179h-.556l.513-2.3h.518s-.013.07-.019.1c.025-.019.049-.044.072-.058A.564.564,0,0,1,139.039,1788.305Zm1.644,0c.033,0,.066,0,.1,0a.81.81,0,0,1,.7.326.879.879,0,0,1,.149.518,1.755,1.755,0,0,1-.048.369l-.038.168h-1.562c0,.032-.01.067-.01.1a.469.469,0,0,0,.077.283c.008.011.02.024.029.033l.019.019a.4.4,0,0,0,.278.1.555.555,0,0,0,.307-.091.826.826,0,0,0,.249-.273h.6l-.058.115a1.328,1.328,0,0,1-.47.537,1.27,1.27,0,0,1-.695.2.855.855,0,0,1-.743-.326,1.052,1.052,0,0,1-.11-.872,1.584,1.584,0,0,1,.484-.882A1.256,1.256,0,0,1,140.683,1788.305Zm-8.392.043h.57s.07,1.365.072,1.385c.023-.049.041-.09.043-.1l.628-1.289h.522s.048,1.349.048,1.356c.015-.028.714-1.356.714-1.356h.566l-1.246,2.3H133.7s-.05-1.248-.053-1.318l-.642,1.318h-.527Zm-13.391.436a.606.606,0,0,0-.364.144.707.707,0,0,0-.2.273h.944c0-.017,0-.037,0-.053a.4.4,0,0,0-.043-.2.336.336,0,0,0-.316-.163H118.9Zm2.5,0a.606.606,0,0,0-.364.144.723.723,0,0,0-.2.273h.944c0-.017,0-.037,0-.053a.381.381,0,0,0-.043-.2.386.386,0,0,0-.048-.062.355.355,0,0,0-.268-.1H121.4Zm19.315,0a.618.618,0,0,0-.379.144.74.74,0,0,0-.2.273h.939c0-.017,0-.037,0-.053a.381.381,0,0,0-.043-.2.341.341,0,0,0-.316-.163h-.01Zm-12.557.01a.635.635,0,0,0-.355.172,1.038,1.038,0,0,0-.283.556,1.269,1.269,0,0,0-.034.273.472.472,0,0,0,.062.259.438.438,0,0,0,.038.048.372.372,0,0,0,.283.11.6.6,0,0,0,.422-.177,1.064,1.064,0,0,0,.283-.566.683.683,0,0,0-.029-.517.349.349,0,0,0-.316-.158A.589.589,0,0,0,128.155,1788.794Zm8.66.839a3.592,3.592,0,0,1-.47.091,1.627,1.627,0,0,0-.307.067.34.34,0,0,0-.129.091.285.285,0,0,0-.067.125.339.339,0,0,0,0,.053s0,0,0,0,0,.011,0,.014a.2.2,0,0,0,0,.024l0,.01a.15.15,0,0,0,0,.014l.01.014a.188.188,0,0,0,.014.019.3.3,0,0,0,.225.063.765.765,0,0,0,.345-.077.672.672,0,0,0,.254-.221A.891.891,0,0,0,136.816,1789.633Zm-29.275-3.843L120.4,1772.51h2.1L119.4,1785.79h-1.728l.882-3.823H113.16l-3.664,3.823h-1.955m6.93-5.191h4.41l.814-3.334q.493-1.984.948-3.307-.911,1.141-2.41,2.709l-3.762,3.932",transform:"translate(-103.684 -1768.606)",fill:"#07193e"}),r.createElement("path",{id:"path2",d:"M629.567,1786.568a5.185,5.185,0,0,1-3.908-1.872,4,4,0,0,1-.392-.669c-.073-.175-.136-.338-.2-.5l.715-.278c.061.157.122.314.186.468a3.234,3.234,0,0,0,.309.526,4.373,4.373,0,0,0,3.323,1.56h1.681a14.791,14.791,0,0,0,1.625-.229,21.089,21.089,0,0,0,3.153-.9c.853-.311,1.716-.676,2.566-1.084a36.317,36.317,0,0,0,5.8-3.51c.615-.452,1.231-.935,1.831-1.435q.805-.67,1.543-1.358a14.769,14.769,0,0,0,2.944-3.775c.567-1.139.663-2.051.272-2.568a1.61,1.61,0,0,0-1.221-.531l-1.014-.079.814-.61c2.91-2.184,4.556-4.768,4-6.286a1.628,1.628,0,0,0-1.04-.96,3.321,3.321,0,0,0-.841-.172h-.894a13.692,13.692,0,0,0-4.6,1.3l-.337-.689a14.546,14.546,0,0,1,4.91-1.376h.954a4.115,4.115,0,0,1,1.069.216,2.37,2.37,0,0,1,1.5,1.42c.63,1.731-.808,4.341-3.61,6.647a1.964,1.964,0,0,1,.918.658c.584.772.516,1.938-.2,3.372a15.329,15.329,0,0,1-3.1,3.99q-.76.708-1.58,1.391c-.612.51-1.241,1-1.868,1.464a37.085,37.085,0,0,1-5.922,3.583c-.872.419-1.758.794-2.635,1.113a21.86,21.86,0,0,1-3.268.927,15.365,15.365,0,0,1-1.743.242Z",transform:"translate(-578.174 -1761.542)",fill:"#07193e"})))},Us=function(e){return r.createElement("svg",je({},e,{className:"min-icon",fill:"currentcolor",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 550 350"}),r.createElement("metadata",{id:"metadata4860"}),r.createElement("defs",{id:"defs4858"},r.createElement("clipPath",{clipPathUnits:"userSpaceOnUse",id:"clipPath4882"},r.createElement("path",{d:"M 117,49 H 262 V 240 H 117 Z",id:"path4880"}))),r.createElement("g",{id:"g4862",transform:"matrix(1.3333333,0,0,1.3333333,0,-199.99999)"},r.createElement("g",{id:"g5617",transform:"translate(-0.61796941,-4.3257855)"},r.createElement("path",{transform:"matrix(0.75000002,0,0,0.75000002,0,150)",id:"path5017",d:"M 106.41289,293.96864 C 70.04539,293.67237 34.537909,293.3758 27.507375,293.3096 L 14.724586,293.18923 75.914974,188.8693 C 109.56969,131.49334 137.22453,84.543112 137.37018,84.535469 c 0.40034,-0.02101 84.5549,148.389841 84.58064,149.162261 0.0123,0.3688 -7.67138,14.22492 -17.07481,30.79139 l -17.09715,30.12084 -7.62163,-0.0513 c -4.19189,-0.0282 -37.37684,-0.29372 -73.74434,-0.58999 z"}),r.createElement("path",{transform:"matrix(0.75000002,0,0,0.75000002,0,150)",id:"path5019",d:"m 231.52153,216.29609 c -1.78448,-2.78648 -56.30805,-96.43861 -56.30805,-96.71724 0,-0.37557 46.76629,-81.164403 47.28254,-81.680648 0.25121,-0.251211 54.29846,91.624688 56.25895,95.635598 0.25352,0.51868 -5.58291,11.22113 -22.82887,41.86203 -12.74321,22.64086 -23.30746,41.32406 -23.4761,41.51823 -0.16865,0.19416 -0.58646,-0.0839 -0.92847,-0.61797 z"}),r.createElement("path",{transform:"matrix(0.75000002,0,0,0.75000002,0,150)",id:"path5021",d:"m 188.85669,326.46569 c 0.087,-0.23351 27.87116,-49.19652 61.74268,-108.80668 l 61.58456,-108.38212 1.96842,3.38056 c 1.08262,1.85931 29.54627,50.37713 63.25256,107.81739 l 61.28415,104.43682 -1.65524,0.0945 c -0.91038,0.052 -43.18277,0.37347 -93.93866,0.71445 -50.75588,0.34098 -106.25889,0.74364 -123.34,0.89481 -21.25746,0.18813 -31.00669,0.14089 -30.89847,-0.14972 z"}),r.createElement("path",{transform:"matrix(0.75000002,0,0,0.75000002,0,150)",id:"path5023",d:"m 441.01638,296.1697 c -2.28982,-3.78012 -75.22429,-129.17288 -75.5565,-129.90068 -0.32741,-0.71732 3.48432,-7.56149 23.74743,-42.63989 13.27559,-22.98198 24.27489,-41.830698 24.44289,-41.886033 0.2706,-0.08913 126.68565,215.010973 126.46114,215.178533 -0.0495,0.0369 -22.18445,0.18265 -49.18885,0.32387 l -49.09891,0.25674 z"})),r.createElement("path",{d:"",id:"path5031",transform:"matrix(0.75000002,0,0,0.75000002,0,150)"}),r.createElement("path",{d:"",id:"path5033",transform:"matrix(0.75000002,0,0,0.75000002,0,150)"}),r.createElement("path",{d:"",id:"path5039",transform:"matrix(0.75000002,0,0,0.75000002,0,150)"}),r.createElement("path",{d:"",id:"path5041",transform:"matrix(0.75000002,0,0,0.75000002,0,150)"})))},zs=function(e){return r.createElement("svg",je({fill:"currentcolor",className:"min-icon",viewBox:"0 0 275 275",xmlns:"http://www.w3.org/2000/svg"},e),r.createElement("defs",{id:"defs3736"}),r.createElement("g",{transform:"matrix(1.3333333,0,0,-1.3333333,-286.36662,267.54837)",id:"g3740"},r.createElement("path",{d:"M 310.77497,185.02828 V 25.08918 5.02828 l 32,15.0609 v 180.5721 z",id:"path3746"}),r.createElement("path",{d:"m 421.59727,132.22848 4.417,-45.864 -61.883,13.464",id:"path3748"}),r.createElement("path",{d:"m 246.77497,73.53608 c 0,22.674 24.707,41.769 58.383,47.598 v 20.325 c -51.51,-6.226 -90.383,-34.267 -90.383,-67.923 0,-34.869 41.725,-63.709 96,-68.508 v 20.061 c -36.516,4.578 -64,24.528 -64,48.447 m 101.617,67.915 v -20.317 c 13.399,-2.319 25.385,-6.727 34.9511,-12.64 l 22.6269,13.984 c -15.42,9.531 -35.322,16.283 -57.578,18.973",id:"path3750"}),r.createElement("path",{d:"m 421.59727,132.22848 4.417,-45.864 -61.883,13.464",id:"path3766"}),r.createElement("path",{d:"M 310.77497,185.02828 V 25.08918 5.02828 l 32,15.0609 v 180.5721 z",id:"path3764"}),r.createElement("path",{d:"m 246.77497,73.53608 c 0,22.674 24.707,41.769 58.383,47.598 v 20.325 c -51.51,-6.226 -90.383,-34.267 -90.383,-67.923 0,-34.869 41.725,-63.709 96,-68.508 v 20.061 c -36.516,4.578 -64,24.528 -64,48.447 m 101.617,67.915 v -20.317 c 13.399,-2.319 25.385,-6.727 34.9511,-12.64 l 22.6269,13.984 c -15.42,9.531 -35.322,16.283 -57.578,18.973"})))},Hs=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("polygon",{points:"118.6 2.54 154.49 75.25 234.74 86.91 176.67 143.52 190.38 223.44 118.6 185.71 46.82 223.44 60.53 143.52 2.46 86.91 82.71 75.25 118.6 2.54"}),r.createElement("path",{d:"M116.44,3.8l12.23,24.78L148,67.83c1.4,2.84,2.64,5.86,4.24,8.59.69,1.18,1.59,1.25,2.73,1.42l4.87.7,41.32,6,32.35,4.7.52.07L233,85.15l-19.79,19.29L181.83,135c-2.28,2.22-4.71,4.36-6.87,6.7-1,1.12-.73,2.31-.51,3.6l.84,4.93,7.06,41.15,5.53,32.22.08.51,3.68-2.82-24.46-12.86-38.75-20.37c-2.83-1.48-5.62-3.07-8.5-4.47-1.43-.69-2.4-.13-3.59.49l-4.42,2.33L75,205.83,46,221l-.47.24,3.67,2.82,4.67-27.23,7.4-43.15c.54-3.15,1.13-6.3,1.63-9.46.26-1.64-.46-2.34-1.44-3.3l-3.58-3.49L28,108.33,4.61,85.51l-.38-.36-1.1,4.17,27.35-4,43.31-6.29,6.44-.94c1-.15,2.06-.21,3-.44,1.26-.3,1.64-1.24,2.13-2.24L87.58,71l18.48-37.44L120.52,4.27l.24-.47a2.57,2.57,0,0,0-.9-3.42,2.52,2.52,0,0,0-3.42.89L104.31,25.84,85,65l-4.44,9,1.5-1.15L54.93,76.78,11.72,83.06,1.8,84.5c-1.92.28-2.33,3-1.11,4.18l19.62,19.13,31.27,30.48,7.18,7-.64-2.43-4.63,27-7.38,43-1.7,9.88a2.54,2.54,0,0,0,3.67,2.82l24.25-12.75L111,192.53l8.87-4.67h-2.52l24.25,12.75,38.65,20.32,8.87,4.67a2.54,2.54,0,0,0,3.68-2.82l-4.64-27-7.38-43-1.69-9.88-.65,2.43,19.62-19.12,31.28-30.48,7.17-7c1.23-1.19.81-3.9-1.1-4.18l-27.11-3.94-43.22-6.28-9.92-1.44,1.5,1.15L144.52,49.42,125.19,10.26l-4.43-9C119.33-1.61,115,.92,116.44,3.8Z"}))},Gs=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("path",{d:"M172.07,136.15c-5.91-7.02-8.83-14.66-6.34-24.08,1.2-4.53-1.18-8.5-5.24-10.85-6.26-3.64-9.79-8.84-10.93-16.01-.83-5.19-4.34-8.35-9.52-9.18-6.83-1.09-11.85-4.46-15.38-10.44-2.96-5.02-7.01-6.65-12.76-5.32-8.79,2.04-15.91-1.18-22.42-6.64h-6.88c-7.01,5.93-14.68,8.79-24.06,6.31-4.59-1.21-8.51,1.19-10.87,5.22-3.65,6.26-8.84,9.82-16.02,10.94-5.04,.79-8.27,4.15-9.1,9.1-1.22,7.31-4.86,12.57-11.29,16.27-3.89,2.24-6.09,6.23-4.94,10.58,2.49,9.4-.4,17.07-6.32,24.1v6.88c5.96,7.02,8.77,14.7,6.32,24.1-1.2,4.57,1.26,8.51,5.28,10.85,6.28,3.65,9.75,8.87,10.91,16.02,.84,5.19,4.39,8.31,9.56,9.15,6.81,1.11,11.9,4.44,15.35,10.48,2.41,4.23,6.39,6.8,11.11,5.57,9.42-2.45,17.06,.37,24.06,6.35h6.88c7.01-5.92,14.65-8.83,24.06-6.34,4.57,1.21,8.49-1.22,10.86-5.24,3.67-6.23,8.87-9.81,16.05-10.91,4.85-.74,8.2-3.91,8.99-8.69,1.25-7.64,4.99-13.07,11.71-16.96,3.68-2.12,5.75-6.14,4.61-10.33-2.56-9.4,.36-17.05,6.32-24.06v-6.88Zm-40.57,9.57h-39.33v39.48h-12.27v-39.48H40.57v-12.26h39.33v-39.48h12.27v39.48h39.33v12.26Z",style:{fill:"#07193e"}}),r.createElement("g",{id:"Grupo_2537",transform:"translate(12.323 0)"},r.createElement("g",{id:"Elipse_623",transform:"translate(-0.323 -0.249)"},r.createElement("circle",{cx:"179.04",cy:"66.03",r:"66.03",style:{fill:"#4ccb92"}}),r.createElement("path",{d:"M179.05,132.07c-36.42,0-66.04-29.62-66.04-66.03S142.63,0,179.05,0s66.03,29.62,66.03,66.03-29.63,66.03-66.03,66.03Zm0-122.63c-31.21,0-56.61,25.39-56.61,56.6s25.39,56.6,56.61,56.6,56.6-25.39,56.6-56.6-25.39-56.6-56.6-56.6Z",style:{fill:"#fff"}})),r.createElement("g",{id:"check",transform:"translate(2.934 4.069)"},r.createElement("g",{id:"Trazado_7261"},r.createElement("path",{d:"M197.68,42.49c2.27-2.32,5.99-2.35,8.3-.08s2.35,5.99,.08,8.3l-31.23,39.05c-2.19,2.39-5.9,2.54-8.29,.35-.07-.06-.13-.13-.2-.19l-20.7-20.71c-2.38-2.2-2.52-5.91-.32-8.29,2.2-2.38,5.91-2.52,8.29-.32,.11,.1,.22,.21,.32,.32l16.39,16.38,27.18-34.62,.16-.17h.02Z"})))))},js=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 15 15"},e),r.createElement("g",{id:"OpenListIcon-full",transform:"translate(4 4.984)"},r.createElement("g",{id:"noun_chevron_2320228",transform:"translate(0.167 4.016) rotate(-90)"},r.createElement("path",{id:"Trazado_6842","data-name":"Trazado 6842",d:"M.422,0a.433.433,0,0,0-.3.117.37.37,0,0,0,0,.557L2.983,3.325.126,5.986a.37.37,0,0,0,0,.557.443.443,0,0,0,.6,0L3.889,3.609a.373.373,0,0,0,.126-.274.344.344,0,0,0-.126-.274L.727.127A.443.443,0,0,0,.422,0Z",transform:"translate(0 0)"})),r.createElement("rect",{id:"Rect\xe1ngulo_896","data-name":"Rect\xe1ngulo 896",width:"0.462",height:"0.462",transform:"translate(0 1.75)",fill:"none"})))},Vs=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 15 15"},e),r.createElement("g",{id:"Grupo_2449","data-name":"Grupo 2449",transform:"translate(-140 -181)"},r.createElement("g",{id:"OpenListIcon-full",transform:"translate(144 250.612)"},r.createElement("g",{id:"noun_chevron_2320228",transform:"translate(6.827 -63.612) rotate(90)"},r.createElement("path",{id:"Trazado_6842","data-name":"Trazado 6842",d:"M.422,6.661a.433.433,0,0,1-.3-.117.37.37,0,0,1,0-.557L2.983,3.335.126.675a.37.37,0,0,1,0-.557.443.443,0,0,1,.6,0L3.889,3.052a.373.373,0,0,1,.126.274.344.344,0,0,1-.126.274L.727,6.533a.443.443,0,0,1-.306.127Z",transform:"translate(0 0)"})),r.createElement("rect",{id:"Rect\xe1ngulo_896","data-name":"Rect\xe1ngulo 896",width:"0.462",height:"0.462",transform:"translate(0 -61.808)",fill:"none"}))))},Zs=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("defs",null,r.createElement("clipPath",{id:"certificate_svg__a"},r.createElement("path",{"data-name":"Rect\\xE1ngulo 2156",d:"M0 0h256v222.048H0z"}))),r.createElement("g",{"data-name":"Grupo 4763",transform:"translate(0 17)",clipPath:"url(#certificate_svg__a)"},r.createElement("path",{"data-name":"Trazado 8152",d:"M240-.002H16a16 16 0 0 0-16 16v160a16 16 0 0 0 16 16h120l4.64-5.6 7.44-9.12A66.72 66.72 0 0 1 256 98.958v-82.96a16 16 0 0 0-16-16m-130.96 149.7H47.3a7.3 7.3 0 1 1 0-14.592h61.74a7.3 7.3 0 1 1 0 14.592m0-56H47.3a7.3 7.3 0 1 1 0-14.592h61.74a7.3 7.3 0 0 1 0 14.592m66.96-39.3a6.419 6.419 0 0 1-6.4 6.4H46.4a6.419 6.419 0 0 1-6.4-6.4v-1.792a6.419 6.419 0 0 1 6.4-6.4h123.2a6.419 6.419 0 0 1 6.4 6.4Z"}),r.createElement("path",{"data-name":"Trazado 8153",d:"M256 137.486a50.96 50.96 0 1 0-86.16 36.72l-15.52 18.96 7.2 28.88 29.28-35.68a50.018 50.018 0 0 0 28.4 0l29.28 35.68 7.2-28.88-15.52-18.96a50.75 50.75 0 0 0 15.84-36.72m-50.928 29.688a29.688 29.688 0 0 1-.072-59.376h.072a29.688 29.688 0 0 1 0 59.376"})),r.createElement("path",{"data-name":"Rect\\xE1ngulo 2157",fill:"none",d:"M0 0h256v256H0z"}))},Ws=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",viewBox:"0 0 14 14"},e),r.createElement("path",{id:"online-icon",d:"M7,14a7.052,7.052,0,0,1-1.411-.142,6.962,6.962,0,0,1-2.5-1.053A7.02,7.02,0,0,1,.55,9.725,6.965,6.965,0,0,1,.142,8.411a7.068,7.068,0,0,1,0-2.821A6.962,6.962,0,0,1,1.2,3.086,7.02,7.02,0,0,1,4.275.55,6.965,6.965,0,0,1,5.589.142a7.068,7.068,0,0,1,2.821,0,6.962,6.962,0,0,1,2.5,1.053,7.02,7.02,0,0,1,2.536,3.08,6.965,6.965,0,0,1,.408,1.314,7.068,7.068,0,0,1,0,2.821,6.962,6.962,0,0,1-1.053,2.5,7.02,7.02,0,0,1-3.08,2.536,6.965,6.965,0,0,1-1.314.408A7.052,7.052,0,0,1,7,14ZM3.958,6h0L2.953,7.008l3.016,3.016L10.995,5,9.99,3.992,5.969,8.013,3.958,6Z",fill:"#4ccb92"}))},$s=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("g",null,r.createElement("path",{d:"M128.1,144c39.2,0.1,71.1-31.4,71.4-70.6c0-39.4-32-71.4-71.4-71.4s-71.4,32-71.4,71.4\n\t\tC57,112.6,89,144.1,128.1,144"}),r.createElement("path",{d:"M214.6,197.3c-10.8-13.9-24.9-25-41-32.2c-7.3-3.3-14.9-5.9-22.7-7.6\n\t\tc-7.7-1.7-15.5-2.6-23.4-2.6c-1.6,0-3.2,0-4.7,0.1h-0.5c-3.9,0.2-7.7,0.6-11.5,1.2c-27.1,4.3-51.6,18.7-68.6,40.2\n\t\tc-0.6,0.8-1.2,1.6-1.8,2.4l0,0c-7.8,11-8.9,25.4-2.8,37.3c1.4,2.7,3.2,5.2,5.3,7.5c2.1,2.2,4.5,4.1,7.1,5.6\n\t\tc2.6,1.5,5.4,2.7,8.4,3.5c3.1,0.8,6.2,1.2,9.4,1.2h120.6c3.2,0,6.4-0.4,9.5-1.2c2.9-0.8,5.8-2,8.4-3.5c2.6-1.5,5-3.5,7-5.7\n\t\tc2.1-2.3,3.9-4.8,5.3-7.6C224.7,223.4,223.2,208.4,214.6,197.3"})))},qs=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("path",{d:"m209.35,76.15h-28.21v-26.24c-1.65-27.75-25.38-48.97-53.14-47.55-27.76-1.43-51.48,19.8-53.14,47.55v26.24h-28.21c-23.19-1.15-42.98,16.61-44.32,39.8v83.57c1.26,22.76,20.4,40.4,43.19,39.8l82.48,14.39,82.48-14.41c22.78.6,41.92-17.02,43.19-39.77v-83.57c-1.34-23.18-21.13-40.95-44.32-39.8m-70.88,86.61v15.16c0,5.47-4.42,9.9-9.89,9.93h-1.19c-5.47-.03-9.88-4.48-9.87-9.95v-15.14c-5.16-3.51-8.25-9.34-8.25-15.58h0c.08-10.34,8.53-18.66,18.87-18.58,10.34.08,18.66,8.53,18.58,18.87-.05,6.12-3.08,11.83-8.13,15.29m20.63-86.61h-62.35v-26.24c.97-16.26,14.86-28.69,31.12-27.86,16.26-.83,30.16,11.6,31.12,27.86l.1,26.24Z"}))},Ys=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 14 13.088"},e),r.createElement("g",{id:"filter-icon.a949c200",transform:"translate(-231.827 -340.123)"},r.createElement("line",{id:"L\xednea_659","data-name":"L\xednea 659",x2:"14",transform:"translate(231.827 346.667)",fill:"none",stroke:"#434343",strokeWidth:"1"}),r.createElement("g",{id:"Grupo_2472","data-name":"Grupo 2472",transform:"translate(240.693 344.614)"},r.createElement("circle",{id:"Elipse_611","data-name":"Elipse 611",cx:"2.053",cy:"2.053",r:"2.053",transform:"translate(0 0)",fill:"#fff"}),r.createElement("circle",{id:"Elipse_612","data-name":"Elipse 612",cx:"1.597",cy:"1.597",r:"1.597",transform:"translate(0.456 0.456)",fill:"none",stroke:"#414141",strokeWidth:"1"})),r.createElement("line",{id:"L\xednea_660","data-name":"L\xednea 660",x2:"14",transform:"translate(231.827 342.22)",fill:"none",stroke:"#434343",strokeWidth:"1"}),r.createElement("g",{id:"Grupo_2473","data-name":"Grupo 2473",transform:"translate(232.394 340.167)"},r.createElement("circle",{id:"Elipse_613","data-name":"Elipse 613",cx:"2.053",cy:"2.053",r:"2.053",transform:"translate(0 0)",fill:"#fff"}),r.createElement("circle",{id:"Elipse_614","data-name":"Elipse 614",cx:"1.597",cy:"1.597",r:"1.597",transform:"translate(0.456 0.456)",fill:"none",stroke:"#414141",strokeWidth:"1"})),r.createElement("line",{id:"L\xednea_661","data-name":"L\xednea 661",x2:"14",transform:"translate(231.827 351.114)",fill:"none",stroke:"#434343",strokeWidth:"1"}),r.createElement("g",{id:"Grupo_2474","data-name":"Grupo 2474",transform:"translate(235.161 349.061)"},r.createElement("circle",{id:"Elipse_615","data-name":"Elipse 615",cx:"2.053",cy:"2.053",r:"2.053",transform:"translate(0 0)",fill:"#fff"}),r.createElement("circle",{id:"Elipse_616","data-name":"Elipse 616",cx:"1.597",cy:"1.597",r:"1.597",transform:"translate(0.456 0.456)",fill:"none",stroke:"#414141",strokeWidth:"1"}))))},Ks=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("g",null,r.createElement("path",{d:"M235.3,72.5c-0.2-15.5-12.8-27.9-28.3-27.9h-78l-1.1-1.5c-5.1-9.3-14.5-15.5-25.1-16.6h-50c-15.6,0-28.3,12.6-28.3,28.3\n\t\t\tc0,1,0.1,2,0.2,3v12.9c-11.6,3.9-19.4,14.8-19.4,27c0,0.6,0,1.2,0.1,1.7L14.8,202c0.6,15.4,13.2,27.5,28.6,27.5h168.9\n\t\t\tc15.4,0,28-12.1,28.6-27.5l9.5-102.5c0-0.6,0.1-1.2,0.1-1.8C250.6,87.1,244.7,77.4,235.3,72.5z M32.5,88.4c11.7-3.3,12-11,12-11\n\t\t\th172c0.2,4.6,2.9,8.8,6.9,11H32.5z"})))},Xs=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("rect",{width:"73.79",height:"237.57",rx:"12",ry:"12"}),r.createElement("rect",{x:"86.31",width:"73.79",height:"237.57",rx:"12",ry:"12"}),r.createElement("rect",{x:"172.62",width:"73.79",height:"237.57",rx:"12",ry:"12"}))},Qs=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("path",{d:"m117.59.78l112.57,101.97c2.03,1.84.73,5.22-2.01,5.22H3.01c-2.74,0-4.05-3.38-2.01-5.22L113.56.78c1.14-1.04,2.89-1.04,4.03,0Z"}))},Js=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("path",{d:"m113.56,107.2L.99,5.22C-1.04,3.38.26,0,3.01,0h225.15c2.74,0,4.05,3.38,2.01,5.22l-112.57,101.97c-1.14,1.04-2.89,1.04-4.03,0Z"}))},el=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("path",{d:"m199.51,62.28C192.5,26.7,161.26,0,123.73,0c-29.8,0-55.68,16.91-68.57,41.66C24.13,44.95,0,71.25,0,103.11c0,34.13,27.74,61.86,61.86,61.86h134.04c28.46,0,51.55-23.1,51.55-51.55s-21.14-49.28-47.94-51.14Z"}))},tl=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("path",{d:"m119,0C53.31,0,0,53.31,0,119s53.31,119,119,119,119-53.31,119-119S184.69,0,119,0Zm59.5,130.9H59.5v-23.8h119v23.8Z"}))},nl=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("path",{d:"m217.35,144.9h24.15v-24.15h-24.15v24.15Zm0-108.67v60.38h24.15v-60.38h-24.15ZM96.6,0C43.23,0,0,43.23,0,96.6s43.23,96.6,96.6,96.6,96.6-43.23,96.6-96.6S149.97,0,96.6,0Zm0,120.75c-13.28,0-24.15-10.87-24.15-24.15s10.87-24.15,24.15-24.15,24.15,10.87,24.15,24.15-10.87,24.15-24.15,24.15Z"}))},rl=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("path",{d:"m127.98,44.38c-55.8,0-103.5,34.8-122.9,83.8,19.3,49,67,83.8,122.9,83.8s103.5-34.8,122.9-83.8c-19.4-49-67.1-83.8-122.9-83.8Zm0,139.6c-30.8,0-55.8-25-55.8-55.8s25-55.8,55.8-55.8,55.8,25,55.8,55.8-25,55.8-55.8,55.8Zm0-89.3c-18.5,0-33.5,15-33.5,33.5s15,33.5,33.5,33.5,33.5-15,33.5-33.5-15-33.5-33.5-33.5Z"}))},al=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("path",{d:"m128,66.5c30.9,0,56,25.1,56,56,0,7.3-1.5,14.1-4,20.5l32.7,32.7c16.9-14.1,30.2-32.3,38.4-53.2-19.4-49.1-67.1-83.9-123.1-83.9-15.7,0-30.7,2.8-44.5,7.8l24.2,24.2c6.2-2.7,13-4.1,20.3-4.1ZM16.1,35.9l25.5,25.5,5.1,5.1c-18.6,14.5-33.1,33.7-41.8,55.9,19.4,49.1,67.1,83.9,123.1,83.9,17.3,0,33.9-3.4,49-9.4l4.7,4.7,32.8,32.7,14.2-14.2L30.3,21.7l-14.2,14.2Zm61.8,61.9l17.3,17.3c-.6,2.3-.9,4.8-.9,7.3,0,18.6,15,33.6,33.6,33.6,2.5,0,4.9-.3,7.3-.9l17.3,17.3c-7.5,3.7-15.8,5.9-24.6,5.9-30.9,0-56-25.1-56-56,.1-8.7,2.3-17,6-24.5Zm48.3-8.7l35.2,35.2.2-1.8c0-18.6-15-33.6-33.6-33.6l-1.8.2Z"}))},ol=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("path",{d:"m128,253.47c-69.18,0-125.47-56.28-125.47-125.47S58.82,2.53,128,2.53s125.47,56.28,125.47,125.47-56.28,125.47-125.47,125.47Zm0-232.94c-59.26,0-107.47,48.21-107.47,107.47s48.21,107.47,107.47,107.47,107.47-48.21,107.47-107.47S187.26,20.53,128,20.53Z"}),r.createElement("path",{d:"m196.9,173.81c-1.37,0-2.76-.31-4.06-.97l-73.84-37.42V45c0-4.97,4.03-9,9-9s9,4.03,9,9v79.36l63.97,32.42c4.43,2.25,6.21,7.66,3.96,12.1-1.59,3.13-4.75,4.93-8.04,4.93Z"}))},il=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("g",{transform:"translate(0 0.004)"},r.createElement("path",{d:"M79.8,115.3h158c2.7-0.4,5.5,0.4,7.6,2.3c2.2,1.9,3.1,5,2.3,7.8c-0.7,3-3.1,5.3-6.1,5.9\n\t\tc-1.4,0.2-2.7,0.2-4.1,0.2H79.2c1,1,1.6,1.8,2.3,2.5l56.7,56.7c2.4,2,3.4,5.2,2.5,8.2c-0.7,3-3.1,5.3-6.1,5.9\n\t\tc-2.8,0.5-5.7-0.5-7.6-2.7L114,189.2c-19.4-19.4-39.1-38.9-58.3-58.5c-1.7-1.8-3-4-3.7-6.3c-0.4-3,0.7-5.9,3.1-7.8\n\t\tC75.5,96.1,96,75.8,116.3,55.4c3.7-3.7,7.4-7.6,11.3-11.1c2.7-2.5,6.7-3,9.8-1c3.1,1.5,4.6,5.1,3.5,8.4c-0.6,1.9-1.8,3.6-3.3,4.9\n\t\tc-18.6,18.8-37.5,37.5-56.3,56.3l-2.3,2.3L79.8,115.3z"}),r.createElement("path",{d:"M25.6,128.2V16.9c0.1-1.4-0.1-2.9-0.4-4.3C24.5,9.5,22.1,7,19,6.2c-2.9-0.8-6,0.2-8,2.5\n\t\tc-2,2.2-2.9,5.1-2.5,8v111.6l0,0v111.4c-0.1,1.4,0.1,2.9,0.4,4.3c0.6,3.1,3,5.6,6.1,6.3c2.9,0.9,6.1-0.1,8-2.5\n\t\tc1.9-2.2,2.8-5.1,2.5-8L25.6,128.2C25.6,128.2,25.6,128.2,25.6,128.2z"})))},sl=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("path",{d:"M88.6,199.9c-0.3-42.5-1.4-85.2,1.1-127.6c1.3-22,5.5-50.9,31.5-55.5c12.3-2.2,26.5,0.3,34.7,10.4\n\t\t\tc7,8.5,9.4,20.5,10.5,31.2c1.2,11.9,0.9,24,0.9,35.9c0.1,17.8,0.1,35.6,0.2,53.3c0,17.2,0.7,34.6-0.1,51.9\n\t\t\tc-0.5,12.3-2.3,29.4-13.7,36.8c-10.7,6.9-25.5,4.2-31.6-7.1c-6.9-12.7-6.2-29-6.4-43c-0.3-17.5-0.6-35.1-0.7-52.6\n\t\t\tc-0.1-12.9-1.3-27,2.1-39.5c1.5-5.5,4.4-11.2,10.6-12c6-0.7,9.9,3.8,12,8.9c4.2,10,3,21.3,2.9,31.8c-0.2,23.9-0.5,47.9-0.7,71.8\n\t\t\tc0,1.7,0,3.4-0.1,5.2c-0.1,9.7,14.9,9.7,15,0c0.2-22.2,0.4-44.4,0.7-66.6c0.1-11.7,1.1-23.8-0.7-35.4\n\t\t\tc-2.6-17.4-14.6-34.6-34.3-29.9c-17.5,4.1-21.7,24.4-22.4,39.8c-0.7,16.2-0.2,32.6,0,48.8c0.2,18-0.5,36.5,1.7,54.4\n\t\t\tc1.9,15.7,6.9,33.6,22.5,40.7c15.4,7,35.2,2.8,45.7-10.5c11-13.8,12.3-33.1,12.3-50.1c0-36.8-0.1-73.6-0.3-110.4\n\t\t\tC182.2,55,180.7,21.2,155,7.2c-14.6-8-34-8-49-1.1c-13.4,6.1-21.7,19-26,32.6c-4,12.7-4.9,26.3-5.6,39.5\n\t\t\tc-0.6,11.8-0.8,23.6-0.9,35.5c-0.2,27-0.2,54,0,81c0,1.8,0,3.6,0,5.4C73.7,209.6,88.7,209.6,88.6,199.9L88.6,199.9z"}))},ll=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("path",{d:"M0,128C0,57.3,57.3,0,128,0c70.7,0,128,57.3,128,128l0,0c0,70.7-57.3,128-128,128h0C57.3,256,0,198.7,0,128\n\t\t\tC0,128,0,128,0,128L0,128z M25,128c0.1,56.9,46.1,102.9,103,103c56.9-0.1,102.9-46.1,103-103c-0.1-56.9-46.1-102.9-103-103\n\t\t\tC71.1,25.1,25.1,71.1,25,128L25,128z"}),r.createElement("path",{d:"M199.1,91.8L199.1,91.8L126,183.2c-2.5,2.7-6.1,4.3-9.8,4.4h-0.3c-3.6,0-7.1-1.4-9.7-4l0,0l-48.4-48.4\n\tc-5.8-4.9-6.5-13.5-1.6-19.3s13.5-6.5,19.3-1.6c0.3,0.2,0.6,0.5,0.8,0.8c0.3,0.3,0.6,0.5,0.8,0.8l38.4,38.3l63.6-81l0.4-0.4l0,0\n\tc5.3-5.4,14-5.6,19.4-0.3C204.3,77.6,204.4,86.3,199.1,91.8L199.1,91.8"}))},cl=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("g",null,r.createElement("path",{d:"M256,239.6c0,9.1-7.4,16.4-16.5,16.4H104.1c-21.8,0-21.8-32.8,0-32.8h118.8V32.8H104.1c-21.8,0-21.8-32.8,0-32.8h135.4\n\t\t\tc9.1,0,16.5,7.3,16.5,16.4V239.6z M16.3,111.6h138.2L135.8,93c-15.4-15.3,8-38.5,23.4-23.2l46.9,46.5c6.5,6.3,6.6,16.6,0.3,23.1\n\t\t\tc-0.1,0.1-0.2,0.2-0.3,0.3l-46.9,46.5c-15.4,15.3-38.8-7.9-23.4-23.2l18.7-18.6H16.3C5.4,144.4,0,136.2,0,128\n\t\t\tS5.4,111.6,16.3,111.6L16.3,111.6z"}),r.createElement("path",{d:"M256.5,16.4v223.2c0,9.4-7.7,16.9-17,16.9H104.1c-4.8,0.2-9.4-1.8-12.6-5.3c-1.4-1.6-2.5-3.4-3.2-5.4\n\t\t\tc-0.7-2-1.1-4.1-1-6.2c0-2.1,0.3-4.2,1-6.2c0.7-2,1.8-3.8,3.2-5.4c3.2-3.5,7.8-5.5,12.6-5.3h118.3V33.3H104.1\n\t\t\tc-4.8,0.2-9.4-1.8-12.6-5.3c-1.4-1.6-2.5-3.4-3.2-5.4c-0.7-2-1.1-4.1-1-6.2c0-2.1,0.3-4.2,1-6.2c0.7-2,1.8-3.8,3.2-5.4\n\t\t\tc3.2-3.5,7.8-5.5,12.6-5.3h135.4c2.3,0,4.5,0.4,6.6,1.3c2,0.8,3.9,2.1,5.4,3.6c1.6,1.5,2.8,3.4,3.7,5.4\n\t\t\tC256.1,11.9,256.5,14.1,256.5,16.4L256.5,16.4z M88.3,239.6c0,2,0.3,4,1,5.9c0.6,1.9,1.7,3.6,3,5.1c3,3.3,7.4,5.1,11.9,5h135.4\n\t\t\tc8.8,0,16-7.1,16-15.9V16.4c0-8.8-7.2-15.9-16-15.9H104.1c-4.5-0.2-8.8,1.6-11.9,5c-1.3,1.5-2.3,3.2-3,5.1c-0.7,1.9-1,3.9-1,5.9\n\t\t\tc0,2,0.3,4,1,5.9c0.6,1.9,1.7,3.6,3,5.1c3,3.3,7.4,5.1,11.9,5h119.3v191.4H104.1c-4.5-0.2-8.8,1.6-11.9,5c-1.3,1.5-2.3,3.2-3,5.1\n\t\t\tC88.6,235.6,88.3,237.6,88.3,239.6L88.3,239.6z M-0.5,128c0-2.1,0.3-4.2,1-6.2c0.7-2,1.8-3.8,3.2-5.4c3.2-3.5,7.8-5.5,12.6-5.3\n\t\t\th137l-17.9-17.7c-3.2-3-5.1-7.2-5.2-11.6c0-3.5,1.2-6.9,3.3-9.7c2-2.8,4.8-5.1,8.1-6.5c2.8-1.2,5.9-1.6,9-1.1\n\t\t\tc3.4,0.7,6.6,2.4,9,4.9l46.9,46.5c3.2,3.2,5.1,7.5,5.1,12c0,2.2-0.4,4.4-1.3,6.5c-0.9,2.1-2.2,4-3.8,5.6l-46.9,46.5\n\t\t\tc-2.4,2.5-5.6,4.2-9,4.9c-3,0.5-6.1,0.2-9-1c-3.2-1.4-6-3.6-8.1-6.5c-2.1-2.8-3.2-6.2-3.3-9.7c0.1-4.4,1.9-8.6,5.2-11.6l17.9-17.7\n\t\t\th-137c-4.8,0.2-9.4-1.8-12.6-5.3c-1.4-1.6-2.5-3.4-3.2-5.4C-0.1,132.2-0.5,130.1-0.5,128L-0.5,128z M155.7,112.1H16.3\n\t\t\tc-4.5-0.2-8.8,1.6-11.9,5c-1.3,1.5-2.3,3.2-3,5.1c-0.7,1.9-1,3.9-1,5.9c0,2,0.3,4,1,5.9c0.6,1.9,1.7,3.6,3,5.1\n\t\t\tc3,3.3,7.4,5.1,11.9,5h139.4l-0.9,0.9l-18.7,18.6c-3,2.8-4.8,6.7-4.9,10.9c0,3.3,1.1,6.5,3.1,9.1c1.9,2.7,4.6,4.8,7.6,6.1\n\t\t\tc2.6,1.1,5.6,1.5,8.4,1c3.2-0.6,6.2-2.2,8.5-4.6l46.9-46.5c1.5-1.5,2.7-3.3,3.6-5.3c0.8-1.9,1.2-4,1.2-6.1c0-4.3-1.7-8.3-4.8-11.3\n\t\t\tl-46.9-46.5c-2.3-2.4-5.2-4-8.5-4.6c-2.8-0.5-5.8-0.1-8.4,1c-3.1,1.3-5.7,3.4-7.6,6.1c-2,2.6-3,5.8-3.1,9.1\n\t\t\tc0.1,4.1,1.8,8.1,4.9,10.9L155.7,112.1z"})))},ul=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",viewBox:"0 0 256 256"},e),r.createElement("g",null,r.createElement("g",{transform:"translate(0 0)"},r.createElement("path",{d:"M228.4,151.3c-54.3,14-109.7-18.6-123.7-73c-4.3-16.6-4.3-34.1,0-50.7L111.8,0L84.9,9.4C34,27.3,0,75.3,0,129.2\n\t\t\tC0,199.1,56.9,256,126.8,256h0.1c53.9-0.1,101.8-34.1,119.6-84.9l9.4-26.9L228.4,151.3z",fill:"currentcolor"}))))},dl=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",viewBox:"0 0 256 256"},e),r.createElement("path",{d:"M113.8,241.7v-27c0-7.7,6.2-13.9,13.9-13.9c7.7,0,13.9,6.2,13.9,13.9l0,0v27c0,7.7-6.2,13.9-13.9,13.9\n\tC120,255.6,113.8,249.4,113.8,241.7L113.8,241.7z M198.3,218.2l-19.1-19.1c-5.4-5.4-5.4-14.2,0-19.6c5.4-5.4,14.2-5.4,19.6,0\n\tl19.1,19.1c5.4,5.4,5.4,14.2,0,19.6C212.4,223.6,203.7,223.6,198.3,218.2L198.3,218.2L198.3,218.2z M37.4,218.2\n\tc-5.4-5.4-5.4-14.2,0-19.6l19.1-19.1c5.4-5.4,14.2-5.4,19.6,0s5.4,14.2,0,19.6l0,0L57,218.2C51.6,223.6,42.8,223.6,37.4,218.2\n\tL37.4,218.2z M72.1,128c0-29.9,24.3-54.1,54.1-54.1c6,0,11.9,1,17.5,2.9c28.2,8.9,43.9,39,35,67.3c-5.3,16.7-18.4,29.8-35.1,35\n\tc-28.3,9.7-59-5.4-68.7-33.7C73.1,139.9,72.1,134,72.1,128L72.1,128z M214.4,142.6c-8.1,0-14.6-6.6-14.6-14.6s6.6-14.6,14.6-14.6\n\tl0,0h27c8.1,0,14.6,6.6,14.6,14.6s-6.6,14.6-14.6,14.6H214.4z M13.9,141.9c-7.7,0.1-13.9-6.1-14-13.7c-0.1-7.7,6.1-13.9,13.7-14\n\tc0.1,0,0.2,0,0.2,0h27c7.7-0.1,13.9,6.1,14,13.7s-6.1,13.9-13.7,14c-0.1,0-0.2,0-0.2,0H13.9z M179.1,76.5c-5.4-5.4-5.4-14.2,0-19.6\n\tl19.1-19.1c5.4-5.4,14.2-5.4,19.6,0c5.4,5.4,5.4,14.2,0,19.6l-19.1,19.1C193.3,81.9,184.6,81.9,179.1,76.5L179.1,76.5z M56.5,76.5\n\tL37.4,57.4c-5.4-5.4-5.4-14.2,0-19.6s14.2-5.4,19.6,0l19.1,19.1c5.4,5.4,5.4,14.2,0,19.6c-2.6,2.6-6.1,4.1-9.8,4.1\n\tC62.6,80.5,59.1,79.1,56.5,76.5z M113.8,41.3v-27c0-7.7,6.2-13.9,13.9-13.9c7.7,0,13.9,6.2,13.9,13.9v27c0,7.7-6.2,13.9-13.9,13.9\n\tC120,55.2,113.8,48.9,113.8,41.3z",fill:"currentcolor"}))},pl=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("g",null,r.createElement("path",{d:"M97.8,135.9c-5.6,8.5-11.5,16.7-18.5,24.1C62.7,177.5,41,182.2,17.6,181c-21-1.1-20.9,31.5,0,32.5\n\t\t\tc43.9,2.2,75-16.7,99.7-49c-4.1-5.3-7.8-10.6-11.3-15.8C103.2,144.4,100.4,140.1,97.8,135.9z"}),r.createElement("path",{d:"M140.2,110c2.3,3.5,4.5,7,6.7,10.5c4.1-5.7,8.5-11.2,13.5-16.3c12.5-12.9,26.7-18.2,42.3-19.7\n\t\t\tc-1,1.2-2,2.4-3,3.6c-5.7,6.8-6.7,16.3,0,23c5.9,5.9,17.3,6.8,23,0c8.8-10.5,17.2-21.3,26-31.7c5.7-5.8,7.9-15.3,0.8-23\n\t\t\tl-29.3-31.7c-14.3-15.5-37.2,7.6-23,23l3.8,4.1c-16,1.1-31.4,5.2-45.6,14.4C144.9,73.1,136,82,128.1,91.7c1.6,2.2,3.2,4.5,4.8,6.9\n\t\t\tC135.3,102.4,137.8,106.3,140.2,110z"}),r.createElement("path",{d:"M222.8,144.9c-2.8-3.3-6.8-4.8-11-4.8c-4.5,0-9,1.7-12,4.8c-6.7,6.7-5.7,16.2,0,23c1,1.2,2,2.4,3,3.6\n\t\t\tc-15.6-1.5-29.8-6.8-42.3-19.7c-7.1-7.3-13.1-15.4-18.7-23.8c-5.5-8.1-10.6-16.5-16-24.7c-1-1.6-2.1-3.1-3.2-4.6\n\t\t\tc-24.3-34.8-54.6-56.4-98-56.4c-2.3,0-4.6,0.1-6.9,0.2c-20.5,1-21,32.6-1,32.6c0.3,0,0.7,0,1,0c2.3-0.1,4.5-0.2,6.7-0.2\n\t\t\tc20.8,0,39.9,5.3,54.9,21.1c9.2,9.7,16.5,20.8,23.6,32.1c3.4,5.3,6.7,10.7,10.2,15.9c3,4.5,6.1,9,9.4,13.4\n\t\t\tc9.3,12.5,19.9,24,33,32.5c14.2,9.2,29.6,13.3,45.6,14.4l-3.8,4.1c-10.9,11.8,0.1,28.1,12.2,28.1c3.7,0,7.5-1.5,10.8-5.1\n\t\t\tl29.3-31.7c7.1-7.7,4.9-17.3-0.8-23C240,166.1,231.6,155.4,222.8,144.9z"})))},ml=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("path",{d:"M127.9,0C57.2,0,0,57.3,0,128s57.2,128,127.9,128c70.8,0,128.1-57.3,128.1-128S198.7,0,127.9,0z M216.6,76.8h-37.8\n\tc-4.1-16-10-31.4-17.7-45.6C184.7,39.3,204.3,55.7,216.6,76.8z M128,26.1c10.6,15.4,18.9,32.4,24.4,50.7h-48.9\n\tC109.1,58.5,117.4,41.5,128,26.1z M28.9,153.6c-2-8.2-3.3-16.8-3.3-25.6s1.3-17.4,3.3-25.6h43.3c-1,8.4-1.8,16.9-1.8,25.6\n\ts0.8,17.2,1.8,25.6H28.9z M39.4,179.2h37.8c4.1,16,10,31.4,17.7,45.6C71.3,216.7,51.7,200.4,39.4,179.2z M77.2,76.8H39.4\n\tc12.3-21.2,31.9-37.5,55.4-45.6C87.2,45.4,81.3,60.8,77.2,76.8z M128,229.9c-10.6-15.4-18.9-32.4-24.4-50.7h48.9\n\tC146.9,197.5,138.6,214.5,128,229.9z M158,153.6H98c-1.2-8.4-2-16.9-2-25.6s0.9-17.3,2-25.6H158c1.2,8.3,2,16.9,2,25.6\n\tS159.1,145.2,158,153.6z M161.2,224.8c7.7-14.2,13.6-29.6,17.7-45.6h37.8C204.3,200.3,184.7,216.7,161.2,224.8z M183.8,153.6\n\tc1-8.4,1.8-16.9,1.8-25.6s-0.8-17.2-1.8-25.6h43.3c2,8.2,3.3,16.8,3.3,25.6s-1.3,17.4-3.3,25.6H183.8z"}))},fl=function(e){return r.createElement("svg",je({xmlns:"http://www.w3.org/2000/svg",className:"min-icon",fill:"currentcolor",viewBox:"0 0 256 256"},e),r.createElement("path",{d:"M93.9,204l30.9-30.9l30.9,30.9l13.4-13.4l-30.9-30.9l30.9-30.9l-13.4-13.4l-30.9,30.9l-30.9-30.9l-13.4,13.4l30.9,30.9\n l-30.9,30.9L93.9,204z M216.7,26.6H204V1.3h-25.3v25.3H77.3V1.3H52v25.3H39.3C25.2,26.6,14.1,38,14.1,52l-0.1,177.4\n c0,13.9,11.3,25.3,25.3,25.3h177.4c13.9,0,25.3-11.4,25.3-25.3V52C242.1,38,230.6,26.6,216.7,26.6z M216.7,229.4H39.3V90h177.4\n V229.4z"}))},hl=(0,a.i7)(fa||(fa=We(["\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n"],["\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n"]))),gl=a.Ay.span({display:"inline-flex",position:"relative"},(0,a.AH)(ha||(ha=We(["\n &:hover {\n & .tooltipElement {\n display: block;\n animation: "," 1s;\n }\n }\n "],["\n &:hover {\n & .tooltipElement {\n display: block;\n animation: "," 1s;\n }\n }\n "])),hl)),El=a.Ay.div((function(e){var t=e.theme,n=e.placement,r="6px",a=Wn(t,"tooltip.background","#737373"),o=Wn(t,"tooltip.color","#FFFFFF"),i={},s={content:"' '",left:"50%",border:"solid transparent",height:0,width:0,position:"absolute",pointerEvents:"none",borderWidth:r,marginLeft:"calc(".concat(r," * -1);")};switch(n){case"top":i={transform:"translateX(-50%) translateY(-50%)","&::before":je(je({},s),{top:"100%",borderTopColor:a})};break;case"right":i={transform:"translateX(0) translateY(-50%)","&::before":je(je({},s),{left:"calc(".concat(r," * -1)"),top:"50%",transform:"translateX(0) translateY(-50%)",borderRightColor:a})};break;case"left":i={transform:"translateX(-100%) translateY(-50%)","&::before":je(je({},s),{left:"auto",right:"calc(".concat(r," * -2)"),top:"50%",transform:"translateX(0) translateY(-50%)",borderLeftColor:a})};break;default:i={transform:"translateX(-50%)","&::before":je(je({},s),{bottom:"100%",borderBottomColor:a})}}return je({position:"fixed",borderRadius:4,color:o,background:a,lineHeight:1,zIndex:10001,padding:2,fontSize:12,boxShadow:"#00000050 0px 3px 10px",maxWidth:350},i)})),bl=a.Ay.div((function(e){var t=e.theme,n=e.placement,r="6px",a=Wn(t,"tooltip.background","#737373"),o={},i={content:"' '",left:"50%",height:0,width:0,position:"absolute",pointerEvents:"none",marginLeft:"calc(".concat(r," * -1);")};switch(n){case"top":o={transform:"translateX(-50%) translateY(-50%)","&::before":je(je({},i),{top:"100%",borderTopColor:a})};break;case"right":o={transform:"translateX(0) translateY(-50%)","&::before":je(je({},i),{left:"calc(".concat(r," * -1)"),top:"50%",transform:"translateX(0) translateY(-50%)",borderRightColor:a})};break;case"left":o={transform:"translateX(-100%) translateY(-50%)","&::before":je(je({},i),{left:"auto",right:"calc(".concat(r," * -2)"),top:"50%",transform:"translateX(0) translateY(-50%)",borderLeftColor:a})};break;default:o={transform:"translateX(-50%)","&::before":je(je({},i),{bottom:"100%",borderBottomColor:a})}}return je({position:"fixed",color:a,zIndex:10001},o)})),vl=a.Ay.div((function(e){var t=e.theme;return{border:"1px solid ".concat(Wn(t,"borderColor","#E2E2E2")),borderRadius:2,backgroundColor:Wn(t,"boxBackground","#FBFAFA"),paddingLeft:10,paddingTop:5,paddingBottom:5,paddingRight:10,"& .leftItems":{fontSize:16,fontWeight:"bold",display:"flex",alignItems:"center","& .min-icon":{marginRight:5,height:28,width:38}},"& .helpText":{fontSize:10,paddingLeft:5,marginTop:5,color:"black"}}})),yl=function(e){var t,n=e.children,a=e.content,i=e.placement,s=(0,r.useState)(null),l=s[0],c=s[1],u=(0,r.useState)(!1),d=u[0],p=u[1],m=(0,r.useState)(!1),f=m[0],h=m[1],g=function(){f||(p(!1),h(!0))},E=(0,r.useRef)(null);return(0,r.useEffect)((function(){function e(e){t.current&&!t.current.contains(e.target)&&h(!1)}return document.addEventListener("mousedown",e),function(){document.removeEventListener("mousedown",e)}}),[t=E]),i?r.createElement(r.Fragment,null,r.createElement(gl,{ref:E,onPointerEnter:function(e){f||(c(e.currentTarget),p(!0))},onMouseLeave:function(){f?setTimeout((function(){p(!1),h(!1)}),5e4):setTimeout((function(){p(!1)}),1e3)}},n,d&&!f&&(0,o.createPortal)(r.createElement((function(e){var t=e.placement,n=e.anchorEl,a={},o=t;if(n){var i=n.getBoundingClientRect(),s=document.documentElement.offsetWidth,l=document.documentElement.offsetHeight;switch(t){case"bottom":i.top+i.height+45>l&&(o="top");break;case"left":i.left;break;case"right":i.left+i.width+175>s&&(o="left");break;case"top":i.top<45&&(o="bottom")}switch(o){case"bottom":a={top:i.top+i.height+10,left:i.left+i.width/2};break;case"left":a={top:i.top+i.height/2,left:i.left-12};break;case"right":a={top:i.top+i.height/2,left:i.left+i.width+12};break;case"top":a={top:i.top-i.height/2-10,left:i.left+i.width/2}}}return r.createElement(bl,{placement:o,style:a,onClick:g},r.createElement(Xa,{style:{width:12,height:12}}))}),{placement:i,content:r.createElement(Xa,null),anchorEl:l}),document.body),f&&(0,o.createPortal)(r.createElement((function(e){var t=e.placement,n=e.content,a=e.anchorEl,o={},i=t;if(a){var s=a.getBoundingClientRect(),l=document.documentElement.offsetWidth,c=document.documentElement.offsetHeight;switch(t){case"bottom":s.top+s.height+25>c&&(i="top");break;case"left":s.left-175<0&&(i="right");break;case"right":s.left+s.width+175>l&&(i="left");break;case"top":s.top<25&&(i="bottom")}switch(i){case"bottom":o={top:s.top+s.height+10,left:s.left+s.width/2};break;case"left":o={top:s.top+s.height/2,left:s.left-12};break;case"right":o={top:s.top+s.height/2,left:s.left+s.width+12};break;case"top":o={top:s.top-s.height/2-10,left:s.left+s.width/2}}}return r.createElement(El,{placement:i,style:o,onClick:g},n)}),{placement:i,content:r.createElement(vl,{className:"helpbox-container",ref:E},r.createElement(Gr,{container:!0},r.createElement(Gr,{item:!0,xs:12,className:"helpText"},a))),anchorEl:l}),document.body))):r.createElement(r.Fragment,null,n)},_l=a.Ay.label((function(e){var t=e.theme,n=e.sx;return je({fontWeight:600,marginRight:10,fontSize:14,color:Wn(t,"commonInput.labelColor","#07193E"),textAlign:"left",alignItems:"center",display:"flex",userSelect:"none",whiteSpace:"nowrap","& > span":{display:"flex",alignItems:"center",minWidth:160,"&.noMinWidthLabel":{minWidth:"initial"}}},n)})),Sl=function(e){var t=e.children,n=e.sx,a=e.noMinWidth,o=e.htmlFor,i=e.helpTip,s=e.helpTipPlacement,l=Ve(e,["children","sx","noMinWidth","htmlFor","helpTip","helpTipPlacement"]);return r.createElement(_l,je({sx:n,htmlFor:o},l),r.createElement("span",{className:"".concat(a?"noMinWidthLabel":"")},i?r.createElement(yl,{placement:s,content:i},t):t))},Tl=a.Ay.div((function(e){var t,n=e.sx;return je(((t={position:"relative",display:"flex",flexWrap:"wrap",width:"100%",flexBasis:"100%"})["@media (max-width: ".concat(i.sm,")")]={flexFlow:"column"},t["& .tooltipContainer"]={marginLeft:5,display:"flex",alignItems:"center","& .min-icon":{width:13}},t),n)})),Al=function(e){var t=e.children,n=e.sx,a=e.className;return r.createElement(Tl,{sx:n,className:a},t)},Cl=a.Ay.label((function(e){var t=e.sx,n=e.theme;return je({"& input":{display:"none"},"& .checkbox":{position:"relative",display:"block",width:16,height:16,borderRadius:2,border:"1px solid ".concat(Wn(n,"checkbox.checkBoxBorder","#c3c3c3")),boxShadow:"inset 0px 1px 3px rgba(0,0,0,0.1)"},"input:checked ~ .checkbox":{"&:before":{content:"' '",position:"absolute",display:"block",width:12,height:12,backgroundColor:Wn(n,"checkbox.checkBoxColor","#4CCB92"),borderRadius:1,top:"50%",left:"50%",transform:"translateX(-50%) translateY(-50%)"}},"input:disabled":{"& ~ .checkbox":{border:"1px solid ".concat(Wn(n,"checkbox.disabledBorder","#B4B4B4"))},"&:checked ~ .checkbox":{"&:before":{backgroundColor:Wn(n,"checkbox.disabledColor","#D5D7D7")}}}},t)})),wl=function(e){var t=e.tooltip,n=e.label,a=e.id,o=e.overrideLabelClasses,i=e.sx,s=e.className,l=e.helpTip,c=e.helpTipPlacement,u=Ve(e,["tooltip","label","id","overrideLabelClasses","sx","className","helpTip","helpTipPlacement"]);return r.createElement(Al,{className:"inputItem ".concat(s||""),sx:{display:"flex",justifyContent:"flex-start",alignItems:"center",flexBasis:"initial",flexWrap:"nowrap"}},r.createElement(Cl,{sx:i,onClick:function(e){return e.stopPropagation()}},r.createElement("input",je({type:"checkbox",id:a},u)),r.createElement("span",{className:"checkbox"})),""!==n&&r.createElement(Sl,{htmlFor:a,noMinWidth:!0,className:"".concat(o||""),sx:{marginLeft:10},helpTip:l,helpTipPlacement:c},n,t&&""!==t&&r.createElement("div",{className:"tooltipContainer"},r.createElement(Ga,{tooltip:t,placement:"top"},r.createElement(jo,null)))))},Nl=a.Ay.button((function(e){var t=e.theme,n=e.size,r=30;if(n&&"string"==typeof n)switch(n){case"small":r=28;break;case"medium":r=30;break;case"large":r=48;break;default:r=n}return{width:r,height:r,display:"flex",justifyContent:"center",alignItems:"center",borderRadius:"100%",border:0,position:"relative",cursor:"pointer",transitionDuration:"0.2s",backgroundColor:Wn(t,"iconButton.buttonBG","#000"),"& svg":{fill:Wn(t,"iconButton.color","#000"),margin:"calc(25% - 2px)"},"&:hover:not(:disabled)":{backgroundColor:Wn(t,"iconButton.hoverBG","#000")},"&:active:not(:disabled)":{backgroundColor:Wn(t,"iconButton.activeBG","#000")},"&:disabled":{cursor:"not-allowed",backgroundColor:Wn(t,"iconButton.disabledBG","#000")}}})),Il=function(e){var t=e.children,n=Ve(e,["children"]);return r.createElement(Nl,je({},n),t)};function xl(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Rl(e){return Rl="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Rl(e)}function kl(e){var t=function(e,t){if("object"!=Rl(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=Rl(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==Rl(t)?t:String(t)}function Ol(e,t){for(var n=0;n=0&&l===s&&c())}function ql(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r=0||(a[n]=e[n]);return a}function Yl(e,t){if(null==e)return{};var n,r,a=ql(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}zl.__suppressDeprecationWarning=!0,Hl.__suppressDeprecationWarning=!0,Gl.__suppressDeprecationWarning=!0;var Kl,Xl,Ql,Jl,ec={exports:{}};ec.exports=function(){if(Jl)return Ql;Jl=1;var e=Xl?Kl:(Xl=1,Kl="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED");function t(){}function n(){}return n.resetWarningCache=t,Ql=function(){function r(t,n,r,a,o,i){if(i!==e){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function a(){return r}r.isRequired=r;var o={array:r,bigint:r,bool:r,func:r,number:r,object:r,string:r,symbol:r,any:r,arrayOf:a,element:r,elementType:r,instanceOf:a,node:r,objectOf:a,oneOf:a,oneOfType:a,shape:a,exact:a,checkPropTypes:n,resetWarningCache:t};return o.PropTypes=o,o}}()();var tc=qe(ec.exports),nc=function(){function e(t){var n=t.cellCount,r=t.cellSizeGetter,a=t.estimatedCellSize;xl(this,e),Ul(this,"_cellSizeAndPositionData",{}),Ul(this,"_lastMeasuredIndex",-1),Ul(this,"_lastBatchedIndex",-1),Ul(this,"_cellCount",void 0),Ul(this,"_cellSizeGetter",void 0),Ul(this,"_estimatedCellSize",void 0),this._cellSizeGetter=r,this._cellCount=n,this._estimatedCellSize=a}return Ll(e,[{key:"areOffsetsAdjusted",value:function(){return!1}},{key:"configure",value:function(e){var t=e.cellCount,n=e.estimatedCellSize,r=e.cellSizeGetter;this._cellCount=t,this._estimatedCellSize=n,this._cellSizeGetter=r}},{key:"getCellCount",value:function(){return this._cellCount}},{key:"getEstimatedCellSize",value:function(){return this._estimatedCellSize}},{key:"getLastMeasuredIndex",value:function(){return this._lastMeasuredIndex}},{key:"getOffsetAdjustment",value:function(){return 0}},{key:"getSizeAndPositionOfCell",value:function(e){if(e<0||e>=this._cellCount)throw Error("Requested index ".concat(e," is outside of range 0..").concat(this._cellCount));if(e>this._lastMeasuredIndex)for(var t=this.getSizeAndPositionOfLastMeasuredCell(),n=t.offset+t.size,r=this._lastMeasuredIndex+1;r<=e;r++){var a=this._cellSizeGetter({index:r});if(void 0===a||isNaN(a))throw Error("Invalid size returned for cell ".concat(r," of value ").concat(a));null===a?(this._cellSizeAndPositionData[r]={offset:n,size:0},this._lastBatchedIndex=e):(this._cellSizeAndPositionData[r]={offset:n,size:a},n+=a,this._lastMeasuredIndex=e)}return this._cellSizeAndPositionData[e]}},{key:"getSizeAndPositionOfLastMeasuredCell",value:function(){return this._lastMeasuredIndex>=0?this._cellSizeAndPositionData[this._lastMeasuredIndex]:{offset:0,size:0}}},{key:"getTotalSize",value:function(){var e=this.getSizeAndPositionOfLastMeasuredCell();return e.offset+e.size+(this._cellCount-this._lastMeasuredIndex-1)*this._estimatedCellSize}},{key:"getUpdatedOffsetForIndex",value:function(e){var t=e.align,n=void 0===t?"auto":t,r=e.containerSize,a=e.currentOffset,o=e.targetIndex;if(r<=0)return 0;var i,s=this.getSizeAndPositionOfCell(o),l=s.offset,c=l-r+s.size;switch(n){case"start":i=l;break;case"end":i=c;break;case"center":i=l-(r-s.size)/2;break;default:i=Math.max(c,Math.min(l,a))}var u=this.getTotalSize();return Math.max(0,Math.min(u-r,i))}},{key:"getVisibleCellRange",value:function(e){var t=e.containerSize,n=e.offset;if(0===this.getTotalSize())return{};var r=n+t,a=this._findNearestCell(n),o=this.getSizeAndPositionOfCell(a);n=o.offset+o.size;for(var i=a;nn&&(e=r-1)}return t>0?t-1:0}},{key:"_exponentialSearch",value:function(e,t){for(var n=1;e=e?this._binarySearch(n,0,e):this._exponentialSearch(n,e)}}]),e}(),rc=function(){function e(t){var n=t.maxScrollSize,r=void 0===n?"undefined"!=typeof window&&window.chrome?16777100:15e5:n,a=Yl(t,["maxScrollSize"]);xl(this,e),Ul(this,"_cellSizeAndPositionManager",void 0),Ul(this,"_maxScrollSize",void 0),this._cellSizeAndPositionManager=new nc(a),this._maxScrollSize=r}return Ll(e,[{key:"areOffsetsAdjusted",value:function(){return this._cellSizeAndPositionManager.getTotalSize()>this._maxScrollSize}},{key:"configure",value:function(e){this._cellSizeAndPositionManager.configure(e)}},{key:"getCellCount",value:function(){return this._cellSizeAndPositionManager.getCellCount()}},{key:"getEstimatedCellSize",value:function(){return this._cellSizeAndPositionManager.getEstimatedCellSize()}},{key:"getLastMeasuredIndex",value:function(){return this._cellSizeAndPositionManager.getLastMeasuredIndex()}},{key:"getOffsetAdjustment",value:function(e){var t=e.containerSize,n=e.offset,r=this._cellSizeAndPositionManager.getTotalSize(),a=this.getTotalSize(),o=this._getOffsetPercentage({containerSize:t,offset:n,totalSize:a});return Math.round(o*(a-r))}},{key:"getSizeAndPositionOfCell",value:function(e){return this._cellSizeAndPositionManager.getSizeAndPositionOfCell(e)}},{key:"getSizeAndPositionOfLastMeasuredCell",value:function(){return this._cellSizeAndPositionManager.getSizeAndPositionOfLastMeasuredCell()}},{key:"getTotalSize",value:function(){return Math.min(this._maxScrollSize,this._cellSizeAndPositionManager.getTotalSize())}},{key:"getUpdatedOffsetForIndex",value:function(e){var t=e.align,n=void 0===t?"auto":t,r=e.containerSize,a=e.currentOffset,o=e.targetIndex;a=this._safeOffsetToOffset({containerSize:r,offset:a});var i=this._cellSizeAndPositionManager.getUpdatedOffsetForIndex({align:n,containerSize:r,currentOffset:a,targetIndex:o});return this._offsetToSafeOffset({containerSize:r,offset:i})}},{key:"getVisibleCellRange",value:function(e){var t=e.containerSize,n=e.offset;return n=this._safeOffsetToOffset({containerSize:t,offset:n}),this._cellSizeAndPositionManager.getVisibleCellRange({containerSize:t,offset:n})}},{key:"resetCell",value:function(e){this._cellSizeAndPositionManager.resetCell(e)}},{key:"_getOffsetPercentage",value:function(e){var t=e.containerSize,n=e.offset,r=e.totalSize;return r<=t?0:n/(r-t)}},{key:"_offsetToSafeOffset",value:function(e){var t=e.containerSize,n=e.offset,r=this._cellSizeAndPositionManager.getTotalSize(),a=this.getTotalSize();if(r===a)return n;var o=this._getOffsetPercentage({containerSize:t,offset:n,totalSize:r});return Math.round(o*(a-t))}},{key:"_safeOffsetToOffset",value:function(e){var t=e.containerSize,n=e.offset,r=this._cellSizeAndPositionManager.getTotalSize(),a=this.getTotalSize();if(r===a)return n;var o=this._getOffsetPercentage({containerSize:t,offset:n,totalSize:a});return Math.round(o*(r-t))}}]),e}();function ac(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t={};return function(n){var r=n.callback,a=n.indices,o=Object.keys(a),i=!e||o.every((function(e){var t=a[e];return Array.isArray(t)?t.length>0:t>=0})),s=o.length!==Object.keys(t).length||o.some((function(e){var n=t[e],r=a[e];return Array.isArray(r)?n.join(",")!==r.join(","):n!==r}));t=a,i&&s&&r(a)}}function oc(e){var t=e.cellSize,n=e.cellSizeAndPositionManager,r=e.previousCellsCount,a=e.previousCellSize,o=e.previousScrollToAlignment,i=e.previousScrollToIndex,s=e.previousSize,l=e.scrollOffset,c=e.scrollToAlignment,u=e.scrollToIndex,d=e.size,p=e.sizeJustIncreasedFromZero,m=e.updateScrollIndexCallback,f=n.getCellCount(),h=u>=0&&u0&&(dn.getTotalSize()-d&&m(f-1)}var ic,sc,lc=!("undefined"==typeof window||!window.document||!window.document.createElement);function cc(e){if((!ic&&0!==ic||e)&&lc){var t=document.createElement("div");t.style.position="absolute",t.style.top="-9999px",t.style.width="50px",t.style.height="50px",t.style.overflow="scroll",document.body.appendChild(t),ic=t.offsetWidth-t.clientWidth,document.body.removeChild(t)}return ic}var uc,dc,pc=(sc="undefined"!=typeof window?window:"undefined"!=typeof self?self:{}).requestAnimationFrame||sc.webkitRequestAnimationFrame||sc.mozRequestAnimationFrame||sc.oRequestAnimationFrame||sc.msRequestAnimationFrame||function(e){return sc.setTimeout(e,1e3/60)},mc=sc.cancelAnimationFrame||sc.webkitCancelAnimationFrame||sc.mozCancelAnimationFrame||sc.oCancelAnimationFrame||sc.msCancelAnimationFrame||function(e){sc.clearTimeout(e)},fc=pc,hc=mc,gc=function(e){return hc(e.id)},Ec=function(e,t){var n;Promise.resolve().then((function(){n=Date.now()}));var r={id:fc((function a(){Date.now()-n>=t?e.call():r.id=fc(a)}))};return r};function bc(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function vc(e){for(var t=1;t0&&(n._initialScrollTop=n._getCalculatedScrollTop(e,n.state)),e.scrollToColumn>0&&(n._initialScrollLeft=n._getCalculatedScrollLeft(e,n.state)),n}return Fl(t,r.PureComponent),Ll(t,[{key:"getOffsetForCell",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.alignment,n=void 0===t?this.props.scrollToAlignment:t,r=e.columnIndex,a=void 0===r?this.props.scrollToColumn:r,o=e.rowIndex,i=void 0===o?this.props.scrollToRow:o,s=vc({},this.props,{scrollToAlignment:n,scrollToColumn:a,scrollToRow:i});return{scrollLeft:this._getCalculatedScrollLeft(s),scrollTop:this._getCalculatedScrollTop(s)}}},{key:"getTotalRowsHeight",value:function(){return this.state.instanceProps.rowSizeAndPositionManager.getTotalSize()}},{key:"getTotalColumnsWidth",value:function(){return this.state.instanceProps.columnSizeAndPositionManager.getTotalSize()}},{key:"handleScrollEvent",value:function(e){var t=e.scrollLeft,n=void 0===t?0:t,r=e.scrollTop,a=void 0===r?0:r;if(!(a<0)){this._debounceScrollEnded();var o=this.props,i=o.autoHeight,s=o.autoWidth,l=o.height,c=o.width,u=this.state.instanceProps,d=u.scrollbarSize,p=u.rowSizeAndPositionManager.getTotalSize(),m=u.columnSizeAndPositionManager.getTotalSize(),f=Math.min(Math.max(0,m-c+d),n),h=Math.min(Math.max(0,p-l+d),a);if(this.state.scrollLeft!==f||this.state.scrollTop!==h){var g={isScrolling:!0,scrollDirectionHorizontal:f!==this.state.scrollLeft?f>this.state.scrollLeft?1:-1:this.state.scrollDirectionHorizontal,scrollDirectionVertical:h!==this.state.scrollTop?h>this.state.scrollTop?1:-1:this.state.scrollDirectionVertical,scrollPositionChangeReason:"observed"};i||(g.scrollTop=h),s||(g.scrollLeft=f),g.needToResetStyleCache=!1,this.setState(g)}this._invokeOnScrollMemoizer({scrollLeft:f,scrollTop:h,totalColumnsWidth:m,totalRowsHeight:p})}}},{key:"invalidateCellSizeAfterRender",value:function(e){var t=e.columnIndex,n=e.rowIndex;this._deferredInvalidateColumnIndex="number"==typeof this._deferredInvalidateColumnIndex?Math.min(this._deferredInvalidateColumnIndex,t):t,this._deferredInvalidateRowIndex="number"==typeof this._deferredInvalidateRowIndex?Math.min(this._deferredInvalidateRowIndex,n):n}},{key:"measureAllCells",value:function(){var e=this.props,t=e.columnCount,n=e.rowCount,r=this.state.instanceProps;r.columnSizeAndPositionManager.getSizeAndPositionOfCell(t-1),r.rowSizeAndPositionManager.getSizeAndPositionOfCell(n-1)}},{key:"recomputeGridSize",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.columnIndex,n=void 0===t?0:t,r=e.rowIndex,a=void 0===r?0:r,o=this.props,i=o.scrollToColumn,s=o.scrollToRow,l=this.state.instanceProps;l.columnSizeAndPositionManager.resetCell(n),l.rowSizeAndPositionManager.resetCell(a),this._recomputeScrollLeftFlag=i>=0&&(1===this.state.scrollDirectionHorizontal?n<=i:n>=i),this._recomputeScrollTopFlag=s>=0&&(1===this.state.scrollDirectionVertical?a<=s:a>=s),this._styleCache={},this._cellCache={},this.forceUpdate()}},{key:"scrollToCell",value:function(e){var t=e.columnIndex,n=e.rowIndex,r=this.props.columnCount,a=this.props;r>1&&void 0!==t&&this._updateScrollLeftForScrollToColumn(vc({},a,{scrollToColumn:t})),void 0!==n&&this._updateScrollTopForScrollToRow(vc({},a,{scrollToRow:n}))}},{key:"componentDidMount",value:function(){var e=this.props,n=e.getScrollbarSize,r=e.height,a=e.scrollLeft,o=e.scrollToColumn,i=e.scrollTop,s=e.scrollToRow,l=e.width,c=this.state.instanceProps;if(this._initialScrollTop=0,this._initialScrollLeft=0,this._handleInvalidatedGridSize(),c.scrollbarSizeMeasured||this.setState((function(e){var t=vc({},e,{needToResetStyleCache:!1});return t.instanceProps.scrollbarSize=n(),t.instanceProps.scrollbarSizeMeasured=!0,t})),"number"==typeof a&&a>=0||"number"==typeof i&&i>=0){var u=t._getScrollToPositionStateUpdate({prevState:this.state,scrollLeft:a,scrollTop:i});u&&(u.needToResetStyleCache=!1,this.setState(u))}this._scrollingContainer&&(this._scrollingContainer.scrollLeft!==this.state.scrollLeft&&(this._scrollingContainer.scrollLeft=this.state.scrollLeft),this._scrollingContainer.scrollTop!==this.state.scrollTop&&(this._scrollingContainer.scrollTop=this.state.scrollTop));var d=r>0&&l>0;o>=0&&d&&this._updateScrollLeftForScrollToColumn(),s>=0&&d&&this._updateScrollTopForScrollToRow(),this._invokeOnGridRenderedHelper(),this._invokeOnScrollMemoizer({scrollLeft:a||0,scrollTop:i||0,totalColumnsWidth:c.columnSizeAndPositionManager.getTotalSize(),totalRowsHeight:c.rowSizeAndPositionManager.getTotalSize()}),this._maybeCallOnScrollbarPresenceChange()}},{key:"componentDidUpdate",value:function(e,t){var n=this,r=this.props,a=r.autoHeight,o=r.autoWidth,i=r.columnCount,s=r.height,l=r.rowCount,c=r.scrollToAlignment,u=r.scrollToColumn,d=r.scrollToRow,p=r.width,m=this.state,f=m.scrollLeft,h=m.scrollPositionChangeReason,g=m.scrollTop,E=m.instanceProps;this._handleInvalidatedGridSize();var b=i>0&&0===e.columnCount||l>0&&0===e.rowCount;h===Sc&&(!o&&f>=0&&(f!==this._scrollingContainer.scrollLeft||b)&&(this._scrollingContainer.scrollLeft=f),!a&&g>=0&&(g!==this._scrollingContainer.scrollTop||b)&&(this._scrollingContainer.scrollTop=g));var v=(0===e.width||0===e.height)&&s>0&&p>0;if(this._recomputeScrollLeftFlag?(this._recomputeScrollLeftFlag=!1,this._updateScrollLeftForScrollToColumn(this.props)):oc({cellSizeAndPositionManager:E.columnSizeAndPositionManager,previousCellsCount:e.columnCount,previousCellSize:e.columnWidth,previousScrollToAlignment:e.scrollToAlignment,previousScrollToIndex:e.scrollToColumn,previousSize:e.width,scrollOffset:f,scrollToAlignment:c,scrollToIndex:u,size:p,sizeJustIncreasedFromZero:v,updateScrollIndexCallback:function(){return n._updateScrollLeftForScrollToColumn(n.props)}}),this._recomputeScrollTopFlag?(this._recomputeScrollTopFlag=!1,this._updateScrollTopForScrollToRow(this.props)):oc({cellSizeAndPositionManager:E.rowSizeAndPositionManager,previousCellsCount:e.rowCount,previousCellSize:e.rowHeight,previousScrollToAlignment:e.scrollToAlignment,previousScrollToIndex:e.scrollToRow,previousSize:e.height,scrollOffset:g,scrollToAlignment:c,scrollToIndex:d,size:s,sizeJustIncreasedFromZero:v,updateScrollIndexCallback:function(){return n._updateScrollTopForScrollToRow(n.props)}}),this._invokeOnGridRenderedHelper(),f!==t.scrollLeft||g!==t.scrollTop){var y=E.rowSizeAndPositionManager.getTotalSize(),_=E.columnSizeAndPositionManager.getTotalSize();this._invokeOnScrollMemoizer({scrollLeft:f,scrollTop:g,totalColumnsWidth:_,totalRowsHeight:y})}this._maybeCallOnScrollbarPresenceChange()}},{key:"componentWillUnmount",value:function(){this._disablePointerEventsTimeoutId&&gc(this._disablePointerEventsTimeoutId)}},{key:"render",value:function(){var e=this.props,t=e.autoContainerWidth,n=e.autoHeight,a=e.autoWidth,o=e.className,i=e.containerProps,s=e.containerRole,l=e.containerStyle,c=e.height,u=e.id,d=e.noContentRenderer,p=e.role,m=e.style,f=e.tabIndex,h=e.width,g=this.state,E=g.instanceProps,b=g.needToResetStyleCache,v=this._isScrolling(),y={boxSizing:"border-box",direction:"ltr",height:n?"auto":c,position:"relative",width:a?"auto":h,WebkitOverflowScrolling:"touch",willChange:"transform"};b&&(this._styleCache={}),this.state.isScrolling||this._resetStyleCache(),this._calculateChildrenToRender(this.props,this.state);var _=E.columnSizeAndPositionManager.getTotalSize(),S=E.rowSizeAndPositionManager.getTotalSize(),T=S>c?E.scrollbarSize:0,A=_>h?E.scrollbarSize:0;A===this._horizontalScrollBarSize&&T===this._verticalScrollBarSize||(this._horizontalScrollBarSize=A,this._verticalScrollBarSize=T,this._scrollbarPresenceChanged=!0),y.overflowX=_+T<=h?"hidden":"auto",y.overflowY=S+A<=c?"hidden":"auto";var C=this._childrenToDisplay,w=0===C.length&&c>0&&h>0;return r.createElement("div",Vl({ref:this._setScrollingContainerRef},i,{"aria-label":this.props["aria-label"],"aria-readonly":this.props["aria-readonly"],className:Wl("ReactVirtualized__Grid",o),id:u,onScroll:this._onScroll,role:p,style:vc({},y,{},m),tabIndex:f}),C.length>0&&r.createElement("div",{className:"ReactVirtualized__Grid__innerScrollContainer",role:s,style:vc({width:t?"auto":_,height:S,maxWidth:_,maxHeight:S,overflow:"hidden",pointerEvents:v?"none":"",position:"relative"},l)},C),w&&d())}},{key:"_calculateChildrenToRender",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.props,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.state,n=e.cellRenderer,r=e.cellRangeRenderer,a=e.columnCount,o=e.deferredMeasurementCache,i=e.height,s=e.overscanColumnCount,l=e.overscanIndicesGetter,c=e.overscanRowCount,u=e.rowCount,d=e.width,p=e.isScrollingOptOut,m=t.scrollDirectionHorizontal,f=t.scrollDirectionVertical,h=t.instanceProps,g=this._initialScrollTop>0?this._initialScrollTop:t.scrollTop,E=this._initialScrollLeft>0?this._initialScrollLeft:t.scrollLeft,b=this._isScrolling(e,t);if(this._childrenToDisplay=[],i>0&&d>0){var v=h.columnSizeAndPositionManager.getVisibleCellRange({containerSize:d,offset:E}),y=h.rowSizeAndPositionManager.getVisibleCellRange({containerSize:i,offset:g}),_=h.columnSizeAndPositionManager.getOffsetAdjustment({containerSize:d,offset:E}),S=h.rowSizeAndPositionManager.getOffsetAdjustment({containerSize:i,offset:g});this._renderedColumnStartIndex=v.start,this._renderedColumnStopIndex=v.stop,this._renderedRowStartIndex=y.start,this._renderedRowStopIndex=y.stop;var T=l({direction:"horizontal",cellCount:a,overscanCellsCount:s,scrollDirection:m,startIndex:"number"==typeof v.start?v.start:0,stopIndex:"number"==typeof v.stop?v.stop:-1}),A=l({direction:"vertical",cellCount:u,overscanCellsCount:c,scrollDirection:f,startIndex:"number"==typeof y.start?y.start:0,stopIndex:"number"==typeof y.stop?y.stop:-1}),C=T.overscanStartIndex,w=T.overscanStopIndex,N=A.overscanStartIndex,I=A.overscanStopIndex;if(o){if(!o.hasFixedHeight())for(var x=N;x<=I;x++)if(!o.has(x,0)){C=0,w=a-1;break}if(!o.hasFixedWidth())for(var R=C;R<=w;R++)if(!o.has(0,R)){N=0,I=u-1;break}}this._childrenToDisplay=r({cellCache:this._cellCache,cellRenderer:n,columnSizeAndPositionManager:h.columnSizeAndPositionManager,columnStartIndex:C,columnStopIndex:w,deferredMeasurementCache:o,horizontalOffsetAdjustment:_,isScrolling:b,isScrollingOptOut:p,parent:this,rowSizeAndPositionManager:h.rowSizeAndPositionManager,rowStartIndex:N,rowStopIndex:I,scrollLeft:E,scrollTop:g,styleCache:this._styleCache,verticalOffsetAdjustment:S,visibleColumnIndices:v,visibleRowIndices:y}),this._columnStartIndex=C,this._columnStopIndex=w,this._rowStartIndex=N,this._rowStopIndex=I}}},{key:"_debounceScrollEnded",value:function(){var e=this.props.scrollingResetTimeInterval;this._disablePointerEventsTimeoutId&&gc(this._disablePointerEventsTimeoutId),this._disablePointerEventsTimeoutId=Ec(this._debounceScrollEndedCallback,e)}},{key:"_handleInvalidatedGridSize",value:function(){if("number"==typeof this._deferredInvalidateColumnIndex&&"number"==typeof this._deferredInvalidateRowIndex){var e=this._deferredInvalidateColumnIndex,t=this._deferredInvalidateRowIndex;this._deferredInvalidateColumnIndex=null,this._deferredInvalidateRowIndex=null,this.recomputeGridSize({columnIndex:e,rowIndex:t})}}},{key:"_invokeOnScrollMemoizer",value:function(e){var t=this,n=e.scrollLeft,r=e.scrollTop,a=e.totalColumnsWidth,o=e.totalRowsHeight;this._onScrollMemoizer({callback:function(e){var n=e.scrollLeft,r=e.scrollTop,i=t.props,s=i.height;(0,i.onScroll)({clientHeight:s,clientWidth:i.width,scrollHeight:o,scrollLeft:n,scrollTop:r,scrollWidth:a})},indices:{scrollLeft:n,scrollTop:r}})}},{key:"_isScrolling",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.props,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.state;return Object.hasOwnProperty.call(e,"isScrolling")?Boolean(e.isScrolling):Boolean(t.isScrolling)}},{key:"_maybeCallOnScrollbarPresenceChange",value:function(){if(this._scrollbarPresenceChanged){var e=this.props.onScrollbarPresenceChange;this._scrollbarPresenceChanged=!1,e({horizontal:this._horizontalScrollBarSize>0,size:this.state.instanceProps.scrollbarSize,vertical:this._verticalScrollBarSize>0})}}},{key:"scrollToPosition",value:function(e){var n=e.scrollLeft,r=e.scrollTop,a=t._getScrollToPositionStateUpdate({prevState:this.state,scrollLeft:n,scrollTop:r});a&&(a.needToResetStyleCache=!1,this.setState(a))}},{key:"_getCalculatedScrollLeft",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.props,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.state;return t._getCalculatedScrollLeft(e,n)}},{key:"_updateScrollLeftForScrollToColumn",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.props,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.state,r=t._getScrollLeftForScrollToColumnStateUpdate(e,n);r&&(r.needToResetStyleCache=!1,this.setState(r))}},{key:"_getCalculatedScrollTop",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.props,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.state;return t._getCalculatedScrollTop(e,n)}},{key:"_resetStyleCache",value:function(){var e=this._styleCache,t=this._cellCache,n=this.props.isScrollingOptOut;this._cellCache={},this._styleCache={};for(var r=this._rowStartIndex;r<=this._rowStopIndex;r++)for(var a=this._columnStartIndex;a<=this._columnStopIndex;a++){var o="".concat(r,"-").concat(a);this._styleCache[o]=e[o],n&&(this._cellCache[o]=t[o])}}},{key:"_updateScrollTopForScrollToRow",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.props,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.state,r=t._getScrollTopForScrollToRowStateUpdate(e,n);r&&(r.needToResetStyleCache=!1,this.setState(r))}}],[{key:"getDerivedStateFromProps",value:function(e,n){var r={};0===e.columnCount&&0!==n.scrollLeft||0===e.rowCount&&0!==n.scrollTop?(r.scrollLeft=0,r.scrollTop=0):(e.scrollLeft!==n.scrollLeft&&e.scrollToColumn<0||e.scrollTop!==n.scrollTop&&e.scrollToRow<0)&&Object.assign(r,t._getScrollToPositionStateUpdate({prevState:n,scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}));var a,o,i=n.instanceProps;return r.needToResetStyleCache=!1,e.columnWidth===i.prevColumnWidth&&e.rowHeight===i.prevRowHeight||(r.needToResetStyleCache=!0),i.columnSizeAndPositionManager.configure({cellCount:e.columnCount,estimatedCellSize:t._getEstimatedColumnSize(e),cellSizeGetter:t._wrapSizeGetter(e.columnWidth)}),i.rowSizeAndPositionManager.configure({cellCount:e.rowCount,estimatedCellSize:t._getEstimatedRowSize(e),cellSizeGetter:t._wrapSizeGetter(e.rowHeight)}),0!==i.prevColumnCount&&0!==i.prevRowCount||(i.prevColumnCount=0,i.prevRowCount=0),e.autoHeight&&!1===e.isScrolling&&!0===i.prevIsScrolling&&Object.assign(r,{isScrolling:!1}),$l({cellCount:i.prevColumnCount,cellSize:"number"==typeof i.prevColumnWidth?i.prevColumnWidth:null,computeMetadataCallback:function(){return i.columnSizeAndPositionManager.resetCell(0)},computeMetadataCallbackProps:e,nextCellsCount:e.columnCount,nextCellSize:"number"==typeof e.columnWidth?e.columnWidth:null,nextScrollToIndex:e.scrollToColumn,scrollToIndex:i.prevScrollToColumn,updateScrollOffsetForScrollToIndex:function(){a=t._getScrollLeftForScrollToColumnStateUpdate(e,n)}}),$l({cellCount:i.prevRowCount,cellSize:"number"==typeof i.prevRowHeight?i.prevRowHeight:null,computeMetadataCallback:function(){return i.rowSizeAndPositionManager.resetCell(0)},computeMetadataCallbackProps:e,nextCellsCount:e.rowCount,nextCellSize:"number"==typeof e.rowHeight?e.rowHeight:null,nextScrollToIndex:e.scrollToRow,scrollToIndex:i.prevScrollToRow,updateScrollOffsetForScrollToIndex:function(){o=t._getScrollTopForScrollToRowStateUpdate(e,n)}}),i.prevColumnCount=e.columnCount,i.prevColumnWidth=e.columnWidth,i.prevIsScrolling=!0===e.isScrolling,i.prevRowCount=e.rowCount,i.prevRowHeight=e.rowHeight,i.prevScrollToColumn=e.scrollToColumn,i.prevScrollToRow=e.scrollToRow,i.scrollbarSize=e.getScrollbarSize(),void 0===i.scrollbarSize?(i.scrollbarSizeMeasured=!1,i.scrollbarSize=0):i.scrollbarSizeMeasured=!0,r.instanceProps=i,vc({},r,{},a,{},o)}},{key:"_getEstimatedColumnSize",value:function(e){return"number"==typeof e.columnWidth?e.columnWidth:e.estimatedColumnSize}},{key:"_getEstimatedRowSize",value:function(e){return"number"==typeof e.rowHeight?e.rowHeight:e.estimatedRowSize}},{key:"_getScrollToPositionStateUpdate",value:function(e){var t=e.prevState,n=e.scrollLeft,r=e.scrollTop,a={scrollPositionChangeReason:Sc};return"number"==typeof n&&n>=0&&(a.scrollDirectionHorizontal=n>t.scrollLeft?1:-1,a.scrollLeft=n),"number"==typeof r&&r>=0&&(a.scrollDirectionVertical=r>t.scrollTop?1:-1,a.scrollTop=r),"number"==typeof n&&n>=0&&n!==t.scrollLeft||"number"==typeof r&&r>=0&&r!==t.scrollTop?a:{}}},{key:"_wrapSizeGetter",value:function(e){return"function"==typeof e?e:function(){return e}}},{key:"_getCalculatedScrollLeft",value:function(e,t){var n=e.columnCount,r=e.height,a=e.scrollToAlignment,o=e.scrollToColumn,i=e.width,s=t.scrollLeft,l=t.instanceProps;if(n>0){var c=n-1,u=o<0?c:Math.min(c,o),d=l.rowSizeAndPositionManager.getTotalSize(),p=l.scrollbarSizeMeasured&&d>r?l.scrollbarSize:0;return l.columnSizeAndPositionManager.getUpdatedOffsetForIndex({align:a,containerSize:i-p,currentOffset:s,targetIndex:u})}return 0}},{key:"_getScrollLeftForScrollToColumnStateUpdate",value:function(e,n){var r=n.scrollLeft,a=t._getCalculatedScrollLeft(e,n);return"number"==typeof a&&a>=0&&r!==a?t._getScrollToPositionStateUpdate({prevState:n,scrollLeft:a,scrollTop:-1}):{}}},{key:"_getCalculatedScrollTop",value:function(e,t){var n=e.height,r=e.rowCount,a=e.scrollToAlignment,o=e.scrollToRow,i=e.width,s=t.scrollTop,l=t.instanceProps;if(r>0){var c=r-1,u=o<0?c:Math.min(c,o),d=l.columnSizeAndPositionManager.getTotalSize(),p=l.scrollbarSizeMeasured&&d>i?l.scrollbarSize:0;return l.rowSizeAndPositionManager.getUpdatedOffsetForIndex({align:a,containerSize:n-p,currentOffset:s,targetIndex:u})}return 0}},{key:"_getScrollTopForScrollToRowStateUpdate",value:function(e,n){var r=n.scrollTop,a=t._getCalculatedScrollTop(e,n);return"number"==typeof a&&a>=0&&r!==a?t._getScrollToPositionStateUpdate({prevState:n,scrollLeft:-1,scrollTop:a}):{}}}]),t}(),Ul(uc,"propTypes",null),dc);function Ac(e){var t=e.cellCount,n=e.overscanCellsCount,r=e.scrollDirection,a=e.startIndex,o=e.stopIndex;return n=Math.max(1,n),1===r?{overscanStartIndex:Math.max(0,a-1),overscanStopIndex:Math.min(t-1,o+n)}:{overscanStartIndex:Math.max(0,a-n),overscanStopIndex:Math.min(t-1,o+1)}}function Cc(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}Ul(Tc,"defaultProps",{"aria-label":"grid","aria-readonly":!0,autoContainerWidth:!1,autoHeight:!1,autoWidth:!1,cellRangeRenderer:function(e){for(var t=e.cellCache,n=e.cellRenderer,r=e.columnSizeAndPositionManager,a=e.columnStartIndex,o=e.columnStopIndex,i=e.deferredMeasurementCache,s=e.horizontalOffsetAdjustment,l=e.isScrolling,c=e.isScrollingOptOut,u=e.parent,d=e.rowSizeAndPositionManager,p=e.rowStartIndex,m=e.rowStopIndex,f=e.styleCache,h=e.verticalOffsetAdjustment,g=e.visibleColumnIndices,E=e.visibleRowIndices,b=[],v=r.areOffsetsAdjusted()||d.areOffsetsAdjusted(),y=!l&&!v,_=p;_<=m;_++)for(var S=d.getSizeAndPositionOfCell(_),T=a;T<=o;T++){var A=r.getSizeAndPositionOfCell(T),C=T>=g.start&&T<=g.stop&&_>=E.start&&_<=E.stop,w="".concat(_,"-").concat(T),N=void 0;y&&f[w]?N=f[w]:i&&!i.has(_,T)?N={height:"auto",left:0,position:"absolute",top:0,width:"auto"}:(N={height:S.size,left:A.offset+s,position:"absolute",top:S.offset+h,width:A.size},f[w]=N);var I={columnIndex:T,isScrolling:l,isVisible:C,key:w,parent:u,rowIndex:_,style:N},x=void 0;!c&&!l||s||h?x=n(I):(t[w]||(t[w]=n(I)),x=t[w]),null!=x&&!1!==x&&b.push(x)}return b},containerRole:"rowgroup",containerStyle:{},estimatedColumnSize:100,estimatedRowSize:30,getScrollbarSize:cc,noContentRenderer:function(){return null},onScroll:function(){},onScrollbarPresenceChange:function(){},onSectionRendered:function(){},overscanColumnCount:0,overscanIndicesGetter:function(e){var t=e.cellCount,n=e.overscanCellsCount,r=e.scrollDirection,a=e.startIndex,o=e.stopIndex;return 1===r?{overscanStartIndex:Math.max(0,a),overscanStopIndex:Math.min(t-1,o+n)}:{overscanStartIndex:Math.max(0,a-n),overscanStopIndex:Math.min(t-1,o)}},overscanRowCount:10,role:"grid",scrollingResetTimeInterval:150,scrollToAlignment:"auto",scrollToColumn:-1,scrollToRow:-1,style:{},tabIndex:0,isScrollingOptOut:!1}),jl(Tc);var wc,Nc,Ic=(_c=yc=function(e){function t(){var e,n;xl(this,t);for(var r=arguments.length,a=new Array(r),o=0;o div, .contract-trigger:before { content: " "; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; z-index: -1; } .resize-triggers > div { background: #eee; overflow: auto; } .contract-trigger:before { width: 200%; height: 200%; }',r=t.head||t.getElementsByTagName("head")[0],a=t.createElement("style");a.id="detectElementResize",a.type="text/css",null!=e&&a.setAttribute("nonce",e),a.styleSheet?a.styleSheet.cssText=n:a.appendChild(t.createTextNode(n)),r.appendChild(a)}}(o),t.__resizeLast__={},t.__resizeListeners__=[],(t.__resizeTriggers__=o.createElement("div")).className="resize-triggers";var c='
';if(window.trustedTypes){var u=trustedTypes.createPolicy("react-virtualized-auto-sizer",{createHTML:function(){return c}});t.__resizeTriggers__.innerHTML=u.createHTML("")}else t.__resizeTriggers__.innerHTML=c;t.appendChild(t.__resizeTriggers__),s(t),t.addEventListener("scroll",l,!0),d&&(t.__resizeTriggers__.__animationListener__=function(e){e.animationName==g&&s(t)},t.__resizeTriggers__.addEventListener(d,t.__resizeTriggers__.__animationListener__))}t.__resizeListeners__.push(n)}},removeResizeListener:function(e,t){if(a)e.detachEvent("onresize",t);else if(e.__resizeListeners__.splice(e.__resizeListeners__.indexOf(t),1),!e.__resizeListeners__.length){e.removeEventListener("scroll",l,!0),e.__resizeTriggers__.__animationListener__&&(e.__resizeTriggers__.removeEventListener(d,e.__resizeTriggers__.__animationListener__),e.__resizeTriggers__.__animationListener__=null);try{e.__resizeTriggers__=!e.removeChild(e.__resizeTriggers__)}catch(e){}}}}}function Rc(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function kc(e){for(var t=1;t=0){var u=t.getScrollPositionForCell({align:a,cellIndex:o,height:r,scrollLeft:l,scrollTop:c,width:i});u.scrollLeft===l&&u.scrollTop===c||n._setScrollPosition(u)}})),Ul(Dl(n),"_onScroll",(function(e){if(e.target===n._scrollingContainer){n._enablePointerEventsAfterDelay();var t=n.props,r=t.cellLayoutManager,a=t.height,o=t.isScrollingChange,i=t.width,s=n._scrollbarSize,l=r.getTotalSize(),c=l.height,u=l.width,d=Math.max(0,Math.min(u-i+s,e.target.scrollLeft)),p=Math.max(0,Math.min(c-a+s,e.target.scrollTop));if(n.state.scrollLeft!==d||n.state.scrollTop!==p){var m=e.cancelable?"observed":Fc;n.state.isScrolling||o(!0),n.setState({isScrolling:!0,scrollLeft:d,scrollPositionChangeReason:m,scrollTop:p})}n._invokeOnScrollMemoizer({scrollLeft:d,scrollTop:p,totalWidth:u,totalHeight:c})}})),n._scrollbarSize=cc(),void 0===n._scrollbarSize?(n._scrollbarSizeMeasured=!1,n._scrollbarSize=0):n._scrollbarSizeMeasured=!0,n}return Fl(t,r.PureComponent),Ll(t,[{key:"recomputeCellSizesAndPositions",value:function(){this._calculateSizeAndPositionDataOnNextUpdate=!0,this.forceUpdate()}},{key:"componentDidMount",value:function(){var e=this.props,t=e.cellLayoutManager,n=e.scrollLeft,r=e.scrollToCell,a=e.scrollTop;this._scrollbarSizeMeasured||(this._scrollbarSize=cc(),this._scrollbarSizeMeasured=!0,this.setState({})),r>=0?this._updateScrollPositionForScrollToCell():(n>=0||a>=0)&&this._setScrollPosition({scrollLeft:n,scrollTop:a}),this._invokeOnSectionRenderedHelper();var o=t.getTotalSize(),i=o.height,s=o.width;this._invokeOnScrollMemoizer({scrollLeft:n||0,scrollTop:a||0,totalHeight:i,totalWidth:s})}},{key:"componentDidUpdate",value:function(e,t){var n=this.props,r=n.height,a=n.scrollToAlignment,o=n.scrollToCell,i=n.width,s=this.state,l=s.scrollLeft,c=s.scrollPositionChangeReason,u=s.scrollTop;c===Fc&&(l>=0&&l!==t.scrollLeft&&l!==this._scrollingContainer.scrollLeft&&(this._scrollingContainer.scrollLeft=l),u>=0&&u!==t.scrollTop&&u!==this._scrollingContainer.scrollTop&&(this._scrollingContainer.scrollTop=u)),r===e.height&&a===e.scrollToAlignment&&o===e.scrollToCell&&i===e.width||this._updateScrollPositionForScrollToCell(),this._invokeOnSectionRenderedHelper()}},{key:"componentWillUnmount",value:function(){this._disablePointerEventsTimeoutId&&clearTimeout(this._disablePointerEventsTimeoutId)}},{key:"render",value:function(){var e=this.props,t=e.autoHeight,n=e.cellCount,a=e.cellLayoutManager,o=e.className,i=e.height,s=e.horizontalOverscanSize,l=e.id,c=e.noContentRenderer,u=e.style,d=e.verticalOverscanSize,p=e.width,m=this.state,f=m.isScrolling,h=m.scrollLeft,g=m.scrollTop;(this._lastRenderedCellCount!==n||this._lastRenderedCellLayoutManager!==a||this._calculateSizeAndPositionDataOnNextUpdate)&&(this._lastRenderedCellCount=n,this._lastRenderedCellLayoutManager=a,this._calculateSizeAndPositionDataOnNextUpdate=!1,a.calculateSizeAndPositionData());var E=a.getTotalSize(),b=E.height,v=E.width,y=Math.max(0,h-s),_=Math.max(0,g-d),S=Math.min(v,h+p+s),T=Math.min(b,g+i+d),A=i>0&&p>0?a.cellRenderers({height:T-_,isScrolling:f,width:S-y,x:y,y:_}):[],C={boxSizing:"border-box",direction:"ltr",height:t?"auto":i,position:"relative",WebkitOverflowScrolling:"touch",width:p,willChange:"transform"},w=b>i?this._scrollbarSize:0,N=v>p?this._scrollbarSize:0;return C.overflowX=v+w<=p?"hidden":"auto",C.overflowY=b+N<=i?"hidden":"auto",r.createElement("div",{ref:this._setScrollingContainerRef,"aria-label":this.props["aria-label"],className:Wl("ReactVirtualized__Collection",o),id:l,onScroll:this._onScroll,role:"grid",style:Bc({},C,{},u),tabIndex:0},n>0&&r.createElement("div",{className:"ReactVirtualized__Collection__innerScrollContainer",style:{height:b,maxHeight:b,maxWidth:v,overflow:"hidden",pointerEvents:f?"none":"",width:v}},A),0===n&&c())}},{key:"_enablePointerEventsAfterDelay",value:function(){var e=this;this._disablePointerEventsTimeoutId&&clearTimeout(this._disablePointerEventsTimeoutId),this._disablePointerEventsTimeoutId=setTimeout((function(){(0,e.props.isScrollingChange)(!1),e._disablePointerEventsTimeoutId=null,e.setState({isScrolling:!1})}),150)}},{key:"_invokeOnScrollMemoizer",value:function(e){var t=this,n=e.scrollLeft,r=e.scrollTop,a=e.totalHeight,o=e.totalWidth;this._onScrollMemoizer({callback:function(e){var n=e.scrollLeft,r=e.scrollTop,i=t.props,s=i.height;(0,i.onScroll)({clientHeight:s,clientWidth:i.width,scrollHeight:a,scrollLeft:n,scrollTop:r,scrollWidth:o})},indices:{scrollLeft:n,scrollTop:r}})}},{key:"_setScrollPosition",value:function(e){var t=e.scrollLeft,n=e.scrollTop,r={scrollPositionChangeReason:Fc};t>=0&&(r.scrollLeft=t),n>=0&&(r.scrollTop=n),(t>=0&&t!==this.state.scrollLeft||n>=0&&n!==this.state.scrollTop)&&this.setState(r)}}],[{key:"getDerivedStateFromProps",value:function(e,t){return 0!==e.cellCount||0===t.scrollLeft&&0===t.scrollTop?e.scrollLeft!==t.scrollLeft||e.scrollTop!==t.scrollTop?{scrollLeft:null!=e.scrollLeft?e.scrollLeft:t.scrollLeft,scrollTop:null!=e.scrollTop?e.scrollTop:t.scrollTop,scrollPositionChangeReason:Fc}:null:{scrollLeft:0,scrollTop:0,scrollPositionChangeReason:Fc}}}]),t}();Ul(Uc,"defaultProps",{"aria-label":"grid",horizontalOverscanSize:0,noContentRenderer:function(){return null},onScroll:function(){return null},onSectionRendered:function(){return null},scrollToAlignment:"auto",scrollToCell:-1,style:{},verticalOverscanSize:0}),Uc.propTypes={},jl(Uc);var zc=function(){function e(t){var n=t.height,r=t.width,a=t.x,o=t.y;xl(this,e),this.height=n,this.width=r,this.x=a,this.y=o,this._indexMap={},this._indices=[]}return Ll(e,[{key:"addCellIndex",value:function(e){var t=e.index;this._indexMap[t]||(this._indexMap[t]=!0,this._indices.push(t))}},{key:"getCellIndices",value:function(){return this._indices}},{key:"toString",value:function(){return"".concat(this.x,",").concat(this.y," ").concat(this.width,"x").concat(this.height)}}]),e}(),Hc=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:100;xl(this,e),this._sectionSize=t,this._cellMetadata=[],this._sections={}}return Ll(e,[{key:"getCellIndices",value:function(e){var t=e.height,n=e.width,r=e.x,a=e.y,o={};return this.getSections({height:t,width:n,x:r,y:a}).forEach((function(e){return e.getCellIndices().forEach((function(e){o[e]=e}))})),Object.keys(o).map((function(e){return o[e]}))}},{key:"getCellMetadata",value:function(e){var t=e.index;return this._cellMetadata[t]}},{key:"getSections",value:function(e){for(var t=e.height,n=e.width,r=e.x,a=e.y,o=Math.floor(r/this._sectionSize),i=Math.floor((r+n-1)/this._sectionSize),s=Math.floor(a/this._sectionSize),l=Math.floor((a+t-1)/this._sectionSize),c=[],u=o;u<=i;u++)for(var d=s;d<=l;d++){var p="".concat(u,".").concat(d);this._sections[p]||(this._sections[p]=new zc({height:this._sectionSize,width:this._sectionSize,x:u*this._sectionSize,y:d*this._sectionSize})),c.push(this._sections[p])}return c}},{key:"getTotalSectionCount",value:function(){return Object.keys(this._sections).length}},{key:"toString",value:function(){var e=this;return Object.keys(this._sections).map((function(t){return e._sections[t].toString()}))}},{key:"registerCell",value:function(e){var t=e.cellMetadatum,n=e.index;this._cellMetadata[n]=t,this.getSections(t).forEach((function(e){return e.addCellIndex({index:n})}))}}]),e}();function Gc(e){var t=e.align,n=void 0===t?"auto":t,r=e.cellOffset,a=e.cellSize,o=e.containerSize,i=e.currentOffset,s=r,l=s-o+a;switch(n){case"start":return s;case"end":return l;case"center":return s-(o-a)/2;default:return Math.max(l,Math.min(s,i))}}var jc=function(e){function t(e,n){var r;return xl(this,t),(r=Ml(this,Pl(t).call(this,e,n)))._cellMetadata=[],r._lastRenderedCellIndices=[],r._cellCache=[],r._isScrollingChange=r._isScrollingChange.bind(Dl(r)),r._setCollectionViewRef=r._setCollectionViewRef.bind(Dl(r)),r}return Fl(t,r.PureComponent),Ll(t,[{key:"forceUpdate",value:function(){void 0!==this._collectionView&&this._collectionView.forceUpdate()}},{key:"recomputeCellSizesAndPositions",value:function(){this._cellCache=[],this._collectionView.recomputeCellSizesAndPositions()}},{key:"render",value:function(){var e=Vl({},this.props);return r.createElement(Uc,Vl({cellLayoutManager:this,isScrollingChange:this._isScrollingChange,ref:this._setCollectionViewRef},e))}},{key:"calculateSizeAndPositionData",value:function(){var e=this.props,t=function(e){for(var t=e.cellCount,n=e.cellSizeAndPositionGetter,r=[],a=new Hc(e.sectionSize),o=0,i=0,s=0;s=0&&ne.length)&&(t=e.length);for(var n=0,r=new Array(t);nn.lastRenderedStopIndex||n.stopIndex1&&void 0!==arguments[1]?arguments[1]:0,n="function"==typeof e.recomputeGridSize?e.recomputeGridSize:e.recomputeRowHeights;n?n.call(e,t):e.forceUpdate()}(t._registeredChild,t._lastRenderedStartIndex)}))}))}},{key:"_onRowsRendered",value:function(e){var t=e.startIndex,n=e.stopIndex;this._lastRenderedStartIndex=t,this._lastRenderedStopIndex=n,this._doStuff(t,n)}},{key:"_doStuff",value:function(e,t){var n,r=this,a=this.props,o=a.isRowLoaded,i=a.minimumBatchSize,s=a.rowCount,l=a.threshold,c=function(e){for(var t=e.isRowLoaded,n=e.minimumBatchSize,r=e.rowCount,a=e.stopIndex,o=[],i=null,s=null,l=e.startIndex;l<=a;l++)t({index:l})?null!==s&&(o.push({startIndex:i,stopIndex:s}),i=s=null):(s=l,null===i&&(i=l));if(null!==s){for(var c=Math.min(Math.max(s,i+n-1),r-1),u=s+1;u<=c&&!t({index:u});u++)s=u;o.push({startIndex:i,stopIndex:s})}if(o.length)for(var d=o[0];d.stopIndex-d.startIndex+10;){var p=d.startIndex-1;if(t({index:p}))break;d.startIndex=p}return o}({isRowLoaded:o,minimumBatchSize:i,rowCount:s,startIndex:Math.max(0,e-l),stopIndex:Math.min(s-1,t+l)}),u=(n=[]).concat.apply(n,function(e){return function(e){if(Array.isArray(e))return Vc(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||Zc(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(c.map((function(e){return[e.startIndex,e.stopIndex]}))));this._loadMoreRowsMemoizer({callback:function(){r._loadUnloadedRanges(c)},indices:{squashedUnloadedRanges:u}})}},{key:"_registerChild",value:function(e){this._registeredChild=e}}]),t}();Ul(Wc,"defaultProps",{minimumBatchSize:10,rowCount:0,threshold:15}),Wc.propTypes={};var $c,qc,Yc=(qc=$c=function(e){function t(){var e,n;xl(this,t);for(var r=arguments.length,a=new Array(r),o=0;o0&&void 0!==arguments[0]?arguments[0]:{},t=e.columnIndex,n=void 0===t?0:t,r=e.rowIndex,a=void 0===r?0:r;this.Grid&&this.Grid.recomputeGridSize({rowIndex:a,columnIndex:n})}},{key:"recomputeRowHeights",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;this.Grid&&this.Grid.recomputeGridSize({rowIndex:e,columnIndex:0})}},{key:"scrollToPosition",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;this.Grid&&this.Grid.scrollToPosition({scrollTop:e})}},{key:"scrollToRow",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;this.Grid&&this.Grid.scrollToCell({columnIndex:0,rowIndex:e})}},{key:"render",value:function(){var e=this.props,t=e.className,n=e.noRowsRenderer,a=e.scrollToIndex,o=e.width,i=Wl("ReactVirtualized__List",t);return r.createElement(Tc,Vl({},this.props,{autoContainerWidth:!0,cellRenderer:this._cellRenderer,className:i,columnWidth:o,columnCount:1,noContentRenderer:n,onScroll:this._onScroll,onSectionRendered:this._onSectionRendered,ref:this._setRef,scrollToRow:a}))}}]),t}(),Ul($c,"propTypes",null),qc);Ul(Yc,"defaultProps",{autoHeight:!1,estimatedRowSize:30,onScroll:function(){},noRowsRenderer:function(){return null},onRowsRendered:function(){},overscanIndicesGetter:Ac,overscanRowCount:10,scrollToAlignment:"auto",scrollToIndex:-1,style:{}});var Kc=function(e,t,n,r,a){return"function"==typeof n?function(e,t,n,r,a){for(var o=n+1;t<=n;){var i=t+n>>>1;a(e[i],r)>=0?(o=i,n=i-1):t=i+1}return o}(e,void 0===r?0:0|r,void 0===a?e.length-1:0|a,t,n):function(e,t,n,r){for(var a=n+1;t<=n;){var o=t+n>>>1;e[o]>=r?(a=o,n=o-1):t=o+1}return a}(e,void 0===n?0:0|n,void 0===r?e.length-1:0|r,t)};function Xc(e,t,n,r,a){this.mid=e,this.left=t,this.right=n,this.leftPoints=r,this.rightPoints=a,this.count=(t?t.count:0)+(n?n.count:0)+r.length}var Qc=Xc.prototype;function Jc(e,t){e.mid=t.mid,e.left=t.left,e.right=t.right,e.leftPoints=t.leftPoints,e.rightPoints=t.rightPoints,e.count=t.count}function eu(e,t){var n=cu(t);e.mid=n.mid,e.left=n.left,e.right=n.right,e.leftPoints=n.leftPoints,e.rightPoints=n.rightPoints,e.count=n.count}function tu(e,t){var n=e.intervals([]);n.push(t),eu(e,n)}function nu(e,t){var n=e.intervals([]),r=n.indexOf(t);return r<0?0:(n.splice(r,1),eu(e,n),1)}function ru(e,t,n){for(var r=0;r=0&&e[r][1]>=t;--r){var a=n(e[r]);if(a)return a}}function ou(e,t){for(var n=0;n>1],a=[],o=[],i=[];for(n=0;n3*(t+1)?tu(this,e):this.left.insert(e):this.left=cu([e]);else if(e[0]>this.mid)this.right?4*(this.right.count+1)>3*(t+1)?tu(this,e):this.right.insert(e):this.right=cu([e]);else{var n=Kc(this.leftPoints,e,su),r=Kc(this.rightPoints,e,lu);this.leftPoints.splice(n,0,e),this.rightPoints.splice(r,0,e)}},Qc.remove=function(e){var t=this.count-this.leftPoints;if(e[1]3*(t-1)?nu(this,e):2===(o=this.left.remove(e))?(this.left=null,this.count-=1,1):(1===o&&(this.count-=1),o):0;if(e[0]>this.mid)return this.right?4*(this.left?this.left.count:0)>3*(t-1)?nu(this,e):2===(o=this.right.remove(e))?(this.right=null,this.count-=1,1):(1===o&&(this.count-=1),o):0;if(1===this.count)return this.leftPoints[0]===e?2:0;if(1===this.leftPoints.length&&this.leftPoints[0]===e){if(this.left&&this.right){for(var n=this,r=this.left;r.right;)n=r,r=r.right;if(n===this)r.right=this.right;else{var a=this.left,o=this.right;n.count-=r.count,n.right=r.left,r.left=a,r.right=o}Jc(this,r),this.count=(this.left?this.left.count:0)+(this.right?this.right.count:0)+this.leftPoints.length}else this.left?Jc(this,this.left):Jc(this,this.right);return 1}for(a=Kc(this.leftPoints,e,su);athis.mid?this.right&&(n=this.right.queryPoint(e,t))?n:au(this.rightPoints,e,t):ou(this.leftPoints,t);var n},Qc.queryInterval=function(e,t,n){var r;return ethis.mid&&this.right&&(r=this.right.queryInterval(e,t,n))?r:tthis.mid?au(this.rightPoints,e,n):ou(this.leftPoints,n)};var du=uu.prototype;du.insert=function(e){this.root?this.root.insert(e):this.root=new Xc(e[0],null,null,[e],[e])},du.remove=function(e){if(this.root){var t=this.root.remove(e);return 2===t&&(this.root=null),0!==t}return!1},du.queryPoint=function(e,t){if(this.root)return this.root.queryPoint(e,t)},du.queryInterval=function(e,t,n){if(e<=t&&this.root)return this.root.queryInterval(e,t,n)},Object.defineProperty(du,"count",{get:function(){return this.root?this.root.count:0}}),Object.defineProperty(du,"intervals",{get:function(){return this.root?this.root.intervals([]):[]}});var pu,mu,fu=function(){function e(){xl(this,e),Ul(this,"_columnSizeMap",{}),Ul(this,"_intervalTree",new uu(null)),Ul(this,"_leftMap",{})}return Ll(e,[{key:"estimateTotalHeight",value:function(e,t,n){var r=e-this.count;return this.tallestColumnSize+Math.ceil(r/t)*n}},{key:"range",value:function(e,t,n){var r=this;this._intervalTree.queryInterval(e,e+t,(function(e){var t=function(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,o,i,s=[],l=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(e){c=!0,a=e}finally{try{if(!l&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw a}}return s}}(e,t)||Zc(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(e,3),a=t[0];t[1];var o=t[2];return n(o,r._leftMap[o],a)}))}},{key:"setPosition",value:function(e,t,n,r){this._intervalTree.insert([n,n+r,e]),this._leftMap[e]=t;var a=this._columnSizeMap,o=a[t];a[t]=void 0===o?n+r:Math.max(o,n+r)}},{key:"count",get:function(){return this._intervalTree.count}},{key:"shortestColumnSize",get:function(){var e=this._columnSizeMap,t=0;for(var n in e){var r=e[n];t=0===t?r:Math.min(t,r)}return t}},{key:"tallestColumnSize",get:function(){var e=this._columnSizeMap,t=0;for(var n in e){var r=e[n];t=Math.max(t,r)}return t}}]),e}();function hu(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function gu(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{};xl(this,e),Ul(this,"_cellMeasurerCache",void 0),Ul(this,"_columnIndexOffset",void 0),Ul(this,"_rowIndexOffset",void 0),Ul(this,"columnWidth",(function(e){var n=e.index;t._cellMeasurerCache.columnWidth({index:n+t._columnIndexOffset})})),Ul(this,"rowHeight",(function(e){var n=e.index;t._cellMeasurerCache.rowHeight({index:n+t._rowIndexOffset})}));var r=n.cellMeasurerCache,a=n.columnIndexOffset,o=void 0===a?0:a,i=n.rowIndexOffset,s=void 0===i?0:i;this._cellMeasurerCache=r,this._columnIndexOffset=o,this._rowIndexOffset=s}return Ll(e,[{key:"clear",value:function(e,t){this._cellMeasurerCache.clear(e+this._rowIndexOffset,t+this._columnIndexOffset)}},{key:"clearAll",value:function(){this._cellMeasurerCache.clearAll()}},{key:"hasFixedHeight",value:function(){return this._cellMeasurerCache.hasFixedHeight()}},{key:"hasFixedWidth",value:function(){return this._cellMeasurerCache.hasFixedWidth()}},{key:"getHeight",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return this._cellMeasurerCache.getHeight(e+this._rowIndexOffset,t+this._columnIndexOffset)}},{key:"getWidth",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return this._cellMeasurerCache.getWidth(e+this._rowIndexOffset,t+this._columnIndexOffset)}},{key:"has",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return this._cellMeasurerCache.has(e+this._rowIndexOffset,t+this._columnIndexOffset)}},{key:"set",value:function(e,t,n,r){this._cellMeasurerCache.set(e+this._rowIndexOffset,t+this._columnIndexOffset,n,r)}},{key:"defaultHeight",get:function(){return this._cellMeasurerCache.defaultHeight}},{key:"defaultWidth",get:function(){return this._cellMeasurerCache.defaultWidth}}]),e}();function yu(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function _u(e){for(var t=1;t0?new vu({cellMeasurerCache:o,columnIndexOffset:0,rowIndexOffset:s}):o,a._deferredMeasurementCacheBottomRightGrid=i>0||s>0?new vu({cellMeasurerCache:o,columnIndexOffset:i,rowIndexOffset:s}):o,a._deferredMeasurementCacheTopRightGrid=i>0?new vu({cellMeasurerCache:o,columnIndexOffset:i,rowIndexOffset:0}):o),a}return Fl(t,r.PureComponent),Ll(t,[{key:"forceUpdateGrids",value:function(){this._bottomLeftGrid&&this._bottomLeftGrid.forceUpdate(),this._bottomRightGrid&&this._bottomRightGrid.forceUpdate(),this._topLeftGrid&&this._topLeftGrid.forceUpdate(),this._topRightGrid&&this._topRightGrid.forceUpdate()}},{key:"invalidateCellSizeAfterRender",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.columnIndex,n=void 0===t?0:t,r=e.rowIndex,a=void 0===r?0:r;this._deferredInvalidateColumnIndex="number"==typeof this._deferredInvalidateColumnIndex?Math.min(this._deferredInvalidateColumnIndex,n):n,this._deferredInvalidateRowIndex="number"==typeof this._deferredInvalidateRowIndex?Math.min(this._deferredInvalidateRowIndex,a):a}},{key:"measureAllCells",value:function(){this._bottomLeftGrid&&this._bottomLeftGrid.measureAllCells(),this._bottomRightGrid&&this._bottomRightGrid.measureAllCells(),this._topLeftGrid&&this._topLeftGrid.measureAllCells(),this._topRightGrid&&this._topRightGrid.measureAllCells()}},{key:"recomputeGridSize",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.columnIndex,n=void 0===t?0:t,r=e.rowIndex,a=void 0===r?0:r,o=this.props,i=o.fixedColumnCount,s=o.fixedRowCount,l=Math.max(0,n-i),c=Math.max(0,a-s);this._bottomLeftGrid&&this._bottomLeftGrid.recomputeGridSize({columnIndex:n,rowIndex:c}),this._bottomRightGrid&&this._bottomRightGrid.recomputeGridSize({columnIndex:l,rowIndex:c}),this._topLeftGrid&&this._topLeftGrid.recomputeGridSize({columnIndex:n,rowIndex:a}),this._topRightGrid&&this._topRightGrid.recomputeGridSize({columnIndex:l,rowIndex:a}),this._leftGridWidth=null,this._topGridHeight=null,this._maybeCalculateCachedStyles(!0)}},{key:"componentDidMount",value:function(){var e=this.props,t=e.scrollLeft,n=e.scrollTop;if(t>0||n>0){var r={};t>0&&(r.scrollLeft=t),n>0&&(r.scrollTop=n),this.setState(r)}this._handleInvalidatedGridSize()}},{key:"componentDidUpdate",value:function(){this._handleInvalidatedGridSize()}},{key:"render",value:function(){var e=this.props,t=e.onScroll,n=e.onSectionRendered;e.onScrollbarPresenceChange,e.scrollLeft;var a=e.scrollToColumn;e.scrollTop;var o=e.scrollToRow,i=Yl(e,["onScroll","onSectionRendered","onScrollbarPresenceChange","scrollLeft","scrollToColumn","scrollTop","scrollToRow"]);if(this._prepareForRender(),0===this.props.width||0===this.props.height)return null;var s=this.state,l=s.scrollLeft,c=s.scrollTop;return r.createElement("div",{style:this._containerOuterStyle},r.createElement("div",{style:this._containerTopStyle},this._renderTopLeftGrid(i),this._renderTopRightGrid(_u({},i,{onScroll:t,scrollLeft:l}))),r.createElement("div",{style:this._containerBottomStyle},this._renderBottomLeftGrid(_u({},i,{onScroll:t,scrollTop:c})),this._renderBottomRightGrid(_u({},i,{onScroll:t,onSectionRendered:n,scrollLeft:l,scrollToColumn:a,scrollToRow:o,scrollTop:c}))))}},{key:"_getBottomGridHeight",value:function(e){return e.height-this._getTopGridHeight(e)}},{key:"_getLeftGridWidth",value:function(e){var t=e.fixedColumnCount,n=e.columnWidth;if(null==this._leftGridWidth)if("function"==typeof n){for(var r=0,a=0;a=0?e.scrollLeft:t.scrollLeft,scrollTop:null!=e.scrollTop&&e.scrollTop>=0?e.scrollTop:t.scrollTop}:null}}]),t}();Ul(Su,"defaultProps",{classNameBottomLeftGrid:"",classNameBottomRightGrid:"",classNameTopLeftGrid:"",classNameTopRightGrid:"",enableFixedColumnScroll:!1,enableFixedRowScroll:!1,fixedColumnCount:0,fixedRowCount:0,scrollToColumn:-1,scrollToRow:-1,style:{},styleBottomLeftGrid:{},styleBottomRightGrid:{},styleTopLeftGrid:{},styleTopRightGrid:{},hideTopRightGridScrollbar:!1,hideBottomLeftGridScrollbar:!1}),Su.propTypes={},jl(Su);function Tu(e){var t=e.className,n=e.columns,a=e.style;return r.createElement("div",{className:t,role:"row",style:a},n)}Tu.propTypes=null;var Au={ASC:"ASC",DESC:"DESC"};function Cu(e){var t=e.sortDirection,n=Wl("ReactVirtualized__Table__sortableHeaderIcon",{"ReactVirtualized__Table__sortableHeaderIcon--ASC":t===Au.ASC,"ReactVirtualized__Table__sortableHeaderIcon--DESC":t===Au.DESC});return r.createElement("svg",{className:n,width:18,height:18,viewBox:"0 0 24 24"},t===Au.ASC?r.createElement("path",{d:"M7 14l5-5 5 5z"}):r.createElement("path",{d:"M7 10l5 5 5-5z"}),r.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}))}function wu(e){var t=e.dataKey,n=e.label,a=e.sortBy,o=e.sortDirection,i=a===t,s=[r.createElement("span",{className:"ReactVirtualized__Table__headerTruncatedText",key:"label",title:"string"==typeof n?n:null},n)];return i&&s.push(r.createElement(Cu,{key:"SortIndicator",sortDirection:o})),s}function Nu(e){var t=e.className,n=e.columns,a=e.index,o=e.key,i=e.onRowClick,s=e.onRowDoubleClick,l=e.onRowMouseOut,c=e.onRowMouseOver,u=e.onRowRightClick,d=e.rowData,p=e.style,m={"aria-rowindex":a+1};return(i||s||l||c||u)&&(m["aria-label"]="row",m.tabIndex=0,i&&(m.onClick=function(e){return i({event:e,index:a,rowData:d})}),s&&(m.onDoubleClick=function(e){return s({event:e,index:a,rowData:d})}),l&&(m.onMouseOut=function(e){return l({event:e,index:a,rowData:d})}),c&&(m.onMouseOver=function(e){return c({event:e,index:a,rowData:d})}),u&&(m.onContextMenu=function(e){return u({event:e,index:a,rowData:d})})),r.createElement("div",Vl({},m,{className:t,key:o,role:"row",style:p}),n)}Cu.propTypes={},wu.propTypes=null,Nu.propTypes=null;var Iu=function(e){function t(){return xl(this,t),Ml(this,Pl(t).apply(this,arguments))}return Fl(t,r.Component),t}();function xu(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ru(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{},t=e.columnIndex,n=void 0===t?0:t,r=e.rowIndex,a=void 0===r?0:r;this.Grid&&this.Grid.recomputeGridSize({rowIndex:a,columnIndex:n})}},{key:"recomputeRowHeights",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;this.Grid&&this.Grid.recomputeGridSize({rowIndex:e})}},{key:"scrollToPosition",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;this.Grid&&this.Grid.scrollToPosition({scrollTop:e})}},{key:"scrollToRow",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;this.Grid&&this.Grid.scrollToCell({columnIndex:0,rowIndex:e})}},{key:"getScrollbarWidth",value:function(){if(this.Grid){var e=(0,o.findDOMNode)(this.Grid),t=e.clientWidth||0;return(e.offsetWidth||0)-t}return 0}},{key:"componentDidMount",value:function(){this._setScrollbarWidth()}},{key:"componentDidUpdate",value:function(){this._setScrollbarWidth()}},{key:"render",value:function(){var e=this,t=this.props,n=t.children,a=t.className,o=t.disableHeader,i=t.gridClassName,s=t.gridStyle,l=t.headerHeight,c=t.headerRowRenderer,u=t.height,d=t.id,p=t.noRowsRenderer,m=t.rowClassName,f=t.rowStyle,h=t.scrollToIndex,g=t.style,E=t.width,b=this.state.scrollbarWidth,v=o?u:u-l,y="function"==typeof m?m({index:-1}):m,_="function"==typeof f?f({index:-1}):f;return this._cachedColumnStyles=[],r.Children.toArray(n).forEach((function(t,n){var r=e._getFlexStyleForColumn(t,t.props.style);e._cachedColumnStyles[n]=Ru({overflow:"hidden"},r)})),r.createElement("div",{"aria-label":this.props["aria-label"],"aria-labelledby":this.props["aria-labelledby"],"aria-colcount":r.Children.toArray(n).length,"aria-rowcount":this.props.rowCount,className:Wl("ReactVirtualized__Table",a),id:d,role:"grid",style:g},!o&&c({className:Wl("ReactVirtualized__Table__headerRow",y),columns:this._getHeaderColumns(),style:Ru({height:l,overflow:"hidden",paddingRight:b,width:E},_)}),r.createElement(Tc,Vl({},this.props,{"aria-readonly":null,autoContainerWidth:!0,className:Wl("ReactVirtualized__Table__Grid",i),cellRenderer:this._createRow,columnWidth:E,columnCount:1,height:v,id:void 0,noContentRenderer:p,onScroll:this._onScroll,onSectionRendered:this._onSectionRendered,ref:this._setRef,role:"rowgroup",scrollbarWidth:b,scrollToRow:h,style:Ru({},s,{overflowX:"hidden"})})))}},{key:"_createColumn",value:function(e){var t=e.column,n=e.columnIndex,a=e.isScrolling,o=e.parent,i=e.rowData,s=e.rowIndex,l=this.props.onColumnClick,c=t.props,u=c.cellDataGetter,d=c.cellRenderer,p=c.className,m=c.columnData,f=c.dataKey,h=c.id,g=d({cellData:u({columnData:m,dataKey:f,rowData:i}),columnData:m,columnIndex:n,dataKey:f,isScrolling:a,parent:o,rowData:i,rowIndex:s}),E=this._cachedColumnStyles[n],b="string"==typeof g?g:null;return r.createElement("div",{"aria-colindex":n+1,"aria-describedby":h,className:Wl("ReactVirtualized__Table__rowColumn",p),key:"Row"+s+"-Col"+n,onClick:function(e){l&&l({columnData:m,dataKey:f,event:e})},role:"gridcell",style:E,title:b},g)}},{key:"_createHeader",value:function(e){var t,n,a,o,i,s=e.column,l=e.index,c=this.props,u=c.headerClassName,d=c.headerStyle,p=c.onHeaderClick,m=c.sort,f=c.sortBy,h=c.sortDirection,g=s.props,E=g.columnData,b=g.dataKey,v=g.defaultSortDirection,y=g.disableSort,_=g.headerRenderer,S=g.id,T=g.label,A=!y&&m,C=Wl("ReactVirtualized__Table__headerColumn",u,s.props.headerClassName,{ReactVirtualized__Table__sortableHeaderColumn:A}),w=this._getFlexStyleForColumn(s,Ru({},d,{},s.props.headerStyle)),N=_({columnData:E,dataKey:b,disableSort:y,label:T,sortBy:f,sortDirection:h});if(A||p){var I=f!==b?v:h===Au.DESC?Au.ASC:Au.DESC,x=function(e){A&&m({defaultSortDirection:v,event:e,sortBy:b,sortDirection:I}),p&&p({columnData:E,dataKey:b,event:e})};i=s.props["aria-label"]||T||b,o="none",a=0,t=x,n=function(e){"Enter"!==e.key&&" "!==e.key||x(e)}}return f===b&&(o=h===Au.ASC?"ascending":"descending"),r.createElement("div",{"aria-label":i,"aria-sort":o,className:C,id:S,key:"Header-Col"+l,onClick:t,onKeyDown:n,role:"columnheader",style:w,tabIndex:a},N)}},{key:"_createRow",value:function(e){var t=this,n=e.rowIndex,a=e.isScrolling,o=e.key,i=e.parent,s=e.style,l=this.props,c=l.children,u=l.onRowClick,d=l.onRowDoubleClick,p=l.onRowRightClick,m=l.onRowMouseOver,f=l.onRowMouseOut,h=l.rowClassName,g=l.rowGetter,E=l.rowRenderer,b=l.rowStyle,v=this.state.scrollbarWidth,y="function"==typeof h?h({index:n}):h,_="function"==typeof b?b({index:n}):b,S=g({index:n}),T=r.Children.toArray(c).map((function(e,r){return t._createColumn({column:e,columnIndex:r,isScrolling:a,parent:i,rowData:S,rowIndex:n,scrollbarWidth:v})})),A=Wl("ReactVirtualized__Table__row",y),C=Ru({},s,{height:this._getRowHeight(n),overflow:"hidden",paddingRight:v},_);return E({className:A,columns:T,index:n,isScrolling:a,key:o,onRowClick:u,onRowDoubleClick:d,onRowRightClick:p,onRowMouseOver:m,onRowMouseOut:f,rowData:S,style:C})}},{key:"_getFlexStyleForColumn",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n="".concat(e.props.flexGrow," ").concat(e.props.flexShrink," ").concat(e.props.width,"px"),r=Ru({},t,{flex:n,msFlex:n,WebkitFlex:n});return e.props.maxWidth&&(r.maxWidth=e.props.maxWidth),e.props.minWidth&&(r.minWidth=e.props.minWidth),r}},{key:"_getHeaderColumns",value:function(){var e=this,t=this.props,n=t.children;return(t.disableHeader?[]:r.Children.toArray(n)).map((function(t,n){return e._createHeader({column:t,index:n})}))}},{key:"_getRowHeight",value:function(e){var t=this.props.rowHeight;return"function"==typeof t?t({index:e}):t}},{key:"_onScroll",value:function(e){var t=e.clientHeight,n=e.scrollHeight,r=e.scrollTop;(0,this.props.onScroll)({clientHeight:t,scrollHeight:n,scrollTop:r})}},{key:"_onSectionRendered",value:function(e){var t=e.rowOverscanStartIndex,n=e.rowOverscanStopIndex,r=e.rowStartIndex,a=e.rowStopIndex;(0,this.props.onRowsRendered)({overscanStartIndex:t,overscanStopIndex:n,startIndex:r,stopIndex:a})}},{key:"_setRef",value:function(e){this.Grid=e}},{key:"_setScrollbarWidth",value:function(){var e=this.getScrollbarWidth();this.setState({scrollbarWidth:e})}}]),t}();Ul(ku,"defaultProps",{disableHeader:!1,estimatedRowSize:30,headerHeight:0,headerStyle:{},noRowsRenderer:function(){return null},onRowsRendered:function(){return null},onScroll:function(){return null},overscanIndicesGetter:Ac,overscanRowCount:10,rowRenderer:Nu,headerRowRenderer:Tu,rowStyle:{},scrollToAlignment:"auto",scrollToIndex:-1,style:{}}),ku.propTypes={};var Ou=[],Lu=null,Du=null;function Mu(){Du&&(Du=null,document.body&&null!=Lu&&(document.body.style.pointerEvents=Lu),Lu=null)}function Pu(){Mu(),Ou.forEach((function(e){return e.__resetIsScrolling()}))}function Bu(e){e.currentTarget===window&&null==Lu&&document.body&&(Lu=document.body.style.pointerEvents,document.body.style.pointerEvents="none"),function(){Du&&gc(Du);var e=0;Ou.forEach((function(t){e=Math.max(e,t.props.scrollingResetTimeInterval)})),Du=Ec(Pu,e)}(),Ou.forEach((function(t){t.props.scrollElement===e.currentTarget&&t.__handleWindowScrollEvent()}))}function Fu(e,t){Ou.some((function(e){return e.props.scrollElement===t}))||t.addEventListener("scroll",Bu),Ou.push(e)}function Uu(e,t){(Ou=Ou.filter((function(t){return t!==e}))).length||(t.removeEventListener("scroll",Bu),Du&&(gc(Du),Mu()))}var zu,Hu,Gu=function(e){return e===window},ju=function(e){return e.getBoundingClientRect()};function Vu(e,t){if(e){if(Gu(e)){var n=window,r=n.innerHeight,a=n.innerWidth;return{height:"number"==typeof r?r:0,width:"number"==typeof a?a:0}}return ju(e)}return{height:t.serverHeight,width:t.serverWidth}}function Zu(e){return Gu(e)&&document.documentElement?{top:"scrollY"in window?window.scrollY:document.documentElement.scrollTop,left:"scrollX"in window?window.scrollX:document.documentElement.scrollLeft}:{top:e.scrollTop,left:e.scrollLeft}}function Wu(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}var $u=function(){return"undefined"!=typeof window?window:void 0},qu=(Hu=zu=function(e){function t(){var e,n;xl(this,t);for(var r=arguments.length,a=new Array(r),o=0;o0&&void 0!==arguments[0]?arguments[0]:this.props.scrollElement,t=this.props.onResize,n=this.state,r=n.height,a=n.width,i=this._child||o.findDOMNode(this);if(i instanceof Element&&e){var s=function(e,t){if(Gu(t)&&document.documentElement){var n=document.documentElement,r=ju(e),a=ju(n);return{top:r.top-a.top,left:r.left-a.left}}var o=Zu(t),i=ju(e),s=ju(t);return{top:i.top+o.top-s.top,left:i.left+o.left-s.left}}(i,e);this._positionFromTop=s.top,this._positionFromLeft=s.left}var l=Vu(e,this.props);r===l.height&&a===l.width||(this.setState({height:l.height,width:l.width}),t({height:l.height,width:l.width}))}},{key:"componentDidMount",value:function(){var e=this.props.scrollElement;this._detectElementResize=xc(),this.updatePosition(e),e&&(Fu(this,e),this._registerResizeListener(e)),this._isMounted=!0}},{key:"componentDidUpdate",value:function(e,t){var n=this.props.scrollElement,r=e.scrollElement;r!==n&&null!=r&&null!=n&&(this.updatePosition(n),Uu(this,r),Fu(this,n),this._unregisterResizeListener(r),this._registerResizeListener(n))}},{key:"componentWillUnmount",value:function(){var e=this.props.scrollElement;e&&(Uu(this,e),this._unregisterResizeListener(e)),this._isMounted=!1}},{key:"render",value:function(){var e=this.props.children,t=this.state,n=t.isScrolling,r=t.scrollTop,a=t.scrollLeft,o=t.height,i=t.width;return e({onChildScroll:this._onChildScroll,registerChild:this._registerChild,height:o,isScrolling:n,scrollLeft:a,scrollTop:r,width:i})}}]),t}(),Ul(zu,"propTypes",null),Hu);Ul(qu,"defaultProps",{onResize:function(){},onScroll:function(){},scrollingResetTimeInterval:150,scrollElement:$u(),serverHeight:0,serverWidth:0});var Yu=ct,Ku=Ke,Xu=ut,Qu=qe((function(e){return"string"==typeof e||!Ku(e)&&Xu(e)&&"[object String]"==Yu(e)})),Ju=function(e,t){return function(n){return e(t(n))}}(Object.getPrototypeOf,Object),ed=ct,td=Ju,nd=ut,rd=Function.prototype,ad=Object.prototype,od=rd.toString,id=ad.hasOwnProperty,sd=od.call(Object),ld=qe((function(e){if(!nd(e)||"[object Object]"!=ed(e))return!1;var t=td(e);if(null===t)return!0;var n=id.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&od.call(n)==sd})),cd=["view","edit","delete","description","share","cloud","console","download","disable","format","preview"],ud=function(e){var t,n=e.type,a=e.onClick,o=e.valueToSend,i=e.idField,s=e.sendOnlyId,l=void 0!==s&&s,c=e.disabled,u=void 0!==c&&c,d=e.tooltip,p=l?o[i]:o,m=(t=n,cd.includes(t)?function(e){switch(e){case"view":case"preview":return r.createElement(Ao,null);case"edit":return r.createElement(Ja,null);case"delete":return r.createElement(Ci,null);case"description":return r.createElement(bi,null);case"share":return r.createElement(Qa,null);case"cloud":return r.createElement(el,null);case"console":return r.createElement(cs,null);case"download":return r.createElement(Ni,null);case"disable":return r.createElement(tl,null);case"format":return r.createElement(nl,null)}return null}(n):n),f=r.createElement(Il,{type:"button","aria-label":"string"==typeof n?n:"",size:"30px",sx:{margin:"0 8px"},disabled:u,onClick:a?function(e){e.stopPropagation(),u?e.preventDefault():a(p)}:function(){return null}},m);return d&&""!==d&&(f=r.createElement(Ga,{tooltip:d},f)),a?f:null},dd=a.Ay.div((function(e){var t=e.theme,n=e.sx,r=e.withBorders,a=e.customBorderPadding,o=e.useBackground,i={};return r&&(i={border:"".concat(Wn(t,"borderColor","#eaeaea")," 1px solid"),borderRadius:2,padding:a||15}),je(je({backgroundColor:o?Wn(t,"boxBackground","#FBFAFA"):"transparent"},i),n)})),pd=function(e){var t=e.sx,n=e.children,a=e.customBorderPadding,o=Ve(e,["sx","children","customBorderPadding"]);return r.createElement(dd,je({},o,{sx:t,customBorderPadding:a}),n)},md=Je,fd=/\s/,hd=function(e){for(var t=e.length;t--&&fd.test(e.charAt(t)););return t},gd=/^\s+/,Ed=bt,bd=mt,vd=/^[-+]0x[0-9a-f]+$/i,yd=/^0b[01]+$/i,_d=/^0o[0-7]+$/i,Sd=parseInt,Td=bt,Ad=function(){return md.Date.now()},Cd=function(e){if("number"==typeof e)return e;if(bd(e))return NaN;if(Ed(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=Ed(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=function(e){return e?e.slice(0,hd(e)+1).replace(gd,""):e}(e);var n=yd.test(e);return n||_d.test(e)?Sd(e.slice(2),n?2:8):vd.test(e)?NaN:+e},wd=Math.max,Nd=Math.min,Id=qe((function(e,t,n){var r,a,o,i,s,l,c=0,u=!1,d=!1,p=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function m(t){var n=r,o=a;return r=a=void 0,c=t,i=e.apply(o,n)}function f(e){var n=e-l;return void 0===l||n>=t||n<0||d&&e-c>=o}function h(){var e=Ad();if(f(e))return g(e);s=setTimeout(h,function(e){var n=t-(e-l);return d?Nd(n,o-(e-c)):n}(e))}function g(e){return s=void 0,p&&r?m(e):(r=a=void 0,i)}function E(){var e=Ad(),n=f(e);if(r=arguments,a=this,l=e,n){if(void 0===s)return function(e){return c=e,s=setTimeout(h,t),u?m(e):i}(l);if(d)return clearTimeout(s),s=setTimeout(h,t),m(l)}return void 0===s&&(s=setTimeout(h,t)),i}return t=Cd(t)||0,Td(n)&&(u=!!n.leading,o=(d="maxWait"in n)?wd(Cd(n.maxWait)||0,t):o,p="trailing"in n?!!n.trailing:p),E.cancel=function(){void 0!==s&&clearTimeout(s),c=0,r=l=a=s=void 0},E.flush=function(){return void 0===s?i:g(Ad())},E})),xd=a.Ay.div((function(e){return{position:"fixed",top:0,left:0,width:"100vw",height:"100vh",backgroundColor:"transparent",zIndex:5e3,overscrollBehavior:"contain"}})),Rd=function(e){var t=e.children,n=Ve(e,["children"]);return r.createElement(xd,je({},n),t)},kd=a.Ay.div((function(e){var t=e.theme,n=e.sx;return je({position:"absolute",display:"flex",flexDirection:"column",backgroundColor:Wn(t,"dropdownSelector.backgroundColor",l),border:"1px solid ".concat(Wn(t,"borderColor",d)),padding:"10px 10px",minWidth:150,borderRadius:4,boxShadow:"rgba(0, 0, 0, 0.2) 0px 11px 15px -7px, rgba(0, 0, 0, 0.14) 0px 24px 38px 3px, rgba(0, 0, 0, 0.12) 0px 9px 46px 8px","& .columnsSelectorTitle":{fontWeight:"bold",padding:"0 0 5px",borderBottom:"1px solid ".concat(Wn(t,"borderColor",d)),marginBottom:5,color:Wn(t,"fontColor",c)},"& .columnsSelectorContainer":{display:"flex",flexDirection:"column",gap:5,maxHeight:250,overflowY:"auto"}},n)})),Od=function(e){if(!e)return{top:0,right:0};var t=e.getBoundingClientRect(),n=document.documentElement.offsetWidth;return{top:t.top+t.height,right:n-t.right}},Ld=function(e){var t=e.columns,n=e.selectedOptionIDs,a=e.onSelect,i=e.closeTriggerAction,s=e.open,l=e.anchorEl,c=void 0===l?null:l,u=(0,r.useState)(null),d=u[0],p=u[1];return(0,r.useEffect)((function(){p(s?Od(c):null)}),[s]),(0,r.useEffect)((function(){var e=Id((function(e){e&&e.getBoundingClientRect()&&p(Od(e))}),300);window.addEventListener("resize",(function(){i()})),window.addEventListener("scroll",(function(){e(c)}))})),s&&d?(c||console.warn("AnchorEl not set. Element will be rendered on the top of the page"),(0,o.createPortal)(r.createElement(Rd,{onClick:i},r.createElement(kd,{sx:d,onClick:function(e){e.preventDefault(),e.stopPropagation()}},r.createElement(pd,{className:"columnsSelectorTitle"},"Shown Columns"),r.createElement(pd,{className:"columnsSelectorContainer"},t.map((function(e){return r.createElement(wl,{key:"tableColumns-".concat(e.label),label:e.label,checked:n.findIndex((function(t){return t===e.elementKey}))>=0,onChange:function(){a(e.elementKey||"")},id:"chbox-".concat(e.label),name:"chbox-".concat(e.label),value:e.label})}))))),document.body)):null},Dd=a.Ay.div((function(e){var t=e.theme,n=e.customPaperHeight,r=e.disabled;e.noBackground;var a=e.sx,o=e.rowHeight;return je({display:"flex",overflow:"auto",flexDirection:"column",padding:"0 16px 8px",boxShadow:"none",border:"".concat(Wn(t,r?"dataTable.disabledBorder":"dataTable.border","#E2E2E2")," 1px solid"),borderRadius:3,minHeight:200,overflowY:"scroll",position:"relative",height:n||"calc(100vh - 205px)",backgroundColor:r?Wn(t,"dataTable.disabledBG","transparent"):"transparent","&.noBackground":{backgroundColor:"transparent",border:0},"& .loadingBox":{padding:"100px 0"},"& .overlayColumnSelection":{position:"absolute",right:0,top:0,"& .popoverContent":{maxHeight:250,overflowY:"auto",padding:"0 10px 10px","& .shownColumnsLabel":{color:Wn(t,"mainGrey","#000"),fontSize:12,padding:10,borderBottom:"".concat(Wn(t,"dataTable.border","#E2E2E2")," 1px solid"),width:"100%"}}},"&::-webkit-scrollbar":{width:0,height:3},"& .rowLine":{borderBottom:"".concat(Wn(t,"dataTable.border","#E2E2E2")," 1px solid"),height:o,fontSize:14,transitionDuration:"0.3s","&:focus":{outline:"initial"},"&:hover:not(.ReactVirtualized__Table__headerRow)":{userSelect:"none",backgroundColor:Wn(t,"dataTable.hoverColor","#ececec"),fontWeight:600,"&.canClick":{cursor:"pointer"},"&.canSelectText":{userSelect:"text"}},"& .selected":{fontWeight:600},"&:not(.deleted) .selected":{color:Wn(t,"dataTable.selected","#081C42")},"&.deleted .selected":{color:Wn(t,"dataTable.selectedDisabled","#C51B3F")}},"& .headerItem":{userSelect:"none",fontWeight:700,fontSize:14,fontStyle:"initial",display:"flex",alignItems:"center",outline:"none"},"& .ReactVirtualized__Table__row":{width:"100% !important",display:"flex",flexDirection:"row",alignItems:"center"},"& .ReactVirtualized__Table__headerRow":{display:"flex",flexDirection:"row",alignItems:"center",fontWeight:700,fontSize:14,borderColor:Wn(t,"dataTable.border","#39393980"),textTransform:"initial",transitionDuration:"0s"},"& .ReactVirtualized__Table__headerTruncatedText":{display:"inline-block",maxWidth:"100%",whiteSpace:"nowrap",textOverflow:"ellipsis",overflow:"hidden"},"& .ReactVirtualized__Table__headerColumn":{marginRight:10,minWidth:0,"&:first-of-type":{marginLeft:10},"& svg":{width:12,height:12,marginRight:5,alignSelf:"flex-end"}},"& .ReactVirtualized__Table__rowColumn":{marginRight:10,minWidth:0,textOverflow:"ellipsis",whiteSpace:"nowrap","&:first-of-type":{marginLeft:10}},"& .ReactVirtualized__Table__sortableHeaderColumn":{cursor:"pointer"},"& .ReactVirtualized__Table__sortableHeaderIconContainer":{display:"flex",alignItems:"center"},"& .ReactVirtualized__Table__sortableHeaderIcon":{flex:"0 0 24px",height:"1em",width:"1em",fill:"currentColor"},"& .optionsAlignment":{display:"flex",gap:5,"& .min-icon":{width:16,height:16}},"& .text-center":{textAlign:"center"},"& .text-right":{textAlign:"right"},"& .progress-enabled":{display:"inline-flex",position:"relative",alignItems:"center",justifyContent:"center",width:30,height:30}},a)})),Md={deleted:{color:"#00000080",backgroundColor:"#f1f0f040","&.selected":{color:"#b2b2b270"}}},Pd=function(e){var t=e.itemActions,n=e.columns,a=e.onSelect,o=e.records,i=e.isLoading,s=e.loadingMessage,l=void 0===s?r.createElement("h3",null,"Loading..."):s,c=e.entityName,u=e.selectedItems,d=e.idField,p=e.customEmptyMessage,m=void 0===p?"":p,f=e.customPaperHeight,h=void 0===f?"":f,g=e.noBackground,E=void 0!==g&&g,b=e.columnsSelector,v=void 0!==b&&b,y=e.textSelectable,_=void 0!==y&&y,S=e.columnsShown,T=void 0===S?[]:S,A=e.onColumnChange,C=void 0===A?function(e){}:A,w=e.infiniteScrollConfig,N=e.autoScrollToBottom,I=void 0!==N&&N;e.disabled;var x=e.onSelectAll,R=e.rowStyle,k=e.parentClassName,O=void 0===k?"":k,L=e.sx,D=e.rowHeight,M=void 0===D?40:D,P=e.sortEnabled,B=void 0!==P&&P,F=e.sortCallBack,U=(0,r.useState)(!1),z=U[0],H=U[1],G=(0,r.useState)(void 0),j=G[0],V=G[1],Z=(0,r.useState)("ASC"),W=Z[0],$=Z[1],q=(0,r.useState)(null),Y=q[0],K=q[1],X=d||"",Q=t?t.find((function(e){return"view"===e.type})):null,J=function(e){H(!z),K(e.currentTarget)},ee=function(){H(!1),K(null)},te=function(e){var t=Wn(e,"sortDirection","DESC");V(e.sortBy),$(t),F&&F(e)},ne=o;return B&&j&&(ne=function(e,t,n){var r=e;if(0===e.length)return e;if(ld(e[0])&&void 0!==t)switch(n){case"ASC":r.sort((function(e,n){return e[t]>n[t]?1:e[t]n[t]?-1:0}))}else switch(n){case"ASC":r.sort((function(e,t){return e>t?1:et?-1:0}))}return r}(o,j,W)),r.createElement(Gr,{item:!0,xs:12,className:O},r.createElement(Dd,{className:"".concat(E?"noBackground":""),customPaperHeight:h,sx:L,rowHeight:M},i&&r.createElement(Gr,{container:!0,className:"loadingBox"},r.createElement(Gr,{item:!0,xs:12,style:{textAlign:"center"}},l),r.createElement(Gr,{item:!0,xs:12,sx:{textAlign:"center"}},r.createElement(Oa,null))),v&&!i&&ne.length>0&&r.createElement(r.Fragment,null,function(e){return r.createElement(pd,{sx:{margin:"10px 0 0",display:"flex",justifyContent:"flex-end"}},r.createElement(mr,{id:"columns-selector",variant:"regular",icon:r.createElement(Xs,null),iconLocation:"end",onClick:J},"Columns"),z&&r.createElement(Ld,{open:z,closeTriggerAction:ee,onSelect:function(e){return C(e)},columns:e,selectedOptionIDs:T,anchorEl:Y}))}(n)),ne&&!i&&ne.length>0?r.createElement(Wc,{isRowLoaded:function(e){var t=e.index;return!!ne[t]},loadMoreRows:w?w.loadMoreRecords:function(){return new Promise((function(){return!0}))},rowCount:w?w.recordsCount:ne.length},(function(e){var o=e.onRowsRendered,i=e.registerChild;return r.createElement(Oc,null,(function(e){var s,l,p,f=e.width,h=e.height,g=(s=f,l=t?t.filter((function(e){return"view"!==e.type})).length:0,(p=45*l+15)<80?80:p>s?s:p),E=!(!a||!u),b=!!(t&&t.length>1||t&&1===t.length&&"view"!==t[0].type);return r.createElement(ku,{ref:i,disableHeader:!1,headerClassName:"headerItem",headerHeight:40,height:h,noRowsRenderer:function(){return r.createElement(r.Fragment,null,""!==m?m:"There are no ".concat(c||"items"," yet."))},overscanRowCount:10,rowHeight:M,width:f,rowCount:ne.length,rowGetter:function(e){var t=e.index;return ne[t]},onRowClick:function(e){!function(e){if(Q){var t=Q.sendOnlyId&&d?e[X]:e,n=!1;Q.isDisabled&&(n="boolean"==typeof Q.isDisabled?Q.isDisabled:Q.isDisabled(e)),Q.onClick&&!n&&Q.onClick(t)}}(e.rowData)},rowClassName:function(e){return"rowLine ".concat(Q?"canClick":""," ").concat(!Q&&_?"canSelectText":""," ").concat(R?R(e):"")},onRowsRendered:o,sort:B?te:void 0,sortBy:B?j:void 0,sortDirection:B?W:void 0,scrollToIndex:I?ne.length-1:-1,rowStyle:function(e){if(R){var t=R(e);return"string"==typeof t?Wn(Md,t,{}):t}return{}}},E&&r.createElement(Iu,{headerRenderer:function(){return r.createElement(r.Fragment,null,x?r.createElement("div",{className:"checkAllWrapper"},r.createElement(wl,{label:"",onChange:x,value:"all",id:"selectAll",name:"selectAll",checked:(null==u?void 0:u.length)===ne.length})):r.createElement(r.Fragment,null,"Select"))},dataKey:"select-".concat(X),width:45,disableSort:!0,cellRenderer:function(e){var t=e.rowData,n=!!u&&u.includes(Qu(t)?t:"".concat(t[X]));return r.createElement(wl,{value:Qu(t)?t:"".concat(t[X]),color:"primary",className:"TableCheckbox",checked:n,onChange:a,onClick:function(e){e.stopPropagation()}})}}),b&&r.createElement(Iu,{dataKey:"column-options",width:g,headerClassName:"optionsAlignment",className:"optionsAlignment",cellRenderer:function(e){var n=e.rowData,a=!!u&&u.includes(Qu(n)?n:"".concat(n[X]));return function(e,t,n,a){return e.map((function(e,o){if("view"===e.type)return null;var i=!1;return e.isDisabled&&(i="boolean"==typeof e.isDisabled?e.isDisabled:e.isDisabled(t)),e.showLoader&&("boolean"==typeof e.showLoader&&e.showLoader||e.showLoader(t))?r.createElement("div",{className:"progress-enabled"},r.createElement(Oa,{style:{width:18,height:18},key:"actions-loader-".concat(e.type,"-").concat(o.toString())})):r.createElement(ud,{tooltip:e.tooltip,type:e.type,onClick:e.onClick,valueToSend:t,selected:n,key:"actions-".concat(e.type,"-").concat(o.toString()),idField:a,sendOnlyId:!!e.sendOnlyId,disabled:i})}))}(t||[],n,a,X)}}),function(e,t,n,a,o,i,s,l,c,u,d,p){var m=function(e,t,n,r,a,o,i){if(e){var s=Ze([],e,!0);o&&(s=e.filter((function(e){return i.includes(e.elementKey)})));var l=t;return r&&(l-=45),a&&(l-=n),s.reduce((function(e,t){return t.width?e-t.width:e}),l)/s.filter((function(e){return!e.width})).length}return t}(e,t,n,a,o,l,c);return e.map((function(t,n){if(l&&!c.includes(t.elementKey))return null;var a=!u||Array.isArray(u)&&!u.includes((null==t?void 0:t.elementKey)||"");return r.createElement(Iu,{key:"col-tb-".concat(n.toString()),dataKey:t.elementKey||"column-".concat(n),headerClassName:"titleHeader ".concat(t.headerTextAlign?"text-".concat(t.headerTextAlign):""),headerRenderer:function(){return r.createElement(pd,{sx:{display:"flex",width:"100%","& svg":{width:12,height:12,minWidth:12,minHeight:12}}},u||Array.isArray(u)&&u.includes(t.elementKey)?r.createElement(r.Fragment,null,d===t.elementKey||1===e.length&&"column-0"===d?r.createElement(r.Fragment,null,"ASC"===p?r.createElement(Qs,null):r.createElement(Js,null)):null):null,r.createElement(pd,{sx:{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}},t.label))},className:t.contentTextAlign?"text-".concat(t.contentTextAlign):"",cellRenderer:function(e){var n=e.rowData,a=!!i&&i.includes(Qu(n)?n:"".concat(n[s]));return function(e,t,n){var a=Qu(e)?e:Wn(e,t.elementKey||"",null),o=t.renderFullObject?e:a,i=t.renderFunction?t.renderFunction(o):o;return r.createElement(r.Fragment,null,r.createElement("span",{className:n?"selected":""},i))}(n,t,a)},width:t.width||m,disableSort:a,defaultSortDirection:"ASC"})}))}(n,f,g,E,b,u||[],X,v,T,B,B?j:"",B?W:void 0))}))})):r.createElement(r.Fragment,null,!i&&r.createElement("div",{id:"empty-results"},""!==m?m:"There are no ".concat(c||"items"," yet.")))))},Bd=a.Ay.button((function(e){var t=e.theme,n=e.sx;return je({display:"flex",alignItems:"center",textDecoration:"none",justifyContent:"center",flexDirection:"row",height:"30px",paddingLeft:0,background:"transparent",border:0,cursor:"pointer","& .label":{color:Wn(t,"backLink.color","#073052"),fontSize:14,fontWeight:600,lineHeight:1,paddingTop:1,marginRight:10},"&:hover .icon":{background:Wn(t,"backLink.hover","#eaedee"),borderRadius:"2px"},"& .icon":{lineHeight:1,marginRight:"3px",display:"flex",alignItems:"center",width:"28px",height:"30px","& .min-icon":{width:"17px",height:"11px",margin:"auto",color:Wn(t,"backLink.arrow","#081C42")}}},n)})),Fd=function(e){var t=e.label,n=e.sx,a=Ve(e,["label","sx"]);return r.createElement(Bd,je({sx:n},a),r.createElement("span",{className:"icon"},r.createElement(di,null)),r.createElement("span",{className:"label"},t))},Ud=a.Ay.div((function(e){var t=e.theme;return{border:"1px solid ".concat(Wn(t,"borderColor","#E2E2E2")),borderRadius:2,backgroundColor:Wn(t,"boxBackground","#FBFAFA"),paddingLeft:25,paddingTop:20,paddingBottom:20,paddingRight:30,"& .leftItems":{fontSize:16,fontWeight:"bold",display:"flex",alignItems:"center","& .min-icon":{marginRight:15,height:28,width:38}},"& .helpText":{fontSize:16,paddingLeft:5,marginTop:15}}})),zd=function(e){var t=e.iconComponent,n=e.title,a=e.help;return r.createElement(Ud,{className:"helpbox-container"},r.createElement(Gr,{container:!0},r.createElement(Gr,{item:!0,xs:12,className:"leftItems"},t||null,n),a&&r.createElement(Gr,{item:!0,xs:12,className:"helpText"},a)))},Hd=a.Ay.div((function(e){var t=e.theme,n=e.separator,r=e.sx;return je({display:"flex",alignItems:"center",justifyContent:"flex-start",borderBottom:n?"1px solid ".concat(Wn(t,"borderColor","#eaeaea")):"",gap:"10px"},r)})),Gd=function(e){var t=e.separator,n=e.icon,a=e.children,o=e.actions,i=e.sx;return r.createElement(Hd,{className:"sectionTitle-container",separator:t,sx:i},r.createElement(Gr,{item:!0,xs:!0,sx:{display:"flex",flexGrow:1,justifyContent:"flex-start",alignItems:"center",marginLeft:"10px","& svg":{marginRight:"10px"}}},n,r.createElement("h3",null,a)),o&&r.createElement(Gr,{item:!0,xs:!0,sx:{display:"flex",justifyContent:"flex-end",marginRight:"10px"}}," ",o))},jd=function(e){var t,n=e.children,a=e.title,o=void 0===a?"":a,s=e.helpBox,l=e.icon,c=e.sx,u=e.containerPadding,d=void 0===u||u,p=e.withBorders,m=void 0===p||p;return r.createElement(pd,{withBorders:m,sx:je((t={display:"grid",padding:d?25:0,gap:"25px",gridTemplateColumns:"1fr","& .inputItem:not(:last-of-type)":{marginBottom:12}},t["@media (min-width: ".concat(Wn(i,"md",0),"px)")]={gridTemplateColumns:s?"2fr 1.2fr":"1fr"},t),c)},r.createElement(pd,null,""!==o&&r.createElement(Gd,{icon:l,sx:{marginBottom:16}},o),n),s)},Vd=a.Ay.div((function(e){e.theme;var t=e.sx,n=e.variant;return je({boxSizing:"content-box",maxWidth:"constrained"===n?1220:"initial",padding:32},t)})),Zd=function(e){var t=e.sx,n=e.children,a=e.variant,o=e.className,i=Ve(e,["sx","children","variant","className"]);return r.createElement(Vd,je({sx:t,variant:a},i),r.createElement(Gr,{container:!0},r.createElement(Gr,{item:!0,xs:12,className:o},n)))},Wd=a.Ay.main((function(e){var t=e.theme;return{flexGrow:1,height:e.horizontal?"initial":"100vh",overflow:"auto",position:"relative",backgroundColor:Wn(t,"bgColor","#fff"),color:Wn(t,"fontColor","#000")}})),$d=a.Ay.div((function(e){var t,n=e.horizontal,r=e.mobileModeAuto,a=e.sx,o={};return r&&((t={})["@media (max-width: ".concat(Wn(i,"md",0),"px)")]={flexDirection:"column"},o=t),je(je({display:"flex",flexDirection:n?"column":"row"},o),a)})),qd=function(e){var t=e.children,n=e.menu,a=e.horizontal,o=e.mobileModeAuto,i=void 0===o||o,s=e.sx;return r.createElement($d,{className:"parentBox",horizontal:a,mobileModeAuto:i,sx:s},n&&(0,r.cloneElement)(n,{mobileModeAuto:i}),r.createElement(Wd,{horizontal:a,className:"mainPage"},t))},Yd=a.Ay.input((function(e){var t=e.theme,n=e.error,r=e.startIcon,a=e.overlayIcon,o=e.overlayObject,i=e.originType,s=Wn(t,"inputBox.border","#E2E2E2"),l=Wn(t,"inputBox.hoverBorder","#000110");return n&&""!==n&&(s=Wn(t,"inputBox.error","#C51B3F"),l=Wn(t,"inputBox.error","#C51B3F")),{height:38,width:"100%",paddingTop:0,paddingRight:a||o||"password"===i?35:15,paddingLeft:r?35:15,paddingBottom:0,color:Wn(t,"inputBox.color","#07193E"),fontSize:13,fontWeight:600,border:"".concat(s," 1px solid"),borderRadius:3,outline:"none",transitionDuration:"0.1s",backgroundColor:Wn(t,"inputBox.backgroundColor","#fff"),"&:placeholder":{color:Wn(t,"inputBox.placeholderColor","#858585"),opacity:1,fontWeight:400},"&:hover":{borderColor:l},"&:focus":{borderColor:l},"&:disabled":{border:Wn(t,"inputBox.disabledBorder","#494A4D"),backgroundColor:Wn(t,"inputBox.disabledBackground","#B4B4B4"),color:Wn(t,"inputBox.disabledText","#E6EBEB"),"&:placeholder":{color:Wn(t,"inputBox.disabledPlaceholder","#E6EBEB")}}}})),Kd=a.Ay.div((function(e){var t=e.theme,n=e.error,r=e.sx;return je({display:"flex",flexGrow:1,width:"100%","& .errorText":{fontSize:12,color:Wn(t,"inputBox.error","#C51B3F"),marginTop:3},"& .textBoxContainer":{width:"100%",flexGrow:1,position:"relative",minWidth:160},"& .tooltipContainer":{marginLeft:5,display:"flex",alignItems:"center","& .min-icon":{width:13}},"& .overlayAction":{position:"absolute",right:5,top:6},"& .inputLabel":{marginBottom:n?18:0},"& .startOverlayIcon":{position:"absolute",left:10,top:10,"& svg":{width:14,height:14,fill:Wn(t,"inputBox.color","#07193E")}}},r)})),Xd=function(e){var t=e.id,n=e.tooltip,a=void 0===n?"":n,o=e.index,i=e.type,s=e.overlayIcon,l=e.noLabelMinWidth,c=e.overlayId,u=e.overlayAction,d=e.overlayObject,p=e.label,m=void 0===p?"":p,f=e.required,h=e.startIcon,g=e.className,E=e.error,b=e.sx,v=e.helpTip,y=e.helpTipPlacement,_=Ve(e,["id","tooltip","index","type","overlayIcon","noLabelMinWidth","overlayId","overlayAction","overlayObject","label","required","startIcon","className","error","sx","helpTip","helpTipPlacement"]),S=(0,r.useState)(!1),T=S[0],A=S[1],C=s,w=i;return"password"!==i||s||(C=T?r.createElement(al,null):r.createElement(rl,null),w=T?"text":"password"),r.createElement(Kd,{error:!!E&&""!==E,sx:b,className:"inputItem ".concat(g)},""!==m&&r.createElement(Sl,{htmlFor:t,noMinWidth:l,className:"inputLabel",helpTip:v,helpTipPlacement:y},m,f?"*":"",""!==a&&r.createElement(pd,{className:"tooltipContainer"},r.createElement(Ga,{tooltip:a,placement:"top"},r.createElement(pd,{className:a},r.createElement(jo,null))))),r.createElement(pd,{className:"textBoxContainer"},h&&r.createElement(pd,{className:"startOverlayIcon"},h),r.createElement(Yd,je({id:t,fullWidth:!0,type:w,error:E,className:"inputRebase","data-index":o,startIcon:h,overlayObject:d,overlayIcon:s,originType:i},_)),C&&r.createElement(pd,{className:"overlayAction"},r.createElement(Il,{onClick:u?function(){u()}:function(){return A(!T)},id:c,size:"25px",type:"button"},C)),d&&r.createElement(pd,{className:"overlayAction"},d),""!==E&&r.createElement(pd,{className:"errorText"},E)))},Qd=(a.Ay.div((function(e){var t=e.theme,n=e.sx;return je({boxSizing:"border-box",flexBasis:"100%",width:"100%",fontSize:12,color:Wn(t,"breadcrumbs.textColor","#969FA8"),fontWeight:"bold",border:"".concat(Wn(t,"breadcrumbs.border","#eaeaea")," 1px solid"),height:38,display:"flex",alignItems:"center",backgroundColor:Wn(t,"breadcrumbs.backgroundColor","#FCFCFD"),marginRight:10,"& a":{textDecoration:"none",color:Wn(t,"breadcrumbs.linksColor","#969FA8"),"&:hover":{textDecoration:"underline"}},"& .min-icon":{width:16,minWidth:16},"& .backButton":{border:"".concat(Wn(t,"breadcrumbs.backButton.border","#EAEDEE")," 1px solid"),backgroundColor:Wn(t,"breadcrumbs.backButton.backgroundColor","#FFF"),borderLeft:0,borderRadius:0,width:38,height:38,marginRight:"10px","& > svg":{fill:Wn(t,"breadcrumbs.textColor","#969FA8")}},"& .breadcrumbsList":{textOverflow:"ellipsis",overflow:"hidden",whiteSpace:"nowrap",display:"inline-block",flexGrow:1,textAlign:"left",marginLeft:15,marginRight:10,width:0},"& .slashSpacingStyle":{margin:"0 5px"}},n)})),a.Ay.button((function(e){var t=e.theme;return{display:"inline-flex",alignItems:"center",justifyContent:"flex-start",color:Wn(t,"actionsList.optionsTextColor","#5E5E5E"),width:"100%",height:22,margin:0,padding:"0 15px",fontSize:14,fontWeight:"normal",whiteSpace:"nowrap",backgroundColor:"transparent",border:"none",cursor:"pointer","&:hover":{backgroundColor:"transparent",color:Wn(t,"actionsList.optionsHoverTextColor","#000")},"& svg":{width:11,marginRight:8},"&:disabled":{color:Wn(t,"actionsList.disabledOptionsTextColor","#EBEBEB"),cursor:"not-allowed"},"& .buttonIcon":{width:11}}})),a.Ay.div((function(e){var t=e.theme,n=e.sx;return je({"& .titleLabel":{fontSize:14,fontWeight:"700",color:Wn(t,"actionsList.titleColor","#000"),padding:"12px 30px 8px 22px",whiteSpace:"nowrap",textOverflow:"ellipsis",overflow:"hidden",alignItems:"center"},"& .objectActions":{backgroundColor:Wn(t,"actionsList.backgroundColor","#F8F8F8"),border:"".concat(Wn(t,"actionsList.containerBorderColor","#F1F1F1")," 1px solid"),borderRadius:3,margin:"8px 22px",padding:0,"& span":{width:"100%"},"& li":{listStyle:"none",padding:6,margin:0,borderBottom:"".concat(Wn(t,"actionsList.optionsBorder","#E5E5E5")," 1px solid"),fontSize:14,"&:first-of-type":{padding:10,fontWeight:"bold",color:Wn(t,"actionsList.titleColor","#000")},"&:last-of-type":{borderBottom:0},"&::before":{content:"' '!important"}}}},n)})),a.Ay.div((function(e){var t=e.theme,n=e.sx;return je({display:"flex",justifyContent:"space-between",alignItems:"center",paddingBottom:15,borderBottom:"1px solid ".concat(Wn(t,"borderColor","#E5E5E5")),fontWeight:"bold",fontSize:18,color:Wn(t,"fontColor","#000"),margin:"20px 22px"},n)}))),Jd=function(e){var t=e.label,n=e.icon,a=e.sx;return r.createElement(Qd,{className:"simpleHeader-container",sx:a},r.createElement("span",null,t),n)},ep=a.Ay.div((function(e){var t,n=e.theme,r=e.sx,a=e.bottomBorder;return je(((t={boxSizing:"border-box",display:"flex",flexDirection:"row",flexWrap:"wrap",width:"100%","& .stContainer":{display:"flex",alignItems:"center",justifyContent:"space-between",padding:8,width:"100%",borderBottom:a?"1px solid ".concat(Wn(n,"screenTitle.border","#E5E5E5")):"none"},"& .headerBarIcon":{color:Wn(n,"screenTitle.iconColor","#000"),"& .min-icon":{width:44,height:44}},"& .headerBarSubheader":{color:Wn(n,"screenTitle.subtitleColor","#5B5C5C")},"& .titleColumn":{height:"auto",justifyContent:"center",display:"flex",flexFlow:"column",alignItems:"flex-start","& h1":{fontSize:20}},"& .leftItems":{display:"flex",alignItems:"center",gap:12},"& .rightItems":{display:"flex",alignItems:"center",gap:10}})["@media (max-width: ".concat(Wn(i,"md",0),"px)")]={"& .stContainer":{flexDirection:"column",gap:12,flexFlow:"column",alignItems:"flex-start"},"& .headerBarIcon":{display:"none"},"& .headerBarSubheader":{display:"flex",flexDirection:"column"},"& .rightItems":{width:"100%",justifyContent:"center"}},t),r)})),tp=function(e){var t=e.icon,n=e.subTitle,a=void 0===n?"":n,o=e.title,i=e.actions,s=e.bottomBorder,l=void 0===s||s,c=e.sx;return r.createElement(ep,{className:"screenTitle-container",sx:c,bottomBorder:l},r.createElement(pd,{className:"stContainer"},r.createElement(pd,{className:"leftItems"},t?r.createElement(pd,{className:"headerBarIcon"},t):null,r.createElement(pd,{className:"titleColumn"},r.createElement("h1",{style:{margin:0}},o),r.createElement("span",{className:"headerBarSubheader"},a))),r.createElement(pd,{className:"rightItems"},i)))},np=function(e){var t=(0,r.useCallback)((function(t){"Escape"!==t.key&&"Esc"!==t.key||e()}),[e]);(0,r.useEffect)((function(){return document.addEventListener("keyup",t,!1),function(){document.removeEventListener("keyup",t,!1)}}),[t])},rp=a.Ay.div((function(e){var t=e.theme,n=e.backgroundOverlay,r=e.widthLimit,a=e.iconColor,o=e.customMaxWidth;return{"& .overlay":{position:"fixed",zIndex:1200,width:"100vw",height:"100vh",top:0,left:0,backgroundColor:n?Wn(t,"modalBox.overlayColor","#00000050"):"transparent",display:"flex",alignItems:"center",justifyContent:"center",opacity:0,"&.active":{opacity:1,transition:"opacity 0.3s"}},"& .modalContainer":{color:Wn(t,"fontColor","#000"),width:"100%",maxWidth:r?o:"100%",margin:32,backgroundColor:Wn(t,"modalBox.containerColor","#FFF"),padding:"16px 40px",borderRadius:4,boxShadow:"rgba(0, 0, 0, 0.2) 0px 11px 15px -7px, rgba(0, 0, 0, 0.14) 0px 24px 38px 3px, rgba(0, 0, 0, 0.12) 0px 9px 46px 8px"},"& .modalTitleBar":{position:"relative",padding:"10px 0","& .closeModalButton":{display:"flex",alignItems:"center",justifyContent:"center",position:"absolute",top:-2,right:-14,cursor:"pointer",border:"none",backgroundColor:"transparent",fontSize:24,color:Wn(t,"modalBox.closeColor","#FFF"),padding:0,borderRadius:"100%",width:28,height:28,"& > svg":{width:14,height:14},"&:hover":{color:Wn(t,"modalBox.closeHoverColor","#EAEAEA"),backgroundColor:Wn(t,"modalBox.closeHoverBG","#000")}},"& .title":{display:"flex",alignItems:"center",justifyContent:"flex-start",gap:8,fontSize:20,color:Wn(t,"modalBox.titleColor","#000"),fontWeight:"bold","& > svg":{fill:Wn(t,"modalBox.iconColor.".concat(a),"#07193E")}}},"& .dialogContent":{maxHeight:"calc(100vh - 150px)",overflowY:"auto"}}})),ap=function(e){var t=e.onClose,n=e.open,a=e.title,i=e.children,s=e.widthLimit,l=void 0===s||s,c=e.titleIcon,u=e.backgroundOverlay,d=void 0===u||u,p=e.iconColor,m=void 0===p?"default":p,f=e.customMaxWidth,h=void 0===f?750:f,g=e.sx;np(t);var E=(0,r.useState)(!1),b=E[0],v=E[1];if((0,r.useEffect)((function(){n?setTimeout((function(){return v(!0)}),100):v(!1)}),[n]),!n)return null;var y=r.createElement(rp,{widthLimit:l,backgroundOverlay:d,iconColor:m,customMaxWidth:h,sx:g,className:"modalBoxMain"},r.createElement(pd,{className:"overlay ".concat(b?"active":"")},r.createElement(pd,{className:"modalContainer"},r.createElement(pd,{className:"modalTitleBar"},r.createElement(pd,{className:"title"},c,a),r.createElement("button",{className:"closeModalButton",id:"close",onClick:t},r.createElement(vs,null))),r.createElement(pd,{className:"dialogContent"},i))));return(0,o.createPortal)(y,document.body)},op=a.Ay.span((function(e){var t=e.theme,n=e.active;return{fontSize:12,color:n?Wn(t,"switchButton.onLabelColor","#081C42"):Wn(t,"switchButton.offLabelColor","#E2E2E2"),margin:"0 8px 0 10px",fontWeight:n?"bold":"normal"}})),ip=a.Ay.label((function(e){var t=e.theme;return{width:54,height:24,position:"relative","& .switchRail":{position:"relative",display:"block",width:54,height:24,borderRadius:24,padding:2,boxShadow:"inset 0px 1px 3px rgba(0,0,0,0.1)"},"& input":{display:"none","& ~.switchRail":{backgroundColor:Wn(t,"switchButton.switchBackground","#E6EBEB"),"&:before":{content:"' '",position:"absolute",display:"block",width:22,height:22,top:1,left:1,borderRadius:"100%",border:"".concat(Wn(t,"switchButton.bulletBorderColor","#FFF")," 2px solid "),backgroundColor:Wn(t,"switchButton.bulletBGColor","#F1F4F4"),transitionDuration:"0.1s"}},"&:checked ~.switchRail":{backgroundColor:Wn(t,"switchButton.onBackgroundColor","#4CCB92"),"&:before":{left:"calc(100% - 23px)"}},"&:disabled:checked ~.switchRail":{backgroundColor:Wn(t,"switchButton.disabledOnBackground","#8bb0a0")},"&:disabled ~.switchRail":{cursor:"not-allowed",backgroundColor:Wn(t,"switchButton.disabledBackground","#E6EAEB"),"&:before":{borderColor:Wn(t,"switchButton.disabledBulletBorderColor","#F1F4F4"),backgroundColor:Wn(t,"switchButton.disabledBulletBGColor","#E6EAEB")}}}}})),sp=a.Ay.div((function(){return{display:"flex",alignItems:"center"}})),lp=a.Ay.div((function(e){e.theme;var t=e.sx;return je({"& .inputBase":{display:"flex",justifyContent:"space-between",alignItems:"center",flexBasis:"initial",flexWrap:"nowrap"},"& .actionDescription":{marginTop:4,padding:"0 10px",color:"#999999"}},t)})),cp=function(e){var t=e.tooltip,n=e.label,a=e.id,o=e.sx,i=e.className,s=e.switchOnly,l=e.indicatorLabels,c=e.description,u=e.checked,d=e.helpTip,p=e.helpTipPlacement,m=Ve(e,["tooltip","label","id","sx","className","switchOnly","indicatorLabels","description","checked","helpTip","helpTipPlacement"]),f=r.createElement(sp,null,!s&&r.createElement(op,{active:!u},l&&l.length>1?l[1]:"OFF"),r.createElement(ip,{id:"".concat(a,"-switch")},r.createElement("input",je({type:"checkbox",id:a,checked:u},m)),r.createElement("span",{className:"switchRail"})),!s&&r.createElement(op,{active:!!u},l?l[0]:"ON"));return s?f:r.createElement(lp,{className:"inputItem ".concat(i||""),sx:o},r.createElement(Al,{className:"inputBase"},""!==n&&r.createElement(Sl,{htmlFor:a,noMinWidth:!0,helpTip:d,helpTipPlacement:p},n,t&&""!==t&&r.createElement("div",{className:"tooltipContainer"},r.createElement(Ga,{tooltip:t,placement:"top"},r.createElement(jo,null)))),f),c&&r.createElement(pd,{className:"actionDescription"},c))},up=a.Ay.div((function(e){var t=e.theme,n=e.sx,r=e.useAnchorWidth;return je({position:"absolute",display:"grid",gridTemplateColumns:"100%",backgroundColor:Wn(t,"dropdownSelector.backgroundColor","#fff"),border:"1px solid ".concat(Wn(t,"borderColor","#E2E2E2")),padding:"10px 0",maxHeight:450,minWidth:r?150:0,overflowX:"hidden",overflowY:"auto",borderRadius:4,boxShadow:"rgba(0, 0, 0, 0.2) 0px 11px 15px -7px, rgba(0, 0, 0, 0.14) 0px 24px 38px 3px, rgba(0, 0, 0, 0.12) 0px 9px 46px 8px","& ul":{padding:0,margin:0,display:"flex",flexDirection:"column",width:"100%"}},n)})),dp=a.Ay.div((function(e){var t=e.theme,n=e.icon;e.label;var r="";return n&&(r+="16px "),r+="1fr ",e.indicator&&(r+="16px"),{cursor:"pointer",listStyle:"none",width:"100%",color:Wn(t,"dropdownSelector.optionTextColor","#000"),padding:"6px 15px",fontSize:14,userSelect:"none",alignItems:"center",justifyContent:"flex-start",gap:10,whiteSpace:"nowrap",display:"grid",gridTemplateColumns:r,"& svg":{width:16,height:16,minWidth:16,minHeight:16},"& .truncate":{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},"&.selected":{backgroundColor:Wn(t,"dropdownSelector.selectedBGColor","#D5D7D8"),color:Wn(t,"dropdownSelector.optionTextColor","#000")},"&.disabled":{cursor:"not-allowed",color:Wn(t,"dropdownSelector.disabledText","#E6EBEB"),"&:hover":{backgroundColor:Wn(t,"dropdownSelector.backgroundColor","#fff"),color:Wn(t,"dropdownSelector.disabledText","#E6EBEB")}},"&.hovered:not(.disabled)":{backgroundColor:Wn(t,"dropdownSelector.hoverBG","#E6EAEB"),color:Wn(t,"dropdownSelector.hoverText","#000")}}})),pp=function(e,t,n){if(!e)return{top:0,left:0,width:0};var r=e.getBoundingClientRect(),a={top:r.top+r.height};return"start"===t?(a.left=r.left,a.transform="translateX(0%)"):"end"===t&&(a.left=r.left+r.width,a.transform="translateX(-100%)"),n&&(a.width=r.width),a},mp=function(e){var t,n,a=e.id,i=e.options,s=e.selectedOption,l=void 0===s?"":s,c=e.onSelect,u=e.hideTriggerAction,d=e.open,p=e.anchorEl,m=void 0===p?null:p,f=e.useAnchorWidth,h=void 0!==f&&f,g=e.anchorOrigin,E=void 0===g?"start":g,b=(0,r.useState)(null),v=b[0],y=b[1],_=(0,r.useState)(0),S=_[0],T=_[1],A=function(){var e=i[S];e.disabled||c(e.value,e.extraValue||null,e.label,S),u()};return n=(0,r.useCallback)((function(e){"Enter"===e.key&&t()}),[t=A]),(0,r.useEffect)((function(){return document.addEventListener("keyup",n,!1),function(){document.removeEventListener("keyup",n,!1)}}),[n]),np(u),function(e){var t=(0,r.useCallback)((function(t){t.key.startsWith("Arrow")&&(t.preventDefault(),t.stopPropagation(),e(t.key))}),[e]);(0,r.useEffect)((function(){return document.addEventListener("keyup",t,!1),function(){document.removeEventListener("keyup",t,!1)}}),[t])}((function(e){if(d)if("ArrowUp"===e){var t=S-1;T(r=t>=0?t:0)}else if("ArrowDown"===e){var n=S+1,r=n<=i.length-1?n:i.length-1;T(r)}})),(0,r.useEffect)((function(){T(0)}),[i]),(0,r.useEffect)((function(){y(d?pp(m,E,h):null)}),[d]),(0,r.useEffect)((function(){var e=Id((function(e){e&&e.getBoundingClientRect()&&y(pp(e,E,h))}),300);window.addEventListener("resize",(function(){u()})),window.addEventListener("scroll",(function(){e(m)}))})),d&&v?(m||console.warn("AnchorEl not set. Element will be rendered on the top of the page"),(0,o.createPortal)(r.createElement(Rd,{onClick:u},r.createElement(up,{id:a,sx:v,useAnchorWidth:h},i.map((function(e,t){return r.createElement(dp,{className:"".concat(l===e.value?"selected":""," ").concat(e.disabled?"disabled":""," ").concat(t===S?"hovered":""),onClick:A,onMouseOver:function(){T(t)},key:"option-".concat(t),label:e.label,icon:e.icon,indicator:e.indicator},e.icon,r.createElement(pd,{className:"truncate"},e.label),e.indicator)})))),document.body)):null},fp=a.Ay.div((function(e){var t=e.theme,n=Wn(t,"inputBox.border","#E2E2E2"),r=Wn(t,"inputBox.hoverBorder","#000110");return{display:"flex",flexGrow:1,height:38,padding:"0 5px 0 15px",color:Wn(t,"inputBox.color","#07193E"),fontSize:13,fontWeight:600,border:"".concat(n," 1px solid"),borderRadius:3,outline:"none",transitionDuration:"0.1s",backgroundColor:Wn(t,"inputBox.backgroundColor","#fff"),userSelect:"none",width:"100%",minWidth:0,alignItems:"center",justifyContent:"space-between","& .truncate":{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},"&:placeholder":{color:"#858585",opacity:1,fontWeight:400},"&:hover":{borderColor:r},"&:focus":{borderColor:r},"&.disabled":{border:Wn(t,"inputBox.disabledBorder","#494A4D"),backgroundColor:Wn(t,"inputBox.disabledBackground","#B4B4B4"),color:Wn(t,"inputBox.disabledText","#E6EBEB"),"&:placeholder":{color:Wn(t,"inputBox.disabledPlaceholder","#E6EBEB")},"&:hover":{borderColor:Wn(t,"inputBox.disabledBorder","#494A4D")},"&:focus":{borderColor:Wn(t,"inputBox.disabledBorder","#494A4D")}},"& svg":{width:16,height:16,minWidth:16,minHeight:16},"& .indicatorContainer":{display:"flex",alignItems:"center",width:16}}})),hp=a.Ay.div((function(e){var t=e.theme,n=e.error,r=e.sx;return je({display:"flex",flexGrow:1,width:"100%",position:"relative","& .selectContainer":{display:"flex",width:"100%",gap:8,alignItems:"center",flexGrow:1,position:"relative",minWidth:80},"& .tooltipContainer":{marginLeft:5,display:"flex",alignItems:"center","& .min-icon":{width:13}},"& .overlayArrow":{position:"absolute",top:"50%",transform:"translateY(-50%)",marginTop:"2px",right:"5px","& svg":{width:26,height:26,fill:Wn(t,"inputBox.color","#07193E")}},"& .inputLabel":{marginBottom:n?18:0}},r)})),gp=function(e){var t=e.id,n=e.label,a=void 0===n?"":n,o=e.required,i=e.className,s=e.tooltip,l=void 0===s?"":s,c=e.noLabelMinWidth,u=void 0!==c&&c,d=e.value,p=void 0===d?"":d,m=e.sx,f=e.options,h=e.onChange,g=e.disabled,E=void 0!==g&&g,b=e.fixedLabel,v=void 0===b?"":b,y=e.name,_=e.placeholder,S=void 0===_?"":_,T=e.helpTip,A=e.helpTipPlacement,C=(0,r.useState)(!1),w=C[0],N=C[1],I=r.useState(null),x=I[0],R=I[1],k=f.find((function(e){return e.value===p}));return k||""!==v||""!==S||console.warn("The selected value is not included in Options List"),r.createElement(hp,{sx:m,className:"inputItem ".concat(i||"")},""!==a&&r.createElement(Sl,{htmlFor:t,noMinWidth:u,className:"inputLabel",helpTip:T,helpTipPlacement:A},a,o?"*":"",""!==l&&r.createElement(pd,{className:"tooltipContainer"},r.createElement(Ga,{tooltip:l,placement:"top"},r.createElement(pd,{className:l},r.createElement(jo,null))))),r.createElement(pd,{id:"".concat(t,"-select"),className:"selectContainer",onClick:function(e){E||(N(!w),R(e.currentTarget))}},r.createElement(fp,{className:E?"disabled":""},r.createElement(pd,{sx:{display:"flex",columnGap:8,width:"calc(100% - 16px)"}},(null==k?void 0:k.icon)&&r.createElement(pd,{className:"indicatorContainer"},null==k?void 0:k.icon),r.createElement(pd,{sx:{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",minWidth:0}},v&&""!==v?v:r.createElement(r.Fragment,null,(null==k?void 0:k.label)||r.createElement("i",{style:{opacity:.6}},""!==S?S:""))),(null==k?void 0:k.indicator)&&r.createElement(pd,{className:"indicatorContainer"},null==k?void 0:k.indicator)),r.createElement(pd,{sx:{display:"flex",width:16}},w?r.createElement(js,null):r.createElement(Vs,null))),r.createElement("input",{type:"hidden",id:t,name:y,value:p})),w&&r.createElement(mp,{id:"".concat(t,"-options-selector"),options:f,selectedOption:p,onSelect:function(e,t){return h(e,t)},hideTriggerAction:function(){N(!1)},open:w,anchorEl:x,useAnchorWidth:!0}))},Ep=a.Ay.label((function(e){var t=e.sx,n=e.theme;return je({"& input":{display:"none"},"& .radio":{position:"relative",display:"block",width:16,height:16,borderRadius:"100%",border:"1px solid ".concat(Wn(n,"checkbox.checkBoxBorder","#c3c3c3")),boxShadow:"inset 0px 1px 3px rgba(0,0,0,0.1)"},"input:checked":{"& ~ .radio":{"&:before":{content:"' '",position:"absolute",display:"block",width:12,height:12,backgroundColor:Wn(n,"checkbox.checkBoxColor","#4CCB92"),borderRadius:"100%",top:"50%",left:"50%",transform:"translateX(-50%) translateY(-50%)"}}},"input:disabled":{"& ~ .radio":{border:"1px solid ".concat(Wn(n,"checkbox.disabledBorder","#B4B4B4"))},"&:checked ~ .radio":{"&:before":{backgroundColor:Wn(n,"checkbox.disabledColor","#D5D7D7")}}}},t)})),bp=a.Ay.div((function(e){return{flexGrow:1,width:"100%",display:"flex",flexDirection:e.inColumn?"column":"row",justifyContent:"flex-end",gap:15,"& .optionLabel":{userSelect:"none","&.checked":{fontWeight:"bold"}}}})),vp=a.Ay.div((function(e){return{display:"flex",alignItems:"center",gap:5}})),yp=function(e){var t=e.tooltip,n=e.label,a=e.id,o=e.sx,i=e.onChange,s=e.className,l=e.name,c=e.selectorOptions,u=e.currentValue,d=e.disableOptions,p=void 0!==d&&d,m=e.displayInColumn,f=void 0!==m&&m,h=e.helpTip,g=e.helpTipPlacement;return r.createElement(Al,{className:"inputItem ".concat(s||""),sx:{display:"flex",justifyContent:"flex-start",alignItems:"center",flexBasis:"initial",flexWrap:"nowrap"}},""!==n&&r.createElement(Sl,{htmlFor:a,noMinWidth:!0,helpTip:h,helpTipPlacement:g},n,t&&""!==t&&r.createElement("div",{className:"tooltipContainer"},r.createElement(Ga,{tooltip:t,placement:"top"},r.createElement(jo,null)))),r.createElement(bp,{inColumn:f},c&&r.createElement(r.Fragment,null,c.map((function(e){return r.createElement(vp,{key:"option-".concat(a,"-").concat(e.value)},r.createElement(Ep,{sx:o},r.createElement("input",{type:"radio",name:l,id:"option-".concat(a,"-").concat(e.value),value:e.value,defaultChecked:u===e.value,onChange:function(t){return i(t,e.extraValue)},disabled:p||!!e.disabled}),r.createElement("span",{className:"radio"})),r.createElement("label",{htmlFor:"option-".concat(a,"-").concat(e.value),className:"optionLabel ".concat(u===e.value?"checked":"")},e.label))})))))},_p=a.Ay.div((function(e){var t=e.theme,n=e.sx,r=e.label,a=e.multiLine;return je({display:"flex",width:""===r||a?"100%":"calc(100% - 170px)",alignItems:"center","& .predefinedList":{backgroundColor:Wn(t,"readBox.backgroundColor","#fbfafa"),border:"".concat(Wn(t,"readBox.borderColor","#e5e5e5")," 1px solid"),padding:"12px 10px",color:Wn(t,"readBox.textColor","#696969"),fontSize:12,fontWeight:600,minHeight:41,borderRadius:4,width:"100%"},"& .innerContent":{width:"100%",overflowX:"auto",whiteSpace:"nowrap",scrollbarWidth:"none","&::-webkit-scrollbar":{display:"none"}},"& .innerContentMultiline":{width:"100%",maxHeight:100,overflowY:"auto",scrollbarWidth:"none","&::-webkit-scrollbar":{display:"none"}},"& .includesActionButton":{paddingRight:45,position:"relative"},"& .overlayShareOption":{position:"absolute",width:45,right:0,top:"50%",transform:"translate(0, -50%)"}},n)})),Sp=function(e){var t=e.label,n=void 0===t?"":t,a=e.children,o=e.multiLine,i=e.actionButton,s=e.sx,l=e.helpTip,c=e.helpTipPlacement;return r.createElement(_p,{className:"inputItem",label:n,multiLine:o,sx:s},""!==n&&r.createElement(Sl,{className:"inputLabel",helpTip:l,helpTipPlacement:c},n),r.createElement(pd,{className:"predefinedList ".concat(i?"includesActionButton":"")},r.createElement(pd,{className:o?"innerContentMultiline":"innerContent"},a),i&&r.createElement(pd,{className:"overlayShareOption"},i)))},Tp=(a.Ay.textarea((function(e){var t=e.theme,n=e.error;e.originType;var r=Wn(t,"inputBox.border","#E2E2E2"),a=Wn(t,"inputBox.hoverBorder","#000110");return n&&""!==n&&(r=Wn(t,"inputBox.error","#C51B3F"),a=Wn(t,"inputBox.error","#C51B3F")),{fontFamily:"'Inter',sans-serif",width:"100%",resize:"none",padding:"16px 14px",color:Wn(t,"inputBox.color","#07193E"),fontSize:13,fontWeight:600,border:"".concat(r," 1px solid"),borderRadius:3,outline:"none",transitionDuration:"0.1s",backgroundColor:Wn(t,"inputBox.backgroundColor","#fff"),"&:placeholder":{color:Wn(t,"inputBox.placeholderColor","#858585"),opacity:1,fontWeight:400},"&:hover":{borderColor:a},"&:focus":{borderColor:a},"&:disabled":{border:Wn(t,"inputBox.disabledBorder","#494A4D"),backgroundColor:Wn(t,"inputBox.disabledBackground","#B4B4B4"),color:Wn(t,"inputBox.disabledText","#E6EBEB"),"&:placeholder":{color:Wn(t,"inputBox.disabledPlaceholder","#E6EBEB")}}}})),a.Ay.div((function(e){var t=e.theme,n=e.error,r=e.sx;return je({display:"flex",alignItems:"flex-start",flexGrow:1,width:"100%","& .errorText":{fontSize:12,color:Wn(t,"inputBox.error","#C51B3F"),marginTop:3},"& .textBoxContainer":{width:"100%",flexGrow:1,position:"relative",minWidth:160},"& .tooltipContainer":{marginLeft:5,display:"flex",alignItems:"center","& .min-icon":{width:13}},"& .inputLabel":{marginBottom:n?18:0}},r)})),a.Ay.div((function(e){var t=e.theme;return{position:"fixed",top:0,left:0,width:"100vw",height:"100vh",backgroundColor:"transparent",zIndex:5e3,overscrollBehavior:"contain","& > .subItemsBox":{position:"absolute",display:"inline-block",minWidth:180,backgroundColor:Wn(t,"menu.horizontal.dropBackground",p),border:"".concat(Wn(t,"borderColor",d)),"& .menuItemButton":{width:"100%","&:hover, &.selected":{backgroundColor:Wn(t,"menu.horizontal.hoverSelectedBackground",b),borderBottom:0,color:Wn(t,"menu.horizontal.dropHoverSelectedColor",l),"& .iconContainer":{border:"".concat(Wn(t,"menu.horizontal.dropHoverSelectedColor",l)," 1px solid")}}}}}}))),Ap=function(e){var t=e.open,n=e.anchorEl,a=e.hideTriggerAction,o=e.children,i=(0,r.useState)(null),s=i[0],l=i[1],c=document.documentElement.offsetWidth,u=function(e){if(!e)return{top:0,left:0};var t=e.getBoundingClientRect(),n=t.left;return n+180>c?{top:t.top+t.height,right:0}:{top:t.top+t.height,left:n}};return(0,r.useEffect)((function(){l(t?u(n):null)}),[t]),(0,r.useEffect)((function(){var e=Id((function(e){e&&e.getBoundingClientRect()&&l(u(e))}),300);window.addEventListener("resize",(function(){a()})),window.addEventListener("scroll",(function(){e(n)}))})),t&&n&&s?r.createElement(Tp,{onClick:a},r.createElement(pd,{className:"subItemsBox",sx:je({},s)},o)):null},Cp=function(e){return{display:"flex",justifyContent:"space-between",alignItems:"center",backgroundColor:"transparent",cursor:"pointer",border:"none",height:45,padding:"0 15px",whiteSpace:"nowrap",color:Wn(e,"menu.horizontal.textColor",O),borderBottom:"transparent 2px solid","& .iconContainer":{border:"".concat(Wn(e,"menu.horizontal.iconBorderColor",$)," 1px solid"),backgroundColor:"transparent"},"&.selected, &:hover":{color:Wn(e,"menu.horizontal.hoverSelectedColor",l),borderBottom:"".concat(Wn(e,"menu.horizontal.hoverSelectedBackground",b)," 2px solid"),"& .iconContainer":{border:"".concat(Wn(e,"menu.horizontal.hoverSelectedIconBorder",l)," 1px solid")}}}},wp=a.Ay.div((function(e){var t=e.theme;return{display:"flex",flexDirection:"column",alignItems:"flex-start",justifyContent:"center",userSelect:"none",cursor:"pointer",position:"relative","& .statusArrow":{display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:Wn(t,"menu.horizontal.dropArrowBackground",H),width:15,height:15,minWidth:15,minHeight:15,borderRadius:2,marginLeft:5}}})),Np=a.Ay.button((function(e){var t=e.theme;return je(je({},Cp(t)),{"& .subOption":{padding:0}})})),Ip=a.Ay.a((function(e){var t=e.theme;return je(je({},Cp(t)),{textDecoration:"none"})})),xp=a.Ay.span((function(e){var t=e.theme;return{display:"flex",alignItems:"center",gap:22,"& .iconContainer":{position:"relative",borderRadius:"100%",width:27,height:27,minWidth:27,minHeight:27,display:"flex",alignItems:"center",justifyContent:"center","& svg:not(.badgeIcon)":{width:14,height:14},"& svg.badgeIcon":{width:8,height:8,fill:Wn(t,"menu.horizontal.notificationColor",_),position:"absolute",top:4,right:3}},"& .labelContainer":{fontFamily:"'Inter', sans-serif",fontSize:14}}})),Rp=function(e){var t=e.icon,n=e.name,a=e.badge;return r.createElement(xp,{className:"option"},r.createElement("span",{className:"iconContainer"},t,a&&r.createElement(ro,{className:"badgeIcon"})),r.createElement("span",{className:"labelContainer"},n))},kp=function(e){var t=e.children,n=e.icon,a=e.id,i=e.name,s=e.path,l=e.onClick,c=e.badge,u=e.currentPath,d=e.isVisible,p=void 0===d||d,m=(0,r.useState)(!1),f=m[0],h=m[1],g=r.useState(null),E=g[0],b=g[1],v=!1;return u&&s&&u.startsWith(s)&&(v=!0),t&&0===t.length||!p?null:t&&t.length>0?0===t.filter((function(e){return!1!==e.isVisible})).length?null:r.createElement(wp,null,r.createElement(Np,{id:a,type:"button",onClick:function(e){e.stopPropagation(),h(!0),b(e.currentTarget)},className:"menuItemButton ".concat(f?"selected":"")},r.createElement(Rp,{icon:n,name:i,badge:!!c}),r.createElement(pd,{className:"statusArrow"},f?r.createElement(js,null):r.createElement(Vs,null))),f&&(0,o.createPortal)(r.createElement(Ap,{anchorEl:E,hideTriggerAction:function(){h(!1),b(null)},open:f},t.map((function(e){return r.createElement(kp,{key:"sub-menu-opt-".concat(i,"-").concat(e.id||e.name),onClick:l,name:e.name,badge:e.badge,icon:e.icon,id:e.id,path:e.path,group:e.group,currentPath:u})}))),document.body)):(null==s?void 0:s.match(/^(https?:\/\/)?([\da-z\u0430-\u044f\.\-_]+)\.([a-z\u0430-\u044f\._]{2,6})([a-z\u0430-\u044f\d\.\-\?\/&=#%_]*)*/))?r.createElement(Ip,{className:"menuItemButton",id:a,href:s,target:"_blank"},r.createElement(Rp,{icon:n,name:i,badge:!!c})):r.createElement(Np,{className:"menuItemButton ".concat(v?"selected":""),type:"button",id:a,onClick:function(){l&&l(s||"")}},r.createElement(Rp,{icon:n,name:i,badge:!!c}))},Op=a.Ay.div((function(e){var t=e.theme,n=e.sx;return je({"& .headerBar":{padding:15,display:"flex",justifyContent:"space-between",alignItems:"center",gap:15,background:Wn(t,"menu.horizontal.menuHeaderBackground",U),borderBottom:"".concat(Wn(t,"menu.horizontal.sectionDividerColor",V)," 1px solid"),"& svg":{width:200},"& .endComponent":{display:"flex",alignItems:"center",gap:10}},"& .sections":{backgroundColor:Wn(t,"menu.horizontal.barBackground",m),width:"100%",height:45,display:"flex",overflowY:"hidden",overflowX:"auto",scrollbarWidth:"none",msOverflowStyle:"none",borderBottom:"".concat(Wn(t,"borderColor",d)," 1px solid"),"&.compact":{height:5,backgroundColor:Wn(t,"menu.horizontal.noOptionsBar",m)},"&::-webkit-scrollbar":{width:0,height:0}}},n)})),Lp=function(e){var t=e.applicationLogo,n=e.options,a=e.signOutAction,o=e.callPathAction,i=e.middleComponent,s=e.endComponent,l=e.currentPath,c=e.sx,u=!0;return void 0!==t.inverse&&(u=t.inverse),r.createElement(Op,{className:"menuBox",sx:c},r.createElement(pd,{className:"headerBar"},r.createElement(zr,je({inverse:u},t)),i,r.createElement(pd,{className:"endComponent"},s,a&&r.createElement(Il,{id:"sign-out",onClick:a},r.createElement(Zi,null)))),r.createElement(pd,{className:"sections ".concat(n&&0!==n.length?"":"compact")},n&&n.map((function(e){return r.createElement(kp,{key:"menu-section-".concat(e.group,"-").concat(e.id),onClick:function(t){e.onClick&&e.onClick(t),o(t)},icon:e.icon,name:e.name,group:e.group,id:e.id,path:e.path,currentPath:l,badge:e.badge,children:e.children})}))))},Dp=function(e){return{display:"flex",justifyContent:"space-between",alignItems:"center",backgroundColor:"transparent",cursor:"pointer",border:"none",width:"100%",height:44,padding:"0 25px",color:Wn(e,"menu.vertical.textColor",j),"& .iconContainer":{border:"".concat(Wn(e,"menu.vertical.iconBorderColor",$)," 1px solid"),backgroundColor:Wn(e,"menu.vertical.iconBGColor",W)},"&.selected, &:hover":{color:Wn(e,"menu.vertical.hoverSelectedColor",l),background:Wn(e,"menu.vertical.hoverSelectedBackground",G),"& .iconContainer":{border:"".concat(Wn(e,"menu.vertical.hoverSelectedIconBorder",l)," 1px solid")}}}},Mp=a.Ay.div((function(e){var t=e.theme;return{display:"flex",flexDirection:"column",alignItems:"flex-start",justifyContent:"center",userSelect:"none",cursor:"pointer","& > span":{width:"100%"},"& > .subItemsBox":{paddingLeft:20,width:"100%"},"& .statusArrow":{display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:Wn(t,"menu.vertical.dropArrowBackground",H),width:15,height:15,minWidth:15,minHeight:15,borderRadius:2}}})),Pp=a.Ay.button((function(e){var t=e.theme;return je(je({},Dp(t)),{"& .subOption":{padding:0}})})),Bp=a.Ay.a((function(e){var t=e.theme;return je(je({},Dp(t)),{textDecoration:"none"})})),Fp=a.Ay.span((function(e){var t=e.theme;return{display:"flex",alignItems:"center",gap:22,"& .iconContainer":{position:"relative",borderRadius:"100%",width:27,height:27,minWidth:27,minHeight:27,display:"flex",alignItems:"center",justifyContent:"center","& svg:not(.badgeIcon)":{width:12,height:12},"& svg.badgeIcon":{width:8,height:8,fill:Wn(t,"menu.vertical.notificationColor",_),position:"absolute",top:4,right:3}},"& .labelContainer":{fontFamily:"'Inter', sans-serif",fontSize:14}}})),Up=function(e){var t=e.icon,n=e.name,a=e.badge;return r.createElement(Fp,{className:"option"},r.createElement("span",{className:"iconContainer"},t,a&&r.createElement(ro,{className:"badgeIcon"})),r.createElement("span",{className:"labelContainer"},n))},zp=function(e){var t=e.children,n=e.icon,a=e.id,o=e.name,i=e.path,s=e.onClick,l=e.badge,c=e.currentPath,u=e.visibleTooltip,d=void 0!==u&&u,p=e.isVisible,m=void 0===p||p,f=(0,r.useState)(!1),h=f[0],g=f[1];(0,r.useEffect)((function(){t&&t.length>0&&t.findIndex((function(e){return e.path&&(null==c?void 0:c.startsWith(e.path))}))>=0&&g(!0)}),[c,t]);var E=!1;return c&&i&&c.startsWith(i)&&(E=!0),t&&0===t.length||!m?null:t&&t.length>0?0===t.filter((function(e){return!1!==e.isVisible})).length?null:r.createElement(Mp,null,r.createElement(Ga,{tooltip:d?o:"",placement:"right"},r.createElement(Pp,{id:a,type:"button",onClick:function(){g(!h)},className:"menuItemButton"},r.createElement(Up,{icon:n,name:o,badge:!!l}),r.createElement(pd,{className:"statusArrow"},h?r.createElement(js,null):r.createElement(Vs,null)))),h&&r.createElement(pd,{className:"subItemsBox"},t.map((function(e){return r.createElement(Ga,{tooltip:d?e.name:"",placement:"right"},r.createElement(zp,{onClick:s,name:e.name,badge:e.badge,icon:e.icon,id:e.id,path:e.path,group:e.group,currentPath:c}))})))):(null==i?void 0:i.match(/^(https?:\/\/)?([\da-z\u0430-\u044f\.\-_]+)\.([a-z\u0430-\u044f\._]{2,6})([a-z\u0430-\u044f\d\.\-\?\/&=#%_]*)*/))?r.createElement(Ga,{tooltip:d?o:"",placement:"right"},r.createElement(Bp,{className:"menuItemButton",id:a,href:i,target:"_blank"},r.createElement(Up,{icon:n,name:o,badge:!!l}))):r.createElement(Ga,{tooltip:d?o:"",placement:"right"},r.createElement(Pp,{className:"menuItemButton ".concat(E?"selected":""),type:"button",id:a,onClick:function(){s&&s(i||"")}},r.createElement(Up,{icon:n,name:o,badge:!!l})))},Hp=a.Ay.div((function(e){var t=e.theme;return{borderBottom:"".concat(Wn(t,"menu.vertical.sectionDividerColor",V)," 1px solid"),margin:"30px 25px 0",paddingBottom:5,userSelect:"none","& > .labelHeader":{fontSize:14,color:Wn(t,"menu.vertical.sectionLabelColor",l),paddingBottom:6,display:"block"}}})),Gp=function(e){var t=e.label,n=e.divider;return r.createElement(Hp,{className:"menuHeader",divider:n},r.createElement("span",{className:"labelHeader"},t))},jp=a.Ay.div((function(e){var t=e.theme,n=e.sx;return je({width:250,maxWidth:250,minWidth:250,height:"100vh",overflow:"auto",position:"relative",scrollbarWidth:"none",msOverflowStyle:"none","&::-webkit-scrollbar":{width:5},"&::-webkit-scrollbar-thumb":{background:Wn(t,"menu.vertical.sectionDividerColor",V),borderRadius:0},"&::-webkit-scrollbar-track":{background:Wn(t,"borderColor",d),boxShadow:"inset 0px 0px 0px 0px ".concat(Wn(t,"borderColor",d)),borderRadius:0},background:Wn(t,"menu.vertical.background",U),transitionDuration:"0.3s","& .menuContainer":{height:"inherit",position:"relative",display:"flex",flexDirection:"column","& .collapseButton":{position:"absolute",right:11,top:10,"& > svg":{width:12,height:12,fill:Wn(t,"menu.vertical.menuCollapseColor",Z)}}},"& .menuLogoContainer":{position:"relative",margin:"20px 30px 0",paddingBottom:20,borderBottom:"".concat(Wn(t,"menu.vertical.sectionDividerColor",V)," 1px solid")},"& .collapsedMenuHeader":{display:"none"},"& .menuItems":{display:"flex",flexDirection:"column",flexGrow:1},"& .menuHeaderContainer":{cursor:"pointer"},"&.collapsed":{width:80,minWidth:80,boxSizing:"content-box","& .collapseButton, & .menuLogoContainer":{display:"none"},"& .labelHeader":{display:"none"},"& .collapsedMenuHeader":{display:"flex",position:"relative",alignItems:"center",justifyContent:"center",width:43,height:43,minWidth:43,minHeight:43,border:"".concat(Wn(t,"menu.vertical.iconBorderColor",$)," 1px solid"),backgroundColor:Wn(t,"menu.vertical.iconBGColor",W),borderRadius:"100%",margin:"25px 0","&:hover":{borderColor:Wn(t,"menu.vertical.hoverSelectedIconBorder",l)},"& .collapsedIcon":{display:"inline-flex",color:Wn(t,"menu.vertical.menuCollapseColor",Z),"& svg":{width:30,height:30}},"& svg":{width:36,height:36}},"& .menuHeader":{marginLeft:0,marginRight:0,marginTop:0},"& .labelContainer":{display:"none"},"& .subItemsBox":{padding:0},"& span":{display:"flex",padding:0,justifyContent:"center"},"& .menuItemButton":{padding:0,display:"flex",justifyContent:"center",position:"relative"},"& .menuHeaderContainer":{display:"flex",justifyContent:"center"},"& .statusArrow":{position:"absolute",left:"50%",top:"50%",transform:"translateX(50%) translateY(20%)"}}},n)})),Vp=function(e){var t=e.applicationLogo,n=e.options,a=e.displayGroupTitles,o=e.signOutAction,i=e.callPathAction,s=e.isOpen,l=e.collapseAction,c=e.currentPath,u=e.endComponent,d=e.sx,p="";return r.createElement(jp,{sx:d,className:"menuBox ".concat(s?"":"collapsed")},r.createElement(pd,{className:"menuContainer"},r.createElement(pd,{className:"menuHeaderContainer",onClick:l},r.createElement(pd,{className:"collapseButton"},r.createElement(il,null)),r.createElement(pd,{className:"menuLogoContainer"},r.createElement(zr,je({inverse:!0},t))),r.createElement(pd,{className:"collapsedMenuHeader"},r.createElement(Ga,{tooltip:"Expand Menu",placement:"right"},r.createElement("span",{className:"collapsedIcon"},r.createElement(co,null))))),r.createElement(pd,{className:"menuItems"},n&&n.map((function(e){var t=null;return a&&e.group&&p!==e.group&&(p=e.group,t=r.createElement(Gp,{label:e.group})),r.createElement(r.Fragment,{key:"menu-section-".concat(e.group||"common","-").concat(e.id||e.name)},t,r.createElement(zp,{onClick:function(t){e.onClick?e.onClick(t):i(t)},icon:e.icon,name:e.name,group:e.group,id:e.id,path:e.path,currentPath:c,badge:e.badge,children:e.children,visibleTooltip:!s}))})),o&&r.createElement(pd,{sx:{marginTop:"auto"}},u,r.createElement(Gp,{label:""}),r.createElement(zp,{id:"sign-out",group:"common",name:"Sign Out",icon:r.createElement(Zi,null),onClick:o,visibleTooltip:!s})))))},Zp=a.Ay.div((function(e){var t=e.theme,n=e.sx;return je({width:"100vw",height:"100vh",overflow:"auto",position:"fixed",top:0,left:0,background:Wn(t,"menu.vertical.background",U),transitionDuration:"0.3s","& .menuContainer":{height:"inherit",position:"relative",display:"flex",flexDirection:"column","& .collapseButton":{position:"absolute",right:15,top:15,"& > svg":{width:20,height:20,fill:Wn(t,"menu.vertical.menuCollapseColor",Z)}}},"& .menuLogoContainer":{display:"flex",justifyContent:"center",position:"relative",margin:"20px 30px 0","& svg":{width:150}},"& .collapsedMenuHeader":{display:"none"},"& .menuItems":{display:"flex",flexDirection:"column",flexGrow:1,height:"100%"},"& .menuHeaderContainer":{cursor:"pointer"}},n)})),Wp=function(e){var t=e.applicationLogo,n=e.options,a=e.displayGroupTitles,o=e.signOutAction,i=e.callPathAction,s=e.collapseAction,l=e.currentPath,c=e.endComponent,u="";return r.createElement(Zp,null,r.createElement(pd,{className:"menuContainer"},r.createElement(pd,{className:"menuHeaderContainer",onClick:s},r.createElement(pd,{className:"collapseButton"},r.createElement(vs,null)),r.createElement(pd,{className:"menuLogoContainer"},r.createElement(zr,je({inverse:!0},t))),r.createElement(pd,{className:"collapsedMenuHeader"},r.createElement(Ga,{tooltip:"Expand Menu"},r.createElement("span",{className:"collapsedIcon"},r.createElement(co,null))))),r.createElement(pd,{className:"menuItems"},n&&n.map((function(e){var t=null;return a&&e.group&&u!==e.group&&(u=e.group,t=r.createElement(Gp,{label:e.group})),r.createElement(r.Fragment,{key:"menu-section-".concat(e.group,"-").concat(e.id)},t,r.createElement(zp,{onClick:function(t){if(e.onClick)return e.onClick(t),void s();i(t),s()},icon:e.icon,name:e.name,group:e.group,id:e.id,path:e.path,currentPath:l,badge:e.badge,children:e.children}))})),o&&r.createElement(pd,{sx:{marginTop:"auto"}},c,r.createElement(Gp,{label:""}),r.createElement(zp,{group:"common",name:"Sign Out",icon:r.createElement(Zi,null),onClick:o})))))},$p=a.Ay.div((function(e){var t=e.theme,n=e.sx;return je({"& .headerBar":{padding:15,display:"flex",justifyContent:"space-between",background:Wn(t,"menu.horizontal.menuHeaderBackground",U),alignItems:"center","& svg":{width:150}},"& .sections":{backgroundColor:"#ff0",width:"100%",height:45,display:"flex",overflowY:"hidden",overflowX:"auto",scrollbarWidth:"none",msOverflowStyle:"none","&::-webkit-scrollbar":{width:0,height:0}}},n)})),qp=function(e){var t=e.applicationLogo,n=e.options,a=e.displayGroupTitles,i=e.signOutAction,s=e.callPathAction,l=e.horizontal,c=e.currentPath,u=e.endComponent,d=e.sx,p=(0,r.useState)(!1),m=p[0],f=p[1];return r.createElement(r.Fragment,null,r.createElement($p,{className:"menuBox",sx:d},r.createElement(pd,{className:"headerBar"},r.createElement(zr,je({inverse:!0},t)),r.createElement(Il,{id:"menu-open",onClick:function(){f(!0)}},r.createElement(Bi,null))),l&&r.createElement(pd,null,"middleComponent"),r.createElement(pd,{className:"menuOpen"})),m&&(0,o.createPortal)(r.createElement(Wp,{options:n,applicationLogo:t,callPathAction:s,isOpen:m,collapseAction:function(){f(!1)},signOutAction:i,displayGroupTitles:a,currentPath:c,endComponent:u}),document.body))},Yp=function(e){var t=e.horizontal,n=void 0!==t&&t,a=e.mobileModeAuto,o=void 0===a||a,s=Ve(e,["horizontal","mobileModeAuto"]),l=(0,r.useState)(!1),c=l[0],u=l[1];return(0,r.useEffect)((function(){var e=Id((function(){var e=document.documentElement.offsetWidth;u(e<=i.md)}),400);window.addEventListener("resize",e)})),c&&o?r.createElement(qp,je({},s)):n?r.createElement(Lp,je({},s)):(s.middleComponent&&console.warn("Middle component is set, this cannot be rendered in Vertical Menu"),r.createElement(Vp,je({},s)))},Kp=(a.Ay.button((function(e){var t=e.sx,n=e.theme;return je({display:"flex",cursor:"pointer",alignItems:"center",backgroundColor:"transparent",borderRadius:3,padding:5,height:10,fontSize:10,border:"none",color:Wn(n,"buttons.regular.enabled.text",m),"& svg":{width:16,height:16},"&:hover":{color:Wn(n,"buttons.regular.hover.text",m),backgroundColor:Wn(n,"buttons.regular.hover.background",h)},"&:active":{color:Wn(n,"buttons.regular.pressed.text",m),backgroundColor:Wn(n,"buttons.regular.pressed.background",g)},"&:disabled":{color:Wn(n,"buttons.regular.disabled.text",A),backgroundColor:"transparent",cursor:"not-allowed"}},t)})),function(e){var t=e.selectedTab,n=e.useRouteTabs,a=e.id,o=e.children;return n||t===a?r.createElement(pd,{id:a},o):null}),Xp=a.Ay.button((function(e){var t=e.theme,n=e.horizontal;return{cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"flex-start",gap:10,height:n?50:60,width:n?"auto":255,padding:"0 16px",border:"none",fontSize:14,fontWeight:n?"bold":"inherit",backgroundColor:n?Wn(t,"tabs.horizontal.buttons.backgroundColor","transparent"):Wn(t,"tabs.vertical.buttons.backgroundColor",x),color:Wn(t,n?"tabs.horizontal.buttons.labelColor":"tabs.vertical.buttons.labelColor",m),borderBottom:n?"transparent 2px solid":"".concat(Wn(t,"tabs.vertical.borders",q)," 1px solid"),"&:hover":{backgroundColor:Wn(t,n?"tabs.horizontal.buttons.backgroundColor":"tabs.vertical.buttons.hoverBackground","transparent"),color:Wn(t,n?"tabs.horizontal.buttons.hoverLabelColor":"tabs.vertical.buttons.hoverLabelColor",b)},"&:disabled":{cursor:"not-allowed",backgroundColor:n?Wn(t,"tabs.horizontal.buttons.backgroundColor","transparent"):Wn(t,"tabs.vertical.buttons.disabledBackgroundColor",T),color:Wn(t,n?"tabs.horizontal.buttons.disabledColor":"tabs.vertical.buttons.disabledColor",A)},"& svg":{width:18,height:18},"&.selected":{fontWeight:"bold",backgroundColor:n?Wn(t,"tabs.horizontal.buttons.backgroundColor","transparent"):Wn(t,"tabs.vertical.buttons.selectedBackground",w),color:Wn(t,n?"tabs.horizontal.buttons.selectedLabelColor":"tabs.vertical.buttons.selectedLabelColor",b),borderBottom:n?"".concat(Wn(t,"tabs.horizontal.selectedIndicatorColor",b)," 2px solid"):"".concat(Wn(t,"tabs.vertical.borders",q)," 1px solid")}}})),Qp=function(e){var t=e.horizontal,n=e.id,a=e.onClick,o=e.label,i=e.disabled,s=e.icon,l=e.selected;return r.createElement(Xp,{horizontal:!!t,id:n,onClick:function(){return a()},disabled:i,className:"".concat(l?"selected":"")},s,o)},Jp=a.Ay.div((function(e){var t=e.theme,n=e.horizontal,r=e.horizontalBarBackground?Wn(t,"tabs.horizontal.backgroundColor","transparent"):"transparent";return{display:"flex",flexDirection:n?"column":"row",height:"100%","& .optionsContainer":{display:"flex",border:n?"none":"".concat(Wn(t,"tabs.vertical.borders",q)," 1px solid"),borderBottom:"".concat(n?Wn(t,"borderColor",d):Wn(t,"tabs.vertical.borders",q)," 1px solid"),backgroundColor:n?r:Wn(t,"tabs.vertical.backgroundColor",x),width:n?"100%":"auto",alignItems:n?"center":"flex-start",gap:10,"& .optionsList":{display:"flex",flexDirection:n?"row":"column",flexGrow:1,width:n?"100%":"auto"}},"& .tabsPanels":{flexGrow:1,width:"100%",padding:15,border:n?"none":"".concat(Wn(t,"tabs.vertical.borders",q)," 1px solid"),borderLeft:"none"}}})),em=function(e){var t=e.horizontal,n=e.options,a=e.currentTabOrPath,o=e.useRouteTabs,i=void 0!==o&&o,s=e.routes,l=e.onTabClick,c=e.optionsInitialComponent,u=e.optionsEndComponent,d=e.horizontalBarBackground,p=e.sx;return r.createElement(Jp,{className:"tabs-container",horizontal:!!t,horizontalBarBackground:!!d,sx:p},r.createElement(pd,{className:"optionsContainer"},c&&r.createElement(pd,null,c),r.createElement(pd,{className:"optionsList"},n.map((function(e,n){return e?r.createElement(Qp,{key:"v-tab-".concat(n),id:e.tabConfig.id,onClick:function(){l(i?e.tabConfig.to||"":e.tabConfig.id)},horizontal:!!t,label:e.tabConfig.label,disabled:!!e.tabConfig.disabled,icon:e.tabConfig.icon,selected:i?e.tabConfig.to===a:e.tabConfig.id===a}):null}))),u&&r.createElement(pd,null,u)),r.createElement(pd,{className:"tabsPanels"},i?r.createElement(Kp,{id:"routes-tab-container",useRouteTabs:!!i},s):n.map((function(e,t){return e.tabConfig.disabled?null:r.createElement(Kp,{key:"v-tab-p-".concat(t),id:e.tabConfig.id,selectedTab:a,useRouteTabs:!!i},e?e.content:null)}))))};class tm{constructor(e,t,n){this.property=e,this.normal=t,n&&(this.space=n)}}function nm(e,t){const n={},r={};let a=-1;for(;++a"xlink:"+t.slice(5).toLowerCase(),properties:{xLinkActuate:null,xLinkArcRole:null,xLinkHref:null,xLinkRole:null,xLinkShow:null,xLinkTitle:null,xLinkType:null}}),_m=vm({space:"xml",transform:(e,t)=>"xml:"+t.slice(3).toLowerCase(),properties:{xmlLang:null,xmlBase:null,xmlSpace:null}});function Sm(e,t){return t in e?e[t]:t}function Tm(e,t){return Sm(e,t.toLowerCase())}const Am=vm({space:"xmlns",attributes:{xmlnsxlink:"xmlns:xlink"},transform:Tm,properties:{xmlns:null,xmlnsXLink:null}}),Cm=vm({transform:(e,t)=>"role"===t?t:"aria-"+t.slice(4).toLowerCase(),properties:{ariaActiveDescendant:null,ariaAtomic:sm,ariaAutoComplete:null,ariaBusy:sm,ariaChecked:sm,ariaColCount:cm,ariaColIndex:cm,ariaColSpan:cm,ariaControls:um,ariaCurrent:null,ariaDescribedBy:um,ariaDetails:null,ariaDisabled:sm,ariaDropEffect:um,ariaErrorMessage:null,ariaExpanded:sm,ariaFlowTo:um,ariaGrabbed:sm,ariaHasPopup:null,ariaHidden:sm,ariaInvalid:null,ariaKeyShortcuts:null,ariaLabel:null,ariaLabelledBy:um,ariaLevel:cm,ariaLive:null,ariaModal:sm,ariaMultiLine:sm,ariaMultiSelectable:sm,ariaOrientation:null,ariaOwns:um,ariaPlaceholder:null,ariaPosInSet:cm,ariaPressed:sm,ariaReadOnly:sm,ariaRelevant:null,ariaRequired:sm,ariaRoleDescription:um,ariaRowCount:cm,ariaRowIndex:cm,ariaRowSpan:cm,ariaSelected:sm,ariaSetSize:cm,ariaSort:null,ariaValueMax:cm,ariaValueMin:cm,ariaValueNow:cm,ariaValueText:null,role:null}}),wm=vm({space:"html",attributes:{acceptcharset:"accept-charset",classname:"class",htmlfor:"for",httpequiv:"http-equiv"},transform:Tm,mustUseProperty:["checked","multiple","muted","selected"],properties:{abbr:null,accept:dm,acceptCharset:um,accessKey:um,action:null,allow:null,allowFullScreen:im,allowPaymentRequest:im,allowUserMedia:im,alt:null,as:null,async:im,autoCapitalize:null,autoComplete:um,autoFocus:im,autoPlay:im,blocking:um,capture:null,charSet:null,checked:im,cite:null,className:um,cols:cm,colSpan:null,content:null,contentEditable:sm,controls:im,controlsList:um,coords:cm|dm,crossOrigin:null,data:null,dateTime:null,decoding:null,default:im,defer:im,dir:null,dirName:null,disabled:im,download:lm,draggable:sm,encType:null,enterKeyHint:null,fetchPriority:null,form:null,formAction:null,formEncType:null,formMethod:null,formNoValidate:im,formTarget:null,headers:um,height:cm,hidden:im,high:cm,href:null,hrefLang:null,htmlFor:um,httpEquiv:um,id:null,imageSizes:null,imageSrcSet:null,inert:im,inputMode:null,integrity:null,is:null,isMap:im,itemId:null,itemProp:um,itemRef:um,itemScope:im,itemType:um,kind:null,label:null,lang:null,language:null,list:null,loading:null,loop:im,low:cm,manifest:null,max:null,maxLength:cm,media:null,method:null,min:null,minLength:cm,multiple:im,muted:im,name:null,nonce:null,noModule:im,noValidate:im,onAbort:null,onAfterPrint:null,onAuxClick:null,onBeforeMatch:null,onBeforePrint:null,onBeforeToggle:null,onBeforeUnload:null,onBlur:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onContextLost:null,onContextMenu:null,onContextRestored:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnded:null,onError:null,onFocus:null,onFormData:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLanguageChange:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadEnd:null,onLoadStart:null,onMessage:null,onMessageError:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRejectionHandled:null,onReset:null,onResize:null,onScroll:null,onScrollEnd:null,onSecurityPolicyViolation:null,onSeeked:null,onSeeking:null,onSelect:null,onSlotChange:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnhandledRejection:null,onUnload:null,onVolumeChange:null,onWaiting:null,onWheel:null,open:im,optimum:cm,pattern:null,ping:um,placeholder:null,playsInline:im,popover:null,popoverTarget:null,popoverTargetAction:null,poster:null,preload:null,readOnly:im,referrerPolicy:null,rel:um,required:im,reversed:im,rows:cm,rowSpan:cm,sandbox:um,scope:null,scoped:im,seamless:im,selected:im,shadowRootDelegatesFocus:im,shadowRootMode:null,shape:null,size:cm,sizes:null,slot:null,span:cm,spellCheck:sm,src:null,srcDoc:null,srcLang:null,srcSet:null,start:cm,step:null,style:null,tabIndex:cm,target:null,title:null,translate:null,type:null,typeMustMatch:im,useMap:null,value:sm,width:cm,wrap:null,align:null,aLink:null,archive:um,axis:null,background:null,bgColor:null,border:cm,borderColor:null,bottomMargin:cm,cellPadding:null,cellSpacing:null,char:null,charOff:null,classId:null,clear:null,code:null,codeBase:null,codeType:null,color:null,compact:im,declare:im,event:null,face:null,frame:null,frameBorder:null,hSpace:cm,leftMargin:cm,link:null,longDesc:null,lowSrc:null,marginHeight:cm,marginWidth:cm,noResize:im,noHref:im,noShade:im,noWrap:im,object:null,profile:null,prompt:null,rev:null,rightMargin:cm,rules:null,scheme:null,scrolling:sm,standby:null,summary:null,text:null,topMargin:cm,valueType:null,version:null,vAlign:null,vLink:null,vSpace:cm,allowTransparency:null,autoCorrect:null,autoSave:null,disablePictureInPicture:im,disableRemotePlayback:im,prefix:null,property:null,results:cm,security:null,unselectable:null}}),Nm=vm({space:"svg",attributes:{accentHeight:"accent-height",alignmentBaseline:"alignment-baseline",arabicForm:"arabic-form",baselineShift:"baseline-shift",capHeight:"cap-height",className:"class",clipPath:"clip-path",clipRule:"clip-rule",colorInterpolation:"color-interpolation",colorInterpolationFilters:"color-interpolation-filters",colorProfile:"color-profile",colorRendering:"color-rendering",crossOrigin:"crossorigin",dataType:"datatype",dominantBaseline:"dominant-baseline",enableBackground:"enable-background",fillOpacity:"fill-opacity",fillRule:"fill-rule",floodColor:"flood-color",floodOpacity:"flood-opacity",fontFamily:"font-family",fontSize:"font-size",fontSizeAdjust:"font-size-adjust",fontStretch:"font-stretch",fontStyle:"font-style",fontVariant:"font-variant",fontWeight:"font-weight",glyphName:"glyph-name",glyphOrientationHorizontal:"glyph-orientation-horizontal",glyphOrientationVertical:"glyph-orientation-vertical",hrefLang:"hreflang",horizAdvX:"horiz-adv-x",horizOriginX:"horiz-origin-x",horizOriginY:"horiz-origin-y",imageRendering:"image-rendering",letterSpacing:"letter-spacing",lightingColor:"lighting-color",markerEnd:"marker-end",markerMid:"marker-mid",markerStart:"marker-start",navDown:"nav-down",navDownLeft:"nav-down-left",navDownRight:"nav-down-right",navLeft:"nav-left",navNext:"nav-next",navPrev:"nav-prev",navRight:"nav-right",navUp:"nav-up",navUpLeft:"nav-up-left",navUpRight:"nav-up-right",onAbort:"onabort",onActivate:"onactivate",onAfterPrint:"onafterprint",onBeforePrint:"onbeforeprint",onBegin:"onbegin",onCancel:"oncancel",onCanPlay:"oncanplay",onCanPlayThrough:"oncanplaythrough",onChange:"onchange",onClick:"onclick",onClose:"onclose",onCopy:"oncopy",onCueChange:"oncuechange",onCut:"oncut",onDblClick:"ondblclick",onDrag:"ondrag",onDragEnd:"ondragend",onDragEnter:"ondragenter",onDragExit:"ondragexit",onDragLeave:"ondragleave",onDragOver:"ondragover",onDragStart:"ondragstart",onDrop:"ondrop",onDurationChange:"ondurationchange",onEmptied:"onemptied",onEnd:"onend",onEnded:"onended",onError:"onerror",onFocus:"onfocus",onFocusIn:"onfocusin",onFocusOut:"onfocusout",onHashChange:"onhashchange",onInput:"oninput",onInvalid:"oninvalid",onKeyDown:"onkeydown",onKeyPress:"onkeypress",onKeyUp:"onkeyup",onLoad:"onload",onLoadedData:"onloadeddata",onLoadedMetadata:"onloadedmetadata",onLoadStart:"onloadstart",onMessage:"onmessage",onMouseDown:"onmousedown",onMouseEnter:"onmouseenter",onMouseLeave:"onmouseleave",onMouseMove:"onmousemove",onMouseOut:"onmouseout",onMouseOver:"onmouseover",onMouseUp:"onmouseup",onMouseWheel:"onmousewheel",onOffline:"onoffline",onOnline:"ononline",onPageHide:"onpagehide",onPageShow:"onpageshow",onPaste:"onpaste",onPause:"onpause",onPlay:"onplay",onPlaying:"onplaying",onPopState:"onpopstate",onProgress:"onprogress",onRateChange:"onratechange",onRepeat:"onrepeat",onReset:"onreset",onResize:"onresize",onScroll:"onscroll",onSeeked:"onseeked",onSeeking:"onseeking",onSelect:"onselect",onShow:"onshow",onStalled:"onstalled",onStorage:"onstorage",onSubmit:"onsubmit",onSuspend:"onsuspend",onTimeUpdate:"ontimeupdate",onToggle:"ontoggle",onUnload:"onunload",onVolumeChange:"onvolumechange",onWaiting:"onwaiting",onZoom:"onzoom",overlinePosition:"overline-position",overlineThickness:"overline-thickness",paintOrder:"paint-order",panose1:"panose-1",pointerEvents:"pointer-events",referrerPolicy:"referrerpolicy",renderingIntent:"rendering-intent",shapeRendering:"shape-rendering",stopColor:"stop-color",stopOpacity:"stop-opacity",strikethroughPosition:"strikethrough-position",strikethroughThickness:"strikethrough-thickness",strokeDashArray:"stroke-dasharray",strokeDashOffset:"stroke-dashoffset",strokeLineCap:"stroke-linecap",strokeLineJoin:"stroke-linejoin",strokeMiterLimit:"stroke-miterlimit",strokeOpacity:"stroke-opacity",strokeWidth:"stroke-width",tabIndex:"tabindex",textAnchor:"text-anchor",textDecoration:"text-decoration",textRendering:"text-rendering",transformOrigin:"transform-origin",typeOf:"typeof",underlinePosition:"underline-position",underlineThickness:"underline-thickness",unicodeBidi:"unicode-bidi",unicodeRange:"unicode-range",unitsPerEm:"units-per-em",vAlphabetic:"v-alphabetic",vHanging:"v-hanging",vIdeographic:"v-ideographic",vMathematical:"v-mathematical",vectorEffect:"vector-effect",vertAdvY:"vert-adv-y",vertOriginX:"vert-origin-x",vertOriginY:"vert-origin-y",wordSpacing:"word-spacing",writingMode:"writing-mode",xHeight:"x-height",playbackOrder:"playbackorder",timelineBegin:"timelinebegin"},transform:Sm,properties:{about:pm,accentHeight:cm,accumulate:null,additive:null,alignmentBaseline:null,alphabetic:cm,amplitude:cm,arabicForm:null,ascent:cm,attributeName:null,attributeType:null,azimuth:cm,bandwidth:null,baselineShift:null,baseFrequency:null,baseProfile:null,bbox:null,begin:null,bias:cm,by:null,calcMode:null,capHeight:cm,className:um,clip:null,clipPath:null,clipPathUnits:null,clipRule:null,color:null,colorInterpolation:null,colorInterpolationFilters:null,colorProfile:null,colorRendering:null,content:null,contentScriptType:null,contentStyleType:null,crossOrigin:null,cursor:null,cx:null,cy:null,d:null,dataType:null,defaultAction:null,descent:cm,diffuseConstant:cm,direction:null,display:null,dur:null,divisor:cm,dominantBaseline:null,download:im,dx:null,dy:null,edgeMode:null,editable:null,elevation:cm,enableBackground:null,end:null,event:null,exponent:cm,externalResourcesRequired:null,fill:null,fillOpacity:cm,fillRule:null,filter:null,filterRes:null,filterUnits:null,floodColor:null,floodOpacity:null,focusable:null,focusHighlight:null,fontFamily:null,fontSize:null,fontSizeAdjust:null,fontStretch:null,fontStyle:null,fontVariant:null,fontWeight:null,format:null,fr:null,from:null,fx:null,fy:null,g1:dm,g2:dm,glyphName:dm,glyphOrientationHorizontal:null,glyphOrientationVertical:null,glyphRef:null,gradientTransform:null,gradientUnits:null,handler:null,hanging:cm,hatchContentUnits:null,hatchUnits:null,height:null,href:null,hrefLang:null,horizAdvX:cm,horizOriginX:cm,horizOriginY:cm,id:null,ideographic:cm,imageRendering:null,initialVisibility:null,in:null,in2:null,intercept:cm,k:cm,k1:cm,k2:cm,k3:cm,k4:cm,kernelMatrix:pm,kernelUnitLength:null,keyPoints:null,keySplines:null,keyTimes:null,kerning:null,lang:null,lengthAdjust:null,letterSpacing:null,lightingColor:null,limitingConeAngle:cm,local:null,markerEnd:null,markerMid:null,markerStart:null,markerHeight:null,markerUnits:null,markerWidth:null,mask:null,maskContentUnits:null,maskUnits:null,mathematical:null,max:null,media:null,mediaCharacterEncoding:null,mediaContentEncodings:null,mediaSize:cm,mediaTime:null,method:null,min:null,mode:null,name:null,navDown:null,navDownLeft:null,navDownRight:null,navLeft:null,navNext:null,navPrev:null,navRight:null,navUp:null,navUpLeft:null,navUpRight:null,numOctaves:null,observer:null,offset:null,onAbort:null,onActivate:null,onAfterPrint:null,onBeforePrint:null,onBegin:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnd:null,onEnded:null,onError:null,onFocus:null,onFocusIn:null,onFocusOut:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadStart:null,onMessage:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onMouseWheel:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRepeat:null,onReset:null,onResize:null,onScroll:null,onSeeked:null,onSeeking:null,onSelect:null,onShow:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnload:null,onVolumeChange:null,onWaiting:null,onZoom:null,opacity:null,operator:null,order:null,orient:null,orientation:null,origin:null,overflow:null,overlay:null,overlinePosition:cm,overlineThickness:cm,paintOrder:null,panose1:null,path:null,pathLength:cm,patternContentUnits:null,patternTransform:null,patternUnits:null,phase:null,ping:um,pitch:null,playbackOrder:null,pointerEvents:null,points:null,pointsAtX:cm,pointsAtY:cm,pointsAtZ:cm,preserveAlpha:null,preserveAspectRatio:null,primitiveUnits:null,propagate:null,property:pm,r:null,radius:null,referrerPolicy:null,refX:null,refY:null,rel:pm,rev:pm,renderingIntent:null,repeatCount:null,repeatDur:null,requiredExtensions:pm,requiredFeatures:pm,requiredFonts:pm,requiredFormats:pm,resource:null,restart:null,result:null,rotate:null,rx:null,ry:null,scale:null,seed:null,shapeRendering:null,side:null,slope:null,snapshotTime:null,specularConstant:cm,specularExponent:cm,spreadMethod:null,spacing:null,startOffset:null,stdDeviation:null,stemh:null,stemv:null,stitchTiles:null,stopColor:null,stopOpacity:null,strikethroughPosition:cm,strikethroughThickness:cm,string:null,stroke:null,strokeDashArray:pm,strokeDashOffset:null,strokeLineCap:null,strokeLineJoin:null,strokeMiterLimit:cm,strokeOpacity:cm,strokeWidth:null,style:null,surfaceScale:cm,syncBehavior:null,syncBehaviorDefault:null,syncMaster:null,syncTolerance:null,syncToleranceDefault:null,systemLanguage:pm,tabIndex:cm,tableValues:null,target:null,targetX:cm,targetY:cm,textAnchor:null,textDecoration:null,textRendering:null,textLength:null,timelineBegin:null,title:null,transformBehavior:null,type:null,typeOf:pm,to:null,transform:null,transformOrigin:null,u1:null,u2:null,underlinePosition:cm,underlineThickness:cm,unicode:null,unicodeBidi:null,unicodeRange:null,unitsPerEm:cm,values:null,vAlphabetic:cm,vMathematical:cm,vectorEffect:null,vHanging:cm,vIdeographic:cm,version:null,vertAdvY:cm,vertOriginX:cm,vertOriginY:cm,viewBox:null,viewTarget:null,visibility:null,width:null,widths:null,wordSpacing:null,writingMode:null,x:null,x1:null,x2:null,xChannelSelector:null,xHeight:cm,y:null,y1:null,y2:null,yChannelSelector:null,z:null,zoomAndPan:null}}),Im=/^data[-\w.:]+$/i,xm=/-[a-z]/g,Rm=/[A-Z]/g;function km(e,t){const n=rm(t);let r=t,a=am;if(n in e.normal)return e.property[e.normal[n]];if(n.length>4&&"data"===n.slice(0,4)&&Im.test(t)){if("-"===t.charAt(4)){const e=t.slice(5).replace(xm,Lm);r="data"+e.charAt(0).toUpperCase()+e.slice(1)}else{const e=t.slice(4);if(!xm.test(e)){let n=e.replace(Rm,Om);"-"!==n.charAt(0)&&(n="-"+n),t="data"+n}}a=gm}return new a(r,t)}function Om(e){return"-"+e.toLowerCase()}function Lm(e){return e.charAt(1).toUpperCase()}const Dm=nm([_m,ym,Am,Cm,wm],"html"),Mm=nm([_m,ym,Am,Cm,Nm],"svg");function Pm(e){const t=[],n=String(e||"");let r=n.indexOf(","),a=0,o=!1;for(;!o;){-1===r&&(r=n.length,o=!0);const e=n.slice(a,r).trim();!e&&o||t.push(e),a=r+1,r=n.indexOf(",",a)}return t}function Bm(e,t){const n=t||{};return(""===e[e.length-1]?[...e,""]:e).join((n.padRight?" ":"")+","+(!1===n.padLeft?"":" ")).trim()}const Fm=/[#.]/g;function Um(e){const t=String(e||"").trim();return t?t.split(/[ \t\n\r\f]+/g):[]}function zm(e){return e.join(" ").trim()}const Hm=new Set(["button","menu","reset","submit"]),Gm={}.hasOwnProperty;function jm(e,t,n){const r=n&&function(e){const t={};let n=-1;for(;++n2?s-2:0),c=2;c-1&&ee)return{line:t+1,column:e-(t>0?n[t-1]:0)+1,offset:e}},toOffset:function(e){const t=e&&e.line,r=e&&e.column;if("number"==typeof t&&"number"==typeof r&&!Number.isNaN(t)&&!Number.isNaN(r)&&t-1 in n){const e=(n[t-2]||0)+r-1||0;if(e>-1&&e=55296&&e<=57343}function pf(e){return 32!==e&&10!==e&&13!==e&&9!==e&&12!==e&&e>=1&&e<=31||e>=127&&e<=159}function mf(e){return e>=64976&&e<=65007||af.has(e)}var ff,hf;!function(e){e.controlCharacterInInputStream="control-character-in-input-stream",e.noncharacterInInputStream="noncharacter-in-input-stream",e.surrogateInInputStream="surrogate-in-input-stream",e.nonVoidHtmlElementStartTagWithTrailingSolidus="non-void-html-element-start-tag-with-trailing-solidus",e.endTagWithAttributes="end-tag-with-attributes",e.endTagWithTrailingSolidus="end-tag-with-trailing-solidus",e.unexpectedSolidusInTag="unexpected-solidus-in-tag",e.unexpectedNullCharacter="unexpected-null-character",e.unexpectedQuestionMarkInsteadOfTagName="unexpected-question-mark-instead-of-tag-name",e.invalidFirstCharacterOfTagName="invalid-first-character-of-tag-name",e.unexpectedEqualsSignBeforeAttributeName="unexpected-equals-sign-before-attribute-name",e.missingEndTagName="missing-end-tag-name",e.unexpectedCharacterInAttributeName="unexpected-character-in-attribute-name",e.unknownNamedCharacterReference="unknown-named-character-reference",e.missingSemicolonAfterCharacterReference="missing-semicolon-after-character-reference",e.unexpectedCharacterAfterDoctypeSystemIdentifier="unexpected-character-after-doctype-system-identifier",e.unexpectedCharacterInUnquotedAttributeValue="unexpected-character-in-unquoted-attribute-value",e.eofBeforeTagName="eof-before-tag-name",e.eofInTag="eof-in-tag",e.missingAttributeValue="missing-attribute-value",e.missingWhitespaceBetweenAttributes="missing-whitespace-between-attributes",e.missingWhitespaceAfterDoctypePublicKeyword="missing-whitespace-after-doctype-public-keyword",e.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers="missing-whitespace-between-doctype-public-and-system-identifiers",e.missingWhitespaceAfterDoctypeSystemKeyword="missing-whitespace-after-doctype-system-keyword",e.missingQuoteBeforeDoctypePublicIdentifier="missing-quote-before-doctype-public-identifier",e.missingQuoteBeforeDoctypeSystemIdentifier="missing-quote-before-doctype-system-identifier",e.missingDoctypePublicIdentifier="missing-doctype-public-identifier",e.missingDoctypeSystemIdentifier="missing-doctype-system-identifier",e.abruptDoctypePublicIdentifier="abrupt-doctype-public-identifier",e.abruptDoctypeSystemIdentifier="abrupt-doctype-system-identifier",e.cdataInHtmlContent="cdata-in-html-content",e.incorrectlyOpenedComment="incorrectly-opened-comment",e.eofInScriptHtmlCommentLikeText="eof-in-script-html-comment-like-text",e.eofInDoctype="eof-in-doctype",e.nestedComment="nested-comment",e.abruptClosingOfEmptyComment="abrupt-closing-of-empty-comment",e.eofInComment="eof-in-comment",e.incorrectlyClosedComment="incorrectly-closed-comment",e.eofInCdata="eof-in-cdata",e.absenceOfDigitsInNumericCharacterReference="absence-of-digits-in-numeric-character-reference",e.nullCharacterReference="null-character-reference",e.surrogateCharacterReference="surrogate-character-reference",e.characterReferenceOutsideUnicodeRange="character-reference-outside-unicode-range",e.controlCharacterReference="control-character-reference",e.noncharacterCharacterReference="noncharacter-character-reference",e.missingWhitespaceBeforeDoctypeName="missing-whitespace-before-doctype-name",e.missingDoctypeName="missing-doctype-name",e.invalidCharacterSequenceAfterDoctypeName="invalid-character-sequence-after-doctype-name",e.duplicateAttribute="duplicate-attribute",e.nonConformingDoctype="non-conforming-doctype",e.missingDoctype="missing-doctype",e.misplacedDoctype="misplaced-doctype",e.endTagWithoutMatchingOpenElement="end-tag-without-matching-open-element",e.closingOfElementWithOpenChildElements="closing-of-element-with-open-child-elements",e.disallowedContentInNoscriptInHead="disallowed-content-in-noscript-in-head",e.openElementsLeftAfterEof="open-elements-left-after-eof",e.abandonedHeadElementChild="abandoned-head-element-child",e.misplacedStartTagForHeadElement="misplaced-start-tag-for-head-element",e.nestedNoscriptInHead="nested-noscript-in-head",e.eofInElementThatCanContainOnlyText="eof-in-element-that-can-contain-only-text"}(ff=ff||(ff={}));class gf{constructor(e){this.handler=e,this.html="",this.pos=-1,this.lastGapPos=-2,this.gapStack=[],this.skipNextNewLine=!1,this.lastChunkWritten=!1,this.endOfChunkHit=!1,this.bufferWaterline=65536,this.isEol=!1,this.lineStartPos=0,this.droppedBufferSize=0,this.line=1,this.lastErrOffset=-1}get col(){return this.pos-this.lineStartPos+Number(this.lastGapPos!==this.pos)}get offset(){return this.droppedBufferSize+this.pos}getError(e){const{line:t,col:n,offset:r}=this;return{code:e,startLine:t,endLine:t,startCol:n,endCol:n,startOffset:r,endOffset:r}}_err(e){this.handler.onParseError&&this.lastErrOffset!==this.offset&&(this.lastErrOffset=this.offset,this.handler.onParseError(this.getError(e)))}_addGap(){this.gapStack.push(this.lastGapPos),this.lastGapPos=this.pos}_processSurrogate(e){if(this.pos!==this.html.length-1){const t=this.html.charCodeAt(this.pos+1);if(function(e){return e>=56320&&e<=57343}(t))return this.pos++,this._addGap(),1024*(e-55296)+9216+t}else if(!this.lastChunkWritten)return this.endOfChunkHit=!0,sf.EOF;return this._err(ff.surrogateInInputStream),e}willDropParsedChunk(){return this.pos>this.bufferWaterline}dropParsedChunk(){this.willDropParsedChunk()&&(this.html=this.html.substring(this.pos),this.lineStartPos-=this.pos,this.droppedBufferSize+=this.pos,this.pos=0,this.lastGapPos=-2,this.gapStack.length=0)}write(e,t){this.html.length>0?this.html+=e:this.html=e,this.endOfChunkHit=!1,this.lastChunkWritten=t}insertHtmlAtCurrentPos(e){this.html=this.html.substring(0,this.pos+1)+e+this.html.substring(this.pos+1),this.endOfChunkHit=!1}startsWith(e,t){if(this.pos+e.length>this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,!1;if(t)return this.html.startsWith(e,this.pos);for(let n=0;n=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,sf.EOF;const n=this.html.charCodeAt(t);return n===sf.CARRIAGE_RETURN?sf.LINE_FEED:n}advance(){if(this.pos++,this.isEol&&(this.isEol=!1,this.line++,this.lineStartPos=this.pos),this.pos>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,sf.EOF;let e=this.html.charCodeAt(this.pos);return e===sf.CARRIAGE_RETURN?(this.isEol=!0,this.skipNextNewLine=!0,sf.LINE_FEED):e===sf.LINE_FEED&&(this.isEol=!0,this.skipNextNewLine)?(this.line--,this.skipNextNewLine=!1,this._addGap(),this.advance()):(this.skipNextNewLine=!1,df(e)&&(e=this._processSurrogate(e)),null===this.handler.onParseError||e>31&&e<127||e===sf.LINE_FEED||e===sf.CARRIAGE_RETURN||e>159&&e<64976||this._checkForProblematicCharacters(e),e)}_checkForProblematicCharacters(e){pf(e)?this._err(ff.controlCharacterInInputStream):mf(e)&&this._err(ff.noncharacterInInputStream)}retreat(e){for(this.pos-=e;this.pos=0;n--)if(e.attrs[n].name===t)return e.attrs[n].value;return null}!function(e){e[e.CHARACTER=0]="CHARACTER",e[e.NULL_CHARACTER=1]="NULL_CHARACTER",e[e.WHITESPACE_CHARACTER=2]="WHITESPACE_CHARACTER",e[e.START_TAG=3]="START_TAG",e[e.END_TAG=4]="END_TAG",e[e.COMMENT=5]="COMMENT",e[e.DOCTYPE=6]="DOCTYPE",e[e.EOF=7]="EOF",e[e.HIBERNATION=8]="HIBERNATION"}(hf=hf||(hf={}));var bf,vf=new Uint16Array('\u1d41<\xd5\u0131\u028a\u049d\u057b\u05d0\u0675\u06de\u07a2\u07d6\u080f\u0a4a\u0a91\u0da1\u0e6d\u0f09\u0f26\u10ca\u1228\u12e1\u1415\u149d\u14c3\u14df\u1525\0\0\0\0\0\0\u156b\u16cd\u198d\u1c12\u1ddd\u1f7e\u2060\u21b0\u228d\u23c0\u23fb\u2442\u2824\u2912\u2d08\u2e48\u2fce\u3016\u32ba\u3639\u37ac\u38fe\u3a28\u3a71\u3ae0\u3b2e\u0800EMabcfglmnoprstu\\bfms\x7f\x84\x8b\x90\x95\x98\xa6\xb3\xb9\xc8\xcflig\u803b\xc6\u40c6P\u803b&\u4026cute\u803b\xc1\u40c1reve;\u4102\u0100iyx}rc\u803b\xc2\u40c2;\u4410r;\uc000\ud835\udd04rave\u803b\xc0\u40c0pha;\u4391acr;\u4100d;\u6a53\u0100gp\x9d\xa1on;\u4104f;\uc000\ud835\udd38plyFunction;\u6061ing\u803b\xc5\u40c5\u0100cs\xbe\xc3r;\uc000\ud835\udc9cign;\u6254ilde\u803b\xc3\u40c3ml\u803b\xc4\u40c4\u0400aceforsu\xe5\xfb\xfe\u0117\u011c\u0122\u0127\u012a\u0100cr\xea\xf2kslash;\u6216\u0176\xf6\xf8;\u6ae7ed;\u6306y;\u4411\u0180crt\u0105\u010b\u0114ause;\u6235noullis;\u612ca;\u4392r;\uc000\ud835\udd05pf;\uc000\ud835\udd39eve;\u42d8c\xf2\u0113mpeq;\u624e\u0700HOacdefhilorsu\u014d\u0151\u0156\u0180\u019e\u01a2\u01b5\u01b7\u01ba\u01dc\u0215\u0273\u0278\u027ecy;\u4427PY\u803b\xa9\u40a9\u0180cpy\u015d\u0162\u017aute;\u4106\u0100;i\u0167\u0168\u62d2talDifferentialD;\u6145leys;\u612d\u0200aeio\u0189\u018e\u0194\u0198ron;\u410cdil\u803b\xc7\u40c7rc;\u4108nint;\u6230ot;\u410a\u0100dn\u01a7\u01adilla;\u40b8terDot;\u40b7\xf2\u017fi;\u43a7rcle\u0200DMPT\u01c7\u01cb\u01d1\u01d6ot;\u6299inus;\u6296lus;\u6295imes;\u6297o\u0100cs\u01e2\u01f8kwiseContourIntegral;\u6232eCurly\u0100DQ\u0203\u020foubleQuote;\u601duote;\u6019\u0200lnpu\u021e\u0228\u0247\u0255on\u0100;e\u0225\u0226\u6237;\u6a74\u0180git\u022f\u0236\u023aruent;\u6261nt;\u622fourIntegral;\u622e\u0100fr\u024c\u024e;\u6102oduct;\u6210nterClockwiseContourIntegral;\u6233oss;\u6a2fcr;\uc000\ud835\udc9ep\u0100;C\u0284\u0285\u62d3ap;\u624d\u0580DJSZacefios\u02a0\u02ac\u02b0\u02b4\u02b8\u02cb\u02d7\u02e1\u02e6\u0333\u048d\u0100;o\u0179\u02a5trahd;\u6911cy;\u4402cy;\u4405cy;\u440f\u0180grs\u02bf\u02c4\u02c7ger;\u6021r;\u61a1hv;\u6ae4\u0100ay\u02d0\u02d5ron;\u410e;\u4414l\u0100;t\u02dd\u02de\u6207a;\u4394r;\uc000\ud835\udd07\u0100af\u02eb\u0327\u0100cm\u02f0\u0322ritical\u0200ADGT\u0300\u0306\u0316\u031ccute;\u40b4o\u0174\u030b\u030d;\u42d9bleAcute;\u42ddrave;\u4060ilde;\u42dcond;\u62c4ferentialD;\u6146\u0470\u033d\0\0\0\u0342\u0354\0\u0405f;\uc000\ud835\udd3b\u0180;DE\u0348\u0349\u034d\u40a8ot;\u60dcqual;\u6250ble\u0300CDLRUV\u0363\u0372\u0382\u03cf\u03e2\u03f8ontourIntegra\xec\u0239o\u0274\u0379\0\0\u037b\xbb\u0349nArrow;\u61d3\u0100eo\u0387\u03a4ft\u0180ART\u0390\u0396\u03a1rrow;\u61d0ightArrow;\u61d4e\xe5\u02cang\u0100LR\u03ab\u03c4eft\u0100AR\u03b3\u03b9rrow;\u67f8ightArrow;\u67faightArrow;\u67f9ight\u0100AT\u03d8\u03derrow;\u61d2ee;\u62a8p\u0241\u03e9\0\0\u03efrrow;\u61d1ownArrow;\u61d5erticalBar;\u6225n\u0300ABLRTa\u0412\u042a\u0430\u045e\u047f\u037crrow\u0180;BU\u041d\u041e\u0422\u6193ar;\u6913pArrow;\u61f5reve;\u4311eft\u02d2\u043a\0\u0446\0\u0450ightVector;\u6950eeVector;\u695eector\u0100;B\u0459\u045a\u61bdar;\u6956ight\u01d4\u0467\0\u0471eeVector;\u695fector\u0100;B\u047a\u047b\u61c1ar;\u6957ee\u0100;A\u0486\u0487\u62a4rrow;\u61a7\u0100ct\u0492\u0497r;\uc000\ud835\udc9frok;\u4110\u0800NTacdfglmopqstux\u04bd\u04c0\u04c4\u04cb\u04de\u04e2\u04e7\u04ee\u04f5\u0521\u052f\u0536\u0552\u055d\u0560\u0565G;\u414aH\u803b\xd0\u40d0cute\u803b\xc9\u40c9\u0180aiy\u04d2\u04d7\u04dcron;\u411arc\u803b\xca\u40ca;\u442dot;\u4116r;\uc000\ud835\udd08rave\u803b\xc8\u40c8ement;\u6208\u0100ap\u04fa\u04fecr;\u4112ty\u0253\u0506\0\0\u0512mallSquare;\u65fberySmallSquare;\u65ab\u0100gp\u0526\u052aon;\u4118f;\uc000\ud835\udd3csilon;\u4395u\u0100ai\u053c\u0549l\u0100;T\u0542\u0543\u6a75ilde;\u6242librium;\u61cc\u0100ci\u0557\u055ar;\u6130m;\u6a73a;\u4397ml\u803b\xcb\u40cb\u0100ip\u056a\u056fsts;\u6203onentialE;\u6147\u0280cfios\u0585\u0588\u058d\u05b2\u05ccy;\u4424r;\uc000\ud835\udd09lled\u0253\u0597\0\0\u05a3mallSquare;\u65fcerySmallSquare;\u65aa\u0370\u05ba\0\u05bf\0\0\u05c4f;\uc000\ud835\udd3dAll;\u6200riertrf;\u6131c\xf2\u05cb\u0600JTabcdfgorst\u05e8\u05ec\u05ef\u05fa\u0600\u0612\u0616\u061b\u061d\u0623\u066c\u0672cy;\u4403\u803b>\u403emma\u0100;d\u05f7\u05f8\u4393;\u43dcreve;\u411e\u0180eiy\u0607\u060c\u0610dil;\u4122rc;\u411c;\u4413ot;\u4120r;\uc000\ud835\udd0a;\u62d9pf;\uc000\ud835\udd3eeater\u0300EFGLST\u0635\u0644\u064e\u0656\u065b\u0666qual\u0100;L\u063e\u063f\u6265ess;\u62dbullEqual;\u6267reater;\u6aa2ess;\u6277lantEqual;\u6a7eilde;\u6273cr;\uc000\ud835\udca2;\u626b\u0400Aacfiosu\u0685\u068b\u0696\u069b\u069e\u06aa\u06be\u06caRDcy;\u442a\u0100ct\u0690\u0694ek;\u42c7;\u405eirc;\u4124r;\u610clbertSpace;\u610b\u01f0\u06af\0\u06b2f;\u610dizontalLine;\u6500\u0100ct\u06c3\u06c5\xf2\u06a9rok;\u4126mp\u0144\u06d0\u06d8ownHum\xf0\u012fqual;\u624f\u0700EJOacdfgmnostu\u06fa\u06fe\u0703\u0707\u070e\u071a\u071e\u0721\u0728\u0744\u0778\u078b\u078f\u0795cy;\u4415lig;\u4132cy;\u4401cute\u803b\xcd\u40cd\u0100iy\u0713\u0718rc\u803b\xce\u40ce;\u4418ot;\u4130r;\u6111rave\u803b\xcc\u40cc\u0180;ap\u0720\u072f\u073f\u0100cg\u0734\u0737r;\u412ainaryI;\u6148lie\xf3\u03dd\u01f4\u0749\0\u0762\u0100;e\u074d\u074e\u622c\u0100gr\u0753\u0758ral;\u622bsection;\u62c2isible\u0100CT\u076c\u0772omma;\u6063imes;\u6062\u0180gpt\u077f\u0783\u0788on;\u412ef;\uc000\ud835\udd40a;\u4399cr;\u6110ilde;\u4128\u01eb\u079a\0\u079ecy;\u4406l\u803b\xcf\u40cf\u0280cfosu\u07ac\u07b7\u07bc\u07c2\u07d0\u0100iy\u07b1\u07b5rc;\u4134;\u4419r;\uc000\ud835\udd0dpf;\uc000\ud835\udd41\u01e3\u07c7\0\u07ccr;\uc000\ud835\udca5rcy;\u4408kcy;\u4404\u0380HJacfos\u07e4\u07e8\u07ec\u07f1\u07fd\u0802\u0808cy;\u4425cy;\u440cppa;\u439a\u0100ey\u07f6\u07fbdil;\u4136;\u441ar;\uc000\ud835\udd0epf;\uc000\ud835\udd42cr;\uc000\ud835\udca6\u0580JTaceflmost\u0825\u0829\u082c\u0850\u0863\u09b3\u09b8\u09c7\u09cd\u0a37\u0a47cy;\u4409\u803b<\u403c\u0280cmnpr\u0837\u083c\u0841\u0844\u084dute;\u4139bda;\u439bg;\u67ealacetrf;\u6112r;\u619e\u0180aey\u0857\u085c\u0861ron;\u413ddil;\u413b;\u441b\u0100fs\u0868\u0970t\u0500ACDFRTUVar\u087e\u08a9\u08b1\u08e0\u08e6\u08fc\u092f\u095b\u0390\u096a\u0100nr\u0883\u088fgleBracket;\u67e8row\u0180;BR\u0899\u089a\u089e\u6190ar;\u61e4ightArrow;\u61c6eiling;\u6308o\u01f5\u08b7\0\u08c3bleBracket;\u67e6n\u01d4\u08c8\0\u08d2eeVector;\u6961ector\u0100;B\u08db\u08dc\u61c3ar;\u6959loor;\u630aight\u0100AV\u08ef\u08f5rrow;\u6194ector;\u694e\u0100er\u0901\u0917e\u0180;AV\u0909\u090a\u0910\u62a3rrow;\u61a4ector;\u695aiangle\u0180;BE\u0924\u0925\u0929\u62b2ar;\u69cfqual;\u62b4p\u0180DTV\u0937\u0942\u094cownVector;\u6951eeVector;\u6960ector\u0100;B\u0956\u0957\u61bfar;\u6958ector\u0100;B\u0965\u0966\u61bcar;\u6952ight\xe1\u039cs\u0300EFGLST\u097e\u098b\u0995\u099d\u09a2\u09adqualGreater;\u62daullEqual;\u6266reater;\u6276ess;\u6aa1lantEqual;\u6a7dilde;\u6272r;\uc000\ud835\udd0f\u0100;e\u09bd\u09be\u62d8ftarrow;\u61daidot;\u413f\u0180npw\u09d4\u0a16\u0a1bg\u0200LRlr\u09de\u09f7\u0a02\u0a10eft\u0100AR\u09e6\u09ecrrow;\u67f5ightArrow;\u67f7ightArrow;\u67f6eft\u0100ar\u03b3\u0a0aight\xe1\u03bfight\xe1\u03caf;\uc000\ud835\udd43er\u0100LR\u0a22\u0a2ceftArrow;\u6199ightArrow;\u6198\u0180cht\u0a3e\u0a40\u0a42\xf2\u084c;\u61b0rok;\u4141;\u626a\u0400acefiosu\u0a5a\u0a5d\u0a60\u0a77\u0a7c\u0a85\u0a8b\u0a8ep;\u6905y;\u441c\u0100dl\u0a65\u0a6fiumSpace;\u605flintrf;\u6133r;\uc000\ud835\udd10nusPlus;\u6213pf;\uc000\ud835\udd44c\xf2\u0a76;\u439c\u0480Jacefostu\u0aa3\u0aa7\u0aad\u0ac0\u0b14\u0b19\u0d91\u0d97\u0d9ecy;\u440acute;\u4143\u0180aey\u0ab4\u0ab9\u0aberon;\u4147dil;\u4145;\u441d\u0180gsw\u0ac7\u0af0\u0b0eative\u0180MTV\u0ad3\u0adf\u0ae8ediumSpace;\u600bhi\u0100cn\u0ae6\u0ad8\xeb\u0ad9eryThi\xee\u0ad9ted\u0100GL\u0af8\u0b06reaterGreate\xf2\u0673essLes\xf3\u0a48Line;\u400ar;\uc000\ud835\udd11\u0200Bnpt\u0b22\u0b28\u0b37\u0b3areak;\u6060BreakingSpace;\u40a0f;\u6115\u0680;CDEGHLNPRSTV\u0b55\u0b56\u0b6a\u0b7c\u0ba1\u0beb\u0c04\u0c5e\u0c84\u0ca6\u0cd8\u0d61\u0d85\u6aec\u0100ou\u0b5b\u0b64ngruent;\u6262pCap;\u626doubleVerticalBar;\u6226\u0180lqx\u0b83\u0b8a\u0b9bement;\u6209ual\u0100;T\u0b92\u0b93\u6260ilde;\uc000\u2242\u0338ists;\u6204reater\u0380;EFGLST\u0bb6\u0bb7\u0bbd\u0bc9\u0bd3\u0bd8\u0be5\u626fqual;\u6271ullEqual;\uc000\u2267\u0338reater;\uc000\u226b\u0338ess;\u6279lantEqual;\uc000\u2a7e\u0338ilde;\u6275ump\u0144\u0bf2\u0bfdownHump;\uc000\u224e\u0338qual;\uc000\u224f\u0338e\u0100fs\u0c0a\u0c27tTriangle\u0180;BE\u0c1a\u0c1b\u0c21\u62eaar;\uc000\u29cf\u0338qual;\u62ecs\u0300;EGLST\u0c35\u0c36\u0c3c\u0c44\u0c4b\u0c58\u626equal;\u6270reater;\u6278ess;\uc000\u226a\u0338lantEqual;\uc000\u2a7d\u0338ilde;\u6274ested\u0100GL\u0c68\u0c79reaterGreater;\uc000\u2aa2\u0338essLess;\uc000\u2aa1\u0338recedes\u0180;ES\u0c92\u0c93\u0c9b\u6280qual;\uc000\u2aaf\u0338lantEqual;\u62e0\u0100ei\u0cab\u0cb9verseElement;\u620cghtTriangle\u0180;BE\u0ccb\u0ccc\u0cd2\u62ebar;\uc000\u29d0\u0338qual;\u62ed\u0100qu\u0cdd\u0d0cuareSu\u0100bp\u0ce8\u0cf9set\u0100;E\u0cf0\u0cf3\uc000\u228f\u0338qual;\u62e2erset\u0100;E\u0d03\u0d06\uc000\u2290\u0338qual;\u62e3\u0180bcp\u0d13\u0d24\u0d4eset\u0100;E\u0d1b\u0d1e\uc000\u2282\u20d2qual;\u6288ceeds\u0200;EST\u0d32\u0d33\u0d3b\u0d46\u6281qual;\uc000\u2ab0\u0338lantEqual;\u62e1ilde;\uc000\u227f\u0338erset\u0100;E\u0d58\u0d5b\uc000\u2283\u20d2qual;\u6289ilde\u0200;EFT\u0d6e\u0d6f\u0d75\u0d7f\u6241qual;\u6244ullEqual;\u6247ilde;\u6249erticalBar;\u6224cr;\uc000\ud835\udca9ilde\u803b\xd1\u40d1;\u439d\u0700Eacdfgmoprstuv\u0dbd\u0dc2\u0dc9\u0dd5\u0ddb\u0de0\u0de7\u0dfc\u0e02\u0e20\u0e22\u0e32\u0e3f\u0e44lig;\u4152cute\u803b\xd3\u40d3\u0100iy\u0dce\u0dd3rc\u803b\xd4\u40d4;\u441eblac;\u4150r;\uc000\ud835\udd12rave\u803b\xd2\u40d2\u0180aei\u0dee\u0df2\u0df6cr;\u414cga;\u43a9cron;\u439fpf;\uc000\ud835\udd46enCurly\u0100DQ\u0e0e\u0e1aoubleQuote;\u601cuote;\u6018;\u6a54\u0100cl\u0e27\u0e2cr;\uc000\ud835\udcaaash\u803b\xd8\u40d8i\u016c\u0e37\u0e3cde\u803b\xd5\u40d5es;\u6a37ml\u803b\xd6\u40d6er\u0100BP\u0e4b\u0e60\u0100ar\u0e50\u0e53r;\u603eac\u0100ek\u0e5a\u0e5c;\u63deet;\u63b4arenthesis;\u63dc\u0480acfhilors\u0e7f\u0e87\u0e8a\u0e8f\u0e92\u0e94\u0e9d\u0eb0\u0efcrtialD;\u6202y;\u441fr;\uc000\ud835\udd13i;\u43a6;\u43a0usMinus;\u40b1\u0100ip\u0ea2\u0eadncareplan\xe5\u069df;\u6119\u0200;eio\u0eb9\u0eba\u0ee0\u0ee4\u6abbcedes\u0200;EST\u0ec8\u0ec9\u0ecf\u0eda\u627aqual;\u6aaflantEqual;\u627cilde;\u627eme;\u6033\u0100dp\u0ee9\u0eeeuct;\u620fortion\u0100;a\u0225\u0ef9l;\u621d\u0100ci\u0f01\u0f06r;\uc000\ud835\udcab;\u43a8\u0200Ufos\u0f11\u0f16\u0f1b\u0f1fOT\u803b"\u4022r;\uc000\ud835\udd14pf;\u611acr;\uc000\ud835\udcac\u0600BEacefhiorsu\u0f3e\u0f43\u0f47\u0f60\u0f73\u0fa7\u0faa\u0fad\u1096\u10a9\u10b4\u10bearr;\u6910G\u803b\xae\u40ae\u0180cnr\u0f4e\u0f53\u0f56ute;\u4154g;\u67ebr\u0100;t\u0f5c\u0f5d\u61a0l;\u6916\u0180aey\u0f67\u0f6c\u0f71ron;\u4158dil;\u4156;\u4420\u0100;v\u0f78\u0f79\u611cerse\u0100EU\u0f82\u0f99\u0100lq\u0f87\u0f8eement;\u620builibrium;\u61cbpEquilibrium;\u696fr\xbb\u0f79o;\u43a1ght\u0400ACDFTUVa\u0fc1\u0feb\u0ff3\u1022\u1028\u105b\u1087\u03d8\u0100nr\u0fc6\u0fd2gleBracket;\u67e9row\u0180;BL\u0fdc\u0fdd\u0fe1\u6192ar;\u61e5eftArrow;\u61c4eiling;\u6309o\u01f5\u0ff9\0\u1005bleBracket;\u67e7n\u01d4\u100a\0\u1014eeVector;\u695dector\u0100;B\u101d\u101e\u61c2ar;\u6955loor;\u630b\u0100er\u102d\u1043e\u0180;AV\u1035\u1036\u103c\u62a2rrow;\u61a6ector;\u695biangle\u0180;BE\u1050\u1051\u1055\u62b3ar;\u69d0qual;\u62b5p\u0180DTV\u1063\u106e\u1078ownVector;\u694feeVector;\u695cector\u0100;B\u1082\u1083\u61bear;\u6954ector\u0100;B\u1091\u1092\u61c0ar;\u6953\u0100pu\u109b\u109ef;\u611dndImplies;\u6970ightarrow;\u61db\u0100ch\u10b9\u10bcr;\u611b;\u61b1leDelayed;\u69f4\u0680HOacfhimoqstu\u10e4\u10f1\u10f7\u10fd\u1119\u111e\u1151\u1156\u1161\u1167\u11b5\u11bb\u11bf\u0100Cc\u10e9\u10eeHcy;\u4429y;\u4428FTcy;\u442ccute;\u415a\u0280;aeiy\u1108\u1109\u110e\u1113\u1117\u6abcron;\u4160dil;\u415erc;\u415c;\u4421r;\uc000\ud835\udd16ort\u0200DLRU\u112a\u1134\u113e\u1149ownArrow\xbb\u041eeftArrow\xbb\u089aightArrow\xbb\u0fddpArrow;\u6191gma;\u43a3allCircle;\u6218pf;\uc000\ud835\udd4a\u0272\u116d\0\0\u1170t;\u621aare\u0200;ISU\u117b\u117c\u1189\u11af\u65a1ntersection;\u6293u\u0100bp\u118f\u119eset\u0100;E\u1197\u1198\u628fqual;\u6291erset\u0100;E\u11a8\u11a9\u6290qual;\u6292nion;\u6294cr;\uc000\ud835\udcaear;\u62c6\u0200bcmp\u11c8\u11db\u1209\u120b\u0100;s\u11cd\u11ce\u62d0et\u0100;E\u11cd\u11d5qual;\u6286\u0100ch\u11e0\u1205eeds\u0200;EST\u11ed\u11ee\u11f4\u11ff\u627bqual;\u6ab0lantEqual;\u627dilde;\u627fTh\xe1\u0f8c;\u6211\u0180;es\u1212\u1213\u1223\u62d1rset\u0100;E\u121c\u121d\u6283qual;\u6287et\xbb\u1213\u0580HRSacfhiors\u123e\u1244\u1249\u1255\u125e\u1271\u1276\u129f\u12c2\u12c8\u12d1ORN\u803b\xde\u40deADE;\u6122\u0100Hc\u124e\u1252cy;\u440by;\u4426\u0100bu\u125a\u125c;\u4009;\u43a4\u0180aey\u1265\u126a\u126fron;\u4164dil;\u4162;\u4422r;\uc000\ud835\udd17\u0100ei\u127b\u1289\u01f2\u1280\0\u1287efore;\u6234a;\u4398\u0100cn\u128e\u1298kSpace;\uc000\u205f\u200aSpace;\u6009lde\u0200;EFT\u12ab\u12ac\u12b2\u12bc\u623cqual;\u6243ullEqual;\u6245ilde;\u6248pf;\uc000\ud835\udd4bipleDot;\u60db\u0100ct\u12d6\u12dbr;\uc000\ud835\udcafrok;\u4166\u0ae1\u12f7\u130e\u131a\u1326\0\u132c\u1331\0\0\0\0\0\u1338\u133d\u1377\u1385\0\u13ff\u1404\u140a\u1410\u0100cr\u12fb\u1301ute\u803b\xda\u40dar\u0100;o\u1307\u1308\u619fcir;\u6949r\u01e3\u1313\0\u1316y;\u440eve;\u416c\u0100iy\u131e\u1323rc\u803b\xdb\u40db;\u4423blac;\u4170r;\uc000\ud835\udd18rave\u803b\xd9\u40d9acr;\u416a\u0100di\u1341\u1369er\u0100BP\u1348\u135d\u0100ar\u134d\u1350r;\u405fac\u0100ek\u1357\u1359;\u63dfet;\u63b5arenthesis;\u63ddon\u0100;P\u1370\u1371\u62c3lus;\u628e\u0100gp\u137b\u137fon;\u4172f;\uc000\ud835\udd4c\u0400ADETadps\u1395\u13ae\u13b8\u13c4\u03e8\u13d2\u13d7\u13f3rrow\u0180;BD\u1150\u13a0\u13a4ar;\u6912ownArrow;\u61c5ownArrow;\u6195quilibrium;\u696eee\u0100;A\u13cb\u13cc\u62a5rrow;\u61a5own\xe1\u03f3er\u0100LR\u13de\u13e8eftArrow;\u6196ightArrow;\u6197i\u0100;l\u13f9\u13fa\u43d2on;\u43a5ing;\u416ecr;\uc000\ud835\udcb0ilde;\u4168ml\u803b\xdc\u40dc\u0480Dbcdefosv\u1427\u142c\u1430\u1433\u143e\u1485\u148a\u1490\u1496ash;\u62abar;\u6aeby;\u4412ash\u0100;l\u143b\u143c\u62a9;\u6ae6\u0100er\u1443\u1445;\u62c1\u0180bty\u144c\u1450\u147aar;\u6016\u0100;i\u144f\u1455cal\u0200BLST\u1461\u1465\u146a\u1474ar;\u6223ine;\u407ceparator;\u6758ilde;\u6240ThinSpace;\u600ar;\uc000\ud835\udd19pf;\uc000\ud835\udd4dcr;\uc000\ud835\udcb1dash;\u62aa\u0280cefos\u14a7\u14ac\u14b1\u14b6\u14bcirc;\u4174dge;\u62c0r;\uc000\ud835\udd1apf;\uc000\ud835\udd4ecr;\uc000\ud835\udcb2\u0200fios\u14cb\u14d0\u14d2\u14d8r;\uc000\ud835\udd1b;\u439epf;\uc000\ud835\udd4fcr;\uc000\ud835\udcb3\u0480AIUacfosu\u14f1\u14f5\u14f9\u14fd\u1504\u150f\u1514\u151a\u1520cy;\u442fcy;\u4407cy;\u442ecute\u803b\xdd\u40dd\u0100iy\u1509\u150drc;\u4176;\u442br;\uc000\ud835\udd1cpf;\uc000\ud835\udd50cr;\uc000\ud835\udcb4ml;\u4178\u0400Hacdefos\u1535\u1539\u153f\u154b\u154f\u155d\u1560\u1564cy;\u4416cute;\u4179\u0100ay\u1544\u1549ron;\u417d;\u4417ot;\u417b\u01f2\u1554\0\u155boWidt\xe8\u0ad9a;\u4396r;\u6128pf;\u6124cr;\uc000\ud835\udcb5\u0be1\u1583\u158a\u1590\0\u15b0\u15b6\u15bf\0\0\0\0\u15c6\u15db\u15eb\u165f\u166d\0\u1695\u169b\u16b2\u16b9\0\u16becute\u803b\xe1\u40e1reve;\u4103\u0300;Ediuy\u159c\u159d\u15a1\u15a3\u15a8\u15ad\u623e;\uc000\u223e\u0333;\u623frc\u803b\xe2\u40e2te\u80bb\xb4\u0306;\u4430lig\u803b\xe6\u40e6\u0100;r\xb2\u15ba;\uc000\ud835\udd1erave\u803b\xe0\u40e0\u0100ep\u15ca\u15d6\u0100fp\u15cf\u15d4sym;\u6135\xe8\u15d3ha;\u43b1\u0100ap\u15dfc\u0100cl\u15e4\u15e7r;\u4101g;\u6a3f\u0264\u15f0\0\0\u160a\u0280;adsv\u15fa\u15fb\u15ff\u1601\u1607\u6227nd;\u6a55;\u6a5clope;\u6a58;\u6a5a\u0380;elmrsz\u1618\u1619\u161b\u161e\u163f\u164f\u1659\u6220;\u69a4e\xbb\u1619sd\u0100;a\u1625\u1626\u6221\u0461\u1630\u1632\u1634\u1636\u1638\u163a\u163c\u163e;\u69a8;\u69a9;\u69aa;\u69ab;\u69ac;\u69ad;\u69ae;\u69aft\u0100;v\u1645\u1646\u621fb\u0100;d\u164c\u164d\u62be;\u699d\u0100pt\u1654\u1657h;\u6222\xbb\xb9arr;\u637c\u0100gp\u1663\u1667on;\u4105f;\uc000\ud835\udd52\u0380;Eaeiop\u12c1\u167b\u167d\u1682\u1684\u1687\u168a;\u6a70cir;\u6a6f;\u624ad;\u624bs;\u4027rox\u0100;e\u12c1\u1692\xf1\u1683ing\u803b\xe5\u40e5\u0180cty\u16a1\u16a6\u16a8r;\uc000\ud835\udcb6;\u402amp\u0100;e\u12c1\u16af\xf1\u0288ilde\u803b\xe3\u40e3ml\u803b\xe4\u40e4\u0100ci\u16c2\u16c8onin\xf4\u0272nt;\u6a11\u0800Nabcdefiklnoprsu\u16ed\u16f1\u1730\u173c\u1743\u1748\u1778\u177d\u17e0\u17e6\u1839\u1850\u170d\u193d\u1948\u1970ot;\u6aed\u0100cr\u16f6\u171ek\u0200ceps\u1700\u1705\u170d\u1713ong;\u624cpsilon;\u43f6rime;\u6035im\u0100;e\u171a\u171b\u623dq;\u62cd\u0176\u1722\u1726ee;\u62bded\u0100;g\u172c\u172d\u6305e\xbb\u172drk\u0100;t\u135c\u1737brk;\u63b6\u0100oy\u1701\u1741;\u4431quo;\u601e\u0280cmprt\u1753\u175b\u1761\u1764\u1768aus\u0100;e\u010a\u0109ptyv;\u69b0s\xe9\u170cno\xf5\u0113\u0180ahw\u176f\u1771\u1773;\u43b2;\u6136een;\u626cr;\uc000\ud835\udd1fg\u0380costuvw\u178d\u179d\u17b3\u17c1\u17d5\u17db\u17de\u0180aiu\u1794\u1796\u179a\xf0\u0760rc;\u65efp\xbb\u1371\u0180dpt\u17a4\u17a8\u17adot;\u6a00lus;\u6a01imes;\u6a02\u0271\u17b9\0\0\u17becup;\u6a06ar;\u6605riangle\u0100du\u17cd\u17d2own;\u65bdp;\u65b3plus;\u6a04e\xe5\u1444\xe5\u14adarow;\u690d\u0180ako\u17ed\u1826\u1835\u0100cn\u17f2\u1823k\u0180lst\u17fa\u05ab\u1802ozenge;\u69ebriangle\u0200;dlr\u1812\u1813\u1818\u181d\u65b4own;\u65beeft;\u65c2ight;\u65b8k;\u6423\u01b1\u182b\0\u1833\u01b2\u182f\0\u1831;\u6592;\u65914;\u6593ck;\u6588\u0100eo\u183e\u184d\u0100;q\u1843\u1846\uc000=\u20e5uiv;\uc000\u2261\u20e5t;\u6310\u0200ptwx\u1859\u185e\u1867\u186cf;\uc000\ud835\udd53\u0100;t\u13cb\u1863om\xbb\u13cctie;\u62c8\u0600DHUVbdhmptuv\u1885\u1896\u18aa\u18bb\u18d7\u18db\u18ec\u18ff\u1905\u190a\u1910\u1921\u0200LRlr\u188e\u1890\u1892\u1894;\u6557;\u6554;\u6556;\u6553\u0280;DUdu\u18a1\u18a2\u18a4\u18a6\u18a8\u6550;\u6566;\u6569;\u6564;\u6567\u0200LRlr\u18b3\u18b5\u18b7\u18b9;\u655d;\u655a;\u655c;\u6559\u0380;HLRhlr\u18ca\u18cb\u18cd\u18cf\u18d1\u18d3\u18d5\u6551;\u656c;\u6563;\u6560;\u656b;\u6562;\u655fox;\u69c9\u0200LRlr\u18e4\u18e6\u18e8\u18ea;\u6555;\u6552;\u6510;\u650c\u0280;DUdu\u06bd\u18f7\u18f9\u18fb\u18fd;\u6565;\u6568;\u652c;\u6534inus;\u629flus;\u629eimes;\u62a0\u0200LRlr\u1919\u191b\u191d\u191f;\u655b;\u6558;\u6518;\u6514\u0380;HLRhlr\u1930\u1931\u1933\u1935\u1937\u1939\u193b\u6502;\u656a;\u6561;\u655e;\u653c;\u6524;\u651c\u0100ev\u0123\u1942bar\u803b\xa6\u40a6\u0200ceio\u1951\u1956\u195a\u1960r;\uc000\ud835\udcb7mi;\u604fm\u0100;e\u171a\u171cl\u0180;bh\u1968\u1969\u196b\u405c;\u69c5sub;\u67c8\u016c\u1974\u197el\u0100;e\u1979\u197a\u6022t\xbb\u197ap\u0180;Ee\u012f\u1985\u1987;\u6aae\u0100;q\u06dc\u06db\u0ce1\u19a7\0\u19e8\u1a11\u1a15\u1a32\0\u1a37\u1a50\0\0\u1ab4\0\0\u1ac1\0\0\u1b21\u1b2e\u1b4d\u1b52\0\u1bfd\0\u1c0c\u0180cpr\u19ad\u19b2\u19ddute;\u4107\u0300;abcds\u19bf\u19c0\u19c4\u19ca\u19d5\u19d9\u6229nd;\u6a44rcup;\u6a49\u0100au\u19cf\u19d2p;\u6a4bp;\u6a47ot;\u6a40;\uc000\u2229\ufe00\u0100eo\u19e2\u19e5t;\u6041\xee\u0693\u0200aeiu\u19f0\u19fb\u1a01\u1a05\u01f0\u19f5\0\u19f8s;\u6a4don;\u410ddil\u803b\xe7\u40e7rc;\u4109ps\u0100;s\u1a0c\u1a0d\u6a4cm;\u6a50ot;\u410b\u0180dmn\u1a1b\u1a20\u1a26il\u80bb\xb8\u01adptyv;\u69b2t\u8100\xa2;e\u1a2d\u1a2e\u40a2r\xe4\u01b2r;\uc000\ud835\udd20\u0180cei\u1a3d\u1a40\u1a4dy;\u4447ck\u0100;m\u1a47\u1a48\u6713ark\xbb\u1a48;\u43c7r\u0380;Ecefms\u1a5f\u1a60\u1a62\u1a6b\u1aa4\u1aaa\u1aae\u65cb;\u69c3\u0180;el\u1a69\u1a6a\u1a6d\u42c6q;\u6257e\u0261\u1a74\0\0\u1a88rrow\u0100lr\u1a7c\u1a81eft;\u61baight;\u61bb\u0280RSacd\u1a92\u1a94\u1a96\u1a9a\u1a9f\xbb\u0f47;\u64c8st;\u629birc;\u629aash;\u629dnint;\u6a10id;\u6aefcir;\u69c2ubs\u0100;u\u1abb\u1abc\u6663it\xbb\u1abc\u02ec\u1ac7\u1ad4\u1afa\0\u1b0aon\u0100;e\u1acd\u1ace\u403a\u0100;q\xc7\xc6\u026d\u1ad9\0\0\u1ae2a\u0100;t\u1ade\u1adf\u402c;\u4040\u0180;fl\u1ae8\u1ae9\u1aeb\u6201\xee\u1160e\u0100mx\u1af1\u1af6ent\xbb\u1ae9e\xf3\u024d\u01e7\u1afe\0\u1b07\u0100;d\u12bb\u1b02ot;\u6a6dn\xf4\u0246\u0180fry\u1b10\u1b14\u1b17;\uc000\ud835\udd54o\xe4\u0254\u8100\xa9;s\u0155\u1b1dr;\u6117\u0100ao\u1b25\u1b29rr;\u61b5ss;\u6717\u0100cu\u1b32\u1b37r;\uc000\ud835\udcb8\u0100bp\u1b3c\u1b44\u0100;e\u1b41\u1b42\u6acf;\u6ad1\u0100;e\u1b49\u1b4a\u6ad0;\u6ad2dot;\u62ef\u0380delprvw\u1b60\u1b6c\u1b77\u1b82\u1bac\u1bd4\u1bf9arr\u0100lr\u1b68\u1b6a;\u6938;\u6935\u0270\u1b72\0\0\u1b75r;\u62dec;\u62dfarr\u0100;p\u1b7f\u1b80\u61b6;\u693d\u0300;bcdos\u1b8f\u1b90\u1b96\u1ba1\u1ba5\u1ba8\u622arcap;\u6a48\u0100au\u1b9b\u1b9ep;\u6a46p;\u6a4aot;\u628dr;\u6a45;\uc000\u222a\ufe00\u0200alrv\u1bb5\u1bbf\u1bde\u1be3rr\u0100;m\u1bbc\u1bbd\u61b7;\u693cy\u0180evw\u1bc7\u1bd4\u1bd8q\u0270\u1bce\0\0\u1bd2re\xe3\u1b73u\xe3\u1b75ee;\u62ceedge;\u62cfen\u803b\xa4\u40a4earrow\u0100lr\u1bee\u1bf3eft\xbb\u1b80ight\xbb\u1bbde\xe4\u1bdd\u0100ci\u1c01\u1c07onin\xf4\u01f7nt;\u6231lcty;\u632d\u0980AHabcdefhijlorstuwz\u1c38\u1c3b\u1c3f\u1c5d\u1c69\u1c75\u1c8a\u1c9e\u1cac\u1cb7\u1cfb\u1cff\u1d0d\u1d7b\u1d91\u1dab\u1dbb\u1dc6\u1dcdr\xf2\u0381ar;\u6965\u0200glrs\u1c48\u1c4d\u1c52\u1c54ger;\u6020eth;\u6138\xf2\u1133h\u0100;v\u1c5a\u1c5b\u6010\xbb\u090a\u016b\u1c61\u1c67arow;\u690fa\xe3\u0315\u0100ay\u1c6e\u1c73ron;\u410f;\u4434\u0180;ao\u0332\u1c7c\u1c84\u0100gr\u02bf\u1c81r;\u61catseq;\u6a77\u0180glm\u1c91\u1c94\u1c98\u803b\xb0\u40b0ta;\u43b4ptyv;\u69b1\u0100ir\u1ca3\u1ca8sht;\u697f;\uc000\ud835\udd21ar\u0100lr\u1cb3\u1cb5\xbb\u08dc\xbb\u101e\u0280aegsv\u1cc2\u0378\u1cd6\u1cdc\u1ce0m\u0180;os\u0326\u1cca\u1cd4nd\u0100;s\u0326\u1cd1uit;\u6666amma;\u43ddin;\u62f2\u0180;io\u1ce7\u1ce8\u1cf8\u40f7de\u8100\xf7;o\u1ce7\u1cf0ntimes;\u62c7n\xf8\u1cf7cy;\u4452c\u026f\u1d06\0\0\u1d0arn;\u631eop;\u630d\u0280lptuw\u1d18\u1d1d\u1d22\u1d49\u1d55lar;\u4024f;\uc000\ud835\udd55\u0280;emps\u030b\u1d2d\u1d37\u1d3d\u1d42q\u0100;d\u0352\u1d33ot;\u6251inus;\u6238lus;\u6214quare;\u62a1blebarwedg\xe5\xfan\u0180adh\u112e\u1d5d\u1d67ownarrow\xf3\u1c83arpoon\u0100lr\u1d72\u1d76ef\xf4\u1cb4igh\xf4\u1cb6\u0162\u1d7f\u1d85karo\xf7\u0f42\u026f\u1d8a\0\0\u1d8ern;\u631fop;\u630c\u0180cot\u1d98\u1da3\u1da6\u0100ry\u1d9d\u1da1;\uc000\ud835\udcb9;\u4455l;\u69f6rok;\u4111\u0100dr\u1db0\u1db4ot;\u62f1i\u0100;f\u1dba\u1816\u65bf\u0100ah\u1dc0\u1dc3r\xf2\u0429a\xf2\u0fa6angle;\u69a6\u0100ci\u1dd2\u1dd5y;\u445fgrarr;\u67ff\u0900Dacdefglmnopqrstux\u1e01\u1e09\u1e19\u1e38\u0578\u1e3c\u1e49\u1e61\u1e7e\u1ea5\u1eaf\u1ebd\u1ee1\u1f2a\u1f37\u1f44\u1f4e\u1f5a\u0100Do\u1e06\u1d34o\xf4\u1c89\u0100cs\u1e0e\u1e14ute\u803b\xe9\u40e9ter;\u6a6e\u0200aioy\u1e22\u1e27\u1e31\u1e36ron;\u411br\u0100;c\u1e2d\u1e2e\u6256\u803b\xea\u40ealon;\u6255;\u444dot;\u4117\u0100Dr\u1e41\u1e45ot;\u6252;\uc000\ud835\udd22\u0180;rs\u1e50\u1e51\u1e57\u6a9aave\u803b\xe8\u40e8\u0100;d\u1e5c\u1e5d\u6a96ot;\u6a98\u0200;ils\u1e6a\u1e6b\u1e72\u1e74\u6a99nters;\u63e7;\u6113\u0100;d\u1e79\u1e7a\u6a95ot;\u6a97\u0180aps\u1e85\u1e89\u1e97cr;\u4113ty\u0180;sv\u1e92\u1e93\u1e95\u6205et\xbb\u1e93p\u01001;\u1e9d\u1ea4\u0133\u1ea1\u1ea3;\u6004;\u6005\u6003\u0100gs\u1eaa\u1eac;\u414bp;\u6002\u0100gp\u1eb4\u1eb8on;\u4119f;\uc000\ud835\udd56\u0180als\u1ec4\u1ece\u1ed2r\u0100;s\u1eca\u1ecb\u62d5l;\u69e3us;\u6a71i\u0180;lv\u1eda\u1edb\u1edf\u43b5on\xbb\u1edb;\u43f5\u0200csuv\u1eea\u1ef3\u1f0b\u1f23\u0100io\u1eef\u1e31rc\xbb\u1e2e\u0269\u1ef9\0\0\u1efb\xed\u0548ant\u0100gl\u1f02\u1f06tr\xbb\u1e5dess\xbb\u1e7a\u0180aei\u1f12\u1f16\u1f1als;\u403dst;\u625fv\u0100;D\u0235\u1f20D;\u6a78parsl;\u69e5\u0100Da\u1f2f\u1f33ot;\u6253rr;\u6971\u0180cdi\u1f3e\u1f41\u1ef8r;\u612fo\xf4\u0352\u0100ah\u1f49\u1f4b;\u43b7\u803b\xf0\u40f0\u0100mr\u1f53\u1f57l\u803b\xeb\u40ebo;\u60ac\u0180cip\u1f61\u1f64\u1f67l;\u4021s\xf4\u056e\u0100eo\u1f6c\u1f74ctatio\xee\u0559nential\xe5\u0579\u09e1\u1f92\0\u1f9e\0\u1fa1\u1fa7\0\0\u1fc6\u1fcc\0\u1fd3\0\u1fe6\u1fea\u2000\0\u2008\u205allingdotse\xf1\u1e44y;\u4444male;\u6640\u0180ilr\u1fad\u1fb3\u1fc1lig;\u8000\ufb03\u0269\u1fb9\0\0\u1fbdg;\u8000\ufb00ig;\u8000\ufb04;\uc000\ud835\udd23lig;\u8000\ufb01lig;\uc000fj\u0180alt\u1fd9\u1fdc\u1fe1t;\u666dig;\u8000\ufb02ns;\u65b1of;\u4192\u01f0\u1fee\0\u1ff3f;\uc000\ud835\udd57\u0100ak\u05bf\u1ff7\u0100;v\u1ffc\u1ffd\u62d4;\u6ad9artint;\u6a0d\u0100ao\u200c\u2055\u0100cs\u2011\u2052\u03b1\u201a\u2030\u2038\u2045\u2048\0\u2050\u03b2\u2022\u2025\u2027\u202a\u202c\0\u202e\u803b\xbd\u40bd;\u6153\u803b\xbc\u40bc;\u6155;\u6159;\u615b\u01b3\u2034\0\u2036;\u6154;\u6156\u02b4\u203e\u2041\0\0\u2043\u803b\xbe\u40be;\u6157;\u615c5;\u6158\u01b6\u204c\0\u204e;\u615a;\u615d8;\u615el;\u6044wn;\u6322cr;\uc000\ud835\udcbb\u0880Eabcdefgijlnorstv\u2082\u2089\u209f\u20a5\u20b0\u20b4\u20f0\u20f5\u20fa\u20ff\u2103\u2112\u2138\u0317\u213e\u2152\u219e\u0100;l\u064d\u2087;\u6a8c\u0180cmp\u2090\u2095\u209dute;\u41f5ma\u0100;d\u209c\u1cda\u43b3;\u6a86reve;\u411f\u0100iy\u20aa\u20aerc;\u411d;\u4433ot;\u4121\u0200;lqs\u063e\u0642\u20bd\u20c9\u0180;qs\u063e\u064c\u20c4lan\xf4\u0665\u0200;cdl\u0665\u20d2\u20d5\u20e5c;\u6aa9ot\u0100;o\u20dc\u20dd\u6a80\u0100;l\u20e2\u20e3\u6a82;\u6a84\u0100;e\u20ea\u20ed\uc000\u22db\ufe00s;\u6a94r;\uc000\ud835\udd24\u0100;g\u0673\u061bmel;\u6137cy;\u4453\u0200;Eaj\u065a\u210c\u210e\u2110;\u6a92;\u6aa5;\u6aa4\u0200Eaes\u211b\u211d\u2129\u2134;\u6269p\u0100;p\u2123\u2124\u6a8arox\xbb\u2124\u0100;q\u212e\u212f\u6a88\u0100;q\u212e\u211bim;\u62e7pf;\uc000\ud835\udd58\u0100ci\u2143\u2146r;\u610am\u0180;el\u066b\u214e\u2150;\u6a8e;\u6a90\u8300>;cdlqr\u05ee\u2160\u216a\u216e\u2173\u2179\u0100ci\u2165\u2167;\u6aa7r;\u6a7aot;\u62d7Par;\u6995uest;\u6a7c\u0280adels\u2184\u216a\u2190\u0656\u219b\u01f0\u2189\0\u218epro\xf8\u209er;\u6978q\u0100lq\u063f\u2196les\xf3\u2088i\xed\u066b\u0100en\u21a3\u21adrtneqq;\uc000\u2269\ufe00\xc5\u21aa\u0500Aabcefkosy\u21c4\u21c7\u21f1\u21f5\u21fa\u2218\u221d\u222f\u2268\u227dr\xf2\u03a0\u0200ilmr\u21d0\u21d4\u21d7\u21dbrs\xf0\u1484f\xbb\u2024il\xf4\u06a9\u0100dr\u21e0\u21e4cy;\u444a\u0180;cw\u08f4\u21eb\u21efir;\u6948;\u61adar;\u610firc;\u4125\u0180alr\u2201\u220e\u2213rts\u0100;u\u2209\u220a\u6665it\xbb\u220alip;\u6026con;\u62b9r;\uc000\ud835\udd25s\u0100ew\u2223\u2229arow;\u6925arow;\u6926\u0280amopr\u223a\u223e\u2243\u225e\u2263rr;\u61fftht;\u623bk\u0100lr\u2249\u2253eftarrow;\u61a9ightarrow;\u61aaf;\uc000\ud835\udd59bar;\u6015\u0180clt\u226f\u2274\u2278r;\uc000\ud835\udcbdas\xe8\u21f4rok;\u4127\u0100bp\u2282\u2287ull;\u6043hen\xbb\u1c5b\u0ae1\u22a3\0\u22aa\0\u22b8\u22c5\u22ce\0\u22d5\u22f3\0\0\u22f8\u2322\u2367\u2362\u237f\0\u2386\u23aa\u23b4cute\u803b\xed\u40ed\u0180;iy\u0771\u22b0\u22b5rc\u803b\xee\u40ee;\u4438\u0100cx\u22bc\u22bfy;\u4435cl\u803b\xa1\u40a1\u0100fr\u039f\u22c9;\uc000\ud835\udd26rave\u803b\xec\u40ec\u0200;ino\u073e\u22dd\u22e9\u22ee\u0100in\u22e2\u22e6nt;\u6a0ct;\u622dfin;\u69dcta;\u6129lig;\u4133\u0180aop\u22fe\u231a\u231d\u0180cgt\u2305\u2308\u2317r;\u412b\u0180elp\u071f\u230f\u2313in\xe5\u078ear\xf4\u0720h;\u4131f;\u62b7ed;\u41b5\u0280;cfot\u04f4\u232c\u2331\u233d\u2341are;\u6105in\u0100;t\u2338\u2339\u621eie;\u69dddo\xf4\u2319\u0280;celp\u0757\u234c\u2350\u235b\u2361al;\u62ba\u0100gr\u2355\u2359er\xf3\u1563\xe3\u234darhk;\u6a17rod;\u6a3c\u0200cgpt\u236f\u2372\u2376\u237by;\u4451on;\u412ff;\uc000\ud835\udd5aa;\u43b9uest\u803b\xbf\u40bf\u0100ci\u238a\u238fr;\uc000\ud835\udcben\u0280;Edsv\u04f4\u239b\u239d\u23a1\u04f3;\u62f9ot;\u62f5\u0100;v\u23a6\u23a7\u62f4;\u62f3\u0100;i\u0777\u23aelde;\u4129\u01eb\u23b8\0\u23bccy;\u4456l\u803b\xef\u40ef\u0300cfmosu\u23cc\u23d7\u23dc\u23e1\u23e7\u23f5\u0100iy\u23d1\u23d5rc;\u4135;\u4439r;\uc000\ud835\udd27ath;\u4237pf;\uc000\ud835\udd5b\u01e3\u23ec\0\u23f1r;\uc000\ud835\udcbfrcy;\u4458kcy;\u4454\u0400acfghjos\u240b\u2416\u2422\u2427\u242d\u2431\u2435\u243bppa\u0100;v\u2413\u2414\u43ba;\u43f0\u0100ey\u241b\u2420dil;\u4137;\u443ar;\uc000\ud835\udd28reen;\u4138cy;\u4445cy;\u445cpf;\uc000\ud835\udd5ccr;\uc000\ud835\udcc0\u0b80ABEHabcdefghjlmnoprstuv\u2470\u2481\u2486\u248d\u2491\u250e\u253d\u255a\u2580\u264e\u265e\u2665\u2679\u267d\u269a\u26b2\u26d8\u275d\u2768\u278b\u27c0\u2801\u2812\u0180art\u2477\u247a\u247cr\xf2\u09c6\xf2\u0395ail;\u691barr;\u690e\u0100;g\u0994\u248b;\u6a8bar;\u6962\u0963\u24a5\0\u24aa\0\u24b1\0\0\0\0\0\u24b5\u24ba\0\u24c6\u24c8\u24cd\0\u24f9ute;\u413amptyv;\u69b4ra\xee\u084cbda;\u43bbg\u0180;dl\u088e\u24c1\u24c3;\u6991\xe5\u088e;\u6a85uo\u803b\xab\u40abr\u0400;bfhlpst\u0899\u24de\u24e6\u24e9\u24eb\u24ee\u24f1\u24f5\u0100;f\u089d\u24e3s;\u691fs;\u691d\xeb\u2252p;\u61abl;\u6939im;\u6973l;\u61a2\u0180;ae\u24ff\u2500\u2504\u6aabil;\u6919\u0100;s\u2509\u250a\u6aad;\uc000\u2aad\ufe00\u0180abr\u2515\u2519\u251drr;\u690crk;\u6772\u0100ak\u2522\u252cc\u0100ek\u2528\u252a;\u407b;\u405b\u0100es\u2531\u2533;\u698bl\u0100du\u2539\u253b;\u698f;\u698d\u0200aeuy\u2546\u254b\u2556\u2558ron;\u413e\u0100di\u2550\u2554il;\u413c\xec\u08b0\xe2\u2529;\u443b\u0200cqrs\u2563\u2566\u256d\u257da;\u6936uo\u0100;r\u0e19\u1746\u0100du\u2572\u2577har;\u6967shar;\u694bh;\u61b2\u0280;fgqs\u258b\u258c\u0989\u25f3\u25ff\u6264t\u0280ahlrt\u2598\u25a4\u25b7\u25c2\u25e8rrow\u0100;t\u0899\u25a1a\xe9\u24f6arpoon\u0100du\u25af\u25b4own\xbb\u045ap\xbb\u0966eftarrows;\u61c7ight\u0180ahs\u25cd\u25d6\u25derrow\u0100;s\u08f4\u08a7arpoon\xf3\u0f98quigarro\xf7\u21f0hreetimes;\u62cb\u0180;qs\u258b\u0993\u25falan\xf4\u09ac\u0280;cdgs\u09ac\u260a\u260d\u261d\u2628c;\u6aa8ot\u0100;o\u2614\u2615\u6a7f\u0100;r\u261a\u261b\u6a81;\u6a83\u0100;e\u2622\u2625\uc000\u22da\ufe00s;\u6a93\u0280adegs\u2633\u2639\u263d\u2649\u264bppro\xf8\u24c6ot;\u62d6q\u0100gq\u2643\u2645\xf4\u0989gt\xf2\u248c\xf4\u099bi\xed\u09b2\u0180ilr\u2655\u08e1\u265asht;\u697c;\uc000\ud835\udd29\u0100;E\u099c\u2663;\u6a91\u0161\u2669\u2676r\u0100du\u25b2\u266e\u0100;l\u0965\u2673;\u696alk;\u6584cy;\u4459\u0280;acht\u0a48\u2688\u268b\u2691\u2696r\xf2\u25c1orne\xf2\u1d08ard;\u696bri;\u65fa\u0100io\u269f\u26a4dot;\u4140ust\u0100;a\u26ac\u26ad\u63b0che\xbb\u26ad\u0200Eaes\u26bb\u26bd\u26c9\u26d4;\u6268p\u0100;p\u26c3\u26c4\u6a89rox\xbb\u26c4\u0100;q\u26ce\u26cf\u6a87\u0100;q\u26ce\u26bbim;\u62e6\u0400abnoptwz\u26e9\u26f4\u26f7\u271a\u272f\u2741\u2747\u2750\u0100nr\u26ee\u26f1g;\u67ecr;\u61fdr\xeb\u08c1g\u0180lmr\u26ff\u270d\u2714eft\u0100ar\u09e6\u2707ight\xe1\u09f2apsto;\u67fcight\xe1\u09fdparrow\u0100lr\u2725\u2729ef\xf4\u24edight;\u61ac\u0180afl\u2736\u2739\u273dr;\u6985;\uc000\ud835\udd5dus;\u6a2dimes;\u6a34\u0161\u274b\u274fst;\u6217\xe1\u134e\u0180;ef\u2757\u2758\u1800\u65cange\xbb\u2758ar\u0100;l\u2764\u2765\u4028t;\u6993\u0280achmt\u2773\u2776\u277c\u2785\u2787r\xf2\u08a8orne\xf2\u1d8car\u0100;d\u0f98\u2783;\u696d;\u600eri;\u62bf\u0300achiqt\u2798\u279d\u0a40\u27a2\u27ae\u27bbquo;\u6039r;\uc000\ud835\udcc1m\u0180;eg\u09b2\u27aa\u27ac;\u6a8d;\u6a8f\u0100bu\u252a\u27b3o\u0100;r\u0e1f\u27b9;\u601arok;\u4142\u8400<;cdhilqr\u082b\u27d2\u2639\u27dc\u27e0\u27e5\u27ea\u27f0\u0100ci\u27d7\u27d9;\u6aa6r;\u6a79re\xe5\u25f2mes;\u62c9arr;\u6976uest;\u6a7b\u0100Pi\u27f5\u27f9ar;\u6996\u0180;ef\u2800\u092d\u181b\u65c3r\u0100du\u2807\u280dshar;\u694ahar;\u6966\u0100en\u2817\u2821rtneqq;\uc000\u2268\ufe00\xc5\u281e\u0700Dacdefhilnopsu\u2840\u2845\u2882\u288e\u2893\u28a0\u28a5\u28a8\u28da\u28e2\u28e4\u0a83\u28f3\u2902Dot;\u623a\u0200clpr\u284e\u2852\u2863\u287dr\u803b\xaf\u40af\u0100et\u2857\u2859;\u6642\u0100;e\u285e\u285f\u6720se\xbb\u285f\u0100;s\u103b\u2868to\u0200;dlu\u103b\u2873\u2877\u287bow\xee\u048cef\xf4\u090f\xf0\u13d1ker;\u65ae\u0100oy\u2887\u288cmma;\u6a29;\u443cash;\u6014asuredangle\xbb\u1626r;\uc000\ud835\udd2ao;\u6127\u0180cdn\u28af\u28b4\u28c9ro\u803b\xb5\u40b5\u0200;acd\u1464\u28bd\u28c0\u28c4s\xf4\u16a7ir;\u6af0ot\u80bb\xb7\u01b5us\u0180;bd\u28d2\u1903\u28d3\u6212\u0100;u\u1d3c\u28d8;\u6a2a\u0163\u28de\u28e1p;\u6adb\xf2\u2212\xf0\u0a81\u0100dp\u28e9\u28eeels;\u62a7f;\uc000\ud835\udd5e\u0100ct\u28f8\u28fdr;\uc000\ud835\udcc2pos\xbb\u159d\u0180;lm\u2909\u290a\u290d\u43bctimap;\u62b8\u0c00GLRVabcdefghijlmoprstuvw\u2942\u2953\u297e\u2989\u2998\u29da\u29e9\u2a15\u2a1a\u2a58\u2a5d\u2a83\u2a95\u2aa4\u2aa8\u2b04\u2b07\u2b44\u2b7f\u2bae\u2c34\u2c67\u2c7c\u2ce9\u0100gt\u2947\u294b;\uc000\u22d9\u0338\u0100;v\u2950\u0bcf\uc000\u226b\u20d2\u0180elt\u295a\u2972\u2976ft\u0100ar\u2961\u2967rrow;\u61cdightarrow;\u61ce;\uc000\u22d8\u0338\u0100;v\u297b\u0c47\uc000\u226a\u20d2ightarrow;\u61cf\u0100Dd\u298e\u2993ash;\u62afash;\u62ae\u0280bcnpt\u29a3\u29a7\u29ac\u29b1\u29ccla\xbb\u02deute;\u4144g;\uc000\u2220\u20d2\u0280;Eiop\u0d84\u29bc\u29c0\u29c5\u29c8;\uc000\u2a70\u0338d;\uc000\u224b\u0338s;\u4149ro\xf8\u0d84ur\u0100;a\u29d3\u29d4\u666el\u0100;s\u29d3\u0b38\u01f3\u29df\0\u29e3p\u80bb\xa0\u0b37mp\u0100;e\u0bf9\u0c00\u0280aeouy\u29f4\u29fe\u2a03\u2a10\u2a13\u01f0\u29f9\0\u29fb;\u6a43on;\u4148dil;\u4146ng\u0100;d\u0d7e\u2a0aot;\uc000\u2a6d\u0338p;\u6a42;\u443dash;\u6013\u0380;Aadqsx\u0b92\u2a29\u2a2d\u2a3b\u2a41\u2a45\u2a50rr;\u61d7r\u0100hr\u2a33\u2a36k;\u6924\u0100;o\u13f2\u13f0ot;\uc000\u2250\u0338ui\xf6\u0b63\u0100ei\u2a4a\u2a4ear;\u6928\xed\u0b98ist\u0100;s\u0ba0\u0b9fr;\uc000\ud835\udd2b\u0200Eest\u0bc5\u2a66\u2a79\u2a7c\u0180;qs\u0bbc\u2a6d\u0be1\u0180;qs\u0bbc\u0bc5\u2a74lan\xf4\u0be2i\xed\u0bea\u0100;r\u0bb6\u2a81\xbb\u0bb7\u0180Aap\u2a8a\u2a8d\u2a91r\xf2\u2971rr;\u61aear;\u6af2\u0180;sv\u0f8d\u2a9c\u0f8c\u0100;d\u2aa1\u2aa2\u62fc;\u62facy;\u445a\u0380AEadest\u2ab7\u2aba\u2abe\u2ac2\u2ac5\u2af6\u2af9r\xf2\u2966;\uc000\u2266\u0338rr;\u619ar;\u6025\u0200;fqs\u0c3b\u2ace\u2ae3\u2aeft\u0100ar\u2ad4\u2ad9rro\xf7\u2ac1ightarro\xf7\u2a90\u0180;qs\u0c3b\u2aba\u2aealan\xf4\u0c55\u0100;s\u0c55\u2af4\xbb\u0c36i\xed\u0c5d\u0100;r\u0c35\u2afei\u0100;e\u0c1a\u0c25i\xe4\u0d90\u0100pt\u2b0c\u2b11f;\uc000\ud835\udd5f\u8180\xac;in\u2b19\u2b1a\u2b36\u40acn\u0200;Edv\u0b89\u2b24\u2b28\u2b2e;\uc000\u22f9\u0338ot;\uc000\u22f5\u0338\u01e1\u0b89\u2b33\u2b35;\u62f7;\u62f6i\u0100;v\u0cb8\u2b3c\u01e1\u0cb8\u2b41\u2b43;\u62fe;\u62fd\u0180aor\u2b4b\u2b63\u2b69r\u0200;ast\u0b7b\u2b55\u2b5a\u2b5flle\xec\u0b7bl;\uc000\u2afd\u20e5;\uc000\u2202\u0338lint;\u6a14\u0180;ce\u0c92\u2b70\u2b73u\xe5\u0ca5\u0100;c\u0c98\u2b78\u0100;e\u0c92\u2b7d\xf1\u0c98\u0200Aait\u2b88\u2b8b\u2b9d\u2ba7r\xf2\u2988rr\u0180;cw\u2b94\u2b95\u2b99\u619b;\uc000\u2933\u0338;\uc000\u219d\u0338ghtarrow\xbb\u2b95ri\u0100;e\u0ccb\u0cd6\u0380chimpqu\u2bbd\u2bcd\u2bd9\u2b04\u0b78\u2be4\u2bef\u0200;cer\u0d32\u2bc6\u0d37\u2bc9u\xe5\u0d45;\uc000\ud835\udcc3ort\u026d\u2b05\0\0\u2bd6ar\xe1\u2b56m\u0100;e\u0d6e\u2bdf\u0100;q\u0d74\u0d73su\u0100bp\u2beb\u2bed\xe5\u0cf8\xe5\u0d0b\u0180bcp\u2bf6\u2c11\u2c19\u0200;Ees\u2bff\u2c00\u0d22\u2c04\u6284;\uc000\u2ac5\u0338et\u0100;e\u0d1b\u2c0bq\u0100;q\u0d23\u2c00c\u0100;e\u0d32\u2c17\xf1\u0d38\u0200;Ees\u2c22\u2c23\u0d5f\u2c27\u6285;\uc000\u2ac6\u0338et\u0100;e\u0d58\u2c2eq\u0100;q\u0d60\u2c23\u0200gilr\u2c3d\u2c3f\u2c45\u2c47\xec\u0bd7lde\u803b\xf1\u40f1\xe7\u0c43iangle\u0100lr\u2c52\u2c5ceft\u0100;e\u0c1a\u2c5a\xf1\u0c26ight\u0100;e\u0ccb\u2c65\xf1\u0cd7\u0100;m\u2c6c\u2c6d\u43bd\u0180;es\u2c74\u2c75\u2c79\u4023ro;\u6116p;\u6007\u0480DHadgilrs\u2c8f\u2c94\u2c99\u2c9e\u2ca3\u2cb0\u2cb6\u2cd3\u2ce3ash;\u62adarr;\u6904p;\uc000\u224d\u20d2ash;\u62ac\u0100et\u2ca8\u2cac;\uc000\u2265\u20d2;\uc000>\u20d2nfin;\u69de\u0180Aet\u2cbd\u2cc1\u2cc5rr;\u6902;\uc000\u2264\u20d2\u0100;r\u2cca\u2ccd\uc000<\u20d2ie;\uc000\u22b4\u20d2\u0100At\u2cd8\u2cdcrr;\u6903rie;\uc000\u22b5\u20d2im;\uc000\u223c\u20d2\u0180Aan\u2cf0\u2cf4\u2d02rr;\u61d6r\u0100hr\u2cfa\u2cfdk;\u6923\u0100;o\u13e7\u13e5ear;\u6927\u1253\u1a95\0\0\0\0\0\0\0\0\0\0\0\0\0\u2d2d\0\u2d38\u2d48\u2d60\u2d65\u2d72\u2d84\u1b07\0\0\u2d8d\u2dab\0\u2dc8\u2dce\0\u2ddc\u2e19\u2e2b\u2e3e\u2e43\u0100cs\u2d31\u1a97ute\u803b\xf3\u40f3\u0100iy\u2d3c\u2d45r\u0100;c\u1a9e\u2d42\u803b\xf4\u40f4;\u443e\u0280abios\u1aa0\u2d52\u2d57\u01c8\u2d5alac;\u4151v;\u6a38old;\u69bclig;\u4153\u0100cr\u2d69\u2d6dir;\u69bf;\uc000\ud835\udd2c\u036f\u2d79\0\0\u2d7c\0\u2d82n;\u42dbave\u803b\xf2\u40f2;\u69c1\u0100bm\u2d88\u0df4ar;\u69b5\u0200acit\u2d95\u2d98\u2da5\u2da8r\xf2\u1a80\u0100ir\u2d9d\u2da0r;\u69beoss;\u69bbn\xe5\u0e52;\u69c0\u0180aei\u2db1\u2db5\u2db9cr;\u414dga;\u43c9\u0180cdn\u2dc0\u2dc5\u01cdron;\u43bf;\u69b6pf;\uc000\ud835\udd60\u0180ael\u2dd4\u2dd7\u01d2r;\u69b7rp;\u69b9\u0380;adiosv\u2dea\u2deb\u2dee\u2e08\u2e0d\u2e10\u2e16\u6228r\xf2\u1a86\u0200;efm\u2df7\u2df8\u2e02\u2e05\u6a5dr\u0100;o\u2dfe\u2dff\u6134f\xbb\u2dff\u803b\xaa\u40aa\u803b\xba\u40bagof;\u62b6r;\u6a56lope;\u6a57;\u6a5b\u0180clo\u2e1f\u2e21\u2e27\xf2\u2e01ash\u803b\xf8\u40f8l;\u6298i\u016c\u2e2f\u2e34de\u803b\xf5\u40f5es\u0100;a\u01db\u2e3as;\u6a36ml\u803b\xf6\u40f6bar;\u633d\u0ae1\u2e5e\0\u2e7d\0\u2e80\u2e9d\0\u2ea2\u2eb9\0\0\u2ecb\u0e9c\0\u2f13\0\0\u2f2b\u2fbc\0\u2fc8r\u0200;ast\u0403\u2e67\u2e72\u0e85\u8100\xb6;l\u2e6d\u2e6e\u40b6le\xec\u0403\u0269\u2e78\0\0\u2e7bm;\u6af3;\u6afdy;\u443fr\u0280cimpt\u2e8b\u2e8f\u2e93\u1865\u2e97nt;\u4025od;\u402eil;\u6030enk;\u6031r;\uc000\ud835\udd2d\u0180imo\u2ea8\u2eb0\u2eb4\u0100;v\u2ead\u2eae\u43c6;\u43d5ma\xf4\u0a76ne;\u660e\u0180;tv\u2ebf\u2ec0\u2ec8\u43c0chfork\xbb\u1ffd;\u43d6\u0100au\u2ecf\u2edfn\u0100ck\u2ed5\u2eddk\u0100;h\u21f4\u2edb;\u610e\xf6\u21f4s\u0480;abcdemst\u2ef3\u2ef4\u1908\u2ef9\u2efd\u2f04\u2f06\u2f0a\u2f0e\u402bcir;\u6a23ir;\u6a22\u0100ou\u1d40\u2f02;\u6a25;\u6a72n\u80bb\xb1\u0e9dim;\u6a26wo;\u6a27\u0180ipu\u2f19\u2f20\u2f25ntint;\u6a15f;\uc000\ud835\udd61nd\u803b\xa3\u40a3\u0500;Eaceinosu\u0ec8\u2f3f\u2f41\u2f44\u2f47\u2f81\u2f89\u2f92\u2f7e\u2fb6;\u6ab3p;\u6ab7u\xe5\u0ed9\u0100;c\u0ece\u2f4c\u0300;acens\u0ec8\u2f59\u2f5f\u2f66\u2f68\u2f7eppro\xf8\u2f43urlye\xf1\u0ed9\xf1\u0ece\u0180aes\u2f6f\u2f76\u2f7approx;\u6ab9qq;\u6ab5im;\u62e8i\xed\u0edfme\u0100;s\u2f88\u0eae\u6032\u0180Eas\u2f78\u2f90\u2f7a\xf0\u2f75\u0180dfp\u0eec\u2f99\u2faf\u0180als\u2fa0\u2fa5\u2faalar;\u632eine;\u6312urf;\u6313\u0100;t\u0efb\u2fb4\xef\u0efbrel;\u62b0\u0100ci\u2fc0\u2fc5r;\uc000\ud835\udcc5;\u43c8ncsp;\u6008\u0300fiopsu\u2fda\u22e2\u2fdf\u2fe5\u2feb\u2ff1r;\uc000\ud835\udd2epf;\uc000\ud835\udd62rime;\u6057cr;\uc000\ud835\udcc6\u0180aeo\u2ff8\u3009\u3013t\u0100ei\u2ffe\u3005rnion\xf3\u06b0nt;\u6a16st\u0100;e\u3010\u3011\u403f\xf1\u1f19\xf4\u0f14\u0a80ABHabcdefhilmnoprstux\u3040\u3051\u3055\u3059\u30e0\u310e\u312b\u3147\u3162\u3172\u318e\u3206\u3215\u3224\u3229\u3258\u326e\u3272\u3290\u32b0\u32b7\u0180art\u3047\u304a\u304cr\xf2\u10b3\xf2\u03ddail;\u691car\xf2\u1c65ar;\u6964\u0380cdenqrt\u3068\u3075\u3078\u307f\u308f\u3094\u30cc\u0100eu\u306d\u3071;\uc000\u223d\u0331te;\u4155i\xe3\u116emptyv;\u69b3g\u0200;del\u0fd1\u3089\u308b\u308d;\u6992;\u69a5\xe5\u0fd1uo\u803b\xbb\u40bbr\u0580;abcfhlpstw\u0fdc\u30ac\u30af\u30b7\u30b9\u30bc\u30be\u30c0\u30c3\u30c7\u30cap;\u6975\u0100;f\u0fe0\u30b4s;\u6920;\u6933s;\u691e\xeb\u225d\xf0\u272el;\u6945im;\u6974l;\u61a3;\u619d\u0100ai\u30d1\u30d5il;\u691ao\u0100;n\u30db\u30dc\u6236al\xf3\u0f1e\u0180abr\u30e7\u30ea\u30eer\xf2\u17e5rk;\u6773\u0100ak\u30f3\u30fdc\u0100ek\u30f9\u30fb;\u407d;\u405d\u0100es\u3102\u3104;\u698cl\u0100du\u310a\u310c;\u698e;\u6990\u0200aeuy\u3117\u311c\u3127\u3129ron;\u4159\u0100di\u3121\u3125il;\u4157\xec\u0ff2\xe2\u30fa;\u4440\u0200clqs\u3134\u3137\u313d\u3144a;\u6937dhar;\u6969uo\u0100;r\u020e\u020dh;\u61b3\u0180acg\u314e\u315f\u0f44l\u0200;ips\u0f78\u3158\u315b\u109cn\xe5\u10bbar\xf4\u0fa9t;\u65ad\u0180ilr\u3169\u1023\u316esht;\u697d;\uc000\ud835\udd2f\u0100ao\u3177\u3186r\u0100du\u317d\u317f\xbb\u047b\u0100;l\u1091\u3184;\u696c\u0100;v\u318b\u318c\u43c1;\u43f1\u0180gns\u3195\u31f9\u31fcht\u0300ahlrst\u31a4\u31b0\u31c2\u31d8\u31e4\u31eerrow\u0100;t\u0fdc\u31ada\xe9\u30c8arpoon\u0100du\u31bb\u31bfow\xee\u317ep\xbb\u1092eft\u0100ah\u31ca\u31d0rrow\xf3\u0feaarpoon\xf3\u0551ightarrows;\u61c9quigarro\xf7\u30cbhreetimes;\u62ccg;\u42daingdotse\xf1\u1f32\u0180ahm\u320d\u3210\u3213r\xf2\u0feaa\xf2\u0551;\u600foust\u0100;a\u321e\u321f\u63b1che\xbb\u321fmid;\u6aee\u0200abpt\u3232\u323d\u3240\u3252\u0100nr\u3237\u323ag;\u67edr;\u61fer\xeb\u1003\u0180afl\u3247\u324a\u324er;\u6986;\uc000\ud835\udd63us;\u6a2eimes;\u6a35\u0100ap\u325d\u3267r\u0100;g\u3263\u3264\u4029t;\u6994olint;\u6a12ar\xf2\u31e3\u0200achq\u327b\u3280\u10bc\u3285quo;\u603ar;\uc000\ud835\udcc7\u0100bu\u30fb\u328ao\u0100;r\u0214\u0213\u0180hir\u3297\u329b\u32a0re\xe5\u31f8mes;\u62cai\u0200;efl\u32aa\u1059\u1821\u32ab\u65b9tri;\u69celuhar;\u6968;\u611e\u0d61\u32d5\u32db\u32df\u332c\u3338\u3371\0\u337a\u33a4\0\0\u33ec\u33f0\0\u3428\u3448\u345a\u34ad\u34b1\u34ca\u34f1\0\u3616\0\0\u3633cute;\u415bqu\xef\u27ba\u0500;Eaceinpsy\u11ed\u32f3\u32f5\u32ff\u3302\u330b\u330f\u331f\u3326\u3329;\u6ab4\u01f0\u32fa\0\u32fc;\u6ab8on;\u4161u\xe5\u11fe\u0100;d\u11f3\u3307il;\u415frc;\u415d\u0180Eas\u3316\u3318\u331b;\u6ab6p;\u6abaim;\u62e9olint;\u6a13i\xed\u1204;\u4441ot\u0180;be\u3334\u1d47\u3335\u62c5;\u6a66\u0380Aacmstx\u3346\u334a\u3357\u335b\u335e\u3363\u336drr;\u61d8r\u0100hr\u3350\u3352\xeb\u2228\u0100;o\u0a36\u0a34t\u803b\xa7\u40a7i;\u403bwar;\u6929m\u0100in\u3369\xf0nu\xf3\xf1t;\u6736r\u0100;o\u3376\u2055\uc000\ud835\udd30\u0200acoy\u3382\u3386\u3391\u33a0rp;\u666f\u0100hy\u338b\u338fcy;\u4449;\u4448rt\u026d\u3399\0\0\u339ci\xe4\u1464ara\xec\u2e6f\u803b\xad\u40ad\u0100gm\u33a8\u33b4ma\u0180;fv\u33b1\u33b2\u33b2\u43c3;\u43c2\u0400;deglnpr\u12ab\u33c5\u33c9\u33ce\u33d6\u33de\u33e1\u33e6ot;\u6a6a\u0100;q\u12b1\u12b0\u0100;E\u33d3\u33d4\u6a9e;\u6aa0\u0100;E\u33db\u33dc\u6a9d;\u6a9fe;\u6246lus;\u6a24arr;\u6972ar\xf2\u113d\u0200aeit\u33f8\u3408\u340f\u3417\u0100ls\u33fd\u3404lsetm\xe9\u336ahp;\u6a33parsl;\u69e4\u0100dl\u1463\u3414e;\u6323\u0100;e\u341c\u341d\u6aaa\u0100;s\u3422\u3423\u6aac;\uc000\u2aac\ufe00\u0180flp\u342e\u3433\u3442tcy;\u444c\u0100;b\u3438\u3439\u402f\u0100;a\u343e\u343f\u69c4r;\u633ff;\uc000\ud835\udd64a\u0100dr\u344d\u0402es\u0100;u\u3454\u3455\u6660it\xbb\u3455\u0180csu\u3460\u3479\u349f\u0100au\u3465\u346fp\u0100;s\u1188\u346b;\uc000\u2293\ufe00p\u0100;s\u11b4\u3475;\uc000\u2294\ufe00u\u0100bp\u347f\u348f\u0180;es\u1197\u119c\u3486et\u0100;e\u1197\u348d\xf1\u119d\u0180;es\u11a8\u11ad\u3496et\u0100;e\u11a8\u349d\xf1\u11ae\u0180;af\u117b\u34a6\u05b0r\u0165\u34ab\u05b1\xbb\u117car\xf2\u1148\u0200cemt\u34b9\u34be\u34c2\u34c5r;\uc000\ud835\udcc8tm\xee\xf1i\xec\u3415ar\xe6\u11be\u0100ar\u34ce\u34d5r\u0100;f\u34d4\u17bf\u6606\u0100an\u34da\u34edight\u0100ep\u34e3\u34eapsilo\xee\u1ee0h\xe9\u2eafs\xbb\u2852\u0280bcmnp\u34fb\u355e\u1209\u358b\u358e\u0480;Edemnprs\u350e\u350f\u3511\u3515\u351e\u3523\u352c\u3531\u3536\u6282;\u6ac5ot;\u6abd\u0100;d\u11da\u351aot;\u6ac3ult;\u6ac1\u0100Ee\u3528\u352a;\u6acb;\u628alus;\u6abfarr;\u6979\u0180eiu\u353d\u3552\u3555t\u0180;en\u350e\u3545\u354bq\u0100;q\u11da\u350feq\u0100;q\u352b\u3528m;\u6ac7\u0100bp\u355a\u355c;\u6ad5;\u6ad3c\u0300;acens\u11ed\u356c\u3572\u3579\u357b\u3326ppro\xf8\u32faurlye\xf1\u11fe\xf1\u11f3\u0180aes\u3582\u3588\u331bppro\xf8\u331aq\xf1\u3317g;\u666a\u0680123;Edehlmnps\u35a9\u35ac\u35af\u121c\u35b2\u35b4\u35c0\u35c9\u35d5\u35da\u35df\u35e8\u35ed\u803b\xb9\u40b9\u803b\xb2\u40b2\u803b\xb3\u40b3;\u6ac6\u0100os\u35b9\u35bct;\u6abeub;\u6ad8\u0100;d\u1222\u35c5ot;\u6ac4s\u0100ou\u35cf\u35d2l;\u67c9b;\u6ad7arr;\u697bult;\u6ac2\u0100Ee\u35e4\u35e6;\u6acc;\u628blus;\u6ac0\u0180eiu\u35f4\u3609\u360ct\u0180;en\u121c\u35fc\u3602q\u0100;q\u1222\u35b2eq\u0100;q\u35e7\u35e4m;\u6ac8\u0100bp\u3611\u3613;\u6ad4;\u6ad6\u0180Aan\u361c\u3620\u362drr;\u61d9r\u0100hr\u3626\u3628\xeb\u222e\u0100;o\u0a2b\u0a29war;\u692alig\u803b\xdf\u40df\u0be1\u3651\u365d\u3660\u12ce\u3673\u3679\0\u367e\u36c2\0\0\0\0\0\u36db\u3703\0\u3709\u376c\0\0\0\u3787\u0272\u3656\0\0\u365bget;\u6316;\u43c4r\xeb\u0e5f\u0180aey\u3666\u366b\u3670ron;\u4165dil;\u4163;\u4442lrec;\u6315r;\uc000\ud835\udd31\u0200eiko\u3686\u369d\u36b5\u36bc\u01f2\u368b\0\u3691e\u01004f\u1284\u1281a\u0180;sv\u3698\u3699\u369b\u43b8ym;\u43d1\u0100cn\u36a2\u36b2k\u0100as\u36a8\u36aeppro\xf8\u12c1im\xbb\u12acs\xf0\u129e\u0100as\u36ba\u36ae\xf0\u12c1rn\u803b\xfe\u40fe\u01ec\u031f\u36c6\u22e7es\u8180\xd7;bd\u36cf\u36d0\u36d8\u40d7\u0100;a\u190f\u36d5r;\u6a31;\u6a30\u0180eps\u36e1\u36e3\u3700\xe1\u2a4d\u0200;bcf\u0486\u36ec\u36f0\u36f4ot;\u6336ir;\u6af1\u0100;o\u36f9\u36fc\uc000\ud835\udd65rk;\u6ada\xe1\u3362rime;\u6034\u0180aip\u370f\u3712\u3764d\xe5\u1248\u0380adempst\u3721\u374d\u3740\u3751\u3757\u375c\u375fngle\u0280;dlqr\u3730\u3731\u3736\u3740\u3742\u65b5own\xbb\u1dbbeft\u0100;e\u2800\u373e\xf1\u092e;\u625cight\u0100;e\u32aa\u374b\xf1\u105aot;\u65ecinus;\u6a3alus;\u6a39b;\u69cdime;\u6a3bezium;\u63e2\u0180cht\u3772\u377d\u3781\u0100ry\u3777\u377b;\uc000\ud835\udcc9;\u4446cy;\u445brok;\u4167\u0100io\u378b\u378ex\xf4\u1777head\u0100lr\u3797\u37a0eftarro\xf7\u084fightarrow\xbb\u0f5d\u0900AHabcdfghlmoprstuw\u37d0\u37d3\u37d7\u37e4\u37f0\u37fc\u380e\u381c\u3823\u3834\u3851\u385d\u386b\u38a9\u38cc\u38d2\u38ea\u38f6r\xf2\u03edar;\u6963\u0100cr\u37dc\u37e2ute\u803b\xfa\u40fa\xf2\u1150r\u01e3\u37ea\0\u37edy;\u445eve;\u416d\u0100iy\u37f5\u37farc\u803b\xfb\u40fb;\u4443\u0180abh\u3803\u3806\u380br\xf2\u13adlac;\u4171a\xf2\u13c3\u0100ir\u3813\u3818sht;\u697e;\uc000\ud835\udd32rave\u803b\xf9\u40f9\u0161\u3827\u3831r\u0100lr\u382c\u382e\xbb\u0957\xbb\u1083lk;\u6580\u0100ct\u3839\u384d\u026f\u383f\0\0\u384arn\u0100;e\u3845\u3846\u631cr\xbb\u3846op;\u630fri;\u65f8\u0100al\u3856\u385acr;\u416b\u80bb\xa8\u0349\u0100gp\u3862\u3866on;\u4173f;\uc000\ud835\udd66\u0300adhlsu\u114b\u3878\u387d\u1372\u3891\u38a0own\xe1\u13b3arpoon\u0100lr\u3888\u388cef\xf4\u382digh\xf4\u382fi\u0180;hl\u3899\u389a\u389c\u43c5\xbb\u13faon\xbb\u389aparrows;\u61c8\u0180cit\u38b0\u38c4\u38c8\u026f\u38b6\0\0\u38c1rn\u0100;e\u38bc\u38bd\u631dr\xbb\u38bdop;\u630eng;\u416fri;\u65f9cr;\uc000\ud835\udcca\u0180dir\u38d9\u38dd\u38e2ot;\u62f0lde;\u4169i\u0100;f\u3730\u38e8\xbb\u1813\u0100am\u38ef\u38f2r\xf2\u38a8l\u803b\xfc\u40fcangle;\u69a7\u0780ABDacdeflnoprsz\u391c\u391f\u3929\u392d\u39b5\u39b8\u39bd\u39df\u39e4\u39e8\u39f3\u39f9\u39fd\u3a01\u3a20r\xf2\u03f7ar\u0100;v\u3926\u3927\u6ae8;\u6ae9as\xe8\u03e1\u0100nr\u3932\u3937grt;\u699c\u0380eknprst\u34e3\u3946\u394b\u3952\u395d\u3964\u3996app\xe1\u2415othin\xe7\u1e96\u0180hir\u34eb\u2ec8\u3959op\xf4\u2fb5\u0100;h\u13b7\u3962\xef\u318d\u0100iu\u3969\u396dgm\xe1\u33b3\u0100bp\u3972\u3984setneq\u0100;q\u397d\u3980\uc000\u228a\ufe00;\uc000\u2acb\ufe00setneq\u0100;q\u398f\u3992\uc000\u228b\ufe00;\uc000\u2acc\ufe00\u0100hr\u399b\u399fet\xe1\u369ciangle\u0100lr\u39aa\u39afeft\xbb\u0925ight\xbb\u1051y;\u4432ash\xbb\u1036\u0180elr\u39c4\u39d2\u39d7\u0180;be\u2dea\u39cb\u39cfar;\u62bbq;\u625alip;\u62ee\u0100bt\u39dc\u1468a\xf2\u1469r;\uc000\ud835\udd33tr\xe9\u39aesu\u0100bp\u39ef\u39f1\xbb\u0d1c\xbb\u0d59pf;\uc000\ud835\udd67ro\xf0\u0efbtr\xe9\u39b4\u0100cu\u3a06\u3a0br;\uc000\ud835\udccb\u0100bp\u3a10\u3a18n\u0100Ee\u3980\u3a16\xbb\u397en\u0100Ee\u3992\u3a1e\xbb\u3990igzag;\u699a\u0380cefoprs\u3a36\u3a3b\u3a56\u3a5b\u3a54\u3a61\u3a6airc;\u4175\u0100di\u3a40\u3a51\u0100bg\u3a45\u3a49ar;\u6a5fe\u0100;q\u15fa\u3a4f;\u6259erp;\u6118r;\uc000\ud835\udd34pf;\uc000\ud835\udd68\u0100;e\u1479\u3a66at\xe8\u1479cr;\uc000\ud835\udccc\u0ae3\u178e\u3a87\0\u3a8b\0\u3a90\u3a9b\0\0\u3a9d\u3aa8\u3aab\u3aaf\0\0\u3ac3\u3ace\0\u3ad8\u17dc\u17dftr\xe9\u17d1r;\uc000\ud835\udd35\u0100Aa\u3a94\u3a97r\xf2\u03c3r\xf2\u09f6;\u43be\u0100Aa\u3aa1\u3aa4r\xf2\u03b8r\xf2\u09eba\xf0\u2713is;\u62fb\u0180dpt\u17a4\u3ab5\u3abe\u0100fl\u3aba\u17a9;\uc000\ud835\udd69im\xe5\u17b2\u0100Aa\u3ac7\u3acar\xf2\u03cer\xf2\u0a01\u0100cq\u3ad2\u17b8r;\uc000\ud835\udccd\u0100pt\u17d6\u3adcr\xe9\u17d4\u0400acefiosu\u3af0\u3afd\u3b08\u3b0c\u3b11\u3b15\u3b1b\u3b21c\u0100uy\u3af6\u3afbte\u803b\xfd\u40fd;\u444f\u0100iy\u3b02\u3b06rc;\u4177;\u444bn\u803b\xa5\u40a5r;\uc000\ud835\udd36cy;\u4457pf;\uc000\ud835\udd6acr;\uc000\ud835\udcce\u0100cm\u3b26\u3b29y;\u444el\u803b\xff\u40ff\u0500acdefhiosw\u3b42\u3b48\u3b54\u3b58\u3b64\u3b69\u3b6d\u3b74\u3b7a\u3b80cute;\u417a\u0100ay\u3b4d\u3b52ron;\u417e;\u4437ot;\u417c\u0100et\u3b5d\u3b61tr\xe6\u155fa;\u43b6r;\uc000\ud835\udd37cy;\u4436grarr;\u61ddpf;\uc000\ud835\udd6bcr;\uc000\ud835\udccf\u0100jn\u3b85\u3b87;\u600dj;\u600c'.split("").map((e=>e.charCodeAt(0)))),yf=new Uint16Array("\u0200aglq\t\x15\x18\x1b\u026d\x0f\0\0\x12p;\u4026os;\u4027t;\u403et;\u403cuot;\u4022".split("").map((e=>e.charCodeAt(0))));const _f=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]),Sf=null!==(bf=String.fromCodePoint)&&void 0!==bf?bf:function(e){let t="";return e>65535&&(e-=65536,t+=String.fromCharCode(e>>>10&1023|55296),e=56320|1023&e),t+=String.fromCharCode(e),t};var Tf,Af,Cf,wf,Nf,If,xf,Rf,kf;function Of(e){return e>=Tf.ZERO&&e<=Tf.NINE}function Lf(e){return e===Tf.EQUALS||function(e){return e>=Tf.UPPER_A&&e<=Tf.UPPER_Z||e>=Tf.LOWER_A&&e<=Tf.LOWER_Z||Of(e)}(e)}!function(e){e[e.NUM=35]="NUM",e[e.SEMI=59]="SEMI",e[e.EQUALS=61]="EQUALS",e[e.ZERO=48]="ZERO",e[e.NINE=57]="NINE",e[e.LOWER_A=97]="LOWER_A",e[e.LOWER_F=102]="LOWER_F",e[e.LOWER_X=120]="LOWER_X",e[e.LOWER_Z=122]="LOWER_Z",e[e.UPPER_A=65]="UPPER_A",e[e.UPPER_F=70]="UPPER_F",e[e.UPPER_Z=90]="UPPER_Z"}(Tf||(Tf={})),function(e){e[e.VALUE_LENGTH=49152]="VALUE_LENGTH",e[e.BRANCH_LENGTH=16256]="BRANCH_LENGTH",e[e.JUMP_TABLE=127]="JUMP_TABLE"}(Af||(Af={})),function(e){e[e.EntityStart=0]="EntityStart",e[e.NumericStart=1]="NumericStart",e[e.NumericDecimal=2]="NumericDecimal",e[e.NumericHex=3]="NumericHex",e[e.NamedEntity=4]="NamedEntity"}(Cf||(Cf={})),function(e){e[e.Legacy=0]="Legacy",e[e.Strict=1]="Strict",e[e.Attribute=2]="Attribute"}(wf||(wf={}));class Df{constructor(e,t,n){this.decodeTree=e,this.emitCodePoint=t,this.errors=n,this.state=Cf.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=wf.Strict}startEntity(e){this.decodeMode=e,this.state=Cf.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1}write(e,t){switch(this.state){case Cf.EntityStart:return e.charCodeAt(t)===Tf.NUM?(this.state=Cf.NumericStart,this.consumed+=1,this.stateNumericStart(e,t+1)):(this.state=Cf.NamedEntity,this.stateNamedEntity(e,t));case Cf.NumericStart:return this.stateNumericStart(e,t);case Cf.NumericDecimal:return this.stateNumericDecimal(e,t);case Cf.NumericHex:return this.stateNumericHex(e,t);case Cf.NamedEntity:return this.stateNamedEntity(e,t)}}stateNumericStart(e,t){return t>=e.length?-1:(32|e.charCodeAt(t))===Tf.LOWER_X?(this.state=Cf.NumericHex,this.consumed+=1,this.stateNumericHex(e,t+1)):(this.state=Cf.NumericDecimal,this.stateNumericDecimal(e,t))}addToNumericResult(e,t,n,r){if(t!==n){const a=n-t;this.result=this.result*Math.pow(r,a)+parseInt(e.substr(t,a),r),this.consumed+=a}}stateNumericHex(e,t){const n=t;for(;t=Tf.UPPER_A&&r<=Tf.UPPER_F||r>=Tf.LOWER_A&&r<=Tf.LOWER_F)))return this.addToNumericResult(e,n,t,16),this.emitNumericEntity(a,3);t+=1}var r;return this.addToNumericResult(e,n,t,16),-1}stateNumericDecimal(e,t){const n=t;for(;t=55296&&e<=57343||e>1114111?65533:null!==(t=_f.get(e))&&void 0!==t?t:e}(this.result),this.consumed),this.errors&&(e!==Tf.SEMI&&this.errors.missingSemicolonAfterCharacterReference(),this.errors.validateNumericCharacterReference(this.result)),this.consumed}stateNamedEntity(e,t){const{decodeTree:n}=this;let r=n[this.treeIndex],a=(r&Af.VALUE_LENGTH)>>14;for(;t>14,0!==a){if(o===Tf.SEMI)return this.emitNamedEntityData(this.treeIndex,a,this.consumed+this.excess);this.decodeMode!==wf.Strict&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0)}}return-1}emitNotTerminatedNamedEntity(){var e;const{result:t,decodeTree:n}=this,r=(n[t]&Af.VALUE_LENGTH)>>14;return this.emitNamedEntityData(t,r,this.consumed),null===(e=this.errors)||void 0===e||e.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(e,t,n){const{decodeTree:r}=this;return this.emitCodePoint(1===t?r[e]&~Af.VALUE_LENGTH:r[e+1],n),3===t&&this.emitCodePoint(r[e+2],n),n}end(){var e;switch(this.state){case Cf.NamedEntity:return 0===this.result||this.decodeMode===wf.Attribute&&this.result!==this.treeIndex?0:this.emitNotTerminatedNamedEntity();case Cf.NumericDecimal:return this.emitNumericEntity(0,2);case Cf.NumericHex:return this.emitNumericEntity(0,3);case Cf.NumericStart:return null===(e=this.errors)||void 0===e||e.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case Cf.EntityStart:return 0}}}function Mf(e){let t="";const n=new Df(e,(e=>t+=Sf(e)));return function(e,r){let a=0,o=0;for(;(o=e.indexOf("&",o))>=0;){t+=e.slice(a,o),n.startEntity(r);const i=n.write(e,o+1);if(i<0){a=o+n.end();break}a=o+i,o=0===i?a+1:a}const i=t+e.slice(a);return t="",i}}function Pf(e,t,n,r){const a=(t&Af.BRANCH_LENGTH)>>7,o=t&Af.JUMP_TABLE;if(0===a)return 0!==o&&r===o?n:-1;if(o){const t=r-o;return t<0||t>=a?-1:e[n+t]-1}let i=n,s=i+a-1;for(;i<=s;){const t=i+s>>>1,n=e[t];if(nr))return e[t+a];s=t-1}}return-1}Mf(vf),Mf(yf),function(e){e.HTML="http://www.w3.org/1999/xhtml",e.MATHML="http://www.w3.org/1998/Math/MathML",e.SVG="http://www.w3.org/2000/svg",e.XLINK="http://www.w3.org/1999/xlink",e.XML="http://www.w3.org/XML/1998/namespace",e.XMLNS="http://www.w3.org/2000/xmlns/"}(Nf=Nf||(Nf={})),function(e){e.TYPE="type",e.ACTION="action",e.ENCODING="encoding",e.PROMPT="prompt",e.NAME="name",e.COLOR="color",e.FACE="face",e.SIZE="size"}(If=If||(If={})),function(e){e.NO_QUIRKS="no-quirks",e.QUIRKS="quirks",e.LIMITED_QUIRKS="limited-quirks"}(xf=xf||(xf={})),function(e){e.A="a",e.ADDRESS="address",e.ANNOTATION_XML="annotation-xml",e.APPLET="applet",e.AREA="area",e.ARTICLE="article",e.ASIDE="aside",e.B="b",e.BASE="base",e.BASEFONT="basefont",e.BGSOUND="bgsound",e.BIG="big",e.BLOCKQUOTE="blockquote",e.BODY="body",e.BR="br",e.BUTTON="button",e.CAPTION="caption",e.CENTER="center",e.CODE="code",e.COL="col",e.COLGROUP="colgroup",e.DD="dd",e.DESC="desc",e.DETAILS="details",e.DIALOG="dialog",e.DIR="dir",e.DIV="div",e.DL="dl",e.DT="dt",e.EM="em",e.EMBED="embed",e.FIELDSET="fieldset",e.FIGCAPTION="figcaption",e.FIGURE="figure",e.FONT="font",e.FOOTER="footer",e.FOREIGN_OBJECT="foreignObject",e.FORM="form",e.FRAME="frame",e.FRAMESET="frameset",e.H1="h1",e.H2="h2",e.H3="h3",e.H4="h4",e.H5="h5",e.H6="h6",e.HEAD="head",e.HEADER="header",e.HGROUP="hgroup",e.HR="hr",e.HTML="html",e.I="i",e.IMG="img",e.IMAGE="image",e.INPUT="input",e.IFRAME="iframe",e.KEYGEN="keygen",e.LABEL="label",e.LI="li",e.LINK="link",e.LISTING="listing",e.MAIN="main",e.MALIGNMARK="malignmark",e.MARQUEE="marquee",e.MATH="math",e.MENU="menu",e.META="meta",e.MGLYPH="mglyph",e.MI="mi",e.MO="mo",e.MN="mn",e.MS="ms",e.MTEXT="mtext",e.NAV="nav",e.NOBR="nobr",e.NOFRAMES="noframes",e.NOEMBED="noembed",e.NOSCRIPT="noscript",e.OBJECT="object",e.OL="ol",e.OPTGROUP="optgroup",e.OPTION="option",e.P="p",e.PARAM="param",e.PLAINTEXT="plaintext",e.PRE="pre",e.RB="rb",e.RP="rp",e.RT="rt",e.RTC="rtc",e.RUBY="ruby",e.S="s",e.SCRIPT="script",e.SECTION="section",e.SELECT="select",e.SOURCE="source",e.SMALL="small",e.SPAN="span",e.STRIKE="strike",e.STRONG="strong",e.STYLE="style",e.SUB="sub",e.SUMMARY="summary",e.SUP="sup",e.TABLE="table",e.TBODY="tbody",e.TEMPLATE="template",e.TEXTAREA="textarea",e.TFOOT="tfoot",e.TD="td",e.TH="th",e.THEAD="thead",e.TITLE="title",e.TR="tr",e.TRACK="track",e.TT="tt",e.U="u",e.UL="ul",e.SVG="svg",e.VAR="var",e.WBR="wbr",e.XMP="xmp"}(Rf=Rf||(Rf={})),function(e){e[e.UNKNOWN=0]="UNKNOWN",e[e.A=1]="A",e[e.ADDRESS=2]="ADDRESS",e[e.ANNOTATION_XML=3]="ANNOTATION_XML",e[e.APPLET=4]="APPLET",e[e.AREA=5]="AREA",e[e.ARTICLE=6]="ARTICLE",e[e.ASIDE=7]="ASIDE",e[e.B=8]="B",e[e.BASE=9]="BASE",e[e.BASEFONT=10]="BASEFONT",e[e.BGSOUND=11]="BGSOUND",e[e.BIG=12]="BIG",e[e.BLOCKQUOTE=13]="BLOCKQUOTE",e[e.BODY=14]="BODY",e[e.BR=15]="BR",e[e.BUTTON=16]="BUTTON",e[e.CAPTION=17]="CAPTION",e[e.CENTER=18]="CENTER",e[e.CODE=19]="CODE",e[e.COL=20]="COL",e[e.COLGROUP=21]="COLGROUP",e[e.DD=22]="DD",e[e.DESC=23]="DESC",e[e.DETAILS=24]="DETAILS",e[e.DIALOG=25]="DIALOG",e[e.DIR=26]="DIR",e[e.DIV=27]="DIV",e[e.DL=28]="DL",e[e.DT=29]="DT",e[e.EM=30]="EM",e[e.EMBED=31]="EMBED",e[e.FIELDSET=32]="FIELDSET",e[e.FIGCAPTION=33]="FIGCAPTION",e[e.FIGURE=34]="FIGURE",e[e.FONT=35]="FONT",e[e.FOOTER=36]="FOOTER",e[e.FOREIGN_OBJECT=37]="FOREIGN_OBJECT",e[e.FORM=38]="FORM",e[e.FRAME=39]="FRAME",e[e.FRAMESET=40]="FRAMESET",e[e.H1=41]="H1",e[e.H2=42]="H2",e[e.H3=43]="H3",e[e.H4=44]="H4",e[e.H5=45]="H5",e[e.H6=46]="H6",e[e.HEAD=47]="HEAD",e[e.HEADER=48]="HEADER",e[e.HGROUP=49]="HGROUP",e[e.HR=50]="HR",e[e.HTML=51]="HTML",e[e.I=52]="I",e[e.IMG=53]="IMG",e[e.IMAGE=54]="IMAGE",e[e.INPUT=55]="INPUT",e[e.IFRAME=56]="IFRAME",e[e.KEYGEN=57]="KEYGEN",e[e.LABEL=58]="LABEL",e[e.LI=59]="LI",e[e.LINK=60]="LINK",e[e.LISTING=61]="LISTING",e[e.MAIN=62]="MAIN",e[e.MALIGNMARK=63]="MALIGNMARK",e[e.MARQUEE=64]="MARQUEE",e[e.MATH=65]="MATH",e[e.MENU=66]="MENU",e[e.META=67]="META",e[e.MGLYPH=68]="MGLYPH",e[e.MI=69]="MI",e[e.MO=70]="MO",e[e.MN=71]="MN",e[e.MS=72]="MS",e[e.MTEXT=73]="MTEXT",e[e.NAV=74]="NAV",e[e.NOBR=75]="NOBR",e[e.NOFRAMES=76]="NOFRAMES",e[e.NOEMBED=77]="NOEMBED",e[e.NOSCRIPT=78]="NOSCRIPT",e[e.OBJECT=79]="OBJECT",e[e.OL=80]="OL",e[e.OPTGROUP=81]="OPTGROUP",e[e.OPTION=82]="OPTION",e[e.P=83]="P",e[e.PARAM=84]="PARAM",e[e.PLAINTEXT=85]="PLAINTEXT",e[e.PRE=86]="PRE",e[e.RB=87]="RB",e[e.RP=88]="RP",e[e.RT=89]="RT",e[e.RTC=90]="RTC",e[e.RUBY=91]="RUBY",e[e.S=92]="S",e[e.SCRIPT=93]="SCRIPT",e[e.SECTION=94]="SECTION",e[e.SELECT=95]="SELECT",e[e.SOURCE=96]="SOURCE",e[e.SMALL=97]="SMALL",e[e.SPAN=98]="SPAN",e[e.STRIKE=99]="STRIKE",e[e.STRONG=100]="STRONG",e[e.STYLE=101]="STYLE",e[e.SUB=102]="SUB",e[e.SUMMARY=103]="SUMMARY",e[e.SUP=104]="SUP",e[e.TABLE=105]="TABLE",e[e.TBODY=106]="TBODY",e[e.TEMPLATE=107]="TEMPLATE",e[e.TEXTAREA=108]="TEXTAREA",e[e.TFOOT=109]="TFOOT",e[e.TD=110]="TD",e[e.TH=111]="TH",e[e.THEAD=112]="THEAD",e[e.TITLE=113]="TITLE",e[e.TR=114]="TR",e[e.TRACK=115]="TRACK",e[e.TT=116]="TT",e[e.U=117]="U",e[e.UL=118]="UL",e[e.SVG=119]="SVG",e[e.VAR=120]="VAR",e[e.WBR=121]="WBR",e[e.XMP=122]="XMP"}(kf=kf||(kf={}));const Bf=new Map([[Rf.A,kf.A],[Rf.ADDRESS,kf.ADDRESS],[Rf.ANNOTATION_XML,kf.ANNOTATION_XML],[Rf.APPLET,kf.APPLET],[Rf.AREA,kf.AREA],[Rf.ARTICLE,kf.ARTICLE],[Rf.ASIDE,kf.ASIDE],[Rf.B,kf.B],[Rf.BASE,kf.BASE],[Rf.BASEFONT,kf.BASEFONT],[Rf.BGSOUND,kf.BGSOUND],[Rf.BIG,kf.BIG],[Rf.BLOCKQUOTE,kf.BLOCKQUOTE],[Rf.BODY,kf.BODY],[Rf.BR,kf.BR],[Rf.BUTTON,kf.BUTTON],[Rf.CAPTION,kf.CAPTION],[Rf.CENTER,kf.CENTER],[Rf.CODE,kf.CODE],[Rf.COL,kf.COL],[Rf.COLGROUP,kf.COLGROUP],[Rf.DD,kf.DD],[Rf.DESC,kf.DESC],[Rf.DETAILS,kf.DETAILS],[Rf.DIALOG,kf.DIALOG],[Rf.DIR,kf.DIR],[Rf.DIV,kf.DIV],[Rf.DL,kf.DL],[Rf.DT,kf.DT],[Rf.EM,kf.EM],[Rf.EMBED,kf.EMBED],[Rf.FIELDSET,kf.FIELDSET],[Rf.FIGCAPTION,kf.FIGCAPTION],[Rf.FIGURE,kf.FIGURE],[Rf.FONT,kf.FONT],[Rf.FOOTER,kf.FOOTER],[Rf.FOREIGN_OBJECT,kf.FOREIGN_OBJECT],[Rf.FORM,kf.FORM],[Rf.FRAME,kf.FRAME],[Rf.FRAMESET,kf.FRAMESET],[Rf.H1,kf.H1],[Rf.H2,kf.H2],[Rf.H3,kf.H3],[Rf.H4,kf.H4],[Rf.H5,kf.H5],[Rf.H6,kf.H6],[Rf.HEAD,kf.HEAD],[Rf.HEADER,kf.HEADER],[Rf.HGROUP,kf.HGROUP],[Rf.HR,kf.HR],[Rf.HTML,kf.HTML],[Rf.I,kf.I],[Rf.IMG,kf.IMG],[Rf.IMAGE,kf.IMAGE],[Rf.INPUT,kf.INPUT],[Rf.IFRAME,kf.IFRAME],[Rf.KEYGEN,kf.KEYGEN],[Rf.LABEL,kf.LABEL],[Rf.LI,kf.LI],[Rf.LINK,kf.LINK],[Rf.LISTING,kf.LISTING],[Rf.MAIN,kf.MAIN],[Rf.MALIGNMARK,kf.MALIGNMARK],[Rf.MARQUEE,kf.MARQUEE],[Rf.MATH,kf.MATH],[Rf.MENU,kf.MENU],[Rf.META,kf.META],[Rf.MGLYPH,kf.MGLYPH],[Rf.MI,kf.MI],[Rf.MO,kf.MO],[Rf.MN,kf.MN],[Rf.MS,kf.MS],[Rf.MTEXT,kf.MTEXT],[Rf.NAV,kf.NAV],[Rf.NOBR,kf.NOBR],[Rf.NOFRAMES,kf.NOFRAMES],[Rf.NOEMBED,kf.NOEMBED],[Rf.NOSCRIPT,kf.NOSCRIPT],[Rf.OBJECT,kf.OBJECT],[Rf.OL,kf.OL],[Rf.OPTGROUP,kf.OPTGROUP],[Rf.OPTION,kf.OPTION],[Rf.P,kf.P],[Rf.PARAM,kf.PARAM],[Rf.PLAINTEXT,kf.PLAINTEXT],[Rf.PRE,kf.PRE],[Rf.RB,kf.RB],[Rf.RP,kf.RP],[Rf.RT,kf.RT],[Rf.RTC,kf.RTC],[Rf.RUBY,kf.RUBY],[Rf.S,kf.S],[Rf.SCRIPT,kf.SCRIPT],[Rf.SECTION,kf.SECTION],[Rf.SELECT,kf.SELECT],[Rf.SOURCE,kf.SOURCE],[Rf.SMALL,kf.SMALL],[Rf.SPAN,kf.SPAN],[Rf.STRIKE,kf.STRIKE],[Rf.STRONG,kf.STRONG],[Rf.STYLE,kf.STYLE],[Rf.SUB,kf.SUB],[Rf.SUMMARY,kf.SUMMARY],[Rf.SUP,kf.SUP],[Rf.TABLE,kf.TABLE],[Rf.TBODY,kf.TBODY],[Rf.TEMPLATE,kf.TEMPLATE],[Rf.TEXTAREA,kf.TEXTAREA],[Rf.TFOOT,kf.TFOOT],[Rf.TD,kf.TD],[Rf.TH,kf.TH],[Rf.THEAD,kf.THEAD],[Rf.TITLE,kf.TITLE],[Rf.TR,kf.TR],[Rf.TRACK,kf.TRACK],[Rf.TT,kf.TT],[Rf.U,kf.U],[Rf.UL,kf.UL],[Rf.SVG,kf.SVG],[Rf.VAR,kf.VAR],[Rf.WBR,kf.WBR],[Rf.XMP,kf.XMP]]);function Ff(e){var t;return null!==(t=Bf.get(e))&&void 0!==t?t:kf.UNKNOWN}const Uf=kf,zf={[Nf.HTML]:new Set([Uf.ADDRESS,Uf.APPLET,Uf.AREA,Uf.ARTICLE,Uf.ASIDE,Uf.BASE,Uf.BASEFONT,Uf.BGSOUND,Uf.BLOCKQUOTE,Uf.BODY,Uf.BR,Uf.BUTTON,Uf.CAPTION,Uf.CENTER,Uf.COL,Uf.COLGROUP,Uf.DD,Uf.DETAILS,Uf.DIR,Uf.DIV,Uf.DL,Uf.DT,Uf.EMBED,Uf.FIELDSET,Uf.FIGCAPTION,Uf.FIGURE,Uf.FOOTER,Uf.FORM,Uf.FRAME,Uf.FRAMESET,Uf.H1,Uf.H2,Uf.H3,Uf.H4,Uf.H5,Uf.H6,Uf.HEAD,Uf.HEADER,Uf.HGROUP,Uf.HR,Uf.HTML,Uf.IFRAME,Uf.IMG,Uf.INPUT,Uf.LI,Uf.LINK,Uf.LISTING,Uf.MAIN,Uf.MARQUEE,Uf.MENU,Uf.META,Uf.NAV,Uf.NOEMBED,Uf.NOFRAMES,Uf.NOSCRIPT,Uf.OBJECT,Uf.OL,Uf.P,Uf.PARAM,Uf.PLAINTEXT,Uf.PRE,Uf.SCRIPT,Uf.SECTION,Uf.SELECT,Uf.SOURCE,Uf.STYLE,Uf.SUMMARY,Uf.TABLE,Uf.TBODY,Uf.TD,Uf.TEMPLATE,Uf.TEXTAREA,Uf.TFOOT,Uf.TH,Uf.THEAD,Uf.TITLE,Uf.TR,Uf.TRACK,Uf.UL,Uf.WBR,Uf.XMP]),[Nf.MATHML]:new Set([Uf.MI,Uf.MO,Uf.MN,Uf.MS,Uf.MTEXT,Uf.ANNOTATION_XML]),[Nf.SVG]:new Set([Uf.TITLE,Uf.FOREIGN_OBJECT,Uf.DESC]),[Nf.XLINK]:new Set,[Nf.XML]:new Set,[Nf.XMLNS]:new Set};function Hf(e){return e===Uf.H1||e===Uf.H2||e===Uf.H3||e===Uf.H4||e===Uf.H5||e===Uf.H6}new Set([Rf.STYLE,Rf.SCRIPT,Rf.XMP,Rf.IFRAME,Rf.NOEMBED,Rf.NOFRAMES,Rf.PLAINTEXT]);const Gf=new Map([[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]);var jf;!function(e){e[e.DATA=0]="DATA",e[e.RCDATA=1]="RCDATA",e[e.RAWTEXT=2]="RAWTEXT",e[e.SCRIPT_DATA=3]="SCRIPT_DATA",e[e.PLAINTEXT=4]="PLAINTEXT",e[e.TAG_OPEN=5]="TAG_OPEN",e[e.END_TAG_OPEN=6]="END_TAG_OPEN",e[e.TAG_NAME=7]="TAG_NAME",e[e.RCDATA_LESS_THAN_SIGN=8]="RCDATA_LESS_THAN_SIGN",e[e.RCDATA_END_TAG_OPEN=9]="RCDATA_END_TAG_OPEN",e[e.RCDATA_END_TAG_NAME=10]="RCDATA_END_TAG_NAME",e[e.RAWTEXT_LESS_THAN_SIGN=11]="RAWTEXT_LESS_THAN_SIGN",e[e.RAWTEXT_END_TAG_OPEN=12]="RAWTEXT_END_TAG_OPEN",e[e.RAWTEXT_END_TAG_NAME=13]="RAWTEXT_END_TAG_NAME",e[e.SCRIPT_DATA_LESS_THAN_SIGN=14]="SCRIPT_DATA_LESS_THAN_SIGN",e[e.SCRIPT_DATA_END_TAG_OPEN=15]="SCRIPT_DATA_END_TAG_OPEN",e[e.SCRIPT_DATA_END_TAG_NAME=16]="SCRIPT_DATA_END_TAG_NAME",e[e.SCRIPT_DATA_ESCAPE_START=17]="SCRIPT_DATA_ESCAPE_START",e[e.SCRIPT_DATA_ESCAPE_START_DASH=18]="SCRIPT_DATA_ESCAPE_START_DASH",e[e.SCRIPT_DATA_ESCAPED=19]="SCRIPT_DATA_ESCAPED",e[e.SCRIPT_DATA_ESCAPED_DASH=20]="SCRIPT_DATA_ESCAPED_DASH",e[e.SCRIPT_DATA_ESCAPED_DASH_DASH=21]="SCRIPT_DATA_ESCAPED_DASH_DASH",e[e.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN=22]="SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN",e[e.SCRIPT_DATA_ESCAPED_END_TAG_OPEN=23]="SCRIPT_DATA_ESCAPED_END_TAG_OPEN",e[e.SCRIPT_DATA_ESCAPED_END_TAG_NAME=24]="SCRIPT_DATA_ESCAPED_END_TAG_NAME",e[e.SCRIPT_DATA_DOUBLE_ESCAPE_START=25]="SCRIPT_DATA_DOUBLE_ESCAPE_START",e[e.SCRIPT_DATA_DOUBLE_ESCAPED=26]="SCRIPT_DATA_DOUBLE_ESCAPED",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_DASH=27]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH=28]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN=29]="SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN",e[e.SCRIPT_DATA_DOUBLE_ESCAPE_END=30]="SCRIPT_DATA_DOUBLE_ESCAPE_END",e[e.BEFORE_ATTRIBUTE_NAME=31]="BEFORE_ATTRIBUTE_NAME",e[e.ATTRIBUTE_NAME=32]="ATTRIBUTE_NAME",e[e.AFTER_ATTRIBUTE_NAME=33]="AFTER_ATTRIBUTE_NAME",e[e.BEFORE_ATTRIBUTE_VALUE=34]="BEFORE_ATTRIBUTE_VALUE",e[e.ATTRIBUTE_VALUE_DOUBLE_QUOTED=35]="ATTRIBUTE_VALUE_DOUBLE_QUOTED",e[e.ATTRIBUTE_VALUE_SINGLE_QUOTED=36]="ATTRIBUTE_VALUE_SINGLE_QUOTED",e[e.ATTRIBUTE_VALUE_UNQUOTED=37]="ATTRIBUTE_VALUE_UNQUOTED",e[e.AFTER_ATTRIBUTE_VALUE_QUOTED=38]="AFTER_ATTRIBUTE_VALUE_QUOTED",e[e.SELF_CLOSING_START_TAG=39]="SELF_CLOSING_START_TAG",e[e.BOGUS_COMMENT=40]="BOGUS_COMMENT",e[e.MARKUP_DECLARATION_OPEN=41]="MARKUP_DECLARATION_OPEN",e[e.COMMENT_START=42]="COMMENT_START",e[e.COMMENT_START_DASH=43]="COMMENT_START_DASH",e[e.COMMENT=44]="COMMENT",e[e.COMMENT_LESS_THAN_SIGN=45]="COMMENT_LESS_THAN_SIGN",e[e.COMMENT_LESS_THAN_SIGN_BANG=46]="COMMENT_LESS_THAN_SIGN_BANG",e[e.COMMENT_LESS_THAN_SIGN_BANG_DASH=47]="COMMENT_LESS_THAN_SIGN_BANG_DASH",e[e.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH=48]="COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH",e[e.COMMENT_END_DASH=49]="COMMENT_END_DASH",e[e.COMMENT_END=50]="COMMENT_END",e[e.COMMENT_END_BANG=51]="COMMENT_END_BANG",e[e.DOCTYPE=52]="DOCTYPE",e[e.BEFORE_DOCTYPE_NAME=53]="BEFORE_DOCTYPE_NAME",e[e.DOCTYPE_NAME=54]="DOCTYPE_NAME",e[e.AFTER_DOCTYPE_NAME=55]="AFTER_DOCTYPE_NAME",e[e.AFTER_DOCTYPE_PUBLIC_KEYWORD=56]="AFTER_DOCTYPE_PUBLIC_KEYWORD",e[e.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER=57]="BEFORE_DOCTYPE_PUBLIC_IDENTIFIER",e[e.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED=58]="DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED",e[e.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED=59]="DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED",e[e.AFTER_DOCTYPE_PUBLIC_IDENTIFIER=60]="AFTER_DOCTYPE_PUBLIC_IDENTIFIER",e[e.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS=61]="BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS",e[e.AFTER_DOCTYPE_SYSTEM_KEYWORD=62]="AFTER_DOCTYPE_SYSTEM_KEYWORD",e[e.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER=63]="BEFORE_DOCTYPE_SYSTEM_IDENTIFIER",e[e.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED=64]="DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED",e[e.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED=65]="DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED",e[e.AFTER_DOCTYPE_SYSTEM_IDENTIFIER=66]="AFTER_DOCTYPE_SYSTEM_IDENTIFIER",e[e.BOGUS_DOCTYPE=67]="BOGUS_DOCTYPE",e[e.CDATA_SECTION=68]="CDATA_SECTION",e[e.CDATA_SECTION_BRACKET=69]="CDATA_SECTION_BRACKET",e[e.CDATA_SECTION_END=70]="CDATA_SECTION_END",e[e.CHARACTER_REFERENCE=71]="CHARACTER_REFERENCE",e[e.NAMED_CHARACTER_REFERENCE=72]="NAMED_CHARACTER_REFERENCE",e[e.AMBIGUOUS_AMPERSAND=73]="AMBIGUOUS_AMPERSAND",e[e.NUMERIC_CHARACTER_REFERENCE=74]="NUMERIC_CHARACTER_REFERENCE",e[e.HEXADEMICAL_CHARACTER_REFERENCE_START=75]="HEXADEMICAL_CHARACTER_REFERENCE_START",e[e.HEXADEMICAL_CHARACTER_REFERENCE=76]="HEXADEMICAL_CHARACTER_REFERENCE",e[e.DECIMAL_CHARACTER_REFERENCE=77]="DECIMAL_CHARACTER_REFERENCE",e[e.NUMERIC_CHARACTER_REFERENCE_END=78]="NUMERIC_CHARACTER_REFERENCE_END"}(jf||(jf={}));const Vf={DATA:jf.DATA,RCDATA:jf.RCDATA,RAWTEXT:jf.RAWTEXT,SCRIPT_DATA:jf.SCRIPT_DATA,PLAINTEXT:jf.PLAINTEXT,CDATA_SECTION:jf.CDATA_SECTION};function Zf(e){return e>=sf.DIGIT_0&&e<=sf.DIGIT_9}function Wf(e){return e>=sf.LATIN_CAPITAL_A&&e<=sf.LATIN_CAPITAL_Z}function $f(e){return function(e){return e>=sf.LATIN_SMALL_A&&e<=sf.LATIN_SMALL_Z}(e)||Wf(e)}function qf(e){return $f(e)||Zf(e)}function Yf(e){return e>=sf.LATIN_CAPITAL_A&&e<=sf.LATIN_CAPITAL_F}function Kf(e){return e>=sf.LATIN_SMALL_A&&e<=sf.LATIN_SMALL_F}function Xf(e){return e+32}function Qf(e){return e===sf.SPACE||e===sf.LINE_FEED||e===sf.TABULATION||e===sf.FORM_FEED}function Jf(e){return Qf(e)||e===sf.SOLIDUS||e===sf.GREATER_THAN_SIGN}class eh{constructor(e,t){this.options=e,this.handler=t,this.paused=!1,this.inLoop=!1,this.inForeignNode=!1,this.lastStartTagName="",this.active=!1,this.state=jf.DATA,this.returnState=jf.DATA,this.charRefCode=-1,this.consumedAfterSnapshot=-1,this.currentCharacterToken=null,this.currentToken=null,this.currentAttr={name:"",value:""},this.preprocessor=new gf(t),this.currentLocation=this.getCurrentLocation(-1)}_err(e){var t,n;null===(n=(t=this.handler).onParseError)||void 0===n||n.call(t,this.preprocessor.getError(e))}getCurrentLocation(e){return this.options.sourceCodeLocationInfo?{startLine:this.preprocessor.line,startCol:this.preprocessor.col-e,startOffset:this.preprocessor.offset-e,endLine:-1,endCol:-1,endOffset:-1}:null}_runParsingLoop(){if(!this.inLoop){for(this.inLoop=!0;this.active&&!this.paused;){this.consumedAfterSnapshot=0;const e=this._consume();this._ensureHibernation()||this._callState(e)}this.inLoop=!1}}pause(){this.paused=!0}resume(e){if(!this.paused)throw new Error("Parser was already resumed");this.paused=!1,this.inLoop||(this._runParsingLoop(),this.paused||null==e||e())}write(e,t,n){this.active=!0,this.preprocessor.write(e,t),this._runParsingLoop(),this.paused||null==n||n()}insertHtmlAtCurrentPos(e){this.active=!0,this.preprocessor.insertHtmlAtCurrentPos(e),this._runParsingLoop()}_ensureHibernation(){return!!this.preprocessor.endOfChunkHit&&(this._unconsume(this.consumedAfterSnapshot),this.active=!1,!0)}_consume(){return this.consumedAfterSnapshot++,this.preprocessor.advance()}_unconsume(e){this.consumedAfterSnapshot-=e,this.preprocessor.retreat(e)}_reconsumeInState(e,t){this.state=e,this._callState(t)}_advanceBy(e){this.consumedAfterSnapshot+=e;for(let t=0;t0&&this._err(ff.endTagWithAttributes),e.selfClosing&&this._err(ff.endTagWithTrailingSolidus),this.handler.onEndTag(e)),this.preprocessor.dropParsedChunk()}emitCurrentComment(e){this.prepareToken(e),this.handler.onComment(e),this.preprocessor.dropParsedChunk()}emitCurrentDoctype(e){this.prepareToken(e),this.handler.onDoctype(e),this.preprocessor.dropParsedChunk()}_emitCurrentCharacterToken(e){if(this.currentCharacterToken){switch(e&&this.currentCharacterToken.location&&(this.currentCharacterToken.location.endLine=e.startLine,this.currentCharacterToken.location.endCol=e.startCol,this.currentCharacterToken.location.endOffset=e.startOffset),this.currentCharacterToken.type){case hf.CHARACTER:this.handler.onCharacter(this.currentCharacterToken);break;case hf.NULL_CHARACTER:this.handler.onNullCharacter(this.currentCharacterToken);break;case hf.WHITESPACE_CHARACTER:this.handler.onWhitespaceCharacter(this.currentCharacterToken)}this.currentCharacterToken=null}}_emitEOFToken(){const e=this.getCurrentLocation(0);e&&(e.endLine=e.startLine,e.endCol=e.startCol,e.endOffset=e.startOffset),this._emitCurrentCharacterToken(e),this.handler.onEof({type:hf.EOF,location:e}),this.active=!1}_appendCharToCurrentCharacterToken(e,t){if(this.currentCharacterToken){if(this.currentCharacterToken.type===e)return void(this.currentCharacterToken.chars+=t);this.currentLocation=this.getCurrentLocation(0),this._emitCurrentCharacterToken(this.currentLocation),this.preprocessor.dropParsedChunk()}this._createCharacterToken(e,t)}_emitCodePoint(e){const t=Qf(e)?hf.WHITESPACE_CHARACTER:e===sf.NULL?hf.NULL_CHARACTER:hf.CHARACTER;this._appendCharToCurrentCharacterToken(t,String.fromCodePoint(e))}_emitChars(e){this._appendCharToCurrentCharacterToken(hf.CHARACTER,e)}_matchNamedCharacterReference(e){let t=null,n=0,r=!1;for(let o=0,i=vf[0];o>=0&&(o=Pf(vf,i,o+1,e),!(o<0));e=this._consume()){n+=1,i=vf[o];const s=i&Af.VALUE_LENGTH;if(s){const i=(s>>14)-1;if(e!==sf.SEMICOLON&&this._isCharacterReferenceInAttribute()&&((a=this.preprocessor.peek(1))===sf.EQUALS_SIGN||qf(a))?(t=[sf.AMPERSAND],o+=i):(t=0===i?[vf[o]&~Af.VALUE_LENGTH]:1===i?[vf[++o]]:[vf[++o],vf[++o]],n=0,r=e!==sf.SEMICOLON),0===i){this._consume();break}}}var a;return this._unconsume(n),r&&!this.preprocessor.endOfChunkHit&&this._err(ff.missingSemicolonAfterCharacterReference),this._unconsume(1),t}_isCharacterReferenceInAttribute(){return this.returnState===jf.ATTRIBUTE_VALUE_DOUBLE_QUOTED||this.returnState===jf.ATTRIBUTE_VALUE_SINGLE_QUOTED||this.returnState===jf.ATTRIBUTE_VALUE_UNQUOTED}_flushCodePointConsumedAsCharacterReference(e){this._isCharacterReferenceInAttribute()?this.currentAttr.value+=String.fromCodePoint(e):this._emitCodePoint(e)}_callState(e){switch(this.state){case jf.DATA:this._stateData(e);break;case jf.RCDATA:this._stateRcdata(e);break;case jf.RAWTEXT:this._stateRawtext(e);break;case jf.SCRIPT_DATA:this._stateScriptData(e);break;case jf.PLAINTEXT:this._statePlaintext(e);break;case jf.TAG_OPEN:this._stateTagOpen(e);break;case jf.END_TAG_OPEN:this._stateEndTagOpen(e);break;case jf.TAG_NAME:this._stateTagName(e);break;case jf.RCDATA_LESS_THAN_SIGN:this._stateRcdataLessThanSign(e);break;case jf.RCDATA_END_TAG_OPEN:this._stateRcdataEndTagOpen(e);break;case jf.RCDATA_END_TAG_NAME:this._stateRcdataEndTagName(e);break;case jf.RAWTEXT_LESS_THAN_SIGN:this._stateRawtextLessThanSign(e);break;case jf.RAWTEXT_END_TAG_OPEN:this._stateRawtextEndTagOpen(e);break;case jf.RAWTEXT_END_TAG_NAME:this._stateRawtextEndTagName(e);break;case jf.SCRIPT_DATA_LESS_THAN_SIGN:this._stateScriptDataLessThanSign(e);break;case jf.SCRIPT_DATA_END_TAG_OPEN:this._stateScriptDataEndTagOpen(e);break;case jf.SCRIPT_DATA_END_TAG_NAME:this._stateScriptDataEndTagName(e);break;case jf.SCRIPT_DATA_ESCAPE_START:this._stateScriptDataEscapeStart(e);break;case jf.SCRIPT_DATA_ESCAPE_START_DASH:this._stateScriptDataEscapeStartDash(e);break;case jf.SCRIPT_DATA_ESCAPED:this._stateScriptDataEscaped(e);break;case jf.SCRIPT_DATA_ESCAPED_DASH:this._stateScriptDataEscapedDash(e);break;case jf.SCRIPT_DATA_ESCAPED_DASH_DASH:this._stateScriptDataEscapedDashDash(e);break;case jf.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN:this._stateScriptDataEscapedLessThanSign(e);break;case jf.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:this._stateScriptDataEscapedEndTagOpen(e);break;case jf.SCRIPT_DATA_ESCAPED_END_TAG_NAME:this._stateScriptDataEscapedEndTagName(e);break;case jf.SCRIPT_DATA_DOUBLE_ESCAPE_START:this._stateScriptDataDoubleEscapeStart(e);break;case jf.SCRIPT_DATA_DOUBLE_ESCAPED:this._stateScriptDataDoubleEscaped(e);break;case jf.SCRIPT_DATA_DOUBLE_ESCAPED_DASH:this._stateScriptDataDoubleEscapedDash(e);break;case jf.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH:this._stateScriptDataDoubleEscapedDashDash(e);break;case jf.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN:this._stateScriptDataDoubleEscapedLessThanSign(e);break;case jf.SCRIPT_DATA_DOUBLE_ESCAPE_END:this._stateScriptDataDoubleEscapeEnd(e);break;case jf.BEFORE_ATTRIBUTE_NAME:this._stateBeforeAttributeName(e);break;case jf.ATTRIBUTE_NAME:this._stateAttributeName(e);break;case jf.AFTER_ATTRIBUTE_NAME:this._stateAfterAttributeName(e);break;case jf.BEFORE_ATTRIBUTE_VALUE:this._stateBeforeAttributeValue(e);break;case jf.ATTRIBUTE_VALUE_DOUBLE_QUOTED:this._stateAttributeValueDoubleQuoted(e);break;case jf.ATTRIBUTE_VALUE_SINGLE_QUOTED:this._stateAttributeValueSingleQuoted(e);break;case jf.ATTRIBUTE_VALUE_UNQUOTED:this._stateAttributeValueUnquoted(e);break;case jf.AFTER_ATTRIBUTE_VALUE_QUOTED:this._stateAfterAttributeValueQuoted(e);break;case jf.SELF_CLOSING_START_TAG:this._stateSelfClosingStartTag(e);break;case jf.BOGUS_COMMENT:this._stateBogusComment(e);break;case jf.MARKUP_DECLARATION_OPEN:this._stateMarkupDeclarationOpen(e);break;case jf.COMMENT_START:this._stateCommentStart(e);break;case jf.COMMENT_START_DASH:this._stateCommentStartDash(e);break;case jf.COMMENT:this._stateComment(e);break;case jf.COMMENT_LESS_THAN_SIGN:this._stateCommentLessThanSign(e);break;case jf.COMMENT_LESS_THAN_SIGN_BANG:this._stateCommentLessThanSignBang(e);break;case jf.COMMENT_LESS_THAN_SIGN_BANG_DASH:this._stateCommentLessThanSignBangDash(e);break;case jf.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:this._stateCommentLessThanSignBangDashDash(e);break;case jf.COMMENT_END_DASH:this._stateCommentEndDash(e);break;case jf.COMMENT_END:this._stateCommentEnd(e);break;case jf.COMMENT_END_BANG:this._stateCommentEndBang(e);break;case jf.DOCTYPE:this._stateDoctype(e);break;case jf.BEFORE_DOCTYPE_NAME:this._stateBeforeDoctypeName(e);break;case jf.DOCTYPE_NAME:this._stateDoctypeName(e);break;case jf.AFTER_DOCTYPE_NAME:this._stateAfterDoctypeName(e);break;case jf.AFTER_DOCTYPE_PUBLIC_KEYWORD:this._stateAfterDoctypePublicKeyword(e);break;case jf.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER:this._stateBeforeDoctypePublicIdentifier(e);break;case jf.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED:this._stateDoctypePublicIdentifierDoubleQuoted(e);break;case jf.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED:this._stateDoctypePublicIdentifierSingleQuoted(e);break;case jf.AFTER_DOCTYPE_PUBLIC_IDENTIFIER:this._stateAfterDoctypePublicIdentifier(e);break;case jf.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS:this._stateBetweenDoctypePublicAndSystemIdentifiers(e);break;case jf.AFTER_DOCTYPE_SYSTEM_KEYWORD:this._stateAfterDoctypeSystemKeyword(e);break;case jf.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER:this._stateBeforeDoctypeSystemIdentifier(e);break;case jf.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED:this._stateDoctypeSystemIdentifierDoubleQuoted(e);break;case jf.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED:this._stateDoctypeSystemIdentifierSingleQuoted(e);break;case jf.AFTER_DOCTYPE_SYSTEM_IDENTIFIER:this._stateAfterDoctypeSystemIdentifier(e);break;case jf.BOGUS_DOCTYPE:this._stateBogusDoctype(e);break;case jf.CDATA_SECTION:this._stateCdataSection(e);break;case jf.CDATA_SECTION_BRACKET:this._stateCdataSectionBracket(e);break;case jf.CDATA_SECTION_END:this._stateCdataSectionEnd(e);break;case jf.CHARACTER_REFERENCE:this._stateCharacterReference(e);break;case jf.NAMED_CHARACTER_REFERENCE:this._stateNamedCharacterReference(e);break;case jf.AMBIGUOUS_AMPERSAND:this._stateAmbiguousAmpersand(e);break;case jf.NUMERIC_CHARACTER_REFERENCE:this._stateNumericCharacterReference(e);break;case jf.HEXADEMICAL_CHARACTER_REFERENCE_START:this._stateHexademicalCharacterReferenceStart(e);break;case jf.HEXADEMICAL_CHARACTER_REFERENCE:this._stateHexademicalCharacterReference(e);break;case jf.DECIMAL_CHARACTER_REFERENCE:this._stateDecimalCharacterReference(e);break;case jf.NUMERIC_CHARACTER_REFERENCE_END:this._stateNumericCharacterReferenceEnd(e);break;default:throw new Error("Unknown state")}}_stateData(e){switch(e){case sf.LESS_THAN_SIGN:this.state=jf.TAG_OPEN;break;case sf.AMPERSAND:this.returnState=jf.DATA,this.state=jf.CHARACTER_REFERENCE;break;case sf.NULL:this._err(ff.unexpectedNullCharacter),this._emitCodePoint(e);break;case sf.EOF:this._emitEOFToken();break;default:this._emitCodePoint(e)}}_stateRcdata(e){switch(e){case sf.AMPERSAND:this.returnState=jf.RCDATA,this.state=jf.CHARACTER_REFERENCE;break;case sf.LESS_THAN_SIGN:this.state=jf.RCDATA_LESS_THAN_SIGN;break;case sf.NULL:this._err(ff.unexpectedNullCharacter),this._emitChars(of);break;case sf.EOF:this._emitEOFToken();break;default:this._emitCodePoint(e)}}_stateRawtext(e){switch(e){case sf.LESS_THAN_SIGN:this.state=jf.RAWTEXT_LESS_THAN_SIGN;break;case sf.NULL:this._err(ff.unexpectedNullCharacter),this._emitChars(of);break;case sf.EOF:this._emitEOFToken();break;default:this._emitCodePoint(e)}}_stateScriptData(e){switch(e){case sf.LESS_THAN_SIGN:this.state=jf.SCRIPT_DATA_LESS_THAN_SIGN;break;case sf.NULL:this._err(ff.unexpectedNullCharacter),this._emitChars(of);break;case sf.EOF:this._emitEOFToken();break;default:this._emitCodePoint(e)}}_statePlaintext(e){switch(e){case sf.NULL:this._err(ff.unexpectedNullCharacter),this._emitChars(of);break;case sf.EOF:this._emitEOFToken();break;default:this._emitCodePoint(e)}}_stateTagOpen(e){if($f(e))this._createStartTagToken(),this.state=jf.TAG_NAME,this._stateTagName(e);else switch(e){case sf.EXCLAMATION_MARK:this.state=jf.MARKUP_DECLARATION_OPEN;break;case sf.SOLIDUS:this.state=jf.END_TAG_OPEN;break;case sf.QUESTION_MARK:this._err(ff.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(1),this.state=jf.BOGUS_COMMENT,this._stateBogusComment(e);break;case sf.EOF:this._err(ff.eofBeforeTagName),this._emitChars("<"),this._emitEOFToken();break;default:this._err(ff.invalidFirstCharacterOfTagName),this._emitChars("<"),this.state=jf.DATA,this._stateData(e)}}_stateEndTagOpen(e){if($f(e))this._createEndTagToken(),this.state=jf.TAG_NAME,this._stateTagName(e);else switch(e){case sf.GREATER_THAN_SIGN:this._err(ff.missingEndTagName),this.state=jf.DATA;break;case sf.EOF:this._err(ff.eofBeforeTagName),this._emitChars("");break;case sf.NULL:this._err(ff.unexpectedNullCharacter),this.state=jf.SCRIPT_DATA_ESCAPED,this._emitChars(of);break;case sf.EOF:this._err(ff.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break;default:this.state=jf.SCRIPT_DATA_ESCAPED,this._emitCodePoint(e)}}_stateScriptDataEscapedLessThanSign(e){e===sf.SOLIDUS?this.state=jf.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:$f(e)?(this._emitChars("<"),this.state=jf.SCRIPT_DATA_DOUBLE_ESCAPE_START,this._stateScriptDataDoubleEscapeStart(e)):(this._emitChars("<"),this.state=jf.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(e))}_stateScriptDataEscapedEndTagOpen(e){$f(e)?(this.state=jf.SCRIPT_DATA_ESCAPED_END_TAG_NAME,this._stateScriptDataEscapedEndTagName(e)):(this._emitChars("");break;case sf.NULL:this._err(ff.unexpectedNullCharacter),this.state=jf.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(of);break;case sf.EOF:this._err(ff.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break;default:this.state=jf.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(e)}}_stateScriptDataDoubleEscapedLessThanSign(e){e===sf.SOLIDUS?(this.state=jf.SCRIPT_DATA_DOUBLE_ESCAPE_END,this._emitChars("/")):(this.state=jf.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(e))}_stateScriptDataDoubleEscapeEnd(e){if(this.preprocessor.startsWith(uf,!1)&&Jf(this.preprocessor.peek(6))){this._emitCodePoint(e);for(let e=0;e<6;e++)this._emitCodePoint(this._consume());this.state=jf.SCRIPT_DATA_ESCAPED}else this._ensureHibernation()||(this.state=jf.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(e))}_stateBeforeAttributeName(e){switch(e){case sf.SPACE:case sf.LINE_FEED:case sf.TABULATION:case sf.FORM_FEED:break;case sf.SOLIDUS:case sf.GREATER_THAN_SIGN:case sf.EOF:this.state=jf.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(e);break;case sf.EQUALS_SIGN:this._err(ff.unexpectedEqualsSignBeforeAttributeName),this._createAttr("="),this.state=jf.ATTRIBUTE_NAME;break;default:this._createAttr(""),this.state=jf.ATTRIBUTE_NAME,this._stateAttributeName(e)}}_stateAttributeName(e){switch(e){case sf.SPACE:case sf.LINE_FEED:case sf.TABULATION:case sf.FORM_FEED:case sf.SOLIDUS:case sf.GREATER_THAN_SIGN:case sf.EOF:this._leaveAttrName(),this.state=jf.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(e);break;case sf.EQUALS_SIGN:this._leaveAttrName(),this.state=jf.BEFORE_ATTRIBUTE_VALUE;break;case sf.QUOTATION_MARK:case sf.APOSTROPHE:case sf.LESS_THAN_SIGN:this._err(ff.unexpectedCharacterInAttributeName),this.currentAttr.name+=String.fromCodePoint(e);break;case sf.NULL:this._err(ff.unexpectedNullCharacter),this.currentAttr.name+=of;break;default:this.currentAttr.name+=String.fromCodePoint(Wf(e)?Xf(e):e)}}_stateAfterAttributeName(e){switch(e){case sf.SPACE:case sf.LINE_FEED:case sf.TABULATION:case sf.FORM_FEED:break;case sf.SOLIDUS:this.state=jf.SELF_CLOSING_START_TAG;break;case sf.EQUALS_SIGN:this.state=jf.BEFORE_ATTRIBUTE_VALUE;break;case sf.GREATER_THAN_SIGN:this.state=jf.DATA,this.emitCurrentTagToken();break;case sf.EOF:this._err(ff.eofInTag),this._emitEOFToken();break;default:this._createAttr(""),this.state=jf.ATTRIBUTE_NAME,this._stateAttributeName(e)}}_stateBeforeAttributeValue(e){switch(e){case sf.SPACE:case sf.LINE_FEED:case sf.TABULATION:case sf.FORM_FEED:break;case sf.QUOTATION_MARK:this.state=jf.ATTRIBUTE_VALUE_DOUBLE_QUOTED;break;case sf.APOSTROPHE:this.state=jf.ATTRIBUTE_VALUE_SINGLE_QUOTED;break;case sf.GREATER_THAN_SIGN:this._err(ff.missingAttributeValue),this.state=jf.DATA,this.emitCurrentTagToken();break;default:this.state=jf.ATTRIBUTE_VALUE_UNQUOTED,this._stateAttributeValueUnquoted(e)}}_stateAttributeValueDoubleQuoted(e){switch(e){case sf.QUOTATION_MARK:this.state=jf.AFTER_ATTRIBUTE_VALUE_QUOTED;break;case sf.AMPERSAND:this.returnState=jf.ATTRIBUTE_VALUE_DOUBLE_QUOTED,this.state=jf.CHARACTER_REFERENCE;break;case sf.NULL:this._err(ff.unexpectedNullCharacter),this.currentAttr.value+=of;break;case sf.EOF:this._err(ff.eofInTag),this._emitEOFToken();break;default:this.currentAttr.value+=String.fromCodePoint(e)}}_stateAttributeValueSingleQuoted(e){switch(e){case sf.APOSTROPHE:this.state=jf.AFTER_ATTRIBUTE_VALUE_QUOTED;break;case sf.AMPERSAND:this.returnState=jf.ATTRIBUTE_VALUE_SINGLE_QUOTED,this.state=jf.CHARACTER_REFERENCE;break;case sf.NULL:this._err(ff.unexpectedNullCharacter),this.currentAttr.value+=of;break;case sf.EOF:this._err(ff.eofInTag),this._emitEOFToken();break;default:this.currentAttr.value+=String.fromCodePoint(e)}}_stateAttributeValueUnquoted(e){switch(e){case sf.SPACE:case sf.LINE_FEED:case sf.TABULATION:case sf.FORM_FEED:this._leaveAttrValue(),this.state=jf.BEFORE_ATTRIBUTE_NAME;break;case sf.AMPERSAND:this.returnState=jf.ATTRIBUTE_VALUE_UNQUOTED,this.state=jf.CHARACTER_REFERENCE;break;case sf.GREATER_THAN_SIGN:this._leaveAttrValue(),this.state=jf.DATA,this.emitCurrentTagToken();break;case sf.NULL:this._err(ff.unexpectedNullCharacter),this.currentAttr.value+=of;break;case sf.QUOTATION_MARK:case sf.APOSTROPHE:case sf.LESS_THAN_SIGN:case sf.EQUALS_SIGN:case sf.GRAVE_ACCENT:this._err(ff.unexpectedCharacterInUnquotedAttributeValue),this.currentAttr.value+=String.fromCodePoint(e);break;case sf.EOF:this._err(ff.eofInTag),this._emitEOFToken();break;default:this.currentAttr.value+=String.fromCodePoint(e)}}_stateAfterAttributeValueQuoted(e){switch(e){case sf.SPACE:case sf.LINE_FEED:case sf.TABULATION:case sf.FORM_FEED:this._leaveAttrValue(),this.state=jf.BEFORE_ATTRIBUTE_NAME;break;case sf.SOLIDUS:this._leaveAttrValue(),this.state=jf.SELF_CLOSING_START_TAG;break;case sf.GREATER_THAN_SIGN:this._leaveAttrValue(),this.state=jf.DATA,this.emitCurrentTagToken();break;case sf.EOF:this._err(ff.eofInTag),this._emitEOFToken();break;default:this._err(ff.missingWhitespaceBetweenAttributes),this.state=jf.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(e)}}_stateSelfClosingStartTag(e){switch(e){case sf.GREATER_THAN_SIGN:this.currentToken.selfClosing=!0,this.state=jf.DATA,this.emitCurrentTagToken();break;case sf.EOF:this._err(ff.eofInTag),this._emitEOFToken();break;default:this._err(ff.unexpectedSolidusInTag),this.state=jf.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(e)}}_stateBogusComment(e){const t=this.currentToken;switch(e){case sf.GREATER_THAN_SIGN:this.state=jf.DATA,this.emitCurrentComment(t);break;case sf.EOF:this.emitCurrentComment(t),this._emitEOFToken();break;case sf.NULL:this._err(ff.unexpectedNullCharacter),t.data+=of;break;default:t.data+=String.fromCodePoint(e)}}_stateMarkupDeclarationOpen(e){this._consumeSequenceIfMatch("--",!0)?(this._createCommentToken(3),this.state=jf.COMMENT_START):this._consumeSequenceIfMatch(cf,!1)?(this.currentLocation=this.getCurrentLocation(8),this.state=jf.DOCTYPE):this._consumeSequenceIfMatch(lf,!0)?this.inForeignNode?this.state=jf.CDATA_SECTION:(this._err(ff.cdataInHtmlContent),this._createCommentToken(8),this.currentToken.data="[CDATA[",this.state=jf.BOGUS_COMMENT):this._ensureHibernation()||(this._err(ff.incorrectlyOpenedComment),this._createCommentToken(2),this.state=jf.BOGUS_COMMENT,this._stateBogusComment(e))}_stateCommentStart(e){switch(e){case sf.HYPHEN_MINUS:this.state=jf.COMMENT_START_DASH;break;case sf.GREATER_THAN_SIGN:{this._err(ff.abruptClosingOfEmptyComment),this.state=jf.DATA;const e=this.currentToken;this.emitCurrentComment(e);break}default:this.state=jf.COMMENT,this._stateComment(e)}}_stateCommentStartDash(e){const t=this.currentToken;switch(e){case sf.HYPHEN_MINUS:this.state=jf.COMMENT_END;break;case sf.GREATER_THAN_SIGN:this._err(ff.abruptClosingOfEmptyComment),this.state=jf.DATA,this.emitCurrentComment(t);break;case sf.EOF:this._err(ff.eofInComment),this.emitCurrentComment(t),this._emitEOFToken();break;default:t.data+="-",this.state=jf.COMMENT,this._stateComment(e)}}_stateComment(e){const t=this.currentToken;switch(e){case sf.HYPHEN_MINUS:this.state=jf.COMMENT_END_DASH;break;case sf.LESS_THAN_SIGN:t.data+="<",this.state=jf.COMMENT_LESS_THAN_SIGN;break;case sf.NULL:this._err(ff.unexpectedNullCharacter),t.data+=of;break;case sf.EOF:this._err(ff.eofInComment),this.emitCurrentComment(t),this._emitEOFToken();break;default:t.data+=String.fromCodePoint(e)}}_stateCommentLessThanSign(e){const t=this.currentToken;switch(e){case sf.EXCLAMATION_MARK:t.data+="!",this.state=jf.COMMENT_LESS_THAN_SIGN_BANG;break;case sf.LESS_THAN_SIGN:t.data+="<";break;default:this.state=jf.COMMENT,this._stateComment(e)}}_stateCommentLessThanSignBang(e){e===sf.HYPHEN_MINUS?this.state=jf.COMMENT_LESS_THAN_SIGN_BANG_DASH:(this.state=jf.COMMENT,this._stateComment(e))}_stateCommentLessThanSignBangDash(e){e===sf.HYPHEN_MINUS?this.state=jf.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:(this.state=jf.COMMENT_END_DASH,this._stateCommentEndDash(e))}_stateCommentLessThanSignBangDashDash(e){e!==sf.GREATER_THAN_SIGN&&e!==sf.EOF&&this._err(ff.nestedComment),this.state=jf.COMMENT_END,this._stateCommentEnd(e)}_stateCommentEndDash(e){const t=this.currentToken;switch(e){case sf.HYPHEN_MINUS:this.state=jf.COMMENT_END;break;case sf.EOF:this._err(ff.eofInComment),this.emitCurrentComment(t),this._emitEOFToken();break;default:t.data+="-",this.state=jf.COMMENT,this._stateComment(e)}}_stateCommentEnd(e){const t=this.currentToken;switch(e){case sf.GREATER_THAN_SIGN:this.state=jf.DATA,this.emitCurrentComment(t);break;case sf.EXCLAMATION_MARK:this.state=jf.COMMENT_END_BANG;break;case sf.HYPHEN_MINUS:t.data+="-";break;case sf.EOF:this._err(ff.eofInComment),this.emitCurrentComment(t),this._emitEOFToken();break;default:t.data+="--",this.state=jf.COMMENT,this._stateComment(e)}}_stateCommentEndBang(e){const t=this.currentToken;switch(e){case sf.HYPHEN_MINUS:t.data+="--!",this.state=jf.COMMENT_END_DASH;break;case sf.GREATER_THAN_SIGN:this._err(ff.incorrectlyClosedComment),this.state=jf.DATA,this.emitCurrentComment(t);break;case sf.EOF:this._err(ff.eofInComment),this.emitCurrentComment(t),this._emitEOFToken();break;default:t.data+="--!",this.state=jf.COMMENT,this._stateComment(e)}}_stateDoctype(e){switch(e){case sf.SPACE:case sf.LINE_FEED:case sf.TABULATION:case sf.FORM_FEED:this.state=jf.BEFORE_DOCTYPE_NAME;break;case sf.GREATER_THAN_SIGN:this.state=jf.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(e);break;case sf.EOF:{this._err(ff.eofInDoctype),this._createDoctypeToken(null);const e=this.currentToken;e.forceQuirks=!0,this.emitCurrentDoctype(e),this._emitEOFToken();break}default:this._err(ff.missingWhitespaceBeforeDoctypeName),this.state=jf.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(e)}}_stateBeforeDoctypeName(e){if(Wf(e))this._createDoctypeToken(String.fromCharCode(Xf(e))),this.state=jf.DOCTYPE_NAME;else switch(e){case sf.SPACE:case sf.LINE_FEED:case sf.TABULATION:case sf.FORM_FEED:break;case sf.NULL:this._err(ff.unexpectedNullCharacter),this._createDoctypeToken(of),this.state=jf.DOCTYPE_NAME;break;case sf.GREATER_THAN_SIGN:{this._err(ff.missingDoctypeName),this._createDoctypeToken(null);const e=this.currentToken;e.forceQuirks=!0,this.emitCurrentDoctype(e),this.state=jf.DATA;break}case sf.EOF:{this._err(ff.eofInDoctype),this._createDoctypeToken(null);const e=this.currentToken;e.forceQuirks=!0,this.emitCurrentDoctype(e),this._emitEOFToken();break}default:this._createDoctypeToken(String.fromCodePoint(e)),this.state=jf.DOCTYPE_NAME}}_stateDoctypeName(e){const t=this.currentToken;switch(e){case sf.SPACE:case sf.LINE_FEED:case sf.TABULATION:case sf.FORM_FEED:this.state=jf.AFTER_DOCTYPE_NAME;break;case sf.GREATER_THAN_SIGN:this.state=jf.DATA,this.emitCurrentDoctype(t);break;case sf.NULL:this._err(ff.unexpectedNullCharacter),t.name+=of;break;case sf.EOF:this._err(ff.eofInDoctype),t.forceQuirks=!0,this.emitCurrentDoctype(t),this._emitEOFToken();break;default:t.name+=String.fromCodePoint(Wf(e)?Xf(e):e)}}_stateAfterDoctypeName(e){const t=this.currentToken;switch(e){case sf.SPACE:case sf.LINE_FEED:case sf.TABULATION:case sf.FORM_FEED:break;case sf.GREATER_THAN_SIGN:this.state=jf.DATA,this.emitCurrentDoctype(t);break;case sf.EOF:this._err(ff.eofInDoctype),t.forceQuirks=!0,this.emitCurrentDoctype(t),this._emitEOFToken();break;default:this._consumeSequenceIfMatch("public",!1)?this.state=jf.AFTER_DOCTYPE_PUBLIC_KEYWORD:this._consumeSequenceIfMatch("system",!1)?this.state=jf.AFTER_DOCTYPE_SYSTEM_KEYWORD:this._ensureHibernation()||(this._err(ff.invalidCharacterSequenceAfterDoctypeName),t.forceQuirks=!0,this.state=jf.BOGUS_DOCTYPE,this._stateBogusDoctype(e))}}_stateAfterDoctypePublicKeyword(e){const t=this.currentToken;switch(e){case sf.SPACE:case sf.LINE_FEED:case sf.TABULATION:case sf.FORM_FEED:this.state=jf.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER;break;case sf.QUOTATION_MARK:this._err(ff.missingWhitespaceAfterDoctypePublicKeyword),t.publicId="",this.state=jf.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break;case sf.APOSTROPHE:this._err(ff.missingWhitespaceAfterDoctypePublicKeyword),t.publicId="",this.state=jf.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break;case sf.GREATER_THAN_SIGN:this._err(ff.missingDoctypePublicIdentifier),t.forceQuirks=!0,this.state=jf.DATA,this.emitCurrentDoctype(t);break;case sf.EOF:this._err(ff.eofInDoctype),t.forceQuirks=!0,this.emitCurrentDoctype(t),this._emitEOFToken();break;default:this._err(ff.missingQuoteBeforeDoctypePublicIdentifier),t.forceQuirks=!0,this.state=jf.BOGUS_DOCTYPE,this._stateBogusDoctype(e)}}_stateBeforeDoctypePublicIdentifier(e){const t=this.currentToken;switch(e){case sf.SPACE:case sf.LINE_FEED:case sf.TABULATION:case sf.FORM_FEED:break;case sf.QUOTATION_MARK:t.publicId="",this.state=jf.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break;case sf.APOSTROPHE:t.publicId="",this.state=jf.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break;case sf.GREATER_THAN_SIGN:this._err(ff.missingDoctypePublicIdentifier),t.forceQuirks=!0,this.state=jf.DATA,this.emitCurrentDoctype(t);break;case sf.EOF:this._err(ff.eofInDoctype),t.forceQuirks=!0,this.emitCurrentDoctype(t),this._emitEOFToken();break;default:this._err(ff.missingQuoteBeforeDoctypePublicIdentifier),t.forceQuirks=!0,this.state=jf.BOGUS_DOCTYPE,this._stateBogusDoctype(e)}}_stateDoctypePublicIdentifierDoubleQuoted(e){const t=this.currentToken;switch(e){case sf.QUOTATION_MARK:this.state=jf.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break;case sf.NULL:this._err(ff.unexpectedNullCharacter),t.publicId+=of;break;case sf.GREATER_THAN_SIGN:this._err(ff.abruptDoctypePublicIdentifier),t.forceQuirks=!0,this.emitCurrentDoctype(t),this.state=jf.DATA;break;case sf.EOF:this._err(ff.eofInDoctype),t.forceQuirks=!0,this.emitCurrentDoctype(t),this._emitEOFToken();break;default:t.publicId+=String.fromCodePoint(e)}}_stateDoctypePublicIdentifierSingleQuoted(e){const t=this.currentToken;switch(e){case sf.APOSTROPHE:this.state=jf.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break;case sf.NULL:this._err(ff.unexpectedNullCharacter),t.publicId+=of;break;case sf.GREATER_THAN_SIGN:this._err(ff.abruptDoctypePublicIdentifier),t.forceQuirks=!0,this.emitCurrentDoctype(t),this.state=jf.DATA;break;case sf.EOF:this._err(ff.eofInDoctype),t.forceQuirks=!0,this.emitCurrentDoctype(t),this._emitEOFToken();break;default:t.publicId+=String.fromCodePoint(e)}}_stateAfterDoctypePublicIdentifier(e){const t=this.currentToken;switch(e){case sf.SPACE:case sf.LINE_FEED:case sf.TABULATION:case sf.FORM_FEED:this.state=jf.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS;break;case sf.GREATER_THAN_SIGN:this.state=jf.DATA,this.emitCurrentDoctype(t);break;case sf.QUOTATION_MARK:this._err(ff.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),t.systemId="",this.state=jf.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break;case sf.APOSTROPHE:this._err(ff.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),t.systemId="",this.state=jf.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break;case sf.EOF:this._err(ff.eofInDoctype),t.forceQuirks=!0,this.emitCurrentDoctype(t),this._emitEOFToken();break;default:this._err(ff.missingQuoteBeforeDoctypeSystemIdentifier),t.forceQuirks=!0,this.state=jf.BOGUS_DOCTYPE,this._stateBogusDoctype(e)}}_stateBetweenDoctypePublicAndSystemIdentifiers(e){const t=this.currentToken;switch(e){case sf.SPACE:case sf.LINE_FEED:case sf.TABULATION:case sf.FORM_FEED:break;case sf.GREATER_THAN_SIGN:this.emitCurrentDoctype(t),this.state=jf.DATA;break;case sf.QUOTATION_MARK:t.systemId="",this.state=jf.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break;case sf.APOSTROPHE:t.systemId="",this.state=jf.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break;case sf.EOF:this._err(ff.eofInDoctype),t.forceQuirks=!0,this.emitCurrentDoctype(t),this._emitEOFToken();break;default:this._err(ff.missingQuoteBeforeDoctypeSystemIdentifier),t.forceQuirks=!0,this.state=jf.BOGUS_DOCTYPE,this._stateBogusDoctype(e)}}_stateAfterDoctypeSystemKeyword(e){const t=this.currentToken;switch(e){case sf.SPACE:case sf.LINE_FEED:case sf.TABULATION:case sf.FORM_FEED:this.state=jf.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER;break;case sf.QUOTATION_MARK:this._err(ff.missingWhitespaceAfterDoctypeSystemKeyword),t.systemId="",this.state=jf.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break;case sf.APOSTROPHE:this._err(ff.missingWhitespaceAfterDoctypeSystemKeyword),t.systemId="",this.state=jf.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break;case sf.GREATER_THAN_SIGN:this._err(ff.missingDoctypeSystemIdentifier),t.forceQuirks=!0,this.state=jf.DATA,this.emitCurrentDoctype(t);break;case sf.EOF:this._err(ff.eofInDoctype),t.forceQuirks=!0,this.emitCurrentDoctype(t),this._emitEOFToken();break;default:this._err(ff.missingQuoteBeforeDoctypeSystemIdentifier),t.forceQuirks=!0,this.state=jf.BOGUS_DOCTYPE,this._stateBogusDoctype(e)}}_stateBeforeDoctypeSystemIdentifier(e){const t=this.currentToken;switch(e){case sf.SPACE:case sf.LINE_FEED:case sf.TABULATION:case sf.FORM_FEED:break;case sf.QUOTATION_MARK:t.systemId="",this.state=jf.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break;case sf.APOSTROPHE:t.systemId="",this.state=jf.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break;case sf.GREATER_THAN_SIGN:this._err(ff.missingDoctypeSystemIdentifier),t.forceQuirks=!0,this.state=jf.DATA,this.emitCurrentDoctype(t);break;case sf.EOF:this._err(ff.eofInDoctype),t.forceQuirks=!0,this.emitCurrentDoctype(t),this._emitEOFToken();break;default:this._err(ff.missingQuoteBeforeDoctypeSystemIdentifier),t.forceQuirks=!0,this.state=jf.BOGUS_DOCTYPE,this._stateBogusDoctype(e)}}_stateDoctypeSystemIdentifierDoubleQuoted(e){const t=this.currentToken;switch(e){case sf.QUOTATION_MARK:this.state=jf.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break;case sf.NULL:this._err(ff.unexpectedNullCharacter),t.systemId+=of;break;case sf.GREATER_THAN_SIGN:this._err(ff.abruptDoctypeSystemIdentifier),t.forceQuirks=!0,this.emitCurrentDoctype(t),this.state=jf.DATA;break;case sf.EOF:this._err(ff.eofInDoctype),t.forceQuirks=!0,this.emitCurrentDoctype(t),this._emitEOFToken();break;default:t.systemId+=String.fromCodePoint(e)}}_stateDoctypeSystemIdentifierSingleQuoted(e){const t=this.currentToken;switch(e){case sf.APOSTROPHE:this.state=jf.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break;case sf.NULL:this._err(ff.unexpectedNullCharacter),t.systemId+=of;break;case sf.GREATER_THAN_SIGN:this._err(ff.abruptDoctypeSystemIdentifier),t.forceQuirks=!0,this.emitCurrentDoctype(t),this.state=jf.DATA;break;case sf.EOF:this._err(ff.eofInDoctype),t.forceQuirks=!0,this.emitCurrentDoctype(t),this._emitEOFToken();break;default:t.systemId+=String.fromCodePoint(e)}}_stateAfterDoctypeSystemIdentifier(e){const t=this.currentToken;switch(e){case sf.SPACE:case sf.LINE_FEED:case sf.TABULATION:case sf.FORM_FEED:break;case sf.GREATER_THAN_SIGN:this.emitCurrentDoctype(t),this.state=jf.DATA;break;case sf.EOF:this._err(ff.eofInDoctype),t.forceQuirks=!0,this.emitCurrentDoctype(t),this._emitEOFToken();break;default:this._err(ff.unexpectedCharacterAfterDoctypeSystemIdentifier),this.state=jf.BOGUS_DOCTYPE,this._stateBogusDoctype(e)}}_stateBogusDoctype(e){const t=this.currentToken;switch(e){case sf.GREATER_THAN_SIGN:this.emitCurrentDoctype(t),this.state=jf.DATA;break;case sf.NULL:this._err(ff.unexpectedNullCharacter);break;case sf.EOF:this.emitCurrentDoctype(t),this._emitEOFToken()}}_stateCdataSection(e){switch(e){case sf.RIGHT_SQUARE_BRACKET:this.state=jf.CDATA_SECTION_BRACKET;break;case sf.EOF:this._err(ff.eofInCdata),this._emitEOFToken();break;default:this._emitCodePoint(e)}}_stateCdataSectionBracket(e){e===sf.RIGHT_SQUARE_BRACKET?this.state=jf.CDATA_SECTION_END:(this._emitChars("]"),this.state=jf.CDATA_SECTION,this._stateCdataSection(e))}_stateCdataSectionEnd(e){switch(e){case sf.GREATER_THAN_SIGN:this.state=jf.DATA;break;case sf.RIGHT_SQUARE_BRACKET:this._emitChars("]");break;default:this._emitChars("]]"),this.state=jf.CDATA_SECTION,this._stateCdataSection(e)}}_stateCharacterReference(e){e===sf.NUMBER_SIGN?this.state=jf.NUMERIC_CHARACTER_REFERENCE:qf(e)?(this.state=jf.NAMED_CHARACTER_REFERENCE,this._stateNamedCharacterReference(e)):(this._flushCodePointConsumedAsCharacterReference(sf.AMPERSAND),this._reconsumeInState(this.returnState,e))}_stateNamedCharacterReference(e){const t=this._matchNamedCharacterReference(e);if(this._ensureHibernation());else if(t){for(let e=0;e1114111)this._err(ff.characterReferenceOutsideUnicodeRange),this.charRefCode=sf.REPLACEMENT_CHARACTER;else if(df(this.charRefCode))this._err(ff.surrogateCharacterReference),this.charRefCode=sf.REPLACEMENT_CHARACTER;else if(mf(this.charRefCode))this._err(ff.noncharacterCharacterReference);else if(pf(this.charRefCode)||this.charRefCode===sf.CARRIAGE_RETURN){this._err(ff.controlCharacterReference);const e=Gf.get(this.charRefCode);void 0!==e&&(this.charRefCode=e)}this._flushCodePointConsumedAsCharacterReference(this.charRefCode),this._reconsumeInState(this.returnState,e)}}const th=new Set([kf.DD,kf.DT,kf.LI,kf.OPTGROUP,kf.OPTION,kf.P,kf.RB,kf.RP,kf.RT,kf.RTC]),nh=new Set([...th,kf.CAPTION,kf.COLGROUP,kf.TBODY,kf.TD,kf.TFOOT,kf.TH,kf.THEAD,kf.TR]),rh=new Map([[kf.APPLET,Nf.HTML],[kf.CAPTION,Nf.HTML],[kf.HTML,Nf.HTML],[kf.MARQUEE,Nf.HTML],[kf.OBJECT,Nf.HTML],[kf.TABLE,Nf.HTML],[kf.TD,Nf.HTML],[kf.TEMPLATE,Nf.HTML],[kf.TH,Nf.HTML],[kf.ANNOTATION_XML,Nf.MATHML],[kf.MI,Nf.MATHML],[kf.MN,Nf.MATHML],[kf.MO,Nf.MATHML],[kf.MS,Nf.MATHML],[kf.MTEXT,Nf.MATHML],[kf.DESC,Nf.SVG],[kf.FOREIGN_OBJECT,Nf.SVG],[kf.TITLE,Nf.SVG]]),ah=[kf.H1,kf.H2,kf.H3,kf.H4,kf.H5,kf.H6],oh=[kf.TR,kf.TEMPLATE,kf.HTML],ih=[kf.TBODY,kf.TFOOT,kf.THEAD,kf.TEMPLATE,kf.HTML],sh=[kf.TABLE,kf.TEMPLATE,kf.HTML],lh=[kf.TD,kf.TH];class ch{get currentTmplContentOrNode(){return this._isInTemplate()?this.treeAdapter.getTemplateContent(this.current):this.current}constructor(e,t,n){this.treeAdapter=t,this.handler=n,this.items=[],this.tagIDs=[],this.stackTop=-1,this.tmplCount=0,this.currentTagId=kf.UNKNOWN,this.current=e}_indexOf(e){return this.items.lastIndexOf(e,this.stackTop)}_isInTemplate(){return this.currentTagId===kf.TEMPLATE&&this.treeAdapter.getNamespaceURI(this.current)===Nf.HTML}_updateCurrentElement(){this.current=this.items[this.stackTop],this.currentTagId=this.tagIDs[this.stackTop]}push(e,t){this.stackTop++,this.items[this.stackTop]=e,this.current=e,this.tagIDs[this.stackTop]=t,this.currentTagId=t,this._isInTemplate()&&this.tmplCount++,this.handler.onItemPush(e,t,!0)}pop(){const e=this.current;this.tmplCount>0&&this._isInTemplate()&&this.tmplCount--,this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(e,!0)}replace(e,t){const n=this._indexOf(e);this.items[n]=t,n===this.stackTop&&(this.current=t)}insertAfter(e,t,n){const r=this._indexOf(e)+1;this.items.splice(r,0,t),this.tagIDs.splice(r,0,n),this.stackTop++,r===this.stackTop&&this._updateCurrentElement(),this.handler.onItemPush(this.current,this.currentTagId,r===this.stackTop)}popUntilTagNamePopped(e){let t=this.stackTop+1;do{t=this.tagIDs.lastIndexOf(e,t-1)}while(t>0&&this.treeAdapter.getNamespaceURI(this.items[t])!==Nf.HTML);this.shortenToLength(t<0?0:t)}shortenToLength(e){for(;this.stackTop>=e;){const t=this.current;this.tmplCount>0&&this._isInTemplate()&&(this.tmplCount-=1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(t,this.stackTop=0;n--)if(e.includes(this.tagIDs[n])&&this.treeAdapter.getNamespaceURI(this.items[n])===t)return n;return-1}clearBackTo(e,t){const n=this._indexOfTagNames(e,t);this.shortenToLength(n+1)}clearBackToTableContext(){this.clearBackTo(sh,Nf.HTML)}clearBackToTableBodyContext(){this.clearBackTo(ih,Nf.HTML)}clearBackToTableRowContext(){this.clearBackTo(oh,Nf.HTML)}remove(e){const t=this._indexOf(e);t>=0&&(t===this.stackTop?this.pop():(this.items.splice(t,1),this.tagIDs.splice(t,1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(e,!1)))}tryPeekProperlyNestedBodyElement(){return this.stackTop>=1&&this.tagIDs[1]===kf.BODY?this.items[1]:null}contains(e){return this._indexOf(e)>-1}getCommonAncestor(e){const t=this._indexOf(e)-1;return t>=0?this.items[t]:null}isRootHtmlElementCurrent(){return 0===this.stackTop&&this.tagIDs[0]===kf.HTML}hasInScope(e){for(let t=this.stackTop;t>=0;t--){const n=this.tagIDs[t],r=this.treeAdapter.getNamespaceURI(this.items[t]);if(n===e&&r===Nf.HTML)return!0;if(rh.get(n)===r)return!1}return!0}hasNumberedHeaderInScope(){for(let e=this.stackTop;e>=0;e--){const t=this.tagIDs[e],n=this.treeAdapter.getNamespaceURI(this.items[e]);if(Hf(t)&&n===Nf.HTML)return!0;if(rh.get(t)===n)return!1}return!0}hasInListItemScope(e){for(let t=this.stackTop;t>=0;t--){const n=this.tagIDs[t],r=this.treeAdapter.getNamespaceURI(this.items[t]);if(n===e&&r===Nf.HTML)return!0;if((n===kf.UL||n===kf.OL)&&r===Nf.HTML||rh.get(n)===r)return!1}return!0}hasInButtonScope(e){for(let t=this.stackTop;t>=0;t--){const n=this.tagIDs[t],r=this.treeAdapter.getNamespaceURI(this.items[t]);if(n===e&&r===Nf.HTML)return!0;if(n===kf.BUTTON&&r===Nf.HTML||rh.get(n)===r)return!1}return!0}hasInTableScope(e){for(let t=this.stackTop;t>=0;t--){const n=this.tagIDs[t];if(this.treeAdapter.getNamespaceURI(this.items[t])===Nf.HTML){if(n===e)return!0;if(n===kf.TABLE||n===kf.TEMPLATE||n===kf.HTML)return!1}}return!0}hasTableBodyContextInTableScope(){for(let e=this.stackTop;e>=0;e--){const t=this.tagIDs[e];if(this.treeAdapter.getNamespaceURI(this.items[e])===Nf.HTML){if(t===kf.TBODY||t===kf.THEAD||t===kf.TFOOT)return!0;if(t===kf.TABLE||t===kf.HTML)return!1}}return!0}hasInSelectScope(e){for(let t=this.stackTop;t>=0;t--){const n=this.tagIDs[t];if(this.treeAdapter.getNamespaceURI(this.items[t])===Nf.HTML){if(n===e)return!0;if(n!==kf.OPTION&&n!==kf.OPTGROUP)return!1}}return!0}generateImpliedEndTags(){for(;th.has(this.currentTagId);)this.pop()}generateImpliedEndTagsThoroughly(){for(;nh.has(this.currentTagId);)this.pop()}generateImpliedEndTagsWithExclusion(e){for(;this.currentTagId!==e&&nh.has(this.currentTagId);)this.pop()}}var uh;!function(e){e[e.Marker=0]="Marker",e[e.Element=1]="Element"}(uh=uh||(uh={}));const dh={type:uh.Marker};class ph{constructor(e){this.treeAdapter=e,this.entries=[],this.bookmark=null}_getNoahArkConditionCandidates(e,t){const n=[],r=t.length,a=this.treeAdapter.getTagName(e),o=this.treeAdapter.getNamespaceURI(e);for(let i=0;i[e.name,e.value])));let a=0;for(let o=0;or.get(e.name)===e.value))&&(a+=1,a>=3&&this.entries.splice(e.idx,1))}}insertMarker(){this.entries.unshift(dh)}pushElement(e,t){this._ensureNoahArkCondition(e),this.entries.unshift({type:uh.Element,element:e,token:t})}insertElementAfterBookmark(e,t){const n=this.entries.indexOf(this.bookmark);this.entries.splice(n,0,{type:uh.Element,element:e,token:t})}removeEntry(e){const t=this.entries.indexOf(e);t>=0&&this.entries.splice(t,1)}clearToLastMarker(){const e=this.entries.indexOf(dh);e>=0?this.entries.splice(0,e+1):this.entries.length=0}getElementEntryInScopeWithTagName(e){const t=this.entries.find((t=>t.type===uh.Marker||this.treeAdapter.getTagName(t.element)===e));return t&&t.type===uh.Element?t:null}getElementEntry(e){return this.entries.find((t=>t.type===uh.Element&&t.element===e))}}function mh(e){return{nodeName:"#text",value:e,parentNode:null}}const fh={createDocument:()=>({nodeName:"#document",mode:xf.NO_QUIRKS,childNodes:[]}),createDocumentFragment:()=>({nodeName:"#document-fragment",childNodes:[]}),createElement:(e,t,n)=>({nodeName:e,tagName:e,attrs:n,namespaceURI:t,childNodes:[],parentNode:null}),createCommentNode:e=>({nodeName:"#comment",data:e,parentNode:null}),appendChild(e,t){e.childNodes.push(t),t.parentNode=e},insertBefore(e,t,n){const r=e.childNodes.indexOf(n);e.childNodes.splice(r,0,t),t.parentNode=e},setTemplateContent(e,t){e.content=t},getTemplateContent:e=>e.content,setDocumentType(e,t,n,r){const a=e.childNodes.find((e=>"#documentType"===e.nodeName));if(a)a.name=t,a.publicId=n,a.systemId=r;else{const a={nodeName:"#documentType",name:t,publicId:n,systemId:r,parentNode:null};fh.appendChild(e,a)}},setDocumentMode(e,t){e.mode=t},getDocumentMode:e=>e.mode,detachNode(e){if(e.parentNode){const t=e.parentNode.childNodes.indexOf(e);e.parentNode.childNodes.splice(t,1),e.parentNode=null}},insertText(e,t){if(e.childNodes.length>0){const n=e.childNodes[e.childNodes.length-1];if(fh.isTextNode(n))return void(n.value+=t)}fh.appendChild(e,mh(t))},insertTextBefore(e,t,n){const r=e.childNodes[e.childNodes.indexOf(n)-1];r&&fh.isTextNode(r)?r.value+=t:fh.insertBefore(e,mh(t),n)},adoptAttributes(e,t){const n=new Set(e.attrs.map((e=>e.name)));for(let r=0;re.childNodes[0],getChildNodes:e=>e.childNodes,getParentNode:e=>e.parentNode,getAttrList:e=>e.attrs,getTagName:e=>e.tagName,getNamespaceURI:e=>e.namespaceURI,getTextNodeContent:e=>e.value,getCommentNodeContent:e=>e.data,getDocumentTypeNodeName:e=>e.name,getDocumentTypeNodePublicId:e=>e.publicId,getDocumentTypeNodeSystemId:e=>e.systemId,isTextNode:e=>"#text"===e.nodeName,isCommentNode:e=>"#comment"===e.nodeName,isDocumentTypeNode:e=>"#documentType"===e.nodeName,isElementNode:e=>Object.prototype.hasOwnProperty.call(e,"tagName"),setNodeSourceCodeLocation(e,t){e.sourceCodeLocation=t},getNodeSourceCodeLocation:e=>e.sourceCodeLocation,updateNodeSourceCodeLocation(e,t){e.sourceCodeLocation={...e.sourceCodeLocation,...t}}},hh="html",gh=["+//silmaril//dtd html pro v0r11 19970101//","-//as//dtd html 3.0 aswedit + extensions//","-//advasoft ltd//dtd html 3.0 aswedit + extensions//","-//ietf//dtd html 2.0 level 1//","-//ietf//dtd html 2.0 level 2//","-//ietf//dtd html 2.0 strict level 1//","-//ietf//dtd html 2.0 strict level 2//","-//ietf//dtd html 2.0 strict//","-//ietf//dtd html 2.0//","-//ietf//dtd html 2.1e//","-//ietf//dtd html 3.0//","-//ietf//dtd html 3.2 final//","-//ietf//dtd html 3.2//","-//ietf//dtd html 3//","-//ietf//dtd html level 0//","-//ietf//dtd html level 1//","-//ietf//dtd html level 2//","-//ietf//dtd html level 3//","-//ietf//dtd html strict level 0//","-//ietf//dtd html strict level 1//","-//ietf//dtd html strict level 2//","-//ietf//dtd html strict level 3//","-//ietf//dtd html strict//","-//ietf//dtd html//","-//metrius//dtd metrius presentational//","-//microsoft//dtd internet explorer 2.0 html strict//","-//microsoft//dtd internet explorer 2.0 html//","-//microsoft//dtd internet explorer 2.0 tables//","-//microsoft//dtd internet explorer 3.0 html strict//","-//microsoft//dtd internet explorer 3.0 html//","-//microsoft//dtd internet explorer 3.0 tables//","-//netscape comm. corp.//dtd html//","-//netscape comm. corp.//dtd strict html//","-//o'reilly and associates//dtd html 2.0//","-//o'reilly and associates//dtd html extended 1.0//","-//o'reilly and associates//dtd html extended relaxed 1.0//","-//sq//dtd html 2.0 hotmetal + extensions//","-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//","-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//","-//spyglass//dtd html 2.0 extended//","-//sun microsystems corp.//dtd hotjava html//","-//sun microsystems corp.//dtd hotjava strict html//","-//w3c//dtd html 3 1995-03-24//","-//w3c//dtd html 3.2 draft//","-//w3c//dtd html 3.2 final//","-//w3c//dtd html 3.2//","-//w3c//dtd html 3.2s draft//","-//w3c//dtd html 4.0 frameset//","-//w3c//dtd html 4.0 transitional//","-//w3c//dtd html experimental 19960712//","-//w3c//dtd html experimental 970421//","-//w3c//dtd w3 html//","-//w3o//dtd w3 html 3.0//","-//webtechs//dtd mozilla html 2.0//","-//webtechs//dtd mozilla html//"],Eh=[...gh,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"],bh=new Set(["-//w3o//dtd w3 html strict 3.0//en//","-/w3c/dtd html 4.0 transitional/en","html"]),vh=["-//w3c//dtd xhtml 1.0 frameset//","-//w3c//dtd xhtml 1.0 transitional//"],yh=[...vh,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"];function _h(e,t){return t.some((t=>e.startsWith(t)))}const Sh="text/html",Th="application/xhtml+xml",Ah="definitionurl",Ch="definitionURL",wh=new Map(["attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","diffuseConstant","edgeMode","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].map((e=>[e.toLowerCase(),e]))),Nh=new Map([["xlink:actuate",{prefix:"xlink",name:"actuate",namespace:Nf.XLINK}],["xlink:arcrole",{prefix:"xlink",name:"arcrole",namespace:Nf.XLINK}],["xlink:href",{prefix:"xlink",name:"href",namespace:Nf.XLINK}],["xlink:role",{prefix:"xlink",name:"role",namespace:Nf.XLINK}],["xlink:show",{prefix:"xlink",name:"show",namespace:Nf.XLINK}],["xlink:title",{prefix:"xlink",name:"title",namespace:Nf.XLINK}],["xlink:type",{prefix:"xlink",name:"type",namespace:Nf.XLINK}],["xml:base",{prefix:"xml",name:"base",namespace:Nf.XML}],["xml:lang",{prefix:"xml",name:"lang",namespace:Nf.XML}],["xml:space",{prefix:"xml",name:"space",namespace:Nf.XML}],["xmlns",{prefix:"",name:"xmlns",namespace:Nf.XMLNS}],["xmlns:xlink",{prefix:"xmlns",name:"xlink",namespace:Nf.XMLNS}]]),Ih=new Map(["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","textPath"].map((e=>[e.toLowerCase(),e]))),xh=new Set([kf.B,kf.BIG,kf.BLOCKQUOTE,kf.BODY,kf.BR,kf.CENTER,kf.CODE,kf.DD,kf.DIV,kf.DL,kf.DT,kf.EM,kf.EMBED,kf.H1,kf.H2,kf.H3,kf.H4,kf.H5,kf.H6,kf.HEAD,kf.HR,kf.I,kf.IMG,kf.LI,kf.LISTING,kf.MENU,kf.META,kf.NOBR,kf.OL,kf.P,kf.PRE,kf.RUBY,kf.S,kf.SMALL,kf.SPAN,kf.STRONG,kf.STRIKE,kf.SUB,kf.SUP,kf.TABLE,kf.TT,kf.U,kf.UL,kf.VAR]);function Rh(e){for(let t=0;t2&&void 0!==arguments[2]?arguments[2]:null,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;this.fragmentContext=n,this.scriptHandler=r,this.currentToken=null,this.stopped=!1,this.insertionMode=Ph.INITIAL,this.originalInsertionMode=Ph.INITIAL,this.headElement=null,this.formElement=null,this.currentNotInHTML=!1,this.tmplInsertionModeStack=[],this.pendingCharacterTokens=[],this.hasNonWhitespacePendingCharacterToken=!1,this.framesetOk=!0,this.skipNextNewLine=!1,this.fosterParentingEnabled=!1,this.options={...Uh,...e},this.treeAdapter=this.options.treeAdapter,this.onParseError=this.options.onParseError,this.onParseError&&(this.options.sourceCodeLocationInfo=!0),this.document=null!=t?t:this.treeAdapter.createDocument(),this.tokenizer=new eh(this.options,this),this.activeFormattingElements=new ph(this.treeAdapter),this.fragmentContextID=n?Ff(this.treeAdapter.getTagName(n)):kf.UNKNOWN,this._setContextModes(null!=n?n:this.document,this.fragmentContextID),this.openElements=new ch(this.document,this.treeAdapter,this)}static parse(e,t){const n=new this(t);return n.tokenizer.write(e,!0),n.document}static getFragmentParser(e,t){const n={...Uh,...t};null!=e||(e=n.treeAdapter.createElement(Rf.TEMPLATE,Nf.HTML,[]));const r=n.treeAdapter.createElement("documentmock",Nf.HTML,[]),a=new this(n,r,e);return a.fragmentContextID===kf.TEMPLATE&&a.tmplInsertionModeStack.unshift(Ph.IN_TEMPLATE),a._initTokenizerForFragmentParsing(),a._insertFakeRootElement(),a._resetInsertionMode(),a._findFormInFragmentContext(),a}getFragment(){const e=this.treeAdapter.getFirstChild(this.document),t=this.treeAdapter.createDocumentFragment();return this._adoptNodes(e,t),t}_err(e,t,n){var r;if(!this.onParseError)return;const a=null!==(r=e.location)&&void 0!==r?r:Bh,o={code:t,startLine:a.startLine,startCol:a.startCol,startOffset:a.startOffset,endLine:n?a.startLine:a.endLine,endCol:n?a.startCol:a.endCol,endOffset:n?a.startOffset:a.endOffset};this.onParseError(o)}onItemPush(e,t,n){var r,a;null===(a=(r=this.treeAdapter).onItemPush)||void 0===a||a.call(r,e),n&&this.openElements.stackTop>0&&this._setContextModes(e,t)}onItemPop(e,t){var n,r;if(this.options.sourceCodeLocationInfo&&this._setEndLocation(e,this.currentToken),null===(r=(n=this.treeAdapter).onItemPop)||void 0===r||r.call(n,e,this.openElements.current),t){let e,t;0===this.openElements.stackTop&&this.fragmentContext?(e=this.fragmentContext,t=this.fragmentContextID):({current:e,currentTagId:t}=this.openElements),this._setContextModes(e,t)}}_setContextModes(e,t){const n=e===this.document||this.treeAdapter.getNamespaceURI(e)===Nf.HTML;this.currentNotInHTML=!n,this.tokenizer.inForeignNode=!n&&!this._isIntegrationPoint(t,e)}_switchToTextParsing(e,t){this._insertElement(e,Nf.HTML),this.tokenizer.state=t,this.originalInsertionMode=this.insertionMode,this.insertionMode=Ph.TEXT}switchToPlaintextParsing(){this.insertionMode=Ph.TEXT,this.originalInsertionMode=Ph.IN_BODY,this.tokenizer.state=Vf.PLAINTEXT}_getAdjustedCurrentElement(){return 0===this.openElements.stackTop&&this.fragmentContext?this.fragmentContext:this.openElements.current}_findFormInFragmentContext(){let e=this.fragmentContext;for(;e;){if(this.treeAdapter.getTagName(e)===Rf.FORM){this.formElement=e;break}e=this.treeAdapter.getParentNode(e)}}_initTokenizerForFragmentParsing(){if(this.fragmentContext&&this.treeAdapter.getNamespaceURI(this.fragmentContext)===Nf.HTML)switch(this.fragmentContextID){case kf.TITLE:case kf.TEXTAREA:this.tokenizer.state=Vf.RCDATA;break;case kf.STYLE:case kf.XMP:case kf.IFRAME:case kf.NOEMBED:case kf.NOFRAMES:case kf.NOSCRIPT:this.tokenizer.state=Vf.RAWTEXT;break;case kf.SCRIPT:this.tokenizer.state=Vf.SCRIPT_DATA;break;case kf.PLAINTEXT:this.tokenizer.state=Vf.PLAINTEXT}}_setDocumentType(e){const t=e.name||"",n=e.publicId||"",r=e.systemId||"";if(this.treeAdapter.setDocumentType(this.document,t,n,r),e.location){const t=this.treeAdapter.getChildNodes(this.document).find((e=>this.treeAdapter.isDocumentTypeNode(e)));t&&this.treeAdapter.setNodeSourceCodeLocation(t,e.location)}}_attachElementToTree(e,t){if(this.options.sourceCodeLocationInfo){const n=t&&{...t,startTag:t};this.treeAdapter.setNodeSourceCodeLocation(e,n)}if(this._shouldFosterParentOnInsertion())this._fosterParentElement(e);else{const t=this.openElements.currentTmplContentOrNode;this.treeAdapter.appendChild(t,e)}}_appendElement(e,t){const n=this.treeAdapter.createElement(e.tagName,t,e.attrs);this._attachElementToTree(n,e.location)}_insertElement(e,t){const n=this.treeAdapter.createElement(e.tagName,t,e.attrs);this._attachElementToTree(n,e.location),this.openElements.push(n,e.tagID)}_insertFakeElement(e,t){const n=this.treeAdapter.createElement(e,Nf.HTML,[]);this._attachElementToTree(n,null),this.openElements.push(n,t)}_insertTemplate(e){const t=this.treeAdapter.createElement(e.tagName,Nf.HTML,e.attrs),n=this.treeAdapter.createDocumentFragment();this.treeAdapter.setTemplateContent(t,n),this._attachElementToTree(t,e.location),this.openElements.push(t,e.tagID),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,null)}_insertFakeRootElement(){const e=this.treeAdapter.createElement(Rf.HTML,Nf.HTML,[]);this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(e,null),this.treeAdapter.appendChild(this.openElements.current,e),this.openElements.push(e,kf.HTML)}_appendCommentNode(e,t){const n=this.treeAdapter.createCommentNode(e.data);this.treeAdapter.appendChild(t,n),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,e.location)}_insertCharacters(e){let t,n;if(this._shouldFosterParentOnInsertion()?(({parent:t,beforeElement:n}=this._findFosterParentingLocation()),n?this.treeAdapter.insertTextBefore(t,e.chars,n):this.treeAdapter.insertText(t,e.chars)):(t=this.openElements.currentTmplContentOrNode,this.treeAdapter.insertText(t,e.chars)),!e.location)return;const r=this.treeAdapter.getChildNodes(t),a=n?r.lastIndexOf(n):r.length,o=r[a-1];if(this.treeAdapter.getNodeSourceCodeLocation(o)){const{endLine:t,endCol:n,endOffset:r}=e.location;this.treeAdapter.updateNodeSourceCodeLocation(o,{endLine:t,endCol:n,endOffset:r})}else this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(o,e.location)}_adoptNodes(e,t){for(let n=this.treeAdapter.getFirstChild(e);n;n=this.treeAdapter.getFirstChild(e))this.treeAdapter.detachNode(n),this.treeAdapter.appendChild(t,n)}_setEndLocation(e,t){if(this.treeAdapter.getNodeSourceCodeLocation(e)&&t.location){const n=t.location,r=this.treeAdapter.getTagName(e),a=t.type===hf.END_TAG&&r===t.tagName?{endTag:{...n},endLine:n.endLine,endCol:n.endCol,endOffset:n.endOffset}:{endLine:n.startLine,endCol:n.startCol,endOffset:n.startOffset};this.treeAdapter.updateNodeSourceCodeLocation(e,a)}}shouldProcessStartTagTokenInForeignContent(e){if(!this.currentNotInHTML)return!1;let t,n;return 0===this.openElements.stackTop&&this.fragmentContext?(t=this.fragmentContext,n=this.fragmentContextID):({current:t,currentTagId:n}=this.openElements),(e.tagID!==kf.SVG||this.treeAdapter.getTagName(t)!==Rf.ANNOTATION_XML||this.treeAdapter.getNamespaceURI(t)!==Nf.MATHML)&&(this.tokenizer.inForeignNode||(e.tagID===kf.MGLYPH||e.tagID===kf.MALIGNMARK)&&!this._isIntegrationPoint(n,t,Nf.HTML))}_processToken(e){switch(e.type){case hf.CHARACTER:this.onCharacter(e);break;case hf.NULL_CHARACTER:this.onNullCharacter(e);break;case hf.COMMENT:this.onComment(e);break;case hf.DOCTYPE:this.onDoctype(e);break;case hf.START_TAG:this._processStartTag(e);break;case hf.END_TAG:this.onEndTag(e);break;case hf.EOF:this.onEof(e);break;case hf.WHITESPACE_CHARACTER:this.onWhitespaceCharacter(e)}}_isIntegrationPoint(e,t,n){return function(e,t,n,r){return(!r||r===Nf.HTML)&&function(e,t,n){if(t===Nf.MATHML&&e===kf.ANNOTATION_XML)for(let r=0;re.type===uh.Marker||this.openElements.contains(e.element)));for(let n=t<0?e-1:t-1;n>=0;n--){const e=this.activeFormattingElements.entries[n];this._insertElement(e.token,this.treeAdapter.getNamespaceURI(e.element)),e.element=this.openElements.current}}}_closeTableCell(){this.openElements.generateImpliedEndTags(),this.openElements.popUntilTableCellPopped(),this.activeFormattingElements.clearToLastMarker(),this.insertionMode=Ph.IN_ROW}_closePElement(){this.openElements.generateImpliedEndTagsWithExclusion(kf.P),this.openElements.popUntilTagNamePopped(kf.P)}_resetInsertionMode(){for(let e=this.openElements.stackTop;e>=0;e--)switch(0===e&&this.fragmentContext?this.fragmentContextID:this.openElements.tagIDs[e]){case kf.TR:return void(this.insertionMode=Ph.IN_ROW);case kf.TBODY:case kf.THEAD:case kf.TFOOT:return void(this.insertionMode=Ph.IN_TABLE_BODY);case kf.CAPTION:return void(this.insertionMode=Ph.IN_CAPTION);case kf.COLGROUP:return void(this.insertionMode=Ph.IN_COLUMN_GROUP);case kf.TABLE:return void(this.insertionMode=Ph.IN_TABLE);case kf.BODY:return void(this.insertionMode=Ph.IN_BODY);case kf.FRAMESET:return void(this.insertionMode=Ph.IN_FRAMESET);case kf.SELECT:return void this._resetInsertionModeForSelect(e);case kf.TEMPLATE:return void(this.insertionMode=this.tmplInsertionModeStack[0]);case kf.HTML:return void(this.insertionMode=this.headElement?Ph.AFTER_HEAD:Ph.BEFORE_HEAD);case kf.TD:case kf.TH:if(e>0)return void(this.insertionMode=Ph.IN_CELL);break;case kf.HEAD:if(e>0)return void(this.insertionMode=Ph.IN_HEAD)}this.insertionMode=Ph.IN_BODY}_resetInsertionModeForSelect(e){if(e>0)for(let t=e-1;t>0;t--){const e=this.openElements.tagIDs[t];if(e===kf.TEMPLATE)break;if(e===kf.TABLE)return void(this.insertionMode=Ph.IN_SELECT_IN_TABLE)}this.insertionMode=Ph.IN_SELECT}_isElementCausesFosterParenting(e){return Fh.has(e)}_shouldFosterParentOnInsertion(){return this.fosterParentingEnabled&&this._isElementCausesFosterParenting(this.openElements.currentTagId)}_findFosterParentingLocation(){for(let e=this.openElements.stackTop;e>=0;e--){const t=this.openElements.items[e];switch(this.openElements.tagIDs[e]){case kf.TEMPLATE:if(this.treeAdapter.getNamespaceURI(t)===Nf.HTML)return{parent:this.treeAdapter.getTemplateContent(t),beforeElement:null};break;case kf.TABLE:{const n=this.treeAdapter.getParentNode(t);return n?{parent:n,beforeElement:t}:{parent:this.openElements.items[e-1],beforeElement:null}}}}return{parent:this.openElements.items[0],beforeElement:null}}_fosterParentElement(e){const t=this._findFosterParentingLocation();t.beforeElement?this.treeAdapter.insertBefore(t.parent,e,t.beforeElement):this.treeAdapter.appendChild(t.parent,e)}_isSpecialElement(e,t){const n=this.treeAdapter.getNamespaceURI(e);return zf[n].has(t)}onCharacter(e){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode)!function(e,t){e._insertCharacters(t),e.framesetOk=!1}(this,e);else switch(this.insertionMode){case Ph.INITIAL:Kh(this,e);break;case Ph.BEFORE_HTML:Xh(this,e);break;case Ph.BEFORE_HEAD:Qh(this,e);break;case Ph.IN_HEAD:tg(this,e);break;case Ph.IN_HEAD_NO_SCRIPT:ng(this,e);break;case Ph.AFTER_HEAD:rg(this,e);break;case Ph.IN_BODY:case Ph.IN_CAPTION:case Ph.IN_CELL:case Ph.IN_TEMPLATE:ig(this,e);break;case Ph.TEXT:case Ph.IN_SELECT:case Ph.IN_SELECT_IN_TABLE:this._insertCharacters(e);break;case Ph.IN_TABLE:case Ph.IN_TABLE_BODY:case Ph.IN_ROW:hg(this,e);break;case Ph.IN_TABLE_TEXT:yg(this,e);break;case Ph.IN_COLUMN_GROUP:Ag(this,e);break;case Ph.AFTER_BODY:Lg(this,e);break;case Ph.AFTER_AFTER_BODY:Dg(this,e)}}onNullCharacter(e){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode)!function(e,t){t.chars=of,e._insertCharacters(t)}(this,e);else switch(this.insertionMode){case Ph.INITIAL:Kh(this,e);break;case Ph.BEFORE_HTML:Xh(this,e);break;case Ph.BEFORE_HEAD:Qh(this,e);break;case Ph.IN_HEAD:tg(this,e);break;case Ph.IN_HEAD_NO_SCRIPT:ng(this,e);break;case Ph.AFTER_HEAD:rg(this,e);break;case Ph.TEXT:this._insertCharacters(e);break;case Ph.IN_TABLE:case Ph.IN_TABLE_BODY:case Ph.IN_ROW:hg(this,e);break;case Ph.IN_COLUMN_GROUP:Ag(this,e);break;case Ph.AFTER_BODY:Lg(this,e);break;case Ph.AFTER_AFTER_BODY:Dg(this,e)}}onComment(e){if(this.skipNextNewLine=!1,this.currentNotInHTML)qh(this,e);else switch(this.insertionMode){case Ph.INITIAL:case Ph.BEFORE_HTML:case Ph.BEFORE_HEAD:case Ph.IN_HEAD:case Ph.IN_HEAD_NO_SCRIPT:case Ph.AFTER_HEAD:case Ph.IN_BODY:case Ph.IN_TABLE:case Ph.IN_CAPTION:case Ph.IN_COLUMN_GROUP:case Ph.IN_TABLE_BODY:case Ph.IN_ROW:case Ph.IN_CELL:case Ph.IN_SELECT:case Ph.IN_SELECT_IN_TABLE:case Ph.IN_TEMPLATE:case Ph.IN_FRAMESET:case Ph.AFTER_FRAMESET:qh(this,e);break;case Ph.IN_TABLE_TEXT:_g(this,e);break;case Ph.AFTER_BODY:!function(e,t){e._appendCommentNode(t,e.openElements.items[0])}(this,e);break;case Ph.AFTER_AFTER_BODY:case Ph.AFTER_AFTER_FRAMESET:!function(e,t){e._appendCommentNode(t,e.document)}(this,e)}}onDoctype(e){switch(this.skipNextNewLine=!1,this.insertionMode){case Ph.INITIAL:!function(e,t){e._setDocumentType(t);const n=t.forceQuirks?xf.QUIRKS:function(e){if(e.name!==hh)return xf.QUIRKS;const{systemId:t}=e;if(t&&"http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd"===t.toLowerCase())return xf.QUIRKS;let{publicId:n}=e;if(null!==n){if(n=n.toLowerCase(),bh.has(n))return xf.QUIRKS;let e=null===t?Eh:gh;if(_h(n,e))return xf.QUIRKS;if(e=null===t?vh:yh,_h(n,e))return xf.LIMITED_QUIRKS}return xf.NO_QUIRKS}(t);(function(e){return e.name===hh&&null===e.publicId&&(null===e.systemId||"about:legacy-compat"===e.systemId)})(t)||e._err(t,ff.nonConformingDoctype),e.treeAdapter.setDocumentMode(e.document,n),e.insertionMode=Ph.BEFORE_HTML}(this,e);break;case Ph.BEFORE_HEAD:case Ph.IN_HEAD:case Ph.IN_HEAD_NO_SCRIPT:case Ph.AFTER_HEAD:this._err(e,ff.misplacedDoctype);break;case Ph.IN_TABLE_TEXT:_g(this,e)}}onStartTag(e){this.skipNextNewLine=!1,this.currentToken=e,this._processStartTag(e),e.selfClosing&&!e.ackSelfClosing&&this._err(e,ff.nonVoidHtmlElementStartTagWithTrailingSolidus)}_processStartTag(e){this.shouldProcessStartTagTokenInForeignContent(e)?function(e,t){if(function(e){const t=e.tagID;return t===kf.FONT&&e.attrs.some((e=>{let{name:t}=e;return t===If.COLOR||t===If.SIZE||t===If.FACE}))||xh.has(t)}(t))Mg(e),e._startTagOutsideForeignContent(t);else{const n=e._getAdjustedCurrentElement(),r=e.treeAdapter.getNamespaceURI(n);r===Nf.MATHML?Rh(t):r===Nf.SVG&&(function(e){const t=Ih.get(e.tagName);null!=t&&(e.tagName=t,e.tagID=Ff(e.tagName))}(t),kh(t)),Oh(t),t.selfClosing?e._appendElement(t,r):e._insertElement(t,r),t.ackSelfClosing=!0}}(this,e):this._startTagOutsideForeignContent(e)}_startTagOutsideForeignContent(e){switch(this.insertionMode){case Ph.INITIAL:Kh(this,e);break;case Ph.BEFORE_HTML:!function(e,t){t.tagID===kf.HTML?(e._insertElement(t,Nf.HTML),e.insertionMode=Ph.BEFORE_HEAD):Xh(e,t)}(this,e);break;case Ph.BEFORE_HEAD:!function(e,t){switch(t.tagID){case kf.HTML:dg(e,t);break;case kf.HEAD:e._insertElement(t,Nf.HTML),e.headElement=e.openElements.current,e.insertionMode=Ph.IN_HEAD;break;default:Qh(e,t)}}(this,e);break;case Ph.IN_HEAD:Jh(this,e);break;case Ph.IN_HEAD_NO_SCRIPT:!function(e,t){switch(t.tagID){case kf.HTML:dg(e,t);break;case kf.BASEFONT:case kf.BGSOUND:case kf.HEAD:case kf.LINK:case kf.META:case kf.NOFRAMES:case kf.STYLE:Jh(e,t);break;case kf.NOSCRIPT:e._err(t,ff.nestedNoscriptInHead);break;default:ng(e,t)}}(this,e);break;case Ph.AFTER_HEAD:!function(e,t){switch(t.tagID){case kf.HTML:dg(e,t);break;case kf.BODY:e._insertElement(t,Nf.HTML),e.framesetOk=!1,e.insertionMode=Ph.IN_BODY;break;case kf.FRAMESET:e._insertElement(t,Nf.HTML),e.insertionMode=Ph.IN_FRAMESET;break;case kf.BASE:case kf.BASEFONT:case kf.BGSOUND:case kf.LINK:case kf.META:case kf.NOFRAMES:case kf.SCRIPT:case kf.STYLE:case kf.TEMPLATE:case kf.TITLE:e._err(t,ff.abandonedHeadElementChild),e.openElements.push(e.headElement,kf.HEAD),Jh(e,t),e.openElements.remove(e.headElement);break;case kf.HEAD:e._err(t,ff.misplacedStartTagForHeadElement);break;default:rg(e,t)}}(this,e);break;case Ph.IN_BODY:dg(this,e);break;case Ph.IN_TABLE:gg(this,e);break;case Ph.IN_TABLE_TEXT:_g(this,e);break;case Ph.IN_CAPTION:!function(e,t){const n=t.tagID;Sg.has(n)?e.openElements.hasInTableScope(kf.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(kf.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=Ph.IN_TABLE,gg(e,t)):dg(e,t)}(this,e);break;case Ph.IN_COLUMN_GROUP:Tg(this,e);break;case Ph.IN_TABLE_BODY:Cg(this,e);break;case Ph.IN_ROW:Ng(this,e);break;case Ph.IN_CELL:!function(e,t){const n=t.tagID;Sg.has(n)?(e.openElements.hasInTableScope(kf.TD)||e.openElements.hasInTableScope(kf.TH))&&(e._closeTableCell(),Ng(e,t)):dg(e,t)}(this,e);break;case Ph.IN_SELECT:xg(this,e);break;case Ph.IN_SELECT_IN_TABLE:!function(e,t){const n=t.tagID;n===kf.CAPTION||n===kf.TABLE||n===kf.TBODY||n===kf.TFOOT||n===kf.THEAD||n===kf.TR||n===kf.TD||n===kf.TH?(e.openElements.popUntilTagNamePopped(kf.SELECT),e._resetInsertionMode(),e._processStartTag(t)):xg(e,t)}(this,e);break;case Ph.IN_TEMPLATE:!function(e,t){switch(t.tagID){case kf.BASE:case kf.BASEFONT:case kf.BGSOUND:case kf.LINK:case kf.META:case kf.NOFRAMES:case kf.SCRIPT:case kf.STYLE:case kf.TEMPLATE:case kf.TITLE:Jh(e,t);break;case kf.CAPTION:case kf.COLGROUP:case kf.TBODY:case kf.TFOOT:case kf.THEAD:e.tmplInsertionModeStack[0]=Ph.IN_TABLE,e.insertionMode=Ph.IN_TABLE,gg(e,t);break;case kf.COL:e.tmplInsertionModeStack[0]=Ph.IN_COLUMN_GROUP,e.insertionMode=Ph.IN_COLUMN_GROUP,Tg(e,t);break;case kf.TR:e.tmplInsertionModeStack[0]=Ph.IN_TABLE_BODY,e.insertionMode=Ph.IN_TABLE_BODY,Cg(e,t);break;case kf.TD:case kf.TH:e.tmplInsertionModeStack[0]=Ph.IN_ROW,e.insertionMode=Ph.IN_ROW,Ng(e,t);break;default:e.tmplInsertionModeStack[0]=Ph.IN_BODY,e.insertionMode=Ph.IN_BODY,dg(e,t)}}(this,e);break;case Ph.AFTER_BODY:!function(e,t){t.tagID===kf.HTML?dg(e,t):Lg(e,t)}(this,e);break;case Ph.IN_FRAMESET:!function(e,t){switch(t.tagID){case kf.HTML:dg(e,t);break;case kf.FRAMESET:e._insertElement(t,Nf.HTML);break;case kf.FRAME:e._appendElement(t,Nf.HTML),t.ackSelfClosing=!0;break;case kf.NOFRAMES:Jh(e,t)}}(this,e);break;case Ph.AFTER_FRAMESET:!function(e,t){switch(t.tagID){case kf.HTML:dg(e,t);break;case kf.NOFRAMES:Jh(e,t)}}(this,e);break;case Ph.AFTER_AFTER_BODY:!function(e,t){t.tagID===kf.HTML?dg(e,t):Dg(e,t)}(this,e);break;case Ph.AFTER_AFTER_FRAMESET:!function(e,t){switch(t.tagID){case kf.HTML:dg(e,t);break;case kf.NOFRAMES:Jh(e,t)}}(this,e)}}onEndTag(e){this.skipNextNewLine=!1,this.currentToken=e,this.currentNotInHTML?function(e,t){if(t.tagID===kf.P||t.tagID===kf.BR)return Mg(e),void e._endTagOutsideForeignContent(t);for(let n=e.openElements.stackTop;n>0;n--){const r=e.openElements.items[n];if(e.treeAdapter.getNamespaceURI(r)===Nf.HTML){e._endTagOutsideForeignContent(t);break}const a=e.treeAdapter.getTagName(r);if(a.toLowerCase()===t.tagName){t.tagName=a,e.openElements.shortenToLength(n);break}}}(this,e):this._endTagOutsideForeignContent(e)}_endTagOutsideForeignContent(e){switch(this.insertionMode){case Ph.INITIAL:Kh(this,e);break;case Ph.BEFORE_HTML:!function(e,t){const n=t.tagID;n!==kf.HTML&&n!==kf.HEAD&&n!==kf.BODY&&n!==kf.BR||Xh(e,t)}(this,e);break;case Ph.BEFORE_HEAD:!function(e,t){const n=t.tagID;n===kf.HEAD||n===kf.BODY||n===kf.HTML||n===kf.BR?Qh(e,t):e._err(t,ff.endTagWithoutMatchingOpenElement)}(this,e);break;case Ph.IN_HEAD:!function(e,t){switch(t.tagID){case kf.HEAD:e.openElements.pop(),e.insertionMode=Ph.AFTER_HEAD;break;case kf.BODY:case kf.BR:case kf.HTML:tg(e,t);break;case kf.TEMPLATE:eg(e,t);break;default:e._err(t,ff.endTagWithoutMatchingOpenElement)}}(this,e);break;case Ph.IN_HEAD_NO_SCRIPT:!function(e,t){switch(t.tagID){case kf.NOSCRIPT:e.openElements.pop(),e.insertionMode=Ph.IN_HEAD;break;case kf.BR:ng(e,t);break;default:e._err(t,ff.endTagWithoutMatchingOpenElement)}}(this,e);break;case Ph.AFTER_HEAD:!function(e,t){switch(t.tagID){case kf.BODY:case kf.HTML:case kf.BR:rg(e,t);break;case kf.TEMPLATE:eg(e,t);break;default:e._err(t,ff.endTagWithoutMatchingOpenElement)}}(this,e);break;case Ph.IN_BODY:mg(this,e);break;case Ph.TEXT:!function(e,t){var n;t.tagID===kf.SCRIPT&&(null===(n=e.scriptHandler)||void 0===n||n.call(e,e.openElements.current)),e.openElements.pop(),e.insertionMode=e.originalInsertionMode}(this,e);break;case Ph.IN_TABLE:Eg(this,e);break;case Ph.IN_TABLE_TEXT:_g(this,e);break;case Ph.IN_CAPTION:!function(e,t){const n=t.tagID;switch(n){case kf.CAPTION:case kf.TABLE:e.openElements.hasInTableScope(kf.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(kf.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=Ph.IN_TABLE,n===kf.TABLE&&Eg(e,t));break;case kf.BODY:case kf.COL:case kf.COLGROUP:case kf.HTML:case kf.TBODY:case kf.TD:case kf.TFOOT:case kf.TH:case kf.THEAD:case kf.TR:break;default:mg(e,t)}}(this,e);break;case Ph.IN_COLUMN_GROUP:!function(e,t){switch(t.tagID){case kf.COLGROUP:e.openElements.currentTagId===kf.COLGROUP&&(e.openElements.pop(),e.insertionMode=Ph.IN_TABLE);break;case kf.TEMPLATE:eg(e,t);break;case kf.COL:break;default:Ag(e,t)}}(this,e);break;case Ph.IN_TABLE_BODY:wg(this,e);break;case Ph.IN_ROW:Ig(this,e);break;case Ph.IN_CELL:!function(e,t){const n=t.tagID;switch(n){case kf.TD:case kf.TH:e.openElements.hasInTableScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=Ph.IN_ROW);break;case kf.TABLE:case kf.TBODY:case kf.TFOOT:case kf.THEAD:case kf.TR:e.openElements.hasInTableScope(n)&&(e._closeTableCell(),Ig(e,t));break;case kf.BODY:case kf.CAPTION:case kf.COL:case kf.COLGROUP:case kf.HTML:break;default:mg(e,t)}}(this,e);break;case Ph.IN_SELECT:Rg(this,e);break;case Ph.IN_SELECT_IN_TABLE:!function(e,t){const n=t.tagID;n===kf.CAPTION||n===kf.TABLE||n===kf.TBODY||n===kf.TFOOT||n===kf.THEAD||n===kf.TR||n===kf.TD||n===kf.TH?e.openElements.hasInTableScope(n)&&(e.openElements.popUntilTagNamePopped(kf.SELECT),e._resetInsertionMode(),e.onEndTag(t)):Rg(e,t)}(this,e);break;case Ph.IN_TEMPLATE:!function(e,t){t.tagID===kf.TEMPLATE&&eg(e,t)}(this,e);break;case Ph.AFTER_BODY:Og(this,e);break;case Ph.IN_FRAMESET:!function(e,t){t.tagID!==kf.FRAMESET||e.openElements.isRootHtmlElementCurrent()||(e.openElements.pop(),e.fragmentContext||e.openElements.currentTagId===kf.FRAMESET||(e.insertionMode=Ph.AFTER_FRAMESET))}(this,e);break;case Ph.AFTER_FRAMESET:!function(e,t){t.tagID===kf.HTML&&(e.insertionMode=Ph.AFTER_AFTER_FRAMESET)}(this,e);break;case Ph.AFTER_AFTER_BODY:Dg(this,e)}}onEof(e){switch(this.insertionMode){case Ph.INITIAL:Kh(this,e);break;case Ph.BEFORE_HTML:Xh(this,e);break;case Ph.BEFORE_HEAD:Qh(this,e);break;case Ph.IN_HEAD:tg(this,e);break;case Ph.IN_HEAD_NO_SCRIPT:ng(this,e);break;case Ph.AFTER_HEAD:rg(this,e);break;case Ph.IN_BODY:case Ph.IN_TABLE:case Ph.IN_CAPTION:case Ph.IN_COLUMN_GROUP:case Ph.IN_TABLE_BODY:case Ph.IN_ROW:case Ph.IN_CELL:case Ph.IN_SELECT:case Ph.IN_SELECT_IN_TABLE:fg(this,e);break;case Ph.TEXT:!function(e,t){e._err(t,ff.eofInElementThatCanContainOnlyText),e.openElements.pop(),e.insertionMode=e.originalInsertionMode,e.onEof(t)}(this,e);break;case Ph.IN_TABLE_TEXT:_g(this,e);break;case Ph.IN_TEMPLATE:kg(this,e);break;case Ph.AFTER_BODY:case Ph.IN_FRAMESET:case Ph.AFTER_FRAMESET:case Ph.AFTER_AFTER_BODY:case Ph.AFTER_AFTER_FRAMESET:Yh(this,e)}}onWhitespaceCharacter(e){if(this.skipNextNewLine&&(this.skipNextNewLine=!1,e.chars.charCodeAt(0)===sf.LINE_FEED)){if(1===e.chars.length)return;e.chars=e.chars.substr(1)}if(this.tokenizer.inForeignNode)this._insertCharacters(e);else switch(this.insertionMode){case Ph.IN_HEAD:case Ph.IN_HEAD_NO_SCRIPT:case Ph.AFTER_HEAD:case Ph.TEXT:case Ph.IN_COLUMN_GROUP:case Ph.IN_SELECT:case Ph.IN_SELECT_IN_TABLE:case Ph.IN_FRAMESET:case Ph.AFTER_FRAMESET:this._insertCharacters(e);break;case Ph.IN_BODY:case Ph.IN_CAPTION:case Ph.IN_CELL:case Ph.IN_TEMPLATE:case Ph.AFTER_BODY:case Ph.AFTER_AFTER_BODY:case Ph.AFTER_AFTER_FRAMESET:og(this,e);break;case Ph.IN_TABLE:case Ph.IN_TABLE_BODY:case Ph.IN_ROW:hg(this,e);break;case Ph.IN_TABLE_TEXT:vg(this,e)}}}function Hh(e,t){let n=e.activeFormattingElements.getElementEntryInScopeWithTagName(t.tagName);return n?e.openElements.contains(n.element)?e.openElements.hasInScope(t.tagID)||(n=null):(e.activeFormattingElements.removeEntry(n),n=null):pg(e,t),n}function Gh(e,t){let n=null,r=e.openElements.stackTop;for(;r>=0;r--){const a=e.openElements.items[r];if(a===t.element)break;e._isSpecialElement(a,e.openElements.tagIDs[r])&&(n=a)}return n||(e.openElements.shortenToLength(r<0?0:r),e.activeFormattingElements.removeEntry(t)),n}function jh(e,t,n){let r=t,a=e.openElements.getCommonAncestor(t);for(let o=0,i=a;i!==n;o++,i=a){a=e.openElements.getCommonAncestor(i);const n=e.activeFormattingElements.getElementEntry(i),s=n&&o>=Mh;!n||s?(s&&e.activeFormattingElements.removeEntry(n),e.openElements.remove(i)):(i=Vh(e,n),r===t&&(e.activeFormattingElements.bookmark=n),e.treeAdapter.detachNode(r),e.treeAdapter.appendChild(i,r),r=i)}return r}function Vh(e,t){const n=e.treeAdapter.getNamespaceURI(t.element),r=e.treeAdapter.createElement(t.token.tagName,n,t.token.attrs);return e.openElements.replace(t.element,r),t.element=r,r}function Zh(e,t,n){const r=Ff(e.treeAdapter.getTagName(t));if(e._isElementCausesFosterParenting(r))e._fosterParentElement(n);else{const a=e.treeAdapter.getNamespaceURI(t);r===kf.TEMPLATE&&a===Nf.HTML&&(t=e.treeAdapter.getTemplateContent(t)),e.treeAdapter.appendChild(t,n)}}function Wh(e,t,n){const r=e.treeAdapter.getNamespaceURI(n.element),{token:a}=n,o=e.treeAdapter.createElement(a.tagName,r,a.attrs);e._adoptNodes(t,o),e.treeAdapter.appendChild(t,o),e.activeFormattingElements.insertElementAfterBookmark(o,a),e.activeFormattingElements.removeEntry(n),e.openElements.remove(n.element),e.openElements.insertAfter(t,o,a.tagID)}function $h(e,t){for(let n=0;n=n;r--)e._setEndLocation(e.openElements.items[r],t);if(!e.fragmentContext&&e.openElements.stackTop>=0){const n=e.openElements.items[0],r=e.treeAdapter.getNodeSourceCodeLocation(n);if(r&&!r.endTag&&(e._setEndLocation(n,t),e.openElements.stackTop>=1)){const n=e.openElements.items[1],r=e.treeAdapter.getNodeSourceCodeLocation(n);r&&!r.endTag&&e._setEndLocation(n,t)}}}}function Kh(e,t){e._err(t,ff.missingDoctype,!0),e.treeAdapter.setDocumentMode(e.document,xf.QUIRKS),e.insertionMode=Ph.BEFORE_HTML,e._processToken(t)}function Xh(e,t){e._insertFakeRootElement(),e.insertionMode=Ph.BEFORE_HEAD,e._processToken(t)}function Qh(e,t){e._insertFakeElement(Rf.HEAD,kf.HEAD),e.headElement=e.openElements.current,e.insertionMode=Ph.IN_HEAD,e._processToken(t)}function Jh(e,t){switch(t.tagID){case kf.HTML:dg(e,t);break;case kf.BASE:case kf.BASEFONT:case kf.BGSOUND:case kf.LINK:case kf.META:e._appendElement(t,Nf.HTML),t.ackSelfClosing=!0;break;case kf.TITLE:e._switchToTextParsing(t,Vf.RCDATA);break;case kf.NOSCRIPT:e.options.scriptingEnabled?e._switchToTextParsing(t,Vf.RAWTEXT):(e._insertElement(t,Nf.HTML),e.insertionMode=Ph.IN_HEAD_NO_SCRIPT);break;case kf.NOFRAMES:case kf.STYLE:e._switchToTextParsing(t,Vf.RAWTEXT);break;case kf.SCRIPT:e._switchToTextParsing(t,Vf.SCRIPT_DATA);break;case kf.TEMPLATE:e._insertTemplate(t),e.activeFormattingElements.insertMarker(),e.framesetOk=!1,e.insertionMode=Ph.IN_TEMPLATE,e.tmplInsertionModeStack.unshift(Ph.IN_TEMPLATE);break;case kf.HEAD:e._err(t,ff.misplacedStartTagForHeadElement);break;default:tg(e,t)}}function eg(e,t){e.openElements.tmplCount>0?(e.openElements.generateImpliedEndTagsThoroughly(),e.openElements.currentTagId!==kf.TEMPLATE&&e._err(t,ff.closingOfElementWithOpenChildElements),e.openElements.popUntilTagNamePopped(kf.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode()):e._err(t,ff.endTagWithoutMatchingOpenElement)}function tg(e,t){e.openElements.pop(),e.insertionMode=Ph.AFTER_HEAD,e._processToken(t)}function ng(e,t){const n=t.type===hf.EOF?ff.openElementsLeftAfterEof:ff.disallowedContentInNoscriptInHead;e._err(t,n),e.openElements.pop(),e.insertionMode=Ph.IN_HEAD,e._processToken(t)}function rg(e,t){e._insertFakeElement(Rf.BODY,kf.BODY),e.insertionMode=Ph.IN_BODY,ag(e,t)}function ag(e,t){switch(t.type){case hf.CHARACTER:ig(e,t);break;case hf.WHITESPACE_CHARACTER:og(e,t);break;case hf.COMMENT:qh(e,t);break;case hf.START_TAG:dg(e,t);break;case hf.END_TAG:mg(e,t);break;case hf.EOF:fg(e,t)}}function og(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t)}function ig(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t),e.framesetOk=!1}function sg(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,Nf.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}function lg(e){const t=Ef(e,If.TYPE);return null!=t&&t.toLowerCase()===Lh}function cg(e,t){e._switchToTextParsing(t,Vf.RAWTEXT)}function ug(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,Nf.HTML)}function dg(e,t){switch(t.tagID){case kf.I:case kf.S:case kf.B:case kf.U:case kf.EM:case kf.TT:case kf.BIG:case kf.CODE:case kf.FONT:case kf.SMALL:case kf.STRIKE:case kf.STRONG:!function(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,Nf.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}(e,t);break;case kf.A:!function(e,t){const n=e.activeFormattingElements.getElementEntryInScopeWithTagName(Rf.A);n&&($h(e,t),e.openElements.remove(n.element),e.activeFormattingElements.removeEntry(n)),e._reconstructActiveFormattingElements(),e._insertElement(t,Nf.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}(e,t);break;case kf.H1:case kf.H2:case kf.H3:case kf.H4:case kf.H5:case kf.H6:!function(e,t){e.openElements.hasInButtonScope(kf.P)&&e._closePElement(),Hf(e.openElements.currentTagId)&&e.openElements.pop(),e._insertElement(t,Nf.HTML)}(e,t);break;case kf.P:case kf.DL:case kf.OL:case kf.UL:case kf.DIV:case kf.DIR:case kf.NAV:case kf.MAIN:case kf.MENU:case kf.ASIDE:case kf.CENTER:case kf.FIGURE:case kf.FOOTER:case kf.HEADER:case kf.HGROUP:case kf.DIALOG:case kf.DETAILS:case kf.ADDRESS:case kf.ARTICLE:case kf.SECTION:case kf.SUMMARY:case kf.FIELDSET:case kf.BLOCKQUOTE:case kf.FIGCAPTION:!function(e,t){e.openElements.hasInButtonScope(kf.P)&&e._closePElement(),e._insertElement(t,Nf.HTML)}(e,t);break;case kf.LI:case kf.DD:case kf.DT:!function(e,t){e.framesetOk=!1;const n=t.tagID;for(let r=e.openElements.stackTop;r>=0;r--){const t=e.openElements.tagIDs[r];if(n===kf.LI&&t===kf.LI||(n===kf.DD||n===kf.DT)&&(t===kf.DD||t===kf.DT)){e.openElements.generateImpliedEndTagsWithExclusion(t),e.openElements.popUntilTagNamePopped(t);break}if(t!==kf.ADDRESS&&t!==kf.DIV&&t!==kf.P&&e._isSpecialElement(e.openElements.items[r],t))break}e.openElements.hasInButtonScope(kf.P)&&e._closePElement(),e._insertElement(t,Nf.HTML)}(e,t);break;case kf.BR:case kf.IMG:case kf.WBR:case kf.AREA:case kf.EMBED:case kf.KEYGEN:sg(e,t);break;case kf.HR:!function(e,t){e.openElements.hasInButtonScope(kf.P)&&e._closePElement(),e._appendElement(t,Nf.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}(e,t);break;case kf.RB:case kf.RTC:!function(e,t){e.openElements.hasInScope(kf.RUBY)&&e.openElements.generateImpliedEndTags(),e._insertElement(t,Nf.HTML)}(e,t);break;case kf.RT:case kf.RP:!function(e,t){e.openElements.hasInScope(kf.RUBY)&&e.openElements.generateImpliedEndTagsWithExclusion(kf.RTC),e._insertElement(t,Nf.HTML)}(e,t);break;case kf.PRE:case kf.LISTING:!function(e,t){e.openElements.hasInButtonScope(kf.P)&&e._closePElement(),e._insertElement(t,Nf.HTML),e.skipNextNewLine=!0,e.framesetOk=!1}(e,t);break;case kf.XMP:!function(e,t){e.openElements.hasInButtonScope(kf.P)&&e._closePElement(),e._reconstructActiveFormattingElements(),e.framesetOk=!1,e._switchToTextParsing(t,Vf.RAWTEXT)}(e,t);break;case kf.SVG:!function(e,t){e._reconstructActiveFormattingElements(),kh(t),Oh(t),t.selfClosing?e._appendElement(t,Nf.SVG):e._insertElement(t,Nf.SVG),t.ackSelfClosing=!0}(e,t);break;case kf.HTML:!function(e,t){0===e.openElements.tmplCount&&e.treeAdapter.adoptAttributes(e.openElements.items[0],t.attrs)}(e,t);break;case kf.BASE:case kf.LINK:case kf.META:case kf.STYLE:case kf.TITLE:case kf.SCRIPT:case kf.BGSOUND:case kf.BASEFONT:case kf.TEMPLATE:Jh(e,t);break;case kf.BODY:!function(e,t){const n=e.openElements.tryPeekProperlyNestedBodyElement();n&&0===e.openElements.tmplCount&&(e.framesetOk=!1,e.treeAdapter.adoptAttributes(n,t.attrs))}(e,t);break;case kf.FORM:!function(e,t){const n=e.openElements.tmplCount>0;e.formElement&&!n||(e.openElements.hasInButtonScope(kf.P)&&e._closePElement(),e._insertElement(t,Nf.HTML),n||(e.formElement=e.openElements.current))}(e,t);break;case kf.NOBR:!function(e,t){e._reconstructActiveFormattingElements(),e.openElements.hasInScope(kf.NOBR)&&($h(e,t),e._reconstructActiveFormattingElements()),e._insertElement(t,Nf.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}(e,t);break;case kf.MATH:!function(e,t){e._reconstructActiveFormattingElements(),Rh(t),Oh(t),t.selfClosing?e._appendElement(t,Nf.MATHML):e._insertElement(t,Nf.MATHML),t.ackSelfClosing=!0}(e,t);break;case kf.TABLE:!function(e,t){e.treeAdapter.getDocumentMode(e.document)!==xf.QUIRKS&&e.openElements.hasInButtonScope(kf.P)&&e._closePElement(),e._insertElement(t,Nf.HTML),e.framesetOk=!1,e.insertionMode=Ph.IN_TABLE}(e,t);break;case kf.INPUT:!function(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,Nf.HTML),lg(t)||(e.framesetOk=!1),t.ackSelfClosing=!0}(e,t);break;case kf.PARAM:case kf.TRACK:case kf.SOURCE:!function(e,t){e._appendElement(t,Nf.HTML),t.ackSelfClosing=!0}(e,t);break;case kf.IMAGE:!function(e,t){t.tagName=Rf.IMG,t.tagID=kf.IMG,sg(e,t)}(e,t);break;case kf.BUTTON:!function(e,t){e.openElements.hasInScope(kf.BUTTON)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(kf.BUTTON)),e._reconstructActiveFormattingElements(),e._insertElement(t,Nf.HTML),e.framesetOk=!1}(e,t);break;case kf.APPLET:case kf.OBJECT:case kf.MARQUEE:!function(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,Nf.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=!1}(e,t);break;case kf.IFRAME:!function(e,t){e.framesetOk=!1,e._switchToTextParsing(t,Vf.RAWTEXT)}(e,t);break;case kf.SELECT:!function(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,Nf.HTML),e.framesetOk=!1,e.insertionMode=e.insertionMode===Ph.IN_TABLE||e.insertionMode===Ph.IN_CAPTION||e.insertionMode===Ph.IN_TABLE_BODY||e.insertionMode===Ph.IN_ROW||e.insertionMode===Ph.IN_CELL?Ph.IN_SELECT_IN_TABLE:Ph.IN_SELECT}(e,t);break;case kf.OPTION:case kf.OPTGROUP:!function(e,t){e.openElements.currentTagId===kf.OPTION&&e.openElements.pop(),e._reconstructActiveFormattingElements(),e._insertElement(t,Nf.HTML)}(e,t);break;case kf.NOEMBED:cg(e,t);break;case kf.FRAMESET:!function(e,t){const n=e.openElements.tryPeekProperlyNestedBodyElement();e.framesetOk&&n&&(e.treeAdapter.detachNode(n),e.openElements.popAllUpToHtmlElement(),e._insertElement(t,Nf.HTML),e.insertionMode=Ph.IN_FRAMESET)}(e,t);break;case kf.TEXTAREA:!function(e,t){e._insertElement(t,Nf.HTML),e.skipNextNewLine=!0,e.tokenizer.state=Vf.RCDATA,e.originalInsertionMode=e.insertionMode,e.framesetOk=!1,e.insertionMode=Ph.TEXT}(e,t);break;case kf.NOSCRIPT:e.options.scriptingEnabled?cg(e,t):ug(e,t);break;case kf.PLAINTEXT:!function(e,t){e.openElements.hasInButtonScope(kf.P)&&e._closePElement(),e._insertElement(t,Nf.HTML),e.tokenizer.state=Vf.PLAINTEXT}(e,t);break;case kf.COL:case kf.TH:case kf.TD:case kf.TR:case kf.HEAD:case kf.FRAME:case kf.TBODY:case kf.TFOOT:case kf.THEAD:case kf.CAPTION:case kf.COLGROUP:break;default:ug(e,t)}}function pg(e,t){const n=t.tagName,r=t.tagID;for(let a=e.openElements.stackTop;a>0;a--){const t=e.openElements.items[a],o=e.openElements.tagIDs[a];if(r===o&&(r!==kf.UNKNOWN||e.treeAdapter.getTagName(t)===n)){e.openElements.generateImpliedEndTagsWithExclusion(r),e.openElements.stackTop>=a&&e.openElements.shortenToLength(a);break}if(e._isSpecialElement(t,o))break}}function mg(e,t){switch(t.tagID){case kf.A:case kf.B:case kf.I:case kf.S:case kf.U:case kf.EM:case kf.TT:case kf.BIG:case kf.CODE:case kf.FONT:case kf.NOBR:case kf.SMALL:case kf.STRIKE:case kf.STRONG:$h(e,t);break;case kf.P:!function(e){e.openElements.hasInButtonScope(kf.P)||e._insertFakeElement(Rf.P,kf.P),e._closePElement()}(e);break;case kf.DL:case kf.UL:case kf.OL:case kf.DIR:case kf.DIV:case kf.NAV:case kf.PRE:case kf.MAIN:case kf.MENU:case kf.ASIDE:case kf.BUTTON:case kf.CENTER:case kf.FIGURE:case kf.FOOTER:case kf.HEADER:case kf.HGROUP:case kf.DIALOG:case kf.ADDRESS:case kf.ARTICLE:case kf.DETAILS:case kf.SECTION:case kf.SUMMARY:case kf.LISTING:case kf.FIELDSET:case kf.BLOCKQUOTE:case kf.FIGCAPTION:!function(e,t){const n=t.tagID;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n))}(e,t);break;case kf.LI:!function(e){e.openElements.hasInListItemScope(kf.LI)&&(e.openElements.generateImpliedEndTagsWithExclusion(kf.LI),e.openElements.popUntilTagNamePopped(kf.LI))}(e);break;case kf.DD:case kf.DT:!function(e,t){const n=t.tagID;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTagsWithExclusion(n),e.openElements.popUntilTagNamePopped(n))}(e,t);break;case kf.H1:case kf.H2:case kf.H3:case kf.H4:case kf.H5:case kf.H6:!function(e){e.openElements.hasNumberedHeaderInScope()&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilNumberedHeaderPopped())}(e);break;case kf.BR:!function(e){e._reconstructActiveFormattingElements(),e._insertFakeElement(Rf.BR,kf.BR),e.openElements.pop(),e.framesetOk=!1}(e);break;case kf.BODY:!function(e,t){if(e.openElements.hasInScope(kf.BODY)&&(e.insertionMode=Ph.AFTER_BODY,e.options.sourceCodeLocationInfo)){const n=e.openElements.tryPeekProperlyNestedBodyElement();n&&e._setEndLocation(n,t)}}(e,t);break;case kf.HTML:!function(e,t){e.openElements.hasInScope(kf.BODY)&&(e.insertionMode=Ph.AFTER_BODY,Og(e,t))}(e,t);break;case kf.FORM:!function(e){const t=e.openElements.tmplCount>0,{formElement:n}=e;t||(e.formElement=null),(n||t)&&e.openElements.hasInScope(kf.FORM)&&(e.openElements.generateImpliedEndTags(),t?e.openElements.popUntilTagNamePopped(kf.FORM):n&&e.openElements.remove(n))}(e);break;case kf.APPLET:case kf.OBJECT:case kf.MARQUEE:!function(e,t){const n=t.tagID;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n),e.activeFormattingElements.clearToLastMarker())}(e,t);break;case kf.TEMPLATE:eg(e,t);break;default:pg(e,t)}}function fg(e,t){e.tmplInsertionModeStack.length>0?kg(e,t):Yh(e,t)}function hg(e,t){if(Fh.has(e.openElements.currentTagId))switch(e.pendingCharacterTokens.length=0,e.hasNonWhitespacePendingCharacterToken=!1,e.originalInsertionMode=e.insertionMode,e.insertionMode=Ph.IN_TABLE_TEXT,t.type){case hf.CHARACTER:yg(e,t);break;case hf.WHITESPACE_CHARACTER:vg(e,t)}else bg(e,t)}function gg(e,t){switch(t.tagID){case kf.TD:case kf.TH:case kf.TR:!function(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(Rf.TBODY,kf.TBODY),e.insertionMode=Ph.IN_TABLE_BODY,Cg(e,t)}(e,t);break;case kf.STYLE:case kf.SCRIPT:case kf.TEMPLATE:Jh(e,t);break;case kf.COL:!function(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(Rf.COLGROUP,kf.COLGROUP),e.insertionMode=Ph.IN_COLUMN_GROUP,Tg(e,t)}(e,t);break;case kf.FORM:!function(e,t){e.formElement||0!==e.openElements.tmplCount||(e._insertElement(t,Nf.HTML),e.formElement=e.openElements.current,e.openElements.pop())}(e,t);break;case kf.TABLE:!function(e,t){e.openElements.hasInTableScope(kf.TABLE)&&(e.openElements.popUntilTagNamePopped(kf.TABLE),e._resetInsertionMode(),e._processStartTag(t))}(e,t);break;case kf.TBODY:case kf.TFOOT:case kf.THEAD:!function(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,Nf.HTML),e.insertionMode=Ph.IN_TABLE_BODY}(e,t);break;case kf.INPUT:!function(e,t){lg(t)?e._appendElement(t,Nf.HTML):bg(e,t),t.ackSelfClosing=!0}(e,t);break;case kf.CAPTION:!function(e,t){e.openElements.clearBackToTableContext(),e.activeFormattingElements.insertMarker(),e._insertElement(t,Nf.HTML),e.insertionMode=Ph.IN_CAPTION}(e,t);break;case kf.COLGROUP:!function(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,Nf.HTML),e.insertionMode=Ph.IN_COLUMN_GROUP}(e,t);break;default:bg(e,t)}}function Eg(e,t){switch(t.tagID){case kf.TABLE:e.openElements.hasInTableScope(kf.TABLE)&&(e.openElements.popUntilTagNamePopped(kf.TABLE),e._resetInsertionMode());break;case kf.TEMPLATE:eg(e,t);break;case kf.BODY:case kf.CAPTION:case kf.COL:case kf.COLGROUP:case kf.HTML:case kf.TBODY:case kf.TD:case kf.TFOOT:case kf.TH:case kf.THEAD:case kf.TR:break;default:bg(e,t)}}function bg(e,t){const n=e.fosterParentingEnabled;e.fosterParentingEnabled=!0,ag(e,t),e.fosterParentingEnabled=n}function vg(e,t){e.pendingCharacterTokens.push(t)}function yg(e,t){e.pendingCharacterTokens.push(t),e.hasNonWhitespacePendingCharacterToken=!0}function _g(e,t){let n=0;if(e.hasNonWhitespacePendingCharacterToken)for(;n0&&e.openElements.currentTagId===kf.OPTION&&e.openElements.tagIDs[e.openElements.stackTop-1]===kf.OPTGROUP&&e.openElements.pop(),e.openElements.currentTagId===kf.OPTGROUP&&e.openElements.pop();break;case kf.OPTION:e.openElements.currentTagId===kf.OPTION&&e.openElements.pop();break;case kf.SELECT:e.openElements.hasInSelectScope(kf.SELECT)&&(e.openElements.popUntilTagNamePopped(kf.SELECT),e._resetInsertionMode());break;case kf.TEMPLATE:eg(e,t)}}function kg(e,t){e.openElements.tmplCount>0?(e.openElements.popUntilTagNamePopped(kf.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode(),e.onEof(t)):Yh(e,t)}function Og(e,t){var n;if(t.tagID===kf.HTML){if(e.fragmentContext||(e.insertionMode=Ph.AFTER_AFTER_BODY),e.options.sourceCodeLocationInfo&&e.openElements.tagIDs[0]===kf.HTML){e._setEndLocation(e.openElements.items[0],t);const r=e.openElements.items[1];r&&!(null===(n=e.treeAdapter.getNodeSourceCodeLocation(r))||void 0===n?void 0:n.endTag)&&e._setEndLocation(r,t)}}else Lg(e,t)}function Lg(e,t){e.insertionMode=Ph.IN_BODY,ag(e,t)}function Dg(e,t){e.insertionMode=Ph.IN_BODY,ag(e,t)}function Mg(e){for(;e.treeAdapter.getNamespaceURI(e.openElements.current)!==Nf.HTML&&!e._isIntegrationPoint(e.openElements.currentTagId,e.openElements.current);)e.openElements.pop()}function Pg(e,t){return zh.parse(e,t)}function Bg(e,t,n){"string"==typeof e&&(n=t,t=e,e=null);const r=zh.getFragmentParser(e,n);return r.tokenizer.write(t,!0),r.getFragment()}function Fg(e){return zg(e&&e.line)+":"+zg(e&&e.column)}function Ug(e){return Fg(e&&e.start)+"-"+Fg(e&&e.end)}function zg(e){return e&&"number"==typeof e?e:1}new Set([Rf.AREA,Rf.BASE,Rf.BASEFONT,Rf.BGSOUND,Rf.BR,Rf.COL,Rf.EMBED,Rf.FRAME,Rf.HR,Rf.IMG,Rf.INPUT,Rf.KEYGEN,Rf.LINK,Rf.META,Rf.PARAM,Rf.SOURCE,Rf.TRACK,Rf.WBR]);class Hg extends Error{constructor(e,t,n){super(),"string"==typeof t&&(n=t,t=void 0);let r="",a={},o=!1;if(t&&(a="line"in t&&"column"in t||"start"in t&&"end"in t?{place:t}:"type"in t?{ancestors:[t],place:t.position}:{...t}),"string"==typeof e?r=e:!a.cause&&e&&(o=!0,r=e.message,a.cause=e),!a.ruleId&&!a.source&&"string"==typeof n){const e=n.indexOf(":");-1===e?a.ruleId=n:(a.source=n.slice(0,e),a.ruleId=n.slice(e+1))}if(!a.place&&a.ancestors&&a.ancestors){const e=a.ancestors[a.ancestors.length-1];e&&(a.place=e.position)}const i=a.place&&"start"in a.place?a.place.start:a.place;var s;this.ancestors=a.ancestors||void 0,this.cause=a.cause||void 0,this.column=i?i.column:void 0,this.fatal=void 0,this.file,this.message=r,this.line=i?i.line:void 0,this.name=((s=a.place)&&"object"==typeof s?"position"in s||"type"in s?Ug(s.position):"start"in s||"end"in s?Ug(s):"line"in s||"column"in s?Fg(s):"":"")||"1:1",this.place=a.place||void 0,this.reason=this.message,this.ruleId=a.ruleId||void 0,this.source=a.source||void 0,this.stack=o&&a.cause&&"string"==typeof a.cause.stack?a.cause.stack:"",this.actual,this.expected,this.note,this.url}}Hg.prototype.file="",Hg.prototype.name="",Hg.prototype.reason="",Hg.prototype.message="",Hg.prototype.stack="",Hg.prototype.column=void 0,Hg.prototype.line=void 0,Hg.prototype.ancestors=void 0,Hg.prototype.cause=void 0,Hg.prototype.fatal=void 0,Hg.prototype.place=void 0,Hg.prototype.ruleId=void 0,Hg.prototype.source=void 0;const Gg=function(e,t){if(void 0!==t&&"string"!=typeof t)throw new TypeError('"ext" argument must be a string');$g(e);let n,r=0,a=-1,o=e.length;if(void 0===t||0===t.length||t.length>e.length){for(;o--;)if(47===e.codePointAt(o)){if(n){r=o+1;break}}else a<0&&(n=!0,a=o+1);return a<0?"":e.slice(r,a)}if(t===e)return"";let i=-1,s=t.length-1;for(;o--;)if(47===e.codePointAt(o)){if(n){r=o+1;break}}else i<0&&(n=!0,i=o+1),s>-1&&(e.codePointAt(o)===t.codePointAt(s--)?s<0&&(a=o):(s=-1,a=i));return r===a?a=i:a<0&&(a=e.length),e.slice(r,a)},jg=function(e){if($g(e),0===e.length)return".";let t,n=-1,r=e.length;for(;--r;)if(47===e.codePointAt(r)){if(t){n=r;break}}else t||(t=!0);return n<0?47===e.codePointAt(0)?"/":".":1===n&&47===e.codePointAt(0)?"//":e.slice(0,n)},Vg=function(e){$g(e);let t,n=e.length,r=-1,a=0,o=-1,i=0;for(;n--;){const s=e.codePointAt(n);if(47!==s)r<0&&(t=!0,r=n+1),46===s?o<0?o=n:1!==i&&(i=1):o>-1&&(i=-1);else if(t){a=n+1;break}}return o<0||r<0||0===i||1===i&&o===r-1&&o===a+1?"":e.slice(o,r)},Zg=function(){let e,t=-1;for(var n=arguments.length,r=new Array(n),a=0;a2){if(r=a.lastIndexOf("/"),r!==a.length-1){r<0?(a="",o=0):(a=a.slice(0,r),o=a.length-1-a.lastIndexOf("/")),i=l,s=0;continue}}else if(a.length>0){a="",o=0,i=l,s=0;continue}t&&(a=a.length>0?a+"/..":"..",o=2)}else a.length>0?a+="/"+e.slice(i+1,l):a=e.slice(i+1,l),o=l-i-1;i=l,s=0}else 46===n&&s>-1?s++:s=-1}return a}(e,!t);return 0!==n.length||t||(n="."),n.length>0&&47===e.codePointAt(e.length-1)&&(n+="/"),t?"/"+n:n}(e)},Wg="/";function $g(e){if("string"!=typeof e)throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}const qg=function(){return"/"};function Yg(e){return Boolean(null!==e&&"object"==typeof e&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&void 0===e.auth)}const Kg=["history","path","basename","stem","extname","dirname"];class Xg{constructor(e){let t;t=e?Yg(e)?{path:e}:"string"==typeof e||function(e){return Boolean(e&&"object"==typeof e&&"byteLength"in e&&"byteOffset"in e)}(e)?{value:e}:e:{},this.cwd=qg(),this.data={},this.history=[],this.messages=[],this.value,this.map,this.result,this.stored;let n,r=-1;for(;++r`",url:!1},abruptClosingOfEmptyComment:{reason:"Unexpected abruptly closed empty comment",description:"Unexpected `>` or `->`. Expected `--\x3e` to close comments"},abruptDoctypePublicIdentifier:{reason:"Unexpected abruptly closed public identifier",description:"Unexpected `>`. Expected a closing `\"` or `'` after the public identifier"},abruptDoctypeSystemIdentifier:{reason:"Unexpected abruptly closed system identifier",description:"Unexpected `>`. Expected a closing `\"` or `'` after the identifier identifier"},absenceOfDigitsInNumericCharacterReference:{reason:"Unexpected non-digit at start of numeric character reference",description:"Unexpected `%c`. Expected `[0-9]` for decimal references or `[0-9a-fA-F]` for hexadecimal references"},cdataInHtmlContent:{reason:"Unexpected CDATA section in HTML",description:"Unexpected `` in ``",description:"Unexpected text character `%c`. Only use text in `
\n \n Policy Name:\n {\" \"}\n {pConf.name}\n