From 1bfe971e4a9192011256e9b748977ff6d7c1d35a Mon Sep 17 00:00:00 2001
From: qiuchenfan <2035024011@qq.com>
Date: Mon, 17 Nov 2025 18:51:51 +0800
Subject: [PATCH 1/2] 11171851
---
app/components/WeatherCard.tsx | 35 ++
app/routes/weather.tsx | 49 +++
package.json | 51 +--
pnpm-lock.yaml | 747 ++++++++++++++++++++++++++++++++-
4 files changed, 825 insertions(+), 57 deletions(-)
create mode 100644 app/components/WeatherCard.tsx
create mode 100644 app/routes/weather.tsx
diff --git a/app/components/WeatherCard.tsx b/app/components/WeatherCard.tsx
new file mode 100644
index 0000000..257cac9
--- /dev/null
+++ b/app/components/WeatherCard.tsx
@@ -0,0 +1,35 @@
+import { useWeatherStore } from "@/store/weatherStore";
+import { Cloud } from "lucide-react";
+
+export function WeatherCard(){
+ const{ currentWeather} = useWeatherStore();
+ //样式待修改
+ return (
+
+
+ {currentWeather ? (
+
+
+
+
+ ) :(
+
+
+
+ 暂无天气数据
+
+
+ 请搜索城市查看实时天气信息
+
+
+ )}
+
+ );
+}
\ No newline at end of file
diff --git a/app/routes/weather.tsx b/app/routes/weather.tsx
new file mode 100644
index 0000000..bf7860f
--- /dev/null
+++ b/app/routes/weather.tsx
@@ -0,0 +1,49 @@
+import { toast } from "sonner"
+import { Loader2 } from "lucide-react"
+import { useEffect } from "react"
+import { useWeatherStore } from "../store/weatherStore"
+import { WeatherCard } from "@/components/WeatherCard"
+export function meta() {
+ return [
+ { title: "天气查询页面" },
+ { name: "description", content: "查询天气信息" }
+ ]
+}
+export function Weather() {
+ const { currentWeather, isLoading, error, setError } = useWeatherStore()
+ useEffect(() => {
+ if (error) {
+ toast.error(error)
+ setError("")
+ }
+ }, [ErrorEvent, setError])
+ return (
+
+
+
+ {isLoading && !currentWeather && (
+
+ )
+ }
+ {isLoading || currentWeather ? (
+
+
+
+ ) : null}
+
+
+ )
+}
\ No newline at end of file
diff --git a/package.json b/package.json
index b6e384f..d6a3777 100644
--- a/package.json
+++ b/package.json
@@ -22,45 +22,9 @@
"next-themes": "^0.4.6",
"react": "^19.1.1",
"react-dom": "^19.1.1",
-<<<<<<< HEAD
"react-router": "^7.9.2",
"sonner": "^2.0.7",
- "tailwind-merge": "^3.4.0"
-=======
- "react-router": "^7.9.2"
- },{
- "name": "1114",
- "private": true,
- "type": "module",
- "scripts": {
- "build": "react-router build",
- "dev": "react-router dev",
- "start": "react-router-serve ./build/server/index.js",
- "typecheck": "react-router typegen && tsc"
->>>>>>> 9b018e3e43a44ed8f5b9d08e22c09de35b4ce874
- },
- "dependencies": {
- "@radix-ui/react-dialog": "^1.1.15",
- "@radix-ui/react-label": "^2.1.8",
- "@radix-ui/react-select": "^2.2.6",
- "@radix-ui/react-slot": "^1.2.4",
- "@radix-ui/react-toast": "^1.2.2",
- "@react-router/node": "^7.9.2",
- "@react-router/serve": "^7.9.2",
- "axios": "^1.13.2",
- "class-variance-authority": "^0.7.1",
- "clsx": "^2.1.1",
- "dayjs": "^1.11.19",
- "immer": "^10.2.0",
- "isbot": "^5.1.31",
- "lucide-react": "^0.553.0",
- "next-themes": "^0.4.6",
- "react": "^19.1.1",
- "react-dom": "^19.1.1",
- "react-router": "^7.9.2",
- "sonner": "^2.0.7",
- "tailwind-merge": "^3.4.0",
- "zustand": "^4.4.7"
+ "sooner": "^1.1.4"
},
"devDependencies": {
"@react-router/dev": "^7.9.2",
@@ -75,16 +39,3 @@
"vite-tsconfig-paths": "^5.1.4"
}
}
- "devDependencies": {
- "@react-router/dev": "^7.9.2",
- "@tailwindcss/vite": "^4.1.13",
- "@types/node": "^22",
- "@types/react": "^19.1.13",
- "@types/react-dom": "^19.1.9",
- "tailwindcss": "^4.1.13",
- "tw-animate-css": "^1.4.0",
- "typescript": "^5.9.2",
- "vite": "^7.1.7",
- "vite-tsconfig-paths": "^5.1.4"
- }
-}
\ No newline at end of file
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 495b4eb..c4b3572 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -53,9 +53,9 @@ importers:
sonner:
specifier: ^2.0.7
version: 2.0.7(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
- tailwind-merge:
- specifier: ^3.4.0
- version: 3.4.0
+ sooner:
+ specifier: ^1.1.4
+ version: 1.1.4
devDependencies:
'@react-router/dev':
specifier: ^7.9.2
@@ -64,7 +64,7 @@ importers:
specifier: ^4.1.13
version: 4.1.17(vite@7.2.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2))
'@types/node':
- specifier: ^22
+ specifier: ^22.19.0
version: 22.19.1
'@types/react':
specifier: ^19.1.13
@@ -90,6 +90,18 @@ importers:
packages:
+ '@ava/babel-plugin-throws-helper@2.0.0':
+ resolution: {integrity: sha512-pX8AjCJPlthNUGcvD4g/sgjIaZgOUN0CIBf5IOoLA5YROxuoHOXGvDiJeNZpEUeh62WWen6XfNTHh8Hmp/Oulw==}
+ engines: {node: '>=4'}
+
+ '@ava/babel-preset-stage-4@1.1.0':
+ resolution: {integrity: sha512-oWqTnIGXW3k72UFidXzW0ONlO7hnO9x02S/QReJ7NBGeiBH9cUHY9+EfV6C8PXC6YJH++WrliEq03wMSJGNZFg==}
+ engines: {node: '>=4'}
+
+ '@ava/babel-preset-transform-test-files@3.0.0':
+ resolution: {integrity: sha512-GjO+HUIBzHuVjNAbsWtFzDPblvMAaYa7JYUy9qZeD6VCJlwfH3AdJArb3mAevZ+hUcgNTNimtwY1jGByAXl5ag==}
+ engines: {node: '>=4'}
+
'@babel/code-frame@7.27.1':
resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
engines: {node: '>=6.9.0'}
@@ -1012,6 +1024,10 @@ packages:
resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
engines: {node: '>= 0.6'}
+ ansi-regex@2.1.1:
+ resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==}
+ engines: {node: '>=0.10.0'}
+
ansi-regex@5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
@@ -1020,6 +1036,10 @@ packages:
resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==}
engines: {node: '>=12'}
+ ansi-styles@2.2.1:
+ resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==}
+ engines: {node: '>=0.10.0'}
+
ansi-styles@4.3.0:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
engines: {node: '>=8'}
@@ -1038,9 +1058,103 @@ packages:
array-flatten@1.1.1:
resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
+ babel-code-frame@6.26.0:
+ resolution: {integrity: sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==}
+
babel-dead-code-elimination@1.0.10:
resolution: {integrity: sha512-DV5bdJZTzZ0zn0DC24v3jD7Mnidh6xhKa4GfKCbq3sfW8kaWhDdZjP3i81geA8T33tdYqWKw4D3fVv0CwEgKVA==}
+ babel-generator@6.26.1:
+ resolution: {integrity: sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==}
+
+ babel-helper-builder-binary-assignment-operator-visitor@6.24.1:
+ resolution: {integrity: sha512-gCtfYORSG1fUMX4kKraymq607FWgMWg+j42IFPc18kFQEsmtaibP4UrqsXt8FlEJle25HUd4tsoDR7H2wDhe9Q==}
+
+ babel-helper-call-delegate@6.24.1:
+ resolution: {integrity: sha512-RL8n2NiEj+kKztlrVJM9JT1cXzzAdvWFh76xh/H1I4nKwunzE4INBXn8ieCZ+wh4zWszZk7NBS1s/8HR5jDkzQ==}
+
+ babel-helper-explode-assignable-expression@6.24.1:
+ resolution: {integrity: sha512-qe5csbhbvq6ccry9G7tkXbzNtcDiH4r51rrPUbwwoTzZ18AqxWYRZT6AOmxrpxKnQBW0pYlBI/8vh73Z//78nQ==}
+
+ babel-helper-function-name@6.24.1:
+ resolution: {integrity: sha512-Oo6+e2iX+o9eVvJ9Y5eKL5iryeRdsIkwRYheCuhYdVHsdEQysbc2z2QkqCLIYnNxkT5Ss3ggrHdXiDI7Dhrn4Q==}
+
+ babel-helper-get-function-arity@6.24.1:
+ resolution: {integrity: sha512-WfgKFX6swFB1jS2vo+DwivRN4NB8XUdM3ij0Y1gnC21y1tdBoe6xjVnd7NSI6alv+gZXCtJqvrTeMW3fR/c0ng==}
+
+ babel-helper-hoist-variables@6.24.1:
+ resolution: {integrity: sha512-zAYl3tqerLItvG5cKYw7f1SpvIxS9zi7ohyGHaI9cgDUjAT6YcY9jIEH5CstetP5wHIVSceXwNS7Z5BpJg+rOw==}
+
+ babel-helper-regex@6.26.0:
+ resolution: {integrity: sha512-VlPiWmqmGJp0x0oK27Out1D+71nVVCTSdlbhIVoaBAj2lUgrNjBCRR9+llO4lTSb2O4r7PJg+RobRkhBrf6ofg==}
+
+ babel-helper-remap-async-to-generator@6.24.1:
+ resolution: {integrity: sha512-RYqaPD0mQyQIFRu7Ho5wE2yvA/5jxqCIj/Lv4BXNq23mHYu/vxikOy2JueLiBxQknwapwrJeNCesvY0ZcfnlHg==}
+
+ babel-messages@6.23.0:
+ resolution: {integrity: sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w==}
+
+ babel-plugin-check-es2015-constants@6.22.0:
+ resolution: {integrity: sha512-B1M5KBP29248dViEo1owyY32lk1ZSH2DaNNrXLGt8lyjjHm7pBqAdQ7VKUPR6EEDO323+OvT3MQXbCin8ooWdA==}
+
+ babel-plugin-espower@2.4.0:
+ resolution: {integrity: sha512-/+SRpy7pKgTI28oEHfn1wkuM5QFAdRq8WNsOOih1dVrdV6A/WbNbRZyl0eX5eyDgtb0lOE27PeDFuCX2j8OxVg==}
+
+ babel-plugin-syntax-async-functions@6.13.0:
+ resolution: {integrity: sha512-4Zp4unmHgw30A1eWI5EpACji2qMocisdXhAftfhXoSV9j0Tvj6nRFE3tOmRY912E0FMRm/L5xWE7MGVT2FoLnw==}
+
+ babel-plugin-syntax-exponentiation-operator@6.13.0:
+ resolution: {integrity: sha512-Z/flU+T9ta0aIEKl1tGEmN/pZiI1uXmCiGFRegKacQfEJzp7iNsKloZmyJlQr+75FCJtiFfGIK03SiCvCt9cPQ==}
+
+ babel-plugin-syntax-trailing-function-commas@6.22.0:
+ resolution: {integrity: sha512-Gx9CH3Q/3GKbhs07Bszw5fPTlU+ygrOGfAhEt7W2JICwufpC4SuO0mG0+4NykPBSYPMJhqvVlDBU17qB1D+hMQ==}
+
+ babel-plugin-transform-async-to-generator@6.24.1:
+ resolution: {integrity: sha512-7BgYJujNCg0Ti3x0c/DL3tStvnKS6ktIYOmo9wginv/dfZOrbSZ+qG4IRRHMBOzZ5Awb1skTiAsQXg/+IWkZYw==}
+
+ babel-plugin-transform-es2015-destructuring@6.23.0:
+ resolution: {integrity: sha512-aNv/GDAW0j/f4Uy1OEPZn1mqD+Nfy9viFGBfQ5bZyT35YqOiqx7/tXdyfZkJ1sC21NyEsBdfDY6PYmLHF4r5iA==}
+
+ babel-plugin-transform-es2015-function-name@6.24.1:
+ resolution: {integrity: sha512-iFp5KIcorf11iBqu/y/a7DK3MN5di3pNCzto61FqCNnUX4qeBwcV1SLqe10oXNnCaxBUImX3SckX2/o1nsrTcg==}
+
+ babel-plugin-transform-es2015-modules-commonjs@6.26.2:
+ resolution: {integrity: sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==}
+
+ babel-plugin-transform-es2015-parameters@6.24.1:
+ resolution: {integrity: sha512-8HxlW+BB5HqniD+nLkQ4xSAVq3bR/pcYW9IigY+2y0dI+Y7INFeTbfAQr+63T3E4UDsZGjyb+l9txUnABWxlOQ==}
+
+ babel-plugin-transform-es2015-spread@6.22.0:
+ resolution: {integrity: sha512-3Ghhi26r4l3d0Js933E5+IhHwk0A1yiutj9gwvzmFbVV0sPMYk2lekhOufHBswX7NCoSeF4Xrl3sCIuSIa+zOg==}
+
+ babel-plugin-transform-es2015-sticky-regex@6.24.1:
+ resolution: {integrity: sha512-CYP359ADryTo3pCsH0oxRo/0yn6UsEZLqYohHmvLQdfS9xkf+MbCzE3/Kolw9OYIY4ZMilH25z/5CbQbwDD+lQ==}
+
+ babel-plugin-transform-es2015-unicode-regex@6.24.1:
+ resolution: {integrity: sha512-v61Dbbihf5XxnYjtBN04B/JBvsScY37R1cZT5r9permN1cp+b70DY3Ib3fIkgn1DI9U3tGgBJZVD8p/mE/4JbQ==}
+
+ babel-plugin-transform-exponentiation-operator@6.24.1:
+ resolution: {integrity: sha512-LzXDmbMkklvNhprr20//RStKVcT8Cu+SQtX18eMHLhjHf2yFzwtQ0S2f0jQ+89rokoNdmwoSqYzAhq86FxlLSQ==}
+
+ babel-plugin-transform-strict-mode@6.24.1:
+ resolution: {integrity: sha512-j3KtSpjyLSJxNoCDrhwiJad8kw0gJ9REGj8/CqL0HeRyLnvUNYV9zcqluL6QJSXh3nfsLEmSLvwRfGzrgR96Pw==}
+
+ babel-runtime@6.26.0:
+ resolution: {integrity: sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==}
+
+ babel-template@6.26.0:
+ resolution: {integrity: sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg==}
+
+ babel-traverse@6.26.0:
+ resolution: {integrity: sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA==}
+
+ babel-types@6.26.0:
+ resolution: {integrity: sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==}
+
+ babylon@6.18.0:
+ resolution: {integrity: sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==}
+ hasBin: true
+
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
@@ -1079,13 +1193,24 @@ packages:
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
engines: {node: '>= 0.4'}
+ call-bind@1.0.8:
+ resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==}
+ engines: {node: '>= 0.4'}
+
call-bound@1.0.4:
resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
engines: {node: '>= 0.4'}
+ call-matcher@1.1.0:
+ resolution: {integrity: sha512-IoQLeNwwf9KTNbtSA7aEBb1yfDbdnzwjCetjkC8io5oGeOmK2CBNdg0xr+tadRYKO0p7uQyZzvon0kXlZbvGrw==}
+
caniuse-lite@1.0.30001755:
resolution: {integrity: sha512-44V+Jm6ctPj7R52Na4TLi3Zri4dWUljJd+RDm+j8LtNCc/ihLCT+X1TzoOAkRETEWqjuLnh9581Tl80FvK7jVA==}
+ chalk@1.1.3:
+ resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==}
+ engines: {node: '>=0.10.0'}
+
chokidar@4.0.3:
resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
engines: {node: '>= 14.16.0'}
@@ -1134,6 +1259,10 @@ packages:
resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==}
engines: {node: '>=18'}
+ core-js@2.6.12:
+ resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==}
+ deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.
+
cross-spawn@7.0.6:
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
engines: {node: '>= 8'}
@@ -1166,6 +1295,18 @@ packages:
babel-plugin-macros:
optional: true
+ deep-equal@1.1.2:
+ resolution: {integrity: sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==}
+ engines: {node: '>= 0.4'}
+
+ define-data-property@1.1.4:
+ resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
+ engines: {node: '>= 0.4'}
+
+ define-properties@1.2.1:
+ resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
+ engines: {node: '>= 0.4'}
+
depd@2.0.0:
resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
engines: {node: '>= 0.8'}
@@ -1174,6 +1315,10 @@ packages:
resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+ detect-indent@4.0.0:
+ resolution: {integrity: sha512-BDKtmHlOzwI7iRuEkhzsnPoi5ypEhWAJB5RvHWe1kMr06js3uK5B3734i3ui5Yd+wOJV1cpE4JnivPD283GU/A==}
+ engines: {node: '>=0.10.0'}
+
detect-libc@2.1.2:
resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
engines: {node: '>=8'}
@@ -1242,6 +1387,24 @@ packages:
escape-html@1.0.3:
resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
+ escape-string-regexp@1.0.5:
+ resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
+ engines: {node: '>=0.8.0'}
+
+ espower-location-detector@1.0.0:
+ resolution: {integrity: sha512-Y/3H6ytYwqC3YcOc0gOU22Lp3eI5GAFGOymTdzFyfaiglKgtsw2dePOgXY3yrV+QcLPMPiVYwBU9RKaDoh2bbQ==}
+
+ espurify@1.8.1:
+ resolution: {integrity: sha512-ZDko6eY/o+D/gHCWyHTU85mKDgYcS4FJj7S+YD6WIInm7GQ6AnOjmcL4+buFV/JOztVLELi/7MmuGU5NHta0Mg==}
+
+ estraverse@4.3.0:
+ resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
+ engines: {node: '>=4.0'}
+
+ esutils@2.0.3:
+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+ engines: {node: '>=0.10.0'}
+
etag@1.8.1:
resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
engines: {node: '>= 0.6'}
@@ -1287,6 +1450,9 @@ packages:
function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+ functions-have-names@1.2.3:
+ resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
+
gensync@1.0.0-beta.2:
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
engines: {node: '>=6.9.0'}
@@ -1311,6 +1477,10 @@ packages:
resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
hasBin: true
+ globals@9.18.0:
+ resolution: {integrity: sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==}
+ engines: {node: '>=0.10.0'}
+
globrex@0.1.2:
resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
@@ -1321,10 +1491,21 @@ packages:
graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+ has-ansi@2.0.0:
+ resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==}
+ engines: {node: '>=0.10.0'}
+
+ has-property-descriptors@1.0.2:
+ resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
+
has-symbols@1.1.0:
resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
engines: {node: '>= 0.4'}
+ has-tostringtag@1.0.2:
+ resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
+ engines: {node: '>= 0.4'}
+
hasown@2.0.2:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
@@ -1344,18 +1525,40 @@ packages:
inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+ invariant@2.2.4:
+ resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==}
+
ipaddr.js@1.9.1:
resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
engines: {node: '>= 0.10'}
+ is-arguments@1.2.0:
+ resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==}
+ engines: {node: '>= 0.4'}
+
is-core-module@2.16.1:
resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
engines: {node: '>= 0.4'}
+ is-date-object@1.1.0:
+ resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==}
+ engines: {node: '>= 0.4'}
+
+ is-finite@1.1.0:
+ resolution: {integrity: sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==}
+ engines: {node: '>=0.10.0'}
+
is-fullwidth-code-point@3.0.0:
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
engines: {node: '>=8'}
+ is-regex@1.2.1:
+ resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
+ engines: {node: '>= 0.4'}
+
+ is-url@1.2.4:
+ resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==}
+
isbot@5.1.32:
resolution: {integrity: sha512-VNfjM73zz2IBZmdShMfAUg10prm6t7HFUQmNAEOAVS4YH92ZrZcvkMcGX6cIgBJAzWDzPent/EeAtYEHNPNPBQ==}
engines: {node: '>=18'}
@@ -1370,9 +1573,20 @@ packages:
resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
hasBin: true
+ js-tokens@3.0.2:
+ resolution: {integrity: sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==}
+
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+ jsesc@0.5.0:
+ resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==}
+ hasBin: true
+
+ jsesc@1.3.0:
+ resolution: {integrity: sha512-Mke0DA0QjUWuJlhsE0ZPPhYiJkRap642SmI/4ztCFaUs6V2AiH1sfecc+57NgaryfAA2VR3v6O+CSjC1jZJKOA==}
+ hasBin: true
+
jsesc@3.0.2:
resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==}
engines: {node: '>=6'}
@@ -1460,6 +1674,10 @@ packages:
lodash@4.17.21:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+ loose-envify@1.4.0:
+ resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
+ hasBin: true
+
lru-cache@10.4.3:
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
@@ -1482,6 +1700,13 @@ packages:
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
engines: {node: '>= 0.4'}
+ md5-hex@1.3.0:
+ resolution: {integrity: sha512-lJEPhRxivsaliY4C6REebtP1Lo8yoQsq2bLVP8mJ6Vvzwu3fXQShzHcWnAqdDm1Y42jhZFg0XRpnrKfZ5mYP6w==}
+ engines: {node: '>=0.10.0'}
+
+ md5-o-matic@0.1.1:
+ resolution: {integrity: sha512-QBJSFpsedXUl/Lgs4ySdB2XCzUEcJ3ujpbagdZCkRaYIaC0kFnID8jhc84KEiVv6dNFtIrmW7bqow0lDxgJi6A==}
+
media-typer@0.3.0:
resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
engines: {node: '>= 0.6'}
@@ -1574,6 +1799,14 @@ packages:
resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
engines: {node: '>= 0.4'}
+ object-is@1.1.6:
+ resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==}
+ engines: {node: '>= 0.4'}
+
+ object-keys@1.1.1:
+ resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
+ engines: {node: '>= 0.4'}
+
on-finished@2.3.0:
resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==}
engines: {node: '>= 0.8'}
@@ -1590,6 +1823,9 @@ packages:
resolution: {integrity: sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==}
engines: {node: '>=18'}
+ package-hash@1.2.0:
+ resolution: {integrity: sha512-W5ILqaI3G6bXDuYb7TrQ95TFHfFdjiunpp61PAXj7z32TgJ5NIBaoqZVI6AXUQy/qcqPoFnz0hAZY9KyKd4xNA==}
+
package-json-from-dist@1.0.1:
resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
@@ -1597,6 +1833,10 @@ packages:
resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
engines: {node: '>= 0.8'}
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
path-key@3.1.1:
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
engines: {node: '>=8'}
@@ -1719,6 +1959,30 @@ packages:
resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
engines: {node: '>= 14.18.0'}
+ regenerate@1.4.2:
+ resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==}
+
+ regenerator-runtime@0.11.1:
+ resolution: {integrity: sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==}
+
+ regexp.prototype.flags@1.5.4:
+ resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
+ engines: {node: '>= 0.4'}
+
+ regexpu-core@2.0.0:
+ resolution: {integrity: sha512-tJ9+S4oKjxY8IZ9jmjnp/mtytu1u3iyIQAfmI51IKWH6bFf7XR1ybtaO6j7INhZKXOTYADk7V5qxaqLkmNxiZQ==}
+
+ regjsgen@0.2.0:
+ resolution: {integrity: sha512-x+Y3yA24uF68m5GA+tBjbGYo64xXVJpbToBaWCoSNSc1hdk6dfctaRWrNFTVJZIIhL5GxW8zwjoixbnifnK59g==}
+
+ regjsparser@0.1.5:
+ resolution: {integrity: sha512-jlQ9gYLfk2p3V5Ag5fYhA7fv7OHzd1KUH0PRP46xc3TgwjwgROIW572AfYg/X9kaNq/LJnu6oJcFRXlIrGoTRw==}
+ hasBin: true
+
+ repeating@2.0.1:
+ resolution: {integrity: sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==}
+ engines: {node: '>=0.10.0'}
+
retry@0.12.0:
resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==}
engines: {node: '>= 4'}
@@ -1760,6 +2024,14 @@ packages:
set-cookie-parser@2.7.2:
resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==}
+ set-function-length@1.2.2:
+ resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
+ engines: {node: '>= 0.4'}
+
+ set-function-name@2.0.2:
+ resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==}
+ engines: {node: '>= 0.4'}
+
setprototypeof@1.2.0:
resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
@@ -1797,6 +2069,9 @@ packages:
react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc
react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ sooner@1.1.4:
+ resolution: {integrity: sha512-9hltBBOSVcxoUz8/U41Jnd+Wk0rbB4WKOZUlezPWNFZaIUwTMzoHas0L2mCHD9UDzDjraiR8aDCuPtytqRW7rQ==}
+
source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
@@ -1804,6 +2079,10 @@ packages:
source-map-support@0.5.21:
resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+ source-map@0.5.7:
+ resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==}
+ engines: {node: '>=0.10.0'}
+
source-map@0.6.1:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
@@ -1832,6 +2111,10 @@ packages:
resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
engines: {node: '>=12'}
+ strip-ansi@3.0.1:
+ resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==}
+ engines: {node: '>=0.10.0'}
+
strip-ansi@6.0.1:
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
engines: {node: '>=8'}
@@ -1840,8 +2123,9 @@ packages:
resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==}
engines: {node: '>=12'}
- tailwind-merge@3.4.0:
- resolution: {integrity: sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==}
+ supports-color@2.0.0:
+ resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==}
+ engines: {node: '>=0.8.0'}
tailwindcss@4.1.17:
resolution: {integrity: sha512-j9Ee2YjuQqYT9bbRTfTZht9W/ytp5H+jJpZKiYdP/bpnXARAuELt9ofP0lPnmHjbga7SNQIxdTAXCmtKVYjN+Q==}
@@ -1854,10 +2138,18 @@ packages:
resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
engines: {node: '>=12.0.0'}
+ to-fast-properties@1.0.3:
+ resolution: {integrity: sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==}
+ engines: {node: '>=0.10.0'}
+
toidentifier@1.0.1:
resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
engines: {node: '>=0.6'}
+ trim-right@1.0.1:
+ resolution: {integrity: sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw==}
+ engines: {node: '>=0.10.0'}
+
tsconfck@3.1.6:
resolution: {integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==}
engines: {node: ^18 || >=20}
@@ -2010,11 +2302,39 @@ packages:
resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
engines: {node: '>=12'}
+ xtend@4.0.2:
+ resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
+ engines: {node: '>=0.4'}
+
yallist@3.1.1:
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
snapshots:
+ '@ava/babel-plugin-throws-helper@2.0.0': {}
+
+ '@ava/babel-preset-stage-4@1.1.0':
+ dependencies:
+ babel-plugin-check-es2015-constants: 6.22.0
+ babel-plugin-syntax-trailing-function-commas: 6.22.0
+ babel-plugin-transform-async-to-generator: 6.24.1
+ babel-plugin-transform-es2015-destructuring: 6.23.0
+ babel-plugin-transform-es2015-function-name: 6.24.1
+ babel-plugin-transform-es2015-modules-commonjs: 6.26.2
+ babel-plugin-transform-es2015-parameters: 6.24.1
+ babel-plugin-transform-es2015-spread: 6.22.0
+ babel-plugin-transform-es2015-sticky-regex: 6.24.1
+ babel-plugin-transform-es2015-unicode-regex: 6.24.1
+ babel-plugin-transform-exponentiation-operator: 6.24.1
+ package-hash: 1.2.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@ava/babel-preset-transform-test-files@3.0.0':
+ dependencies:
+ '@ava/babel-plugin-throws-helper': 2.0.0
+ babel-plugin-espower: 2.4.0
+
'@babel/code-frame@7.27.1':
dependencies:
'@babel/helper-validator-identifier': 7.28.5
@@ -2869,10 +3189,14 @@ snapshots:
mime-types: 2.1.35
negotiator: 0.6.3
+ ansi-regex@2.1.1: {}
+
ansi-regex@5.0.1: {}
ansi-regex@6.2.2: {}
+ ansi-styles@2.2.1: {}
+
ansi-styles@4.3.0:
dependencies:
color-convert: 2.0.1
@@ -2887,6 +3211,12 @@ snapshots:
array-flatten@1.1.1: {}
+ babel-code-frame@6.26.0:
+ dependencies:
+ chalk: 1.1.3
+ esutils: 2.0.3
+ js-tokens: 3.0.2
+
babel-dead-code-elimination@1.0.10:
dependencies:
'@babel/core': 7.28.5
@@ -2896,6 +3226,209 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ babel-generator@6.26.1:
+ dependencies:
+ babel-messages: 6.23.0
+ babel-runtime: 6.26.0
+ babel-types: 6.26.0
+ detect-indent: 4.0.0
+ jsesc: 1.3.0
+ lodash: 4.17.21
+ source-map: 0.5.7
+ trim-right: 1.0.1
+
+ babel-helper-builder-binary-assignment-operator-visitor@6.24.1:
+ dependencies:
+ babel-helper-explode-assignable-expression: 6.24.1
+ babel-runtime: 6.26.0
+ babel-types: 6.26.0
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-helper-call-delegate@6.24.1:
+ dependencies:
+ babel-helper-hoist-variables: 6.24.1
+ babel-runtime: 6.26.0
+ babel-traverse: 6.26.0
+ babel-types: 6.26.0
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-helper-explode-assignable-expression@6.24.1:
+ dependencies:
+ babel-runtime: 6.26.0
+ babel-traverse: 6.26.0
+ babel-types: 6.26.0
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-helper-function-name@6.24.1:
+ dependencies:
+ babel-helper-get-function-arity: 6.24.1
+ babel-runtime: 6.26.0
+ babel-template: 6.26.0
+ babel-traverse: 6.26.0
+ babel-types: 6.26.0
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-helper-get-function-arity@6.24.1:
+ dependencies:
+ babel-runtime: 6.26.0
+ babel-types: 6.26.0
+
+ babel-helper-hoist-variables@6.24.1:
+ dependencies:
+ babel-runtime: 6.26.0
+ babel-types: 6.26.0
+
+ babel-helper-regex@6.26.0:
+ dependencies:
+ babel-runtime: 6.26.0
+ babel-types: 6.26.0
+ lodash: 4.17.21
+
+ babel-helper-remap-async-to-generator@6.24.1:
+ dependencies:
+ babel-helper-function-name: 6.24.1
+ babel-runtime: 6.26.0
+ babel-template: 6.26.0
+ babel-traverse: 6.26.0
+ babel-types: 6.26.0
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-messages@6.23.0:
+ dependencies:
+ babel-runtime: 6.26.0
+
+ babel-plugin-check-es2015-constants@6.22.0:
+ dependencies:
+ babel-runtime: 6.26.0
+
+ babel-plugin-espower@2.4.0:
+ dependencies:
+ babel-generator: 6.26.1
+ babylon: 6.18.0
+ call-matcher: 1.1.0
+ core-js: 2.6.12
+ espower-location-detector: 1.0.0
+ espurify: 1.8.1
+ estraverse: 4.3.0
+
+ babel-plugin-syntax-async-functions@6.13.0: {}
+
+ babel-plugin-syntax-exponentiation-operator@6.13.0: {}
+
+ babel-plugin-syntax-trailing-function-commas@6.22.0: {}
+
+ babel-plugin-transform-async-to-generator@6.24.1:
+ dependencies:
+ babel-helper-remap-async-to-generator: 6.24.1
+ babel-plugin-syntax-async-functions: 6.13.0
+ babel-runtime: 6.26.0
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-transform-es2015-destructuring@6.23.0:
+ dependencies:
+ babel-runtime: 6.26.0
+
+ babel-plugin-transform-es2015-function-name@6.24.1:
+ dependencies:
+ babel-helper-function-name: 6.24.1
+ babel-runtime: 6.26.0
+ babel-types: 6.26.0
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-transform-es2015-modules-commonjs@6.26.2:
+ dependencies:
+ babel-plugin-transform-strict-mode: 6.24.1
+ babel-runtime: 6.26.0
+ babel-template: 6.26.0
+ babel-types: 6.26.0
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-transform-es2015-parameters@6.24.1:
+ dependencies:
+ babel-helper-call-delegate: 6.24.1
+ babel-helper-get-function-arity: 6.24.1
+ babel-runtime: 6.26.0
+ babel-template: 6.26.0
+ babel-traverse: 6.26.0
+ babel-types: 6.26.0
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-transform-es2015-spread@6.22.0:
+ dependencies:
+ babel-runtime: 6.26.0
+
+ babel-plugin-transform-es2015-sticky-regex@6.24.1:
+ dependencies:
+ babel-helper-regex: 6.26.0
+ babel-runtime: 6.26.0
+ babel-types: 6.26.0
+
+ babel-plugin-transform-es2015-unicode-regex@6.24.1:
+ dependencies:
+ babel-helper-regex: 6.26.0
+ babel-runtime: 6.26.0
+ regexpu-core: 2.0.0
+
+ babel-plugin-transform-exponentiation-operator@6.24.1:
+ dependencies:
+ babel-helper-builder-binary-assignment-operator-visitor: 6.24.1
+ babel-plugin-syntax-exponentiation-operator: 6.13.0
+ babel-runtime: 6.26.0
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-transform-strict-mode@6.24.1:
+ dependencies:
+ babel-runtime: 6.26.0
+ babel-types: 6.26.0
+
+ babel-runtime@6.26.0:
+ dependencies:
+ core-js: 2.6.12
+ regenerator-runtime: 0.11.1
+
+ babel-template@6.26.0:
+ dependencies:
+ babel-runtime: 6.26.0
+ babel-traverse: 6.26.0
+ babel-types: 6.26.0
+ babylon: 6.18.0
+ lodash: 4.17.21
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-traverse@6.26.0:
+ dependencies:
+ babel-code-frame: 6.26.0
+ babel-messages: 6.23.0
+ babel-runtime: 6.26.0
+ babel-types: 6.26.0
+ babylon: 6.18.0
+ debug: 2.6.9
+ globals: 9.18.0
+ invariant: 2.2.4
+ lodash: 4.17.21
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-types@6.26.0:
+ dependencies:
+ babel-runtime: 6.26.0
+ esutils: 2.0.3
+ lodash: 4.17.21
+ to-fast-properties: 1.0.3
+
+ babylon@6.18.0: {}
+
balanced-match@1.0.2: {}
baseline-browser-mapping@2.8.28: {}
@@ -2944,13 +3477,35 @@ snapshots:
es-errors: 1.3.0
function-bind: 1.1.2
+ call-bind@1.0.8:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-define-property: 1.0.1
+ get-intrinsic: 1.3.0
+ set-function-length: 1.2.2
+
call-bound@1.0.4:
dependencies:
call-bind-apply-helpers: 1.0.2
get-intrinsic: 1.3.0
+ call-matcher@1.1.0:
+ dependencies:
+ core-js: 2.6.12
+ deep-equal: 1.1.2
+ espurify: 1.8.1
+ estraverse: 4.3.0
+
caniuse-lite@1.0.30001755: {}
+ chalk@1.1.3:
+ dependencies:
+ ansi-styles: 2.2.1
+ escape-string-regexp: 1.0.5
+ has-ansi: 2.0.0
+ strip-ansi: 3.0.1
+ supports-color: 2.0.0
+
chokidar@4.0.3:
dependencies:
readdirp: 4.1.2
@@ -2997,6 +3552,8 @@ snapshots:
cookie@1.0.2: {}
+ core-js@2.6.12: {}
+
cross-spawn@7.0.6:
dependencies:
path-key: 3.1.1
@@ -3015,10 +3572,35 @@ snapshots:
dedent@1.7.0: {}
+ deep-equal@1.1.2:
+ dependencies:
+ is-arguments: 1.2.0
+ is-date-object: 1.1.0
+ is-regex: 1.2.1
+ object-is: 1.1.6
+ object-keys: 1.1.1
+ regexp.prototype.flags: 1.5.4
+
+ define-data-property@1.1.4:
+ dependencies:
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ gopd: 1.2.0
+
+ define-properties@1.2.1:
+ dependencies:
+ define-data-property: 1.1.4
+ has-property-descriptors: 1.0.2
+ object-keys: 1.1.1
+
depd@2.0.0: {}
destroy@1.2.0: {}
+ detect-indent@4.0.0:
+ dependencies:
+ repeating: 2.0.1
+
detect-libc@2.1.2: {}
detect-node-es@1.1.0: {}
@@ -3093,6 +3675,23 @@ snapshots:
escape-html@1.0.3: {}
+ escape-string-regexp@1.0.5: {}
+
+ espower-location-detector@1.0.0:
+ dependencies:
+ is-url: 1.2.4
+ path-is-absolute: 1.0.1
+ source-map: 0.5.7
+ xtend: 4.0.2
+
+ espurify@1.8.1:
+ dependencies:
+ core-js: 2.6.12
+
+ estraverse@4.3.0: {}
+
+ esutils@2.0.3: {}
+
etag@1.8.1: {}
exit-hook@2.2.1: {}
@@ -3163,6 +3762,8 @@ snapshots:
function-bind@1.1.2: {}
+ functions-have-names@1.2.3: {}
+
gensync@1.0.0-beta.2: {}
get-intrinsic@1.3.0:
@@ -3196,14 +3797,28 @@ snapshots:
package-json-from-dist: 1.0.1
path-scurry: 1.11.1
+ globals@9.18.0: {}
+
globrex@0.1.2: {}
gopd@1.2.0: {}
graceful-fs@4.2.11: {}
+ has-ansi@2.0.0:
+ dependencies:
+ ansi-regex: 2.1.1
+
+ has-property-descriptors@1.0.2:
+ dependencies:
+ es-define-property: 1.0.1
+
has-symbols@1.1.0: {}
+ has-tostringtag@1.0.2:
+ dependencies:
+ has-symbols: 1.1.0
+
hasown@2.0.2:
dependencies:
function-bind: 1.1.2
@@ -3226,14 +3841,39 @@ snapshots:
inherits@2.0.4: {}
+ invariant@2.2.4:
+ dependencies:
+ loose-envify: 1.4.0
+
ipaddr.js@1.9.1: {}
+ is-arguments@1.2.0:
+ dependencies:
+ call-bound: 1.0.4
+ has-tostringtag: 1.0.2
+
is-core-module@2.16.1:
dependencies:
hasown: 2.0.2
+ is-date-object@1.1.0:
+ dependencies:
+ call-bound: 1.0.4
+ has-tostringtag: 1.0.2
+
+ is-finite@1.1.0: {}
+
is-fullwidth-code-point@3.0.0: {}
+ is-regex@1.2.1:
+ dependencies:
+ call-bound: 1.0.4
+ gopd: 1.2.0
+ has-tostringtag: 1.0.2
+ hasown: 2.0.2
+
+ is-url@1.2.4: {}
+
isbot@5.1.32: {}
isexe@2.0.0: {}
@@ -3246,8 +3886,14 @@ snapshots:
jiti@2.6.1: {}
+ js-tokens@3.0.2: {}
+
js-tokens@4.0.0: {}
+ jsesc@0.5.0: {}
+
+ jsesc@1.3.0: {}
+
jsesc@3.0.2: {}
json-parse-even-better-errors@3.0.2: {}
@@ -3305,6 +3951,10 @@ snapshots:
lodash@4.17.21: {}
+ loose-envify@1.4.0:
+ dependencies:
+ js-tokens: 4.0.0
+
lru-cache@10.4.3: {}
lru-cache@5.1.1:
@@ -3323,6 +3973,12 @@ snapshots:
math-intrinsics@1.1.0: {}
+ md5-hex@1.3.0:
+ dependencies:
+ md5-o-matic: 0.1.1
+
+ md5-o-matic@0.1.1: {}
+
media-typer@0.3.0: {}
merge-descriptors@1.0.3: {}
@@ -3401,6 +4057,13 @@ snapshots:
object-inspect@1.13.4: {}
+ object-is@1.1.6:
+ dependencies:
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+
+ object-keys@1.1.1: {}
+
on-finished@2.3.0:
dependencies:
ee-first: 1.1.1
@@ -3413,10 +4076,16 @@ snapshots:
p-map@7.0.4: {}
+ package-hash@1.2.0:
+ dependencies:
+ md5-hex: 1.3.0
+
package-json-from-dist@1.0.1: {}
parseurl@1.3.3: {}
+ path-is-absolute@1.0.1: {}
+
path-key@3.1.1: {}
path-scurry@1.11.1:
@@ -3515,6 +4184,35 @@ snapshots:
readdirp@4.1.2: {}
+ regenerate@1.4.2: {}
+
+ regenerator-runtime@0.11.1: {}
+
+ regexp.prototype.flags@1.5.4:
+ dependencies:
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-errors: 1.3.0
+ get-proto: 1.0.1
+ gopd: 1.2.0
+ set-function-name: 2.0.2
+
+ regexpu-core@2.0.0:
+ dependencies:
+ regenerate: 1.4.2
+ regjsgen: 0.2.0
+ regjsparser: 0.1.5
+
+ regjsgen@0.2.0: {}
+
+ regjsparser@0.1.5:
+ dependencies:
+ jsesc: 0.5.0
+
+ repeating@2.0.1:
+ dependencies:
+ is-finite: 1.1.0
+
retry@0.12.0: {}
rollup@4.53.2:
@@ -3586,6 +4284,22 @@ snapshots:
set-cookie-parser@2.7.2: {}
+ set-function-length@1.2.2:
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.3.0
+ gopd: 1.2.0
+ has-property-descriptors: 1.0.2
+
+ set-function-name@2.0.2:
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ functions-have-names: 1.2.3
+ has-property-descriptors: 1.0.2
+
setprototypeof@1.2.0: {}
shebang-command@2.0.0:
@@ -3629,6 +4343,13 @@ snapshots:
react: 19.2.0
react-dom: 19.2.0(react@19.2.0)
+ sooner@1.1.4:
+ dependencies:
+ '@ava/babel-preset-stage-4': 1.1.0
+ '@ava/babel-preset-transform-test-files': 3.0.0
+ transitivePeerDependencies:
+ - supports-color
+
source-map-js@1.2.1: {}
source-map-support@0.5.21:
@@ -3636,6 +4357,8 @@ snapshots:
buffer-from: 1.1.2
source-map: 0.6.1
+ source-map@0.5.7: {}
+
source-map@0.6.1: {}
spdx-correct@3.2.0:
@@ -3666,6 +4389,10 @@ snapshots:
emoji-regex: 9.2.2
strip-ansi: 7.1.2
+ strip-ansi@3.0.1:
+ dependencies:
+ ansi-regex: 2.1.1
+
strip-ansi@6.0.1:
dependencies:
ansi-regex: 5.0.1
@@ -3674,7 +4401,7 @@ snapshots:
dependencies:
ansi-regex: 6.2.2
- tailwind-merge@3.4.0: {}
+ supports-color@2.0.0: {}
tailwindcss@4.1.17: {}
@@ -3685,8 +4412,12 @@ snapshots:
fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
+ to-fast-properties@1.0.3: {}
+
toidentifier@1.0.1: {}
+ trim-right@1.0.1: {}
+
tsconfck@3.1.6(typescript@5.9.3):
optionalDependencies:
typescript: 5.9.3
@@ -3808,4 +4539,6 @@ snapshots:
string-width: 5.1.2
strip-ansi: 7.1.2
+ xtend@4.0.2: {}
+
yallist@3.1.1: {}
From 374f5b7672e3dd2409cbf6762de9c6b5ea501d0f Mon Sep 17 00:00:00 2001
From: qiuchenfan <2035024011@qq.com>
Date: Mon, 17 Nov 2025 18:57:40 +0800
Subject: [PATCH 2/2] qiu4
---
app/lib/utils.ts | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/app/lib/utils.ts b/app/lib/utils.ts
index bd0c391..96a51f4 100644
--- a/app/lib/utils.ts
+++ b/app/lib/utils.ts
@@ -4,3 +4,12 @@ import { twMerge } from "tailwind-merge"
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs))
}
+
+export const formatTemperature = (
+ temp: number,
+ unit: 'celsius' | 'fahrenheit' = 'celsius'
+): string => {
+ const value = unit === 'fahrenheit' ? (temp * 9) / 5 + 32 : temp;
+ const symbol = unit === 'fahrenheit' ? '°F' : '°C';
+ return `${Math.round(value)}${symbol}`;
+};
\ No newline at end of file