diff --git a/package.json b/package.json index 2396db5..94ed209 100644 --- a/package.json +++ b/package.json @@ -16,26 +16,32 @@ "@dnd-kit/modifiers": "^9.0.0", "@dnd-kit/sortable": "^10.0.0", "@dnd-kit/utilities": "^3.2.2", + "@heroicons/react": "^2.2.0", "@mantine/code-highlight": "^7.15.2", "@mantine/core": "^7.15.2", "@mantine/hooks": "^7.15.2", + "@material-tailwind/react": "^2.1.10", "@monaco-editor/react": "^4.6.0", "@supabase/supabase-js": "^2.38.4", "ai": "^4.0.22", "antd": "^5.11.0", + "apexcharts": "^4.3.0", "code-highlight": "^1.0.0", "dayjs": "^1.11.13", "dnd-kit": "^0.0.2", + "heroicons": "^2.2.0", "html2canvas": "^1.4.1", "jspdf": "^2.5.2", "lodash": "^4.17.21", "react": "^18.2.0", + "react-apexcharts": "^1.7.0", "react-dom": "^18.2.0", "react-icons": "^5.4.0", "react-infinite-scroll-component": "^6.1.0", "react-router-dom": "^6.18.0", "react-use": "^17.6.0", - "recharts": "^2.9.0", + "recharts": "^2.15.0", + "remixicon": "^4.6.0", "styled-components": "^6.1.0", "uuid": "^11.0.3", "zod": "^3.24.1" diff --git a/src/components/Barchart/index.jsx b/src/components/Barchart/index.jsx new file mode 100644 index 0000000..5c7460b --- /dev/null +++ b/src/components/Barchart/index.jsx @@ -0,0 +1,111 @@ +import { + Card, + CardBody, + CardHeader, + Typography, + } from "@material-tailwind/react"; + import Chart from "react-apexcharts"; + const chartConfig = { + type: "bar", + height: 240, + series: [ + { + name: "Sales", + data: [50, 40, 300, 320, 500, 350, 200, 230, 500], + }, + ], + options: { + chart: { + toolbar: { + show: false, + }, + }, + title: { + show: "", + }, + dataLabels: { + enabled: false, + }, + colors: ["#020617"], + plotOptions: { + bar: { + columnWidth: "40%", + borderRadius: 2, + }, + }, + xaxis: { + axisTicks: { + show: false, + }, + axisBorder: { + show: false, + }, + labels: { + style: { + colors: "#616161", + fontSize: "12px", + fontFamily: "inherit", + fontWeight: 400, + }, + }, + categories: [ + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec", + ], + }, + yaxis: { + labels: { + style: { + colors: "#616161", + fontSize: "12px", + fontFamily: "inherit", + fontWeight: 400, + }, + }, + }, + grid: { + show: true, + borderColor: "#dddddd", + strokeDashArray: 5, + xaxis: { + lines: { + show: true, + }, + }, + padding: { + top: 5, + right: 20, + }, + }, + fill: { + opacity: 0.8, + }, + tooltip: { + theme: "dark", + }, + }, + }; + + export default function Example(props) { + return ( + + + + + + + + ); + } \ No newline at end of file diff --git a/src/components/ChatAi/index.jsx b/src/components/ChatAi/index.jsx deleted file mode 100644 index 1e764d9..0000000 --- a/src/components/ChatAi/index.jsx +++ /dev/null @@ -1,220 +0,0 @@ -import { Button, Drawer, Input, Space, message } from 'antd'; -import { useChat } from "ai/react"; -import { CodeHighlight } from "@mantine/code-highlight"; -import { DownloadOutlined, EditOutlined, CheckOutlined, CloseOutlined } from '@ant-design/icons'; -import { useRef, useEffect, useState } from 'react'; -import { useSessionStorage } from 'react-use'; -import Editor from "@monaco-editor/react"; - -export default function ChatAIDrawer({ open, onClose, onExport }) { - const STORAGE_KEY = 'chat_history'; - const [storedMessages, setStoredMessages] = useSessionStorage(STORAGE_KEY, []); - - const { messages, input, handleSubmit, handleInputChange, isLoading, setMessages } = useChat({ - api: "https://test-ai-quirkyai.vercel.app/api/chat", - initialMessages: storedMessages.length>0? JSON.parse(storedMessages):[], - }); - - const messagesEndRef = useRef(null); - useEffect(() => { - setStoredMessages(JSON.stringify(messages)); - }, [messages, setStoredMessages]); - - // 新消息时自动滚动到底部 - useEffect(() => { - messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' }); - }, [messages]); - - // 修改导出函数,接收单条消息内容 - const handleExport = (content) => { - try { - const jsonContent = JSON.parse(content); - onExport?.(jsonContent); - } catch (error) { - console.log(error); - message.error('导出失败,请重试'); - } - }; - - const [editingMessageId, setEditingMessageId] = useState(null); - const [editingContent, setEditingContent] = useState(''); - - // 优化编辑处理函数 - const handleEdit = (message) => { - if(isLoading) return; - setEditingContent(message.content); - setEditingMessageId(message.id); - }; - - const handleSaveEdit = () => { - try { - JSON.parse(editingContent); - setMessages(messages.map(msg => - msg.id === editingMessageId - ? { ...msg, content: editingContent } - : msg - )); - setEditingMessageId(null); - message.success('编辑成功'); - } catch (error) { - message.error('请输入有效的 JSON 格式'); - } - }; - - const handleCancelEdit = () => { - setEditingMessageId(null); - setEditingContent(''); - }; - - return ( - - AI 助手 - - - } - placement="right" - width={800} - open={open} - onClose={onClose} - > -
-
- {messages.map((message) => ( -
-
- - {message.role === 'assistant' ? 'AI 助手' : '用户'} - - {message.role === 'assistant' && ( - - - - - )} -
- - {message.role === "assistant" ? ( -
- {editingMessageId === message.id ? ( -
- { - editor.getModel()?.updateOptions({ tabSize: 2 }); - editor.focus(); - }} - /> -
- - -
-
- ) : ( - - )} -
- ) : ( -
- {message.content} -
- )} -
- ))} -
-
- -
-
- - -
-
-
- - ); -} \ No newline at end of file diff --git a/src/components/Layout/Sidebar.jsx b/src/components/Layout/Sidebar.jsx index 8c56ee2..531398d 100644 --- a/src/components/Layout/Sidebar.jsx +++ b/src/components/Layout/Sidebar.jsx @@ -66,11 +66,7 @@ const Sidebar = ({ collapsed }) => { >>>>>> 8dccf8e554eefcfa832eca45be35be4dddad3cb8 defaultOpenKeys={defaultOpenKeys} items={menuClient} onClick={handleMenuClick} diff --git a/src/components/Piechart/index.jsx b/src/components/Piechart/index.jsx new file mode 100644 index 0000000..023fb47 --- /dev/null +++ b/src/components/Piechart/index.jsx @@ -0,0 +1,49 @@ +import React from 'react' +import { + Card, + CardBody, + CardHeader, + Typography, + } from "@material-tailwind/react"; + import Chart from "react-apexcharts"; + +export default function index(props) { + const chartConfig = { + type: "pie", + width: 280, + height: 280, + series: [44, 55, 13, 43, 22], + options: { + chart: { + toolbar: { + show: false, + }, + }, + title: { + show: "", + }, + dataLabels: { + enabled: false, + }, + colors: ["#020617", "#ff8f00", "#00897b", "#1e88e5", "#d81b60"], + legend: { + show: false, + }, + }, + }; + return ( + + + + + + + + + ) +} diff --git a/src/components/auth/ProtectedRoute.jsx b/src/components/auth/ProtectedRoute.jsx index 9a96c28..ebf75bd 100644 --- a/src/components/auth/ProtectedRoute.jsx +++ b/src/components/auth/ProtectedRoute.jsx @@ -29,7 +29,7 @@ export const ProtectedRoute = ({ children }) => { }); if (!hasPermission) { - return ; + return ; } return children; diff --git a/src/components/dashboard/StatCard.jsx b/src/components/dashboard/StatCard.jsx index 07ed6ba..6c8d2a7 100644 --- a/src/components/dashboard/StatCard.jsx +++ b/src/components/dashboard/StatCard.jsx @@ -8,31 +8,33 @@ const StatCard = ({ icon, title, count, amount, color = '#1677ff' }) => { -
-
- {icon} -
-
-

- {title} -

-
- {count} invoices +
+
+
+ {icon}
-
- {formatCurrency(amount)} +
+

+ {title} +

+
+ {count} invoices +
+
+ {formatCurrency(amount)} +
diff --git a/src/components/dashboard/StatisticsOverview.jsx b/src/components/dashboard/StatisticsOverview.jsx index 28747d5..a1161ac 100644 --- a/src/components/dashboard/StatisticsOverview.jsx +++ b/src/components/dashboard/StatisticsOverview.jsx @@ -42,7 +42,7 @@ const stats = [ const StatisticsOverview = () => { return ( -
+
{stats.map((stat, index) => ( ))} diff --git a/src/components/difyChatAi/index.jsx b/src/components/difyChatAi/index.jsx index 7eb3f64..504a897 100644 --- a/src/components/difyChatAi/index.jsx +++ b/src/components/difyChatAi/index.jsx @@ -29,8 +29,6 @@ export default function DifyChatDrawer({ open, onClose, onExport }) { useEffect(() => { if (storedMessages && storedMessages.length > 0) { - console.log(storedMessages,'storedMessages'); - setMessages(storedMessages); } }, []); @@ -106,6 +104,7 @@ export default function DifyChatDrawer({ open, onClose, onExport }) { width={800} open={open} onClose={onClose} + className="rounded-l-xl" >
@@ -215,20 +214,20 @@ export default function DifyChatDrawer({ open, onClose, onExport }) {
-
+
setInput(e.target.value)} disabled={isLoading} - className="flex-1 rounded-md " + className="flex-1 rounded-lg border-gray-300 dark:border-gray-600 hover:border-blue-400 dark:hover:border-blue-500 focus:border-blue-600 dark:focus:border-blue-500 focus:shadow-blue-100 dark:focus:shadow-blue-900 dark:bg-gray-700 dark:text-gray-200" /> diff --git a/src/contexts/AuthContext.jsx b/src/contexts/AuthContext.jsx index 07073f0..e7be1fc 100644 --- a/src/contexts/AuthContext.jsx +++ b/src/contexts/AuthContext.jsx @@ -126,8 +126,7 @@ export const AuthProvider = ({ children }) => { // 如果有重定向路径,则导航到该路径 navigate(decodeURIComponent(redirectTo), { replace: true }); } else { - // 如果没有重定向路径,则导航到首页 - navigate("/home", { replace: true }); + navigate("/dashboard", { replace: true }); } return data; @@ -142,7 +141,7 @@ export const AuthProvider = ({ children }) => { const signInWithGoogle = async () => { try { setLoading(true); - const redirectTo = searchParams.get("redirectTo") || "/home"; + const redirectTo = searchParams.get("redirectTo") || "/dashboard"; const { data, error } = await supabase.auth.signInWithOAuth({ provider: "google", diff --git a/src/hooks/aichat.jsx b/src/hooks/aichat.jsx index 002cbce..dd7a40d 100644 --- a/src/hooks/aichat.jsx +++ b/src/hooks/aichat.jsx @@ -9,7 +9,7 @@ const STORAGE_KEY = 'dify_chat_history'; const CONVERSATION_ID_KEY = 'dify_conversation_id'; export function useDifyChat() { - const [storedMessages, setStoredMessages] = useSessionStorage(STORAGE_KEY, []); + const [storedMessages, setStoredMessages] = useSessionStorage(STORAGE_KEY, '[]'); const [conversationId, setConversationId] = useSessionStorage(CONVERSATION_ID_KEY, ''); const [messages, setMessages] = useState([]); const [isLoading, setIsLoading] = useState(false); @@ -18,7 +18,7 @@ export function useDifyChat() { const clearHistory = () => { setMessages([]); - setStoredMessages([]); + setStoredMessages('[]'); setConversationId(''); message.success('历史记录已清空'); }; diff --git a/src/pages/Dashboard.jsx b/src/pages/Dashboard.jsx index 2f4e534..0d57a7b 100644 --- a/src/pages/Dashboard.jsx +++ b/src/pages/Dashboard.jsx @@ -1,8 +1,10 @@ import React from 'react'; import { Card } from 'antd'; import StatisticsOverview from '@/components/dashboard/StatisticsOverview'; - +import Bar from '@/components/Barchart' +import Pie from '@/components/Piechart' const Dashboard = () => { + return (
{ } }} > -
测试:member可见,最低权限
- {/* */} + +
+ + + + +
); diff --git a/src/pages/company/quotation/detail/index.jsx b/src/pages/company/quotation/detail/index.jsx index 9c70388..7357677 100644 --- a/src/pages/company/quotation/detail/index.jsx +++ b/src/pages/company/quotation/detail/index.jsx @@ -22,7 +22,6 @@ import { useNavigate, useParams, useSearchParams } from "react-router-dom"; import { v4 as uuidv4 } from "uuid"; import SectionList from '@/components/SectionList' import DifyChatDrawer from '@/components/difyChatAi'; -import ChatAIDrawer from '@/components/ChatAi'; const { Title } = Typography; // 添加货币符号映射 @@ -59,27 +58,25 @@ const QuotationForm = () => { // 计算小节总额 const calculateSectionTotal = useMemo( - () => - (items = []) => { - if (!Array.isArray(items)) return 0; - return items.reduce((sum, item) => { - if (!item) return sum; - return sum + calculateItemAmount(item.quantity, item.price); - }, 0); - }, + () => (items = []) => { + if (!Array.isArray(items)) return 0; + return items.reduce((sum, item) => { + if (!item) return sum; + return sum + calculateItemAmount(item.quantity, item.price); + }, 0); + }, [calculateItemAmount] ); // 计算总金额 const calculateTotalAmount = useMemo( - () => - (sections = []) => { - if (!Array.isArray(sections)) return 0; - return sections.reduce((sum, section) => { - if (!section) return sum; - return sum + calculateSectionTotal(section.items); - }, 0); - }, + () => (sections = []) => { + if (!sections || !Array.isArray(sections)) return 0; + return sections.reduce((sum, section) => { + if (!section || !section.items) return sum; + return sum + calculateSectionTotal(section.items); + }, 0); + }, [calculateSectionTotal] ); @@ -318,47 +315,55 @@ const QuotationForm = () => { const [vercelOpen, setVercelOpen] = useState(false); const handleExport = (data) => { - if(data?.activityName&&data?.currency){ - const quotationData = { - quataName: data.activityName, - description: data.description, - currency: data.currency || "TWD", - sections: data.sections.map((section) => ({ - key: uuidv4(), - sectionName: section.sectionName, - items: section.items.map((item) => ({ + try { + const jsonData = typeof data === 'string' ? JSON.parse(data) : data; + + if (jsonData?.quataName && jsonData?.currency) { + const quotationData = { + quataName: jsonData.quataName, + description: jsonData.description || '', + currency: jsonData.currency || "TWD", + sections: jsonData.sections.map((section) => ({ key: uuidv4(), - name: item.name, - quantity: item.quantity, - price: item.price, - description: item.description, - unit: item.unit, + sectionName: section.sectionName, + items: section.items.map((item) => ({ + key: uuidv4(), + name: item.name, + quantity: Number(item.quantity) || 0, + price: Number(item.price) || 0, + description: item.description || "", + unit: item.unit || "", + })), })), - })), - }; - setCurrentCurrency(data.currency || "TWD"); - form.setFieldsValue(quotationData); - setFormValues(quotationData); - setTaxRate(data.taxRate || 0); - message.success('已添加报价单'); - - }else{ - const _data={ - ...data, - key: uuidv4(), + }; + setCurrentCurrency(jsonData.currency || "TWD"); + form.setFieldsValue(quotationData); + setFormValues(quotationData); + setTaxRate(Number(jsonData.taxRate) || 0); + message.success('已添加报价单'); + } else { + const newSection = { + ...jsonData, + key: uuidv4(), + }; + const currentSections = form.getFieldValue('sections') || []; + const newSections = [...currentSections, newSection]; + + form.setFieldValue('sections', newSections); + const currentFormValues = form.getFieldsValue(); + setFormValues({ + ...currentFormValues, + sections: newSections + }); + message.success('已添加新的服务项目'); } - const newSections = [...formValues.sections, _data]; - form.setFieldValue('sections', newSections); - const currentFormValues = form.getFieldsValue(); - setFormValues({ - ...currentFormValues, - sections: newSections - }); - message.success('已添加新的服务项目'); + + setDifyOpen(false); + setVercelOpen(false); + } catch (error) { + console.error('Export error:', error); + message.error('导出失败:数据格式错误'); } - - setDifyOpen(false); - setVercelOpen(false); }; return ( @@ -401,9 +406,9 @@ const QuotationForm = () => { - + */} )} @@ -511,11 +516,7 @@ const QuotationForm = () => { onClose={() => setDifyOpen(false)} onExport={handleExport} /> - setVercelOpen(false)} - onExport={handleExport} - /> +
); }; diff --git a/src/pages/quotation/index.jsx b/src/pages/quotation/index.jsx new file mode 100644 index 0000000..0519ecb --- /dev/null +++ b/src/pages/quotation/index.jsx @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/routes/AppRoutes.jsx b/src/routes/AppRoutes.jsx index 4f53cb1..5146ec7 100644 --- a/src/routes/AppRoutes.jsx +++ b/src/routes/AppRoutes.jsx @@ -69,7 +69,7 @@ const AppRoutes = () => { path="/login" element={ user?.id ? ( - + ) : ( ) @@ -86,7 +86,7 @@ const AppRoutes = () => { > } + element={} /> {renderRoutes(allRoutes)} } /> diff --git a/src/routes/routes.js b/src/routes/routes.js index 23f66d3..9e59c97 100644 --- a/src/routes/routes.js +++ b/src/routes/routes.js @@ -82,23 +82,14 @@ export const allRoutes = [ key: "company/quotaInfo", }, { -<<<<<<< HEAD - path: "quotaInfo/preview/:id?", // 添加可选的 id 参数 -======= path: "quotaInfo/preview/:id?", ->>>>>>> 8dccf8e554eefcfa832eca45be35be4dddad3cb8 hidden: true, component: lazy(() => import("@/pages/company/quotation/view")), name: "报价单预览", icon: "file", -<<<<<<< HEAD - key:'company/quotaInfo/preview' - }, -======= key: "company/quotaInfo/preview", }, ->>>>>>> 8dccf8e554eefcfa832eca45be35be4dddad3cb8 { path: "project", component: lazy(() => import("@/pages/company/project")), @@ -135,10 +126,6 @@ export const allRoutes = [ name: "服务模版详情", icon: "container", key: "company/serviceTemplateInfo", -<<<<<<< HEAD - -======= ->>>>>>> 8dccf8e554eefcfa832eca45be35be4dddad3cb8 }, { path: "supplier", @@ -176,11 +163,7 @@ export const allRoutes = [ component: lazy(() => import("@/pages/company/service/itemsManange")), name: "资源类型", icon: "container", -<<<<<<< HEAD - key:'company/templateItemManage' -======= key: "company/templateItem", ->>>>>>> 8dccf8e554eefcfa832eca45be35be4dddad3cb8 }, ] } diff --git a/tailwind.config.js b/tailwind.config.js index cc15984..faeef0b 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -1,5 +1,7 @@ /** @type {import('tailwindcss').Config} */ -export default { +const withMT = require("@material-tailwind/react/utils/withMT"); + +module.exports = withMT({ content: [ "./index.html", "./src/**/*.{js,ts,jsx,tsx}", @@ -133,4 +135,4 @@ export default { corePlugins: { preflight: false, }, -} \ No newline at end of file +}) \ No newline at end of file diff --git a/vite.config.js b/vite.config.js index 7787c18..af6d633 100644 --- a/vite.config.js +++ b/vite.config.js @@ -1,9 +1,8 @@ import { defineConfig } from 'vite'; import react from '@vitejs/plugin-react'; import path from 'path'; - -// 使用 __dirname 需要添加 import.meta.url 的支持 import { fileURLToPath } from 'url'; + const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); @@ -19,13 +18,13 @@ export default defineConfig({ '@contexts': path.resolve(__dirname, 'src/contexts'), '@assets': path.resolve(__dirname, 'src/assets'), }, - extensions: ['.js', '.jsx', '.ts', '.tsx', '.json'] // 添加文件扩展名自动解析 + extensions: ['.js', '.jsx', '.ts', '.tsx', '.json'] }, - server: { - port: 3000, - open: true, - host: true, - strictPort: true, + optimizeDeps: { + include: ['react-apexcharts', 'apexcharts'], + esbuildOptions: { + target: 'es2020', + }, }, build: { outDir: 'dist', @@ -34,8 +33,19 @@ export default defineConfig({ output: { manualChunks: { vendor: ['react', 'react-dom', 'react-router-dom', 'antd'], + charts: ['react-apexcharts', 'apexcharts'], }, }, }, + target: 'es2020', + commonjsOptions: { + include: [/node_modules/], + }, + }, + server: { + port: 3000, + open: true, + host: true, + strictPort: true, }, }); \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index cf36f96..21f0742 100644 --- a/yarn.lock +++ b/yarn.lock @@ -537,6 +537,18 @@ dependencies: "@emotion/memoize" "^0.8.1" +"@emotion/is-prop-valid@^0.8.2": + version "0.8.8" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a" + integrity sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA== + dependencies: + "@emotion/memoize" "0.7.4" + +"@emotion/memoize@0.7.4": + version "0.7.4" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb" + integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw== + "@emotion/memoize@^0.8.1": version "0.8.1" resolved "https://registry.npmmirror.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17" @@ -709,6 +721,21 @@ "@floating-ui/core" "^1.6.0" "@floating-ui/utils" "^0.2.8" +"@floating-ui/dom@^1.2.1": + version "1.6.13" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.13.tgz#a8a938532aea27a95121ec16e667a7cbe8c59e34" + integrity sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w== + dependencies: + "@floating-ui/core" "^1.6.0" + "@floating-ui/utils" "^0.2.9" + +"@floating-ui/react-dom@^1.2.2": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-1.3.0.tgz#4d35d416eb19811c2b0e9271100a6aa18c1579b3" + integrity sha512-htwHm67Ji5E/pROEAr7f8IKFShuiCKHwUC/UY4vC3I5jiSvGFAYnSYiZO5MlGmads+QqvUkR9ANHEguGrDv72g== + dependencies: + "@floating-ui/dom" "^1.2.1" + "@floating-ui/react-dom@^2.1.2": version "2.1.2" resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.2.tgz#a1349bbf6a0e5cb5ded55d023766f20a4d439a31" @@ -716,6 +743,15 @@ dependencies: "@floating-ui/dom" "^1.0.0" +"@floating-ui/react@0.19.0": + version "0.19.0" + resolved "https://registry.yarnpkg.com/@floating-ui/react/-/react-0.19.0.tgz#d8e19a3fcfaa0684d5ec3f335232b4e0ac0c87e1" + integrity sha512-fgYvN4ksCi5OvmPXkyOT8o5a8PSKHMzPHt+9mR6KYWdF16IAjWRLZPAAziI2sznaWT23drRFrYw64wdvYqqaQw== + dependencies: + "@floating-ui/react-dom" "^1.2.2" + aria-hidden "^1.1.3" + tabbable "^6.0.1" + "@floating-ui/react@^0.26.28": version "0.26.28" resolved "https://registry.yarnpkg.com/@floating-ui/react/-/react-0.26.28.tgz#93f44ebaeb02409312e9df9507e83aab4a8c0dc7" @@ -730,6 +766,16 @@ resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.8.tgz#21a907684723bbbaa5f0974cf7730bd797eb8e62" integrity sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig== +"@floating-ui/utils@^0.2.9": + version "0.2.9" + resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.9.tgz#50dea3616bc8191fb8e112283b49eaff03e78429" + integrity sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg== + +"@heroicons/react@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@heroicons/react/-/react-2.2.0.tgz#0c05124af50434a800773abec8d3af6a297d904b" + integrity sha512-LMcepvRaS9LYHJGsF0zzmgKCUim/X3N/DQKc4jepAXJ7l8QxJ1PmxJzqplF2Z3FE4PqBAIGyJAQ/w4B5dsqbtQ== + "@humanwhocodes/config-array@^0.13.0": version "0.13.0" resolved "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748" @@ -818,6 +864,21 @@ resolved "https://registry.yarnpkg.com/@mantine/hooks/-/hooks-7.15.2.tgz#f583ecfb7b92cad17c67f7825f20f23b72e6d7ff" integrity sha512-p8dsW0fdJxzYhULbm1noFYRHuBvJHleYviC0BlwbkVySC8AsvFI8AmC3sMssWV3dQ3yQ/SidYo9U+K/czpDpZw== +"@material-tailwind/react@^2.1.10": + version "2.1.10" + resolved "https://registry.yarnpkg.com/@material-tailwind/react/-/react-2.1.10.tgz#e4ff8b8a5cf1a39209d408dda3217f632c080e9a" + integrity sha512-xGU/mLDKDBp/qZ8Dp2XR7fKcTpDuFeZEBqoL9Bk/29kakKxNxjUGYSRHEFLsyOFf4VIhU6WGHdIS7tOA3QGJHA== + dependencies: + "@floating-ui/react" "0.19.0" + classnames "2.3.2" + deepmerge "4.2.2" + framer-motion "6.5.1" + material-ripple-effects "2.0.1" + prop-types "15.8.1" + react "18.2.0" + react-dom "18.2.0" + tailwind-merge "1.8.1" + "@monaco-editor/loader@^1.4.0": version "1.4.0" resolved "https://registry.npmmirror.com/@monaco-editor/loader/-/loader-1.4.0.tgz#f08227057331ec890fa1e903912a5b711a2ad558" @@ -832,6 +893,59 @@ dependencies: "@monaco-editor/loader" "^1.4.0" +"@motionone/animation@^10.12.0": + version "10.18.0" + resolved "https://registry.yarnpkg.com/@motionone/animation/-/animation-10.18.0.tgz#868d00b447191816d5d5cf24b1cafa144017922b" + integrity sha512-9z2p5GFGCm0gBsZbi8rVMOAJCtw1WqBTIPw3ozk06gDvZInBPIsQcHgYogEJ4yuHJ+akuW8g1SEIOpTOvYs8hw== + dependencies: + "@motionone/easing" "^10.18.0" + "@motionone/types" "^10.17.1" + "@motionone/utils" "^10.18.0" + tslib "^2.3.1" + +"@motionone/dom@10.12.0": + version "10.12.0" + resolved "https://registry.yarnpkg.com/@motionone/dom/-/dom-10.12.0.tgz#ae30827fd53219efca4e1150a5ff2165c28351ed" + integrity sha512-UdPTtLMAktHiqV0atOczNYyDd/d8Cf5fFsd1tua03PqTwwCe/6lwhLSQ8a7TbnQ5SN0gm44N1slBfj+ORIhrqw== + dependencies: + "@motionone/animation" "^10.12.0" + "@motionone/generators" "^10.12.0" + "@motionone/types" "^10.12.0" + "@motionone/utils" "^10.12.0" + hey-listen "^1.0.8" + tslib "^2.3.1" + +"@motionone/easing@^10.18.0": + version "10.18.0" + resolved "https://registry.yarnpkg.com/@motionone/easing/-/easing-10.18.0.tgz#7b82f6010dfee3a1bb0ee83abfbaff6edae0c708" + integrity sha512-VcjByo7XpdLS4o9T8t99JtgxkdMcNWD3yHU/n6CLEz3bkmKDRZyYQ/wmSf6daum8ZXqfUAgFeCZSpJZIMxaCzg== + dependencies: + "@motionone/utils" "^10.18.0" + tslib "^2.3.1" + +"@motionone/generators@^10.12.0": + version "10.18.0" + resolved "https://registry.yarnpkg.com/@motionone/generators/-/generators-10.18.0.tgz#fe09ab5cfa0fb9a8884097feb7eb60abeb600762" + integrity sha512-+qfkC2DtkDj4tHPu+AFKVfR/C30O1vYdvsGYaR13W/1cczPrrcjdvYCj0VLFuRMN+lP1xvpNZHCRNM4fBzn1jg== + dependencies: + "@motionone/types" "^10.17.1" + "@motionone/utils" "^10.18.0" + tslib "^2.3.1" + +"@motionone/types@^10.12.0", "@motionone/types@^10.17.1": + version "10.17.1" + resolved "https://registry.yarnpkg.com/@motionone/types/-/types-10.17.1.tgz#cf487badbbdc9da0c2cb86ffc1e5d11147c6e6fb" + integrity sha512-KaC4kgiODDz8hswCrS0btrVrzyU2CSQKO7Ps90ibBVSQmjkrt2teqta6/sOG59v7+dPnKMAg13jyqtMKV2yJ7A== + +"@motionone/utils@^10.12.0", "@motionone/utils@^10.18.0": + version "10.18.0" + resolved "https://registry.yarnpkg.com/@motionone/utils/-/utils-10.18.0.tgz#a59ff8932ed9009624bca07c56b28ef2bb2f885e" + integrity sha512-3XVF7sgyTSI2KWvTf6uLlBJ5iAgRgmvp3bpuOiQJvInd4nZ19ET8lX5unn30SlmRH7hXbBbH+Gxd0m0klJ3Xtw== + dependencies: + "@motionone/types" "^10.17.1" + hey-listen "^1.0.8" + tslib "^2.3.1" + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -1096,6 +1210,33 @@ "@supabase/realtime-js" "2.11.2" "@supabase/storage-js" "2.7.1" +"@svgdotjs/svg.draggable.js@^3.0.4": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@svgdotjs/svg.draggable.js/-/svg.draggable.js-3.0.5.tgz#804fa627cbe850a137350009bd03d2c8423b39a7" + integrity sha512-ljL/fB0tAjRfFOJGhXpr7rEx9DJ6D7Pxt3AXvgxjEM17g6wK3Ho9nXhntraOMx8JLZdq4NBMjokeXMvnQzJVYA== + +"@svgdotjs/svg.filter.js@^3.0.8": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@svgdotjs/svg.filter.js/-/svg.filter.js-3.0.8.tgz#998cb2481a871fa70d7dbaa891c886b335c562d7" + integrity sha512-YshF2YDaeRA2StyzAs5nUPrev7npQ38oWD0eTRwnsciSL2KrRPMoUw8BzjIXItb3+dccKGTX3IQOd2NFzmHkog== + dependencies: + "@svgdotjs/svg.js" "^3.1.1" + +"@svgdotjs/svg.js@^3.1.1", "@svgdotjs/svg.js@^3.2.4": + version "3.2.4" + resolved "https://registry.yarnpkg.com/@svgdotjs/svg.js/-/svg.js-3.2.4.tgz#4716be92a64c66b29921b63f7235fcfb953fb13a" + integrity sha512-BjJ/7vWNowlX3Z8O4ywT58DqbNRyYlkk6Yz/D13aB7hGmfQTvGX4Tkgtm/ApYlu9M7lCQi15xUEidqMUmdMYwg== + +"@svgdotjs/svg.resize.js@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@svgdotjs/svg.resize.js/-/svg.resize.js-2.0.5.tgz#732e4cae15d09ad3021adeac63bc9fad0dc7255a" + integrity sha512-4heRW4B1QrJeENfi7326lUPYBCevj78FJs8kfeDxn5st0IYPIRXoTtOSYvTzFWgaWWXd3YCDE6ao4fmv91RthA== + +"@svgdotjs/svg.select.js@^4.0.1": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@svgdotjs/svg.select.js/-/svg.select.js-4.0.2.tgz#80a10409e6c73206218690eac5c9f94f8c8909b5" + integrity sha512-5gWdrvoQX3keo03SCmgaBbD+kFftq0F/f2bzCbNnpkkvW6tk4rl4MakORzFuNjvXPWwB4az9GwuvVxQVnjaK2g== + "@types/babel__core@^7.20.5": version "7.20.5" resolved "https://registry.npmmirror.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" @@ -1268,6 +1409,11 @@ resolved "https://registry.yarnpkg.com/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.5.tgz#80224a6919272f405b87913ca13b92929bdf3c4d" integrity sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ== +"@yr/monotone-cubic-spline@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@yr/monotone-cubic-spline/-/monotone-cubic-spline-1.0.3.tgz#7272d89f8e4f6fb7a1600c28c378cc18d3b577b9" + integrity sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA== + acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" @@ -1398,6 +1544,18 @@ anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" +apexcharts@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/apexcharts/-/apexcharts-4.3.0.tgz#eccf28e830ce1b5e018cfc0e99d1c6af0076c9c7" + integrity sha512-PfvZQpv91T68hzry9l5zP3Gip7sQvF0nFK91uCBrswIKX7rbIdbVNS4fOks9m9yP3Ppgs6LHgU2M/mjoG4NM0A== + dependencies: + "@svgdotjs/svg.draggable.js" "^3.0.4" + "@svgdotjs/svg.filter.js" "^3.0.8" + "@svgdotjs/svg.js" "^3.2.4" + "@svgdotjs/svg.resize.js" "^2.0.2" + "@svgdotjs/svg.select.js" "^4.0.1" + "@yr/monotone-cubic-spline" "^1.0.3" + arg@^5.0.2: version "5.0.2" resolved "https://registry.npmmirror.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" @@ -1408,6 +1566,13 @@ argparse@^2.0.1: resolved "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== +aria-hidden@^1.1.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.2.4.tgz#b78e383fdbc04d05762c78b4a25a501e736c4522" + integrity sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A== + dependencies: + tslib "^2.0.0" + array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: version "1.0.2" resolved "https://registry.npmmirror.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" @@ -1655,6 +1820,11 @@ chokidar@^4.0.0: dependencies: readdirp "^4.0.1" +classnames@2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" + integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== + classnames@2.x, classnames@^2.2.1, classnames@^2.2.3, classnames@^2.2.5, classnames@^2.2.6, classnames@^2.3.1, classnames@^2.3.2, classnames@^2.5.1: version "2.5.1" resolved "https://registry.npmmirror.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" @@ -1889,6 +2059,11 @@ deep-is@^0.1.3: resolved "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== +deepmerge@4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + define-data-property@^1.0.1, define-data-property@^1.1.4: version "1.1.4" resolved "https://registry.npmmirror.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" @@ -2403,6 +2578,27 @@ fraction.js@^4.3.7: resolved "https://registry.npmmirror.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== +framer-motion@6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-6.5.1.tgz#802448a16a6eb764124bf36d8cbdfa6dd6b931a7" + integrity sha512-o1BGqqposwi7cgDrtg0dNONhkmPsUFDaLcKXigzuTFC5x58mE8iyTazxSudFzmT6MEyJKfjjU8ItoMe3W+3fiw== + dependencies: + "@motionone/dom" "10.12.0" + framesync "6.0.1" + hey-listen "^1.0.8" + popmotion "11.0.3" + style-value-types "5.0.0" + tslib "^2.1.0" + optionalDependencies: + "@emotion/is-prop-valid" "^0.8.2" + +framesync@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/framesync/-/framesync-6.0.1.tgz#5e32fc01f1c42b39c654c35b16440e07a25d6f20" + integrity sha512-fUY88kXvGiIItgNC7wcTOl0SNRCVXMKSWW2Yzfmn7EKNc+MpCzcz9DhdHcdjbrtN3c6R4H5dTY2jiCpPdysEjA== + dependencies: + tslib "^2.1.0" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -2581,6 +2777,16 @@ hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: dependencies: function-bind "^1.1.2" +heroicons@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/heroicons/-/heroicons-2.2.0.tgz#f1f554155152b4ec4d1b7165363d7c583690f77d" + integrity sha512-yOwvztmNiBWqR946t+JdgZmyzEmnRMC2nxvHFC90bF1SUttwB6yJKYeme1JeEcBfobdOs827nCyiWBS2z/brog== + +hey-listen@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/hey-listen/-/hey-listen-1.0.8.tgz#8e59561ff724908de1aa924ed6ecc84a56a9aa68" + integrity sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q== + highlight.js@^11.10.0: version "11.11.1" resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-11.11.1.tgz#fca06fa0e5aeecf6c4d437239135fabc15213585" @@ -3033,6 +3239,11 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" +material-ripple-effects@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/material-ripple-effects/-/material-ripple-effects-2.0.1.tgz#47803d2ab1561698d930e2524a7a9a19fb2829b7" + integrity sha512-hHlUkZAuXbP94lu02VgrPidbZ3hBtgXBtjlwR8APNqOIgDZMV8MCIcsclL8FmGJQHvnORyvoQgC965vPsiyXLQ== + math-intrinsics@^1.0.0, math-intrinsics@^1.1.0: version "1.1.0" resolved "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" @@ -3302,6 +3513,16 @@ pirates@^4.0.1: resolved "https://registry.npmmirror.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== +popmotion@11.0.3: + version "11.0.3" + resolved "https://registry.yarnpkg.com/popmotion/-/popmotion-11.0.3.tgz#565c5f6590bbcddab7a33a074bb2ba97e24b0cc9" + integrity sha512-Y55FLdj3UxkR7Vl3s7Qr4e9m0onSnP8W7d/xQLsoJM40vs6UKHFdygs6SWryasTZYqugMjm3BepCF4CWXDiHgA== + dependencies: + framesync "6.0.1" + hey-listen "^1.0.8" + style-value-types "5.0.0" + tslib "^2.1.0" + possible-typed-array-names@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" @@ -3374,7 +3595,7 @@ prelude-ls@^1.2.1: resolved "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prop-types@^15.5.10, prop-types@^15.6.2, prop-types@^15.8.1: +prop-types@15.8.1, prop-types@^15.5.10, prop-types@^15.6.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.npmmirror.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -3771,6 +3992,21 @@ rc-virtual-list@^3.14.2, rc-virtual-list@^3.5.1, rc-virtual-list@^3.5.2: rc-resize-observer "^1.0.0" rc-util "^5.36.0" +react-apexcharts@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/react-apexcharts/-/react-apexcharts-1.7.0.tgz#bbd08425674224adb27c9f2c62477d43bd5de539" + integrity sha512-03oScKJyNLRf0Oe+ihJxFZliBQM9vW3UWwomVn4YVRTN1jsIR58dLWt0v1sb8RwJVHDMbeHiKQueM0KGpn7nOA== + dependencies: + prop-types "^15.8.1" + +react-dom@18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== + dependencies: + loose-envify "^1.1.0" + scheduler "^0.23.0" + react-dom@^18.2.0: version "18.3.1" resolved "https://registry.npmmirror.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" @@ -3911,6 +4147,13 @@ react-use@^17.6.0: ts-easing "^0.2.0" tslib "^2.1.0" +react@18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== + dependencies: + loose-envify "^1.1.0" + react@^18.2.0: version "18.3.1" resolved "https://registry.npmmirror.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" @@ -3951,9 +4194,9 @@ recharts-scale@^0.4.4: dependencies: decimal.js-light "^2.4.1" -recharts@^2.9.0: +recharts@^2.15.0: version "2.15.0" - resolved "https://registry.npmmirror.com/recharts/-/recharts-2.15.0.tgz#0b77bff57a43885df9769ae649a14cb1a7fe19aa" + resolved "https://registry.yarnpkg.com/recharts/-/recharts-2.15.0.tgz#0b77bff57a43885df9769ae649a14cb1a7fe19aa" integrity sha512-cIvMxDfpAmqAmVgc4yb7pgm/O1tmmkl/CjrvXuW+62/+7jj/iF9Ykm+hb/UJt42TREHMyd3gb+pkgoa2MxgDIw== dependencies: clsx "^2.0.0" @@ -3999,6 +4242,11 @@ regexp.prototype.flags@^1.5.3: es-errors "^1.3.0" set-function-name "^2.0.2" +remixicon@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/remixicon/-/remixicon-4.6.0.tgz#f2adafd18aaa983d61f8c9f7274fa17706da4ddc" + integrity sha512-bKM5odjqE1yzVxEZGJE7F79WHhNrJFIKHXR+GG+P1IWXn8AnJZhl8SbIRDJsNAvIqx4VPkNwjuHfc42tutMDpQ== + resize-observer-polyfill@^1.5.1: version "1.5.1" resolved "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" @@ -4101,7 +4349,7 @@ sass@^1.69.5: optionalDependencies: "@parcel/watcher" "^2.4.1" -scheduler@^0.23.2: +scheduler@^0.23.0, scheduler@^0.23.2: version "0.23.2" resolved "https://registry.npmmirror.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== @@ -4390,6 +4638,14 @@ strip-json-comments@^3.1.1: resolved "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== +style-value-types@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/style-value-types/-/style-value-types-5.0.0.tgz#76c35f0e579843d523187989da866729411fc8ad" + integrity sha512-08yq36Ikn4kx4YU6RD7jWEv27v4V+PUsOGa4n/as8Et3CuODMJQ00ENeAVXAeydX4Z2j1XHZF1K2sX4mGl18fA== + dependencies: + hey-listen "^1.0.8" + tslib "^2.1.0" + styled-components@^6.1.0: version "6.1.13" resolved "https://registry.npmmirror.com/styled-components/-/styled-components-6.1.13.tgz#2d777750b773b31469bd79df754a32479e9f475e" @@ -4453,11 +4709,16 @@ swr@^2.0.0, swr@^2.2.5: dequal "^2.0.3" use-sync-external-store "^1.4.0" -tabbable@^6.0.0: +tabbable@^6.0.0, tabbable@^6.0.1: version "6.2.0" resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97" integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew== +tailwind-merge@1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/tailwind-merge/-/tailwind-merge-1.8.1.tgz#0e56c8afbab2491f72e06381043ffec8b720ba04" + integrity sha512-+fflfPxvHFr81hTJpQ3MIwtqgvefHZFUHFiIHpVIRXvG/nX9+gu2P7JNlFu2bfDMJ+uHhi/pUgzaYacMoXv+Ww== + tailwindcss@^3.3.5: version "3.4.17" resolved "https://registry.npmmirror.com/tailwindcss/-/tailwindcss-3.4.17.tgz#ae8406c0f96696a631c790768ff319d46d5e5a63" @@ -4574,7 +4835,7 @@ tslib@2.6.2: resolved "https://registry.npmmirror.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== -tslib@^2.0.0, tslib@^2.1.0: +tslib@^2.0.0, tslib@^2.1.0, tslib@^2.3.1: version "2.8.1" resolved "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==