This is an automated email from the ASF dual-hosted git repository.

wuzhiguo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/bigtop-manager.git


The following commit(s) were added to refs/heads/main by this push:
     new cb5a742  BIGTOP-4186: Introduce postcss for CSS processing (#41)
cb5a742 is described below

commit cb5a7424f59fcd7f3cb3eb7418882144bf16ff34
Author: Fdefined <[email protected]>
AuthorDate: Tue Aug 13 15:29:58 2024 +0800

    BIGTOP-4186: Introduce postcss for CSS processing (#41)
---
 bigtop-manager-ui/README.md                        |  39 +-
 bigtop-manager-ui/README.zh.md                     |  39 +-
 bigtop-manager-ui/package.json                     |  13 +-
 bigtop-manager-ui/pnpm-lock.yaml                   | 608 +++++++++++++++++++--
 .../{src/utils/enums.ts => postcss.config.js}      |  17 +-
 bigtop-manager-ui/src/api/component/types.ts       |   2 +-
 bigtop-manager-ui/src/api/job/types.ts             |   8 +-
 bigtop-manager-ui/src/api/service/types.ts         |   8 -
 .../images/svg/carbon-language.svg}                |  19 +-
 .../images/svg/circle-filled.svg}                  |  18 +-
 bigtop-manager-ui/src/assets/images/svg/plus.svg   |   6 +-
 .../src/assets/images/svg/restart.svg              |   6 +-
 .../images/svg/square-filled.svg}                  |  19 +-
 bigtop-manager-ui/src/assets/images/svg/start.svg  |   6 +-
 bigtop-manager-ui/src/assets/images/svg/stop.svg   |   6 +-
 .../src/components/alert-info/index.vue            |   5 +-
 .../src/components/cluster-create/choose-stack.vue |   5 +-
 .../src/components/cluster-create/finish.vue       |   5 +-
 .../src/components/cluster-create/index.vue        |   5 +-
 .../src/components/cluster-create/install.vue      |   5 +-
 .../components/cluster-create/set-cluster-name.vue |   5 +-
 .../src/components/cluster-create/set-hosts.vue    |   5 +-
 .../components/cluster-create/set-repository.vue   |  13 +-
 .../src/components/cluster-info/index.vue          |   4 +-
 .../components/{ => common}/dot-state/index.vue    |   6 +
 .../variable.scss => components/common/index.ts}   |  26 +-
 .../svg-icon.vue => common/svg-icon/index.vue}     |   2 +-
 .../src/components/dashboard/index.vue             |  12 +-
 .../src/components/dashboard/tips.vue              |   5 +-
 .../src/components/job-info/custom-progress.vue    |   2 +-
 .../src/components/job-info/index.vue              |   4 +-
 bigtop-manager-ui/src/components/job-info/job.vue  |  57 +-
 .../src/components/job-info/stage.vue              |  22 +-
 .../src/components/job-info/task-log.vue           |   6 +-
 bigtop-manager-ui/src/components/job-info/task.vue |   3 +-
 .../src/components/select-lang/index.vue           |   7 +-
 .../components/service-add/assign-components.vue   |  10 +-
 .../src/components/service-add/choose-services.vue |   5 +-
 .../components/service-add/configure-services.vue  |  10 +-
 .../src/components/service-add/finish.vue          |   5 +-
 .../src/components/service-add/index.vue           |   5 +-
 .../src/components/service-add/install.vue         |   8 +-
 .../src/components/user-avatar/index.vue           |   4 +-
 .../src/{utils/enums.ts => enums/state.ts}         |  22 +
 bigtop-manager-ui/src/layouts/header.vue           |   8 +-
 bigtop-manager-ui/src/layouts/sider.vue            |   8 +-
 bigtop-manager-ui/src/main.ts                      |  17 +-
 bigtop-manager-ui/src/pages/hosts/index.vue        |  28 +-
 bigtop-manager-ui/src/pages/login/index.vue        |  32 +-
 bigtop-manager-ui/src/pages/service/index.vue      |  41 +-
 .../src/{main.ts => plugins/index.ts}              |  33 +-
 bigtop-manager-ui/src/store/user/index.ts          |   7 +-
 .../styles/default.scss => styles/default.css}     |  32 +-
 .../src/{utils/enums.ts => styles/function.scss}   |   9 +-
 .../src/{utils/enums.ts => styles/main.scss}       |   9 +-
 .../styles/variable.scss => styles/mixins.scss}    |  19 +-
 .../styles/default.scss => styles/scrollbar.css}   |  42 +-
 .../src/{utils/enums.ts => styles/variables.scss}  |   9 +-
 bigtop-manager-ui/vite.config.ts                   |   2 +-
 59 files changed, 874 insertions(+), 509 deletions(-)

diff --git a/bigtop-manager-ui/README.md b/bigtop-manager-ui/README.md
index e6c2373..c930332 100644
--- a/bigtop-manager-ui/README.md
+++ b/bigtop-manager-ui/README.md
@@ -32,21 +32,26 @@ Editor: VsCode
 ## Project Structure
 
 ```
-—————————————————— public           static resources
-—————————————————— src              project source code
-——————————— API                     calls the backend interface
-——————————— assets                  static assets
-——————————— components              customize components
-——————————— layouts                 vue pages
-——————————— locales                 internationalization
-——————————— pages                   components
-——————————— router                  router
-———————————store                    global persistence
-———————————types                    data type
-——————————— utils                   utility function
-——————————— App.vue                 project root component
-———————————main.ts                  Project packaging portal
-——————————————————index.html        Project page
-——————————————————package.json      Package management profile for your project
-——————————————————vite.config.ts    Project configuration file
+—————————————————— public               static resources
+—————————————————— src                  project source code
+——————————— api                         calls the backend interface
+——————————— assets                      static assets
+——————————— components                  customize components
+——————————— composables                 composable
+——————————— directives                  customize directive
+——————————— layouts                     overall page layout
+——————————— locales                     internationalization
+——————————— pages                       components
+——————————— plugins                     global registration configuration
+——————————— router                      router
+——————————— store                       global persistence
+——————————— styles                      style file
+——————————— types                       data type
+——————————— utils                       utility function
+——————————— App.vue                     project root component
+——————————— main.ts                     Project packaging portal
+—————————————————— index.html           Project page
+—————————————————— package.json         Package management profile for your 
project
+—————————————————— vite.config.ts       Project configuration file
+—————————————————— postcss.config.ts    postcss configuration file
 ```
diff --git a/bigtop-manager-ui/README.zh.md b/bigtop-manager-ui/README.zh.md
index d0b8c97..241ca73 100644
--- a/bigtop-manager-ui/README.zh.md
+++ b/bigtop-manager-ui/README.zh.md
@@ -32,21 +32,26 @@ Vue:版本3.3.4
 ## 项目结构
 
 ```
-——————————————————public           公共静态资源
-——————————————————src              项目源代码
-———————————api                     调用后端接口
-———————————assets                  静态资源
-———————————components              自定义组件
-———————————layouts                 Vue页面
-———————————locales                 国际化
-———————————pages                   页面组件
-———————————router                  路由
-———————————store                   全局持久化
-———————————types                   数据类型
-———————————utils                   工具函数
-———————————App.vue                 项目根组件
-———————————main.ts                 项目打包入口
-——————————————————index.html       项目页面
-——————————————————package.json     项目的包管理配置文件
-——————————————————vite.config.ts   项目配置文件
+——————————————————public                公共静态资源
+——————————————————src                   项目源代码
+——————————— api                         调用后端接口
+——————————— assets                      静态资源
+——————————— components                  自定义组件
+——————————— composables                 组合式函数
+——————————— directives                  自定义指令
+——————————— layouts                     整体页面布局
+——————————— locales                     国际化
+——————————— pages                       组件
+——————————— plugins                     全局注册配置
+——————————— router                      路由
+——————————— store                       全局持久化
+——————————— styles                      样式文件
+——————————— types                       数据类型
+——————————— utils                       工具函数
+——————————— App.vue                     项目根组件
+——————————— main.ts                     项目打包入口
+—————————————————— index.html           项目页面
+—————————————————— package.json         项目的包管理配置文件
+—————————————————— vite.config.ts       项目配置文件
+—————————————————— postcss.config.ts    postcss 配置文件
 ```
diff --git a/bigtop-manager-ui/package.json b/bigtop-manager-ui/package.json
index 199e5ee..42cfe4e 100644
--- a/bigtop-manager-ui/package.json
+++ b/bigtop-manager-ui/package.json
@@ -31,10 +31,13 @@
     "@typescript-eslint/eslint-plugin": "^6.4.1",
     "@typescript-eslint/parser": "^6.4.1",
     "@vitejs/plugin-vue": "^4.2.3",
+    "autoprefixer": "^10.4.20",
+    "cssnano": "^7.0.5",
     "eslint": "^8.47.0",
     "eslint-config-prettier": "^9.0.0",
     "eslint-plugin-prettier": "^5.0.0",
     "eslint-plugin-vue": "^9.17.0",
+    "postcss": "^8.4.41",
     "prettier": "^3.0.2",
     "sass": "^1.66.1",
     "sass-loader": "^13.3.2",
@@ -42,5 +45,13 @@
     "vite": "^4.4.5",
     "vite-plugin-svg-icons": "^2.0.1",
     "vue-tsc": "^1.8.5"
-  }
+  },
+  "browserslist": [
+    "defaults",
+    "not ie < 11",
+    "last 2 versions",
+    "> 1%",
+    "iOS 7",
+    "last 3 iOS versions"
+  ]
 }
\ No newline at end of file
diff --git a/bigtop-manager-ui/pnpm-lock.yaml b/bigtop-manager-ui/pnpm-lock.yaml
index 850c5e9..4066f70 100644
--- a/bigtop-manager-ui/pnpm-lock.yaml
+++ b/bigtop-manager-ui/pnpm-lock.yaml
@@ -67,6 +67,12 @@ devDependencies:
   '@vitejs/plugin-vue':
     specifier: ^4.2.3
     version: 4.2.3([email protected])([email protected])
+  autoprefixer:
+    specifier: ^10.4.20
+    version: 10.4.20([email protected])
+  cssnano:
+    specifier: ^7.0.5
+    version: 7.0.5([email protected])
   eslint:
     specifier: ^8.47.0
     version: 8.47.0
@@ -79,6 +85,9 @@ devDependencies:
   eslint-plugin-vue:
     specifier: ^9.17.0
     version: 9.17.0([email protected])
+  postcss:
+    specifier: ^8.4.41
+    version: 8.4.41
   prettier:
     specifier: ^3.0.2
     version: 3.0.2
@@ -529,7 +538,7 @@ packages:
       fast-glob: 3.3.1
       is-glob: 4.0.3
       open: 9.1.0
-      picocolors: 1.0.0
+      picocolors: 1.0.1
       tslib: 2.6.2
     dev: true
 
@@ -778,7 +787,7 @@ packages:
       '@vue/shared': 3.3.4
       estree-walker: 2.0.2
       magic-string: 0.30.3
-      postcss: 8.4.28
+      postcss: 8.4.41
       source-map-js: 1.0.2
 
   /@vue/[email protected]:
@@ -997,24 +1006,24 @@ packages:
     resolution: {integrity: 
sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
     dev: true
 
-  /[email protected]([email protected]):
+  /[email protected]([email protected]):
     resolution: {integrity: 
sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==}
     peerDependencies:
       acorn: ^8
     dependencies:
-      acorn: 8.10.0
+      acorn: 8.12.1
     dev: true
 
-  /[email protected]([email protected]):
+  /[email protected]([email protected]):
     resolution: {integrity: 
sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
     peerDependencies:
       acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
     dependencies:
-      acorn: 8.10.0
+      acorn: 8.12.1
     dev: true
 
-  /[email protected]:
-    resolution: {integrity: 
sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==}
+  /[email protected]:
+    resolution: {integrity: 
sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==}
     engines: {node: '>=0.4.0'}
     hasBin: true
     dev: true
@@ -1171,6 +1180,22 @@ packages:
     hasBin: true
     dev: true
 
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==}
+    engines: {node: ^10 || ^12 || >=14}
+    hasBin: true
+    peerDependencies:
+      postcss: ^8.1.0
+    dependencies:
+      browserslist: 4.23.3
+      caniuse-lite: 1.0.30001651
+      fraction.js: 4.3.7
+      normalize-range: 0.1.2
+      picocolors: 1.0.1
+      postcss: 8.4.41
+      postcss-value-parser: 4.2.0
+    dev: true
+
   /[email protected]:
     resolution: {integrity: 
sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
     engines: {node: '>= 0.4'}
@@ -1272,15 +1297,15 @@ packages:
       fill-range: 7.0.1
     dev: true
 
-  /[email protected]:
-    resolution: {integrity: 
sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==}
+  /[email protected]:
+    resolution: {integrity: 
sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==}
     engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
     hasBin: true
     dependencies:
-      caniuse-lite: 1.0.30001522
-      electron-to-chromium: 1.4.499
-      node-releases: 2.0.13
-      update-browserslist-db: 1.0.11([email protected])
+      caniuse-lite: 1.0.30001651
+      electron-to-chromium: 1.5.6
+      node-releases: 2.0.18
+      update-browserslist-db: 1.1.0([email protected])
     dev: true
 
   /[email protected]:
@@ -1325,10 +1350,23 @@ packages:
     engines: {node: '>=6'}
     dev: true
 
+  /[email protected]:
+    resolution: {integrity: 
sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==}
+    dependencies:
+      browserslist: 4.23.3
+      caniuse-lite: 1.0.30001522
+      lodash.memoize: 4.1.2
+      lodash.uniq: 4.5.0
+    dev: true
+
   /[email protected]:
     resolution: {integrity: 
sha512-TKiyTVZxJGhsTszLuzb+6vUZSjVOAhClszBr2Ta2k9IwtNBT/4dzmL6aywt0HCgEZlmwJzXJd8yNiob6HgwTRg==}
     dev: true
 
+  /[email protected]:
+    resolution: {integrity: 
sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==}
+    dev: true
+
   /[email protected]:
     resolution: {integrity: 
sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==}
     engines: {node: '>=0.10.0'}
@@ -1414,6 +1452,10 @@ packages:
     resolution: {integrity: 
sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
     dev: true
 
+  /[email protected]:
+    resolution: {integrity: 
sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==}
+    dev: true
+
   /[email protected]:
     resolution: {integrity: 
sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
     engines: {node: '>= 0.8'}
@@ -1473,6 +1515,15 @@ packages:
     resolution: {integrity: 
sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==}
     dev: false
 
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==}
+    engines: {node: ^14 || ^16 || >=18}
+    peerDependencies:
+      postcss: ^8.0.9
+    dependencies:
+      postcss: 8.4.41
+    dev: true
+
   /[email protected]:
     resolution: {integrity: 
sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==}
     dependencies:
@@ -1483,6 +1534,16 @@ packages:
       nth-check: 2.1.1
     dev: true
 
+  /[email protected]:
+    resolution: {integrity: 
sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==}
+    dependencies:
+      boolbase: 1.0.0
+      css-what: 6.1.0
+      domhandler: 5.0.3
+      domutils: 3.1.0
+      nth-check: 2.1.1
+    dev: true
+
   /[email protected]:
     resolution: {integrity: 
sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==}
     engines: {node: '>=8.0.0'}
@@ -1491,6 +1552,22 @@ packages:
       source-map: 0.6.1
     dev: true
 
+  /[email protected]:
+    resolution: {integrity: 
sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==}
+    engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
+    dependencies:
+      mdn-data: 2.0.28
+      source-map-js: 1.0.2
+    dev: true
+
+  /[email protected]:
+    resolution: {integrity: 
sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==}
+    engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
+    dependencies:
+      mdn-data: 2.0.30
+      source-map-js: 1.0.2
+    dev: true
+
   /[email protected]:
     resolution: {integrity: 
sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
     engines: {node: '>= 6'}
@@ -1502,6 +1579,65 @@ packages:
     hasBin: true
     dev: true
 
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-Jbzja0xaKwc5JzxPQoc+fotKpYtWEu4wQLMQe29CM0FjjdRjA4omvbGHl2DTGgARKxSTpPssBsok+ixv8uTBqw==}
+    engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+    peerDependencies:
+      postcss: ^8.4.31
+    dependencies:
+      browserslist: 4.23.3
+      css-declaration-sorter: 7.2.0([email protected])
+      cssnano-utils: 5.0.0([email protected])
+      postcss: 8.4.41
+      postcss-calc: 10.0.1([email protected])
+      postcss-colormin: 7.0.2([email protected])
+      postcss-convert-values: 7.0.3([email protected])
+      postcss-discard-comments: 7.0.2([email protected])
+      postcss-discard-duplicates: 7.0.1([email protected])
+      postcss-discard-empty: 7.0.0([email protected])
+      postcss-discard-overridden: 7.0.0([email protected])
+      postcss-merge-longhand: 7.0.3([email protected])
+      postcss-merge-rules: 7.0.3([email protected])
+      postcss-minify-font-values: 7.0.0([email protected])
+      postcss-minify-gradients: 7.0.0([email protected])
+      postcss-minify-params: 7.0.2([email protected])
+      postcss-minify-selectors: 7.0.3([email protected])
+      postcss-normalize-charset: 7.0.0([email protected])
+      postcss-normalize-display-values: 7.0.0([email protected])
+      postcss-normalize-positions: 7.0.0([email protected])
+      postcss-normalize-repeat-style: 7.0.0([email protected])
+      postcss-normalize-string: 7.0.0([email protected])
+      postcss-normalize-timing-functions: 7.0.0([email protected])
+      postcss-normalize-unicode: 7.0.2([email protected])
+      postcss-normalize-url: 7.0.0([email protected])
+      postcss-normalize-whitespace: 7.0.0([email protected])
+      postcss-ordered-values: 7.0.1([email protected])
+      postcss-reduce-initial: 7.0.2([email protected])
+      postcss-reduce-transforms: 7.0.0([email protected])
+      postcss-svgo: 7.0.1([email protected])
+      postcss-unique-selectors: 7.0.2([email protected])
+    dev: true
+
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-Uij0Xdxc24L6SirFr25MlwC2rCFX6scyUmuKpzI+JQ7cyqDEwD42fJ0xfB3yLfOnRDU5LKGgjQ9FA6LYh76GWQ==}
+    engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+    peerDependencies:
+      postcss: ^8.4.31
+    dependencies:
+      postcss: 8.4.41
+    dev: true
+
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-Aq0vqBLtpTT5Yxj+hLlLfNPFuRQCDIjx5JQAhhaedQKLNDvDGeVziF24PS+S1f0Z5KCxWvw0QVI3VNHNBITxVQ==}
+    engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+    peerDependencies:
+      postcss: ^8.4.31
+    dependencies:
+      cssnano-preset-default: 7.0.5([email protected])
+      lilconfig: 3.1.2
+      postcss: 8.4.41
+    dev: true
+
   /[email protected]:
     resolution: {integrity: 
sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==}
     engines: {node: '>=8.0.0'}
@@ -1509,6 +1645,13 @@ packages:
       css-tree: 1.1.3
     dev: true
 
+  /[email protected]:
+    resolution: {integrity: 
sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==}
+    engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
+    dependencies:
+      css-tree: 2.2.1
+    dev: true
+
   /[email protected]:
     resolution: {integrity: 
sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==}
 
@@ -1688,6 +1831,14 @@ packages:
       entities: 2.2.0
     dev: true
 
+  /[email protected]:
+    resolution: {integrity: 
sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
+    dependencies:
+      domelementtype: 2.3.0
+      domhandler: 5.0.3
+      entities: 4.5.0
+    dev: true
+
   /[email protected]:
     resolution: {integrity: 
sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==}
     dev: true
@@ -1709,6 +1860,13 @@ packages:
       domelementtype: 2.3.0
     dev: true
 
+  /[email protected]:
+    resolution: {integrity: 
sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
+    engines: {node: '>= 4'}
+    dependencies:
+      domelementtype: 2.3.0
+    dev: true
+
   /[email protected]:
     resolution: {integrity: 
sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==}
     dependencies:
@@ -1724,6 +1882,14 @@ packages:
       domhandler: 4.3.1
     dev: true
 
+  /[email protected]:
+    resolution: {integrity: 
sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==}
+    dependencies:
+      dom-serializer: 2.0.0
+      domelementtype: 2.3.0
+      domhandler: 5.0.3
+    dev: true
+
   /[email protected]:
     resolution: {integrity: 
sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==}
     dependencies:
@@ -1731,8 +1897,8 @@ packages:
       zrender: 5.4.4
     dev: false
 
-  /[email protected]:
-    resolution: {integrity: 
sha512-0NmjlYBLKVHva4GABWAaHuPJolnDuL0AhV3h1hES6rcLCWEIbRL6/8TghfsVwkx6TEroQVdliX7+aLysUpKvjw==}
+  /[email protected]:
+    resolution: {integrity: 
sha512-jwXWsM5RPf6j9dPYzaorcBSUg6AiqocPEyMpkchkvntaH9HGfOOMZwxMJjDY/XEs3T5dM7uyH1VhRMkqUU9qVw==}
     dev: true
 
   /[email protected]:
@@ -1756,6 +1922,11 @@ packages:
     resolution: {integrity: 
sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==}
     dev: true
 
+  /[email protected]:
+    resolution: {integrity: 
sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+    engines: {node: '>=0.12'}
+    dev: true
+
   /[email protected]:
     resolution: {integrity: 
sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==}
     engines: {node: '>= 0.4'}
@@ -1879,8 +2050,8 @@ packages:
       '@esbuild/win32-x64': 0.18.20
     dev: true
 
-  /[email protected]:
-    resolution: {integrity: 
sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
+  /[email protected]:
+    resolution: {integrity: 
sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
     engines: {node: '>=6'}
     dev: true
 
@@ -2013,8 +2184,8 @@ packages:
     resolution: {integrity: 
sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     dependencies:
-      acorn: 8.10.0
-      acorn-jsx: 5.3.2([email protected])
+      acorn: 8.12.1
+      acorn-jsx: 5.3.2([email protected])
       eslint-visitor-keys: 3.4.3
     dev: true
 
@@ -2243,6 +2414,10 @@ packages:
       mime-types: 2.1.35
     dev: false
 
+  /[email protected]:
+    resolution: {integrity: 
sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
+    dev: true
+
   /[email protected]:
     resolution: {integrity: 
sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==}
     engines: {node: '>=0.10.0'}
@@ -2893,6 +3068,11 @@ packages:
       type-check: 0.4.0
     dev: true
 
+  /[email protected]:
+    resolution: {integrity: 
sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==}
+    engines: {node: '>=14'}
+    dev: true
+
   /[email protected]:
     resolution: {integrity: 
sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==}
     engines: {node: '>=6.11.5'}
@@ -2918,10 +3098,18 @@ packages:
     resolution: {integrity: 
sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
     dev: false
 
+  /[email protected]:
+    resolution: {integrity: 
sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
+    dev: true
+
   /[email protected]:
     resolution: {integrity: 
sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
     dev: true
 
+  /[email protected]:
+    resolution: {integrity: 
sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==}
+    dev: true
+
   /[email protected]:
     resolution: {integrity: 
sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
 
@@ -2969,6 +3157,14 @@ packages:
     resolution: {integrity: 
sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==}
     dev: true
 
+  /[email protected]:
+    resolution: {integrity: 
sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==}
+    dev: true
+
+  /[email protected]:
+    resolution: {integrity: 
sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}
+    dev: true
+
   /[email protected]:
     resolution: {integrity: 
sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==}
     engines: {node: '>=4'}
@@ -3071,8 +3267,8 @@ packages:
     resolution: {integrity: 
sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==}
     dev: true
 
-  /[email protected]:
-    resolution: {integrity: 
sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==}
+  /[email protected]:
+    resolution: {integrity: 
sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
     engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
     hasBin: true
 
@@ -3107,8 +3303,8 @@ packages:
     resolution: {integrity: 
sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
     dev: true
 
-  /[email protected]:
-    resolution: {integrity: 
sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==}
+  /[email protected]:
+    resolution: {integrity: 
sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==}
     dev: true
 
   /[email protected]:
@@ -3116,6 +3312,11 @@ packages:
     engines: {node: '>=0.10.0'}
     dev: true
 
+  /[email protected]:
+    resolution: {integrity: 
sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
+    engines: {node: '>=0.10.0'}
+    dev: true
+
   /[email protected]:
     resolution: {integrity: 
sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
     engines: {node: '>=8'}
@@ -3283,6 +3484,10 @@ packages:
 
   /[email protected]:
     resolution: {integrity: 
sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
+    dev: true
+
+  /[email protected]:
+    resolution: {integrity: 
sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==}
 
   /[email protected]:
     resolution: {integrity: 
sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
@@ -3325,6 +3530,248 @@ packages:
     engines: {node: '>= 0.4'}
     dev: true
 
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-pp1Z3FxtxA+xHAoWXcOXgnBN1WPu4ZiJ5LWGjKyf9MMreagAsaTUtnqFK1y1sHhyJddAkYTPu6XSuLgb3oYCjw==}
+    engines: {node: ^18.12 || ^20.9 || >=22.0}
+    peerDependencies:
+      postcss: ^8.4.38
+    dependencies:
+      postcss: 8.4.41
+      postcss-selector-parser: 6.1.1
+      postcss-value-parser: 4.2.0
+    dev: true
+
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-YntRXNngcvEvDbEjTdRWGU606eZvB5prmHG4BF0yLmVpamXbpsRJzevyy6MZVyuecgzI2AWAlvFi8DAeCqwpvA==}
+    engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+    peerDependencies:
+      postcss: ^8.4.31
+    dependencies:
+      browserslist: 4.23.3
+      caniuse-api: 3.0.0
+      colord: 2.9.3
+      postcss: 8.4.41
+      postcss-value-parser: 4.2.0
+    dev: true
+
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-yJhocjCs2SQer0uZ9lXTMOwDowbxvhwFVrZeS6NPEij/XXthl73ggUmfwVvJM+Vaj5gtCKJV1jiUu4IhAUkX/Q==}
+    engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+    peerDependencies:
+      postcss: ^8.4.31
+    dependencies:
+      browserslist: 4.23.3
+      postcss: 8.4.41
+      postcss-value-parser: 4.2.0
+    dev: true
+
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-/Hje9Ls1IYcB9duELO/AyDUJI6aQVY3h5Rj1ziXgaLYCTi1iVBLnjg/TS0D6NszR/kDG6I86OwLmAYe+bvJjiQ==}
+    engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+    peerDependencies:
+      postcss: ^8.4.31
+    dependencies:
+      postcss: 8.4.41
+      postcss-selector-parser: 6.1.1
+    dev: true
+
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-oZA+v8Jkpu1ct/xbbrntHRsfLGuzoP+cpt0nJe5ED2FQF8n8bJtn7Bo28jSmBYwqgqnqkuSXJfSUEE7if4nClQ==}
+    engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+    peerDependencies:
+      postcss: ^8.4.31
+    dependencies:
+      postcss: 8.4.41
+    dev: true
+
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA==}
+    engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+    peerDependencies:
+      postcss: ^8.4.31
+    dependencies:
+      postcss: 8.4.41
+    dev: true
+
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-GmNAzx88u3k2+sBTZrJSDauR0ccpE24omTQCVmaTTZFz1du6AasspjaUPMJ2ud4RslZpoFKyf+6MSPETLojc6w==}
+    engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+    peerDependencies:
+      postcss: ^8.4.31
+    dependencies:
+      postcss: 8.4.41
+    dev: true
+
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-8waYomFxshdv6M9Em3QRM9MettRLDRcH2JQi2l0Z1KlYD/vhal3gbkeSES0NuACXOlZBB0V/B0AseHZaklzWOA==}
+    engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+    peerDependencies:
+      postcss: ^8.4.31
+    dependencies:
+      postcss: 8.4.41
+      postcss-value-parser: 4.2.0
+      stylehacks: 7.0.3([email protected])
+    dev: true
+
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-2eSas2p3voPxNfdI5sQrvIkMaeUHpVc3EezgVs18hz/wRTQAC9U99tp9j3W5Jx9/L3qHkEDvizEx/LdnmumIvQ==}
+    engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+    peerDependencies:
+      postcss: ^8.4.31
+    dependencies:
+      browserslist: 4.23.3
+      caniuse-api: 3.0.0
+      cssnano-utils: 5.0.0([email protected])
+      postcss: 8.4.41
+      postcss-selector-parser: 6.1.1
+    dev: true
+
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-2ckkZtgT0zG8SMc5aoNwtm5234eUx1GGFJKf2b1bSp8UflqaeFzR50lid4PfqVI9NtGqJ2J4Y7fwvnP/u1cQog==}
+    engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+    peerDependencies:
+      postcss: ^8.4.31
+    dependencies:
+      postcss: 8.4.41
+      postcss-value-parser: 4.2.0
+    dev: true
+
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-pdUIIdj/C93ryCHew0UgBnL2DtUS3hfFa5XtERrs4x+hmpMYGhbzo6l/Ir5de41O0GaKVpK1ZbDNXSY6GkXvtg==}
+    engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+    peerDependencies:
+      postcss: ^8.4.31
+    dependencies:
+      colord: 2.9.3
+      cssnano-utils: 5.0.0([email protected])
+      postcss: 8.4.41
+      postcss-value-parser: 4.2.0
+    dev: true
+
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-nyqVLu4MFl9df32zTsdcLqCFfE/z2+f8GE1KHPxWOAmegSo6lpV2GNy5XQvrzwbLmiU7d+fYay4cwto1oNdAaQ==}
+    engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+    peerDependencies:
+      postcss: ^8.4.31
+    dependencies:
+      browserslist: 4.23.3
+      cssnano-utils: 5.0.0([email protected])
+      postcss: 8.4.41
+      postcss-value-parser: 4.2.0
+    dev: true
+
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-SxTgUQSgBk6wEqzQZKEv1xQYIp9UBju6no9q+npohzSdhuSICQdkqmD1UMKkZWItS3olJSJMDDEY9WOJ5oGJew==}
+    engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+    peerDependencies:
+      postcss: ^8.4.31
+    dependencies:
+      cssesc: 3.0.0
+      postcss: 8.4.41
+      postcss-selector-parser: 6.1.1
+    dev: true
+
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-ABisNUXMeZeDNzCQxPxBCkXexvBrUHV+p7/BXOY+ulxkcjUZO0cp8ekGBwvIh2LbCwnWbyMPNJVtBSdyhM2zYQ==}
+    engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+    peerDependencies:
+      postcss: ^8.4.31
+    dependencies:
+      postcss: 8.4.41
+    dev: true
+
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-lnFZzNPeDf5uGMPYgGOw7v0BfB45+irSRz9gHQStdkkhiM0gTfvWkWB5BMxpn0OqgOQuZG/mRlZyJxp0EImr2Q==}
+    engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+    peerDependencies:
+      postcss: ^8.4.31
+    dependencies:
+      postcss: 8.4.41
+      postcss-value-parser: 4.2.0
+    dev: true
+
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-I0yt8wX529UKIGs2y/9Ybs2CelSvItfmvg/DBIjTnoUSrPxSV7Z0yZ8ShSVtKNaV/wAY+m7bgtyVQLhB00A1NQ==}
+    engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+    peerDependencies:
+      postcss: ^8.4.31
+    dependencies:
+      postcss: 8.4.41
+      postcss-value-parser: 4.2.0
+    dev: true
+
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-o3uSGYH+2q30ieM3ppu9GTjSXIzOrRdCUn8UOMGNw7Af61bmurHTWI87hRybrP6xDHvOe5WlAj3XzN6vEO8jLw==}
+    engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+    peerDependencies:
+      postcss: ^8.4.31
+    dependencies:
+      postcss: 8.4.41
+      postcss-value-parser: 4.2.0
+    dev: true
+
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-w/qzL212DFVOpMy3UGyxrND+Kb0fvCiBBujiaONIihq7VvtC7bswjWgKQU/w4VcRyDD8gpfqUiBQ4DUOwEJ6Qg==}
+    engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+    peerDependencies:
+      postcss: ^8.4.31
+    dependencies:
+      postcss: 8.4.41
+      postcss-value-parser: 4.2.0
+    dev: true
+
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-tNgw3YV0LYoRwg43N3lTe3AEWZ66W7Dh7lVEpJbHoKOuHc1sLrzMLMFjP8SNULHaykzsonUEDbKedv8C+7ej6g==}
+    engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+    peerDependencies:
+      postcss: ^8.4.31
+    dependencies:
+      postcss: 8.4.41
+      postcss-value-parser: 4.2.0
+    dev: true
+
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-ztisabK5C/+ZWBdYC+Y9JCkp3M9qBv/XFvDtSw0d/XwfT3UaKeW/YTm/MD/QrPNxuecia46vkfEhewjwcYFjkg==}
+    engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+    peerDependencies:
+      postcss: ^8.4.31
+    dependencies:
+      browserslist: 4.23.3
+      postcss: 8.4.41
+      postcss-value-parser: 4.2.0
+    dev: true
+
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-+d7+PpE+jyPX1hDQZYG+NaFD+Nd2ris6r8fPTBAjE8z/U41n/bib3vze8x7rKs5H1uEw5ppe9IojewouHk0klQ==}
+    engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+    peerDependencies:
+      postcss: ^8.4.31
+    dependencies:
+      postcss: 8.4.41
+      postcss-value-parser: 4.2.0
+    dev: true
+
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-37/toN4wwZErqohedXYqWgvcHUGlT8O/m2jVkAfAe9Bd4MzRqlBmXrJRePH0e9Wgnz2X7KymTgTOaaFizQe3AQ==}
+    engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+    peerDependencies:
+      postcss: ^8.4.31
+    dependencies:
+      postcss: 8.4.41
+      postcss-value-parser: 4.2.0
+    dev: true
+
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-irWScWRL6nRzYmBOXReIKch75RRhNS86UPUAxXdmW/l0FcAsg0lvAXQCby/1lymxn/o0gVa6Rv/0f03eJOwHxw==}
+    engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+    peerDependencies:
+      postcss: ^8.4.31
+    dependencies:
+      cssnano-utils: 5.0.0([email protected])
+      postcss: 8.4.41
+      postcss-value-parser: 4.2.0
+    dev: true
+
   /[email protected]([email protected]):
     resolution: {integrity: 
sha512-Umxu+FvKMwlY6TyDzGFoSUnzW+NOfMBLyC1tAkIjgX+Z/qGspJeRjVC903D7mx7TuBpJlwti2ibXtWuA7fKMeQ==}
     peerDependencies:
@@ -3333,6 +3780,27 @@ packages:
       postcss: 5.2.18
     dev: true
 
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-pOnu9zqQww7dEKf62Nuju6JgsW2V0KRNBHxeKohU+JkHd/GAH5uvoObqFLqkeB2n20mr6yrlWDvo5UBU5GnkfA==}
+    engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+    peerDependencies:
+      postcss: ^8.4.31
+    dependencies:
+      browserslist: 4.23.3
+      caniuse-api: 3.0.0
+      postcss: 8.4.41
+    dev: true
+
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-pnt1HKKZ07/idH8cpATX/ujMbtOGhUfE+m8gbqwJE05aTaNw8gbo34a2e3if0xc0dlu75sUOiqvwCGY3fzOHew==}
+    engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+    peerDependencies:
+      postcss: ^8.4.31
+    dependencies:
+      postcss: 8.4.41
+      postcss-value-parser: 4.2.0
+    dev: true
+
   /[email protected]:
     resolution: {integrity: 
sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==}
     engines: {node: '>=4'}
@@ -3341,6 +3809,39 @@ packages:
       util-deprecate: 1.0.2
     dev: true
 
+  /[email protected]:
+    resolution: {integrity: 
sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==}
+    engines: {node: '>=4'}
+    dependencies:
+      cssesc: 3.0.0
+      util-deprecate: 1.0.2
+    dev: true
+
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-0WBUlSL4lhD9rA5k1e5D8EN5wCEyZD6HJk0jIvRxl+FDVOMlJ7DePHYWGGVc5QRqrJ3/06FTXM0bxjmJpmTPSA==}
+    engines: {node: ^18.12.0 || ^20.9.0 || >= 18}
+    peerDependencies:
+      postcss: ^8.4.31
+    dependencies:
+      postcss: 8.4.41
+      postcss-value-parser: 4.2.0
+      svgo: 3.3.2
+    dev: true
+
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-CjSam+7Vf8cflJQsHrMS0P2hmy9u0+n/P001kb5eAszLmhjMqrt/i5AqQuNFihhViwDvEAezqTmXqaYXL2ugMw==}
+    engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+    peerDependencies:
+      postcss: ^8.4.31
+    dependencies:
+      postcss: 8.4.41
+      postcss-selector-parser: 6.1.1
+    dev: true
+
+  /[email protected]:
+    resolution: {integrity: 
sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
+    dev: true
+
   /[email protected]:
     resolution: {integrity: 
sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==}
     engines: {node: '>=0.12'}
@@ -3351,13 +3852,13 @@ packages:
       supports-color: 3.2.3
     dev: true
 
-  /[email protected]:
-    resolution: {integrity: 
sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==}
+  /[email protected]:
+    resolution: {integrity: 
sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==}
     engines: {node: ^10 || ^12 || >=14}
     dependencies:
-      nanoid: 3.3.6
-      picocolors: 1.0.0
-      source-map-js: 1.0.2
+      nanoid: 3.3.7
+      picocolors: 1.0.1
+      source-map-js: 1.2.0
 
   /[email protected]:
     resolution: {integrity: 
sha512-nPC53YMqJnc/+1x4fRYFfm81KV2V+G9NZY+hTohpYg64Ay7NemWWcV4UWuy/SgMupqQ3kJ88M/iRfZmSnxT+pw==}
@@ -3738,6 +4239,10 @@ packages:
     resolution: {integrity: 
sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
     engines: {node: '>=0.10.0'}
 
+  /[email protected]:
+    resolution: {integrity: 
sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==}
+    engines: {node: '>=0.10.0'}
+
   /[email protected]:
     resolution: {integrity: 
sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==}
     deprecated: See https://github.com/lydell/source-map-resolve#deprecated
@@ -3857,6 +4362,17 @@ packages:
     engines: {node: '>=8'}
     dev: true
 
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-4DqtecvI/Nd+2BCvW9YEF6lhBN5UM50IJ1R3rnEAhBwbCKf4VehRf+uqvnVArnBayjYD/WtT3g0G/HSRxWfTRg==}
+    engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+    peerDependencies:
+      postcss: ^8.4.31
+    dependencies:
+      browserslist: 4.23.3
+      postcss: 8.4.41
+      postcss-selector-parser: 6.1.1
+    dev: true
+
   /[email protected]:
     resolution: {integrity: 
sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==}
     dev: false
@@ -3921,6 +4437,20 @@ packages:
       stable: 0.1.8
     dev: true
 
+  /[email protected]:
+    resolution: {integrity: 
sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==}
+    engines: {node: '>=14.0.0'}
+    hasBin: true
+    dependencies:
+      '@trysound/sax': 0.2.0
+      commander: 7.2.0
+      css-select: 5.1.0
+      css-tree: 2.3.1
+      css-what: 6.1.0
+      csso: 5.0.5
+      picocolors: 1.0.1
+    dev: true
+
   /[email protected]:
     resolution: {integrity: 
sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==}
     engines: {node: ^14.18.0 || >=16.0.0}
@@ -3964,7 +4494,7 @@ packages:
     hasBin: true
     dependencies:
       '@jridgewell/source-map': 0.3.5
-      acorn: 8.10.0
+      acorn: 8.12.1
       commander: 2.20.3
       source-map-support: 0.5.21
     dev: true
@@ -4159,15 +4689,15 @@ packages:
     engines: {node: '>=8'}
     dev: true
 
-  /[email protected]([email protected]):
-    resolution: {integrity: 
sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==}
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==}
     hasBin: true
     peerDependencies:
       browserslist: '>= 4.21.0'
     dependencies:
-      browserslist: 4.21.10
-      escalade: 3.1.1
-      picocolors: 1.0.0
+      browserslist: 4.23.3
+      escalade: 3.1.2
+      picocolors: 1.0.1
     dev: true
 
   /[email protected]:
@@ -4243,7 +4773,7 @@ packages:
     dependencies:
       '@types/node': 20.5.3
       esbuild: 0.18.20
-      postcss: 8.4.28
+      postcss: 8.4.41
       rollup: 3.28.1
       sass: 1.66.1
     optionalDependencies:
@@ -4392,9 +4922,9 @@ packages:
       '@webassemblyjs/ast': 1.11.6
       '@webassemblyjs/wasm-edit': 1.11.6
       '@webassemblyjs/wasm-parser': 1.11.6
-      acorn: 8.10.0
-      acorn-import-assertions: 1.9.0([email protected])
-      browserslist: 4.21.10
+      acorn: 8.12.1
+      acorn-import-assertions: 1.9.0([email protected])
+      browserslist: 4.23.3
       chrome-trace-event: 1.0.3
       enhanced-resolve: 5.15.0
       es-module-lexer: 1.3.0
diff --git a/bigtop-manager-ui/src/utils/enums.ts 
b/bigtop-manager-ui/postcss.config.js
similarity index 81%
copy from bigtop-manager-ui/src/utils/enums.ts
copy to bigtop-manager-ui/postcss.config.js
index 9064f6d..b98e52a 100644
--- a/bigtop-manager-ui/src/utils/enums.ts
+++ b/bigtop-manager-ui/postcss.config.js
@@ -17,9 +17,14 @@
  * under the License.
  */
 
-export type MaintainState =
-  | 'Uninstalled'
-  | 'Installed'
-  | 'Maintained'
-  | 'Started'
-  | 'Stopped'
+const autoprefixer = require('autoprefixer')
+const cssnano = require('cssnano')
+
+module.exports = {
+  plugins: [
+    autoprefixer(),
+    cssnano({
+      preset: 'default'
+    })
+  ]
+}
diff --git a/bigtop-manager-ui/src/api/component/types.ts 
b/bigtop-manager-ui/src/api/component/types.ts
index 7e89812..a723817 100644
--- a/bigtop-manager-ui/src/api/component/types.ts
+++ b/bigtop-manager-ui/src/api/component/types.ts
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-import { MaintainState } from '@/utils/enums.ts'
+import { MaintainState } from '@/enums/state'
 
 export interface ComponentVO {
   id: number
diff --git a/bigtop-manager-ui/src/api/job/types.ts 
b/bigtop-manager-ui/src/api/job/types.ts
index 0674e9a..81aaf64 100644
--- a/bigtop-manager-ui/src/api/job/types.ts
+++ b/bigtop-manager-ui/src/api/job/types.ts
@@ -17,13 +17,7 @@
  * under the License.
  */
 
-export enum State {
-  Pending = '#1677ff',
-  Processing = '#1677fe',
-  Successful = '#52c41a',
-  Failed = '#ff4d4f',
-  Canceled = '#80868b'
-}
+import { State } from '@/enums/state'
 
 export type StateType = keyof typeof State
 
diff --git a/bigtop-manager-ui/src/api/service/types.ts 
b/bigtop-manager-ui/src/api/service/types.ts
index cd7996a..d6a5d0d 100644
--- a/bigtop-manager-ui/src/api/service/types.ts
+++ b/bigtop-manager-ui/src/api/service/types.ts
@@ -35,11 +35,3 @@ export interface QuickLinkVO {
   displayName: string
   url: string
 }
-
-export enum StateColor {
-  Installed = '#2196F3',
-  Started = '#52c41a',
-  Maintained = '#d9d9d9',
-  Uninstalled = '#f0f964',
-  Stopped = '#ff4d4f'
-}
diff --git a/bigtop-manager-ui/src/components/icons/carbon-language.vue 
b/bigtop-manager-ui/src/assets/images/svg/carbon-language.svg
similarity index 61%
rename from bigtop-manager-ui/src/components/icons/carbon-language.vue
rename to bigtop-manager-ui/src/assets/images/svg/carbon-language.svg
index 933621a..3398805 100644
--- a/bigtop-manager-ui/src/components/icons/carbon-language.vue
+++ b/bigtop-manager-ui/src/assets/images/svg/carbon-language.svg
@@ -1,3 +1,4 @@
+<?xml version="1.0"?>
 <!--
   ~ Licensed to the Apache Software Foundation (ASF) under one
   ~ or more contributor license agreements.  See the NOTICE file
@@ -16,17 +17,7 @@
   ~ specific language governing permissions and limitations
   ~ under the License.
 -->
-
-<template>
-  <svg
-    xmlns="http://www.w3.org/2000/svg";
-    width="1em"
-    height="1em"
-    viewBox="0 0 32 32"
-  >
-    <path
-      fill="currentColor"
-      d="M27.85 29H30l-6-15h-2.35l-6 
15h2.15l1.6-4h6.85zm-7.65-6l2.62-6.56L25.45 23zM18 7V5h-7V2H9v3H2v2h10.74a14.71 
14.71 0 0 1-3.19 6.18A13.5 13.5 0 0 1 7.26 9h-2.1a16.47 16.47 0 0 0 3 
5.58A16.84 16.84 0 0 1 3 18l.75 1.86A18.47 18.47 0 0 0 9.53 16a16.92 16.92 0 0 
0 5.76 3.84L16 18a14.48 14.48 0 0 1-5.12-3.37A17.64 17.64 0 0 0 14.8 7z"
-    />
-  </svg>
-</template>
+<svg xmlns="http://www.w3.org/2000/svg"; width="1em" height="1em" viewBox="0 0 
32 32">
+  <path fill="currentColor"
+    d="M27.85 29H30l-6-15h-2.35l-6 15h2.15l1.6-4h6.85zm-7.65-6l2.62-6.56L25.45 
23zM18 7V5h-7V2H9v3H2v2h10.74a14.71 14.71 0 0 1-3.19 6.18A13.5 13.5 0 0 1 7.26 
9h-2.1a16.47 16.47 0 0 0 3 5.58A16.84 16.84 0 0 1 3 18l.75 1.86A18.47 18.47 0 0 
0 9.53 16a16.92 16.92 0 0 0 5.76 3.84L16 18a14.48 14.48 0 0 1-5.12-3.37A17.64 
17.64 0 0 0 14.8 7z" />
+</svg>
\ No newline at end of file
diff --git a/bigtop-manager-ui/src/components/icons/circle-filled.vue 
b/bigtop-manager-ui/src/assets/images/svg/circle-filled.svg
similarity index 75%
rename from bigtop-manager-ui/src/components/icons/circle-filled.vue
rename to bigtop-manager-ui/src/assets/images/svg/circle-filled.svg
index 15c8ff2..abc9dc7 100644
--- a/bigtop-manager-ui/src/components/icons/circle-filled.vue
+++ b/bigtop-manager-ui/src/assets/images/svg/circle-filled.svg
@@ -1,3 +1,4 @@
+<?xml version="1.0" ?>
 <!--
   ~ Licensed to the Apache Software Foundation (ASF) under one
   ~ or more contributor license agreements.  See the NOTICE file
@@ -16,17 +17,6 @@
   ~ specific language governing permissions and limitations
   ~ under the License.
 -->
-
-<template>
-  <svg
-    xmlns="http://www.w3.org/2000/svg";
-    width="1em"
-    height="1em"
-    viewBox="0 0 1024 1024"
-  >
-    <path
-      fill="currentColor"
-      d="M512 16C238 16 16 238 16 512s222 496 496 496 496-222 496-496S786 16 
512 16z"
-    />
-  </svg>
-</template>
+<svg xmlns="http://www.w3.org/2000/svg"; width="1em" height="1em" viewBox="0 0 
1024 1024">
+  <path fill="currentColor" d="M512 16C238 16 16 238 16 512s222 496 496 496 
496-222 496-496S786 16 512 16z" />
+</svg>
\ No newline at end of file
diff --git a/bigtop-manager-ui/src/assets/images/svg/plus.svg 
b/bigtop-manager-ui/src/assets/images/svg/plus.svg
index b464b3f..c5a659b 100644
--- a/bigtop-manager-ui/src/assets/images/svg/plus.svg
+++ b/bigtop-manager-ui/src/assets/images/svg/plus.svg
@@ -17,9 +17,9 @@
   ~ specific language governing permissions and limitations
   ~ under the License.
 -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd";><svg t="1722394248439"
-  class="icon" viewBox="0 0 1024 1024" version="1.1" 
xmlns="http://www.w3.org/2000/svg"; p-id="1160"
-  xmlns:xlink="http://www.w3.org/1999/xlink"; width="200" height="200">
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd";>
+<svg t="1722394248439" class="icon" viewBox="0 0 1024 1024" version="1.1" 
xmlns="http://www.w3.org/2000/svg"; p-id="1160"
+  xmlns:xlink="http://www.w3.org/1999/xlink"; width="1em" height="1em">
   <path
     d="M512 853.333333c-25.6 
0-42.666667-17.066667-42.666667-42.666666V213.333333c0-25.6 17.066667-42.666667 
42.666667-42.666666s42.666667 17.066667 42.666667 42.666666v597.333334c0 
25.6-17.066667 42.666667-42.666667 42.666666z"
     p-id="1161"></path>
diff --git a/bigtop-manager-ui/src/assets/images/svg/restart.svg 
b/bigtop-manager-ui/src/assets/images/svg/restart.svg
index 1a23acd..bfc4bea 100644
--- a/bigtop-manager-ui/src/assets/images/svg/restart.svg
+++ b/bigtop-manager-ui/src/assets/images/svg/restart.svg
@@ -17,9 +17,9 @@
   ~ specific language governing permissions and limitations
   ~ under the License.
 -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd";><svg t="1722394200089"
-  class="icon" viewBox="0 0 1024 1024" version="1.1" 
xmlns="http://www.w3.org/2000/svg"; p-id="1652"
-  xmlns:xlink="http://www.w3.org/1999/xlink"; width="200" height="200">
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd";>
+<svg t="1722394200089" class="icon" viewBox="0 0 1024 1024" version="1.1" 
xmlns="http://www.w3.org/2000/svg"; p-id="1652"
+  xmlns:xlink="http://www.w3.org/1999/xlink"; width="1em" height="1em">
   <path
     d="M512 213.333333V42.666667L298.666667 256l213.333333 
213.333333V298.666667c141.226667 0 256 114.773333 256 256s-114.773333 256-256 
256-256-114.773333-256-256H170.666667c0 188.586667 152.746667 341.333333 
341.333333 341.333333s341.333333-152.746667 
341.333333-341.333333-152.746667-341.333333-341.333333-341.333334z"
     fill="#333333" p-id="1653"></path>
diff --git a/bigtop-manager-ui/src/components/icons/square-filled.vue 
b/bigtop-manager-ui/src/assets/images/svg/square-filled.svg
similarity index 63%
rename from bigtop-manager-ui/src/components/icons/square-filled.vue
rename to bigtop-manager-ui/src/assets/images/svg/square-filled.svg
index 68397ec..197f3b4 100644
--- a/bigtop-manager-ui/src/components/icons/square-filled.vue
+++ b/bigtop-manager-ui/src/assets/images/svg/square-filled.svg
@@ -1,3 +1,4 @@
+<?xml version="1.0"?>
 <!--
   ~ Licensed to the Apache Software Foundation (ASF) under one
   ~ or more contributor license agreements.  See the NOTICE file
@@ -16,17 +17,7 @@
   ~ specific language governing permissions and limitations
   ~ under the License.
 -->
-
-<template>
-  <svg
-    xmlns="http://www.w3.org/2000/svg";
-    width="1em"
-    height="1em"
-    viewBox="0 0 1024 1024"
-  >
-    <path
-      fill="currentColor"
-      d="M252.068571 906.496h520.283429c89.581714 0 134.144-44.562286 
134.144-132.845714V250.331429c0-88.283429-44.562286-132.845714-134.144-132.845715H252.068571c-89.142857
 0-134.582857 44.141714-134.582857 132.845715V773.668571c0 88.704 45.44 
132.845714 134.582857 132.845715z"
-    />
-  </svg>
-</template>
+<svg xmlns="http://www.w3.org/2000/svg"; width="1em" height="1em" viewBox="0 0 
1024 1024">
+  <path fill="currentColor"
+    d="M252.068571 906.496h520.283429c89.581714 0 134.144-44.562286 
134.144-132.845714V250.331429c0-88.283429-44.562286-132.845714-134.144-132.845715H252.068571c-89.142857
 0-134.582857 44.141714-134.582857 132.845715V773.668571c0 88.704 45.44 
132.845714 134.582857 132.845715z" />
+</svg>
\ No newline at end of file
diff --git a/bigtop-manager-ui/src/assets/images/svg/start.svg 
b/bigtop-manager-ui/src/assets/images/svg/start.svg
index 0366b3a..360c7ff 100644
--- a/bigtop-manager-ui/src/assets/images/svg/start.svg
+++ b/bigtop-manager-ui/src/assets/images/svg/start.svg
@@ -17,9 +17,9 @@
   ~ specific language governing permissions and limitations
   ~ under the License.
 -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd";><svg t="1722396617369"
-  class="icon" viewBox="0 0 1024 1024" version="1.1" 
xmlns="http://www.w3.org/2000/svg"; p-id="1344"
-  xmlns:xlink="http://www.w3.org/1999/xlink"; width="200" height="200">
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd";>
+<svg t="1722396617369" class="icon" viewBox="0 0 1024 1024" version="1.1" 
xmlns="http://www.w3.org/2000/svg"; p-id="1344"
+  xmlns:xlink="http://www.w3.org/1999/xlink"; width="1em" height="1em">
   <path
     d="M810.4 465.8 253.6 134.4c-6.8-4-13.8-6.4-21.8-6.4-21.8 0-39.6 18-39.6 
40L192 168l0 688 0.2 0c0 22 17.8 40 39.6 40 8.2 0 15-2.8 
22.4-6.8l556.2-331c13.2-11 21.6-27.6 21.6-46.2C832 493.4 823.6 477 810.4 465.8z"
     p-id="1345"></path>
diff --git a/bigtop-manager-ui/src/assets/images/svg/stop.svg 
b/bigtop-manager-ui/src/assets/images/svg/stop.svg
index 477e203..734b035 100644
--- a/bigtop-manager-ui/src/assets/images/svg/stop.svg
+++ b/bigtop-manager-ui/src/assets/images/svg/stop.svg
@@ -17,9 +17,9 @@
   ~ specific language governing permissions and limitations
   ~ under the License.
 -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd";><svg t="1722394157011"
-  class="icon" viewBox="0 0 1024 1024" version="1.1" 
xmlns="http://www.w3.org/2000/svg"; p-id="1130"
-  xmlns:xlink="http://www.w3.org/1999/xlink"; width="200" height="200">
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd";>
+<svg t="1722394157011" class="icon" viewBox="0 0 1024 1024" version="1.1" 
xmlns="http://www.w3.org/2000/svg"; p-id="1130"
+  xmlns:xlink="http://www.w3.org/1999/xlink"; width="1em" height="1em">
   <path
     d="M256 192h512c35.392 0 64 28.608 64 64v512c0 35.392-28.608 64-64 
64H256c-35.392 0-64-28.608-64-64V256c0-35.392 28.608-64 64-64z"
     fill="#333333" p-id="1131"></path>
diff --git a/bigtop-manager-ui/src/components/alert-info/index.vue 
b/bigtop-manager-ui/src/components/alert-info/index.vue
index 6f9c4f6..093bf30 100644
--- a/bigtop-manager-ui/src/components/alert-info/index.vue
+++ b/bigtop-manager-ui/src/components/alert-info/index.vue
@@ -20,7 +20,6 @@
 <script setup lang="ts">
   import { BellOutlined } from '@ant-design/icons-vue'
   import { computed, ref } from 'vue'
-  import DotState from '@/components/dot-state/index.vue'
   import dayjs from 'dayjs'
   import customParseFormat from 'dayjs/plugin/customParseFormat'
   const visible = ref(false)
@@ -88,7 +87,7 @@
     font-size: 16px;
     cursor: pointer;
     border-radius: 50%;
-    @include flex(center, center);
+    @include flexbox($justify: center, $align: center);
 
     &:hover {
       background-color: var(--hover-color);
@@ -110,7 +109,7 @@
     li {
       padding: 10px;
       cursor: pointer;
-      @include flex(center, null);
+      @include flexbox($justify: center);
       &:hover {
         background-color: var(--hover-color);
       }
diff --git a/bigtop-manager-ui/src/components/cluster-create/choose-stack.vue 
b/bigtop-manager-ui/src/components/cluster-create/choose-stack.vue
index 61f689e..11aee37 100644
--- a/bigtop-manager-ui/src/components/cluster-create/choose-stack.vue
+++ b/bigtop-manager-ui/src/components/cluster-create/choose-stack.vue
@@ -105,10 +105,7 @@
 
 <style scoped lang="scss">
   .container {
-    display: flex;
-    flex-direction: column;
-    justify-content: start;
-    align-items: center;
+    @include flexbox($direction: column, $justify: start, $align: center);
     align-content: center;
     height: 100%;
 
diff --git a/bigtop-manager-ui/src/components/cluster-create/finish.vue 
b/bigtop-manager-ui/src/components/cluster-create/finish.vue
index 2e60680..53d6573 100644
--- a/bigtop-manager-ui/src/components/cluster-create/finish.vue
+++ b/bigtop-manager-ui/src/components/cluster-create/finish.vue
@@ -48,10 +48,7 @@
 
 <style scoped lang="scss">
   .container {
-    display: flex;
-    flex-direction: column;
-    justify-content: center;
-    align-items: center;
+    @include flexbox($direction: column, $justify: center, $align: center);
     align-content: center;
     height: 100%;
   }
diff --git a/bigtop-manager-ui/src/components/cluster-create/index.vue 
b/bigtop-manager-ui/src/components/cluster-create/index.vue
index b119036..6c9e2bd 100644
--- a/bigtop-manager-ui/src/components/cluster-create/index.vue
+++ b/bigtop-manager-ui/src/components/cluster-create/index.vue
@@ -219,10 +219,7 @@
 
 <style scoped lang="scss">
   .container {
-    display: flex;
-    flex-direction: row;
-    justify-content: center;
-    align-items: center;
+    @include flexbox($direction: row, $justify: center, $align: center);
 
     .step {
       width: 15%;
diff --git a/bigtop-manager-ui/src/components/cluster-create/install.vue 
b/bigtop-manager-ui/src/components/cluster-create/install.vue
index 4a0aef6..6f31ebe 100644
--- a/bigtop-manager-ui/src/components/cluster-create/install.vue
+++ b/bigtop-manager-ui/src/components/cluster-create/install.vue
@@ -137,10 +137,7 @@
 
 <style scoped lang="scss">
   .container {
-    display: flex;
-    flex-direction: column;
-    justify-content: start;
-    align-items: center;
+    @include flexbox($direction: column, $justify: start, $align: center);
     align-content: center;
     height: 100%;
 
diff --git 
a/bigtop-manager-ui/src/components/cluster-create/set-cluster-name.vue 
b/bigtop-manager-ui/src/components/cluster-create/set-cluster-name.vue
index 9e43ace..d17f402 100644
--- a/bigtop-manager-ui/src/components/cluster-create/set-cluster-name.vue
+++ b/bigtop-manager-ui/src/components/cluster-create/set-cluster-name.vue
@@ -73,10 +73,7 @@
 
 <style scoped lang="scss">
   .container {
-    display: flex;
-    flex-direction: column;
-    justify-content: center;
-    align-items: center;
+    @include flexbox($direction: column, $justify: center, $align: center);
     align-content: center;
     height: 100%;
   }
diff --git a/bigtop-manager-ui/src/components/cluster-create/set-hosts.vue 
b/bigtop-manager-ui/src/components/cluster-create/set-hosts.vue
index 4443fd5..2842238 100644
--- a/bigtop-manager-ui/src/components/cluster-create/set-hosts.vue
+++ b/bigtop-manager-ui/src/components/cluster-create/set-hosts.vue
@@ -162,10 +162,7 @@
 </template>
 <style scoped lang="scss">
   .container {
-    display: flex;
-    flex-direction: column;
-    justify-content: start;
-    align-items: center;
+    @include flexbox($direction: column, $justify: start, $align: center);
     height: 100%;
 
     .title {
diff --git a/bigtop-manager-ui/src/components/cluster-create/set-repository.vue 
b/bigtop-manager-ui/src/components/cluster-create/set-repository.vue
index 5711eb6..873c673 100644
--- a/bigtop-manager-ui/src/components/cluster-create/set-repository.vue
+++ b/bigtop-manager-ui/src/components/cluster-create/set-repository.vue
@@ -115,10 +115,7 @@
 
 <style scoped lang="scss">
   .container {
-    display: flex;
-    flex-direction: column;
-    justify-content: start;
-    align-items: center;
+    @include flexbox($direction: column, $justify: start, $align: center);
     align-content: center;
     height: 100%;
 
@@ -132,10 +129,8 @@
       position: relative;
 
       .editable-cell-input-wrapper {
+        @include flexbox($justify: center, $align: center);
         padding-right: 24px;
-        display: flex;
-        justify-content: center;
-        align-items: center;
 
         .editable-cell-icon-check {
           position: absolute;
@@ -151,9 +146,7 @@
       }
 
       .editable-cell-text-wrapper {
-        display: flex;
-        justify-content: center;
-        align-items: center;
+        @include flexbox($justify: center, $align: center);
         padding: 5px 24px 5px 5px;
 
         .editable-cell-icon {
diff --git a/bigtop-manager-ui/src/components/cluster-info/index.vue 
b/bigtop-manager-ui/src/components/cluster-info/index.vue
index 9ed9537..d35026c 100644
--- a/bigtop-manager-ui/src/components/cluster-info/index.vue
+++ b/bigtop-manager-ui/src/components/cluster-info/index.vue
@@ -51,9 +51,7 @@
 
 <style lang="scss" scoped>
   .icon {
-    display: flex;
-    justify-content: center;
-    align-items: center;
+    @include flexbox($justify: center, $align: center);
     padding: 0 0.5rem;
     border-radius: 6px;
     cursor: pointer;
diff --git a/bigtop-manager-ui/src/components/dot-state/index.vue 
b/bigtop-manager-ui/src/components/common/dot-state/index.vue
similarity index 93%
rename from bigtop-manager-ui/src/components/dot-state/index.vue
rename to bigtop-manager-ui/src/components/common/dot-state/index.vue
index 83dd890..f0f6ae7 100644
--- a/bigtop-manager-ui/src/components/dot-state/index.vue
+++ b/bigtop-manager-ui/src/components/common/dot-state/index.vue
@@ -60,6 +60,12 @@
 </script>
 
 <style lang="scss" scoped>
+  @mixin dot($width, $height, $color) {
+    width: $width;
+    height: $height;
+    background: $color;
+    border-radius: 50%;
+  }
   .dot-state {
     &::before {
       content: '';
diff --git a/bigtop-manager-ui/src/assets/styles/variable.scss 
b/bigtop-manager-ui/src/components/common/index.ts
similarity index 72%
copy from bigtop-manager-ui/src/assets/styles/variable.scss
copy to bigtop-manager-ui/src/components/common/index.ts
index a99e822..ef7b24c 100644
--- a/bigtop-manager-ui/src/assets/styles/variable.scss
+++ b/bigtop-manager-ui/src/components/common/index.ts
@@ -1,4 +1,4 @@
-/*!
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -17,15 +17,21 @@
  * under the License.
  */
 
-@mixin dot($width, $height, $color) {
-  width: $width;
-  height: $height;
-  background: $color;
-  border-radius: 50%;
+import type { App } from 'vue'
+import SvgIcon from './svg-icon/index.vue'
+import DotState from './dot-state/index.vue'
+
+const comments = {
+  SvgIcon,
+  DotState
+}
+
+const install = (app: App) => {
+  for (const [key, comp] of Object.entries(comments)) {
+    app.component(key, comp)
+  }
 }
 
-@mixin flex($row: null, $col: null) {
-  display: flex;
-  justify-content: $row;
-  align-items: $col;
+export default {
+  install
 }
diff --git a/bigtop-manager-ui/src/components/svg-icon/svg-icon.vue 
b/bigtop-manager-ui/src/components/common/svg-icon/index.vue
similarity index 98%
rename from bigtop-manager-ui/src/components/svg-icon/svg-icon.vue
rename to bigtop-manager-ui/src/components/common/svg-icon/index.vue
index 4255c8f..e0710e1 100644
--- a/bigtop-manager-ui/src/components/svg-icon/svg-icon.vue
+++ b/bigtop-manager-ui/src/components/common/svg-icon/index.vue
@@ -52,7 +52,7 @@
   .svg-icon {
     height: 1.2em;
     width: 1.2em;
-    margin-right: 6px;
+    margin: 0 6px;
     vertical-align: -0.25em;
     overflow: hidden;
   }
diff --git a/bigtop-manager-ui/src/components/dashboard/index.vue 
b/bigtop-manager-ui/src/components/dashboard/index.vue
index 9b6eff3..cd440c2 100644
--- a/bigtop-manager-ui/src/components/dashboard/index.vue
+++ b/bigtop-manager-ui/src/components/dashboard/index.vue
@@ -293,9 +293,7 @@
     min-height: 540px;
 
     .statistics {
-      display: flex;
-      justify-content: space-between;
-      align-items: center;
+      @include flexbox($justify: space-between, $align: center);
 
       .card {
         width: 20%;
@@ -311,9 +309,7 @@
     }
 
     .charts {
-      display: flex;
-      justify-content: space-between;
-      align-items: center;
+      @include flexbox($justify: space-between, $align: center);
 
       .chart {
         width: 45%;
@@ -322,9 +318,7 @@
     }
 
     .host-link {
-      display: flex;
-      flex-direction: column;
-      align-items: end;
+      @include flexbox($direction: column, $align: end);
       margin-bottom: 1.5rem;
     }
   }
diff --git a/bigtop-manager-ui/src/components/dashboard/tips.vue 
b/bigtop-manager-ui/src/components/dashboard/tips.vue
index 39dba8e..5d67ba7 100644
--- a/bigtop-manager-ui/src/components/dashboard/tips.vue
+++ b/bigtop-manager-ui/src/components/dashboard/tips.vue
@@ -42,10 +42,7 @@
 
 <style scoped lang="scss">
   .tour {
-    display: flex;
-    flex-direction: column;
-    justify-content: center;
-    align-items: center;
+    @include flexbox($direction: column, $justify: center, $align: center);
     align-content: center;
     min-height: 540px;
   }
diff --git a/bigtop-manager-ui/src/components/job-info/custom-progress.vue 
b/bigtop-manager-ui/src/components/job-info/custom-progress.vue
index d03409f..dba159a 100644
--- a/bigtop-manager-ui/src/components/job-info/custom-progress.vue
+++ b/bigtop-manager-ui/src/components/job-info/custom-progress.vue
@@ -19,7 +19,7 @@
 
 <script lang="ts" setup>
   import { computed } from 'vue'
-  import { State } from '@/api/job/types'
+  import { State } from '@/enums/state.ts'
   import {
     MinusCircleFilled as Canceled,
     CheckCircleFilled as Successful,
diff --git a/bigtop-manager-ui/src/components/job-info/index.vue 
b/bigtop-manager-ui/src/components/job-info/index.vue
index b4ebdac..1d902ee 100644
--- a/bigtop-manager-ui/src/components/job-info/index.vue
+++ b/bigtop-manager-ui/src/components/job-info/index.vue
@@ -41,9 +41,7 @@
 
 <style lang="scss" scoped>
   .icon {
-    display: flex;
-    justify-content: center;
-    align-items: center;
+    @include flexbox($justify: center, $align: center);
     font-size: 16px;
     cursor: pointer;
     border-radius: 50%;
diff --git a/bigtop-manager-ui/src/components/job-info/job.vue 
b/bigtop-manager-ui/src/components/job-info/job.vue
index 24a158a..af0a6f1 100644
--- a/bigtop-manager-ui/src/components/job-info/job.vue
+++ b/bigtop-manager-ui/src/components/job-info/job.vue
@@ -18,17 +18,11 @@
 -->
 
 <script setup lang="ts">
-  import { ref, watch, computed, toRefs, nextTick } from 'vue'
-  import { useClusterStore } from '@/store/cluster'
+  import { ref, watch, computed, toRefs, nextTick, watchEffect } from 'vue'
+  import { useClusterStore } from '@/store/cluster/index.ts'
   import { storeToRefs } from 'pinia'
-  import {
-    JobVO,
-    StageVO,
-    TaskVO,
-    OuterData,
-    Pagination
-  } from '@/api/job/types.ts'
-  import { getJobs } from '@/api/job'
+  import { JobVO, StageVO, TaskVO, OuterData } from '@/api/job/types.ts'
+  import { getJobs } from '@/api/job/index.ts'
   import { Pausable, useIntervalFn } from '@vueuse/core'
   import { MONITOR_SCHEDULE_INTERVAL } from '@/utils/constant.ts'
   import CustomProgress from './custom-progress.vue'
@@ -107,26 +101,22 @@
   })
 
   watch(visible, (val) => {
-    if (val) {
-      resetState()
-      loading.value = true
-      checkDataOrigin(outerData.value ? true : false)
-    }
+    if (!val) return
+    resetState()
+    loading.value = true
+    checkDataOrigin(outerData.value ? true : false)
   })
 
-  watch(outerData, (val) => {
-    if (!val) return
-    jobs.value = val.meta as any
+  watchEffect(() => {
+    if (!outerData.value) return
+    jobs.value = outerData.value.meta as any
   })
 
-  watch(jobs, (val) => {
-    if (val) {
-      const len = breadcrumbs.value.length
-      const idxId = breadcrumbs.value[len - 1]?.id
-      if (idxId) {
-        stages.value = val.find((v: JobVO) => v.id == idxId)?.stages || []
-      }
-    }
+  watchEffect(() => {
+    if (!jobs.value) return
+    const id = breadcrumbs.value[breadcrumbs.value.length - 1]?.id
+    id &&
+      (stages.value = jobs.value.find((v: JobVO) => v.id == id)?.stages || [])
   })
 
   const checkDataOrigin = (isOuter = false) => {
@@ -154,12 +144,12 @@
 
   const getJobsList = async () => {
     try {
-      const params = {
-        pageNum: paginationProps.value.current,
-        pageSize: paginationProps.value.pageSize,
+      const { current, pageSize } = paginationProps.value
+      const { content, total } = await getJobs(clusterId.value, {
+        pageNum: current as number,
+        pageSize: pageSize as number,
         sort: 'desc'
-      } as Pagination
-      const { content, total } = await getJobs(clusterId.value, params)
+      })
       jobs.value = content.map((v) => ({ ...v }))
       paginationProps.value.total = total
       loading.value = false
@@ -293,10 +283,7 @@
 
 <style lang="scss" scoped>
   .footer-btns {
-    display: flex;
-    align-items: center;
-    justify-content: space-between;
-    flex-wrap: wrap;
+    @include flexbox($justify: space-between, $wrap: wrap, $align: center);
   }
 
   .logs-wait-msg {
diff --git a/bigtop-manager-ui/src/components/job-info/stage.vue 
b/bigtop-manager-ui/src/components/job-info/stage.vue
index 183bfac..30a2691 100644
--- a/bigtop-manager-ui/src/components/job-info/stage.vue
+++ b/bigtop-manager-ui/src/components/job-info/stage.vue
@@ -19,7 +19,7 @@
 
 <script lang="ts" setup>
   import { StageVO } from '@/api/job/types.ts'
-  import { watch } from 'vue'
+  import { watchEffect } from 'vue'
   import CustomProgress from './custom-progress.vue'
   import useBaseTable from '@/composables/use-base-table'
   import type { TableColumnType } from 'ant-design-vue'
@@ -33,20 +33,12 @@
   const baseTable = useBaseTable<StageVO>(props.columns, props.stages)
   const { dataSource, columnsProp, loading, paginationProps, onChange } =
     baseTable
-  watch(
-    () => props.stages,
-    (val) => {
-      if (val.length == 0) {
-        loading.value = true
-      } else {
-        loading.value = false
-      }
-    },
-    {
-      immediate: true,
-      deep: true
-    }
-  )
+
+  watchEffect(() => {
+    dataSource.value = props.stages
+    loading.value = false
+  })
+
   const emits = defineEmits(['clickStage'])
   const clickStage = (record: StageVO) => {
     emits('clickStage', record)
diff --git a/bigtop-manager-ui/src/components/job-info/task-log.vue 
b/bigtop-manager-ui/src/components/job-info/task-log.vue
index 36f1bfd..d41e122 100644
--- a/bigtop-manager-ui/src/components/job-info/task-log.vue
+++ b/bigtop-manager-ui/src/components/job-info/task-log.vue
@@ -120,14 +120,12 @@
 <style scoped lang="scss">
   .logs {
     height: 50vh;
-    display: flex;
-    flex-direction: column;
+    @include flexbox($direction: column);
     &_header {
       font-size: 16px;
       font-weight: 600;
       margin: 0 0 10px 0;
-      display: flex;
-      justify-content: space-between;
+      @include flexbox($justify: space-between);
 
       .copy-button {
         margin-left: 3px;
diff --git a/bigtop-manager-ui/src/components/job-info/task.vue 
b/bigtop-manager-ui/src/components/job-info/task.vue
index 084c607..b3757b8 100644
--- a/bigtop-manager-ui/src/components/job-info/task.vue
+++ b/bigtop-manager-ui/src/components/job-info/task.vue
@@ -18,7 +18,8 @@
 -->
 
 <script setup lang="ts">
-  import { TaskVO, State } from '@/api/job/types.ts'
+  import { TaskVO } from '@/api/job/types.ts'
+  import { State } from '@/enums/state'
   import useBaseTable from '@/composables/use-base-table'
   import type { TableColumnType } from 'ant-design-vue'
 
diff --git a/bigtop-manager-ui/src/components/select-lang/index.vue 
b/bigtop-manager-ui/src/components/select-lang/index.vue
index 215b580..f426cd9 100644
--- a/bigtop-manager-ui/src/components/select-lang/index.vue
+++ b/bigtop-manager-ui/src/components/select-lang/index.vue
@@ -20,7 +20,6 @@
 <script setup lang="ts">
   import { useLocaleStore } from '@/store/locale'
   import { Locale } from '@/store/locale/types.ts'
-  import CarbonLanguage from '@/components/icons/carbon-language.vue'
   import { storeToRefs } from 'pinia'
 
   const localeStore = useLocaleStore()
@@ -34,7 +33,7 @@
 <template>
   <a-dropdown placement="bottom">
     <div class="icon">
-      <carbon-language />
+      <svg-icon name="carbon-language" style="width: 1em; height: 1em" />
     </div>
     <template #overlay>
       <a-menu :selected-keys="[locale]" @click="handleClick">
@@ -57,9 +56,7 @@
 
 <style lang="scss" scoped>
   .icon {
-    display: flex;
-    justify-content: center;
-    align-items: center;
+    @include flexbox($justify: center, $align: center);
     font-size: 16px;
     cursor: pointer;
     border-radius: 50%;
diff --git a/bigtop-manager-ui/src/components/service-add/assign-components.vue 
b/bigtop-manager-ui/src/components/service-add/assign-components.vue
index 6563b65..27dd993 100644
--- a/bigtop-manager-ui/src/components/service-add/assign-components.vue
+++ b/bigtop-manager-ui/src/components/service-add/assign-components.vue
@@ -191,12 +191,12 @@
 
 <style scoped lang="scss">
   .container {
-    display: flex;
-    flex-direction: column;
-    justify-content: start;
-    align-items: center;
+    @include flexbox(
+      $direction: column,
+      $justify: space-between,
+      $align: center
+    );
     align-content: center;
-    height: 100%;
 
     .title {
       font-size: 1.5rem;
diff --git a/bigtop-manager-ui/src/components/service-add/choose-services.vue 
b/bigtop-manager-ui/src/components/service-add/choose-services.vue
index 93251c8..3426c74 100644
--- a/bigtop-manager-ui/src/components/service-add/choose-services.vue
+++ b/bigtop-manager-ui/src/components/service-add/choose-services.vue
@@ -154,10 +154,7 @@
 
 <style scoped lang="scss">
   .container {
-    display: flex;
-    flex-direction: column;
-    justify-content: start;
-    align-items: center;
+    @include flexbox($direction: column, $justify: start, $align: center);
     align-content: center;
     height: 100%;
 
diff --git 
a/bigtop-manager-ui/src/components/service-add/configure-services.vue 
b/bigtop-manager-ui/src/components/service-add/configure-services.vue
index cca1aa8..7a0982f 100644
--- a/bigtop-manager-ui/src/components/service-add/configure-services.vue
+++ b/bigtop-manager-ui/src/components/service-add/configure-services.vue
@@ -119,10 +119,7 @@
 
 <style scoped lang="scss">
   .container {
-    display: flex;
-    flex-direction: column;
-    justify-content: start;
-    align-items: center;
+    @include flexbox($direction: column, $justify: start, $align: center);
     align-content: center;
     height: 100%;
 
@@ -135,16 +132,13 @@
     .content {
       width: 100%;
       height: 100%;
-      margin-top: 1rem;
       overflow-y: auto;
 
       .panel {
         text-align: start;
 
         .config-item {
-          display: flex;
-          align-items: center;
-          justify-content: start;
+          @include flexbox($justify: start, $align: center);
           margin-bottom: 1rem;
 
           .config-item-key {
diff --git a/bigtop-manager-ui/src/components/service-add/finish.vue 
b/bigtop-manager-ui/src/components/service-add/finish.vue
index 760813a..1083874 100644
--- a/bigtop-manager-ui/src/components/service-add/finish.vue
+++ b/bigtop-manager-ui/src/components/service-add/finish.vue
@@ -48,10 +48,7 @@
 
 <style scoped lang="scss">
   .container {
-    display: flex;
-    flex-direction: column;
-    justify-content: center;
-    align-items: center;
+    @include flexbox($direction: column, $justify: center, $align: center);
     align-content: center;
     height: 100%;
   }
diff --git a/bigtop-manager-ui/src/components/service-add/index.vue 
b/bigtop-manager-ui/src/components/service-add/index.vue
index 8bcc063..9862d77 100644
--- a/bigtop-manager-ui/src/components/service-add/index.vue
+++ b/bigtop-manager-ui/src/components/service-add/index.vue
@@ -259,10 +259,7 @@
 
 <style scoped lang="scss">
   .container {
-    display: flex;
-    flex-direction: row;
-    justify-content: center;
-    align-items: center;
+    @include flexbox($direction: row, $justify: center, $align: center);
 
     .step {
       width: 15%;
diff --git a/bigtop-manager-ui/src/components/service-add/install.vue 
b/bigtop-manager-ui/src/components/service-add/install.vue
index cfc7cf6..0a3eb53 100644
--- a/bigtop-manager-ui/src/components/service-add/install.vue
+++ b/bigtop-manager-ui/src/components/service-add/install.vue
@@ -166,10 +166,7 @@
 
 <style scoped lang="scss">
   .container {
-    display: flex;
-    flex-direction: column;
-    justify-content: start;
-    align-items: center;
+    @include flexbox($direction: column, $justify: start, $align: center);
     align-content: center;
     height: 100%;
 
@@ -180,9 +177,8 @@
     }
 
     .retry {
-      display: flex;
-      flex-direction: row;
       justify-content: end;
+      @include flexbox($direction: row, $justify: end, $align: center);
       margin: 0 1rem 1rem 0;
       width: 100%;
 
diff --git a/bigtop-manager-ui/src/components/user-avatar/index.vue 
b/bigtop-manager-ui/src/components/user-avatar/index.vue
index 9c53acd..2d17fc2 100644
--- a/bigtop-manager-ui/src/components/user-avatar/index.vue
+++ b/bigtop-manager-ui/src/components/user-avatar/index.vue
@@ -86,9 +86,7 @@
 
 <style lang="scss" scoped>
   .icon {
-    display: flex;
-    justify-content: center;
-    align-items: center;
+    @include flexbox($justify: center, $align: center);
     font-size: 16px;
     padding: 0 0.5rem;
     border-radius: 6px;
diff --git a/bigtop-manager-ui/src/utils/enums.ts 
b/bigtop-manager-ui/src/enums/state.ts
similarity index 73%
copy from bigtop-manager-ui/src/utils/enums.ts
copy to bigtop-manager-ui/src/enums/state.ts
index 9064f6d..d209626 100644
--- a/bigtop-manager-ui/src/utils/enums.ts
+++ b/bigtop-manager-ui/src/enums/state.ts
@@ -23,3 +23,25 @@ export type MaintainState =
   | 'Maintained'
   | 'Started'
   | 'Stopped'
+
+export enum State {
+  Pending = '#1677ff',
+  Processing = '#1677fe',
+  Successful = '#52c41a',
+  Failed = '#ff4d4f',
+  Canceled = '#80868b'
+}
+
+export enum CommonState {
+  normal = '#52c41a',
+  abnormal = '#ff4d4f',
+  maintained = '#d9d9d9'
+}
+
+export enum CurrState {
+  Installed,
+  Started,
+  Maintained,
+  Uninstalled,
+  Stopped
+}
diff --git a/bigtop-manager-ui/src/layouts/header.vue 
b/bigtop-manager-ui/src/layouts/header.vue
index 456a1d3..85969ec 100644
--- a/bigtop-manager-ui/src/layouts/header.vue
+++ b/bigtop-manager-ui/src/layouts/header.vue
@@ -57,9 +57,7 @@
 
 <style scoped lang="scss">
   .header {
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
+    @include flexbox($justify: space-between, $align: center);
     background: #fff;
     padding: 0 1rem;
     height: 48px;
@@ -71,9 +69,7 @@
     }
 
     .header-right {
-      display: flex;
-      justify-content: end;
-      align-items: center;
+      @include flexbox($justify: end, $align: center);
     }
   }
 </style>
diff --git a/bigtop-manager-ui/src/layouts/sider.vue 
b/bigtop-manager-ui/src/layouts/sider.vue
index a14c234..1681360 100644
--- a/bigtop-manager-ui/src/layouts/sider.vue
+++ b/bigtop-manager-ui/src/layouts/sider.vue
@@ -111,9 +111,7 @@
 <style scoped lang="scss">
   .sider {
     .header {
-      display: flex;
-      justify-content: center;
-      align-items: center;
+      @include flexbox($justify: center, $align: center);
       height: 32px;
       margin: 1rem;
 
@@ -131,9 +129,7 @@
     }
 
     .menu-title-flex {
-      display: flex;
-      justify-content: space-between;
-      align-items: center;
+      @include flexbox($justify: space-between, $align: center);
     }
   }
 </style>
diff --git a/bigtop-manager-ui/src/main.ts b/bigtop-manager-ui/src/main.ts
index 119e53a..92dcea5 100644
--- a/bigtop-manager-ui/src/main.ts
+++ b/bigtop-manager-ui/src/main.ts
@@ -19,23 +19,12 @@
 
 import { createApp } from 'vue'
 import App from './App.vue'
-import Antd, { message } from 'ant-design-vue'
-import router from '@/router'
-import pinia from '@/store'
-import i18n from '@/locales'
+import plugins from '@/plugins'
 
-import '@/assets/styles/default.scss'
+import '@/styles/default.css'
 import 'ant-design-vue/dist/reset.css'
 import 'virtual:svg-icons-register'
-import SvgIcon from '@/components/svg-icon/svg-icon.vue'
 
 const app = createApp(App)
-
-app.use(Antd)
-app.use(router)
-app.use(pinia)
-app.use(i18n)
-
-message.config({ maxCount: 1 })
-app.component('svg-icon', SvgIcon)
+app.use(plugins, { antdMessageMaxCount: 1 })
 app.mount('#app')
diff --git a/bigtop-manager-ui/src/pages/hosts/index.vue 
b/bigtop-manager-ui/src/pages/hosts/index.vue
index cb8ac79..afb0691 100644
--- a/bigtop-manager-ui/src/pages/hosts/index.vue
+++ b/bigtop-manager-ui/src/pages/hosts/index.vue
@@ -30,6 +30,7 @@
   } from '@ant-design/icons-vue'
   import { useHostStore } from '@/store/host'
   import { DEFAULT_PAGE_SIZE } from '@/utils/constant.ts'
+  import { CommonState, CurrState } from '@/enums/state'
 
   const hostStore = useHostStore()
   const { hosts, loading } = storeToRefs(hostStore)
@@ -90,6 +91,15 @@
     }
   ]
 
+  const stateColor = (type: keyof typeof CurrState) => {
+    if ([0, 1].includes(CurrState[type])) {
+      return CommonState['normal']
+    } else if (CurrState[type] === 2) {
+      return CommonState['maintained']
+    }
+    return CommonState['abnormal']
+  }
+
   const displayKeys = (selectedRowKeys: string[]) => {
     message.info('This is a normal message' + selectedRowKeys)
   }
@@ -121,11 +131,11 @@
           <template #overlay>
             <a-menu>
               <a-menu-item @click="displayKeys(selectedRowKeys)">
-                <CaretRightFilled />
+                <caret-right-filled />
                 {{ $t('hosts.host_restart') }}
               </a-menu-item>
               <a-menu-item @click="displayKeys(selectedRowKeys)">
-                <StopFilled />
+                <stop-filled />
                 {{ $t('hosts.host_stop') }}
               </a-menu-item>
             </a-menu>
@@ -155,15 +165,15 @@
       </template>
       <template #bodyCell="{ column, text }">
         <template v-if="column.dataIndex === 'state'">
-          <CheckCircleTwoTone
-            v-if="text === 'INSTALLED'"
-            two-tone-color="#52c41a"
+          <check-circle-two-tone
+            v-if="text === 'Started'"
+            :two-tone-color="stateColor(text)"
           />
-          <MinusCircleTwoTone
-            v-else-if="text === 'MAINTAINED'"
-            two-tone-color="orange"
+          <minus-circle-two-tone
+            v-else-if="text === 'Maintained'"
+            :two-tone-color="stateColor(text)"
           />
-          <CloseCircleTwoTone v-else two-tone-color="red" />
+          <close-circle-two-tone v-else :two-tone-color="stateColor(text)" />
         </template>
         <template v-if="column.dataIndex === 'hostname'">
           <router-link to="/dashboard"> {{ text }} </router-link>
diff --git a/bigtop-manager-ui/src/pages/login/index.vue 
b/bigtop-manager-ui/src/pages/login/index.vue
index 2f603d8..c5f5477 100644
--- a/bigtop-manager-ui/src/pages/login/index.vue
+++ b/bigtop-manager-ui/src/pages/login/index.vue
@@ -173,8 +173,7 @@
 
 <style scoped lang="scss">
   .login-container {
-    display: flex;
-    flex-direction: column;
+    @include flexbox($direction: column);
     height: 100vh;
     overflow: auto;
     background-color: var(--bg-color-container);
@@ -185,9 +184,7 @@
       left: 0;
       right: 0;
       bottom: 0;
-      display: flex;
-      align-items: center;
-      justify-content: center;
+      @include flexbox($justify: center, $align: center);
 
       .login-main {
         border-radius: 0.25rem;
@@ -202,15 +199,11 @@
         }
 
         .login-header {
-          display: flex;
-          align-items: center;
-          justify-content: space-between;
+          @include flexbox($justify: space-between, $align: center);
           padding: 0.5rem 1rem;
 
           .login-header-left {
-            display: flex;
-            align-items: center;
-            justify-content: space-between;
+            @include flexbox($justify: space-between, $align: center);
 
             .login-title {
               font-weight: 600;
@@ -251,11 +244,9 @@
           }
 
           .login-body-left {
-            display: flex;
+            @include flexbox($justify: center, $align: center);
             min-height: 520px;
             width: 700px;
-            justify-content: center;
-            align-items: center;
             background-color: var(--bg-color-container);
 
             @media (max-width: 991px) {
@@ -277,10 +268,11 @@
           }
 
           .login-body-right {
-            display: flex;
-            justify-content: center;
-            align-items: center;
-            flex-direction: column;
+            @include flexbox(
+              $direction: column,
+              $justify: center,
+              $align: center
+            );
             width: 335px;
             padding: 0 1.25rem;
 
@@ -298,9 +290,7 @@
             .login-body-right-form {
               .login-body-right-form-bottom {
                 margin-bottom: 24px;
-                display: flex;
-                justify-content: space-between;
-                align-items: center;
+                @include flexbox($justify: space-between, $align: center);
               }
             }
           }
diff --git a/bigtop-manager-ui/src/pages/service/index.vue 
b/bigtop-manager-ui/src/pages/service/index.vue
index be03f3e..4115852 100644
--- a/bigtop-manager-ui/src/pages/service/index.vue
+++ b/bigtop-manager-ui/src/pages/service/index.vue
@@ -30,6 +30,7 @@
   } from 'vue'
 
   import { useI18n } from 'vue-i18n'
+  import { CommonState, CurrState } from '@/enums/state'
   import { type SelectProps, type MenuProps, Modal } from 'ant-design-vue'
   import { DownOutlined, QuestionCircleOutlined } from '@ant-design/icons-vue'
 
@@ -38,12 +39,11 @@
   import { useServiceStore } from '@/store/service'
   import { useClusterStore } from '@/store/cluster'
 
-  import { type ServiceVO, StateColor } from '@/api/service/types.ts'
+  import type { ServiceVO } from '@/api/service/types.ts'
   import { ServiceConfigVO, TypeConfigVO } from '@/api/config/types.ts'
   import { HostComponentVO } from '@/api/component/types.ts'
   import { execCommand } from '@/api/command'
 
-  import DotState from '@/components/dot-state/index.vue'
   import Job from '@/components/job-info/job.vue'
 
   interface Menu {
@@ -120,6 +120,7 @@
     (params) => {
       serviceName.value = params.serviceName as string
       initServiceMeta()
+      componentStore.resumeIntervalFn()
     }
   )
 
@@ -209,6 +210,15 @@
     initConfigVersion.value = serviceConfigDesc.value?.[0].value as number
   }
 
+  const stateColor = (type: keyof typeof CurrState) => {
+    if ([0, 1].includes(CurrState[type])) {
+      return CommonState['normal']
+    } else if (CurrState[type] === 2) {
+      return CommonState['maintained']
+    }
+    return CommonState['abnormal']
+  }
+
   onMounted(() => {
     initServiceMeta()
     componentStore.resumeIntervalFn()
@@ -266,7 +276,7 @@
                   <footer>
                     <div class="comp-state">
                       <dot-state
-                        :color="StateColor[item.state]"
+                        :color="stateColor(item.state)"
                         class="dot-rest"
                       >
                         <span class="comp-state-text">{{ item.state }}</span>
@@ -346,7 +356,7 @@
 
 <style scoped lang="scss">
   .dot-rest {
-    @include flex(center, center);
+    @include flexbox($justify: center, $align: center);
   }
 
   .summary-layout {
@@ -390,8 +400,7 @@
     }
 
     .summary-ctx {
-      display: flex;
-      flex-wrap: wrap;
+      @include flexbox($wrap: wrap);
       box-sizing: border-box;
 
       .card {
@@ -414,11 +423,11 @@
           font-size: 1.06rem;
           font-weight: 600;
           margin-bottom: 0.375rem;
-          @include flex(space-between, center);
+          @include flexbox($justify: space-between, $align: center);
         }
 
         .comp-info {
-          @include flex(center);
+          @include flexbox($justify: center);
           margin-bottom: 1.25rem;
 
           .host-name {
@@ -431,8 +440,7 @@
         }
 
         footer {
-          @include flex(space-between, center);
-
+          @include flexbox($justify: space-between, $align: center);
           .comp-state {
             font-size: 1rem;
             align-items: flex-end;
@@ -447,10 +455,11 @@
   }
 
   .container {
-    display: flex;
-    flex-direction: column;
-    justify-content: start;
-    align-items: center;
+    @include flexbox(
+      $direction: column,
+      $justify: space-between,
+      $align: center
+    );
     align-content: center;
     height: 100%;
 
@@ -470,9 +479,7 @@
         text-align: start;
 
         .config-item {
-          display: flex;
-          align-items: center;
-          justify-content: start;
+          @include flexbox($justify: start, $align: center);
           margin-bottom: 1rem;
 
           .config-item-key {
diff --git a/bigtop-manager-ui/src/main.ts 
b/bigtop-manager-ui/src/plugins/index.ts
similarity index 70%
copy from bigtop-manager-ui/src/main.ts
copy to bigtop-manager-ui/src/plugins/index.ts
index 119e53a..a6a8089 100644
--- a/bigtop-manager-ui/src/main.ts
+++ b/bigtop-manager-ui/src/plugins/index.ts
@@ -17,25 +17,24 @@
  * under the License.
  */
 
-import { createApp } from 'vue'
-import App from './App.vue'
-import Antd, { message } from 'ant-design-vue'
+import type { App } from 'vue'
 import router from '@/router'
 import pinia from '@/store'
 import i18n from '@/locales'
+import Antd, { message } from 'ant-design-vue'
+import components from '@/components/common'
 
-import '@/assets/styles/default.scss'
-import 'ant-design-vue/dist/reset.css'
-import 'virtual:svg-icons-register'
-import SvgIcon from '@/components/svg-icon/svg-icon.vue'
-
-const app = createApp(App)
-
-app.use(Antd)
-app.use(router)
-app.use(pinia)
-app.use(i18n)
+interface PluginOptions {
+  antdMessageMaxCount: number
+}
 
-message.config({ maxCount: 1 })
-app.component('svg-icon', SvgIcon)
-app.mount('#app')
+export default {
+  install(app: App, options: PluginOptions) {
+    app.use(Antd)
+    app.use(router)
+    app.use(pinia)
+    app.use(i18n)
+    app.use(components)
+    message.config({ maxCount: options.antdMessageMaxCount })
+  }
+}
diff --git a/bigtop-manager-ui/src/store/user/index.ts 
b/bigtop-manager-ui/src/store/user/index.ts
index e2f88c5..27ad861 100644
--- a/bigtop-manager-ui/src/store/user/index.ts
+++ b/bigtop-manager-ui/src/store/user/index.ts
@@ -26,7 +26,7 @@ import { initialRoutes, layoutRoutes } from 
'@/router/routes.ts'
 import { useClusterStore } from '@/store/cluster'
 import { RouteRecordRaw } from 'vue-router'
 import { useServiceStore } from '@/store/service'
-import CircleFilled from '@/components/icons/circle-filled.vue'
+import SvgIcon from '@/components/common/svg-icon/index.vue'
 
 export const useUserStore = defineStore(
   'user',
@@ -56,8 +56,9 @@ export const useUserStore = defineStore(
               key: service.serviceName,
               to: '/services/' + service.serviceName,
               title: service.displayName,
-              icon: h(CircleFilled, {
-                style: `font-size: 8px; color: ${color}; margin-right: 0.5rem;`
+              icon: h(SvgIcon, {
+                name: 'circle-filled',
+                style: `font-size: 8px; color: ${color}; 
vertical-align:inherit`
               })
             })
           })
diff --git a/bigtop-manager-ui/src/assets/styles/default.scss 
b/bigtop-manager-ui/src/styles/default.css
similarity index 69%
copy from bigtop-manager-ui/src/assets/styles/default.scss
copy to bigtop-manager-ui/src/styles/default.css
index d154b44..dcd70d8 100644
--- a/bigtop-manager-ui/src/assets/styles/default.scss
+++ b/bigtop-manager-ui/src/styles/default.css
@@ -1,4 +1,4 @@
-/*!
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -17,6 +17,8 @@
  * under the License.
  */
 
+@import './scrollbar.css';
+
 * {
   outline: 0;
 }
@@ -54,31 +56,3 @@ html {
   bottom: 0;
   left: 0;
 }
-
-::-webkit-scrollbar {
-  width: 6px;
-  height: 6px;
-}
-::scrollbar {
-  width: 6px;
-  height: 6px;
-}
-::-webkit-scrollbar-track {
-  display: none;
-  -webkit-box-shadow: inset 0 0 2px #b18933;
-}
-::scrollbar-track {
-  display: none;
-  -webkit-box-shadow: inset 0 0 2px #98f165;
-  border-radius: 1px;
-}
-::-webkit-scrollbar-thumb {
-  border-radius: 10px;
-  background: #c1c1c1;
-  -webkit-box-shadow: inset 0 0 1px rgba(0, 102, 102, 0.144);
-}
-::scrollbar-thumb {
-  border-radius: 10px;
-  background: #c1c1c1;
-  -webkit-box-shadow: inset 0 0 1px rgba(0, 102, 102, 0.144);
-}
diff --git a/bigtop-manager-ui/src/utils/enums.ts 
b/bigtop-manager-ui/src/styles/function.scss
similarity index 87%
copy from bigtop-manager-ui/src/utils/enums.ts
copy to bigtop-manager-ui/src/styles/function.scss
index 9064f6d..61f5439 100644
--- a/bigtop-manager-ui/src/utils/enums.ts
+++ b/bigtop-manager-ui/src/styles/function.scss
@@ -15,11 +15,4 @@
  * KIND, either express or implied.  See the License for the
  * specific language governing permissions and limitations
  * under the License.
- */
-
-export type MaintainState =
-  | 'Uninstalled'
-  | 'Installed'
-  | 'Maintained'
-  | 'Started'
-  | 'Stopped'
+ */
\ No newline at end of file
diff --git a/bigtop-manager-ui/src/utils/enums.ts 
b/bigtop-manager-ui/src/styles/main.scss
similarity index 88%
copy from bigtop-manager-ui/src/utils/enums.ts
copy to bigtop-manager-ui/src/styles/main.scss
index 9064f6d..0dbde25 100644
--- a/bigtop-manager-ui/src/utils/enums.ts
+++ b/bigtop-manager-ui/src/styles/main.scss
@@ -17,9 +17,6 @@
  * under the License.
  */
 
-export type MaintainState =
-  | 'Uninstalled'
-  | 'Installed'
-  | 'Maintained'
-  | 'Started'
-  | 'Stopped'
+@import '@/styles/function.scss';
+@import '@/styles/variables.scss';
+@import '@/styles/mixins.scss'
\ No newline at end of file
diff --git a/bigtop-manager-ui/src/assets/styles/variable.scss 
b/bigtop-manager-ui/src/styles/mixins.scss
similarity index 79%
rename from bigtop-manager-ui/src/assets/styles/variable.scss
rename to bigtop-manager-ui/src/styles/mixins.scss
index a99e822..6bf0486 100644
--- a/bigtop-manager-ui/src/assets/styles/variable.scss
+++ b/bigtop-manager-ui/src/styles/mixins.scss
@@ -1,4 +1,4 @@
-/*!
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -17,15 +17,10 @@
  * under the License.
  */
 
-@mixin dot($width, $height, $color) {
-  width: $width;
-  height: $height;
-  background: $color;
-  border-radius: 50%;
-}
-
-@mixin flex($row: null, $col: null) {
+@mixin flexbox($direction: null, $wrap: null, $justify: null, $align: null) {
   display: flex;
-  justify-content: $row;
-  align-items: $col;
-}
+  flex-direction: $direction;
+  flex-wrap: $wrap;
+  justify-content: $justify;
+  align-items: $align;
+}
\ No newline at end of file
diff --git a/bigtop-manager-ui/src/assets/styles/default.scss 
b/bigtop-manager-ui/src/styles/scrollbar.css
similarity index 73%
rename from bigtop-manager-ui/src/assets/styles/default.scss
rename to bigtop-manager-ui/src/styles/scrollbar.css
index d154b44..095c5d4 100644
--- a/bigtop-manager-ui/src/assets/styles/default.scss
+++ b/bigtop-manager-ui/src/styles/scrollbar.css
@@ -1,4 +1,4 @@
-/*!
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -16,45 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
-* {
-  outline: 0;
-}
-
-html {
-  --text-color: rgba(0, 0, 0, 0.85);
-  --text-color-desc: rgba(0, 0, 0, 0.45);
-  --bg-color: #fff;
-  --hover-color: rgba(0, 0, 0, 0.05);
-  --bg-color-container: #f0f2f5;
-  --c-shadow: 2px 0 8px 0 rgba(29, 35, 41, 0.05);
-}
-
-.m-0 {
-  margin: 0;
-}
-
-.p-0 {
-  padding: 0;
-}
-
-.hidden {
-  display: none;
-}
-
-.ant-table-body {
-  overflow-y: auto !important;
-}
-
-#app {
-  width: 100%;
-  box-sizing: border-box;
-  position: fixed;
-  top: 0;
-  bottom: 0;
-  left: 0;
-}
-
+ 
 ::-webkit-scrollbar {
   width: 6px;
   height: 6px;
diff --git a/bigtop-manager-ui/src/utils/enums.ts 
b/bigtop-manager-ui/src/styles/variables.scss
similarity index 87%
rename from bigtop-manager-ui/src/utils/enums.ts
rename to bigtop-manager-ui/src/styles/variables.scss
index 9064f6d..61f5439 100644
--- a/bigtop-manager-ui/src/utils/enums.ts
+++ b/bigtop-manager-ui/src/styles/variables.scss
@@ -15,11 +15,4 @@
  * KIND, either express or implied.  See the License for the
  * specific language governing permissions and limitations
  * under the License.
- */
-
-export type MaintainState =
-  | 'Uninstalled'
-  | 'Installed'
-  | 'Maintained'
-  | 'Started'
-  | 'Stopped'
+ */
\ No newline at end of file
diff --git a/bigtop-manager-ui/vite.config.ts b/bigtop-manager-ui/vite.config.ts
index f310ea9..ff4ffe6 100644
--- a/bigtop-manager-ui/vite.config.ts
+++ b/bigtop-manager-ui/vite.config.ts
@@ -47,7 +47,7 @@ export default defineConfig(({ mode }) => {
     css: {
       preprocessorOptions: {
         scss: {
-          additionalData: '@import "@/assets/styles/variable.scss";'
+          additionalData: '@import "@/styles/main.scss";'
         }
       }
     },

Reply via email to