chore(cloudserver): remove cloudserver references from DeleteAccountModal and pnpm… (#7080)

chore: remove cloudserver references from DeleteAccountModal and pnpm-lock.yaml

Signed-off-by: cuisongliu <cuisongliu@qq.com>
This commit is contained in:
cuisongliu
2026-07-23 14:10:42 +08:00
committed by GitHub
parent 87cac0128a
commit 628eed3365
129 changed files with 53 additions and 6591 deletions
@@ -1,68 +1,64 @@
import {
checkRemainResource,
deleteUserRequest,
forceDeleteUser,
getAmount,
getDeleteUserStatus,
getWorkspacesPlans
checkRemainResource,
deleteUserRequest,
forceDeleteUser,
getAmount,
getDeleteUserStatus,
getWorkspacesPlans
} from '@/api/auth';
import { nsListRequest } from '@/api/namespace';
import { RegionResourceType, ResourceType } from '@/services/backend/svc/checkResource';
import {nsListRequest} from '@/api/namespace';
import {RegionResourceType, ResourceType} from '@/services/backend/svc/checkResource';
import useAppStore from '@/stores/app';
import useSessionStore from '@/stores/session';
import { ApiResp, ValueOf } from '@/types';
import { RESOURCE_STATUS } from '@/types/response/checkResource';
import {ApiResp, ValueOf} from '@/types';
import {RESOURCE_STATUS} from '@/types/response/checkResource';
import {
DELETE_USER_EXECUTION_STATUS,
DeleteUserFailure,
DeleteUserFinalStatusResponse,
DeleteUserInitiateResponse
DELETE_USER_EXECUTION_STATUS,
DeleteUserFailure,
DeleteUserFinalStatusResponse,
DeleteUserInitiateResponse
} from '@/types/response/deleteUser';
import { getPlanBackgroundClass } from '@/utils/styling';
import {getPlanBackgroundClass} from '@/utils/styling';
import {
Alert,
AlertDescription,
AlertIcon,
AlertTitle,
Button,
ButtonProps,
Center,
Divider,
FormControl,
HStack,
IconButton,
Modal,
ModalBody,
ModalCloseButton,
ModalContent,
ModalHeader,
ModalOverlay,
Spinner,
Table,
TableContainer,
Tbody,
Td,
Text,
Th,
Thead,
Tr,
useDisclosure,
VStack
Alert,
AlertDescription,
AlertIcon,
AlertTitle,
Button,
ButtonProps,
Center,
Divider,
FormControl,
HStack,
IconButton,
Modal,
ModalBody,
ModalCloseButton,
ModalContent,
ModalHeader,
ModalOverlay,
Spinner,
Table,
TableContainer,
Tbody,
Td,
Text,
Th,
Thead,
Tr,
useDisclosure,
VStack
} from '@chakra-ui/react';
import { Badge } from '@sealos/shadcn-ui/badge';
import { cn } from '@sealos/shadcn-ui';
import { InfoCircleIcon, LinkIcon, WarnTriangeIcon } from '@sealos/ui';
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import { useTranslation } from 'next-i18next';
import { useRouter } from 'next/router';
import { useCallback, useEffect, useMemo, useState } from 'react';
import {
buildSubscribedWorkspaceRows,
DeleteFlowStep,
getDeleteFlowStepFromStatus
} from './DeleteAccountModal.utils';
import { SettingInput } from './SettingInput';
import { SettingInputGroup } from './SettingInputGroup';
import {Badge} from '@sealos/shadcn-ui/badge';
import {cn} from '@sealos/shadcn-ui';
import {InfoCircleIcon, LinkIcon, WarnTriangeIcon} from '@sealos/ui';
import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query';
import {useTranslation} from 'next-i18next';
import {useRouter} from 'next/router';
import {useCallback, useEffect, useMemo, useState} from 'react';
import {buildSubscribedWorkspaceRows, DeleteFlowStep, getDeleteFlowStepFromStatus} from './DeleteAccountModal.utils';
import {SettingInput} from './SettingInput';
import {SettingInputGroup} from './SettingInputGroup';
type DeleteExecutionState = {
deleteId: string;
@@ -78,7 +74,6 @@ const appKeyList = [
'system-cronjob',
'',
'system-objectstorage',
'system-cloudserver',
'system-template'
] as const;
-181
View File
@@ -977,187 +977,6 @@ importers:
specifier: ^4.9.1
version: 4.10.1
providers/cloudserver:
dependencies:
'@chakra-ui/anatomy':
specifier: ^2.2.1
version: 2.2.2
'@chakra-ui/icons':
specifier: ^2.1.1
version: 2.1.1(@chakra-ui/system@2.6.2)(react@18.3.1)
'@chakra-ui/next-js':
specifier: ^2.1.5
version: 2.2.0(@chakra-ui/react@2.8.2)(@emotion/react@11.11.1)(next@13.1.6)(react@18.3.1)
'@chakra-ui/react':
specifier: ^2.8.1
version: 2.8.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.3.27)(framer-motion@10.16.5)(react-dom@18.3.1)(react@18.3.1)
'@chakra-ui/system':
specifier: ^2.6.1
version: 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.3.1)
'@emotion/react':
specifier: ^11.11.1
version: 11.11.1(@types/react@18.3.27)(react@18.3.1)
'@emotion/styled':
specifier: ^11.11.0
version: 11.11.0(@emotion/react@11.11.1)(@types/react@18.3.27)(react@18.3.1)
'@kubernetes/client-node':
specifier: ^0.18.1
version: 0.18.1
'@next/font':
specifier: 13.1.6
version: 13.1.6
'@sealos/ui':
specifier: workspace:^
version: link:../../packages/ui
'@tanstack/react-query':
specifier: ^4.35.3
version: 4.36.1(react-dom@18.3.1)(react@18.3.1)
'@types/multer':
specifier: ^1.4.10
version: 1.4.11
ansi_up:
specifier: ^5.2.1
version: 5.2.1
axios:
specifier: ^1.5.1
version: 1.6.2
date-fns:
specifier: ^2.30.0
version: 2.30.0
dayjs:
specifier: ^1.11.10
version: 1.11.10
decimal.js:
specifier: ^10.4.3
version: 10.4.3
echarts:
specifier: ^5.4.3
version: 5.4.3
framer-motion:
specifier: ^10.16.4
version: 10.16.5(react-dom@18.3.1)(react@18.3.1)
i18next:
specifier: ^23.11.5
version: 23.12.1
immer:
specifier: ^9.0.21
version: 9.0.21
js-cookie:
specifier: ^3.0.5
version: 3.0.5
js-yaml:
specifier: ^4.1.0
version: 4.1.0
jsonwebtoken:
specifier: ^9.0.2
version: 9.0.2
jszip:
specifier: ^3.10.1
version: 3.10.1
lodash:
specifier: ^4.17.21
version: 4.17.21
minio:
specifier: ^7.1.3
version: 7.1.3
mongodb:
specifier: ^5.9.0
version: 5.9.1
multer:
specifier: 1.4.5-lts.1
version: 1.4.5-lts.1
nanoid:
specifier: ^4.0.2
version: 4.0.2
next:
specifier: 13.1.6
version: 13.1.6(@babel/core@7.23.5)(react-dom@18.3.1)(react@18.3.1)(sass@1.69.5)
next-i18next:
specifier: ^15.3.0
version: 15.3.0(i18next@23.12.1)(next@13.1.6)(react-i18next@14.1.2)(react@18.3.1)
nprogress:
specifier: ^0.2.0
version: 0.2.0
prettier:
specifier: ^2.8.8
version: 2.8.8
react:
specifier: 18.3.1
version: 18.3.1
react-day-picker:
specifier: ^8.8.2
version: 8.9.1(date-fns@2.30.0)(react@18.3.1)
react-dom:
specifier: 18.3.1
version: 18.3.1(react@18.3.1)
react-hook-form:
specifier: ^7.46.2
version: 7.48.2(react@18.3.1)
react-i18next:
specifier: ^14.1.2
version: 14.1.2(i18next@23.12.1)(react-dom@18.3.1)(react@18.3.1)
react-markdown:
specifier: ^8.0.7
version: 8.0.7(@types/react@18.3.27)(react@18.3.1)
react-syntax-highlighter:
specifier: ^15.5.0
version: 15.5.0(react@18.3.1)
sass:
specifier: ^1.68.0
version: 1.69.5
sealos-desktop-sdk:
specifier: workspace:*
version: link:../../packages/client-sdk
typescript:
specifier: ^5.2.2
version: 5.2.2
zustand:
specifier: ^4.4.1
version: 4.4.7(@types/react@18.3.27)(immer@9.0.21)(react@18.3.1)
devDependencies:
'@svgr/webpack':
specifier: ^6.5.1
version: 6.5.1
'@types/js-cookie':
specifier: ^3.0.4
version: 3.0.6
'@types/js-yaml':
specifier: ^4.0.6
version: 4.0.9
'@types/jsonwebtoken':
specifier: ^9.0.3
version: 9.0.5
'@types/lodash':
specifier: ^4.14.199
version: 4.14.202
'@types/node':
specifier: 18.13.0
version: 18.13.0
'@types/nprogress':
specifier: ^0.2.1
version: 0.2.3
'@types/react':
specifier: 18.3.27
version: 18.3.27
'@types/react-dom':
specifier: 18.3.7
version: 18.3.7(@types/react@18.3.27)
'@types/react-syntax-highlighter':
specifier: ^15.5.7
version: 15.5.10
eslint:
specifier: 8.33.0
version: 8.33.0
eslint-config-next:
specifier: 13.1.6
version: 13.1.6(eslint@8.33.0)(typescript@5.2.2)
svg-inline-loader:
specifier: ^0.8.2
version: 0.8.2
webpack-bundle-analyzer:
specifier: ^4.9.1
version: 4.10.1
providers/costcenter:
dependencies:
'@alicloud/dysmsapi20170525':
@@ -1,3 +0,0 @@
NEXT_PUBLIC_MOCK_USER=
LAF_BASE_URL=
JWT_SECRET_APP=
@@ -1,6 +0,0 @@
{
"extends": "next/core-web-vitals",
"rules": {
"react-hooks/rules-of-hooks": 0
}
}
-40
View File
@@ -1,40 +0,0 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# next.js
/.next/
/out/
# production
/build
# misc
.DS_Store
*.pem
# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*
# local env files
.env*.local
# vercel
.vercel
# typescript
*.tsbuildinfo
next-env.d.ts
/public/trainData/
platform.json
.yalc/
yalc.lock
@@ -1,4 +0,0 @@
dist
.vscode
**/.DS_Store
node_modules
@@ -1,21 +0,0 @@
module.exports = {
printWidth: 100,
tabWidth: 2,
useTabs: false,
semi: true,
singleQuote: true,
quoteProps: 'as-needed',
jsxSingleQuote: false,
trailingComma: 'none',
bracketSpacing: true,
jsxBracketSameLine: false,
arrowParens: 'always',
rangeStart: 0,
rangeEnd: Infinity,
requirePragma: false,
insertPragma: false,
proseWrap: 'preserve',
htmlWhitespaceSensitivity: 'css',
endOfLine: 'lf'
};
-1
View File
@@ -1 +0,0 @@
# Sealos Cloud Server
@@ -1,9 +0,0 @@
FROM scratch
USER 65532:65532
COPY registry registry
COPY charts charts
COPY cloudserver-frontend-entrypoint.sh cloudserver-frontend-entrypoint.sh
CMD ["bash cloudserver-frontend-entrypoint.sh"]
@@ -1,6 +0,0 @@
apiVersion: v2
name: cloudserver-frontend
description: Sealos cloudserver Frontend Helm Chart
type: application
version: 1.0.0
appVersion: "latest"
@@ -1,16 +0,0 @@
# Custom values for cloudserver-frontend helm chart.
# This file contains user-customizable configurations.
replicaCount: 1
resources:
limits:
cpu: 1000m
memory: 1024Mi
requests:
cpu: 10m
memory: 128Mi
cloudserverConfig:
lafBaseUrl: ""
jwtSecretApp: ""
@@ -1,84 +0,0 @@
{{/* Expand the name of the chart. */}}
{{- define "cloudserver-frontend.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/* Create a default fully qualified app name. */}}
{{- define "cloudserver-frontend.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}
{{- define "cloudserver-frontend.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- define "cloudserver-frontend.labels" -}}
helm.sh/chart: {{ include "cloudserver-frontend.chart" . }}
{{ include "cloudserver-frontend.selectorLabels" . }}
{{ include "cloudserver-frontend.recommendedLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}
{{- define "cloudserver-frontend.selectorLabels" -}}
app: {{ include "cloudserver-frontend.fullname" . }}
{{- end }}
{{- define "cloudserver-frontend.recommendedLabels" -}}
app.kubernetes.io/name: {{ include "cloudserver-frontend.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
{{- define "cloudserver-frontend.scheme" -}}
{{- if eq (toString .Values.cloudserverConfig.disableHttps) "true" -}}http{{- else -}}https{{- end -}}
{{- end }}
{{- define "cloudserver-frontend.port" -}}
{{- $scheme := include "cloudserver-frontend.scheme" . -}}
{{- $port := toString .Values.cloudserverConfig.cloudPort -}}
{{- if eq $scheme "http" -}}
{{- $port = toString .Values.cloudserverConfig.httpPort -}}
{{- end -}}
{{- if or (and (eq $scheme "https") (or (eq $port "") (eq $port "443"))) (and (eq $scheme "http") (or (eq $port "") (eq $port "80"))) -}}
{{- "" -}}
{{- else -}}
{{- $port -}}
{{- end }}
{{- end }}
{{- define "cloudserver-frontend.portSuffix" -}}
{{- $port := include "cloudserver-frontend.port" . -}}
{{- if $port -}}:{{ $port }}{{- end -}}
{{- end }}
{{- define "cloudserver-frontend.portEnv" -}}
{{- $port := include "cloudserver-frontend.port" . -}}
{{- if $port -}}:{{ $port }}{{- end -}}
{{- end }}
{{- define "cloudserver-frontend.cloudOrigin" -}}
{{- include "cloudserver-frontend.scheme" . -}}://{{ .Values.cloudserverConfig.cloudDomain }}{{ include "cloudserver-frontend.portSuffix" . }}
{{- end }}
{{- define "cloudserver-frontend.wildcardCloudOrigin" -}}
{{- include "cloudserver-frontend.scheme" . -}}://*.{{ .Values.cloudserverConfig.cloudDomain }}{{ include "cloudserver-frontend.portSuffix" . }}
{{- end }}
{{- define "cloudserver-frontend.host" -}}
{{- default (printf "cloudserver.%s" .Values.cloudserverConfig.cloudDomain) .Values.ingress.host -}}
{{- end }}
{{- define "cloudserver-frontend.appUrl" -}}
{{- include "cloudserver-frontend.scheme" . -}}://{{ include "cloudserver-frontend.host" . }}{{ include "cloudserver-frontend.portSuffix" . }}
{{- end }}
@@ -1,19 +0,0 @@
apiVersion: app.sealos.io/v1
kind: App
metadata:
name: cloudserver
namespace: app-system
spec:
data:
desc: cloudserver
url: {{ include "cloudserver-frontend.appUrl" . | quote }}
icon: {{ printf "%s/logo.svg" (include "cloudserver-frontend.appUrl" .) | quote }}
i18n:
zh:
name: 云主机
zh-Hans:
name: 云主机
menuData:
name: cloudserver
type: iframe
displayType: normal
@@ -1,10 +0,0 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ include "cloudserver-frontend.fullname" . }}-config
namespace: {{ .Release.Namespace }}
labels:
{{- include "cloudserver-frontend.labels" . | nindent 4 }}
data:
config.yaml: |-
addr: :3000
@@ -1,63 +0,0 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "cloudserver-frontend.fullname" . }}
namespace: {{ .Release.Namespace }}
labels:
{{- include "cloudserver-frontend.labels" . | nindent 4 }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
{{- include "cloudserver-frontend.selectorLabels" . | nindent 6 }}
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 25%
maxSurge: 25%
template:
metadata:
labels:
{{- include "cloudserver-frontend.labels" . | nindent 8 }}
{{- with .Values.podAnnotations }}
annotations:
{{- toYaml . | nindent 8 }}
{{- end }}
spec:
{{- with .Values.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 8 }}
{{- end }}
securityContext:
{{- toYaml .Values.podSecurityContext | nindent 8 }}
containers:
- name: {{ .Chart.Name }}
image: {{ .Values.image | quote }}
imagePullPolicy: {{ .Values.imagePullPolicy }}
{{- if .Values.securityContext }}
securityContext:
{{- toYaml .Values.securityContext | nindent 12 }}
{{- end }}
resources:
{{- toYaml .Values.resources | nindent 12 }}
env:
- name: LAF_BASE_URL
value: {{ .Values.cloudserverConfig.lafBaseUrl | quote }}
- name: JWT_SECRET_APP
value: {{ .Values.cloudserverConfig.jwtSecretApp | quote }}
ports:
- name: http
containerPort: {{ .Values.service.port }}
protocol: TCP
volumeMounts:
- name: cloudserver-frontend-volume
mountPath: /config.yaml
subPath: config.yaml
{{- with .Values.affinity }}
affinity:
{{- toYaml . | nindent 8 }}
{{- end }}
volumes:
- name: cloudserver-frontend-volume
configMap:
name: {{ include "cloudserver-frontend.fullname" . }}-config
@@ -1,43 +0,0 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ include "cloudserver-frontend.fullname" . }}
namespace: {{ .Release.Namespace }}
annotations:
kubernetes.io/ingress.class: {{ .Values.ingress.className | quote }}
nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/cors-allow-methods: "PUT, GET, POST, DELETE, PATCH, OPTIONS"
nginx.ingress.kubernetes.io/cors-allow-origin: "{{ include "cloudserver-frontend.cloudOrigin" . }}, {{ include "cloudserver-frontend.wildcardCloudOrigin" . }}"
nginx.ingress.kubernetes.io/cors-allow-credentials: "true"
nginx.ingress.kubernetes.io/cors-max-age: "600"
nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
nginx.ingress.kubernetes.io/configuration-snippet: |
more_clear_headers "X-Frame-Options:";
more_set_headers "Content-Security-Policy: default-src * blob: data: *.{{ .Values.cloudserverConfig.cloudDomain }}{{ include "cloudserver-frontend.portSuffix" . }} {{ .Values.cloudserverConfig.cloudDomain }}{{ include "cloudserver-frontend.portSuffix" . }}; img-src * data: blob: resource: *.{{ .Values.cloudserverConfig.cloudDomain }}{{ include "cloudserver-frontend.portSuffix" . }} {{ .Values.cloudserverConfig.cloudDomain }}{{ include "cloudserver-frontend.portSuffix" . }}; connect-src * wss: blob: resource:; style-src 'self' 'unsafe-inline' blob: *.{{ .Values.cloudserverConfig.cloudDomain }}{{ include "cloudserver-frontend.portSuffix" . }} {{ .Values.cloudserverConfig.cloudDomain }}{{ include "cloudserver-frontend.portSuffix" . }} resource:; script-src 'self' 'unsafe-inline' 'unsafe-eval' blob: *.{{ .Values.cloudserverConfig.cloudDomain }}{{ include "cloudserver-frontend.portSuffix" . }} {{ .Values.cloudserverConfig.cloudDomain }}{{ include "cloudserver-frontend.portSuffix" . }} resource: *.baidu.com *.bdstatic.com https://js.stripe.com; frame-src 'self' *.{{ .Values.cloudserverConfig.cloudDomain }}{{ include "cloudserver-frontend.portSuffix" . }} {{ .Values.cloudserverConfig.cloudDomain }}{{ include "cloudserver-frontend.portSuffix" . }} mailto: tel: weixin: mtt: *.baidu.com https://js.stripe.com; frame-ancestors 'self' {{ include "cloudserver-frontend.cloudOrigin" . }} {{ include "cloudserver-frontend.wildcardCloudOrigin" . }}";
more_set_headers "X-Xss-Protection: 1; mode=block";
higress.io/response-header-control-remove: X-Frame-Options
higress.io/response-header-control-update: |
Content-Security-Policy "default-src * blob: data: *.{{ .Values.cloudserverConfig.cloudDomain }}{{ include "cloudserver-frontend.portSuffix" . }} {{ .Values.cloudserverConfig.cloudDomain }}{{ include "cloudserver-frontend.portSuffix" . }}; img-src * data: blob: resource: *.{{ .Values.cloudserverConfig.cloudDomain }}{{ include "cloudserver-frontend.portSuffix" . }} {{ .Values.cloudserverConfig.cloudDomain }}{{ include "cloudserver-frontend.portSuffix" . }}; connect-src * wss: blob: resource:; style-src 'self' 'unsafe-inline' blob: *.{{ .Values.cloudserverConfig.cloudDomain }}{{ include "cloudserver-frontend.portSuffix" . }} {{ .Values.cloudserverConfig.cloudDomain }}{{ include "cloudserver-frontend.portSuffix" . }} resource:; script-src 'self' 'unsafe-inline' 'unsafe-eval' blob: *.{{ .Values.cloudserverConfig.cloudDomain }}{{ include "cloudserver-frontend.portSuffix" . }} {{ .Values.cloudserverConfig.cloudDomain }}{{ include "cloudserver-frontend.portSuffix" . }} resource: *.baidu.com *.bdstatic.com https://js.stripe.com; frame-src 'self' *.{{ .Values.cloudserverConfig.cloudDomain }}{{ include "cloudserver-frontend.portSuffix" . }} {{ .Values.cloudserverConfig.cloudDomain }}{{ include "cloudserver-frontend.portSuffix" . }} mailto: tel: weixin: mtt: *.baidu.com https://js.stripe.com; frame-ancestors 'self' {{ include "cloudserver-frontend.cloudOrigin" . }} {{ include "cloudserver-frontend.wildcardCloudOrigin" . }}"
X-Xss-Protection "1; mode=block"
{{- with .Values.ingress.annotations }}
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
ingressClassName: {{ .Values.ingress.className | quote }}
rules:
- host: {{ include "cloudserver-frontend.host" . | quote }}
http:
paths:
- pathType: Prefix
path: /
backend:
service:
name: {{ include "cloudserver-frontend.fullname" . }}
port:
number: {{ .Values.service.port }}
{{- if not (eq (toString .Values.cloudserverConfig.disableHttps) "true") }}
tls:
- hosts:
- {{ include "cloudserver-frontend.host" . | quote }}
secretName: {{ .Values.cloudserverConfig.certSecretName | quote }}
{{- end }}
@@ -1,16 +0,0 @@
apiVersion: v1
kind: Service
metadata:
labels:
{{- include "cloudserver-frontend.labels" . | nindent 4 }}
name: {{ include "cloudserver-frontend.fullname" . }}
namespace: {{ .Release.Namespace }}
spec:
type: {{ .Values.service.type }}
ports:
- name: http
port: {{ .Values.service.port }}
protocol: TCP
targetPort: {{ .Values.service.port }}
selector:
{{- include "cloudserver-frontend.selectorLabels" . | nindent 4 }}
@@ -1,52 +0,0 @@
# Default values for cloudserver-frontend helm chart.
image: ghcr.io/labring/sealos-cloudserver-frontend:latest
imagePullPolicy: Always
imagePullSecrets: []
fullnameOverride: "cloudserver-frontend"
replicaCount: 1
podAnnotations: {}
podLabels: {}
podSecurityContext:
runAsNonRoot: true
runAsUser: 1001
securityContext:
runAsNonRoot: true
runAsUser: 1001
allowPrivilegeEscalation: false
capabilities:
drop:
- "ALL"
service:
type: ClusterIP
port: 3000
ingress:
className: nginx
host: ""
annotations: {}
cloudserverConfig:
cloudDomain: "127.0.0.1.nip.io"
cloudPort: ""
httpPort: ""
disableHttps: false
certSecretName: "wildcard-cert"
lafBaseUrl: ""
jwtSecretApp: ""
resources:
limits:
cpu: 1000m
memory: 1024Mi
requests:
cpu: 10m
memory: 128Mi
affinity: {}
@@ -1,89 +0,0 @@
#!/bin/bash
set -e
RELEASE_NAME=${RELEASE_NAME:-"cloudserver-frontend"}
RELEASE_NAMESPACE=${RELEASE_NAMESPACE:-"cloudserver-frontend"}
CHART_PATH=${CHART_PATH:-"./charts/cloudserver-frontend"}
HELM_OPTS=${HELM_OPTS:-""}
HELM_OPTIONS=${HELM_OPTIONS:-""}
AUTO_CONFIG_HELM_OPTS=""
get_cm_value() {
local namespace="$1"
local name="$2"
local key="$3"
kubectl get configmap "${name}" -n "${namespace}" -o "jsonpath={.data.${key}}" 2>/dev/null || true
}
add_set_string() {
local key="$1"
local value="$2"
if [ -n "${value}" ]; then
AUTO_CONFIG_HELM_OPTS="${AUTO_CONFIG_HELM_OPTS} --set-string ${key}=${value}"
fi
}
SEALOS_CLOUD_DOMAIN=${SEALOS_CLOUD_DOMAIN:-"${cloudDomain:-$(get_cm_value sealos-system sealos-config cloudDomain)}"}
add_set_string cloudserverConfig.cloudDomain "${SEALOS_CLOUD_DOMAIN}"
SEALOS_CLOUD_PORT=${SEALOS_CLOUD_PORT:-"${cloudPort:-$(get_cm_value sealos-system sealos-config cloudPort)}"}
add_set_string cloudserverConfig.cloudPort "${SEALOS_CLOUD_PORT}"
SEALOS_HTTP_PORT=${SEALOS_HTTP_PORT:-"${httpPort:-$(get_cm_value sealos-system sealos-config httpPort)}"}
add_set_string cloudserverConfig.httpPort "${SEALOS_HTTP_PORT}"
SEALOS_DISABLE_HTTPS=${SEALOS_DISABLE_HTTPS:-"${disableHttps:-$(get_cm_value sealos-system sealos-config disableHttps)}"}
add_set_string cloudserverConfig.disableHttps "${SEALOS_DISABLE_HTTPS}"
SEALOS_CERT_SECRET_NAME=${SEALOS_CERT_SECRET_NAME:-"${certSecretName:-$(get_cm_value sealos-system sealos-config certSecretName)}"}
add_set_string cloudserverConfig.certSecretName "${SEALOS_CERT_SECRET_NAME}"
SEALOS_JWT_INTERNAL=${SEALOS_JWT_INTERNAL:-"${jwtInternal:-$(get_cm_value sealos-system sealos-config jwtInternal)}"}
add_set_string cloudserverConfig.jwtSecretApp "${SEALOS_JWT_INTERNAL}"
add_set_string cloudserverConfig.lafBaseUrl "${lafBaseUrl:-}"
adopt_namespaced_resource() {
local namespace="$1"
local kind="$2"
local name="$3"
if kubectl -n "${namespace}" get "${kind}" "${name}" >/dev/null 2>&1; then
echo "Adopting ${kind} ${namespace}/${name}..."
kubectl -n "${namespace}" label "${kind}" "${name}" app.kubernetes.io/managed-by=Helm --overwrite >/dev/null 2>&1 || true
kubectl -n "${namespace}" annotate "${kind}" "${name}" meta.helm.sh/release-name="${RELEASE_NAME}" meta.helm.sh/release-namespace="${RELEASE_NAMESPACE}" --overwrite >/dev/null 2>&1 || true
fi
}
adopt_cluster_resource() {
local kind="$1"
local name="$2"
if kubectl get "${kind}" "${name}" >/dev/null 2>&1; then
echo "Adopting ${kind} ${name}..."
kubectl label "${kind}" "${name}" app.kubernetes.io/managed-by=Helm --overwrite >/dev/null 2>&1 || true
kubectl annotate "${kind}" "${name}" meta.helm.sh/release-name="${RELEASE_NAME}" meta.helm.sh/release-namespace="${RELEASE_NAMESPACE}" --overwrite >/dev/null 2>&1 || true
fi
}
echo "Checking and adopting existing resources..."
if kubectl get namespace "${RELEASE_NAMESPACE}" >/dev/null 2>&1; then
kubectl label namespace "${RELEASE_NAMESPACE}" app.kubernetes.io/managed-by=Helm --overwrite >/dev/null 2>&1 || true
kubectl annotate namespace "${RELEASE_NAMESPACE}" meta.helm.sh/release-name="${RELEASE_NAME}" meta.helm.sh/release-namespace="${RELEASE_NAMESPACE}" --overwrite >/dev/null 2>&1 || true
adopt_namespaced_resource "${RELEASE_NAMESPACE}" configmap cloudserver-frontend-config
adopt_namespaced_resource "${RELEASE_NAMESPACE}" service cloudserver-frontend
adopt_namespaced_resource "${RELEASE_NAMESPACE}" deployment cloudserver-frontend
adopt_namespaced_resource "${RELEASE_NAMESPACE}" ingress cloudserver-frontend
fi
adopt_namespaced_resource app-system apps.app.sealos.io cloudserver
SERVICE_NAME="cloudserver-frontend"
USER_VALUES_PATH="/root/.sealos/cloud/values/core/${SERVICE_NAME}-values.yaml"
if [ ! -f "${USER_VALUES_PATH}" ]; then
mkdir -p "$(dirname "${USER_VALUES_PATH}")"
cp "./charts/cloudserver-frontend/cloudserver-frontend-values.yaml" "${USER_VALUES_PATH}"
fi
HELM_ARGS="${AUTO_CONFIG_HELM_OPTS} ${HELM_OPTIONS} ${HELM_OPTS}"
echo "Deploying Helm chart..."
helm upgrade -i "${RELEASE_NAME}" -n "${RELEASE_NAMESPACE}" --create-namespace "${CHART_PATH}" \
-f "./charts/cloudserver-frontend/values.yaml" \
-f "${USER_VALUES_PATH}" \
${HELM_ARGS}
@@ -1,8 +0,0 @@
{
"entry": "./public/locales/zh",
"entryLocale": "zh",
"output": "./public/locales",
"outputLocales": [
"en"
]
}
@@ -1,12 +0,0 @@
//next-i18next.config.js
/**
* @type {import('next-i18next').UserConfig}
*/
module.exports = {
i18n: {
defaultLocale: 'zh',
locales: ['en', 'zh'],
localeDetection: false
}
};
@@ -1,30 +0,0 @@
/** @type {import('next').NextConfig} */
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
const { i18n } = require('./next-i18next.config');
const analyzer = process.env === 'production' ? [new BundleAnalyzerPlugin()] : [];
const path = require('path');
const nextConfig = {
i18n,
output: 'standalone',
reactStrictMode: false,
compress: true,
webpack: (config, { isServer }) => {
config.module.rules = config.module.rules.concat([
{
test: /\.svg$/i,
issuer: /\.[jt]sx?$/,
use: ['@svgr/webpack']
}
]);
config.plugins = [...config.plugins, ...analyzer];
return config;
},
transpilePackages: ['@sealos/ui', 'sealos-desktop-sdk', '@sealos/driver'],
experimental: {
// this includes files from the monorepo base two directories up
outputFileTracingRoot: path.join(__dirname, '../../')
}
};
module.exports = nextConfig;
@@ -1,73 +0,0 @@
{
"name": "cloudserver",
"private": true,
"version": "0.1.0",
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start"
},
"dependencies": {
"@chakra-ui/anatomy": "^2.2.1",
"@chakra-ui/icons": "^2.1.1",
"@chakra-ui/next-js": "^2.1.5",
"@chakra-ui/react": "^2.8.1",
"@chakra-ui/system": "^2.6.1",
"@emotion/react": "^11.11.1",
"@emotion/styled": "^11.11.0",
"@kubernetes/client-node": "^0.18.1",
"@next/font": "13.1.6",
"@sealos/ui": "workspace:^",
"@tanstack/react-query": "^4.35.3",
"@types/multer": "^1.4.10",
"ansi_up": "^5.2.1",
"axios": "^1.5.1",
"date-fns": "^2.30.0",
"dayjs": "^1.11.10",
"decimal.js": "^10.4.3",
"echarts": "^5.4.3",
"framer-motion": "^10.16.4",
"i18next": "^23.11.5",
"immer": "^9.0.21",
"js-cookie": "^3.0.5",
"js-yaml": "^4.1.0",
"jsonwebtoken": "^9.0.2",
"jszip": "^3.10.1",
"lodash": "^4.17.21",
"minio": "^7.1.3",
"mongodb": "^5.9.0",
"multer": "1.4.5-lts.1",
"nanoid": "^4.0.2",
"next": "13.1.6",
"next-i18next": "^15.3.0",
"nprogress": "^0.2.0",
"prettier": "^2.8.8",
"react": "18.3.1",
"react-day-picker": "^8.8.2",
"react-dom": "18.3.1",
"react-hook-form": "^7.46.2",
"react-i18next": "^14.1.2",
"react-markdown": "^8.0.7",
"react-syntax-highlighter": "^15.5.0",
"sass": "^1.68.0",
"sealos-desktop-sdk": "workspace:*",
"typescript": "^5.2.2",
"zustand": "^4.4.1"
},
"devDependencies": {
"@svgr/webpack": "^6.5.1",
"@types/js-cookie": "^3.0.4",
"@types/js-yaml": "^4.0.6",
"@types/jsonwebtoken": "^9.0.3",
"@types/lodash": "^4.14.199",
"@types/node": "18.13.0",
"@types/nprogress": "^0.2.1",
"@types/react": "18.3.27",
"@types/react-dom": "18.3.7",
"@types/react-syntax-highlighter": "^15.5.7",
"eslint": "8.33.0",
"eslint-config-next": "13.1.6",
"svg-inline-loader": "^0.8.2",
"webpack-bundle-analyzer": "^4.9.1"
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 93 KiB

@@ -1,3 +0,0 @@
<svg width="21" height="20" viewBox="0 0 21 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M10.2952 14.1663L13.6285 10.8329L12.4619 9.66626L11.1285 10.9579V7.49959H9.46188V10.9579L8.12854 9.66626L6.96188 10.8329L10.2952 14.1663ZM5.29521 18.3329C4.83687 18.3329 4.44437 18.1696 4.11771 17.8429C3.79104 17.5163 3.62799 17.124 3.62854 16.6663V6.66626L8.62854 1.66626H15.2952C15.7535 1.66626 16.146 1.82959 16.4727 2.15626C16.7994 2.48293 16.9624 2.87515 16.9619 3.33293V16.6663C16.9619 17.1246 16.7985 17.5171 16.4719 17.8438C16.1452 18.1704 15.753 18.3335 15.2952 18.3329H5.29521ZM5.29521 16.6663H15.2952V3.33293H9.33688L5.29521 7.37459V16.6663Z" fill="#219BF4"/>
</svg>

Before

Width:  |  Height:  |  Size: 683 B

@@ -1,28 +0,0 @@
<svg width="44" height="44" viewBox="0 0 44 44" fill="none" xmlns="http://www.w3.org/2000/svg">
<g filter="url(#filter0_dd_27_16895)">
<circle cx="22" cy="20" r="18" fill="#F4F6F8"/>
<circle cx="22" cy="20" r="17.625" stroke="#FDFDFE" stroke-width="0.75"/>
</g>
<path d="M32.0287 15.3865C31.9655 15.1849 31.8878 14.9881 31.7964 14.7976V14.7854C31.3698 13.9143 30.6625 13.2134 29.7891 12.7964C28.9157 12.3794 27.9276 12.2708 26.985 12.4881C26.0424 12.7054 25.2006 13.236 24.5962 13.9937C23.9917 14.7513 23.6601 15.6918 23.655 16.6624C23.6551 16.9676 23.6879 17.272 23.7528 17.5702C23.7531 17.5743 23.7531 17.5784 23.7528 17.5824C23.7773 17.7051 23.8139 17.8278 23.8506 17.9505C24.0688 18.8147 24.1113 19.7142 23.9754 20.5952C23.8396 21.4762 23.5284 22.3208 23.0602 23.0784C22.592 23.8361 21.9765 24.4913 21.2504 25.005C20.5244 25.5187 19.7027 25.8803 18.8343 26.0683C17.9659 26.2563 17.0687 26.2668 16.1962 26.0991C15.3237 25.9315 14.4938 25.5891 13.756 25.0925C13.0183 24.5959 12.3877 23.9553 11.9021 23.2088C11.4165 22.4622 11.0857 21.6252 10.9295 20.7476C11.1504 22.2689 11.6871 23.7267 12.505 25.0266C13.3229 26.3265 14.4037 27.4395 15.6774 28.2937C16.9512 29.1478 18.3894 29.724 19.8991 29.9849C21.4088 30.2458 22.9562 30.1856 24.4413 29.8083C25.9263 29.431 27.3158 28.7449 28.5199 27.7944C29.724 26.844 30.7157 25.6504 31.431 24.2909C32.1462 22.9313 32.569 21.4363 32.672 19.9024C32.775 18.3685 32.5558 16.83 32.0287 15.3865V15.3865Z" fill="#6378FF"/>
<path d="M14.6579 19.0791C16.076 21.1524 19.0098 20.9684 19.0098 20.9684C18.2764 20.2568 17.7996 19.6066 17.7507 17.7542C17.7018 15.9017 16.6505 15.411 16.6505 15.411C18.5331 14.221 17.8607 12.9329 17.7996 11.4975C17.7629 10.602 18.2886 9.93951 18.7042 9.5592C16.312 9.91882 14.1504 11.1912 12.6701 13.1111C11.1897 15.0309 10.5049 17.4501 10.7584 19.8643C10.9295 19.3858 13.3499 17.1653 14.6579 19.0791Z" fill="#0AA3F9"/>
<path d="M32.0287 15.3865C31.9655 15.1849 31.8878 14.9881 31.7964 14.7976V14.7854C31.3698 13.9143 30.6625 13.2134 29.7891 12.7964C28.9157 12.3794 27.9276 12.2708 26.985 12.4881C26.0424 12.7054 25.2006 13.236 24.5962 13.9937C23.9917 14.7513 23.6601 15.6918 23.655 16.6624C23.6551 16.9676 23.6879 17.272 23.7528 17.5702C23.7531 17.5743 23.7531 17.5784 23.7528 17.5824C23.7773 17.7051 23.8139 17.8278 23.8506 17.9505C24.0688 18.8147 24.1113 19.7142 23.9754 20.5952C23.8396 21.4762 23.5284 22.3208 23.0602 23.0784C22.592 23.8361 21.9765 24.4913 21.2504 25.005C20.5244 25.5187 19.7027 25.8803 18.8343 26.0683C17.9659 26.2563 17.0687 26.2668 16.1962 26.0991C15.3237 25.9315 14.4938 25.5891 13.756 25.0925C13.0183 24.5959 12.3877 23.9553 11.9021 23.2088C11.4165 22.4622 11.0857 21.6252 10.9295 20.7476C11.1504 22.2689 11.6871 23.7267 12.505 25.0266C13.3229 26.3265 14.4037 27.4395 15.6774 28.2937C16.9512 29.1478 18.3894 29.724 19.8991 29.9849C21.4088 30.2458 22.9562 30.1856 24.4413 29.8083C25.9263 29.431 27.3158 28.7449 28.5199 27.7944C29.724 26.844 30.7157 25.6504 31.431 24.2909C32.1462 22.9313 32.569 21.4363 32.672 19.9024C32.775 18.3685 32.5558 16.83 32.0287 15.3865V15.3865Z" fill="#0AA3F9"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M30.2073 18.3428C30.2073 23.6886 25.8891 28.0222 20.5623 28.0222C17.7358 28.0222 15.1932 26.802 13.4291 24.8578C13.5355 24.9393 13.6446 25.0176 13.756 25.0926C14.4938 25.5892 15.3237 25.9316 16.1962 26.0992C17.0687 26.2669 17.9659 26.2564 18.8343 26.0684C19.7027 25.8804 20.5244 25.5188 21.2504 25.0051C21.9765 24.4914 22.592 23.8362 23.0602 23.0785C23.5284 22.3209 23.8396 21.4763 23.9755 20.5953C24.1113 19.7143 24.0688 18.8148 23.8506 17.9506C23.8139 17.8279 23.7773 17.7052 23.7528 17.5826C23.7531 17.5785 23.7531 17.5744 23.7528 17.5703C23.6879 17.2721 23.6551 16.9677 23.655 16.6625C23.6601 15.6919 23.9917 14.7515 24.5962 13.9938C25.2006 13.2361 26.0424 12.7055 26.985 12.4882C27.374 12.3985 27.7707 12.3644 28.164 12.3845C29.4443 14.0272 30.2073 16.0956 30.2073 18.3428Z" fill="#7ABBFD"/>
<defs>
<filter id="filter0_dd_27_16895" x="0" y="0" width="44" height="44" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset/>
<feGaussianBlur stdDeviation="0.5"/>
<feComposite in2="hardAlpha" operator="out"/>
<feColorMatrix type="matrix" values="0 0 0 0 0.473958 0 0 0 0 0.552499 0 0 0 0 0.625 0 0 0 0.25 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_27_16895"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="2"/>
<feGaussianBlur stdDeviation="2"/>
<feComposite in2="hardAlpha" operator="out"/>
<feColorMatrix type="matrix" values="0 0 0 0 0.632917 0 0 0 0 0.655278 0 0 0 0 0.7 0 0 0 0.25 0"/>
<feBlend mode="normal" in2="effect1_dropShadow_27_16895" result="effect2_dropShadow_27_16895"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect2_dropShadow_27_16895" result="shape"/>
</filter>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 4.9 KiB

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="layout_1" data-name="layout 1" viewBox="0 0 198.77 208.77"><defs><style>.cls-1{fill:url(#gradient_595)}.cls-2{fill:url(#gradient_230)}.cls-3{fill:url(#gradient_588)}.cls-4{clip-path:url(#clip-path)}.cls-5{fill:url(#gradient_593)}</style><linearGradient id="gradient_595" x1="174.65" x2="46.97" y1="52.02" y2="172.04" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#64b0ff"/><stop offset=".1" stop-color="#43b9ff"/><stop offset=".3" stop-color="#1fc3ff"/><stop offset=".4" stop-color="#08c9ff"/><stop offset=".5" stop-color="#00cbff"/><stop offset=".6" stop-color="#0cc7ff"/><stop offset=".7" stop-color="#2dbeff"/><stop offset=".9" stop-color="#62aeff"/><stop offset="1" stop-color="#85a4ff"/></linearGradient><linearGradient id="gradient_230" x1="174.65" x2="46.97" y1="52.02" y2="172.04" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#6378ff"/><stop offset="1" stop-color="#6312ff"/></linearGradient><linearGradient id="gradient_588" x1="11.45" x2="82.94" y1="84.91" y2="62.26" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#948bde"/><stop offset=".4" stop-color="#57aef4"/><stop offset=".6" stop-color="#3abfff"/><stop offset="1" stop-color="#00daff"/></linearGradient><clipPath id="clip-path"><path d="M 183.1 66.2 a 35.9 35.9 0 0 0 -1.9 -4.8 l 0 -0.1 h 0 a 35.1 35.1 0 0 0 -66.6 15.3 A 34.7 34.7 0 0 0 115.4 84 v 0 a 0.7 0.7 0 0 1 0 0.1 c 0.2 1 0.5 2 0.8 3 A 54.1 54.1 0 1 1 10.5 109.9 A 89.5 89.5 0 1 0 183.1 66.2 Z" class="cls-1"/></clipPath><linearGradient id="gradient_593" x1="146.81" x2="31.88" y1="36.3" y2="144.34" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#64acff"/><stop offset=".1" stop-color="#5cacfe"/><stop offset=".3" stop-color="#48acfc"/><stop offset=".5" stop-color="#30acfa"/><stop offset=".8" stop-color="#179ef4"/><stop offset="1" stop-color="#0091ee"/></linearGradient></defs><path d="M 183.1 66.2 a 35.9 35.9 0 0 0 -1.9 -4.8 l 0 -0.1 h 0 a 35.1 35.1 0 0 0 -66.6 15.3 A 34.7 34.7 0 0 0 115.4 84 v 0 a 0.7 0.7 0 0 1 0 0.1 c 0.2 1 0.5 2 0.8 3 A 54.1 54.1 0 1 1 10.5 109.9 A 89.5 89.5 0 1 0 183.1 66.2 Z" class="cls-2"/><path d="M 41 96.3 c 11.6 16.9 35.6 15.4 35.6 15.4 c -6 -5.8 -9.9 -11.1 -10.3 -26.2 S 57.3 66.4 57.3 66.4 c 15.4 -9.7 9.9 -20.2 9.4 -31.9 c -0.3 -7.3 4 -12.7 7.4 -15.8 a 76.8 76.8 0 0 0 -65 84 C 10.5 98.8 30.3 80.7 41 96.3 Z" class="cls-3"/><path d="M 183.1 66.2 a 35.9 35.9 0 0 0 -1.9 -4.8 l 0 -0.1 h 0 a 35.1 35.1 0 0 0 -66.6 15.3 A 34.7 34.7 0 0 0 115.4 84 v 0 a 0.7 0.7 0 0 1 0 0.1 c 0.2 1 0.5 2 0.8 3 A 54.1 54.1 0 1 1 10.5 109.9 A 89.5 89.5 0 1 0 183.1 66.2 Z" class="cls-1"/><g class="cls-4"><circle cx="89.3" cy="90.3" r="78.9" class="cls-5"/></g></svg>

Before

Width:  |  Height:  |  Size: 2.7 KiB

@@ -1,10 +0,0 @@
<svg width="17" height="17" viewBox="0 0 17 17" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_5_5440)">
<path d="M6.29452 3.16663C3.34785 3.16663 0.961182 5.55329 0.961182 8.49996C0.961182 11.4466 3.34785 13.8333 6.29452 13.8333C9.24118 13.8333 11.6278 11.4466 11.6278 8.49996C11.6278 5.55329 9.24118 3.16663 6.29452 3.16663ZM6.29452 12.5C4.08785 12.5 2.29452 10.7066 2.29452 8.49996C2.29452 6.29329 4.08785 4.49996 6.29452 4.49996C8.50118 4.49996 10.2945 6.29329 10.2945 8.49996C10.2945 10.7066 8.50118 12.5 6.29452 12.5ZM8.29452 7.49996H6.96118V10.8333H5.62785V7.49996H4.29452V6.49996H8.29452V7.49996ZM13.7945 2.99996L15.6278 3.83329L13.7945 4.66663L12.9612 6.49996L12.1278 4.66663L10.2945 3.83329L12.1278 2.99996L12.9612 1.16663L13.7945 2.99996ZM13.7945 12.3333L15.6278 13.1666L13.7945 14L12.9612 15.8333L12.1278 14L10.2945 13.1666L12.1278 12.3333L12.9612 10.5L13.7945 12.3333Z" fill="#485058"/>
</g>
<defs>
<clipPath id="clip0_5_5440">
<rect width="16" height="16" fill="white" transform="translate(0.294556 0.5)"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

@@ -1,4 +0,0 @@
<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M16.3502 8.2672C16.7402 8.2672 17.1202 8.2972 17.4902 8.3472C16.8102 5.3772 13.6902 3.1272 9.94023 3.1272C5.69023 3.1272 2.24023 6.0072 2.24023 9.5572C2.24023 11.6072 3.39023 13.4172 5.18023 14.5972L4.17023 16.6272L6.93023 15.4372C7.52023 15.6472 8.14023 15.8172 8.80023 15.9072C8.71023 15.5172 8.66023 15.1172 8.66023 14.6972C8.65023 11.1572 12.1002 8.2672 16.3502 8.2672ZM12.5002 6.0172C12.6263 6.0172 12.7511 6.04203 12.8676 6.09027C12.9841 6.13852 13.0899 6.20923 13.1791 6.29837C13.2682 6.38752 13.3389 6.49335 13.3872 6.60982C13.4354 6.72629 13.4602 6.85113 13.4602 6.9772C13.4602 7.10327 13.4354 7.2281 13.3872 7.34457C13.3389 7.46105 13.2682 7.56688 13.1791 7.65602C13.0899 7.74516 12.9841 7.81588 12.8676 7.86412C12.7511 7.91237 12.6263 7.9372 12.5002 7.9372C12.2456 7.9372 12.0014 7.83605 11.8214 7.65602C11.6414 7.47598 11.5402 7.2318 11.5402 6.9772C11.5402 6.72259 11.6414 6.47841 11.8214 6.29837C12.0014 6.11834 12.2456 6.0172 12.5002 6.0172ZM7.37023 7.9472C7.11563 7.9472 6.87145 7.84606 6.69141 7.66602C6.51138 7.48598 6.41023 7.24181 6.41023 6.9872C6.41023 6.73259 6.51138 6.48841 6.69141 6.30837C6.87145 6.12834 7.11563 6.0272 7.37023 6.0272C7.62484 6.0272 7.86902 6.12834 8.04906 6.30837C8.22909 6.48841 8.33023 6.73259 8.33023 6.9872C8.33023 7.24181 8.22909 7.48598 8.04906 7.66602C7.86902 7.84606 7.62484 7.9472 7.37023 7.9472Z" fill="#33BABB"/>
<path d="M22.7603 14.6973C22.7603 11.8573 19.8903 9.55725 16.3503 9.55725C12.8103 9.55725 9.94034 11.8573 9.94034 14.6973C9.94034 17.5373 12.8103 19.8372 16.3503 19.8372C16.9303 19.8372 17.4903 19.7573 18.0203 19.6373L21.4803 21.1273L20.2803 18.7273C21.7803 17.7873 22.7603 16.3473 22.7603 14.6973ZM14.4203 14.3773C14.2305 14.3773 14.0449 14.3209 13.887 14.2155C13.7291 14.11 13.6061 13.96 13.5334 13.7846C13.4608 13.6092 13.4417 13.4162 13.4788 13.23C13.5158 13.0437 13.6073 12.8727 13.7415 12.7384C13.8758 12.6042 14.0468 12.5127 14.2331 12.4757C14.4193 12.4387 14.6123 12.4577 14.7877 12.5303C14.9631 12.603 15.1131 12.726 15.2185 12.8839C15.324 13.0418 15.3803 13.2274 15.3803 13.4173C15.3903 13.9473 14.9503 14.3773 14.4203 14.3773ZM18.2703 14.3773C18.0157 14.3773 17.7716 14.2761 17.5915 14.0961C17.4115 13.916 17.3103 13.6719 17.3103 13.4173C17.3103 13.1626 17.4115 12.9185 17.5915 12.7384C17.7716 12.5584 18.0157 12.4573 18.2703 12.4573C18.5249 12.4573 18.7691 12.5584 18.9492 12.7384C19.1292 12.9185 19.2303 13.1626 19.2303 13.4173C19.2303 13.6719 19.1292 13.916 18.9492 14.0961C18.7691 14.2761 18.5249 14.3773 18.2703 14.3773Z" fill="#33BABB"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.6 KiB

@@ -1,128 +0,0 @@
{
"Add Data Disk": "Add Data Disk",
"Amount": "Amount",
"Are you sure to create a cloud host?": "Are you sure you want to create a cloud host?",
"Assign Public IP": "Assign Public IP",
"Auto Generate Password": "Auto Generate Password",
"Automatic Generated": "Automatic Generated",
"BandWidth": "Bandwidth",
"Bandwidth by hour": "Bandwidth by hour",
"Basic Config": "Basic Config",
"Billing items": "Billing items",
"Billing rules": "Billing rules",
"CPU": "CPU",
"Cancel": "Cancel",
"Changing": "Changing",
"Cloud host list": "Cloud Host List",
"Configuration fee details": "Configuration fee details",
"Confirm": "Confirm",
"Copy Failed": "Copy Failed",
"Create Time": "Create Time",
"Created": "Created",
"Creating": "Creating",
"Creation Time": "Creation Time",
"DataDisk": "Data Disk",
"Delete": "Delete",
"Deleted": "Deleted",
"Deleting": "Deleting",
"Deletion warning": "Deletion Warning",
"Describe": "Describe",
"Details": "Details",
"Disk Size": "Disk Size",
"Empty List": "Empty List",
"Fee inquiry in progress": "Fee inquiry in progress...",
"GPU": "GPU",
"IP Address": "IP Address",
"Image": "Image",
"Instance": "Instance",
"Login Method": "Login Method",
"Counts": "counts",
"Memory": "Memory",
"Name": "Name",
"New Server": "New Server",
"Operate": "Operate",
"Operating System": "Operating System",
"Operation": "Operation",
"Password copied to clipboard": "Password copied to clipboard",
"Please enter": "Please enter",
"Please enter your password": "Please enter your password",
"Please select a mirror": "Please select a mirror",
"Prompt": "Prompt",
"Public IP": "Public IP",
"Public network bandwidth": "Public network bandwidth",
"Quantity tips": "Quantity is {{amount1}} to {{amount2}}",
"ReStart": "Restart",
"Reference fee": "Reference fee",
"Reference fee disk tips": "{{price}}/GiB",
"Reference fee tip": "{{price}}",
"Reference fee bandwidth tips": "{{price}}/Mbps",
"Restarting": "Restarting",
"Set Password": "Set Password",
"Start": "Start",
"Started": "Started",
"Starting": "Starting",
"Status": "Status",
"Stop": "Stop",
"Stopped": "Stopped",
"Stopping": "Stopping",
"Storage": "Storage",
"Submit": "Submit",
"Submit Error": "Submit Error",
"Supports changing the operating system": "Note: After purchase, you can change the operating system according to your business needs",
"SystemDisk": "System Disk",
"The maximum number of instances is 100": "Maximum number of instances is 100",
"The maximum number of instances is 20": "The maximum number is 20",
"The maximum number of instances is 500": "Maximum number of instances is 500",
"The minimum number of instances is 1": "Minimum number of instances is 1",
"The minimum number of instances is 20": "Minimum number of instances is 20",
"The number of instances cannot be empty": "Number of instances cannot be empty",
"The purpose of the disk": "Disk Purpose",
"Type": "Type",
"capacity": "Capacity",
"close cloud server tip": "Please note that storage will still be charged when the server is shut down. Please confirm!",
"delete cloud server tip": "Are you sure to delete this cloud host?",
"hour": "hour",
"price": "Price",
"publicIpAssigned tips": "Please note: If an independent public IP address is not assigned, the external IP address cannot be used to communicate with each other.",
"ssh port": "SSH port",
"sshName": "SSH Username",
"sshPassword": "SSH Password",
"storage fees": "Storage fees",
"success": "Success",
"terminal": "Terminal",
"Billing model": "Billing model",
"Availability Zone": "Availability Zone",
"Architecture": "Architecture",
"Instance Family": "Instance Family",
"postPaidByHour": "Pay as you go",
"heterogeneous": "Heterogeneous (GPU)",
"prePaid": "Yearly and monthly subscription",
"x86_64": "x86_64",
"costEffective": "Cost Effective",
"gpu": "GPU",
"Password does not meet requirements": "Password does not meet requirements",
"Lowercase letters az": "Lowercase letters a ~ z",
"Capital letters az": "Capital letters A ~ Z",
"Numbers 09": "Numbers 0 ~ 9",
"Contains at least three of these": "Contains at least three of these",
"Cannot start with": "Cannot start with \"/\"",
"cannot contain spaces": "cannot contain spaces",
"Within 8 to 30 characters": "Within 8 to 30 characters (12 or more characters recommended)",
"highMemory": "High Memory",
"highPerformance": "High Performance",
"Public IP is not enabled": "Public IP is not enabled",
"interval": "Interval",
"sold out": "Sold Out",
"month": "month",
"indivual": "indivual",
"year": "year",
"duration": "duration",
"total": "total",
"After the annual and monthly cloud hosting is sold": "After the annual and monthly cloud hosting is sold",
"No refund allowed": "No refund allowed,",
"Pay Confirm tips": "Clicking \"Confirm\" indicates that you have understood and agreed to this clause. If you do not agree to the clause \"No refunds are allowed after the annual or monthly cloud hosting is sold\", please click the \"Cancel\" button. If you do not agree, this purchase will be canceled and you will not be charged any fees.",
"file.upload error description": "Failed to upload the file.",
"Upload File": "Upload File",
"file.Select a maximum of 10 files": "You can select no more than 10 files.",
"The maximum number of instances is 12": "The maximum number of instances is 12"
}
@@ -1,128 +0,0 @@
{
"Cloud host list": "云主机列表",
"New Server": "新建主机",
"Empty List": "空列表",
"Basic Config": "基础配置",
"Submit Error": "提交错误",
"CPU": "CPU",
"Operating System": "操作系统",
"Name": "名称",
"Automatic Generated": "自动生成",
"Submit": "提交",
"Type": "机型",
"Disk Size": "磁盘大小",
"Login Method": "登录方式",
"Counts": "数量",
"Set Password": "设置密码",
"Auto Generate Password": "自动生成密码",
"Assign Public IP": "分配公网IP",
"Bandwidth by hour": "(按小时带宽)",
"BandWidth": "带宽",
"Storage": "存储",
"Creation Time": "创建时间",
"Add Data Disk": "新增数据盘",
"Public IP": "公网IP",
"Amount": "数量",
"Describe": "描述",
"Operate": "操作",
"Image": "镜像",
"Please select a mirror": "请选择镜像",
"Supports changing the operating system": "注意:购买后支持更换操作系统,您可根据业务需要变更系统",
"Please enter your password": "请输入登录密码",
"Memory": "内存",
"GPU": "GPU",
"SystemDisk": "系统盘",
"DataDisk": "数据盘",
"The purpose of the disk": "用途",
"capacity": "容量",
"The minimum number of instances is 20": "最小为20",
"The maximum number of instances is 500": "最大数量为500",
"The number of instances cannot be empty": "数量不能为空",
"The minimum number of instances is 1": "最小值为1",
"The maximum number of instances is 100": "最小值为100",
"Details": "详情",
"Start": "启动",
"ReStart": "重启",
"Stop": "关机",
"Delete": "删除",
"Create Time": "创建时间",
"Operation": "操作",
"Status": "状态",
"IP Address": "IP 地址",
"sshName": "ssh 用户名",
"sshPassword": "ssh 密码",
"ssh port": "ssh 端口",
"Creating": "创建中",
"Created": "已创建",
"Starting": "启动中",
"Started": "运行中",
"Stopping": "关机中",
"Stopped": "已关机",
"Deleting": "删除中",
"Deleted": "已删除",
"terminal": "终端",
"success": "成功",
"Deletion warning": "删除警告",
"Cancel": "取消",
"Please enter": "请输入",
"delete cloud server tip": "确认删除这台云主机吗",
"Prompt": "提示",
"Are you sure to create a cloud host?": "确认创建一台云主机吗",
"Confirm": "确认",
"close cloud server tip": "请注意,关机状态下存储仍会收费,请确认!",
"Quantity tips": "数量是 {{amount1}} 到 {{amount2}}",
"Password copied to clipboard": "密码已复制到剪切板",
"Copy Failed": "复制失败",
"Changing": "变更中",
"Restarting": "重启中",
"Reference fee": "参考费用",
"Reference fee tip": "{{price}}",
"Configuration fee details": "配置费用明细",
"Instance": "实例",
"storage fees": "存储费用",
"Public network bandwidth": "公网带宽",
"Billing items": "计费项",
"price": "价格",
"publicIpAssigned tips": "请注意:未分配独立公网IP地址的情况下无法使用外网IP地址对外进行互相通信。",
"Fee inquiry in progress": "费用查询中...",
"hour": "小时",
"Reference fee disk tips": "{{price}}/GiB",
"Reference fee bandwidth tips": "{{price}}/Mbps",
"Billing rules": "计费规则",
"The maximum number of instances is 20": "最大数量是20",
"Billing model": "计费模式",
"Availability Zone": "可用区",
"Architecture": "架构",
"Instance Family": "实例族",
"postPaidByHour": "按量计费",
"heterogeneous": "异构计算 (GPU)",
"prePaid": "包年包月",
"x86_64": "x86计算",
"costEffective": "实惠型",
"gpu": "GPU",
"Password does not meet requirements": "密码不符合要求",
"Lowercase letters az": "小写字母 a ~ z",
"Capital letters az": "大写字母 A Z",
"Numbers 09": "数字 0 9",
"Contains at least three of these": "至少包含其中三项",
"Cannot start with": "不能以\" / \"开头",
"cannot contain spaces": "不能包含空格",
"Within 8 to 30 characters": "在 8 ~ 30 位字符数以内(推荐12位以上)",
"highMemory": "内存型",
"highPerformance": "计算型",
"Public IP is not enabled": "未开启公网IP",
"interval": "区间",
"sold out": "售空",
"month": "月",
"indivual": "个",
"year": "年",
"duration": "时长",
"total": "总计",
"After the annual and monthly cloud hosting is sold": "包年包月云主机售卖后",
"No refund allowed": "不允许退费,",
"Pay Confirm tips": "点击“确认”表示您已知晓并同意此条款。如果您不同意“包年包月云主机售卖后不允许退费”的条款,请点击“取消”按钮。不同意后,本次购买将被撤销,您不会被收取任何费用。",
"file.upload error description": "文件上传失败",
"Upload File": "上传文件",
"file.Select a maximum of 10 files": "至多选择 10 个文件",
"The maximum number of instances is 12": "最大值为 12"
}
@@ -1,24 +0,0 @@
<svg width="48" height="49" viewBox="0 0 48 49" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M35.6403 14.7956C35.5204 14.395 35.3799 14 35.2193 13.6123C34.5992 12.1151 33.6902 10.7548 32.5444 9.60896C31.3986 8.46312 30.0382 7.55418 28.5411 6.93405C27.044 6.31393 25.4394 5.99475 23.8189 5.99475C22.1984 5.99475 20.5938 6.31393 19.0967 6.93405C17.5996 7.55418 16.2393 8.46312 15.0934 9.60897C13.9476 10.7548 13.0386 12.1151 12.4185 13.6123C12.2594 13.9964 12.1201 14.3877 12.0009 14.7845C11.8836 14.7795 11.7657 14.777 11.6472 14.777C7.10206 14.777 3.41748 18.4616 3.41748 23.0068C3.41748 27.5519 7.10206 31.2365 11.6472 31.2365C11.7588 31.2365 11.8699 31.2343 11.9804 31.2299V27.8208C11.9804 25.6117 13.7713 23.8208 15.9804 23.8208H32.0194C34.2286 23.8208 36.0194 25.6117 36.0194 27.8208V31.2156C36.1304 31.22 36.2418 31.2223 36.3539 31.2223C40.8984 31.2223 44.5824 27.5382 44.5824 22.9937C44.5824 18.4492 40.8984 14.7651 36.3539 14.7651C36.1135 14.7651 35.8755 14.7754 35.6403 14.7956Z" fill="url(#paint0_linear_5604_8171)"/>
<path d="M14.0456 37.1224C14.0456 36.0178 14.941 35.1224 16.0456 35.1224H31.9543C33.0589 35.1224 33.9543 36.0178 33.9543 37.1224V40.1224C33.9543 41.227 33.0589 42.1224 31.9543 42.1224H16.0456C14.941 42.1224 14.0456 41.227 14.0456 40.1224V37.1224Z" fill="url(#paint1_linear_5604_8171)"/>
<path d="M16.0456 26.2062C14.941 26.2062 14.0456 27.1016 14.0456 28.2062V31.2062C14.0456 32.3107 14.941 33.2062 16.0456 33.2062H31.9543C33.0589 33.2062 33.9543 32.3107 33.9543 31.2062V28.2062C33.9543 27.1016 33.0589 26.2062 31.9543 26.2062H16.0456Z" fill="url(#paint2_linear_5604_8171)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M33.7658 32.0548C33.8855 31.7999 33.9529 31.5155 33.9543 31.2156C33.9543 31.2125 33.9543 31.2093 33.9543 31.2062V28.2062C33.9543 28.0744 33.9415 27.9455 33.9172 27.8208C33.7416 26.9213 32.963 26.2374 32.0194 26.2072C31.9978 26.2065 31.9761 26.2062 31.9543 26.2062H16.0456C16.0238 26.2062 16.0021 26.2065 15.9804 26.2072C15.0368 26.2374 14.2583 26.9213 14.0827 27.8208C14.0583 27.9455 14.0456 28.0744 14.0456 28.2062V31.2062C14.0456 31.2141 14.0456 31.222 14.0457 31.2299C14.0492 31.5246 14.1163 31.8039 14.2341 32.0548C14.4574 32.5308 14.8628 32.9043 15.3606 33.0858C15.5743 33.1637 15.805 33.2062 16.0456 33.2062H31.9543C32.1949 33.2062 32.4256 33.1637 32.6393 33.0858C33.137 32.9044 33.5425 32.5308 33.7658 32.0548ZM14.2341 36.2738C14.1132 36.5314 14.0456 36.819 14.0456 37.1224V40.1224C14.0456 41.227 14.941 42.1224 16.0456 42.1224H31.9543C33.0589 42.1224 33.9543 41.227 33.9543 40.1224V37.1224C33.9543 36.819 33.8867 36.5314 33.7658 36.2738C33.4466 35.5935 32.7555 35.1224 31.9543 35.1224H16.0456C15.2444 35.1224 14.5533 35.5935 14.2341 36.2738Z" fill="url(#paint3_linear_5604_8171)"/>
<defs>
<linearGradient id="paint0_linear_5604_8171" x1="6.53066" y1="42.1224" x2="44.5824" y2="7.74482" gradientUnits="userSpaceOnUse">
<stop stop-color="#0086D2"/>
<stop offset="1" stop-color="#36ACDF"/>
</linearGradient>
<linearGradient id="paint1_linear_5604_8171" x1="6.53066" y1="42.1224" x2="44.5824" y2="7.74482" gradientUnits="userSpaceOnUse">
<stop stop-color="#0086D2"/>
<stop offset="1" stop-color="#36ACDF"/>
</linearGradient>
<linearGradient id="paint2_linear_5604_8171" x1="6.53066" y1="42.1224" x2="44.5824" y2="7.74482" gradientUnits="userSpaceOnUse">
<stop stop-color="#0086D2"/>
<stop offset="1" stop-color="#36ACDF"/>
</linearGradient>
<linearGradient id="paint3_linear_5604_8171" x1="6.53066" y1="42.1224" x2="44.5824" y2="7.74482" gradientUnits="userSpaceOnUse">
<stop stop-color="#0086D2"/>
<stop offset="1" stop-color="#36ACDF"/>
</linearGradient>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 3.6 KiB

@@ -1,35 +0,0 @@
import { ServerTypePayload } from '@/pages/api/cloudserver/listType';
import { UpdateStatusPayload } from '@/pages/api/cloudserver/updateStatus';
import { POST } from '@/services/request';
import adaptCloudServerListItem from '@/types/adapt';
import { CloudServerPrice, CloudServerType, EditForm, OperatingSystems } from '@/types/cloudserver';
import { CVMInstanceType } from '@/types/cloudserver';
import { CVMRegionType } from '@/types/region';
export const getCloudServerRegion = () => POST<CVMRegionType[]>('/api/cloudserver/getRegion');
export const getCloudServerType = (payload: ServerTypePayload) =>
POST<CloudServerType[]>('/api/cloudserver/listType', payload);
export const getCloudServerImage = () => POST<OperatingSystems>('/api/cloudserver/listImage');
export const createCloudServer = (payload: EditForm) => POST('/api/cloudserver/create', payload);
export const delCloudServer = () => POST('/api/cloudserver/delete');
export const updateCloudServerStatus = (payload: UpdateStatusPayload) =>
POST('/api/cloudserver/updateStatus', payload);
export const listCloudServer = (payload: { page: number; pageSize: number }) =>
POST<{ list: CVMInstanceType[]; page: number; pageSize: number; total: number }>(
'/api/cloudserver/list',
payload
).then((data) => {
return {
...data,
list: data?.list?.map(adaptCloudServerListItem)
};
});
export const getCloudServerPrice = (payload: EditForm) =>
POST<CloudServerPrice>('/api/cloudserver/price', payload);
@@ -1,33 +0,0 @@
import { SystemEnvResponse } from '@/pages/api/platform/getEnv';
import { GET, POST } from '@/services/request';
import { AxiosProgressEvent } from 'axios';
export const getSystemEnv = () => GET<SystemEnvResponse>('/api/platform/getEnv');
export const uploadFile = (
data: FormData,
onUploadProgress?: (progressEvent: AxiosProgressEvent) => void
) => {
return POST<
{
originalName: string;
fileName: string;
}[]
>('/api/minio/upload', data, {
headers: {
'Content-Type': 'multipart/form-data'
},
timeout: 3 * 60 * 1000,
onUploadProgress
});
};
export const getFileUrl = ({ fileName }: { fileName: string }) => {
return GET<string>('/api/minio/getUrl', { fileName });
};
export const deleteFileByName = ({ fileName }: { fileName: string }) => {
return GET<string>('/api/minio/delete', { fileName });
};
export const FeishuNotification = () => POST('/api/platform/feishu');
@@ -1,39 +0,0 @@
import { StatusMap } from '@/constants/vm';
import { PhaseEnum } from '@/types/cloudserver';
import { Box, Flex, Spinner } from '@chakra-ui/react';
import { useTranslation } from 'next-i18next';
const AppStatusTag = ({
status,
showBorder = false
}: {
status: PhaseEnum;
showBorder: boolean;
}) => {
const { t } = useTranslation();
const statusMap = StatusMap[status];
return (
<Flex
color={statusMap.color}
backgroundColor={statusMap.backgroundColor}
border={showBorder ? '1px solid' : 'none'}
borderColor={statusMap.color}
py={2}
px={'12px'}
borderRadius={'24px'}
fontSize={'xs'}
fontWeight={'bold'}
alignItems={'center'}
w={'88px'}
>
<Box w={'10px'} h={'10px'} borderRadius={'10px'} backgroundColor={statusMap.dotColor}></Box>
<Flex alignItems={'center'} justifyContent={'space-between'} ml={'6px'} flex={1} gap={'1px'}>
{t(statusMap.label)}
{status?.includes('ing') && <Spinner size={'xs'} />}
</Flex>
</Flex>
);
};
export default AppStatusTag;
@@ -1,40 +0,0 @@
import React from 'react';
import { Flex, Box } from '@chakra-ui/react';
const ButtonGroup = ({
list
}: {
list: {
label: string;
onclick: () => void;
active: boolean;
}[];
}) => {
return (
<Flex borderRadius={'sm'} overflow={'hidden'} fontSize={'sm'}>
{list.map((item) => (
<Box
key={item.label}
py={1}
px={6}
backgroundColor={item.active ? 'blue.500' : 'blackAlpha.50'}
color={item.active ? 'white' : 'blackAlpha.700'}
cursor={'pointer'}
onClick={item.onclick}
_first={{
borderTopLeftRadius: 'sm',
borderBottomLeftRadius: 'sm'
}}
_last={{
borderTopRightRadius: 'sm',
borderBottomRightRadius: 'sm'
}}
>
{item.label}
</Box>
))}
</Flex>
);
};
export default ButtonGroup;
@@ -1,22 +0,0 @@
import { Text, Icon } from '@chakra-ui/react';
export default function currencysymbol({
type = 'shellCoin',
...props
}: {
type?: 'shellCoin' | 'cny' | 'usd';
} & Pick<Parameters<typeof Icon>[0], 'w' | 'h' | 'color'>) {
return type === 'shellCoin' ? (
<Icon h="auto" {...props} viewBox="0 0 43 43">
<path
fill="currentColor"
fillRule="evenodd"
clipRule="evenodd"
d="M38.8452 16.3383C38.8452 16.3383 38.169 13.0791 34.6177 12.5018C34.6177 12.5018 32.91 5.22138 26.476 8.01336C26.476 8.01336 21.7775 1.34481 16.7833 8.01336C16.7833 8.01336 10.8267 4.86984 8.35511 12.513C8.35511 12.513 4.03522 12.6233 4.00011 18.5272C3.96499 24.4311 12.4728 30.8168 13.6867 31.3741C13.6867 31.3741 11.0158 34.2719 14.2876 36.284C18.8172 38.6577 27.3756 37.7936 29.4606 35.9326C30.7532 34.7789 30.6523 33.0064 29.4606 31.5498C29.4556 31.5548 40.4202 25.1038 38.8452 16.3383ZM31.6228 11.4841C29.9736 8.80397 26.7453 10.5751 26.7453 10.5751C27.9505 20.3212 24.1256 29.8479 24.1256 29.8479C27.7512 28.7132 33.6121 14.7169 31.6228 11.4841ZM21.1951 7.66792C21.1951 7.66792 18.5641 7.83387 18.1203 11.4413C17.6764 15.0488 18.7299 29.0557 21.5427 30.0673C21.5427 30.0673 23.5266 30.5865 24.8902 18.319C26.6924 6.40218 21.1951 7.66792 21.1951 7.66792ZM16.2936 10.5751C16.2936 10.5751 13.488 8.61467 11.4786 11.4841C9.49465 14.7169 15.3556 28.7132 18.9759 29.8479C18.9759 29.8479 15.2143 21.3388 16.2936 10.5751ZM8.87726 14.9454C8.87726 14.9454 6.13705 14.9454 6.43049 18.7633C6.79949 23.5643 12.9309 28.6588 15.2143 29.5044C15.2089 29.5044 10.0763 22.326 8.87726 14.9454ZM15.1097 34.6383C15.8744 35.9813 24.6742 36.3866 28.102 34.8719C28.102 34.8719 29.1783 33.7787 27.532 31.5994C27.4731 31.5216 26.8769 31.5791 26.5874 31.5627C26.2978 31.5463 26.0133 31.4758 25.6763 31.4068C25.6763 31.4068 24.6168 32.1662 22.9437 31.5994C22.9437 31.5994 21.7614 32.2601 20.3823 31.5994C20.3823 31.5994 18.6756 32.1821 17.6497 31.4068C17.6497 31.4068 16.9291 31.6032 15.8719 31.4068C15.8719 31.4068 14.3671 33.3342 15.1097 34.6383ZM34.2051 14.9533C32.8914 23.1395 27.9505 29.5113 27.9505 29.5113C30.9382 28.8784 36.0244 22.5811 36.6816 18.7633C37.3388 14.9454 34.2051 14.9533 34.2051 14.9533Z"
/>
</Icon>
) : type === 'cny' ? (
<Text {...props}></Text>
) : (
<Text {...props}>$</Text>
);
}
@@ -1,255 +0,0 @@
import { useLoading } from '@/hooks/useLoading';
import { useSelectFile } from '@/hooks/useSelectFile';
import { useToast } from '@/hooks/useToast';
import { Box, Center, Flex, Icon, Text, type BoxProps } from '@chakra-ui/react';
import { customAlphabet } from 'nanoid';
import { useTranslation } from 'next-i18next';
import { DragEvent, useCallback, useState } from 'react';
const nanoid = customAlphabet('abcdefghijklmnopqrstuvwxyz1234567890', 12);
export const FileImgs = [
{
reg: /\.yaml$/i,
src: (
<Icon
xmlns="http://www.w3.org/2000/svg"
width="16px"
height="16px"
viewBox="0 0 16 16"
fill="#7B838B"
>
<path d="M9.33329 1.33301H3.99996C3.26663 1.33301 2.67329 1.93301 2.67329 2.66634L2.66663 13.333C2.66663 14.0663 3.25996 14.6663 3.99329 14.6663H12C12.7333 14.6663 13.3333 14.0663 13.3333 13.333V5.33301L9.33329 1.33301ZM3.99996 13.333V2.66634H8.66663V5.99967H12V13.333H3.99996Z" />
</Icon>
)
},
{
reg: /\.(svg|png|jpg|jpeg|gif|bmp)$/i,
src: (
<Icon
xmlns="http://www.w3.org/2000/svg"
width="16px"
height="16px"
viewBox="0 0 16 16"
fill="#7B838B"
>
<g clipPath="url(#clip0_29_17085)">
<path d="M13.3333 2C13.6869 2 14.0261 2.14048 14.2761 2.39052C14.5262 2.64057 14.6666 2.97971 14.6666 3.33333V12.6667C14.6666 13.0203 14.5262 13.3594 14.2761 13.6095C14.0261 13.8595 13.6869 14 13.3333 14H2.66665C2.31302 14 1.97389 13.8595 1.72384 13.6095C1.47379 13.3594 1.33331 13.0203 1.33331 12.6667V3.33333C1.33331 2.97971 1.47379 2.64057 1.72384 2.39052C1.97389 2.14048 2.31302 2 2.66665 2H13.3333ZM13.3333 3.33333H2.66665V12.6667H3.28598L9.49131 6.46133C9.5687 6.38393 9.66057 6.32253 9.76169 6.28063C9.86281 6.23874 9.97119 6.21718 10.0806 6.21718C10.1901 6.21718 10.2985 6.23874 10.3996 6.28063C10.5007 6.32253 10.5926 6.38393 10.67 6.46133L13.3333 9.124V3.33333ZM10.0806 7.75733L5.17131 12.6667H13.3333V11.01L10.0806 7.75733ZM4.99998 4.66667C5.2652 4.66667 5.51955 4.77202 5.70709 4.95956C5.89462 5.1471 5.99998 5.40145 5.99998 5.66667C5.99998 5.93188 5.89462 6.18624 5.70709 6.37377C5.51955 6.56131 5.2652 6.66667 4.99998 6.66667C4.73476 6.66667 4.48041 6.56131 4.29287 6.37377C4.10534 6.18624 3.99998 5.93188 3.99998 5.66667C3.99998 5.40145 4.10534 5.1471 4.29287 4.95956C4.48041 4.77202 4.73476 4.66667 4.99998 4.66667Z" />
</g>
</Icon>
)
}
];
export type FileItemType = {
id: string;
filename: string;
text?: string;
file: File;
icon: JSX.Element;
};
interface Props extends BoxProps {
fileExtension: string;
files: FileItemType[];
setFiles: React.Dispatch<React.SetStateAction<FileItemType[]>>;
}
const FileSelect = ({ fileExtension, setFiles, files, ...BoxStyle }: Props) => {
const { Loading: FileSelectLoading } = useLoading();
const { t } = useTranslation();
const { toast } = useToast();
const [isDragging, setIsDragging] = useState(false);
const [selecting, setSelecting] = useState(false);
const { File, onOpen } = useSelectFile({
fileType: fileExtension,
multiple: true
});
const onSelectFile = useCallback(
async (files: File[]) => {
setSelecting(true);
try {
// Parse file by file
let promise = Promise.resolve<FileItemType[]>([]);
files.forEach((file) => {
promise = promise.then(async (result) => {
let icon = FileImgs.find((item) => item.reg.test(file.name))?.src;
if (!icon) {
icon = FileImgs[0].src;
}
const fileItem: FileItemType = {
id: nanoid(),
filename: file.name,
icon,
file: file
};
return [...result, fileItem];
});
});
const chunkFiles = await promise;
console.log(chunkFiles);
setFiles(chunkFiles);
} catch (error: any) {
console.log(error);
toast({
title: typeof error === 'string' ? error : '解析文件失败',
status: 'error'
});
}
setSelecting(false);
},
[setFiles, toast]
);
const handleDragEnter = (e: DragEvent<HTMLDivElement>) => {
e.preventDefault();
setIsDragging(true);
};
const handleDragLeave = (e: DragEvent<HTMLDivElement>) => {
e.preventDefault();
setIsDragging(false);
};
const handleDrop = useCallback(
async (e: DragEvent<HTMLDivElement>) => {
e.preventDefault();
setIsDragging(false);
const items = e.dataTransfer.items;
const fileList: File[] = [];
if (e.dataTransfer.items.length <= 1) {
const traverseFileTree = async (item: any) => {
return new Promise<void>((resolve, reject) => {
if (item.isFile) {
item.file((file: File) => {
fileList.push(file);
resolve();
});
} else if (item.isDirectory) {
const dirReader = item.createReader();
dirReader.readEntries(async (entries: any[]) => {
for (let i = 0; i < entries.length; i++) {
await traverseFileTree(entries[i]);
}
resolve();
});
}
});
};
for (let i = 0; i < items.length; i++) {
const item = items[i].webkitGetAsEntry();
if (item) {
await traverseFileTree(item);
}
}
} else {
const files = Array.from(e.dataTransfer.files);
let isErr = files.some((item) => item.type === '');
if (isErr) {
return toast({
title: t('file.upload error description'),
status: 'error'
});
}
for (let i = 0; i < files.length; i++) {
fileList.push(files[i]);
}
}
onSelectFile(fileList);
},
[onSelectFile, t, toast]
);
return (
<Flex flexDirection={'column'}>
<Flex
position={'relative'}
bg={'#f4f6f8'}
justifyContent={'center'}
alignItems={'center'}
h="132px"
borderRadius={'4px'}
border={'1px solid #DEE0E2'}
onDragEnter={handleDragEnter}
onDragOver={handleDragEnter}
onDragLeave={handleDragLeave}
onDrop={handleDrop}
gap="8px"
{...BoxStyle}
>
<Icon w="24px" h="24px" fill={'#1D8CDC'}>
<path d="M11 19.7908V13.7908H5V11.7908H11V5.79077H13V11.7908H19V13.7908H13V19.7908H11Z" />
</Icon>
<Text
color={'#1D8CDC'}
fontSize={'16px'}
fontWeight={600}
cursor={'pointer'}
onClick={onOpen}
>
{t('Upload File')}
</Text>
{/* <Box
w={'auto'}
maxW={'200px'}
h="35px"
bottom={'0'}
right={'0'}
fontWeight={400}
fontSize={'14px'}
overflowY={'scroll'}
position={'absolute'}
>
{files.map((item) => (
<Flex alignItems={'center'} key={item.id}>
{item.icon}
<Box ml="8px">{item.filename}</Box>
<Icon
ml="auto"
w="24px"
h="24px"
fill="#5A646E"
cursor={'pointer'}
onClick={() => {
setFiles((state) => state.filter((file) => file.id !== item.id));
}}
>
<path d="M9.375 18.0408C9.05417 18.0408 8.77961 17.9266 8.55133 17.6984C8.32267 17.4697 8.20833 17.1949 8.20833 16.8741V9.29077H7.625V8.1241H10.5417V7.54077H14.0417V8.1241H16.9583V9.29077H16.375V16.8741C16.375 17.1949 16.2609 17.4697 16.0326 17.6984C15.8039 17.9266 15.5292 18.0408 15.2083 18.0408H9.375ZM15.2083 9.29077H9.375V16.8741H15.2083V9.29077ZM10.5417 15.7074H11.7083V10.4574H10.5417V15.7074ZM12.875 15.7074H14.0417V10.4574H12.875V15.7074ZM9.375 9.29077V16.8741V9.29077Z" />
</Icon>
</Flex>
))}
</Box> */}
<FileSelectLoading loading={selecting} fixed={false} />
<File onSelect={onSelectFile} />
</Flex>
<Box mt="12px" maxH={'100px'} fontWeight={400} fontSize={'14px'} overflowY={'scroll'}>
{files.map((item) => (
<Flex alignItems={'center'} key={item.id}>
<Center w="16px" mr="8px">
{item.icon}
</Center>
{item.filename}
<Icon
ml="auto"
w="24px"
h="24px"
fill="#5A646E"
cursor={'pointer'}
onClick={() => {
setFiles((state) => state.filter((file) => file.id !== item.id));
}}
>
<path d="M9.375 18.0408C9.05417 18.0408 8.77961 17.9266 8.55133 17.6984C8.32267 17.4697 8.20833 17.1949 8.20833 16.8741V9.29077H7.625V8.1241H10.5417V7.54077H14.0417V8.1241H16.9583V9.29077H16.375V16.8741C16.375 17.1949 16.2609 17.4697 16.0326 17.6984C15.8039 17.9266 15.5292 18.0408 15.2083 18.0408H9.375ZM15.2083 9.29077H9.375V16.8741H15.2083V9.29077ZM10.5417 15.7074H11.7083V10.4574H10.5417V15.7074ZM12.875 15.7074H14.0417V10.4574H12.875V15.7074ZM9.375 9.29077V16.8741V9.29077Z" />
</Icon>
</Flex>
))}
</Box>
</Flex>
);
};
export default FileSelect;
@@ -1,29 +0,0 @@
import React, { ReactNode } from 'react';
import { FormControl, FormErrorMessage } from '@chakra-ui/react';
import type { FormControlProps } from '@chakra-ui/react';
interface Props extends FormControlProps {
errorText?: string;
showError?: boolean;
children: ReactNode;
}
const MyFormControl = ({ errorText, showError = false, children, ...props }: Props) => {
return (
<FormControl
position={'relative'}
pb={showError ? '24px' : '0'}
isInvalid={!!errorText}
{...props}
>
{children}
{showError && !!errorText && (
<FormErrorMessage mt={1} position={'absolute'}>
{errorText}
</FormErrorMessage>
)}
</FormControl>
);
};
export default MyFormControl;
@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M2 3.33333L3.33333 2L14 12.6667L12.6667 14L2 3.33333ZM8.66667 3.33333L9.33333 2L10 3.33333L11.3333 4L10 4.66667L9.33333 6L8.66667 4.66667L7.33333 4L8.66667 3.33333ZM3.33333 10L4 8.66667L4.66667 10L6 10.6667L4.66667 11.3333L4 12.6667L3.33333 11.3333L2 10.6667L3.33333 10ZM2.66667 6L3.33333 6.66667L2.66667 7.33333L2 6.66667L2.66667 6ZM12 6.66667L12.6667 7.33333L12 8L11.3333 7.33333L12 6.66667Z" clip-rule="evenodd"/></svg>

Before

Width:  |  Height:  |  Size: 546 B

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="10" height="16" fill="none" viewBox="0 0 10 16"><path fill="#676C75" d="M7.80895 14.8251L0.674052 8.52505C0.589364 8.45005 0.529519 8.3688 0.494515 8.2813C0.458946 8.1938 0.441162 8.10005 0.441162 8.00005C0.441162 7.90005 0.458946 7.8063 0.494515 7.7188C0.529519 7.6313 0.589364 7.55005 0.674052 7.47505L7.80895 1.1563C8.00655 0.981299 8.25356 0.893799 8.54996 0.893799C8.84637 0.893799 9.10043 0.987549 9.31215 1.17505C9.52387 1.36255 9.62973 1.5813 9.62973 1.8313C9.62973 2.0813 9.52387 2.30005 9.31215 2.48755L3.08764 8.00005L9.31215 13.5126C9.50975 13.6876 9.60855 13.9031 9.60855 14.159C9.60855 14.4156 9.5027 14.6376 9.29098 14.8251C9.07926 15.0126 8.83226 15.1063 8.54996 15.1063C8.26767 15.1063 8.02067 15.0126 7.80895 14.8251Z"/></svg>

Before

Width:  |  Height:  |  Size: 791 B

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48" class="icon" p-id="6786" t="1681452466538" version="1.1" viewBox="0 0 1024 1024"><path d="M926.293333 396.373333l-170.666666-170.666666a42.666667 42.666667 0 0 0-60.586667 60.586666L793.173333 384H298.666667a42.666667 42.666667 0 0 0 0 85.333333h597.333333a42.666667 42.666667 0 0 0 39.253333-26.453333 42.666667 42.666667 0 0 0-8.96-46.506667zM725.333333 554.666667H128a42.666667 42.666667 0 0 0-39.253333 26.453333 42.666667 42.666667 0 0 0 8.96 46.506667l170.666666 170.666666a42.666667 42.666667 0 0 0 60.586667 0 42.666667 42.666667 0 0 0 0-60.586666L230.826667 640H725.333333a42.666667 42.666667 0 0 0 0-85.333333z" p-id="6787"/></svg>

Before

Width:  |  Height:  |  Size: 747 B

@@ -1,3 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="none">
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.2559 4.4107C17.5814 4.73614 17.5814 5.26378 17.2559 5.58922L8.08926 14.7559C7.76382 15.0813 7.23618 15.0813 6.91074 14.7559L2.74408 10.5892C2.41864 10.2638 2.41864 9.73614 2.74408 9.4107C3.06951 9.08527 3.59715 9.08527 3.92259 9.4107L7.5 12.9881L16.0774 4.4107C16.4028 4.08527 16.9305 4.08527 17.2559 4.4107Z" fill="currentColor"/>
</svg>

Before

Width:  |  Height:  |  Size: 468 B

@@ -1,3 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="#5A646E">
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.01992 3.73151C4.25737 2.5714 5.90463 1.94979 7.6 2.00318C9.29537 1.94979 10.9426 2.5714 12.1801 3.73151C13.4175 4.89161 14.144 6.49539 14.2 8.19068C14.144 9.88596 13.4175 11.4897 12.1801 12.6498C10.9426 13.81 9.29537 14.4316 7.6 14.3782C5.90463 14.4316 4.25737 13.81 3.01992 12.6498C1.78247 11.4897 1.05599 9.88596 1 8.19068C1.05599 6.49539 1.78247 4.89161 3.01992 3.73151ZM3.75124 11.9183C4.79484 12.8846 6.17867 13.3983 7.6 13.3469C9.02133 13.3983 10.4052 12.8846 11.4488 11.9183C12.4924 10.952 13.1108 9.61175 13.1687 8.19068C13.1108 6.7696 12.4924 5.42931 11.4488 4.46302C10.4052 3.49672 9.02133 2.98307 7.6 3.03443C6.17867 2.98307 4.79484 3.49672 3.75124 4.46302C2.70764 5.42931 2.08922 6.7696 2.03125 8.19068C2.08922 9.61175 2.70764 10.952 3.75124 11.9183ZM11.725 7.67918H3.475V8.71043H11.725V7.67918Z" />
</svg>

Before

Width:  |  Height:  |  Size: 971 B

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16"><g clip-path="url(#clip0_2150_21097)"><path d="M5.40888 2.66673C4.76421 2.65853 4.13701 2.87628 3.63611 3.2822C3.13522 3.68811 2.79223 4.25657 2.66666 4.88895H0.946655V5.77784H2.66666C2.79437 6.41246 3.14042 6.98228 3.64464 7.38825C4.14886 7.79423 4.77939 8.01071 5.42665 8.00006H7.55554V2.66673H5.40888ZM6.7111 7.11117H5.40888C4.92044 7.12451 4.44624 6.94581 4.08809 6.61342C3.72995 6.28103 3.51641 5.82147 3.49332 5.33339C3.513 4.84412 3.7255 4.38251 4.08442 4.04941C4.44334 3.7163 4.91949 3.53878 5.40888 3.55562H6.7111V7.11117Z"/><path d="M15.0755 10.2222H13.3955C13.2662 9.58841 12.9198 9.01959 12.4159 8.6139C11.912 8.20822 11.2824 7.9911 10.6355 8.00002H8.44444V8.88891H6.22222C6.10434 8.88891 5.9913 8.93573 5.90795 9.01908C5.8246 9.10243 5.77777 9.21548 5.77777 9.33335C5.77777 9.45123 5.8246 9.56427 5.90795 9.64762C5.9913 9.73097 6.10434 9.7778 6.22222 9.7778H8.44444V11.5556H6.22222C6.10434 11.5556 5.9913 11.6024 5.90795 11.6858C5.8246 11.7691 5.77777 11.8821 5.77777 12C5.77777 12.1179 5.8246 12.2309 5.90795 12.3143C5.9913 12.3976 6.10434 12.4445 6.22222 12.4445H8.44444V13.3334H10.64C11.288 13.345 11.9196 13.1291 12.4247 12.723C12.9299 12.3169 13.2766 11.7465 13.4044 11.1111H15.0755V10.2222ZM10.6311 12.4445H9.33333V8.88891H10.64C11.1294 8.87207 11.6055 9.0496 11.9645 9.3827C12.3234 9.7158 12.5359 10.1774 12.5555 10.6667C12.5359 11.156 12.3234 11.6176 11.9645 11.9507C11.6055 12.2838 11.1294 12.4613 10.64 12.4445H10.6311Z"/></g><defs><clipPath id="clip0_2150_21097"><rect width="16" height="16" fill="#fff"/></clipPath></defs></svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" class="icon" p-id="2838" t="1681800516246" version="1.1" viewBox="0 0 1024 1024"><path d="M224 938.713333a53.58 53.58 0 0 1-53.333333-53.433333V138.72a53.333333 53.333333 0 0 1 80.886666-45.666667l618.666667 373.28a53.333333 53.333333 0 0 1 0 91.333334l-618.666667 373.28a53.16 53.16 0 0 1-27.553333 7.766666z m0.046667-810.666666a10.98 10.98 0 0 0-5.333334 1.42 10.466667 10.466667 0 0 0-5.38 9.253333v746.56a10.666667 10.666667 0 0 0 16.18 9.133333l618.666667-373.28a10.666667 10.666667 0 0 0 0-18.266666l-618.666667-373.28a10.386667 10.386667 0 0 0-5.446666-1.586667z" p-id="2839"/></svg>

Before

Width:  |  Height:  |  Size: 697 B

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 18 17"><path fill-rule="evenodd" d="M6.49996 0.166626C6.05793 0.166626 5.63401 0.342221 5.32145 0.654781C5.00889 0.967342 4.83329 1.39127 4.83329 1.83329V3.49996H6.49996V1.83329H15.6666V11H14V12.6666H15.6666C16.1087 12.6666 16.5326 12.491 16.8451 12.1785C17.1577 11.8659 17.3333 11.442 17.3333 11V1.83329C17.3333 1.39127 17.1577 0.967342 16.8451 0.654781C16.5326 0.342221 16.1087 0.166626 15.6666 0.166626H6.49996ZM2.33329 4.33329C1.89127 4.33329 1.46734 4.50889 1.15478 4.82145C0.842221 5.13401 0.666626 5.55793 0.666626 5.99996V15.1666C0.666626 15.6087 0.842221 16.0326 1.15478 16.3451C1.46734 16.6577 1.89127 16.8333 2.33329 16.8333H11.5C11.942 16.8333 12.3659 16.6577 12.6785 16.3451C12.991 16.0326 13.1666 15.6087 13.1666 15.1666V5.99996C13.1666 5.55793 12.991 5.13401 12.6785 4.82145C12.3659 4.50889 11.942 4.33329 11.5 4.33329H2.33329ZM2.33329 5.99996H11.5V15.1666H2.33329V5.99996Z" clip-rule="evenodd"/></svg>

Before

Width:  |  Height:  |  Size: 982 B

@@ -1,3 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 21" fill="none">
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.3531 1.96753H10.6469C11.0507 1.96751 11.4027 1.9675 11.6935 1.99126C12.0015 2.01642 12.3134 2.07236 12.615 2.22602C13.0612 2.45339 13.424 2.8162 13.6514 3.26245C13.805 3.56403 13.861 3.87586 13.8861 4.1839C13.9062 4.42898 13.9093 4.71763 13.9098 5.04407H16.9222C17.3824 5.04407 17.7555 5.41717 17.7555 5.87741C17.7555 6.33764 17.3824 6.71074 16.9222 6.71074H16.2173V14.5257C16.2173 15.1429 16.2173 15.6562 16.1831 16.0751C16.1474 16.5114 16.0705 16.9182 15.875 17.302C15.5738 17.893 15.0934 18.3735 14.5024 18.6746C14.1186 18.8702 13.7118 18.9471 13.2755 18.9827C12.8566 19.0169 12.3433 19.0169 11.7261 19.0169H8.27386C7.65667 19.0169 7.14343 19.0169 6.72454 18.9827C6.28824 18.9471 5.88144 18.8702 5.49759 18.6746C4.90662 18.3735 4.42615 17.893 4.12504 17.302C3.92946 16.9182 3.85257 16.5114 3.81692 16.0751C3.78269 15.6562 3.7827 15.1429 3.78272 14.5257L3.78272 6.71074H3.07778C2.61754 6.71074 2.24445 6.33764 2.24445 5.87741C2.24445 5.41717 2.61754 5.04407 3.07778 5.04407H6.09021C6.09069 4.71763 6.09382 4.42898 6.11385 4.1839C6.13902 3.87586 6.19495 3.56403 6.34861 3.26245C6.57598 2.8162 6.93879 2.45339 7.38504 2.22602C7.68662 2.07236 7.99845 2.01642 8.30649 1.99126C8.59725 1.9675 8.94934 1.96751 9.3531 1.96753ZM5.44938 6.71074V14.4917C5.44938 15.1516 5.45003 15.5964 5.47805 15.9394C5.50528 16.2726 5.55413 16.4356 5.61005 16.5454C5.75137 16.8227 5.97688 17.0482 6.25424 17.1896C6.36397 17.2455 6.52703 17.2943 6.86026 17.3216C7.20322 17.3496 7.64801 17.3502 8.3079 17.3502H11.6921C12.352 17.3502 12.7968 17.3496 13.1397 17.3216C13.473 17.2943 13.636 17.2455 13.7458 17.1896C14.0231 17.0482 14.2486 16.8227 14.3899 16.5454C14.4459 16.4356 14.4947 16.2726 14.5219 15.9394C14.55 15.5964 14.5506 15.1516 14.5506 14.4917V6.71074H5.44938ZM12.2431 5.04407H7.75693C7.75753 4.72102 7.76049 4.49694 7.77498 4.31962C7.79173 4.11465 7.81963 4.04657 7.83362 4.0191C7.90121 3.88646 8.00905 3.77862 8.14169 3.71103C8.16916 3.69703 8.23724 3.66913 8.44221 3.65239C8.65692 3.63485 8.94018 3.6342 9.38469 3.6342H10.6153C11.0598 3.6342 11.3431 3.63485 11.5578 3.65239C11.7628 3.66913 11.8308 3.69703 11.8583 3.71103C11.9909 3.77862 12.0988 3.88646 12.1664 4.0191C12.1804 4.04657 12.2083 4.11465 12.225 4.31962C12.2395 4.49694 12.2425 4.72102 12.2431 5.04407ZM8.46173 9.27432C8.92196 9.27432 9.29506 9.64741 9.29506 10.1076V13.9533C9.29506 14.4136 8.92196 14.7867 8.46173 14.7867C8.00149 14.7867 7.62839 14.4136 7.62839 13.9533V10.1076C7.62839 9.64741 8.00149 9.27432 8.46173 9.27432ZM11.5383 9.27432C11.9985 9.27432 12.3716 9.64741 12.3716 10.1076V13.9533C12.3716 14.4136 11.9985 14.7867 11.5383 14.7867C11.078 14.7867 10.7049 14.4136 10.7049 13.9533V10.1076C10.7049 9.64741 11.078 9.27432 11.5383 9.27432Z" fill="currentColor"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.8 KiB

@@ -1,3 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="#24282C" >
<path d="M1.33331 5.83329C1.33331 5.65648 1.40355 5.48691 1.52858 5.36189C1.6536 5.23686 1.82317 5.16663 1.99998 5.16663H14C14.1768 5.16663 14.3464 5.23686 14.4714 5.36189C14.5964 5.48691 14.6666 5.65648 14.6666 5.83329C14.6666 6.0101 14.5964 6.17967 14.4714 6.3047C14.3464 6.42972 14.1768 6.49996 14 6.49996H1.99998C1.82317 6.49996 1.6536 6.42972 1.52858 6.3047C1.40355 6.17967 1.33331 6.0101 1.33331 5.83329ZM1.33331 8.49996C1.33331 8.32315 1.40355 8.15358 1.52858 8.02855C1.6536 7.90353 1.82317 7.83329 1.99998 7.83329H14C14.1768 7.83329 14.3464 7.90353 14.4714 8.02855C14.5964 8.15358 14.6666 8.32315 14.6666 8.49996C14.6666 8.67677 14.5964 8.84634 14.4714 8.97136C14.3464 9.09639 14.1768 9.16663 14 9.16663H1.99998C1.82317 9.16663 1.6536 9.09639 1.52858 8.97136C1.40355 8.84634 1.33331 8.67677 1.33331 8.49996ZM1.99998 10.5C1.82317 10.5 1.6536 10.5702 1.52858 10.6952C1.40355 10.8202 1.33331 10.9898 1.33331 11.1666C1.33331 11.3434 1.40355 11.513 1.52858 11.638C1.6536 11.7631 1.82317 11.8333 1.99998 11.8333H9.99998C10.1768 11.8333 10.3464 11.7631 10.4714 11.638C10.5964 11.513 10.6666 11.3434 10.6666 11.1666C10.6666 10.9898 10.5964 10.8202 10.4714 10.6952C10.3464 10.5702 10.1768 10.5 9.99998 10.5H1.99998Z"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M3.99996 13.3334C3.63329 13.3334 3.31929 13.2027 3.05796 12.9414C2.79663 12.6801 2.66618 12.3663 2.66663 12.0001V10.0001H3.99996V12.0001H12V10.0001H13.3333V12.0001C13.3333 12.3667 13.2026 12.6807 12.9413 12.9421C12.68 13.2034 12.3662 13.3339 12 13.3334H3.99996ZM7.99996 10.6667L4.66663 7.33342L5.59996 6.36675L7.33329 8.10008V2.66675H8.66663V8.10008L10.4 6.36675L11.3333 7.33342L7.99996 10.6667Z"/></svg>

Before

Width:  |  Height:  |  Size: 473 B

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"><path d="M7 17H14V15H7V17ZM7 13H17V11H7V13ZM7 9H17V7H7V9ZM5 21C4.45 21 3.97917 20.8042 3.5875 20.4125C3.19583 20.0208 3 19.55 3 19V5C3 4.45 3.19583 3.97917 3.5875 3.5875C3.97917 3.19583 4.45 3 5 3H19C19.55 3 20.0208 3.19583 20.4125 3.5875C20.8042 3.97917 21 4.45 21 5V19C21 19.55 20.8042 20.0208 20.4125 20.4125C20.0208 20.8042 19.55 21 19 21H5ZM5 19H19V5H5V19Z"/></svg>

Before

Width:  |  Height:  |  Size: 442 B

@@ -1,3 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 17" fill="none">
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.00005 2.9598C4.99385 2.9598 2.55684 5.3968 2.55684 8.403C2.55684 11.4092 4.99385 13.8462 8.00005 13.8462C11.0062 13.8462 13.4432 11.4092 13.4432 8.403C13.4432 5.3968 11.0062 2.9598 8.00005 2.9598ZM1.22351 8.403C1.22351 4.66042 4.25747 1.62646 8.00005 1.62646C11.7426 1.62646 14.7766 4.66042 14.7766 8.403C14.7766 12.1456 11.7426 15.1795 8.00005 15.1795C4.25747 15.1795 1.22351 12.1456 1.22351 8.403ZM8.14834 6.02879C7.87687 5.98223 7.59769 6.03324 7.36023 6.1728C7.12277 6.31235 6.94236 6.53144 6.85096 6.79127C6.72878 7.13859 6.34817 7.32111 6.00085 7.19893C5.65352 7.07675 5.471 6.69614 5.59318 6.34881C5.78908 5.79195 6.17572 5.32239 6.68465 5.02329C7.19358 4.72419 7.79194 4.61485 8.37375 4.71465C8.95556 4.81444 9.48328 5.11693 9.86345 5.56853C10.2435 6.02004 10.4516 6.59146 10.4508 7.18164C10.4505 8.14619 9.73585 8.77818 9.23745 9.11045C8.96791 9.29014 8.70311 9.42206 8.50833 9.50863C8.40999 9.55234 8.32711 9.58554 8.26726 9.60834C8.23728 9.61976 8.21291 9.62863 8.19509 9.63497L8.17333 9.64259L8.16632 9.64499L8.16381 9.64583L8.16281 9.64617C8.16261 9.64623 8.16199 9.64644 7.95117 9.01399L8.16199 9.64644C7.81269 9.76287 7.43514 9.5741 7.31871 9.22481C7.20232 8.87563 7.39093 8.49822 7.74 8.38165L7.74841 8.37868C7.75744 8.37547 7.77246 8.37003 7.7926 8.36236C7.83298 8.34697 7.89331 8.32289 7.96681 8.29022C8.1157 8.22404 8.30915 8.12685 8.49785 8.00105C8.91582 7.7224 9.11746 7.4381 9.11746 7.18103L9.11746 7.18003C9.11787 6.9046 9.02079 6.63791 8.84341 6.4272C8.66603 6.21649 8.41981 6.07535 8.14834 6.02879ZM7.33338 11.4579C7.33338 11.0897 7.63186 10.7913 8.00005 10.7913H8.00616C8.37435 10.7913 8.67282 11.0897 8.67282 11.4579C8.67282 11.8261 8.37435 12.1246 8.00616 12.1246H8.00005C7.63186 12.1246 7.33338 11.8261 7.33338 11.4579Z" fill="currentColor"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.9 KiB

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12"><path fill="#7B838B" d="M2.66667 9.33333H7.33333V8H2.66667V9.33333ZM2.66667 6.66667H9.33333V5.33333H2.66667V6.66667ZM2.66667 4H9.33333V2.66667H2.66667V4ZM1.33333 12C0.966667 12 0.652778 11.8694 0.391667 11.6083C0.130556 11.3472 0 11.0333 0 10.6667V1.33333C0 0.966667 0.130556 0.652778 0.391667 0.391667C0.652778 0.130556 0.966667 0 1.33333 0H10.6667C11.0333 0 11.3472 0.130556 11.6083 0.391667C11.8694 0.652778 12 0.966667 12 1.33333V10.6667C12 11.0333 11.8694 11.3472 11.6083 11.6083C11.3472 11.8694 11.0333 12 10.6667 12H1.33333ZM1.33333 10.6667H10.6667V1.33333H1.33333V10.6667Z"/></svg>

Before

Width:  |  Height:  |  Size: 684 B

@@ -1,3 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15 14" fill="none">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.5004 2.0529C4.76824 2.0529 2.55339 4.26775 2.55339 6.99991C2.55339 9.73207 4.76824 11.9469 7.5004 11.9469C10.2326 11.9469 12.4474 9.73207 12.4474 6.99991C12.4474 4.26775 10.2326 2.0529 7.5004 2.0529ZM1.38672 6.99991C1.38672 3.62342 4.12391 0.88623 7.5004 0.88623C10.8769 0.88623 13.6141 3.62342 13.6141 6.99991C13.6141 10.3764 10.8769 13.1136 7.5004 13.1136C4.12391 13.1136 1.38672 10.3764 1.38672 6.99991ZM6.91706 4.78777C6.91706 4.4656 7.17823 4.20444 7.5004 4.20444H7.50593C7.82809 4.20444 8.08926 4.4656 8.08926 4.78777C8.08926 5.10994 7.82809 5.3711 7.50593 5.3711H7.5004C7.17823 5.3711 6.91706 5.10994 6.91706 4.78777ZM7.5004 6.41657C7.82256 6.41657 8.08373 6.67774 8.08373 6.99991V9.21205C8.08373 9.53421 7.82256 9.79538 7.5004 9.79538C7.17823 9.79538 6.91706 9.53421 6.91706 9.21205V6.99991C6.91706 6.67774 7.17823 6.41657 7.5004 6.41657Z" fill="currentColor"/>
</svg>

Before

Width:  |  Height:  |  Size: 1004 B

@@ -1,4 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
<path d="M5.64331 7.52871C6.39864 6.77338 7.71597 6.77338 8.47131 7.52871L8.94264 8.00004L9.88531 7.05738L9.41397 6.58604C8.78531 5.95671 7.94797 5.60938 7.05731 5.60938C6.16664 5.60938 5.32931 5.95671 4.70064 6.58604L3.28597 8.00004C2.66217 8.62585 2.31189 9.47343 2.31189 10.357C2.31189 11.2407 2.66217 12.0882 3.28597 12.714C3.59522 13.0237 3.96262 13.2693 4.36705 13.4365C4.77149 13.6038 5.20498 13.6895 5.64264 13.6887C6.08041 13.6896 6.51405 13.604 6.91861 13.4367C7.32317 13.2694 7.69067 13.0238 7.99997 12.714L8.47131 12.2427L7.52864 11.3L7.05731 11.7714C6.68162 12.1454 6.17309 12.3554 5.64297 12.3554C5.11286 12.3554 4.60433 12.1454 4.22864 11.7714C3.85431 11.3959 3.64411 10.8873 3.64411 10.357C3.64411 9.82682 3.85431 9.31822 4.22864 8.94271L5.64331 7.52871Z" fill="#7B838B"/>
<path d="M8.00002 3.28604L7.52869 3.75737L8.47135 4.70004L8.94268 4.2287C9.31837 3.8547 9.8269 3.64472 10.357 3.64472C10.8871 3.64472 11.3957 3.8547 11.7714 4.2287C12.1457 4.60422 12.3559 5.11281 12.3559 5.64304C12.3559 6.17326 12.1457 6.68186 11.7714 7.05737L10.3567 8.47137C9.60135 9.2267 8.28402 9.2267 7.52869 8.47137L7.05735 8.00004L6.11469 8.9427L6.58602 9.41404C7.21468 10.0434 8.05202 10.3907 8.94268 10.3907C9.83335 10.3907 10.6707 10.0434 11.2994 9.41404L12.714 8.00004C13.3378 7.37423 13.6881 6.52665 13.6881 5.64304C13.6881 4.75942 13.3378 3.91185 12.714 3.28604C12.0884 2.66191 11.2407 2.3114 10.357 2.3114C9.4733 2.3114 8.62566 2.66191 8.00002 3.28604Z" fill="#7B838B"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 16 16"><path d="M13.5733 3.26685H2.4267C2.0087 3.26685 1.6667 3.60884 1.6667 4.02684V13.9068C1.6667 14.3248 2.0087 14.6668 2.4267 14.6668H13.5733C13.9913 14.6668 14.3333 14.3248 14.3333 13.9068V4.02684C14.3333 3.60884 13.9976 3.26685 13.5733 3.26685ZM13.32 13.6535H2.68003V4.28017H13.32V13.6535Z"/><path d="M11.3123 11.1199H5.20068C4.92835 11.1199 4.71302 10.8983 4.71302 10.6323V10.6006C4.71302 10.3283 4.93468 10.113 5.20068 10.113H11.3123C11.5846 10.113 11.8 10.3346 11.8 10.6006V10.6323C11.8 10.8983 11.5846 11.1199 11.3123 11.1199ZM11.2933 8.83996H8C7.72133 8.83996 7.49333 8.61196 7.49333 8.3333C7.49333 8.05463 7.72133 7.82663 8 7.82663H11.2933C11.572 7.82663 11.8 8.05463 11.8 8.3333C11.8 8.61196 11.5783 8.83996 11.2933 8.83996ZM10.9133 5.29331C10.6346 5.29331 10.4066 5.06532 10.4066 4.78665V2.50666C10.4066 2.228 10.6346 2 10.9133 2C11.192 2 11.42 2.228 11.42 2.50666V4.78665C11.42 5.06532 11.1983 5.29331 10.9133 5.29331ZM5.08668 5.29331C4.80802 5.29331 4.58002 5.06532 4.58002 4.78665V2.50666C4.58002 2.228 4.80802 2 5.08668 2C5.36535 2 5.59334 2.228 5.59334 2.50666V4.78665C5.59334 5.06532 5.37168 5.29331 5.08668 5.29331Z"/></svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

@@ -1,3 +0,0 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M10.021 1.021H16.021V3.021H10.021V1.021ZM20.04 7.41L21.474 5.976L20.06 4.562L18.627 5.995C17.0569 4.73681 15.1101 4.04175 13.0982 4.02109C11.0863 4.00042 9.12562 4.65533 7.53001 5.881L8.95001 7.321C10.1364 6.47836 11.5548 6.02418 13.01 6.021L13.02 6.022V13.002L17.973 17.96C16.9952 18.9424 15.7478 19.6124 14.3888 19.8852C13.0299 20.158 11.6205 20.0212 10.3393 19.4923C9.05817 18.9634 7.96283 18.066 7.19211 16.914C6.4214 15.7619 6.00999 14.4071 6.01001 13.021H9.01001L5.01001 9.021L1.01001 13.021H4.01001C4.00865 14.4592 4.35195 15.8767 5.01117 17.1549C5.67038 18.4331 6.62631 19.5347 7.79887 20.3674C8.97143 21.2001 10.3265 21.7397 11.7505 21.9409C13.1745 22.1422 14.626 21.9993 15.9834 21.5242C17.3408 21.049 18.5646 20.2555 19.5522 19.2101C20.5398 18.1647 21.2626 16.8978 21.6598 15.5156C22.0571 14.1334 22.1173 12.6761 21.8355 11.2658C21.5537 9.85556 20.938 8.53336 20.04 7.41Z" fill="#24282C"/>
</svg>

Before

Width:  |  Height:  |  Size: 1013 B

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="4" height="16" viewBox="0 0 4 16"><path d="M2 16C1.45 16 0.979002 15.804 0.587002 15.412C0.195002 15.02 -0.000664969 14.5493 1.69779e-06 14C1.69779e-06 13.45 0.196002 12.979 0.588002 12.587C0.980002 12.195 1.45067 11.9993 2 12C2.55 12 3.021 12.196 3.413 12.588C3.805 12.98 4.00067 13.4507 4 14C4 14.55 3.804 15.021 3.412 15.413C3.02 15.805 2.54934 16.0007 2 16ZM2 10C1.45 10 0.979002 9.804 0.587002 9.412C0.195002 9.02 -0.000664969 8.54934 1.69779e-06 8C1.69779e-06 7.45 0.196002 6.979 0.588002 6.587C0.980002 6.195 1.45067 5.99934 2 6C2.55 6 3.021 6.196 3.413 6.588C3.805 6.98 4.00067 7.45067 4 8C4 8.55 3.804 9.021 3.412 9.413C3.02 9.805 2.54934 10.0007 2 10ZM2 4C1.45 4 0.979002 3.804 0.587002 3.412C0.195002 3.02 -0.000664969 2.54934 1.69779e-06 2C1.69779e-06 1.45 0.196002 0.979002 0.588002 0.587002C0.980002 0.195002 1.45067 -0.000664969 2 1.69779e-06C2.55 1.69779e-06 3.021 0.196001 3.413 0.588001C3.805 0.980001 4.00067 1.45067 4 2C4 2.55 3.804 3.021 3.412 3.413C3.02 3.805 2.54934 4.00067 2 4Z"/></svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 48 49"><circle cx="24" cy="24.5" r="23.7" stroke="#9CA2A8" stroke-dasharray="2.4 2.4" stroke-width=".6"/><path fill="#7B838B" d="M14.2125 34.0033L14.1844 34.0027C14.022 33.9974 13.1781 33.9432 12.6158 33.4162C12.0393 32.8755 11.9705 32.0981 11.9626 31.9476C11.9618 31.9335 11.9614 31.9193 11.9615 31.9052V27.6712C11.9531 27.4968 11.9418 26.9076 12.1392 26.2533C12.3284 25.6259 12.5621 25.214 12.629 25.1028L14.7546 21.3424C14.7652 21.3235 14.7764 21.3053 14.7885 21.2875C14.8548 21.1892 15.211 20.6831 15.6996 20.3791C16.2136 20.059 16.8358 20.0343 17.0143 20.0343H30.441C30.4583 20.0343 30.4754 20.0348 30.4931 20.0359C30.6265 20.0445 31.3196 20.1029 31.856 20.4098C32.3681 20.7031 32.7803 21.2157 32.8577 21.3153C32.8734 21.3357 32.8882 21.3568 32.902 21.3785L35.4265 25.3789C35.4373 25.3965 35.4482 25.4149 35.458 25.4337C35.5064 25.5266 35.7559 26.0175 35.8823 26.4949C36.0071 26.9673 36.0372 27.4893 36.0418 27.589L36.0425 27.623V31.8576C36.0453 32.0815 36.0041 32.8498 35.3667 33.4208C34.7631 33.9611 33.9505 34.003 33.7158 34.003H14.2125V34.0033ZM13.9962 25.9609C13.9498 26.0435 13.8053 26.3167 13.6838 26.7193C13.5556 27.1449 13.5708 27.5427 13.5728 27.5867C13.574 27.6058 13.5747 27.6249 13.5749 27.644V31.8773L13.5765 31.889C13.5865 31.9651 13.633 32.1495 13.713 32.2327L13.7238 32.2442L13.7365 32.2535C13.8486 32.3361 14.1264 32.3835 14.2234 32.3894L33.7171 32.3897C33.8788 32.3878 34.1615 32.3339 34.2896 32.2191C34.4043 32.1163 34.4299 31.94 34.4299 31.9118L34.4284 31.8628V27.6478C34.4197 27.4834 34.3878 27.1556 34.3218 26.9074C34.2471 26.6237 34.08 26.2839 34.0472 26.2189L34.0382 26.203L31.5607 22.2769L31.553 22.2676C31.4591 22.1545 31.234 21.9129 31.0542 21.8098C30.8985 21.7207 30.5814 21.6636 30.418 21.6484L30.4011 21.6476H17.0171C16.8919 21.6487 16.6592 21.6818 16.5516 21.7491C16.4002 21.8434 16.2209 22.0591 16.1472 22.1597L16.1408 22.1685L14.0285 25.9053L14.0057 25.9437L14.006 25.9427C14.0054 25.9446 13.9962 25.9609 13.9962 25.9609ZM23.9249 18.8512C23.711 18.851 23.5059 18.7659 23.3547 18.6147C23.2034 18.4634 23.1183 18.2584 23.118 18.0445V13.4035C23.1183 13.1897 23.2033 12.9846 23.3545 12.8334C23.5057 12.6822 23.7107 12.5971 23.9246 12.5968C24.1385 12.597 24.3436 12.6821 24.4949 12.8333C24.6462 12.9845 24.7313 13.1896 24.7316 13.4035V18.0444C24.7314 18.2583 24.6463 18.4634 24.4951 18.6146C24.3439 18.7658 24.1388 18.8509 23.9249 18.8511V18.8512ZM29.3339 18.8206C29.12 18.8203 28.9149 18.7352 28.7637 18.5839C28.6125 18.4326 28.5274 18.2276 28.5271 18.0137C28.5273 17.8287 28.5909 17.6493 28.7074 17.5055L30.5516 15.231C30.6272 15.1375 30.7228 15.0621 30.8313 15.0104C30.9399 14.9587 31.0587 14.932 31.179 14.9323C31.3654 14.9323 31.5409 14.9946 31.6862 15.1124C31.7688 15.1789 31.8373 15.2611 31.8879 15.3543C31.9384 15.4475 31.9699 15.5498 31.9806 15.6553C31.992 15.7607 31.9823 15.8673 31.9522 15.9689C31.9221 16.0705 31.8721 16.1651 31.8051 16.2472L29.9609 18.5217C29.8857 18.6152 29.7903 18.6906 29.682 18.7423C29.5737 18.794 29.4551 18.8207 29.3351 18.8204H29.3339V18.8206ZM18.6067 18.7589C18.4855 18.7592 18.3658 18.732 18.2566 18.6794C18.1474 18.6268 18.0516 18.5501 17.9764 18.4551L16.1635 16.1808C16.0303 16.0134 15.969 15.8 15.993 15.5874C16.017 15.3749 16.1243 15.1805 16.2914 15.047C16.4338 14.9326 16.6111 14.8704 16.7937 14.871C17.0411 14.871 17.2711 14.9818 17.4251 15.1749L19.2382 17.4492C19.3714 17.6165 19.4328 17.8299 19.4088 18.0424C19.3849 18.255 19.2776 18.4494 19.1106 18.5829C18.9677 18.6965 18.7905 18.7586 18.608 18.7589H18.6067Z"/><path fill="#7B838B" d="M23.9558 30.6841C22.1584 30.6841 20.5968 29.4791 20.1585 27.7541L20.1232 27.6151L12.9586 27.6108C12.7446 27.6104 12.5396 27.5251 12.3884 27.3738C12.2372 27.2225 12.1521 27.0174 12.1519 26.8035C12.1522 26.5896 12.2373 26.3847 12.3885 26.2335C12.5397 26.0824 12.7447 25.9973 12.9586 25.9971L20.8479 26.0021C21.0617 26.0027 21.2666 26.0879 21.4177 26.2391C21.5688 26.3904 21.6539 26.5953 21.6542 26.8091C21.6542 28.0773 22.6652 29.0705 23.9558 29.0705C25.2418 29.0705 26.2493 28.0773 26.2493 26.8092C26.2497 26.5953 26.3349 26.3904 26.486 26.2391C26.6372 26.0879 26.8421 26.0027 27.056 26.0021L34.8723 25.9972C35.3173 25.9972 35.679 26.3586 35.6793 26.8033C35.6796 27.248 35.318 27.6103 34.8732 27.611L27.7811 27.6153L27.7457 27.7543C27.308 29.4792 25.7497 30.6841 23.9558 30.6841Z"/></svg>

Before

Width:  |  Height:  |  Size: 4.3 KiB

@@ -1,4 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 21" fill="none">
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.83547 3.83252C7.29571 3.83252 7.6688 4.20562 7.6688 4.66585L7.6688 16.3226C7.6688 16.7828 7.29571 17.1559 6.83547 17.1559C6.37523 17.1559 6.00214 16.7828 6.00214 16.3226L6.00214 4.66585C6.00214 4.20562 6.37523 3.83252 6.83547 3.83252Z" fill="currentColor"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M13.1645 3.83252C13.6247 3.83252 13.9978 4.20562 13.9978 4.66585V16.3226C13.9978 16.7828 13.6247 17.1559 13.1645 17.1559C12.7042 17.1559 12.3312 16.7828 12.3312 16.3226L12.3312 4.66585C12.3312 4.20562 12.7042 3.83252 13.1645 3.83252Z" fill="currentColor"/>
</svg>

Before

Width:  |  Height:  |  Size: 700 B

@@ -1,3 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 21 21" fill="none">
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.4999 3.83337C10.9602 3.83337 11.3333 4.20647 11.3333 4.66671V9.66671H16.3333C16.7935 9.66671 17.1666 10.0398 17.1666 10.5C17.1666 10.9603 16.7935 11.3334 16.3333 11.3334H11.3333V16.3334C11.3333 16.7936 10.9602 17.1667 10.4999 17.1667C10.0397 17.1667 9.66658 16.7936 9.66658 16.3334V11.3334H4.66659C4.20635 11.3334 3.83325 10.9603 3.83325 10.5C3.83325 10.0398 4.20635 9.66671 4.66659 9.66671H9.66658V4.66671C9.66658 4.20647 10.0397 3.83337 10.4999 3.83337Z" fill="currentColor"/>
</svg>

Before

Width:  |  Height:  |  Size: 613 B

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"><path d="M19 15V19H5V15H19ZM20 13H4C3.45 13 3 13.45 3 14V20C3 20.55 3.45 21 4 21H20C20.55 21 21 20.55 21 20V14C21 13.45 20.55 13 20 13ZM7 18.5C6.18 18.5 5.5 17.83 5.5 17C5.5 16.17 6.18 15.5 7 15.5C7.82 15.5 8.5 16.17 8.5 17C8.5 17.83 7.83 18.5 7 18.5ZM19 5V9H5V5H19ZM20 3H4C3.45 3 3 3.45 3 4V10C3 10.55 3.45 11 4 11H20C20.55 11 21 10.55 21 10V4C21 3.45 20.55 3 20 3ZM7 8.5C6.18 8.5 5.5 7.83 5.5 7C5.5 6.17 6.18 5.5 7 5.5C7.82 5.5 8.5 6.18 8.5 7C8.5 7.82 7.83 8.5 7 8.5Z"/></svg>

Before

Width:  |  Height:  |  Size: 550 B

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64" class="icon" p-id="1032" t="1685516041273" version="1.1" viewBox="0 0 1024 1024"><path d="M512 201.31081482c-203.88977778 0-400.01232592 129.13019259-466.03377778 310.68918518 66.02145185 181.55899259 262.144 310.68918518 466.03377778 310.68918518 202.91887408 0 400.98322963-129.13019259 467.00468148-310.68918518-66.99235555-181.55899259-264.08580741-310.68918518-467.00468148-310.68918518z m0 504.86992593c-106.79940741 0-194.18074075-87.38133333-194.18074075-194.18074075s87.38133333-194.18074075 194.18074075-194.18074075 194.18074075 87.38133333 194.18074075 194.18074075-87.38133333 194.18074075-194.18074075 194.18074075z m116.50844445-194.18074075c0 64.07964445-52.4288 116.50844445-116.50844445 116.50844445s-116.50844445-52.4288-116.50844445-116.50844445 52.4288-116.50844445 116.50844445-116.50844445 116.50844445 52.4288 116.50844445 116.50844445z" p-id="1033"/></svg>

Before

Width:  |  Height:  |  Size: 987 B

@@ -1,3 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18" fill="none">
<path d="M7.23995 16.4677C5.79151 16.0607 4.61026 15.2644 3.6962 14.0788C2.78213 12.8931 2.3251 11.5282 2.3251 9.98381C2.3251 9.18384 2.4587 8.42234 2.72588 7.69928C2.99307 6.97623 3.37276 6.31324 3.86495 5.71033C4.01963 5.54191 4.20948 5.45406 4.43448 5.44676C4.65948 5.43946 4.86338 5.52732 5.0462 5.71033C5.20088 5.8647 5.28189 6.05417 5.2892 6.27872C5.29651 6.50327 5.22254 6.71379 5.06729 6.91027C4.72979 7.34534 4.46963 7.82251 4.28682 8.34178C4.10401 8.86105 4.0126 9.4084 4.0126 9.98381C4.0126 11.1206 4.34673 12.1347 5.01498 13.0262C5.68323 13.9177 6.54442 14.5245 7.59854 14.8467C7.78135 14.9029 7.93238 15.0081 8.05163 15.1625C8.17088 15.3169 8.23079 15.4853 8.23135 15.6677C8.23135 15.9484 8.13292 16.1696 7.93604 16.3313C7.73917 16.493 7.50713 16.5384 7.23995 16.4677ZM10.9103 16.4677C10.6431 16.5379 10.411 16.4888 10.2142 16.3203C10.0173 16.1519 9.91885 15.9274 9.91885 15.6467C9.91885 15.4783 9.97876 15.3169 10.0986 15.1625C10.2184 15.0081 10.3694 14.9029 10.5517 14.8467C11.6064 14.5099 12.4678 13.8994 13.1361 13.0152C13.8043 12.1311 14.1382 11.1206 14.1376 9.98381C14.1376 8.58036 13.6454 7.38744 12.661 6.40503C11.6767 5.42262 10.4814 4.93142 9.0751 4.93142H9.01182L9.34932 5.26824C9.50401 5.42262 9.58135 5.6191 9.58135 5.85769C9.58135 6.09627 9.50401 6.29275 9.34932 6.44713C9.19463 6.60151 8.99776 6.6787 8.7587 6.6787C8.51964 6.6787 8.32276 6.60151 8.16807 6.44713L6.3962 4.6788C6.31182 4.59459 6.2522 4.50337 6.21732 4.40512C6.18245 4.30688 6.16473 4.20163 6.16417 4.08935C6.16417 3.97708 6.18188 3.87182 6.21732 3.77358C6.25276 3.67534 6.31238 3.58411 6.3962 3.4999L8.16807 1.73157C8.32276 1.57719 8.51964 1.5 8.7587 1.5C8.99776 1.5 9.19463 1.57719 9.34932 1.73157C9.50401 1.88595 9.58135 2.08243 9.58135 2.32101C9.58135 2.5596 9.50401 2.75608 9.34932 2.91046L9.01182 3.24729H9.0751C10.9595 3.24729 12.5556 3.89989 13.8634 5.20509C15.1712 6.51029 15.8251 8.10319 15.8251 9.98381C15.8251 11.5136 15.3681 12.8749 14.454 14.0678C13.5399 15.2607 12.3587 16.0607 10.9103 16.4677Z" fill="currentColor"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.1 KiB

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M8.66663 2C7.07533 2 5.5492 2.63214 4.42399 3.75736C3.29877 4.88258 2.66663 6.4087 2.66663 8H0.666626L3.25996 10.5933L3.30663 10.6867L5.99996 8H3.99996C3.99996 5.42 6.08663 3.33333 8.66663 3.33333C11.2466 3.33333 13.3333 5.42 13.3333 8C13.3333 10.58 11.2466 12.6667 8.66663 12.6667C7.37996 12.6667 6.21329 12.14 5.37329 11.2933L4.42663 12.24C4.98224 12.7987 5.64295 13.2418 6.37067 13.5439C7.09839 13.846 7.87871 14.001 8.66663 14C10.2579 14 11.784 13.3679 12.9093 12.2426C14.0345 11.1174 14.6666 9.5913 14.6666 8C14.6666 6.4087 14.0345 4.88258 12.9093 3.75736C11.784 2.63214 10.2579 2 8.66663 2ZM7.99996 5.33333V8.66667L10.8533 10.36L11.3333 9.55333L8.99996 8.16667V5.33333H7.99996Z"/></svg>

Before

Width:  |  Height:  |  Size: 761 B

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"><path d="M9.24995 22L8.84995 18.8C8.63328 18.7167 8.42912 18.6167 8.23745 18.5C8.04578 18.3833 7.85828 18.2583 7.67495 18.125L4.69995 19.375L1.94995 14.625L4.52495 12.675C4.50828 12.5583 4.49995 12.4458 4.49995 12.3375V11.6625C4.49995 11.5542 4.50828 11.4417 4.52495 11.325L1.94995 9.375L4.69995 4.625L7.67495 5.875C7.85828 5.74167 8.04995 5.61667 8.24995 5.5C8.44995 5.38333 8.64995 5.28333 8.84995 5.2L9.24995 2H14.75L15.15 5.2C15.3666 5.28333 15.5708 5.38333 15.7625 5.5C15.9541 5.61667 16.1416 5.74167 16.325 5.875L19.3 4.625L22.05 9.375L19.475 11.325C19.4916 11.4417 19.5 11.5542 19.5 11.6625V12.3375C19.5 12.4458 19.4833 12.5583 19.45 12.675L22.025 14.625L19.275 19.375L16.325 18.125C16.1416 18.2583 15.95 18.3833 15.75 18.5C15.55 18.6167 15.35 18.7167 15.15 18.8L14.75 22H9.24995ZM12.05 15.5C13.0166 15.5 13.8416 15.1583 14.525 14.475C15.2083 13.7917 15.55 12.9667 15.55 12C15.55 11.0333 15.2083 10.2083 14.525 9.525C13.8416 8.84167 13.0166 8.5 12.05 8.5C11.0666 8.5 10.2375 8.84167 9.56245 9.525C8.88745 10.2083 8.54995 11.0333 8.54995 12C8.54995 12.9667 8.88745 13.7917 9.56245 14.475C10.2375 15.1583 11.0666 15.5 12.05 15.5ZM12.05 13.5C11.6333 13.5 11.2791 13.3542 10.9875 13.0625C10.6958 12.7708 10.55 12.4167 10.55 12C10.55 11.5833 10.6958 11.2292 10.9875 10.9375C11.2791 10.6458 11.6333 10.5 12.05 10.5C12.4666 10.5 12.8208 10.6458 13.1125 10.9375C13.4041 11.2292 13.55 11.5833 13.55 12C13.55 12.4167 13.4041 12.7708 13.1125 13.0625C12.8208 13.3542 12.4666 13.5 12.05 13.5ZM11 20H12.975L13.325 17.35C13.8416 17.2167 14.3208 17.0208 14.7625 16.7625C15.2041 16.5042 15.6083 16.1917 15.975 15.825L18.45 16.85L19.425 15.15L17.275 13.525C17.3583 13.2917 17.4166 13.0458 17.45 12.7875C17.4833 12.5292 17.5 12.2667 17.5 12C17.5 11.7333 17.4833 11.4708 17.45 11.2125C17.4166 10.9542 17.3583 10.7083 17.275 10.475L19.425 8.85L18.45 7.15L15.975 8.2C15.6083 7.81667 15.2041 7.49583 14.7625 7.2375C14.3208 6.97917 13.8416 6.78333 13.325 6.65L13 4H11.025L10.675 6.65C10.1583 6.78333 9.67912 6.97917 9.23745 7.2375C8.79578 7.49583 8.39162 7.80833 8.02495 8.175L5.54995 7.15L4.57495 8.85L6.72495 10.45C6.64162 10.7 6.58328 10.95 6.54995 11.2C6.51662 11.45 6.49995 11.7167 6.49995 12C6.49995 12.2667 6.51662 12.525 6.54995 12.775C6.58328 13.025 6.64162 13.275 6.72495 13.525L4.57495 15.15L5.54995 16.85L8.02495 15.8C8.39162 16.1833 8.79578 16.5042 9.23745 16.7625C9.67912 17.0208 10.1583 17.2167 10.675 17.35L11 20Z"/></svg>

Before

Width:  |  Height:  |  Size: 2.4 KiB

@@ -1,3 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.06777 11.1503L10.1306 8.86713C10.7459 8.52137 11.127 8.30572 11.3865 8.12729C11.4716 8.06871 11.5245 8.02651 11.5553 8.00007C11.5245 7.97363 11.4716 7.93142 11.3865 7.87284C11.127 7.69441 10.7459 7.47876 10.1306 7.133L6.06777 4.84987C5.45271 4.50424 5.06999 4.29066 4.78088 4.16089C4.66082 4.10699 4.5887 4.08297 4.55301 4.07263C4.53275 4.07884 4.51508 4.0878 4.50028 4.09819C4.49263 4.1353 4.48208 4.19815 4.47291 4.29546C4.44428 4.59917 4.44287 5.02396 4.44287 5.71695L4.44287 10.2832C4.44287 10.9762 4.44428 11.401 4.47291 11.7047C4.48208 11.802 4.49263 11.8648 4.50028 11.9019C4.51508 11.9123 4.53275 11.9213 4.55301 11.9275C4.5887 11.9172 4.66082 11.8931 4.78088 11.8392C5.06999 11.7095 5.45272 11.4959 6.06777 11.1503ZM12.7604 7.40435C12.5615 6.96961 11.969 6.63661 10.7838 5.97062L6.72096 3.6875C5.53582 3.02151 4.94326 2.68852 4.45701 2.73826C4.03288 2.78165 3.64759 2.99816 3.39692 3.33398C3.10954 3.71898 3.10954 4.38497 3.10954 5.71694L3.10953 10.2832C3.10953 11.6152 3.10953 12.2812 3.39692 12.6662C3.64759 13.002 4.03288 13.2185 4.45701 13.2619C4.94325 13.3116 5.53583 12.9786 6.72097 12.3126L10.7838 10.0295C11.969 9.36352 12.5615 9.03052 12.7604 8.59578C12.9339 8.21658 12.9339 7.78355 12.7604 7.40435Z" fill="currentColor"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 17 16"><path d="M7.7147 13.3334H6.3515V10.0001H2.92981V8.66675H7.72017L7.7147 13.3334ZM13.8792 7.33342H9.08885L9.09364 2.66675H10.4575V6.00008H13.8792V7.33342Z"/></svg>

Before

Width:  |  Height:  |  Size: 233 B

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" class="icon" p-id="3512" t="1682415282540" version="1.1" viewBox="0 0 1024 1024"><path d="M341.333333 682.666667c-12.8 0-21.333333-4.266667-29.866666-12.8-17.066667-17.066667-17.066667-42.666667 0-59.733334L409.6 512 311.466667 413.866667c-17.066667-17.066667-17.066667-42.666667 0-59.733334s42.666667-17.066667 59.733333 0l128 128c17.066667 17.066667 17.066667 42.666667 0 59.733334l-128 128c-8.533333 8.533333-17.066667 12.8-29.866667 12.8zM682.666667 682.666667h-128c-25.6 0-42.666667-17.066667-42.666667-42.666667s17.066667-42.666667 42.666667-42.666667h128c25.6 0 42.666667 17.066667 42.666666 42.666667s-17.066667 42.666667-42.666666 42.666667z" p-id="3513"/><path d="M810.666667 896H213.333333c-72.533333 0-128-55.466667-128-128V256c0-72.533333 55.466667-128 128-128h597.333334c72.533333 0 128 55.466667 128 128v512c0 72.533333-55.466667 128-128 128zM213.333333 213.333333c-25.6 0-42.666667 17.066667-42.666666 42.666667v512c0 25.6 17.066667 42.666667 42.666666 42.666667h597.333334c25.6 0 42.666667-17.066667 42.666666-42.666667V256c0-25.6-17.066667-42.666667-42.666666-42.666667H213.333333z" p-id="3514"/></svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="icon" p-id="3322" t="1685515806017" version="1.1" viewBox="0 0 1024 1024"><path d="M512 256a416.853333 416.853333 0 0 1 376.32 234.666667 411.605333 411.605333 0 0 1-102.826667 133.12l60.16 60.16c59.306667-52.48 106.24-118.186667 135.68-193.28C907.52 303.36 725.333333 170.666667 512 170.666667c-54.186667 0-106.24 8.533333-155.306667 24.32l70.4 70.4C454.826667 259.84 482.986667 256 512 256z m-45.653333 48.64L554.666667 392.96c24.32 10.666667 43.946667 30.293333 54.613333 54.613333l88.32 88.32c3.413333-14.506667 5.973333-29.866667 5.973333-45.653333C704 384.426667 617.813333 298.666667 512 298.666667c-15.786667 0-30.72 2.133333-45.653333 5.973333zM85.76 165.12l114.346667 114.346667A500.821333 500.821333 0 0 0 42.666667 490.666667C116.48 677.973333 298.666667 810.666667 512 810.666667c64.853333 0 127.146667-12.373333 184.32-34.986667l145.92 145.92 60.16-60.16L145.92 104.533333 85.76 165.12z m320 320l111.36 111.36c-1.706667 0.426667-3.413333 0.853333-5.12 0.853333a106.666667 106.666667 0 0 1-106.666667-106.666666c0-2.133333 0.426667-3.413333 0.426667-5.546667z m-145.066667-145.066667l74.666667 74.666667a196.266667 196.266667 0 0 0-15.36 75.946667 192.298667 192.298667 0 0 0 267.52 176.64l41.813333 41.813333c-37.546667 10.24-76.8 16.213333-117.333333 16.213333a416.853333 416.853333 0 0 1-376.32-234.666666c29.866667-61.013333 73.386667-111.36 125.013333-150.613334z" p-id="3323"/></svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="none" viewBox="0 0 28 28"><mask id="mask0_3054_4354" style="mask-type:alpha" width="28" height="28" x="0" y="0" maskUnits="userSpaceOnUse"><rect width="28" height="28" fill="#D9D9D9"/></mask><g mask="url(#mask0_3054_4354)"><path fill="#FF324A" d="M1.16667 24.4999L14 2.33325L26.8333 24.4999H1.16667ZM5.19167 22.1666H22.8083L14 6.99992L5.19167 22.1666ZM14 20.9999C14.3306 20.9999 14.6076 20.8881 14.8313 20.6645C15.0549 20.4409 15.1667 20.1638 15.1667 19.8333C15.1667 19.5027 15.0549 19.2256 14.8313 19.002C14.6076 18.7784 14.3306 18.6666 14 18.6666C13.6695 18.6666 13.3924 18.7784 13.1688 19.002C12.9451 19.2256 12.8333 19.5027 12.8333 19.8333C12.8333 20.1638 12.9451 20.4409 13.1688 20.6645C13.3924 20.8881 13.6695 20.9999 14 20.9999ZM12.8333 17.4999H15.1667V11.6666H12.8333V17.4999Z"/></g></svg>

Before

Width:  |  Height:  |  Size: 866 B

@@ -1,51 +0,0 @@
import React from 'react';
import type { IconProps } from '@chakra-ui/react';
import { Icon } from '@chakra-ui/react';
const map = {
more: require('./icons/more.svg').default,
podList: require('./icons/podList.svg').default,
arrowLeft: require('./icons/arrowLeft.svg').default,
plus: require('./icons/plus.svg').default,
delete: require('./icons/delete.svg').default,
restart: require('./icons/restart.svg').default,
start: require('./icons/start.svg').default,
pause: require('./icons/pause.svg').default,
detail: require('./icons/detail.svg').default,
logo: require('./icons/logo.svg').default,
change: require('./icons/change.svg').default,
formInfo: require('./icons/formInfo.svg').default,
settings: require('./icons/settings.svg').default,
copy: require('./icons/copy.svg').default,
continue: require('./icons/continue.svg').default,
noEvents: require('./icons/noEvents.svg').default,
warning: require('./icons/warning.svg').default,
analyze: require('./icons/analyze.svg').default,
terminal: require('./icons/terminal.svg').default,
log: require('./icons/log.svg').default,
statusDetail: require('./icons/statusDetail.svg').default,
read: require('./icons/read.svg').default,
unread: require('./icons/unread.svg').default,
connection: require('./icons/connection.svg').default,
info: require('./icons/info.svg').default,
restore: require('./icons/restore.svg').default,
infoWarn: require('./icons/infoWarn.svg').default,
download: require('./icons/download.svg').default,
check: require('./icons/check.svg').default,
close: require('./icons/close.svg').default,
help: require('./icons/help.svg').default,
link: require('./icons/link.svg').default
};
const MyIcon = ({
name,
w = 'auto',
h = 'auto',
...props
}: { name: keyof typeof map } & IconProps) => {
return map[name] ? (
<Icon as={map[name]} verticalAlign={'text-top'} fill={'currentColor'} w={w} h={h} {...props} />
) : null;
};
export default MyIcon;
@@ -1,95 +0,0 @@
import React, { useState } from 'react';
import { Box, BoxProps, Grid, Flex } from '@chakra-ui/react';
export type TableColumnsType = {
title: string;
dataIndex?: string;
key: string;
render?: (item: any, rowNumber: number, activeId: number) => JSX.Element;
};
interface Props extends BoxProps {
columns: TableColumnsType[];
data: any[];
itemClass?: string;
openSelected?: boolean; // support select item // isOptional
onRowClick?: (item: any) => void;
}
export const MyTable = ({
columns,
data,
itemClass = '',
openSelected = false,
onRowClick,
...reset
}: Props) => {
const [activeId, setActiveId] = useState(0);
return (
<Box border={'1px solid'} borderColor={'grayModern.200'} borderRadius={'md'} {...reset}>
<Grid
templateColumns={`repeat(${columns.length},1fr)`}
overflowX={'auto'}
fontSize={'md'}
color={'grayModern.800'}
fontWeight={'bold'}
borderBottom={'1px solid'}
borderColor={'grayModern.200'}
>
{columns.map((item, i) => (
<Box
px={3}
py={3}
key={item.key}
whiteSpace={'nowrap'}
_first={{
pl: 7
}}
>
{item.title}
</Box>
))}
</Grid>
{data.map((item: any, index1) => (
<Grid
templateColumns={`repeat(${columns.length},1fr)`}
overflowX={'auto'}
key={index1}
_hover={{
bg: '#FBFBFC'
}}
cursor={!item.isOptional && openSelected ? 'not-allowed' : 'pointer'}
borderBottom={'1px solid'}
borderBottomColor={index1 !== data.length - 1 ? 'grayModern.150' : 'transparent'}
bg={activeId == index1 && openSelected ? 'grayModern.100' : ''}
onClick={() => {
if (item.isOptional || !openSelected) {
setActiveId(index1);
onRowClick && onRowClick(item);
}
}}
>
{columns.map((col, index2) => (
<Flex
className={index2 === 0 ? itemClass : ''}
data-id={item.id}
key={col.key}
alignItems={'center'}
px={3}
py={4}
fontSize={'base'}
color={!item.isOptional && openSelected ? 'grayModern.500' : 'grayModern.900'}
>
{col.render
? col.render(item, index1, activeId)
: col.dataIndex
? `${item[col.dataIndex]}`
: ''}
</Flex>
))}
</Grid>
))}
</Box>
);
};
@@ -1,25 +0,0 @@
import React from 'react';
import { Tooltip, TooltipProps } from '@chakra-ui/react';
const MyTooltip = ({ children, ...props }: TooltipProps) => {
return (
<Tooltip
bg={'white'}
arrowShadowColor={' rgba(0,0,0,0.05)'}
hasArrow
arrowSize={12}
offset={[-15, 15]}
color={'myGray.800'}
px={4}
py={2}
borderRadius={'8px'}
whiteSpace={'pre-wrap'}
boxShadow={'1px 1px 10px rgba(0,0,0,0.2)'}
{...props}
>
{children}
</Tooltip>
);
};
export default MyTooltip;
@@ -1,132 +0,0 @@
import { Flex, FlexProps, Icon, Text } from '@chakra-ui/react';
import { Dispatch, SetStateAction, useState } from 'react';
type PaginationProps = {
totalItems: number;
itemsPerPage: number;
currentPage: number;
setCurrentPage: Dispatch<SetStateAction<number>>;
};
export default function Pagination({
totalItems,
itemsPerPage,
currentPage = 1,
setCurrentPage
}: PaginationProps) {
const totalPage = Math.ceil(totalItems / itemsPerPage);
const goToPage = (page: number) => {
if (page >= 1 && page <= totalPage) {
setCurrentPage(page);
}
};
const handlePrevPage = () => {
goToPage(currentPage - 1);
};
const handleNextPage = () => {
goToPage(currentPage + 1);
};
const buttonStyle: FlexProps = {
justifyContent: 'center',
alignItems: 'center',
w: '24px',
h: '24px',
borderRadius: '50%'
};
return (
<Flex
minW="350px"
pr="8px"
h="32px"
ml="auto"
align="center"
mt="10px"
mb="23px"
justifyContent={'end'}
>
<Text>Total:</Text>
<Flex w="40px">{totalItems}</Flex>
<Flex gap="8px" alignItems={'center'}>
<Flex
onClick={() => goToPage(1)}
{...buttonStyle}
{...{
bg: currentPage === 1 ? '#EDF0F2' : '#EDEFF1',
cursor: currentPage === 1 ? 'not-allowed' : 'pointer',
opacity: currentPage === 1 ? '0.5' : '1'
}}
>
<Icon viewBox="0 0 12 12" fill={currentPage === 1 ? 'black' : '#262A32'}>
<path d="M9.205 8.295L6.91 6L9.205 3.705L8.5 3L5.5 6L8.5 9L9.205 8.295ZM3 3H4V9H3V3Z" />
</Icon>
</Flex>
<Flex
{...buttonStyle}
{...{
bg: currentPage === 1 ? '#EDF0F2' : '#EDEFF1',
cursor: currentPage === 1 ? 'not-allowed' : 'pointer',
opacity: currentPage === 1 ? '0.5' : '1'
}}
onClick={handlePrevPage}
>
<Icon viewBox="0 0 12 12" fill={currentPage === 1 ? 'black' : '#262A32'}>
<path
d="M5.414 5.99999L7.889 8.47499L7.182 9.18199L4 5.99999L7.182 2.81799L7.889 3.52499L5.414 5.99999Z"
fill="#262A32"
/>
</Icon>
</Flex>
<Text>
{currentPage}/{totalPage}
</Text>
<Flex
{...buttonStyle}
{...{
bg: currentPage === totalPage ? '#EDF0F2' : '#EDEFF1',
cursor: currentPage === totalPage ? 'not-allowed' : 'pointer',
opacity: currentPage === totalPage ? '0.5' : '1'
}}
onClick={handleNextPage}
>
<Icon
viewBox="0 0 12 12"
fill={currentPage === 1 ? 'black' : '#262A32'}
transform="rotate(180deg)"
>
<path
d="M5.414 5.99999L7.889 8.47499L7.182 9.18199L4 5.99999L7.182 2.81799L7.889 3.52499L5.414 5.99999Z"
fill="#262A32"
/>
</Icon>
</Flex>
<Flex
mr="10px"
{...buttonStyle}
{...{
bg: currentPage === totalPage ? '#EDF0F2' : '#EDEFF1',
cursor: currentPage === totalPage ? 'not-allowed' : 'pointer',
opacity: currentPage === totalPage ? '0.5' : '1'
}}
onClick={() => goToPage(totalPage)}
>
<Icon
viewBox="0 0 12 12"
transform="rotate(180deg)"
fill={currentPage === 1 ? 'black' : '#262A32'}
>
<path d="M9.205 8.295L6.91 6L9.205 3.705L8.5 3L5.5 6L8.5 9L9.205 8.295ZM3 3H4V9H3V3Z" />
</Icon>
</Flex>
</Flex>
<Text>{itemsPerPage}</Text>
<Text>/Page</Text>
</Flex>
);
}
@@ -1,70 +0,0 @@
import {
Flex,
Input,
Popover,
PopoverTrigger,
Img,
PopoverContent,
Button,
Box,
useTheme
} from '@chakra-ui/react';
import { format, parse, isValid, isAfter, isBefore } from 'date-fns';
import { useState, ChangeEventHandler, useEffect, useMemo } from 'react';
import { DateRange, SelectRangeEventHandler, DayPicker } from 'react-day-picker';
import { useQueryClient } from '@tanstack/react-query';
import { CalendarIcon } from '@chakra-ui/icons';
export default function RangeDate({
isDisabled = false,
defaultRange = { from: new Date(), to: new Date() }
}: {
isDisabled?: boolean;
defaultRange?: DateRange;
}) {
const [selectedRange, setSelectedRange] = useState<DateRange>(defaultRange);
const onClose = () => {};
return (
<Popover onClose={onClose} strategy={'fixed'} offset={[-10, 10]}>
<PopoverTrigger>
<Button
w={'280px'}
py={1}
border={useTheme().borders.base}
borderRadius="2px"
cursor={'pointer'}
display={'flex'}
alignItems={'center'}
isDisabled={isDisabled}
>
<Box flex={1} textAlign={'center'}>
{format(selectedRange.from || new Date(), 'y-MM-dd')}
</Box>
<Box>-</Box>
<Box flex={1} textAlign={'center'}>
{format(selectedRange.to || new Date(), 'y-MM-dd')}
</Box>
<CalendarIcon pr={2} fontSize={'22px'} color={'myGray.600'} />
</Button>
</PopoverTrigger>
<PopoverContent w={'100%'}>
<DayPicker
mode="range"
selected={selectedRange}
onSelect={(e) => {
if (e) {
setSelectedRange(e);
} else {
setSelectedRange((state) => ({
from: state.from,
to: state.from
}));
}
}}
/>
</PopoverContent>
</Popover>
);
}
@@ -1,289 +0,0 @@
import {
Box,
Button,
Flex,
Icon,
Input,
Popover,
PopoverContent,
PopoverTrigger
} from '@chakra-ui/react';
import { endOfDay, format, isAfter, isBefore, isValid, parse, startOfDay } from 'date-fns';
import { ChangeEventHandler, Dispatch, SetStateAction, useState } from 'react';
import { DateRange, DayPicker, SelectRangeEventHandler } from 'react-day-picker';
type SelectDateRangeProps = {
isDisabled?: boolean;
startTime: Date;
setStartTime: Dispatch<SetStateAction<Date>>;
endTime: Date;
setEndTime: Dispatch<SetStateAction<Date>>;
};
export default function SelectDateRange({
isDisabled,
startTime,
setStartTime,
endTime,
setEndTime
}: SelectDateRangeProps) {
const initState = { from: startTime, to: endTime };
const [selectedRange, setSelectedRange] = useState<DateRange | undefined>(initState);
const [fromValue, setFromValue] = useState<string>(format(initState.from, 'y-MM-dd'));
const [toValue, setToValue] = useState<string>(format(initState.to, 'y-MM-dd'));
const [inputState, setInputState] = useState<0 | 1>(0);
const onClose = () => {
selectedRange?.from && setStartTime(startOfDay(selectedRange.from));
selectedRange?.to && setEndTime(endOfDay(selectedRange.to));
};
const handleFromChange: ChangeEventHandler<HTMLInputElement> = (e) => {
setFromValue(e.target.value);
const date = parse(e.target.value, 'y-MM-dd', new Date());
if (!isValid(date)) {
return setSelectedRange({ from: undefined, to: selectedRange?.to });
}
if (selectedRange?.to) {
if (isAfter(date, selectedRange.to)) {
setSelectedRange({ from: selectedRange.to, to: date });
} else {
setSelectedRange({ from: date, to: selectedRange?.to });
}
} else {
setSelectedRange({ from: date, to: date });
}
};
const handleToChange: ChangeEventHandler<HTMLInputElement> = (e) => {
setToValue(e.target.value);
const date = parse(e.target.value, 'y-MM-dd', new Date());
if (!isValid(date)) {
return setSelectedRange({ from: selectedRange?.from, to: undefined });
}
if (selectedRange?.from) {
if (isBefore(date, selectedRange.from)) {
setSelectedRange({ from: date, to: selectedRange.from });
} else {
setSelectedRange({ from: selectedRange?.from, to: date });
}
} else {
setSelectedRange({ from: date, to: date });
}
};
const handleRangeSelect: SelectRangeEventHandler = (range: DateRange | undefined) => {
if (range) {
let { from, to } = range;
if (inputState === 0) {
if (from === selectedRange?.from) {
from = to;
} else {
to = from;
}
setInputState(1);
} else {
setInputState(0);
}
setSelectedRange({
from,
to
});
if (from) {
setFromValue(format(from, 'y-MM-dd'));
} else {
setFromValue('');
}
if (to) {
setToValue(format(to, 'y-MM-dd'));
} else {
setToValue(from ? format(from, 'y-MM-dd') : '');
}
} else {
if (fromValue && selectedRange?.from) {
setToValue(fromValue);
setSelectedRange({
...selectedRange,
to: selectedRange.from
});
setInputState(1);
}
}
};
const handleRangeSelectFrom: SelectRangeEventHandler = (range: DateRange | undefined) => {
if (range) {
let { from, to } = range;
if (selectedRange?.to) {
if (from) {
if (!to) {
to = from;
} else if (from === selectedRange?.from) {
from = to;
to = selectedRange.to;
}
if (isBefore(from, selectedRange.to)) {
setSelectedRange({
...selectedRange,
from
});
setFromValue(format(from, 'y-MM-dd'));
}
}
}
}
};
const handleRangeSelectTo: SelectRangeEventHandler = (range: DateRange | undefined) => {
console.log(range, selectedRange);
if (range) {
let { from, to } = range;
if (selectedRange?.from) {
if (to) {
if (!from) {
from = to;
} else if (to === selectedRange?.to) {
to = from;
from = selectedRange.from;
}
if (isAfter(to, selectedRange.from)) {
setSelectedRange({
...selectedRange,
to
});
setToValue(format(to, 'y-MM-dd'));
}
}
}
} else {
if (fromValue && selectedRange?.from) {
setToValue(fromValue);
setSelectedRange({
...selectedRange,
to: selectedRange.from
});
setInputState(1);
}
}
};
return (
<Flex
w={'280px'}
h={'32px'}
bg="#F6F8F9"
mr={'32px'}
gap={'12px'}
align={'center'}
px={'12px'}
justify={'space-between'}
border={'1px solid #DEE0E2'}
borderRadius="2px"
>
<Popover onClose={onClose}>
<PopoverTrigger>
<Button display={'flex'} variant={'unstyled'} isDisabled={isDisabled}>
<Input
isDisabled={!!isDisabled}
variant={'unstyled'}
flex={1}
value={fromValue}
minW="90px"
onChange={handleFromChange}
onBlur={() => {
selectedRange?.from && setStartTime(startOfDay(selectedRange.from));
console.log(selectedRange?.from);
}}
/>
</Button>
</PopoverTrigger>
<PopoverContent zIndex={99} w="auto">
<DayPicker
mode="range"
selected={selectedRange}
onSelect={handleRangeSelectFrom}
defaultMonth={startTime}
styles={{
day: {
borderRadius: 'unset',
transition: 'all 0.2s ease-in-out'
}
}}
/>
</PopoverContent>
</Popover>
<Box>-</Box>
<Popover onClose={onClose}>
<PopoverTrigger>
<Button display={'flex'} variant={'unstyled'} isDisabled={isDisabled}>
<Input
isDisabled={!!isDisabled}
variant={'unstyled'}
value={toValue}
flex={1}
minW="90px"
onChange={handleToChange}
onBlur={() => {
selectedRange?.to && setEndTime(endOfDay(selectedRange.to));
console.log(selectedRange?.to);
}}
/>
</Button>
</PopoverTrigger>
<PopoverContent zIndex={99} w="auto">
<DayPicker
mode="range"
selected={selectedRange}
onSelect={handleRangeSelectTo}
defaultMonth={endTime}
styles={{
day: {
borderRadius: 'unset',
transition: 'all 0.2s ease-in-out'
}
}}
/>
</PopoverContent>
</Popover>
<Popover
onClose={() => {
setInputState(0);
onClose();
}}
>
<PopoverTrigger>
<Button display={'flex'} variant={'unstyled'} isDisabled={isDisabled}>
<Icon
xmlns="http://www.w3.org/2000/svg"
width="17px"
height="16px"
viewBox="0 0 17 16"
fill="none"
>
<path
d="M4.07992 14.6666C3.71325 14.6666 3.39925 14.5362 3.13792 14.2753C2.87703 14.014 2.74658 13.7 2.74658 13.3333V3.99998C2.74658 3.63331 2.87703 3.31954 3.13792 3.05865C3.39925 2.79731 3.71325 2.66665 4.07992 2.66665H4.74658V1.98331C4.74658 1.79442 4.81036 1.63887 4.93792 1.51665C5.06592 1.39442 5.22436 1.33331 5.41325 1.33331C5.60214 1.33331 5.76058 1.39709 5.88858 1.52465C6.01614 1.65265 6.07992 1.81109 6.07992 1.99998V2.66665H11.4132V1.98331C11.4132 1.79442 11.4772 1.63887 11.6052 1.51665C11.7328 1.39442 11.891 1.33331 12.0799 1.33331C12.2688 1.33331 12.427 1.39709 12.5546 1.52465C12.6826 1.65265 12.7466 1.81109 12.7466 1.99998V2.66665H13.4132C13.7799 2.66665 14.0939 2.79731 14.3552 3.05865C14.6161 3.31954 14.7466 3.63331 14.7466 3.99998V13.3333C14.7466 13.7 14.6161 14.014 14.3552 14.2753C14.0939 14.5362 13.7799 14.6666 13.4132 14.6666H4.07992ZM4.07992 13.3333H13.4132V6.66665H4.07992V13.3333ZM4.07992 5.33331H13.4132V3.99998H4.07992V5.33331ZM4.07992 5.33331V3.99998V5.33331Z"
fill="#7B838B"
/>
</Icon>
</Button>
</PopoverTrigger>
<PopoverContent zIndex={99} w="auto">
<DayPicker
mode="range"
selected={selectedRange}
onSelect={handleRangeSelect}
styles={{
day: {
borderRadius: 'unset',
transition: 'all 0.2s ease-in-out'
}
}}
/>
</PopoverContent>
</Popover>
</Flex>
);
}
@@ -1,66 +0,0 @@
import React, { useMemo } from 'react';
import { BoxProps, Flex, Box } from '@chakra-ui/react';
import { useTranslation } from 'next-i18next';
interface Props extends BoxProps {
text: string;
icon?: JSX.Element;
theme?: 'blue';
size?: 'sm' | 'md' | 'lg';
}
const Tip = ({ size = 'md', text, icon, theme, ...props }: Props) => {
const { t } = useTranslation();
const sizeMap = useMemo(() => {
switch (size) {
case 'sm':
return {
fontSize: '12px',
px: 3,
py: 1
};
case 'md':
return {
fontSize: '14px',
px: 4,
py: 2
};
case 'lg':
return {
fontSize: '16px',
px: 5,
py: 2
};
default:
return {};
}
}, [size]);
const themeMap = useMemo(() => {
switch (theme) {
case 'blue':
return {
color: '#0884DD',
bg: '#ECF8FF'
};
default:
return {
color: '#0884DD',
bg: '#ECF8FF'
};
}
}, [theme]);
return (
<Flex alignItems={'center'} borderRadius={'sm'} {...sizeMap} {...themeMap} {...props}>
{icon ? (
<Flex alignItems={'center'} mr={2}>
{icon}
</Flex>
) : null}
<Box>{t(text)}</Box>
</Flex>
);
};
export default Tip;
@@ -1,16 +0,0 @@
import { extendTheme } from '@chakra-ui/react';
import { theme as sealosTheme } from '@sealos/ui';
export const theme = extendTheme(sealosTheme, {
styles: {
global: {
'html, body': {
fontSize: 'md',
height: '100%',
overflow: 'overlay',
fontWeight: 400,
minWidth: '1024px'
}
}
}
});
@@ -1,405 +0,0 @@
import { PhaseEnum } from '@/types/cloudserver';
export const SliderList = {
cpu: [
{
label: '0.1',
value: 100
},
{
label: '0.2',
value: 200
},
{
label: '0.5',
value: 500
},
{
label: '1',
value: 1000
},
{
label: '2',
value: 2000
},
{
label: '3',
value: 3000
},
{
label: '4',
value: 4000
},
{
label: '8',
value: 8000
}
],
memory: [
{
label: '256 M',
value: 256
},
{
label: '512 M',
value: 512
},
{
label: '1 G',
value: 1024
},
{
label: '2 G',
value: 2048
},
{
label: '4 G',
value: 4096
},
{
label: '8 G',
value: 8192
},
{
label: '16 G',
value: 16384
},
{
label: '32 G',
value: 32768
}
]
};
export const MockInstanceType = [
{
CPU: 32,
FPGA: 0,
GPU: 0,
GpuCount: 0,
InstanceFamily: 'TS5',
InstanceType: 'TS5.8XLARGE64',
Memory: 64,
Zone: 'ap-guangzhou-6'
},
{
CPU: 16,
FPGA: 0,
GPU: 0,
GpuCount: 0,
InstanceFamily: 'TS5',
InstanceType: 'TS5.4XLARGE32',
Memory: 32,
Zone: 'ap-guangzhou-6'
},
{
CPU: 8,
FPGA: 0,
GPU: 0,
GpuCount: 0,
InstanceFamily: 'TS5',
InstanceType: 'TS5.2XLARGE32',
Memory: 32,
Zone: 'ap-guangzhou-6'
},
{
CPU: 8,
FPGA: 0,
GPU: 0,
GpuCount: 0,
InstanceFamily: 'TS5',
InstanceType: 'TS5.2XLARGE16',
Memory: 16,
Zone: 'ap-guangzhou-6'
},
{
CPU: 4,
FPGA: 0,
GPU: 0,
GpuCount: 0,
InstanceFamily: 'TS5',
InstanceType: 'TS5.LARGE8',
Memory: 8,
Zone: 'ap-guangzhou-6'
},
{
CPU: 4,
FPGA: 0,
GPU: 0,
GpuCount: 0,
InstanceFamily: 'TS5',
InstanceType: 'TS5.LARGE16',
Memory: 16,
Zone: 'ap-guangzhou-6'
},
{
CPU: 32,
FPGA: 0,
GPU: 0,
GpuCount: 0,
InstanceFamily: 'TS5',
InstanceType: 'TS5.8XLARGE128',
Memory: 128,
Zone: 'ap-guangzhou-6'
},
{
CPU: 16,
FPGA: 0,
GPU: 0,
GpuCount: 0,
InstanceFamily: 'TS5',
InstanceType: 'TS5.4XLARGE64',
Memory: 64,
Zone: 'ap-guangzhou-6'
},
{
CPU: 2,
FPGA: 0,
GPU: 0,
GpuCount: 0,
InstanceFamily: 'TS5',
InstanceType: 'TS5.MEDIUM4',
Memory: 4,
Zone: 'ap-guangzhou-6'
},
{
CPU: 2,
FPGA: 0,
GPU: 0,
GpuCount: 0,
InstanceFamily: 'TS5',
InstanceType: 'TS5.MEDIUM8'
}
];
export const MockStorages = [
{
id: '1',
type: 'Hard Drive',
size: '1TB',
amount: '2',
describe: 'Internal storage for desktop computer'
},
{
id: '2',
type: 'SSD',
size: '500GB',
amount: '1',
describe: 'Solid-state drive for laptop'
},
{
id: '1',
type: 'External HDD',
size: '2TB',
amount: '3',
describe: 'Portable storage for backup'
},
{
type: 'USB Flash Drive',
size: '64GB',
amount: '5',
describe: 'Removable storage for transferring files'
}
];
export const MockImage = [
{
name: 'OpenCloudOS',
type: 'Linux',
description: 'An open-source cloud operating system designed for scalability and flexibility.',
logo: 'https://example.com/opencloudos.png'
},
{
name: 'TencentOS',
type: 'Linux',
description:
'A Linux distribution developed by Tencent, optimized for cloud computing and internet services.',
logo: 'https://example.com/tencentos.png'
},
{
name: 'CentOS',
type: 'Linux',
description:
'A free and open-source Linux distribution based on Red Hat Enterprise Linux (RHEL).',
logo: 'https://example.com/centos.png'
},
{
name: 'Windows',
type: 'Windows',
description:
'A popular operating system developed by Microsoft, widely used for personal computers.',
logo: 'https://example.com/windows.png'
},
{
name: 'Ubuntu',
type: 'Linux',
description:
'A user-friendly Linux distribution based on Debian, known for its ease of use and community support.',
logo: 'https://example.com/ubuntu.png'
},
{
name: 'Debian',
type: 'Linux',
description:
'A stable and versatile Linux distribution, widely used as a base for other distributions.',
logo: 'https://example.com/debian.png'
},
{
name: 'CentOS Stream',
type: 'Linux',
description: 'A rolling-release Linux distribution that serves as a testing ground for RHEL.',
logo: 'https://example.com/centos-stream.png'
},
{
name: 'AlmaLinux',
type: 'Linux',
description:
'A community-driven Linux distribution designed as a drop-in replacement for CentOS.',
logo: 'https://example.com/almalinux.png'
},
{
name: 'CoreOS',
type: 'Linux',
description:
'A lightweight Linux distribution designed for containerized applications and cloud deployments.',
logo: 'https://example.com/coreos.png'
},
{
name: 'openSUSE',
type: 'Linux',
description:
'A general-purpose Linux distribution known for its stability and comprehensive package management.',
logo: 'https://example.com/opensuse.png'
},
{
name: 'Rocky Linux',
type: 'Linux',
description:
'A community-driven enterprise-grade Linux distribution, created as a replacement for CentOS.',
logo: 'https://example.com/rockylinux.png'
},
{
name: 'FreeBSD',
type: 'BSD',
description:
'A free and open-source Unix-like operating system based on the Berkeley Software Distribution (BSD).',
logo: 'https://example.com/freebsd.png'
},
{
name: 'Fedora',
type: 'Linux',
description:
'A cutting-edge Linux distribution sponsored by Red Hat, known for its frequent updates and new features.',
logo: 'https://example.com/fedora.png'
}
];
export const MockInstance = [
{
_id: '60a7e9e8c8e8a5001f9e8a5a',
phase: 'Running',
state: 'Active',
namespace: 'default',
sealosUserId: '123456',
cpu: 4,
disk: 100,
memory: 8192,
publicNetworkAccess: true,
instanceId: 'i-1234567890',
ImageId: 'ami-12345678',
InstanceName: 'MyVM1',
loginName: 'admin',
loginPassword: 'password123',
cloudProvider: 'AWS'
},
{
_id: '60a7e9e8c8e8a5001f9e8a5b',
phase: 'Stopped',
state: 'Inactive',
namespace: 'default',
sealosUserId: '789012',
cpu: 2,
disk: 50,
memory: 4096,
publicNetworkAccess: false,
instanceId: 'i-0987654321',
ImageId: 'ami-87654321',
InstanceName: 'MyVM2',
loginName: 'admin',
loginPassword: 'password456',
cloudProvider: 'Azure'
}
];
export const StatusMap = {
[PhaseEnum.Starting]: {
label: 'Starting',
value: PhaseEnum.Starting,
color: 'green.600',
backgroundColor: 'green.50',
dotColor: 'green.600'
},
[PhaseEnum.Started]: {
label: 'Started',
value: PhaseEnum.Started,
color: 'green.600',
backgroundColor: 'green.50',
dotColor: 'green.600'
},
[PhaseEnum.Creating]: {
label: 'Creating',
value: PhaseEnum.Creating,
color: 'grayModern.500',
backgroundColor: 'grayModern.100',
dotColor: 'grayModern.500'
},
[PhaseEnum.Created]: {
label: 'Created',
value: PhaseEnum.Created,
color: 'grayModern.500',
backgroundColor: 'grayModern.100',
dotColor: 'grayModern.500'
},
[PhaseEnum.Deleted]: {
label: 'Deleted',
value: PhaseEnum.Deleted,
color: 'rgba(240, 68, 56, 1)',
backgroundColor: 'rgba(254, 243, 242, 1)',
dotColor: 'rgba(240, 68, 56, 1)'
},
[PhaseEnum.Deleting]: {
label: 'Deleting',
value: PhaseEnum.Deleting,
color: 'rgba(240, 68, 56, 1)',
backgroundColor: 'rgba(254, 243, 242, 1)',
dotColor: 'rgba(240, 68, 56, 1)'
},
[PhaseEnum.Stopped]: {
label: 'Stopped',
value: PhaseEnum.Stopped,
color: 'rgba(111, 93, 215, 1)',
backgroundColor: 'rgba(240, 238, 255, 1)',
dotColor: 'rgba(111, 93, 215, 1)'
},
[PhaseEnum.Stopping]: {
label: 'Stopping',
value: PhaseEnum.Stopping,
color: 'rgba(111, 93, 215, 1)',
backgroundColor: 'rgba(240, 238, 255, 1)',
dotColor: 'rgba(111, 93, 215, 1)'
},
[PhaseEnum.Changing]: {
label: 'Changing',
value: PhaseEnum.Changing,
color: 'grayModern.500',
backgroundColor: 'grayModern.100',
dotColor: 'grayModern.500'
},
[PhaseEnum.Restarting]: {
label: 'Restarting',
value: PhaseEnum.Restarting,
color: 'grayModern.500',
backgroundColor: 'grayModern.100',
dotColor: 'grayModern.500'
}
};
@@ -1,80 +0,0 @@
import { ReactNode, useCallback, useRef } from 'react';
import {
AlertDialog,
AlertDialogBody,
AlertDialogFooter,
AlertDialogHeader,
AlertDialogContent,
AlertDialogOverlay,
useDisclosure,
Button
} from '@chakra-ui/react';
import { useTranslation } from 'next-i18next';
export const useConfirm = ({
title = 'Prompt',
content,
confirmText = 'Confirm'
}: {
title?: string;
content: ReactNode;
confirmText?: string;
}) => {
const { isOpen, onOpen, onClose } = useDisclosure();
const { t } = useTranslation();
const cancelRef = useRef(null);
const confirmCb = useRef<any>();
const cancelCb = useRef<any>();
return {
openConfirm: useCallback(
(confirm?: any, cancel?: any) => {
return function () {
onOpen();
confirmCb.current = confirm;
cancelCb.current = cancel;
};
},
[onOpen]
),
ConfirmChild: useCallback(
() => (
<AlertDialog isOpen={isOpen} leastDestructiveRef={cancelRef} onClose={onClose}>
<AlertDialogOverlay>
<AlertDialogContent maxW={'600px'}>
<AlertDialogHeader fontSize="lg" fontWeight="bold">
{t(title)}
</AlertDialogHeader>
<AlertDialogBody>{content}</AlertDialogBody>
<AlertDialogFooter>
<Button
width={'88px'}
variant={'outline'}
onClick={() => {
onClose();
typeof cancelCb.current === 'function' && cancelCb.current();
}}
>
{t('Cancel')}
</Button>
<Button
ml={3}
width={'88px'}
onClick={() => {
onClose();
typeof confirmCb.current === 'function' && confirmCb.current();
}}
>
{t(confirmText)}
</Button>
</AlertDialogFooter>
</AlertDialogContent>
</AlertDialogOverlay>
</AlertDialog>
),
[confirmText, content, isOpen, onClose, t, title]
)
};
};
@@ -1,36 +0,0 @@
import { UseToastOptions } from '@chakra-ui/react';
import { useMessage } from '@sealos/ui';
import { useTranslation } from 'next-i18next';
/**
* copy text data
*/
export const useCopyData = () => {
const { message: toast } = useMessage();
const { t } = useTranslation();
return {
copyData: (data: string, title: string = 'Copy Success', options?: UseToastOptions) => {
try {
const textarea = document.createElement('textarea');
textarea.value = data;
document.body.appendChild(textarea);
textarea.select();
document.execCommand('copy');
document.body.removeChild(textarea);
toast({
title: title,
status: 'success',
duration: 1000,
...options
});
} catch (error) {
console.error(error);
toast({
title: t('Copy Failed'),
status: 'error'
});
}
}
};
};
@@ -1,34 +0,0 @@
import { useState, useCallback } from 'react';
import { Spinner, Flex } from '@chakra-ui/react';
export const useLoading = (props?: { defaultLoading: boolean }) => {
const [isLoading, setIsLoading] = useState(props?.defaultLoading || false);
const Loading = useCallback(
({ loading, fixed = true }: { loading?: boolean; fixed?: boolean }): JSX.Element | null => {
return (
<Flex
position={fixed ? 'fixed' : 'absolute'}
zIndex={100}
backgroundColor={'rgba(255,255,255,0.5)'}
top={0}
left={0}
right={0}
bottom={0}
alignItems={'center'}
justifyContent={'center'}
visibility={isLoading || loading ? 'visible' : 'hidden'}
>
<Spinner thickness="4px" speed="0.65s" emptyColor="gray.200" color="blue.500" size="xl" />
</Flex>
);
},
[isLoading]
);
return {
isLoading,
setIsLoading,
Loading
};
};
@@ -1,25 +0,0 @@
import { useState, useEffect } from 'react';
import { throttle } from 'lodash';
export function useScreen() {
const [screenWidth, setScreenWidth] = useState(1440);
useEffect(() => {
const resize = throttle(() => {
const w = document.documentElement.clientWidth;
setScreenWidth(w);
}, 300);
window.addEventListener('resize', resize);
const w = document.documentElement.clientWidth;
setScreenWidth(w);
return () => {
window.removeEventListener('resize', resize);
};
}, []);
return {
screenWidth
};
}
@@ -1,44 +0,0 @@
import React, { useRef, useCallback } from 'react';
import { Box } from '@chakra-ui/react';
import { useToast } from './useToast';
import { useTranslation } from 'react-i18next';
export const useSelectFile = (props?: { fileType?: string; multiple?: boolean }) => {
const { t } = useTranslation();
const { fileType = '*', multiple = false } = props || {};
const { toast } = useToast();
const SelectFileDom = useRef<HTMLInputElement>(null);
const File = useCallback(
({ onSelect }: { onSelect: (e: File[]) => void }) => (
<Box position={'absolute'} w={0} h={0} overflow={'hidden'}>
<input
ref={SelectFileDom}
type="file"
accept={fileType}
multiple={multiple}
onChange={(e) => {
if (!e.target.files || e.target.files?.length === 0) return;
if (e.target.files.length > 10) {
return toast({
status: 'warning',
title: t('file.Select a maximum of 10 files')
});
}
onSelect(Array.from(e.target.files));
}}
/>
</Box>
),
[fileType, multiple, t, toast]
);
const onOpen = useCallback(() => {
SelectFileDom.current && SelectFileDom.current.click();
}, []);
return {
File,
onOpen
};
};
@@ -1,17 +0,0 @@
import { useState, useEffect } from 'react';
const useStore = <T, F>(
store: (callback: (state: T) => unknown) => unknown,
callback: (state: T) => F
) => {
const result = store(callback) as F;
const [data, setData] = useState<F>();
useEffect(() => {
setData(result);
}, [result]);
return data;
};
export default useStore;
@@ -1,13 +0,0 @@
import { useToast as uToast, UseToastOptions } from '@chakra-ui/react';
export const useToast = (props?: UseToastOptions) => {
const toast = uToast({
position: 'top',
duration: 3000,
...props
});
return {
toast
};
};
@@ -1,13 +0,0 @@
import { useRouter } from 'next/router';
import { useEffect } from 'react';
const NonePage = () => {
const router = useRouter();
useEffect(() => {
router.push('/cloudservers');
}, [router]);
return <div></div>;
};
export default NonePage;
@@ -1,143 +0,0 @@
import { theme } from '@/constants/theme';
import { useConfirm } from '@/hooks/useConfirm';
import useEnvStore from '@/store/env';
import { useGlobalStore } from '@/store/global';
import useSessionStore from '@/store/session';
import '@/styles/reset.scss';
import { getLangStore, setLangStore } from '@/utils/cookieUtils';
import { ChakraProvider } from '@chakra-ui/react';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { throttle } from 'lodash';
import { appWithTranslation, useTranslation } from 'next-i18next';
import type { AppProps } from 'next/app';
import Head from 'next/head';
import Router, { useRouter } from 'next/router';
import NProgress from 'nprogress'; //nprogress module
import 'nprogress/nprogress.css';
import { useEffect, useState } from 'react';
import 'react-day-picker/dist/style.css';
import { EVENT_NAME } from 'sealos-desktop-sdk';
import { createSealosApp, sealosApp } from 'sealos-desktop-sdk/app';
//Binding events.
Router.events.on('routeChangeStart', () => NProgress.start());
Router.events.on('routeChangeComplete', () => NProgress.done());
Router.events.on('routeChangeError', () => NProgress.done());
// Create a client
const queryClient = new QueryClient({
defaultOptions: {
queries: {
refetchOnWindowFocus: false,
retry: false,
cacheTime: 0
}
}
});
function App({ Component, pageProps }: AppProps) {
const router = useRouter();
const { initSystemEnv } = useEnvStore();
const { setToken, token } = useSessionStore();
const { i18n } = useTranslation();
const { setScreenWidth, setLastRoute } = useGlobalStore();
const [refresh, setRefresh] = useState(false);
const { openConfirm, ConfirmChild } = useConfirm({
title: '跳转提示',
content: '该应用不允许单独使用,点击确认前往 Sealos Desktop 使用。'
});
useEffect(() => {
const response = createSealosApp();
(async () => {
try {
const res = await sealosApp.getSession();
if (res.token) {
setToken(res.token);
}
} catch (err) {
console.log('App is not running in desktop');
if (process.env.NODE_ENV === 'development') {
setToken(process.env.NEXT_PUBLIC_MOCK_USER!);
}
}
})();
return response;
}, []);
// add resize event
useEffect(() => {
const resize = throttle((e: Event) => {
const documentWidth = document.documentElement.clientWidth || document.body.clientWidth;
setScreenWidth(documentWidth);
}, 200);
window.addEventListener('resize', resize);
const documentWidth = document.documentElement.clientWidth || document.body.clientWidth;
setScreenWidth(documentWidth);
return () => {
window.removeEventListener('resize', resize);
};
}, [setScreenWidth]);
// init
useEffect(() => {
const changeI18n = async (data: any) => {
const lastLang = getLangStore();
const newLang = data.currentLanguage;
if (lastLang !== newLang) {
i18n?.changeLanguage?.(newLang);
setLangStore(newLang);
setRefresh((state) => !state);
}
};
(async () => {
try {
const lang = await sealosApp.getLanguage();
changeI18n({
currentLanguage: lang.lng
});
} catch (error) {
changeI18n({
currentLanguage: 'zh'
});
}
})();
return sealosApp?.addAppEventListen(EVENT_NAME.CHANGE_I18N, changeI18n);
}, []);
// record route
useEffect(() => {
return () => {
setLastRoute(router.asPath);
};
}, [router.pathname]);
useEffect(() => {
const lang = getLangStore() || 'zh';
i18n?.changeLanguage?.(lang);
}, [refresh, router.asPath]);
return (
<>
<Head>
<title>Cloud Virtual Machine</title>
<meta name="description" content="Generated by Sealos Team" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="icon" href="/favicon.ico" />
</Head>
<QueryClientProvider client={queryClient}>
<ChakraProvider theme={theme}>
{/* <div onClick={() => i18n.changeLanguage(i18n.language === 'zh' ? 'en' : 'zh')}>zh</div> */}
<Component {...pageProps} />
<ConfirmChild />
</ChakraProvider>
</QueryClientProvider>
</>
);
}
export default appWithTranslation(App);
@@ -1,21 +0,0 @@
import { Head, Html, Main, NextScript } from 'next/document';
export default function Document() {
return (
<Html lang="en">
<Head>
<meta name="application-name" content="Sealos Desktop App" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="default" />
<meta name="apple-mobile-web-app-title" content="Sealos" />
<meta name="description" content="sealos cloud" />
<meta name="format-detection" content="telephone=no" />
</Head>
<body>
<Main />
<NextScript />
</body>
</Html>
);
}
@@ -1,56 +0,0 @@
import { verifyAccessToken } from '@/services/backend/auth';
import { jsonRes } from '@/services/backend/response';
import { POST } from '@/services/requestLaf';
import { CreateCloudServerPayload, EditForm } from '@/types/cloudserver';
import { NextApiRequest, NextApiResponse } from 'next';
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
try {
await verifyAccessToken(req);
const form = req.body as EditForm;
const dataDisks = form.storages
.filter(({ use }) => use === 'DataDisk')
.flatMap(({ size, amount }) => Array(amount).fill(size));
const systemDiskSize = form.storages.find(({ use }) => use === 'SystemDisk')?.size || 20;
const payload: CreateCloudServerPayload = {
virtualMachinePackageFamily: form.virtualMachinePackageFamily,
virtualMachinePackageName: form.virtualMachinePackageName,
imageId: form.systemImageId,
systemDisk: systemDiskSize,
dataDisks: dataDisks,
...(form.publicIpAssigned
? {
internetMaxBandwidthOut: form.internetMaxBandWidthOut
}
: { internetMaxBandwidthOut: 0 }),
loginPassword: form.password,
loginName: '',
metaData: {},
zone: form.zone,
virtualMachineType: form.virtualMachineType,
virtualMachineArch: form.virtualMachineArch,
chargeType: form.chargeType,
period: parseInt(form.period),
counts: form.counts
};
const { data, error } = await POST('/action/create', payload, {
headers: {
Authorization: req.headers.authorization
}
});
if (error) {
return jsonRes(res, { code: 500, error: error });
}
return jsonRes(res, {
data: data
});
} catch (error) {
console.log(error);
jsonRes(res, { code: 500, error: error });
}
}
@@ -1,30 +0,0 @@
import { verifyAccessToken } from '@/services/backend/auth';
import { jsonRes } from '@/services/backend/response';
import { POST } from '@/services/requestLaf';
import { NextApiRequest, NextApiResponse } from 'next';
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
try {
await verifyAccessToken(req);
const { data, error } = await POST(
'/action/get-region-details',
{},
{
headers: {
Authorization: req.headers.authorization
}
}
);
if (error) {
return jsonRes(res, { code: 500, error: error });
}
jsonRes(res, {
data: data
});
} catch (error) {
jsonRes(res, { code: 500, error: error });
}
}
@@ -1,33 +0,0 @@
import { verifyAccessToken } from '@/services/backend/auth';
import { jsonRes } from '@/services/backend/response';
import { POST } from '@/services/requestLaf';
import { NextApiRequest, NextApiResponse } from 'next';
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
try {
await verifyAccessToken(req);
const { page = 1, pageSize = 10 } = req.body as {
page: number;
pageSize: number;
};
const { data, error } = await POST(
'/action/get-virtual-machine-detail-list',
{
page,
pageSize
},
{
headers: {
Authorization: req.headers.authorization
}
}
);
return jsonRes(res, {
data: data || error
});
} catch (error: any) {
jsonRes(res, { code: 500, error: error });
}
}
@@ -1,26 +0,0 @@
import { verifyAccessToken } from '@/services/backend/auth';
import { jsonRes } from '@/services/backend/response';
import { POST } from '@/services/requestLaf';
import { NextApiRequest, NextApiResponse } from 'next';
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
try {
await verifyAccessToken(req);
const { data } = await POST(
'/action/get-image-list',
{},
{
headers: {
Authorization: req.headers.authorization
}
}
);
jsonRes(res, {
data: data
});
} catch (error) {
jsonRes(res, { code: 500, error: error });
}
}
@@ -1,37 +0,0 @@
import { verifyAccessToken } from '@/services/backend/auth';
import { jsonRes } from '@/services/backend/response';
import { POST } from '@/services/requestLaf';
import { CVMChargeType } from '@/types/region';
import { NextApiRequest, NextApiResponse } from 'next';
export type ServerTypePayload = {
zone: string;
virtualMachinePackageFamily: string;
chargeType: CVMChargeType;
virtualMachineType: string;
virtualMachineArch: string;
};
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
try {
await verifyAccessToken(req);
const payload = req.body as ServerTypePayload;
const { data, error } = await POST('/action/get-virtual-machine-package', payload, {
headers: {
Authorization: req.headers.authorization
}
});
if (error) {
return jsonRes(res, { code: 500, error: error });
}
jsonRes(res, {
data: data
});
} catch (error) {
jsonRes(res, { code: 500, error: error });
}
}
@@ -1,51 +0,0 @@
import { verifyAccessToken } from '@/services/backend/auth';
import { jsonRes } from '@/services/backend/response';
import { POST } from '@/services/requestLaf';
import { CreateCloudServerPayload, EditForm } from '@/types/cloudserver';
import { NextApiRequest, NextApiResponse } from 'next';
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
try {
await verifyAccessToken(req);
const form = req.body as EditForm;
const dataDisks = form.storages
.filter(({ use }) => use === 'DataDisk')
.flatMap(({ size, amount }) => Array(amount).fill(size));
const systemDiskSize = form.storages.find(({ use }) => use === 'SystemDisk')?.size || 20;
const payload: CreateCloudServerPayload = {
virtualMachinePackageFamily: form.virtualMachinePackageFamily,
virtualMachinePackageName: form.virtualMachinePackageName,
imageId: form.systemImageId,
systemDisk: systemDiskSize,
dataDisks: dataDisks,
...(form.publicIpAssigned
? {
internetMaxBandwidthOut: form.internetMaxBandWidthOut
}
: { internetMaxBandwidthOut: 0 }),
loginPassword: form.password,
loginName: '',
metaData: {},
zone: form.zone,
virtualMachineType: form.virtualMachineType,
virtualMachineArch: form.virtualMachineArch,
chargeType: form.chargeType,
period: parseInt(form.period),
counts: form.counts
};
const result = await POST('/action/get-price', payload, {
headers: {
Authorization: req.headers.authorization
}
});
return jsonRes(res, {
data: result?.data
});
} catch (error) {
jsonRes(res, { code: 500, error: 'error' });
}
}
@@ -1,60 +0,0 @@
import { verifyAccessToken } from '@/services/backend/auth';
import { jsonRes } from '@/services/backend/response';
import { POST } from '@/services/requestLaf';
import { HandleEnum } from '@/types/cloudserver';
import { NextApiRequest, NextApiResponse } from 'next';
export type UpdateStatusPayload = {
instanceName: string;
handle: HandleEnum;
};
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
try {
await verifyAccessToken(req);
const { instanceName, handle } = req.body as UpdateStatusPayload;
const handleToUrlMap = {
[HandleEnum.Start]: '/action/start',
[HandleEnum.Stop]: '/action/stop',
[HandleEnum.Restart]: '/action/restart',
[HandleEnum.Delete]: '/action/delete'
};
const url = handleToUrlMap[handle];
console.log(url);
if (!url) {
return jsonRes(res, {
code: 500,
message: 'There is no API corresponding to this operation'
});
}
const { data, error } = await POST(
url,
{
instanceName: instanceName
},
{
headers: {
Authorization: req.headers.authorization
}
}
);
if (error) {
return jsonRes(res, {
code: 500,
message: error
});
}
return jsonRes(res, {
data: data
});
} catch (error) {
console.log(error);
jsonRes(res, { code: 500, error: error });
}
}
@@ -1,15 +0,0 @@
import { jsonRes } from '@/services/backend/response';
import { ApiResp } from '@/services/kubernet';
import type { NextApiRequest, NextApiResponse } from 'next';
export type SystemEnvResponse = {
domain?: string;
};
export default async function handler(req: NextApiRequest, res: NextApiResponse<ApiResp>) {
jsonRes<SystemEnvResponse>(res, {
data: {
domain: process.env.SEALOS_DOMAIN || 'cloud.sealos.io'
}
});
}
@@ -1,41 +0,0 @@
import React from 'react';
import {
Modal,
ModalOverlay,
ModalContent,
ModalHeader,
ModalBody,
ModalCloseButton,
Box
} from '@chakra-ui/react';
import MyIcon from '@/components/Icon';
const ErrorModal = ({
title,
content,
onClose
}: {
title: string;
content: string;
onClose: () => void;
}) => {
return (
<Modal isOpen={true} onClose={onClose}>
<ModalOverlay />
<ModalContent>
<ModalHeader display={'flex'} alignItems={'center'} color={'myRed.600'}>
<MyIcon name="warning"></MyIcon>
<Box ml={3} fontSize={'xl'}>
{title}
</Box>
</ModalHeader>
<ModalCloseButton color={'myRed.600'} fontSize={'16px'} />
<ModalBody maxH={'50vh'} overflow={'auto'} whiteSpace={'pre-wrap'}>
{content}
</ModalBody>
</ModalContent>
</Modal>
);
};
export default ErrorModal;

Some files were not shown because too many files have changed in this diff Show More