node-karin 1.8.11 → 1.8.12

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.
Files changed (30) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/index.d.ts +13 -1
  3. package/dist/index.mjs +36 -22
  4. package/dist/start/index.mjs +1 -3
  5. package/dist/web/assets/js/components-xTgkEKOh.js.br +0 -0
  6. package/dist/web/assets/js/entry-DDp2aDp1.js.br +0 -0
  7. package/dist/web/assets/js/hooks-BVOSuufY.js.br +0 -0
  8. package/dist/web/assets/js/page-404.tsx-CQfJwMNP.js +1 -0
  9. package/dist/web/assets/js/page-dashboard-Cg6WjwPD.js.br +0 -0
  10. package/dist/web/assets/js/page-loading.tsx-DU5QaX5f.js.br +0 -0
  11. package/dist/web/assets/js/page-login.tsx-C_MXRUuZ.js.br +0 -0
  12. package/dist/web/assets/js/{utils-DqFE1yN-.js → utils-BuR6hXd1.js} +1 -1
  13. package/dist/web/assets/js/vendor-heroui-Blyb7kuN.js.br +0 -0
  14. package/dist/web/assets/js/vendor-others-CpZ3FDDG.js.br +0 -0
  15. package/dist/web/assets/js/vendor-react-Z2UfPrqC.js.br +0 -0
  16. package/dist/web/assets/js/vendor-visual-DQREh7WM.js.br +0 -0
  17. package/dist/web/index.html +9 -9
  18. package/package.json +1 -1
  19. package/README.md +0 -95
  20. package/dist/web/assets/js/components-9RKTV4LX.js.br +0 -0
  21. package/dist/web/assets/js/entry-CzDSdA4M.js.br +0 -0
  22. package/dist/web/assets/js/hooks-D65eaS4p.js.br +0 -0
  23. package/dist/web/assets/js/page-404.tsx-BNti6Z2J.js +0 -1
  24. package/dist/web/assets/js/page-dashboard-BewrlGFW.js.br +0 -0
  25. package/dist/web/assets/js/page-loading.tsx-CJaYj8cR.js.br +0 -0
  26. package/dist/web/assets/js/page-login.tsx-DkO-XzeU.js.br +0 -0
  27. package/dist/web/assets/js/vendor-heroui-WfpTlnyv.js.br +0 -0
  28. package/dist/web/assets/js/vendor-others-B6NXaB-r.js.br +0 -0
  29. package/dist/web/assets/js/vendor-react-Hg1DVPZt.js.br +0 -0
  30. package/dist/web/assets/js/vendor-visual-mzxhMYK3.js.br +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # 更新日志
2
2
 
3
+ ## [1.8.12](https://github.com/KarinJS/Karin/compare/core-v1.8.11...core-v1.8.12) (2025-05-08)
4
+
5
+
6
+ ### 🐛 Bug Fixes
7
+
8
+ * 修复主进程退出时子进程未被正确终止的问题 修复场景唯一标识符缓存问题 ([#413](https://github.com/KarinJS/Karin/issues/413)) ([e971438](https://github.com/KarinJS/Karin/commit/e971438892fe5726466ddfc1fd408599d8af6457))
9
+
3
10
  ## [1.8.11](https://github.com/KarinJS/Karin/compare/core-v1.8.10...core-v1.8.11) (2025-05-08)
4
11
 
5
12
 
package/dist/index.d.ts CHANGED
@@ -12074,6 +12074,17 @@ declare namespace index$1 {
12074
12074
  * @param data 数据
12075
12075
  */
12076
12076
  declare const formatArray: (data: any[]) => string[];
12077
+ /**
12078
+ * 初始化count
12079
+ * @param count 计数器
12080
+ * @param key 键
12081
+ */
12082
+ declare const initCount: (count: Record<string, {
12083
+ /** 上一分钟调用次数 */
12084
+ start: number;
12085
+ /** 当前调用次数 */
12086
+ count: number;
12087
+ }>, key: string) => void;
12077
12088
  /**
12078
12089
  * @internal
12079
12090
  * 传入一个对象 将对象中的嵌套数组中所有元素为字符串
@@ -12366,6 +12377,7 @@ declare const index_getYaml: typeof getYaml;
12366
12377
  declare const index_groups: typeof groups;
12367
12378
  declare const index_host: typeof host;
12368
12379
  declare const index_initConfigCache: typeof initConfigCache;
12380
+ declare const index_initCount: typeof initCount;
12369
12381
  declare const index_initPm2: typeof initPm2;
12370
12382
  declare const index_master: typeof master;
12371
12383
  declare const index_mergeDegAndCfg: typeof mergeDegAndCfg;
@@ -12381,7 +12393,7 @@ declare const index_updateLevel: typeof updateLevel;
12381
12393
  declare const index_webSocketServerToken: typeof webSocketServerToken;
12382
12394
  declare const index_writeEnv: typeof writeEnv;
12383
12395
  declare namespace index {
12384
- export { index_adapter as adapter, index_admin as admin, index_authKey as authKey, index_clearCache as clearCache, index_clearFiles as clearFiles, index_config as config, index_createCount as createCount, index_defaultConfig as defaultConfig, index_env as env, index_ffmpegPath as ffmpegPath, index_ffplayPath as ffplayPath, index_ffprobePath as ffprobePath, index_formatArray as formatArray, index_formatObject as formatObject, index_getCacheCfg as getCacheCfg, index_getDirectCfg as getDirectCfg, index_getEnv as getEnv, index_getFriendCfg as getFriendCfg, index_getGroupCfg as getGroupCfg, index_getGroupsFileData as getGroupsFileData, index_getGuildCfg as getGuildCfg, index_getPrivatesFileData as getPrivatesFileData, index_getRenderCfg as getRenderCfg, index_getYaml as getYaml, index_groups as groups, index_host as host, index_initConfigCache as initConfigCache, index_initPm2 as initPm2, index_master as master, index_mergeDegAndCfg as mergeDegAndCfg, index_pkg as pkg, index_pm2 as pm2, index_port as port, index_privates as privates, redis$1 as redis, render$1 as render, index_setConfig as setConfig, index_setEnv as setEnv, index_setYaml as setYaml, index_timeout as timeout, index_updateLevel as updateLevel, index_webSocketServerToken as webSocketServerToken, index_writeEnv as writeEnv };
12396
+ export { index_adapter as adapter, index_admin as admin, index_authKey as authKey, index_clearCache as clearCache, index_clearFiles as clearFiles, index_config as config, index_createCount as createCount, index_defaultConfig as defaultConfig, index_env as env, index_ffmpegPath as ffmpegPath, index_ffplayPath as ffplayPath, index_ffprobePath as ffprobePath, index_formatArray as formatArray, index_formatObject as formatObject, index_getCacheCfg as getCacheCfg, index_getDirectCfg as getDirectCfg, index_getEnv as getEnv, index_getFriendCfg as getFriendCfg, index_getGroupCfg as getGroupCfg, index_getGroupsFileData as getGroupsFileData, index_getGuildCfg as getGuildCfg, index_getPrivatesFileData as getPrivatesFileData, index_getRenderCfg as getRenderCfg, index_getYaml as getYaml, index_groups as groups, index_host as host, index_initConfigCache as initConfigCache, index_initCount as initCount, index_initPm2 as initPm2, index_master as master, index_mergeDegAndCfg as mergeDegAndCfg, index_pkg as pkg, index_pm2 as pm2, index_port as port, index_privates as privates, redis$1 as redis, render$1 as render, index_setConfig as setConfig, index_setEnv as setEnv, index_setYaml as setYaml, index_timeout as timeout, index_updateLevel as updateLevel, index_webSocketServerToken as webSocketServerToken, index_writeEnv as writeEnv };
12385
12397
  }
12386
12398
 
12387
12399
  /**
package/dist/index.mjs CHANGED
@@ -3174,7 +3174,7 @@ var init_exec = __esm({
3174
3174
  });
3175
3175
 
3176
3176
  // src/utils/config/tools.ts
3177
- var formatArray, formatObject, mergeDegAndCfg, createCount, getCacheCfg, clearCache;
3177
+ var formatArray, initCount, formatObject, mergeDegAndCfg, createCount, getCacheCfg, clearCache;
3178
3178
  var init_tools = __esm({
3179
3179
  "src/utils/config/tools.ts"() {
3180
3180
  formatArray = (data) => {
@@ -3184,6 +3184,13 @@ var init_tools = __esm({
3184
3184
  return [];
3185
3185
  }
3186
3186
  };
3187
+ initCount = (count3, key) => {
3188
+ if (!count3[key]) {
3189
+ count3[key] = { start: 0, count: 1 };
3190
+ } else {
3191
+ count3[key].count++;
3192
+ }
3193
+ };
3187
3194
  formatObject = (data) => {
3188
3195
  const list2 = {};
3189
3196
  Object.entries(data).forEach(([key, value]) => {
@@ -3219,24 +3226,25 @@ var init_tools = __esm({
3219
3226
  return {};
3220
3227
  };
3221
3228
  getCacheCfg = (cache12, count3, keys) => {
3222
- if (keys[0] in cache12) {
3223
- if (!count3[keys[0]]) {
3224
- count3[keys[0]] = { start: 0, count: 0 };
3225
- }
3226
- count3[keys[0]].count++;
3227
- return cache12[keys[0]];
3228
- }
3229
- for (const index6 in keys) {
3230
- if (keys[index6] in cache12) {
3231
- if (index6 === "0") {
3232
- count3[keys[index6]] = { start: 0, count: 1 };
3233
- } else {
3234
- count3[keys[0]] = { start: 0, count: 1 };
3235
- cache12[keys[0]] = cache12[keys[index6]];
3236
- }
3237
- return cache12[keys[index6]];
3238
- }
3239
- }
3229
+ const key = keys[0];
3230
+ if (cache12[key]) {
3231
+ initCount(count3, key);
3232
+ return cache12[key];
3233
+ }
3234
+ keys.forEach((v, index6) => {
3235
+ if (!cache12[v]) return;
3236
+ if (index6 === 0 && v === key) {
3237
+ initCount(count3, v);
3238
+ return cache12[v];
3239
+ }
3240
+ if (v === key) {
3241
+ initCount(count3, v);
3242
+ return cache12[v];
3243
+ }
3244
+ cache12[key] = cache12[v];
3245
+ initCount(count3, key);
3246
+ return cache12[key];
3247
+ });
3240
3248
  return cache12.default;
3241
3249
  };
3242
3250
  clearCache = (count3, cache12) => {
@@ -16110,6 +16118,7 @@ __export(config_exports, {
16110
16118
  groups: () => groups,
16111
16119
  host: () => host,
16112
16120
  initConfigCache: () => initConfigCache,
16121
+ initCount: () => initCount,
16113
16122
  initPm2: () => initPm2,
16114
16123
  master: () => master,
16115
16124
  mergeDegAndCfg: () => mergeDegAndCfg,
@@ -17824,6 +17833,7 @@ var init_mock = __esm({
17824
17833
  init_key4();
17825
17834
  init_common();
17826
17835
  RedisClient = class extends EventEmitter {
17836
+ id;
17827
17837
  /** 键、类型、过期时间映射 */
17828
17838
  store = {};
17829
17839
  /** 键值对 */
@@ -17846,6 +17856,7 @@ var init_mock = __esm({
17846
17856
  #sqlite;
17847
17857
  constructor(sqlite) {
17848
17858
  super();
17859
+ this.id = "mock";
17849
17860
  this.store = {};
17850
17861
  this.#str = {};
17851
17862
  this.#num = {};
@@ -19102,18 +19113,21 @@ var init_exit = __esm({
19102
19113
  init_uptime();
19103
19114
  exitStatus = false;
19104
19115
  processExit = async (code) => {
19116
+ logger.debug("[child] \u5B50\u8FDB\u7A0B\u6536\u5230\u9000\u51FA\u7533\u8BF7:", code);
19105
19117
  try {
19106
19118
  if (exitStatus) return;
19107
19119
  exitStatus = true;
19120
+ logger.debug("[child] \u5F00\u59CB\u4FDD\u5B58redis\u6570\u636E");
19108
19121
  const { redis: redis3 } = await Promise.resolve().then(() => (init_redis3(), redis_exports));
19109
- await redis3.save();
19122
+ if (redis3.id === "mock") await redis3.save();
19123
+ logger.debug("[child] redis\u6570\u636E\u4FDD\u5B58\u5B8C\u6210");
19110
19124
  logger.mark(tips(`\u8FD0\u884C\u7ED3\u675F \u8FD0\u884C\u65F6\u95F4\uFF1A${uptime2()} \u9000\u51FA\u7801\uFF1A${code ?? "\u672A\u77E5"}`));
19111
19125
  if (process.env.pm_id) {
19112
- logger.mark(tips("pm2\u73AF\u5883 \u5220\u9664pm2\u8FDB\u7A0B"));
19126
+ logger.mark(tips("[child] pm2\u73AF\u5883 \u5220\u9664pm2\u8FDB\u7A0B"));
19113
19127
  await exec(`pm2 delete ${process.env.pm_id}`);
19114
19128
  }
19115
19129
  } catch (error) {
19116
- logger.error(new Error("\u9000\u51FA\u4E8B\u4EF6\u53D1\u751F\u9519\u8BEF:", { cause: error }));
19130
+ logger.error(new Error("[child] \u9000\u51FA\u4E8B\u4EF6\u53D1\u751F\u9519\u8BEF:", { cause: error }));
19117
19131
  } finally {
19118
19132
  setTimeout(() => {
19119
19133
  exitStatus = true;
@@ -95,8 +95,6 @@ var sendExit = async (port, token) => {
95
95
  }
96
96
  };
97
97
  process.on("exit", () => {
98
- if (child && !child.killed) {
99
- child.kill("SIGTERM");
100
- }
98
+ child.kill("SIGTERM");
101
99
  });
102
100
  start();
@@ -0,0 +1 @@
1
+ import{j as t}from"./vendor-react-Z2UfPrqC.js";import{P as r}from"./components-xTgkEKOh.js";import"./vendor-others-CpZ3FDDG.js";import"./vendor-editor-B8hjWfkw.js";import"./vendor-ui-utils-5rYIvRjL.js";import"./vendor-heroui-Blyb7kuN.js";import"./page-dashboard-Cg6WjwPD.js";import"./hooks-BVOSuufY.js";import"./utils-BuR6hXd1.js";import"./vendor-visual-DQREh7WM.js";const x=()=>t.jsx("div",{className:"min-h-screen flex items-center justify-center",children:t.jsx(r,{})});export{x as default};
@@ -1,2 +1,2 @@
1
- import{V as p}from"./vendor-react-Hg1DVPZt.js";import{a5 as g}from"./components-9RKTV4LX.js";const k=async(t,n,e,r)=>{const{setIsLogModalOpen:i,setTaskId:c,setTaskLogs:o,setTaskName:f}=n;f("更新插件");const a=["开始创建更新任务...",`options: ${JSON.stringify(t)}`];o(a);try{const s=await g(t);if(s.success&&s.taskId)c(s.taskId),o([...a,`
1
+ import{V as p}from"./vendor-react-Z2UfPrqC.js";import{a5 as g}from"./components-xTgkEKOh.js";const k=async(t,n,e,r)=>{const{setIsLogModalOpen:i,setTaskId:c,setTaskLogs:o,setTaskName:f}=n;f("更新插件");const a=["开始创建更新任务...",`options: ${JSON.stringify(t)}`];o(a);try{const s=await g(t);if(s.success&&s.taskId)c(s.taskId),o([...a,`
2
2
  任务创建成功!`,`任务ID: ${s.taskId}`,"正在连接任务执行日志..."]),i(!0),typeof e=="function"&&e(),typeof r=="function"&&r();else throw new Error(s.message||"未知错误")}catch(s){console.error("更新失败:",s),p.error(`更新失败: ${s.message}`)}};export{k as c};
@@ -14,17 +14,17 @@
14
14
  content="viewport-fit=cover, width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"
15
15
  name="viewport" />
16
16
  <link href="/web/assets/ico/favicon-BoqZd694.ico" rel="icon" />
17
- <script type="module" crossorigin src="/web/assets/js/entry-CzDSdA4M.js"></script>
17
+ <script type="module" crossorigin src="/web/assets/js/entry-DDp2aDp1.js"></script>
18
18
  <link rel="modulepreload" crossorigin href="/web/assets/js/vendor-editor-B8hjWfkw.js">
19
- <link rel="modulepreload" crossorigin href="/web/assets/js/vendor-others-B6NXaB-r.js">
19
+ <link rel="modulepreload" crossorigin href="/web/assets/js/vendor-others-CpZ3FDDG.js">
20
20
  <link rel="modulepreload" crossorigin href="/web/assets/js/vendor-ui-utils-5rYIvRjL.js">
21
- <link rel="modulepreload" crossorigin href="/web/assets/js/vendor-react-Hg1DVPZt.js">
22
- <link rel="modulepreload" crossorigin href="/web/assets/js/vendor-heroui-WfpTlnyv.js">
23
- <link rel="modulepreload" crossorigin href="/web/assets/js/hooks-D65eaS4p.js">
24
- <link rel="modulepreload" crossorigin href="/web/assets/js/vendor-visual-mzxhMYK3.js">
25
- <link rel="modulepreload" crossorigin href="/web/assets/js/components-9RKTV4LX.js">
26
- <link rel="modulepreload" crossorigin href="/web/assets/js/utils-DqFE1yN-.js">
27
- <link rel="modulepreload" crossorigin href="/web/assets/js/page-dashboard-BewrlGFW.js">
21
+ <link rel="modulepreload" crossorigin href="/web/assets/js/vendor-react-Z2UfPrqC.js">
22
+ <link rel="modulepreload" crossorigin href="/web/assets/js/vendor-heroui-Blyb7kuN.js">
23
+ <link rel="modulepreload" crossorigin href="/web/assets/js/hooks-BVOSuufY.js">
24
+ <link rel="modulepreload" crossorigin href="/web/assets/js/vendor-visual-DQREh7WM.js">
25
+ <link rel="modulepreload" crossorigin href="/web/assets/js/components-xTgkEKOh.js">
26
+ <link rel="modulepreload" crossorigin href="/web/assets/js/utils-BuR6hXd1.js">
27
+ <link rel="modulepreload" crossorigin href="/web/assets/js/page-dashboard-Cg6WjwPD.js">
28
28
  <link rel="stylesheet" crossorigin href="/web/assets/css/vendor-editor-CFbL2ovg.css">
29
29
  <link rel="stylesheet" crossorigin href="/web/assets/css/vendor-others-ZgkIHsf0.css">
30
30
  <link rel="stylesheet" crossorigin href="/web/assets/css/components-ep7vm38G.css">
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-karin",
3
- "version": "1.8.11",
3
+ "version": "1.8.12",
4
4
  "description": "Lightweight, efficient, concise, and stable robot framework.",
5
5
  "keywords": [
6
6
  "node",
package/README.md DELETED
@@ -1,95 +0,0 @@
1
- ![karin](https://socialify.git.ci/karinjs/karin/image?description=1&font=Bitter&forks=1&issues=1&language=1&logo=https%3A%2F%2Favatars.githubusercontent.com%2Fu%2F162426977%3Fs%3D200%26v%3D4&name=1&owner=1&pulls=1&stargazers=1&theme=Auto)
2
-
3
- ## 项目介绍
4
-
5
- `karin`(卡琳)是一款灵活、现代、极易扩展的 Node.js 插件化应用框架,专为开发者打造,助你轻松构建属于自己的高效工具链和自动化服务。
6
-
7
- ✨ **主要特性**:
8
- - 插件化架构,支持热插拔,生态丰富
9
- - 一行命令即可初始化项目,快速上手
10
- - 丰富的 Web UI(基于 React + HeroUI),颜值与功能并存
11
- - 支持多种自动化场景、任务调度、依赖管理
12
- - 轻松集成第三方服务,打造属于你的"数字助理"
13
- - 社区活跃,持续更新,文档完善
14
-
15
- > 🦄 让开发变得像魔法一样有趣!
16
-
17
- ## 🚀 稳定长期维护
18
-
19
- 自 `1.8.0` 版本起,Karin 已进入**稳定长期维护阶段**。我们承诺持续修复 bug、优化体验,并欢迎社区力量共同完善生态。
20
-
21
- ## 快速开始
22
-
23
- [📚 查看最新文档](https://karin.fun/)
24
-
25
- 一键初始化:`pnpm create karin`
26
-
27
- > 当前文档可能存在滞后性,欢迎加入交流群(967068507)一起玩耍、提建议!
28
-
29
- ## 温馨提示
30
-
31
- > Karin 现已稳定,放心食用!遇到问题欢迎提 Issue 或加群讨论,我们会持续优化。
32
-
33
- ## 文档站说明
34
-
35
- 我们提供多个文档站点供您访问,解决可能出现的访问困难:
36
-
37
- - **主文档站**: [https://karin.fun](https://karin.fun) (基于 GitHub Pages)
38
- - **镜像站点**:
39
- - 憨憨镜像: [https://karin.hanhanz.top](https://karin.hanhanz.top) (**推荐访问**)
40
- - Vercel 镜像: [https://docs.karin.fun](https://docs.karin.fun) (**推荐访问**)
41
- - Deno 镜像: [https://karin.deno.dev](https://karin.deno.dev) (**推荐访问**)
42
-
43
- > 💡 主文档站托管在 GitHub 上,如访问不畅,推荐使用 Deno 镜像站
44
-
45
- ## 鸣谢
46
-
47
- - webui: [bietiaop](https://github.com/bietiaop)
48
- - docs: [ikenxuan](https://github.com/ikenxuan)
49
- - name: [fuqiuluo](https://github.com/fuqiuluo)
50
-
51
- > 🧙‍♂️ 感谢三位大佬的魔法加持!
52
-
53
- ### 贡献者
54
-
55
- > 🌟 星光闪烁,你们的智慧如同璀璨的夜空。感谢所有为 **Karin** 做出贡献的人!
56
-
57
- [![贡献者](https://contributors-img.web.app/image?repo=KarinJS/Karin)](https://github.com/KarinJS/Karin/graphs/contributors)
58
-
59
- ![Alt](https://repobeats.axiom.co/api/embed/aaaa2759c8885691443a4d80e5753f975d4f250e.svg "Repobeats analytics image")
60
-
61
- ---
62
-
63
- 🎉 **加入我们,让 Karin 成为你开发路上的贴心伙伴!**
64
-
65
- ## 常见问题
66
-
67
- - 文档没看懂?[点我提问](https://github.com/KarinJS/Karin/issues) 或加群 967068507
68
- - 插件不会写?欢迎参考[插件开发文档](https://karin.fun/plugins/)
69
- - 遇到 bug?大胆提 Issue,我们超快响应!
70
-
71
- ## 如何参与贡献(PR)
72
-
73
- 1. Fork 本仓库,创建你的分支
74
- 2. 提交你的更改,附上简要说明
75
- 3. 发起 Pull Request,耐心等待 Review
76
- 4. 你的名字将出现在贡献者列表,收获一份开源荣誉!
77
-
78
- > 💡 欢迎任何形式的贡献,无论是代码、文档、建议还是灵感!
79
-
80
- ## Issue 指南
81
-
82
- - 提交前请先搜索是否有类似问题
83
- - 尽量提供详细的复现步骤、环境信息和截图
84
- - 标题简明扼要,正文描述清晰
85
- - 遇到安全相关问题请私信维护者
86
-
87
- ## 开源协议
88
-
89
- 本项目基于 [MIT License](./LICENSE) 开源,欢迎自由使用、修改和分发。
90
-
91
- > 📢 记得给个 Star 支持我们,你的支持是我们最大的动力!
92
-
93
- ## 更新日志
94
-
95
- 我们定期发布更新,查看 [CHANGELOG](https://github.com/KarinJS/Karin/releases) 了解最新变化。
@@ -1 +0,0 @@
1
- import{j as t}from"./vendor-react-Hg1DVPZt.js";import{P as r}from"./components-9RKTV4LX.js";import"./vendor-others-B6NXaB-r.js";import"./vendor-editor-B8hjWfkw.js";import"./vendor-ui-utils-5rYIvRjL.js";import"./vendor-heroui-WfpTlnyv.js";import"./page-dashboard-BewrlGFW.js";import"./hooks-D65eaS4p.js";import"./utils-DqFE1yN-.js";import"./vendor-visual-mzxhMYK3.js";const x=()=>t.jsx("div",{className:"min-h-screen flex items-center justify-center",children:t.jsx(r,{})});export{x as default};