@spacego/fe-components 0.0.6 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,28 +1,29 @@
1
- import { jsxs as t, jsx as e } from "react/jsx-runtime";
2
- import { useSelector as p } from "@spacego/zustand";
3
- import { useState as u } from "react";
4
- import { FaCheck as g } from "react-icons/fa6";
5
- import { IoMoon as v } from "react-icons/io5";
6
- import { LuPalette as N } from "react-icons/lu";
7
- import { MdWbSunny as b } from "react-icons/md";
8
- import { Outlet as y } from "react-router-dom";
9
- import w from "../../assets/svg/login-view.svg.js";
1
+ import { jsxs as t, jsx as e, Fragment as v } from "react/jsx-runtime";
2
+ import { useSelector as N } from "@spacego/zustand";
3
+ import { useState as b } from "react";
4
+ import { FaCheck as y } from "react-icons/fa6";
5
+ import { IoMoon as w } from "react-icons/io5";
6
+ import { LuPalette as k } from "react-icons/lu";
7
+ import { MdWbSunny as T } from "react-icons/md";
8
+ import { Outlet as E } from "react-router-dom";
9
+ import C from "../../assets/svg/login-view.svg.js";
10
10
  import "@ant-design/icons";
11
- import { applyThemeWithTransition as k } from "../../utils/theme.js";
11
+ import { applyThemeWithTransition as L } from "../../utils/theme.js";
12
12
  import "../../store/modules/layout-config.store.js";
13
- import { useThemeStore as T } from "../../store/modules/theme.store.js";
14
- import { THEME_COLORS as E } from "../../config/theme.js";
15
- import { useGlobal as C } from "../context/context.js";
13
+ import { useThemeStore as M } from "../../store/modules/theme.store.js";
14
+ import { THEME_COLORS as j } from "../../config/theme.js";
15
+ import { useGlobal as O } from "../context/context.js";
16
+ import "nprogress";
16
17
  /* empty css */
17
18
  import "../basics-layout/index.js";
18
19
  import "antd";
19
20
  import "@spacego/turbo-utils";
20
21
  /* empty css */
21
- function J() {
22
- const { appName: s, logo: n } = C(), { theme: o, themeColor: m, TOGGLE_THEME: c, SET_THEME_COLOR: f } = T(p(["theme", "themeColor", "TOGGLE_THEME", "SET_THEME_COLOR"])), [a, i] = u(!1), d = (r) => {
23
- const l = r.currentTarget.getBoundingClientRect(), h = l.left + l.width / 2, x = l.top + l.height / 2;
24
- k(o === "light" ? "dark" : "light", h, x).then(() => {
25
- c();
22
+ function Z() {
23
+ const { appName: n, logo: c, description: m, descriptionDetail: f, copyright: a } = O(), { theme: s, themeColor: d, TOGGLE_THEME: h, SET_THEME_COLOR: x } = M(N(["theme", "themeColor", "TOGGLE_THEME", "SET_THEME_COLOR"])), [o, i] = b(!1), p = (r) => {
24
+ const l = r.currentTarget.getBoundingClientRect(), u = l.left + l.width / 2, g = l.top + l.height / 2;
25
+ L(s === "light" ? "dark" : "light", u, g).then(() => {
26
+ h();
26
27
  });
27
28
  };
28
29
  return /* @__PURE__ */ t("div", { className: "flex min-h-full flex-1 select-none overflow-x-hidden", children: [
@@ -36,21 +37,21 @@ function J() {
36
37
  {
37
38
  className: "flex overflow-hidden items-center gap-3 whitespace-nowrap origin-right",
38
39
  style: {
39
- width: a ? "224px" : "0",
40
+ width: o ? "224px" : "0",
40
41
  // 7个颜色(20px) + 6个gap(12px) = 140 + 72 = 212px
41
- transform: `scaleX(${a ? 1 : 0})`,
42
- opacity: a ? 1 : 0,
42
+ transform: `scaleX(${o ? 1 : 0})`,
43
+ opacity: o ? 1 : 0,
43
44
  transition: "transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1), width 0.3s cubic-bezier(0.4, 0, 0.2, 1)"
44
45
  },
45
46
  onMouseEnter: () => i(!0),
46
47
  onMouseLeave: () => i(!1),
47
- children: E.map((r) => /* @__PURE__ */ e(
48
+ children: j.map((r) => /* @__PURE__ */ e(
48
49
  "div",
49
50
  {
50
51
  className: "w-5 h-5 rounded-full flex items-center justify-center cursor-pointer hover-scale-animation shrink-0",
51
52
  style: { backgroundColor: r },
52
- onClick: () => f(r),
53
- children: m === r && /* @__PURE__ */ e(g, { className: "size-[10px] text-white" })
53
+ onClick: () => x(r),
54
+ children: d === r && /* @__PURE__ */ e(y, { className: "size-[10px] text-white" })
54
55
  },
55
56
  r
56
57
  ))
@@ -63,35 +64,35 @@ function J() {
63
64
  className: "w-8 h-8 flex items-center justify-center cursor-pointer hover-scale-animation",
64
65
  onMouseEnter: () => i(!0),
65
66
  onMouseLeave: () => i(!1),
66
- children: /* @__PURE__ */ e(N, { className: "h-[16px] w-[16px] text-(--color-primary)" })
67
+ children: /* @__PURE__ */ e(k, { className: "h-[16px] w-[16px] text-(--color-primary)" })
67
68
  }
68
69
  ),
69
- /* @__PURE__ */ e("div", { className: "w-8 h-8 flex items-center justify-center cursor-pointer hover-scale-animation", onClick: d, children: o === "dark" ? /* @__PURE__ */ e(b, { className: "h-[18px] w-[18px]" }) : /* @__PURE__ */ e(v, { className: "h-[18px] w-[18px]" }) })
70
+ /* @__PURE__ */ e("div", { className: "w-8 h-8 flex items-center justify-center cursor-pointer hover-scale-animation", onClick: p, children: s === "dark" ? /* @__PURE__ */ e(T, { className: "h-[18px] w-[18px]" }) : /* @__PURE__ */ e(w, { className: "h-[18px] w-[18px]" }) })
70
71
  ] })
71
72
  ]
72
73
  }
73
74
  ),
74
75
  /* @__PURE__ */ e("div", { className: "absolute left-0 top-0 z-10 flex flex-1", children: /* @__PURE__ */ e("div", { className: "text-foreground lg:text-foreground ml-4 mt-4 flex flex-1 items-center sm:left-6 sm:top-6", children: /* @__PURE__ */ t("div", { className: "m-0 text-xl font-medium flex items-center gap-2 text-[#333] dark:text-[#f2f2f2]", children: [
75
- n,
76
- s
76
+ c,
77
+ n
77
78
  ] }) }) }),
78
79
  /* @__PURE__ */ e("div", { className: "relative hidden w-0 flex-1 lg:block", children: /* @__PURE__ */ t("div", { className: "bg-background-deep absolute inset-0 h-full w-full dark:bg-[#070709]!", children: [
79
80
  /* @__PURE__ */ e("div", { className: "login-background absolute left-0 top-0 size-full" }),
80
81
  /* @__PURE__ */ t("div", { className: "flex flex-col items-center justify-center mr-20 h-full -enter-x", children: [
81
- /* @__PURE__ */ e(w, { className: "animate-float h-64 w-2/5" }),
82
- /* @__PURE__ */ e("div", { className: "text-1xl mt-6 font-sans lg:text-2xl text-[#333] dark:text-[#f2f2f2]", children: "企业级的大型中后台管理系统" }),
83
- /* @__PURE__ */ e("div", { className: "mt-2 text-[#323639] dark:text-[#a1a1aa]", children: "高效、安全、易用的管理系统" })
82
+ /* @__PURE__ */ e(C, { className: "animate-float h-64 w-2/5" }),
83
+ /* @__PURE__ */ e("div", { className: "text-1xl mt-6 font-sans lg:text-2xl text-[#333] dark:text-[#f2f2f2]", children: m }),
84
+ /* @__PURE__ */ e("div", { className: "mt-2 text-[#323639] dark:text-[#a1a1aa]", children: f })
84
85
  ] })
85
86
  ] }) }),
86
87
  /* @__PURE__ */ t("div", { className: "login-side flex flex-col items-center justify-center relative px-6 py-10 lg:flex-initial lg:px-8 min-h-full w-2/5 flex-1 dark:bg-[#14161a]", children: [
87
- /* @__PURE__ */ e(y, {}),
88
- /* @__PURE__ */ e("div", { className: "text-[#71717a] absolute bottom-3 flex text-center text-xs", children: /* @__PURE__ */ t("div", { className: "text-md flex justify-center mt-4", children: [
88
+ /* @__PURE__ */ e(E, {}),
89
+ /* @__PURE__ */ e("div", { className: "text-[#71717a] absolute bottom-3 flex text-center text-xs", children: /* @__PURE__ */ e("div", { className: "text-md flex justify-center mt-4", children: a || /* @__PURE__ */ t(v, { children: [
89
90
  "Copyright © 2024 ",
90
91
  /* @__PURE__ */ e("a", { href: "https://dshuais.netlify.app/", className: "text-(--color-primary)! hover:text-(--hover-primary-color)! mx-1", target: "_blank", children: "DuShuai" })
91
- ] }) })
92
+ ] }) }) })
92
93
  ] })
93
94
  ] });
94
95
  }
95
96
  export {
96
- J as default
97
+ Z as default
97
98
  };
@@ -78,7 +78,7 @@ function $(i) {
78
78
  children: a === "light" ? /* @__PURE__ */ e(A, { className: "text-lg" }) : /* @__PURE__ */ e(I, { className: "text-lg" })
79
79
  }
80
80
  ),
81
- p && /* @__PURE__ */ e("div", { className: "cursor-pointer w-8 h-8 text-(--icon-text-color) hover:text-primary transition-colors p-2 rounded-full hover:bg-(--hover-background-color) hover-scale-animation", children: /* @__PURE__ */ e(
81
+ p && /* @__PURE__ */ e(
82
82
  B,
83
83
  {
84
84
  placement: "bottom",
@@ -88,9 +88,9 @@ function $(i) {
88
88
  container: "p-0!"
89
89
  },
90
90
  content: g,
91
- children: /* @__PURE__ */ e(C, { dot: !0, color: "var(--color-primary)", children: /* @__PURE__ */ e(D, {}) })
91
+ children: /* @__PURE__ */ e("div", { className: "cursor-pointer w-8 h-8 text-(--icon-text-color) hover:text-primary transition-colors p-2 rounded-full hover:bg-(--hover-background-color) hover-scale-animation", children: /* @__PURE__ */ e(C, { dot: !0, color: "var(--color-primary)", children: /* @__PURE__ */ e(D, {}) }) })
92
92
  }
93
- ) }),
93
+ ),
94
94
  /* @__PURE__ */ e(M, { menu: { items: N }, placement: "bottomRight", arrow: !0, children: /* @__PURE__ */ t("div", { className: "flex items-center gap-2 cursor-pointer hover:bg-(--hover-background-color) px-2 py-1 rounded-full transition-all border border-transparent", children: [
95
95
  /* @__PURE__ */ e(
96
96
  j,
@@ -1,4 +1,4 @@
1
- import { jsx as e, jsxs as p } from "react/jsx-runtime";
1
+ import { jsx as e, jsxs as a } from "react/jsx-runtime";
2
2
  import { Layout as y, Menu as x } from "antd";
3
3
  import { useState as g, useEffect as v, useMemo as k } from "react";
4
4
  import { MdOutlineKeyboardDoubleArrowRight as K, MdOutlineKeyboardDoubleArrowLeft as w } from "react-icons/md";
@@ -6,22 +6,22 @@ import { renderIcon as M } from "../../../../utils/icon.js";
6
6
  import "../../../../store/modules/layout-config.store.js";
7
7
  import "../../../../store/modules/theme.store.js";
8
8
  const { Sider: N } = y;
9
- function D(a) {
9
+ function D(s) {
10
10
  const {
11
11
  collapsed: l,
12
12
  menus: n = [],
13
- activeKey: s,
13
+ activeKey: d,
14
14
  openKeys: o = [],
15
- onMenuClick: d,
16
- onCollapse: c,
17
- beforeRender: f,
18
- afterRender: m
19
- } = a, [u, i] = g(o);
15
+ onMenuClick: c,
16
+ onCollapse: f,
17
+ beforeRender: m,
18
+ afterRender: u
19
+ } = s, [b, i] = g(o);
20
20
  v(() => {
21
21
  o.length > 0 && i(o);
22
22
  }, [o]);
23
- const b = k(() => {
24
- const t = (h) => h.map((r) => ({
23
+ const h = k(() => {
24
+ const t = (p) => p.map((r) => ({
25
25
  key: r.key,
26
26
  label: r.label,
27
27
  icon: M(r.icon),
@@ -38,30 +38,32 @@ function D(a) {
38
38
  width: 224,
39
39
  className: "layout-sidebar border-r border-(--border-color) bg-(--global-background-color)! h-full relative",
40
40
  theme: "light",
41
- children: /* @__PURE__ */ p("div", { className: "h-full flex flex-col", children: [
42
- f,
41
+ children: /* @__PURE__ */ a("div", { className: "h-full flex flex-col", children: [
42
+ m,
43
43
  /* @__PURE__ */ e("div", { className: "flex-1 overflow-y-auto overflow-x-hidden py-2 custom-scrollbar", children: /* @__PURE__ */ e(
44
44
  x,
45
45
  {
46
46
  mode: "inline",
47
- selectedKeys: [s],
48
- openKeys: u,
47
+ selectedKeys: [d],
48
+ openKeys: b,
49
49
  onOpenChange: i,
50
- items: b,
51
- onClick: ({ key: t }) => d(t),
50
+ items: h,
51
+ onClick: ({ key: t }) => c(t),
52
52
  className: "sidebar-menu border-none",
53
53
  inlineIndent: 16
54
54
  }
55
55
  ) }),
56
- m,
57
- /* @__PURE__ */ e("div", { className: "flex items-center justify-start pl-4 mb-2", children: /* @__PURE__ */ e(
58
- "div",
59
- {
60
- onClick: () => c(!l),
61
- className: "text-gray-500 dark:text-[#a1a1a2] text-xl hover:text-[#323639] dark:hover:text-[#f0f0f0] hover:bg-[#dfe3e4] dark:hover:bg-[#333538] transition-all duration-300 w-7 h-7 rounded-sm bg-[#f4f4f5] dark:bg-[#292a2d] cursor-pointer flex items-center justify-center",
62
- children: l ? /* @__PURE__ */ e(K, {}) : /* @__PURE__ */ e(w, {})
63
- }
64
- ) })
56
+ /* @__PURE__ */ a("div", { className: "flex items-center justify-between pl-4 mb-2", children: [
57
+ /* @__PURE__ */ e(
58
+ "div",
59
+ {
60
+ onClick: () => f(!l),
61
+ className: "text-gray-500 dark:text-[#a1a1a2] text-xl hover:text-[#323639] dark:hover:text-[#f0f0f0] hover:bg-[#dfe3e4] dark:hover:bg-[#333538] transition-all duration-300 w-7 h-7 rounded-sm bg-[#f4f4f5] dark:bg-[#292a2d] cursor-pointer flex items-center justify-center",
62
+ children: l ? /* @__PURE__ */ e(K, {}) : /* @__PURE__ */ e(w, {})
63
+ }
64
+ ),
65
+ u
66
+ ] })
65
67
  ] })
66
68
  }
67
69
  );
@@ -4,6 +4,7 @@ import { Layout as g, Spin as Z } from "antd";
4
4
  import { useMemo as d, useEffect as $ } from "react";
5
5
  import { useLocation as ee, useNavigate as te, Outlet as oe } from "react-router-dom";
6
6
  import { useAuth as ne } from "../../hooks/use-auth.hook.js";
7
+ import "nprogress";
7
8
  import { useLayoutConfigStore as re } from "../../store/modules/layout-config.store.js";
8
9
  import { useThemeStore as ae } from "../../store/modules/theme.store.js";
9
10
  import { useGlobal as se } from "../context/context.js";
@@ -14,7 +15,7 @@ import { findRouteByPath as b, findMenuParentKeys as ue, buildRouteMap as fe, fi
14
15
  /* empty css */
15
16
  /* empty css */
16
17
  const { Content: he } = g;
17
- function Se() {
18
+ function Ke() {
18
19
  const r = ee(), m = te(), { logout: R } = ne(), {
19
20
  token: T,
20
21
  menus: a = [],
@@ -133,5 +134,5 @@ function Se() {
133
134
  ] });
134
135
  }
135
136
  export {
136
- Se as default
137
+ Ke as default
137
138
  };
@@ -1,6 +1,6 @@
1
1
  import { jsx as o } from "react/jsx-runtime";
2
- import { useSelector as n } from "@spacego/zustand";
3
- import { theme as i, ConfigProvider as c, Spin as u } from "antd";
2
+ import { useSelector as i } from "@spacego/zustand";
3
+ import { theme as n, ConfigProvider as c, Spin as u } from "antd";
4
4
  import { useMemo as g } from "react";
5
5
  import "@ant-design/icons";
6
6
  import { getRealTheme as d } from "../utils/theme.js";
@@ -10,32 +10,35 @@ import p from "../config/theme.js";
10
10
  import "react-router-dom";
11
11
  import "./context/context.js";
12
12
  import k from "./context/global-context.provider.js";
13
- import L from "./auth-layout/index.js";
14
- import M from "./basics-layout/index.js";
15
- import T from "./blank-layout/index.js";
13
+ import { useNProgress as L } from "../hooks/use-nprogress.hook.js";
14
+ import M from "./auth-layout/index.js";
15
+ import T from "./basics-layout/index.js";
16
+ import b from "./blank-layout/index.js";
16
17
  import "@spacego/turbo-utils";
17
18
  /* empty css */
18
- function E(a) {
19
- const { layoutType: e, ...s } = a, { loadingConfig: l } = C(n(["loadingConfig"])), { theme: t, themeColor: r } = y(n(["theme", "themeColor"])), f = g(() => {
20
- const h = d(t);
19
+ function I(a) {
20
+ const { layoutType: e, ...s } = a, { loadingConfig: l } = C(i(["loadingConfig"])), { theme: r, themeColor: t } = y(i(["theme", "themeColor"]));
21
+ L();
22
+ const f = g(() => {
23
+ const h = d(r);
21
24
  return {
22
25
  cssVar: {
23
26
  prefix: "ant"
24
27
  },
25
28
  // 启用 CSS 变量模式,生成 --ant-color-primary 等变量
26
- algorithm: h === "dark" ? i.darkAlgorithm : i.defaultAlgorithm,
29
+ algorithm: h === "dark" ? n.darkAlgorithm : n.defaultAlgorithm,
27
30
  token: {
28
- colorPrimary: r,
31
+ colorPrimary: t,
29
32
  ...p.token
30
33
  },
31
34
  components: {
32
35
  ...p.components
33
36
  }
34
37
  };
35
- }, [t, r]), m = (/* @__PURE__ */ new Map([
36
- ["blank", T],
37
- ["basic", M],
38
- ["auth", L]
38
+ }, [r, t]), m = (/* @__PURE__ */ new Map([
39
+ ["blank", b],
40
+ ["basic", T],
41
+ ["auth", M]
39
42
  ])).get(e);
40
43
  return /* @__PURE__ */ o(c, { theme: f, children: /* @__PURE__ */ o(k, { ...s, children: /* @__PURE__ */ o(
41
44
  u,
@@ -47,5 +50,5 @@ function E(a) {
47
50
  ) }) });
48
51
  }
49
52
  export {
50
- E as default
53
+ I as default
51
54
  };
@@ -0,0 +1,14 @@
1
+ import t from "nprogress";
2
+ import { useEffect as e } from "react";
3
+ import { useLocation as r, useNavigation as s } from "react-router-dom";
4
+ function f() {
5
+ const n = r(), o = s();
6
+ t.configure({ showSpinner: !0 }), e(() => (t.done(), () => {
7
+ t.start();
8
+ }), [n.pathname]), e(() => {
9
+ o.state === "loading" || o.state === "submitting" ? t.start() : t.done();
10
+ }, [o.state]);
11
+ }
12
+ export {
13
+ f as useNProgress
14
+ };
package/lib/index.css CHANGED
@@ -1 +1 @@
1
- .bg-background-deep{background-color:#f1f3f6}.bg-background-deep .login-background{background:linear-gradient(154deg,#07070915 30%,color-mix(in srgb,var(--color-primary) 30%,transparent) 48%,#07070915 64%);filter:blur(100px)}.bg-background-deep .-enter-x{animation:enter-x-animation .3s ease-in-out .2s forwards;opacity:0;transform:translate(-50px)}.bg-background-deep .animate-float{animation:float 5s linear 0s infinite}.login-side .side-content{animation-name:slide-right;animation-duration:.3s;animation-timing-function:cubic-bezier(.16,1,.3,1)}.login-side .side-content.exit-x{animation-name:exit-x-animation;animation-duration:.5s;animation-timing-function:cubic-bezier(.16,1,.3,1);animation-fill-mode:forwards}/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-black:#000;--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--font-weight-medium:500;--font-weight-semibold:600;--tracking-wide:.025em;--leading-tight:1.25;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-3xl:1.5rem;--ease-in-out:cubic-bezier(.4,0,.2,1);--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.absolute{position:absolute}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing)*0)}.top-0{top:calc(var(--spacing)*0)}.top-4{top:calc(var(--spacing)*4)}.right-3{right:calc(var(--spacing)*3)}.right-\[-7px\]{right:-7px}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-3{bottom:calc(var(--spacing)*3)}.left-0{left:calc(var(--spacing)*0)}.left-\[-7px\]{left:-7px}.z-1{z-index:1}.z-10{z-index:10}.z-9999{z-index:9999}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing)*0)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-1\!{margin-inline:calc(var(--spacing)*1)!important}.mx-9{margin-inline:calc(var(--spacing)*9)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-6{margin-top:calc(var(--spacing)*6)}.mr-20{margin-right:calc(var(--spacing)*20)}.mr-\[-10px\]{margin-right:-10px}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.mb-\[2px\]{margin-bottom:2px}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-4{margin-left:calc(var(--spacing)*4)}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.aspect-\[2\]{aspect-ratio:2}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-5{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.size-\[10px\]{width:10px;height:10px}.size-full{width:100%;height:100%}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-64{height:calc(var(--spacing)*64)}.h-\[16px\]{height:16px}.h-\[18px\]{height:18px}.h-\[38px\]{height:38px}.h-\[46px\]{height:46px}.h-\[50px\]{height:50px}.h-full{height:100%}.h-screen{height:100vh}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-0{width:calc(var(--spacing)*0)}.w-2\/5{width:40%}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-\[16px\]{width:16px}.w-\[18px\]{width:18px}.w-full{width:100%}.min-w-\[204px\]{min-width:204px}.min-w-fit{min-width:fit-content}.flex-1{flex:1}.shrink-0{flex-shrink:0}.origin-right{transform-origin:100%}.scale-0{--tw-scale-x:0%;--tw-scale-y:0%;--tw-scale-z:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.cursor-pointer{cursor:pointer}.resize{resize:both}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-6{gap:calc(var(--spacing)*6)}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-tl-\[8px\]{border-top-left-radius:8px}.rounded-tr-\[8px\]{border-top-right-radius:8px}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-none{--tw-border-style:none;border-style:none}.border-\(--border-color\){border-color:var(--border-color)}.border-\(--color-primary\){border-color:var(--color-primary)}.border-transparent{border-color:#0000}.bg-\(--background-primary-light\)\!{background-color:var(--background-primary-light)!important}.bg-\(--global-background-color\){background-color:var(--global-background-color)}.bg-\(--global-background-color\)\!{background-color:var(--global-background-color)!important}.bg-\[\#eff1f4\]{background-color:#eff1f4}.bg-\[\#f4f4f5\]{background-color:#f4f4f5}.bg-white\/80{background-color:#fffc}@supports (color:color-mix(in lab,red,red)){.bg-white\/80{background-color:color-mix(in oklab,var(--color-white)80%,transparent)}}.fill-transparent{fill:#0000}.p-0\!{padding:calc(var(--spacing)*0)!important}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-\[16px\]{padding-inline:16px}.py-1{padding-block:calc(var(--spacing)*1)}.py-2{padding-block:calc(var(--spacing)*2)}.py-10{padding-block:calc(var(--spacing)*10)}.pt-1{padding-top:calc(var(--spacing)*1)}.pl-4{padding-left:calc(var(--spacing)*4)}.text-center{text-align:center}.font-sans{font-family:var(--font-sans)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-sm\!{font-size:var(--text-sm)!important;line-height:var(--tw-leading,var(--text-sm--line-height))!important}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.whitespace-nowrap{white-space:nowrap}.text-\(--color-primary\){color:var(--color-primary)}.text-\(--color-primary\)\!{color:var(--color-primary)!important}.text-\(--icon-text-color\){color:var(--icon-text-color)}.text-\(--text-color\){color:var(--text-color)}.text-\[\#2d2f32\]{color:#2d2f32}.text-\[\#333\]{color:#333}.text-\[\#18181bcc\]{color:#18181bcc}.text-\[\#71717a\]{color:#71717a}.text-\[\#323639\]{color:#323639}.text-\[\#323639cc\]{color:#323639cc}.text-\[\#333333\]{color:#333}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-white{color:var(--color-white)}.no-underline{text-decoration-line:none}.opacity-0{opacity:0}.opacity-60{opacity:.6}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.outline-2{outline-style:var(--tw-outline-style);outline-width:2px}.outline-\(--color-primary\){outline-color:var(--color-primary)}.outline-\[\#e4e4e7\]{outline-color:#e4e4e7}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.group-hover\:scale-100:is(:where(.group):hover *){--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.group-\[\.is-active\]\:fill-\(--background-primary-light\):is(:where(.group).is-active *){fill:var(--background-primary-light)}@media(hover:hover){.hover\:bg-\(--hover-background-color\):hover{background-color:var(--hover-background-color)}.hover\:bg-\[\#dfe3e4\]:hover{background-color:#dfe3e4}.hover\:bg-\[\#f4f4f5\]:hover{background-color:#f4f4f5}.hover\:text-\(--hover-primary-color\)\!:hover{color:var(--hover-primary-color)!important}.hover\:text-\[\#18181b\]:hover{color:#18181b}.hover\:text-\[\#323639\]:hover{color:#323639}.hover\:text-black:hover{color:var(--color-black)}}@media(min-width:40rem){.sm\:top-6{top:calc(var(--spacing)*6)}.sm\:left-6{left:calc(var(--spacing)*6)}}@media(min-width:48rem){.md\:flex{display:flex}}@media(min-width:64rem){.lg\:block{display:block}.lg\:flex{display:flex}.lg\:flex-initial{flex:0 auto}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}.lg\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}}.dark\:bg-\[\#1a1c1f\]\!:where(.dark,.dark *){background-color:#1a1c1f!important}.dark\:bg-\[\#1a1c1f\]\/80:where(.dark,.dark *){background-color:#1a1c1fcc}.dark\:bg-\[\#2e3033\]:where(.dark,.dark *){background-color:#2e3033}.dark\:bg-\[\#292a2d\]:where(.dark,.dark *){background-color:#292a2d}.dark\:bg-\[\#14161a\]:where(.dark,.dark *){background-color:#14161a}.dark\:bg-\[\#070709\]\!:where(.dark,.dark *){background-color:#070709!important}.dark\:bg-\[\#141619\]:where(.dark,.dark *){background-color:#141619}.dark\:text-\[\#a1a1a2\]:where(.dark,.dark *){color:#a1a1a2}.dark\:text-\[\#a1a1aa\]:where(.dark,.dark *){color:#a1a1aa}.dark\:text-\[\#cfd0d0\]:where(.dark,.dark *){color:#cfd0d0}.dark\:text-\[\#f0f0f0\]:where(.dark,.dark *){color:#f0f0f0}.dark\:text-\[\#f2f2f2\]:where(.dark,.dark *){color:#f2f2f2}.dark\:text-\[\#f9f9f9\]\!:where(.dark,.dark *){color:#f9f9f9!important}.dark\:outline-\[\#36363a\]:where(.dark,.dark *){outline-color:#36363a}@media(hover:hover){.dark\:hover\:bg-\[\#292a2d\]:where(.dark,.dark *):hover{background-color:#292a2d}.dark\:hover\:bg-\[\#333538\]:where(.dark,.dark *):hover{background-color:#333538}.dark\:hover\:bg-transparent:where(.dark,.dark *):hover{background-color:#0000}.dark\:hover\:text-\[\#f0f0f0\]:where(.dark,.dark *):hover{color:#f0f0f0}.dark\:hover\:text-white:where(.dark,.dark *):hover{color:var(--color-white)}}}@keyframes enter-x-animation{to{opacity:1;transform:translate(0)}}@keyframes float{0%{transform:translateY(0)}50%{transform:translateY(-20px)}to{transform:translateY(0)}}@keyframes slide-right{0%{opacity:0;transform:translate(50px)}to{opacity:1;transform:translate(0)}}@keyframes exit-x-animation{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(50px)}}@keyframes scale-pulse{0%{transform:scale(1)}50%{transform:scale(.9)}to{transform:scale(1)}}.hover-scale-animation:hover{animation:.3s cubic-bezier(.4,0,.2,1) scale-pulse}:root{--color-primary:#006be6;--global-background-color:white;--border-color:#e4e4e7;--text-color:#323639}[data-theme=dark]{--global-background-color:#1a1c1f;--border-color:#36363a;--text-color:#f2f2f2}html{background-color:var(--global-background-color);--hover-primary-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){html{--hover-primary-color:color-mix(in srgb,var(--color-primary)80%,transparent)}}#root,body,html{width:100%;height:100%}body{min-height:100vh}.spin-wrapper-full,.spin-wrapper-full .ant-spin-container{width:100%;height:100%}.spin-wrapper-full .ant-spin{max-height:100%!important}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}.basics-layout{--sidebar-width: 220px;--header-height: 64px;--tabs-height: 44px;--background-primary-light: color-mix(in srgb, var(--color-primary) 10%, transparent);--hover-background-color: #f4f4f5;--icon-text-color: #323639}[data-theme=dark] .basics-layout{--hover-background-color: #2e3033;--icon-text-color: #dddddd;--background-primary-light: #292a2d}.basics-layout .layout-header{flex-shrink:0}.basics-layout .layout-header .basics-breadcrumb .ant-breadcrumb-separator{display:flex;align-items:center;margin-inline:6px}.basics-layout .layout-sidebar{z-index:20;flex-shrink:0}.basics-layout .layout-sidebar .sidebar-menu{background:var(--global-background-color);border:none}.basics-layout .layout-sidebar .sidebar-menu .ant-menu-item{margin:4px 8px;width:calc(100% - 16px);border-radius:8px;transition:all .3s cubic-bezier(.4,0,.2,1);padding-inline:30%}.basics-layout .layout-sidebar .sidebar-menu .ant-menu-item:hover{background:var(--hover-background-color)}.basics-layout .layout-sidebar .sidebar-menu .ant-menu-item:hover .ant-menu-item-icon{transition:transform .3s cubic-bezier(.4,0,.2,1);transform:scale(1.18)}.basics-layout .layout-sidebar .sidebar-menu .ant-menu-item.ant-menu-item-selected{background-color:var(--background-primary-light);color:var(--color-primary)}.basics-layout .layout-sidebar .sidebar-menu .ant-menu-item .ant-menu-title-content{margin-inline-start:8px}.basics-layout .layout-sidebar .sidebar-menu .ant-menu-submenu-title{margin:4px 8px;width:calc(100% - 16px);border-radius:8px;padding-inline:30%}.basics-layout .layout-sidebar .sidebar-menu .ant-menu-submenu-title:hover{background-color:var(--hover-background-color)}.basics-layout .layout-sidebar .sidebar-menu .ant-menu-submenu-title:hover .ant-menu-item-icon{transition:transform .3s cubic-bezier(.4,0,.2,1);transform:scale(1.18)}.basics-layout .layout-sidebar .sidebar-menu .ant-menu-sub{background:transparent}.basics-layout .custom-scrollbar::-webkit-scrollbar{width:8px;height:8px}.basics-layout .custom-scrollbar::-webkit-scrollbar-track{background:transparent}.basics-layout .custom-scrollbar::-webkit-scrollbar-thumb{background:#0000004d;border-radius:4px}.basics-layout .custom-scrollbar::-webkit-scrollbar-thumb:hover{background:#00000080}.basics-layout .layout-tabs{position:relative;scrollbar-width:thin}.loading-spin{background-color:#ffffff40;position:fixed;top:0;left:0}.loading-spin .spin-animation path{animation:custom 2s linear infinite}@keyframes custom{0%{opacity:0}25%{opacity:.1}50%{opacity:.2}75%{opacity:.5}to{opacity:1}}.loading-spin .spin-animation path:nth-child(1){animation-delay:0s}.loading-spin .spin-animation path:nth-child(2){animation-delay:.5s}.loading-spin .spin-animation path:nth-child(3){animation-delay:1s}.loading-spin .spin-animation path:nth-child(4){animation-delay:2s}
1
+ .bg-background-deep{background-color:#f1f3f6}.bg-background-deep .login-background{background:linear-gradient(154deg,#07070915 30%,color-mix(in srgb,var(--color-primary) 30%,transparent) 48%,#07070915 64%);filter:blur(100px)}.bg-background-deep .-enter-x{animation:enter-x-animation .3s ease-in-out .2s forwards;opacity:0;transform:translate(-50px)}.bg-background-deep .animate-float{animation:float 5s linear 0s infinite}.login-side .side-content{animation-name:slide-right;animation-duration:.3s;animation-timing-function:cubic-bezier(.16,1,.3,1)}.login-side .side-content.exit-x{animation-name:exit-x-animation;animation-duration:.5s;animation-timing-function:cubic-bezier(.16,1,.3,1);animation-fill-mode:forwards}/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-black:#000;--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--font-weight-medium:500;--font-weight-semibold:600;--tracking-wide:.025em;--leading-tight:1.25;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-3xl:1.5rem;--ease-in-out:cubic-bezier(.4,0,.2,1);--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.absolute{position:absolute}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing)*0)}.top-0{top:calc(var(--spacing)*0)}.top-4{top:calc(var(--spacing)*4)}.right-3{right:calc(var(--spacing)*3)}.right-\[-7px\]{right:-7px}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-3{bottom:calc(var(--spacing)*3)}.left-0{left:calc(var(--spacing)*0)}.left-\[-7px\]{left:-7px}.z-1{z-index:1}.z-10{z-index:10}.z-9999{z-index:9999}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing)*0)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-1\!{margin-inline:calc(var(--spacing)*1)!important}.mx-9{margin-inline:calc(var(--spacing)*9)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-6{margin-top:calc(var(--spacing)*6)}.mr-20{margin-right:calc(var(--spacing)*20)}.mr-\[-10px\]{margin-right:-10px}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.mb-\[2px\]{margin-bottom:2px}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-4{margin-left:calc(var(--spacing)*4)}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.aspect-\[2\]{aspect-ratio:2}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-5{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.size-\[10px\]{width:10px;height:10px}.size-full{width:100%;height:100%}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-64{height:calc(var(--spacing)*64)}.h-\[16px\]{height:16px}.h-\[18px\]{height:18px}.h-\[38px\]{height:38px}.h-\[46px\]{height:46px}.h-\[50px\]{height:50px}.h-full{height:100%}.h-screen{height:100vh}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-0{width:calc(var(--spacing)*0)}.w-2\/5{width:40%}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-\[16px\]{width:16px}.w-\[18px\]{width:18px}.w-full{width:100%}.min-w-\[204px\]{min-width:204px}.min-w-fit{min-width:fit-content}.flex-1{flex:1}.shrink-0{flex-shrink:0}.origin-right{transform-origin:100%}.scale-0{--tw-scale-x:0%;--tw-scale-y:0%;--tw-scale-z:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.cursor-pointer{cursor:pointer}.resize{resize:both}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-6{gap:calc(var(--spacing)*6)}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-tl-\[8px\]{border-top-left-radius:8px}.rounded-tr-\[8px\]{border-top-right-radius:8px}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-none{--tw-border-style:none;border-style:none}.border-\(--border-color\){border-color:var(--border-color)}.border-\(--color-primary\){border-color:var(--color-primary)}.border-transparent{border-color:#0000}.bg-\(--background-primary-light\)\!{background-color:var(--background-primary-light)!important}.bg-\(--global-background-color\){background-color:var(--global-background-color)}.bg-\(--global-background-color\)\!{background-color:var(--global-background-color)!important}.bg-\[\#eff1f4\]{background-color:#eff1f4}.bg-\[\#f4f4f5\]{background-color:#f4f4f5}.bg-white\/80{background-color:#fffc}@supports (color:color-mix(in lab,red,red)){.bg-white\/80{background-color:color-mix(in oklab,var(--color-white)80%,transparent)}}.fill-transparent{fill:#0000}.p-0\!{padding:calc(var(--spacing)*0)!important}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-\[16px\]{padding-inline:16px}.py-1{padding-block:calc(var(--spacing)*1)}.py-2{padding-block:calc(var(--spacing)*2)}.py-10{padding-block:calc(var(--spacing)*10)}.pt-1{padding-top:calc(var(--spacing)*1)}.pl-4{padding-left:calc(var(--spacing)*4)}.text-center{text-align:center}.font-sans{font-family:var(--font-sans)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-sm\!{font-size:var(--text-sm)!important;line-height:var(--tw-leading,var(--text-sm--line-height))!important}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.whitespace-nowrap{white-space:nowrap}.text-\(--color-primary\){color:var(--color-primary)}.text-\(--color-primary\)\!{color:var(--color-primary)!important}.text-\(--icon-text-color\){color:var(--icon-text-color)}.text-\(--text-color\){color:var(--text-color)}.text-\[\#2d2f32\]{color:#2d2f32}.text-\[\#333\]{color:#333}.text-\[\#18181bcc\]{color:#18181bcc}.text-\[\#71717a\]{color:#71717a}.text-\[\#323639\]{color:#323639}.text-\[\#323639cc\]{color:#323639cc}.text-\[\#333333\]{color:#333}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-white{color:var(--color-white)}.no-underline{text-decoration-line:none}.opacity-0{opacity:0}.opacity-60{opacity:.6}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.outline-2{outline-style:var(--tw-outline-style);outline-width:2px}.outline-\(--color-primary\){outline-color:var(--color-primary)}.outline-\[\#e4e4e7\]{outline-color:#e4e4e7}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.group-hover\:scale-100:is(:where(.group):hover *){--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.group-\[\.is-active\]\:fill-\(--background-primary-light\):is(:where(.group).is-active *){fill:var(--background-primary-light)}@media(hover:hover){.hover\:bg-\(--hover-background-color\):hover{background-color:var(--hover-background-color)}.hover\:bg-\[\#dfe3e4\]:hover{background-color:#dfe3e4}.hover\:bg-\[\#f4f4f5\]:hover{background-color:#f4f4f5}.hover\:text-\(--hover-primary-color\)\!:hover{color:var(--hover-primary-color)!important}.hover\:text-\[\#18181b\]:hover{color:#18181b}.hover\:text-\[\#323639\]:hover{color:#323639}.hover\:text-black:hover{color:var(--color-black)}}@media(min-width:40rem){.sm\:top-6{top:calc(var(--spacing)*6)}.sm\:left-6{left:calc(var(--spacing)*6)}}@media(min-width:48rem){.md\:flex{display:flex}}@media(min-width:64rem){.lg\:block{display:block}.lg\:flex{display:flex}.lg\:flex-initial{flex:0 auto}.lg\:px-8{padding-inline:calc(var(--spacing)*8)}.lg\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}}.dark\:bg-\[\#1a1c1f\]\!:where(.dark,.dark *){background-color:#1a1c1f!important}.dark\:bg-\[\#1a1c1f\]\/80:where(.dark,.dark *){background-color:#1a1c1fcc}.dark\:bg-\[\#2e3033\]:where(.dark,.dark *){background-color:#2e3033}.dark\:bg-\[\#292a2d\]:where(.dark,.dark *){background-color:#292a2d}.dark\:bg-\[\#14161a\]:where(.dark,.dark *){background-color:#14161a}.dark\:bg-\[\#070709\]\!:where(.dark,.dark *){background-color:#070709!important}.dark\:bg-\[\#141619\]:where(.dark,.dark *){background-color:#141619}.dark\:text-\[\#a1a1a2\]:where(.dark,.dark *){color:#a1a1a2}.dark\:text-\[\#a1a1aa\]:where(.dark,.dark *){color:#a1a1aa}.dark\:text-\[\#cfd0d0\]:where(.dark,.dark *){color:#cfd0d0}.dark\:text-\[\#f0f0f0\]:where(.dark,.dark *){color:#f0f0f0}.dark\:text-\[\#f2f2f2\]:where(.dark,.dark *){color:#f2f2f2}.dark\:text-\[\#f9f9f9\]\!:where(.dark,.dark *){color:#f9f9f9!important}.dark\:outline-\[\#36363a\]:where(.dark,.dark *){outline-color:#36363a}@media(hover:hover){.dark\:hover\:bg-\[\#292a2d\]:where(.dark,.dark *):hover{background-color:#292a2d}.dark\:hover\:bg-\[\#333538\]:where(.dark,.dark *):hover{background-color:#333538}.dark\:hover\:bg-transparent:where(.dark,.dark *):hover{background-color:#0000}.dark\:hover\:text-\[\#f0f0f0\]:where(.dark,.dark *):hover{color:#f0f0f0}.dark\:hover\:text-white:where(.dark,.dark *):hover{color:var(--color-white)}}}@keyframes enter-x-animation{to{opacity:1;transform:translate(0)}}@keyframes float{0%{transform:translateY(0)}50%{transform:translateY(-20px)}to{transform:translateY(0)}}@keyframes slide-right{0%{opacity:0;transform:translate(50px)}to{opacity:1;transform:translate(0)}}@keyframes exit-x-animation{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(50px)}}@keyframes scale-pulse{0%{transform:scale(1)}50%{transform:scale(.9)}to{transform:scale(1)}}.hover-scale-animation:hover{animation:.3s cubic-bezier(.4,0,.2,1) scale-pulse}:root{--color-primary:#006be6;--global-background-color:white;--border-color:#e4e4e7;--text-color:#323639}[data-theme=dark]{--global-background-color:#1a1c1f;--border-color:#36363a;--text-color:#f2f2f2}html{background-color:var(--global-background-color);--hover-primary-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){html{--hover-primary-color:color-mix(in srgb,var(--color-primary)80%,transparent)}}#root,body,html{width:100%;height:100%}body{min-height:100vh}.spin-wrapper-full,.spin-wrapper-full .ant-spin-container{width:100%;height:100%}.spin-wrapper-full .ant-spin{max-height:100%!important}#nprogress .bar{background:var(--color-primary)!important;height:3px!important}#nprogress .peg{box-shadow:0 0 10px var(--color-primary),0 0 5px var(--color-primary)!important}#nprogress .spinner-icon{border-top-color:var(--color-primary)!important;border-left-color:var(--color-primary)!important}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}.basics-layout{--sidebar-width: 220px;--header-height: 64px;--tabs-height: 44px;--background-primary-light: color-mix(in srgb, var(--color-primary) 10%, transparent);--hover-background-color: #f4f4f5;--icon-text-color: #323639}[data-theme=dark] .basics-layout{--hover-background-color: #2e3033;--icon-text-color: #dddddd;--background-primary-light: #292a2d}.basics-layout .layout-header{flex-shrink:0}.basics-layout .layout-header .basics-breadcrumb .ant-breadcrumb-separator{display:flex;align-items:center;margin-inline:6px}.basics-layout .layout-sidebar{z-index:20;flex-shrink:0}.basics-layout .layout-sidebar .sidebar-menu{background:var(--global-background-color);border:none}.basics-layout .layout-sidebar .sidebar-menu .ant-menu-item{margin:4px 8px;width:calc(100% - 16px);border-radius:8px;transition:all .3s cubic-bezier(.4,0,.2,1);padding-inline:30%}.basics-layout .layout-sidebar .sidebar-menu .ant-menu-item:hover{background:var(--hover-background-color)}.basics-layout .layout-sidebar .sidebar-menu .ant-menu-item:hover .ant-menu-item-icon{transition:transform .3s cubic-bezier(.4,0,.2,1);transform:scale(1.18)}.basics-layout .layout-sidebar .sidebar-menu .ant-menu-item.ant-menu-item-selected{background-color:var(--background-primary-light);color:var(--color-primary)}.basics-layout .layout-sidebar .sidebar-menu .ant-menu-item .ant-menu-title-content{margin-inline-start:8px}.basics-layout .layout-sidebar .sidebar-menu .ant-menu-submenu-title{margin:4px 8px;width:calc(100% - 16px);border-radius:8px;padding-inline:30%}.basics-layout .layout-sidebar .sidebar-menu .ant-menu-submenu-title:hover{background-color:var(--hover-background-color)}.basics-layout .layout-sidebar .sidebar-menu .ant-menu-submenu-title:hover .ant-menu-item-icon{transition:transform .3s cubic-bezier(.4,0,.2,1);transform:scale(1.18)}.basics-layout .layout-sidebar .sidebar-menu .ant-menu-sub{background:transparent}.basics-layout .custom-scrollbar::-webkit-scrollbar{width:8px;height:8px}.basics-layout .custom-scrollbar::-webkit-scrollbar-track{background:transparent}.basics-layout .custom-scrollbar::-webkit-scrollbar-thumb{background:#0000004d;border-radius:4px}.basics-layout .custom-scrollbar::-webkit-scrollbar-thumb:hover{background:#00000080}.basics-layout .layout-tabs{position:relative;scrollbar-width:thin}.loading-spin{background-color:#ffffff40;position:fixed;top:0;left:0}.loading-spin .spin-animation path{animation:custom 2s linear infinite}@keyframes custom{0%{opacity:0}25%{opacity:.1}50%{opacity:.2}75%{opacity:.5}to{opacity:1}}.loading-spin .spin-animation path:nth-child(1){animation-delay:0s}.loading-spin .spin-animation path:nth-child(2){animation-delay:.5s}.loading-spin .spin-animation path:nth-child(3){animation-delay:1s}.loading-spin .spin-animation path:nth-child(4){animation-delay:2s}
package/lib/index.js CHANGED
@@ -1,46 +1,48 @@
1
1
  import { getIcon as t, renderIcon as r } from "./utils/icon.js";
2
- import { applyTheme as m, applyThemeColor as p, applyThemeWithTransition as f, getRealTheme as l, getTheme as u, initTheme as s, listenSystemTheme as x, toggleTheme as n } from "./utils/theme.js";
2
+ import { applyTheme as m, applyThemeColor as p, applyThemeWithTransition as f, getRealTheme as s, getTheme as l, initTheme as u, listenSystemTheme as x, toggleTheme as n } from "./utils/theme.js";
3
3
  import { useLayoutConfigStore as T } from "./store/modules/layout-config.store.js";
4
- import { useThemeStore as y } from "./store/modules/theme.store.js";
5
- import { NOOP as g, STORE_KEY as L } from "./config/constants.js";
4
+ import { useThemeStore as i } from "./store/modules/theme.store.js";
5
+ import { NOOP as d, STORE_KEY as L } from "./config/constants.js";
6
6
  import { THEME_COLORS as c } from "./config/theme.js";
7
7
  import { generateRouter as R } from "./router/index.js";
8
8
  import { useAuth as E } from "./hooks/use-auth.hook.js";
9
- import { default as G } from "./fe-layouts/auth-layout/index.js";
10
- import { default as A } from "./fe-layouts/basics-layout/index.js";
11
- import { default as F } from "./fe-layouts/blank-layout/index.js";
12
- import { GlobalContext as _, useGlobal as k } from "./fe-layouts/context/context.js";
13
- import { default as z } from "./fe-layouts/context/global-context.provider.js";
14
- import { default as K } from "./fe-layouts/layout.js";
15
- import { default as N } from "./fe-loading/index.js";
16
- import { createLazyComponent as Y, getPath as j, processRoutes as q } from "./router/utils.js";
9
+ import { useNProgress as b } from "./hooks/use-nprogress.hook.js";
10
+ import { default as A } from "./fe-layouts/auth-layout/index.js";
11
+ import { default as F } from "./fe-layouts/basics-layout/index.js";
12
+ import { default as N } from "./fe-layouts/blank-layout/index.js";
13
+ import { GlobalContext as k, useGlobal as v } from "./fe-layouts/context/context.js";
14
+ import { default as H } from "./fe-layouts/context/global-context.provider.js";
15
+ import { default as M } from "./fe-layouts/layout.js";
16
+ import { default as Y } from "./fe-loading/index.js";
17
+ import { createLazyComponent as q, getPath as w, processRoutes as D } from "./router/utils.js";
17
18
  export {
18
- G as AuthLayout,
19
- A as BasicsLayout,
20
- F as BlankLayout,
21
- K as FeLayout,
22
- N as FeLoading,
23
- _ as GlobalContext,
24
- z as GlobalContextProvider,
25
- g as NOOP,
19
+ A as AuthLayout,
20
+ F as BasicsLayout,
21
+ N as BlankLayout,
22
+ M as FeLayout,
23
+ Y as FeLoading,
24
+ k as GlobalContext,
25
+ H as GlobalContextProvider,
26
+ d as NOOP,
26
27
  L as STORE_KEY,
27
28
  c as THEME_COLORS,
28
29
  m as applyTheme,
29
30
  p as applyThemeColor,
30
31
  f as applyThemeWithTransition,
31
- Y as createLazyComponent,
32
+ q as createLazyComponent,
32
33
  R as generateRouter,
33
34
  t as getIcon,
34
- j as getPath,
35
- l as getRealTheme,
36
- u as getTheme,
37
- s as initTheme,
35
+ w as getPath,
36
+ s as getRealTheme,
37
+ l as getTheme,
38
+ u as initTheme,
38
39
  x as listenSystemTheme,
39
- q as processRoutes,
40
+ D as processRoutes,
40
41
  r as renderIcon,
41
42
  n as toggleTheme,
42
43
  E as useAuth,
43
- k as useGlobal,
44
+ v as useGlobal,
44
45
  T as useLayoutConfigStore,
45
- y as useThemeStore
46
+ b as useNProgress,
47
+ i as useThemeStore
46
48
  };
@@ -7,6 +7,7 @@ import { STORE_KEY as E } from "../../config/constants.js";
7
7
  import "react-router-dom";
8
8
  import "react";
9
9
  import "../../fe-layouts/context/context.js";
10
+ import "nprogress";
10
11
  import "@spacego/zustand";
11
12
  import "react-icons/fa6";
12
13
  import "react-icons/io5";
@@ -34,7 +35,7 @@ const A = () => ({
34
35
  timer: null
35
36
  },
36
37
  sidebarCollapsed: !1
37
- }), b = 0.1, M = u(d(
38
+ }), b = 0.1, P = u(d(
38
39
  g(
39
40
  A(),
40
41
  (i, n) => ({
@@ -215,5 +216,5 @@ const A = () => ({
215
216
  }
216
217
  ));
217
218
  export {
218
- M as useLayoutConfigStore
219
+ P as useLayoutConfigStore
219
220
  };
@@ -8,6 +8,7 @@ import { STORE_KEY as i } from "../../config/constants.js";
8
8
  import "react-router-dom";
9
9
  import "react";
10
10
  import "../../fe-layouts/context/context.js";
11
+ import "nprogress";
11
12
  import "@spacego/zustand";
12
13
  import "react-icons/fa6";
13
14
  import "react-icons/io5";
@@ -23,25 +24,25 @@ const p = () => ({
23
24
  themeColor: "#006BE6",
24
25
  // 默认主题色
25
26
  isCustomThemeColor: !1
26
- }), a = 0.1, N = E(s(
27
+ }), a = 0.1, j = E(s(
27
28
  T(
28
29
  l(
29
30
  p(),
30
- (t, r) => ({
31
- SET_STATE: (e) => t(e),
32
- SET_THEME: (e) => {
33
- t({ theme: e }), m(e);
31
+ (e, r) => ({
32
+ SET_STATE: (t) => e(t),
33
+ SET_THEME: (t) => {
34
+ e({ theme: t }), m(t);
34
35
  },
35
36
  TOGGLE_THEME: () => {
36
- const e = r().theme;
37
+ const t = r().theme;
37
38
  let o;
38
- e === "system" ? o = window.matchMedia("(prefers-color-scheme: dark)").matches ? "light" : "dark" : o = e === "light" ? "dark" : "light", t({ theme: o }), m(o);
39
+ t === "system" ? o = window.matchMedia("(prefers-color-scheme: dark)").matches ? "light" : "dark" : o = t === "light" ? "dark" : "light", e({ theme: o }), m(o);
39
40
  },
40
- SET_THEME_COLOR: (e) => {
41
- t({ themeColor: e }), n(e);
41
+ SET_THEME_COLOR: (t) => {
42
+ e({ themeColor: t }), n(t);
42
43
  },
43
- SET_IS_CUSTOM_THEME_COLOR: (e) => {
44
- t({ isCustomThemeColor: e });
44
+ SET_IS_CUSTOM_THEME_COLOR: (t) => {
45
+ e({ isCustomThemeColor: t });
45
46
  }
46
47
  })
47
48
  ),
@@ -49,14 +50,14 @@ const p = () => ({
49
50
  name: i.THEME,
50
51
  storage: h(() => localStorage),
51
52
  version: a,
52
- migrate: (t, r) => {
53
- const e = p();
54
- return r !== a && Object.assign(e, t), e;
53
+ migrate: (e, r) => {
54
+ const t = p();
55
+ return r !== a && Object.assign(t, e), t;
55
56
  }
56
57
  }
57
58
  ),
58
59
  { name: i.THEME, enabled: !0 }
59
60
  ));
60
61
  export {
61
- N as useThemeStore
62
+ j as useThemeStore
62
63
  };
@@ -1 +1,2 @@
1
1
  export * from './use-auth.hook';
2
+ export * from './use-nprogress.hook';
@@ -0,0 +1,4 @@
1
+ /**
2
+ * @name 路由切换时显示进度条
3
+ */
4
+ export declare function useNProgress(): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spacego/fe-components",
3
- "version": "0.0.6",
3
+ "version": "0.1.0",
4
4
  "description": "🚀 A component library for fe to use.",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
@@ -46,11 +46,13 @@
46
46
  "@ant-design/icons": "^6.1.0",
47
47
  "@spacego/turbo-utils": "workspace:^",
48
48
  "@spacego/zustand": "workspace:^",
49
+ "@tailwindcss/vite": "^4.1.18",
50
+ "@types/nprogress": "^0.2.3",
51
+ "@types/react": "^18.2.66",
49
52
  "@vitejs/plugin-react-swc": "3.5.0",
50
53
  "antd": "^6.2.1",
51
54
  "nprogress": "^0.2.0",
52
55
  "react": "^18.2.0",
53
- "@types/react": "^18.2.66",
54
56
  "react-dom": "^18.2.0",
55
57
  "react-icons": "^5.5.0",
56
58
  "react-router-dom": "^7.12.0",
@@ -61,7 +63,6 @@
61
63
  "vite": "^6.3.3",
62
64
  "vite-plugin-dts": "^4.5.3",
63
65
  "vite-plugin-svgr": "^4.5.0",
64
- "zustand": "^5.0.10",
65
- "@tailwindcss/vite": "^4.1.18"
66
+ "zustand": "^5.0.10"
66
67
  }
67
68
  }