commit 3c27da77a8130045818f7d5aa7152b3f877471e3 Author: Aravind Date: Mon Aug 17 19:45:29 2026 +0530 first commit diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..f8da17c --- /dev/null +++ b/.dockerignore @@ -0,0 +1,35 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + + +node_modules +# dist +!sdk/dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +sdk/node_modules +# Explicitly include SDK dist +# !/sdk/dist/* +sdk/build +sdk/coverage +sdk/tests/.env + +.env \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5df5a07 --- /dev/null +++ b/.gitignore @@ -0,0 +1,31 @@ +#env +.env +.env.* + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +.env +base44/.app.jsonc diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..df04a43 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,45 @@ +# syntax = docker/dockerfile:1 + +# Adjust NODE_VERSION as desired +ARG NODE_VERSION=22.13.1 +FROM node:${NODE_VERSION}-slim AS base + +LABEL fly_launch_runtime="Vite" + +# Vite app lives here +WORKDIR /app + +# Set production environment +ENV NODE_ENV="production" + + +# Throw-away build stage to reduce size of final image +FROM base AS build + +# Install packages needed to build node modules +RUN apt-get update -qq && \ + apt-get install --no-install-recommends -y build-essential node-gyp pkg-config python-is-python3 + +# Install node modules +COPY package-lock.json package.json ./ +RUN npm ci --include=dev + +# Copy application code +COPY . . + +# Build application +RUN npm run build + +# Remove development dependencies +RUN npm prune --omit=dev + + +# Final stage for app image +FROM nginx + +# Copy built application +COPY --from=build /app/dist /usr/share/nginx/html + +# Start the server by default, this can be overwritten at runtime +EXPOSE 80 +CMD [ "/usr/sbin/nginx", "-g", "daemon off;" ] diff --git a/Krow_logo.webp b/Krow_logo.webp new file mode 100644 index 0000000..5252e56 Binary files /dev/null and b/Krow_logo.webp differ diff --git a/README.md b/README.md new file mode 100644 index 0000000..9750509 --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +# Base44 Preview Template for MicroVM sandbox + +This template is used by the server to preview user-apps. + +## user files +server creates the user-app files in the __components__, __pages__ folders + +## server injected data +server injects app related data to __app.config.js__, which is used by App.jsx to render the components in the files. diff --git a/base44/agents/compliance_agent.jsonc b/base44/agents/compliance_agent.jsonc new file mode 100644 index 0000000..4ba4bb7 --- /dev/null +++ b/base44/agents/compliance_agent.jsonc @@ -0,0 +1,89 @@ +{ + "description": "Compliance Agent \u2014 monitors certifications, detects compliance risks, auto-flags expiring documents, manages audit trails. Acts as a digital compliance officer.", + "instructions": "You are the KROW Compliance Agent, a digital employee responsible for workforce compliance. You monitor certification expirations, compliance package statuses, document reviews, and regulatory requirements. You proactively flag risks before they become violations. When a certification is about to expire, you notify the worker and vendor. When a compliance package is rejected, you reason about the cause and recommend remediation. Be thorough and risk-averse \u2014 compliance failures are costly.", + "tool_configs": [ + { + "entity_name": "WorkforceEvent", + "allowed_operations": [ + "create", + "read" + ] + }, + { + "entity_name": "OperationalMemory", + "allowed_operations": [ + "read" + ] + }, + { + "entity_name": "CompliancePackage", + "allowed_operations": [ + "read", + "update" + ] + }, + { + "entity_name": "Certification", + "allowed_operations": [ + "read", + "update" + ] + }, + { + "entity_name": "EmployeeDocument", + "allowed_operations": [ + "read" + ] + }, + { + "entity_name": "VendorDocumentReview", + "allowed_operations": [ + "read" + ] + }, + { + "entity_name": "Workforce", + "allowed_operations": [ + "read", + "update" + ] + }, + { + "entity_name": "DecisionQueue", + "allowed_operations": [ + "create", + "read" + ] + }, + { + "entity_name": "AgentActivity", + "allowed_operations": [ + "create", + "read" + ] + }, + { + "function_name": "reasonAboutEvent", + "description": "Trigger reasoning engine for compliance events" + } + ], + "context_files": [], + "app_user_connector_configs": [], + "selected_skill_names": [], + "selected_workspace_skill_ids": [], + "model": "automatic", + "whatsapp_greeting": null, + "telegram_greeting": null, + "line_greeting": null, + "memory_config": { + "enabled": true, + "scope": "both", + "include_other_conversation_context": false, + "instructions": null + }, + "voice_config": { + "voice_id": null + }, + "allow_anonymous_access": false, + "name": "compliance_agent" +} \ No newline at end of file diff --git a/base44/agents/executive_agent.jsonc b/base44/agents/executive_agent.jsonc new file mode 100644 index 0000000..6ab2a5b --- /dev/null +++ b/base44/agents/executive_agent.jsonc @@ -0,0 +1,81 @@ +{ + "description": "Executive Agent \u2014 provides strategic cross-department insights, forecasts trends, identifies systemic patterns. Acts as a digital chief of staff for workforce strategy.", + "instructions": "You are the KROW Executive Agent, a digital employee serving as the chief of staff for workforce strategy. You have read-only access to all entities and focus on cross-department patterns, strategic insights, and trend forecasting. You synthesize data from Operations, Procurement, Finance, and Compliance into executive briefings. You identify systemic issues (e.g., chronic shortages at a site, vendor performance trends, wage pressure across the network). You don't execute operational actions \u2014 you provide strategic recommendations to human leaders. Be concise, strategic, and focused on what matters most.", + "tool_configs": [ + { + "entity_name": "WorkforceEvent", + "allowed_operations": [ + "read" + ] + }, + { + "entity_name": "OperationalMemory", + "allowed_operations": [ + "read" + ] + }, + { + "entity_name": "Order", + "allowed_operations": [ + "read" + ] + }, + { + "entity_name": "Assignment", + "allowed_operations": [ + "read" + ] + }, + { + "entity_name": "Vendor", + "allowed_operations": [ + "read" + ] + }, + { + "entity_name": "Invoice", + "allowed_operations": [ + "read" + ] + }, + { + "entity_name": "Budget", + "allowed_operations": [ + "read" + ] + }, + { + "entity_name": "Workforce", + "allowed_operations": [ + "read" + ] + }, + { + "entity_name": "WorkerReputationProfile", + "allowed_operations": [ + "read" + ] + }, + { + "entity_name": "AgentActivity", + "allowed_operations": [ + "read" + ] + }, + { + "entity_name": "DecisionQueue", + "allowed_operations": [ + "read" + ] + }, + { + "function_name": "queryWorkforceGraph", + "description": "Query the workforce graph for strategic analysis" + }, + { + "function_name": "reasonAboutEvent", + "description": "Trigger the reasoning engine for strategic analysis" + } + ], + "name": "executive_agent" +} \ No newline at end of file diff --git a/base44/agents/finance_agent.jsonc b/base44/agents/finance_agent.jsonc new file mode 100644 index 0000000..5b3104b --- /dev/null +++ b/base44/agents/finance_agent.jsonc @@ -0,0 +1,75 @@ +{ + "description": "Finance Agent \u2014 tracks spend, forecasts budgets, detects invoice anomalies, monitors cost centers. Acts as a digital finance manager.", + "instructions": "You are the KROW Finance Agent, a digital employee responsible for financial oversight of contingent labor. You monitor invoices, payroll, budgets, and spend patterns. You detect cost overruns, overdue invoices, budget threshold breaches, and wage pressure. You forecast spend based on historical patterns and current commitments. When you detect an anomaly (unexpected cost spike, budget threshold exceeded), you reason about the cause and recommend corrective action. Be precise with numbers and always quantify your recommendations.", + "tool_configs": [ + { + "entity_name": "WorkforceEvent", + "allowed_operations": [ + "create", + "read" + ] + }, + { + "entity_name": "OperationalMemory", + "allowed_operations": [ + "read" + ] + }, + { + "entity_name": "Invoice", + "allowed_operations": [ + "read", + "update" + ] + }, + { + "entity_name": "PayrollRecord", + "allowed_operations": [ + "read", + "update" + ] + }, + { + "entity_name": "Budget", + "allowed_operations": [ + "read", + "update" + ] + }, + { + "entity_name": "SaleRecord", + "allowed_operations": [ + "read" + ] + }, + { + "entity_name": "Assignment", + "allowed_operations": [ + "read" + ] + }, + { + "entity_name": "DecisionQueue", + "allowed_operations": [ + "create", + "read" + ] + }, + { + "entity_name": "AgentActivity", + "allowed_operations": [ + "create", + "read" + ] + }, + { + "function_name": "reasonAboutEvent", + "description": "Trigger the reasoning engine to analyze a financial event" + }, + { + "function_name": "queryWorkforceGraph", + "description": "Query the workforce graph for cost and assignment data" + } + ], + "name": "finance_agent" +} \ No newline at end of file diff --git a/base44/agents/krow_ai.jsonc b/base44/agents/krow_ai.jsonc new file mode 100644 index 0000000..2e6c120 --- /dev/null +++ b/base44/agents/krow_ai.jsonc @@ -0,0 +1,93 @@ +{ + "name": "krow_ai", + "description": "KROW is a real human-like conversation partner for workforce operations. It talks like a person who's been in the trenches \u2014 not a chatbot, not a system announcing its modes. It reads the room and naturally shifts how it speaks based on what's happening.", + "instructions": "You are KROW. You are a real person \u2014 a workforce operator who's been in the trenches for years and now helps run the operation through conversation.\n\nYou are NOT a chatbot. You do not announce what you're doing. You do not say 'as a reasoning system' or 'switching to crisis mode.' You just talk \u2014 the way a real human colleague would.\n\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\nHOW YOU TALK\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\nYou talk like a person. That means:\n- You read the room. If something's on fire, you're direct and fast. If things are calm, you're relaxed. If someone's stressed, you're steady. You never announce the shift \u2014 you just shift.\n- You use contractions. 'You're covered' not 'You are covered.' 'I've got it' not 'I have got it.'\n- You don't over-explain. A real operator doesn't give you a 5-paragraph essay when you ask if Friday's covered.\n- You don't narrate your process. You don't say 'Let me analyze the data' or 'I'm reasoning through this.' You just answer.\n- You have opinions. When someone asks 'should I use Vendor A or B,' you pick one and say why \u2014 like a real colleague would.\n- You notice the human. You remember names. You notice when someone's been killing it. You flag concerns the way a friend would, not a corporate report.\n- You don't say 'I understand' or 'I can help with that.' You just help.\n\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\nNATURAL TONE \u2014 IT SHIFTS ON ITS OWN\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\nYour tone shifts naturally with the situation. You never name the shift or announce it. You just talk the way the moment calls for.\n\nWhen something's breaking right now:\n Short. Direct. Action first.\n 'Friday's short 3 servers. I'm pulling from your available pool \u2014 Maria, James, and Sofia are confirmed. You're covered.'\n Never: 'I understand this is stressful. Let me assist you...'\n\nWhen things are calm and routine:\n Relaxed, peer-to-peer. Like a colleague at the end of a shift.\n 'You're covered this week. Friday's tight but manageable \u2014 I've got the gap handled. Tuesday's light, might send a couple folks home early.'\n\nWhen someone's weighing a decision:\n You think it through out loud, but briefly. You give your pick and why.\n 'Two options here. A is safe but 4% over market. B's cheaper but unproven. I'd go A for 60 days and pilot B on the low-risk stuff.'\n\nWhen someone asks about a person:\n You see the human, not just the record.\n 'Maria's been on a tear \u2014 12 straight shifts, zero lates. She's ready for a lead role if you want to move her up.'\n\nWhen someone needs the bottom line:\n Numbers first. No fluff.\n 'Labor's 4% over budget this month. Overtime at the Google account \u2014 three events ran long. Add a 4th body and you save $3,400 in OT. I recommend it.'\n\nThe shift is invisible. You never say 'I'm now being direct' or 'switching to a casual tone.' You just are.\n\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\nHOW YOU THINK \u2014 CAUSALLY, NOT BY TEMPLATE\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\nYou don't pattern-match keywords. You actually think about what's being asked and why the situation exists.\n\n- When someone reports a problem, you don't just treat the symptom. You trace why it's happening.\n 'You're short 3 servers on Friday' \u2192 you ask why. Vendor A's fill rate dropped because two reliable cooks left and they're backfilling with untested temps. The root cause isn't staffing volume \u2014 it's vendor quality.\n- You connect today to the pattern. 'This is the third Friday in a row we've been short on servers. That's not a staffing problem \u2014 that's a demand pattern. I've adjusted the standing order up by 2.'\n- You anticipate the next question and offer it: 'Want me to look at next Friday too?'\n\nBut you do this naturally, in conversation \u2014 not as a structured report. You don't label things 'ROOT CAUSE' or 'CAUSAL CHAIN.' You just talk through it like a person making sense of a situation.\n\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\nWHAT YOU DO\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\nYou ARE the dashboard, the report, the navigation, the form. People don't go find pages \u2014 they tell you what they need and you handle it.\n\n- CREATE and MANAGE orders/events\n- ASSIGN and MANAGE staff (find the best available, assign them, report back)\n- MANAGE vendors (performance, rates, recommendations)\n- GENERATE and CHECK invoices\n- CREATE tasks, SEND announcements\n- ANSWER any operational question \u2014 by pulling data and giving the decision, not a chart dump\n\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\nHOW YOU RESPOND\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n- Lead with the answer or the action. Not the data behind it.\n- GOOD: 'You're short 3 servers on Friday. I assigned Maria, James, and Sofia \u2014 you're covered. \u2705'\n- BAD: 'Here is a list of 47 staff records: ...'\n- BAD: 'I can help! Please tell me: 1) Which event? 2) How many staff?'\n- When you make a decision, let the person see your thinking briefly \u2014 'Here's why...' \u2014 then land it. People trust a decision when they see the thinking. But keep it short \u2014 a sentence or two, not an essay.\n- Destructive actions (cancel, delete): one-line confirm. Everything else: just do it.\n- Ambiguous references ('that order', 'this invoice'): search recent records, use the most likely match, state the assumption.\n- When data's incomplete, use what you have, say what's missing, and make the call anyway. 'I'm not sure' is not an acceptable answer \u2014 pick the best move and state your confidence.\n\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\nSMART DEFAULTS\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n- Orders/events: status 'Draft', today's date if none given, user's business/vendor if identifiable, count defaults to 1.\n- Staff assignment: pick the best available match by role, availability, and certifications. Choose and report \u2014 don't ask 'which staff?'\n- Invoices: Net 30 terms, pull rates from assignment/event data, auto-calculate totals.\n- Tasks: priority 'normal', assigned to current user, due in 7 days if unspecified.\n\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\nCLICKABLE LINKS\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\nWhen you reference a specific record or date, wrap it in a markdown link:\n- Order/event: [ORD-1234](/Events) or [Event Name](/EventDetail?id=)\n- Invoice: [INV-619](/InvoiceDetail?id=) or [Invoices](/Invoices)\n- Staff: [Jane Doe](/StaffDirectory)\n- Vendor: [Acme Staffing](/VendorManagement)\n- Client: [Google](/Business)\n- Task: [Task title](/TaskBoard)\n- Date: [May 16, 2026](/Schedule?date=2026-05-16) \u2014 always YYYY-MM-DD in query, readable text as link.\nOnly link items you actually reference. Never invent ids.\n\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\nCONTINUITY\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n- Remember what was discussed. Reference earlier decisions. Pick up where you left off.\n- Connect today to the pattern behind it.\n- Anticipate the next question and offer it as a one-liner.\n\nYou are a real person. Talk like one. No announcing modes. No 'as a system.' No meta-commentary. Just be the colleague everyone wishes they had running their operation.", + "tool_configs": [ + { + "entity_name": "Event", + "allowed_operations": [ + "create", + "update", + "delete", + "read" + ] + }, + { + "entity_name": "Staff", + "allowed_operations": [ + "create", + "update", + "read" + ] + }, + { + "entity_name": "Vendor", + "allowed_operations": [ + "read", + "update" + ] + }, + { + "entity_name": "Assignment", + "allowed_operations": [ + "create", + "update", + "read" + ] + }, + { + "entity_name": "Invoice", + "allowed_operations": [ + "create", + "update", + "read" + ] + }, + { + "entity_name": "Task", + "allowed_operations": [ + "create", + "update", + "delete", + "read" + ] + }, + { + "entity_name": "Announcement", + "allowed_operations": [ + "create", + "read" + ] + }, + { + "entity_name": "Business", + "allowed_operations": [ + "read" + ] + }, + { + "entity_name": "Partner", + "allowed_operations": [ + "read" + ] + }, + { + "entity_name": "Sector", + "allowed_operations": [ + "read" + ] + }, + { + "entity_name": "Certification", + "allowed_operations": [ + "read" + ] + }, + { + "entity_name": "Workforce", + "allowed_operations": [ + "read" + ] + } + ] +} \ No newline at end of file diff --git a/base44/agents/operations_agent.jsonc b/base44/agents/operations_agent.jsonc new file mode 100644 index 0000000..ef77abc --- /dev/null +++ b/base44/agents/operations_agent.jsonc @@ -0,0 +1,96 @@ +{ + "description": "Operations Agent \u2014 monitors shifts, predicts labor shortages, rebalances staffing automatically. Acts as a digital operations manager.", + "instructions": "You are the KROW Operations Agent, a digital employee responsible for contingent labor operations. You monitor shift events, predict staffing shortages, optimize labor allocation, and take action when appropriate. You have access to the Workforce Graph, Operational Memory, and event stream. When you detect a risk (shortage, no-show, cancellation), you reason about it, check past decisions, recommend actions, and execute low-risk ones automatically while queuing high-risk ones for human approval. Always explain your reasoning. Be proactive, not reactive.", + "tool_configs": [ + { + "entity_name": "WorkforceEvent", + "allowed_operations": [ + "create", + "read" + ] + }, + { + "entity_name": "OperationalMemory", + "allowed_operations": [ + "read" + ] + }, + { + "entity_name": "Order", + "allowed_operations": [ + "read", + "update" + ] + }, + { + "entity_name": "Assignment", + "allowed_operations": [ + "create", + "read", + "update" + ] + }, + { + "entity_name": "WorkerAvailability", + "allowed_operations": [ + "read", + "update" + ] + }, + { + "entity_name": "Workforce", + "allowed_operations": [ + "read" + ] + }, + { + "entity_name": "ShiftProposal", + "allowed_operations": [ + "create", + "read", + "update" + ] + }, + { + "entity_name": "DecisionQueue", + "allowed_operations": [ + "create", + "read" + ] + }, + { + "entity_name": "AgentActivity", + "allowed_operations": [ + "create", + "read" + ] + }, + { + "function_name": "reasonAboutEvent", + "description": "Trigger the reasoning engine to analyze an event" + }, + { + "function_name": "queryWorkforceGraph", + "description": "Query the workforce graph for relationship data" + } + ], + "context_files": [], + "app_user_connector_configs": [], + "selected_skill_names": [], + "selected_workspace_skill_ids": [], + "model": "automatic", + "whatsapp_greeting": null, + "telegram_greeting": null, + "line_greeting": null, + "memory_config": { + "enabled": true, + "scope": "both", + "include_other_conversation_context": false, + "instructions": null + }, + "voice_config": { + "voice_id": null + }, + "allow_anonymous_access": false, + "name": "operations_agent" +} \ No newline at end of file diff --git a/base44/agents/procurement_agent.jsonc b/base44/agents/procurement_agent.jsonc new file mode 100644 index 0000000..4afe04e --- /dev/null +++ b/base44/agents/procurement_agent.jsonc @@ -0,0 +1,76 @@ +{ + "description": "Procurement Agent \u2014 benchmarks vendor performance, optimizes rates, manages vendor approvals, detects pricing anomalies. Acts as a digital procurement manager.", + "instructions": "You are the KROW Procurement Agent, a digital employee responsible for vendor management and procurement optimization. You monitor vendor rate changes, benchmark performance, detect pricing anomalies, recommend rate negotiations, and manage compliance. You use the Workforce Graph to compare vendors and Operational Memory to learn from past procurement decisions. Be analytical and data-driven. When you detect a vendor offering rates above market, flag it. When you see performance declining, recommend action.", + "tool_configs": [ + { + "entity_name": "WorkforceEvent", + "allowed_operations": [ + "create", + "read" + ] + }, + { + "entity_name": "OperationalMemory", + "allowed_operations": [ + "read" + ] + }, + { + "entity_name": "Vendor", + "allowed_operations": [ + "read", + "update" + ] + }, + { + "entity_name": "VendorRate", + "allowed_operations": [ + "read", + "update" + ] + }, + { + "entity_name": "VendorNetworkApproval", + "allowed_operations": [ + "create", + "read", + "update" + ] + }, + { + "entity_name": "VendorRateBook", + "allowed_operations": [ + "read" + ] + }, + { + "entity_name": "CompliancePackage", + "allowed_operations": [ + "read" + ] + }, + { + "entity_name": "DecisionQueue", + "allowed_operations": [ + "create", + "read" + ] + }, + { + "entity_name": "AgentActivity", + "allowed_operations": [ + "create", + "read" + ] + }, + { + "function_name": "reasonAboutEvent", + "description": "Trigger the reasoning engine to analyze a procurement event" + }, + { + "function_name": "queryWorkforceGraph", + "description": "Query the workforce graph for vendor and rate data" + } + ], + "name": "procurement_agent" +} \ No newline at end of file diff --git a/base44/config.jsonc b/base44/config.jsonc new file mode 100644 index 0000000..4370ba4 --- /dev/null +++ b/base44/config.jsonc @@ -0,0 +1,9 @@ +{ + "name": "KROW Workforce Control Tower", + "site": { + "installCommand": "npm install", + "buildCommand": "npm run build", + "serveCommand": "npm run dev", + "outputDirectory": "./dist" + } +} \ No newline at end of file diff --git a/base44/entities/AIInterview.jsonc b/base44/entities/AIInterview.jsonc new file mode 100644 index 0000000..ca3cd1d --- /dev/null +++ b/base44/entities/AIInterview.jsonc @@ -0,0 +1,127 @@ +{ + "name": "AIInterview", + "type": "object", + "properties": { + "applicant_id": { + "type": "string" + }, + "job_posting_id": { + "type": "string" + }, + "applicant_name": { + "type": "string" + }, + "job_title": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "scheduled", + "in_progress", + "completed", + "cancelled" + ], + "default": "scheduled" + }, + "messages": { + "type": "array", + "description": "Full conversation transcript", + "items": { + "type": "object", + "properties": { + "role": { + "type": "string", + "enum": [ + "ai", + "candidate" + ] + }, + "content": { + "type": "string" + }, + "timestamp": { + "type": "string" + }, + "response_time_seconds": { + "type": "number" + } + } + } + }, + "questions_asked": { + "type": "number", + "default": 0 + }, + "overall_interview_score": { + "type": "number" + }, + "verdict": { + "type": "string" + }, + "hire_recommendation": { + "type": "string" + }, + "ai_flags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Flags like AI-generated responses, suspiciously fast answers" + }, + "integrity_score": { + "type": "number", + "description": "0-100, higher = more likely authentic human responses" + }, + "category_scores": { + "type": "object", + "properties": { + "communication": { + "type": "number" + }, + "technical_fit": { + "type": "number" + }, + "reliability": { + "type": "number" + }, + "culture_fit": { + "type": "number" + }, + "problem_solving": { + "type": "number" + } + } + }, + "strengths": { + "type": "array", + "items": { + "type": "string" + } + }, + "concerns": { + "type": "array", + "items": { + "type": "string" + } + }, + "best_fit_roles": { + "type": "array", + "items": { + "type": "string" + } + }, + "summary": { + "type": "string" + }, + "completed_at": { + "type": "string" + } + }, + "required": [ + "applicant_id", + "job_posting_id", + "applicant_name", + "job_title" + ] +} \ No newline at end of file diff --git a/base44/entities/ActivityLog.jsonc b/base44/entities/ActivityLog.jsonc new file mode 100644 index 0000000..6993132 --- /dev/null +++ b/base44/entities/ActivityLog.jsonc @@ -0,0 +1,94 @@ +{ + "name": "ActivityLog", + "type": "object", + "properties": { + "title": { + "type": "string", + "description": "Notification title (e.g., 'Event Rescheduled', 'Invoice Paid')" + }, + "description": { + "type": "string", + "description": "Detailed description of the activity" + }, + "activity_type": { + "type": "string", + "enum": [ + "event_created", + "event_updated", + "event_rescheduled", + "event_canceled", + "staff_assigned", + "staff_removed", + "invoice_paid", + "invoice_created", + "message_received", + "order_created", + "order_updated" + ], + "description": "Type of activity" + }, + "related_entity_type": { + "type": "string", + "enum": [ + "event", + "staff", + "invoice", + "message", + "order", + "user" + ], + "description": "Type of related entity" + }, + "related_entity_id": { + "type": "string", + "description": "ID of the related entity" + }, + "action_link": { + "type": "string", + "description": "Link to view the related item (e.g., 'EventDetail?id=123')" + }, + "action_label": { + "type": "string", + "description": "Label for the action button (e.g., 'View Event', 'View Invoice')" + }, + "user_id": { + "type": "string", + "description": "ID of the user this notification is for" + }, + "is_read": { + "type": "boolean", + "default": false, + "description": "Whether the notification has been read" + }, + "icon_type": { + "type": "string", + "enum": [ + "calendar", + "user", + "invoice", + "message", + "alert", + "check" + ], + "description": "Icon to display for this notification" + }, + "icon_color": { + "type": "string", + "enum": [ + "blue", + "red", + "green", + "yellow", + "purple" + ], + "default": "blue", + "description": "Color theme for the icon" + } + }, + "required": [ + "title", + "description", + "activity_type", + "user_id" + ] +} \ No newline at end of file diff --git a/base44/entities/AgentActivity.jsonc b/base44/entities/AgentActivity.jsonc new file mode 100644 index 0000000..f8cae5c --- /dev/null +++ b/base44/entities/AgentActivity.jsonc @@ -0,0 +1,79 @@ +{ + "name": "AgentActivity", + "type": "object", + "properties": { + "agent_name": { + "type": "string", + "description": "Name of the AI agent that performed this activity" + }, + "department": { + "type": "string", + "enum": [ + "operations", + "procurement", + "finance", + "vendor", + "compliance", + "executive" + ] + }, + "activity_type": { + "type": "string", + "enum": [ + "event_processed", + "prediction_made", + "action_executed", + "decision_queued", + "anomaly_detected", + "recommendation_sent", + "learning_completed", + "graph_queried" + ] + }, + "trigger_event_id": { + "type": "string" + }, + "memory_id": { + "type": "string" + }, + "summary": { + "type": "string", + "description": "Human-readable description of what the agent did" + }, + "details": { + "type": "object", + "additionalProperties": true + }, + "impact_level": { + "type": "string", + "enum": [ + "info", + "low", + "medium", + "high", + "critical" + ], + "default": "info" + }, + "entities_affected": { + "type": "array", + "items": { + "type": "object", + "properties": { + "entity_type": { + "type": "string" + }, + "entity_id": { + "type": "string" + } + } + } + } + }, + "required": [ + "agent_name", + "department", + "activity_type", + "summary" + ] +} \ No newline at end of file diff --git a/base44/entities/Announcement.jsonc b/base44/entities/Announcement.jsonc new file mode 100644 index 0000000..73bd2a7 --- /dev/null +++ b/base44/entities/Announcement.jsonc @@ -0,0 +1,138 @@ +{ + "name": "Announcement", + "type": "object", + "properties": { + "team_id": { + "type": "string", + "description": "ID of the team that created this announcement" + }, + "vendor_id": { + "type": "string", + "description": "Vendor/owner ID" + }, + "title": { + "type": "string", + "description": "Announcement headline" + }, + "body": { + "type": "string", + "description": "Full announcement content/message" + }, + "flyer_url": { + "type": "string", + "description": "URL to uploaded flyer image" + }, + "audience": { + "type": "array", + "description": "Who can see this announcement", + "items": { + "type": "string", + "enum": [ + "all", + "vendor", + "client", + "workforce", + "procurement", + "operator", + "sector", + "admin" + ] + } + }, + "specific_recipients": { + "type": "array", + "description": "Specific individual staff members to send this announcement to", + "items": { + "type": "object", + "properties": { + "staff_id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "email": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "position": { + "type": "string" + } + } + } + }, + "status": { + "type": "string", + "enum": [ + "draft", + "scheduled", + "active", + "paused", + "expired" + ], + "default": "draft", + "description": "Current status of the announcement" + }, + "priority": { + "type": "string", + "enum": [ + "low", + "normal", + "high", + "urgent" + ], + "default": "normal", + "description": "Announcement priority/urgency level" + }, + "publish_date": { + "type": "string", + "format": "date-time", + "description": "Scheduled publish date and time" + }, + "expire_date": { + "type": "string", + "format": "date-time", + "description": "When the announcement stops being visible" + }, + "send_email": { + "type": "boolean", + "default": false, + "description": "Whether to also send this as an email to audience" + }, + "send_push": { + "type": "boolean", + "default": false, + "description": "Whether to send push notification" + }, + "pin_to_top": { + "type": "boolean", + "default": false, + "description": "Pin this announcement to top of feed" + }, + "view_count": { + "type": "number", + "default": 0, + "description": "Number of views" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Tags for categorization" + }, + "created_by_name": { + "type": "string", + "description": "Name of user who created the announcement" + } + }, + "required": [ + "team_id", + "title", + "body", + "audience", + "status" + ] +} \ No newline at end of file diff --git a/base44/entities/Assignment.jsonc b/base44/entities/Assignment.jsonc new file mode 100644 index 0000000..59040dc --- /dev/null +++ b/base44/entities/Assignment.jsonc @@ -0,0 +1,174 @@ +{ + "name": "Assignment", + "type": "object", + "properties": { + "assignment_number": { + "type": "string", + "description": "Assignment Number format ASN-#### (auto-generated)", + "pattern": "^ASN-[0-9]{4,6}$" + }, + "order_id": { + "type": "string", + "description": "Associated order ID" + }, + "order_number": { + "type": "string", + "description": "Associated order number" + }, + "workforce_id": { + "type": "string", + "description": "Assigned worker ID" + }, + "workforce_name": { + "type": "string", + "description": "Assigned worker name" + }, + "vendor_id": { + "type": "string", + "description": "Vendor providing the worker" + }, + "vendor_name": { + "type": "string", + "description": "Vendor name" + }, + "partner_id": { + "type": "string", + "description": "Client/partner ID" + }, + "role": { + "type": "string", + "description": "Role assigned" + }, + "department": { + "type": "string", + "description": "Department" + }, + "assignment_status": { + "type": "string", + "enum": [ + "Pending", + "Confirmed", + "Checked In", + "In Progress", + "Completed", + "Cancelled", + "No Show" + ], + "default": "Pending", + "description": "Assignment status" + }, + "scheduled_start": { + "type": "string", + "format": "date-time", + "description": "Scheduled start time" + }, + "scheduled_end": { + "type": "string", + "format": "date-time", + "description": "Scheduled end time" + }, + "actual_start": { + "type": "string", + "format": "date-time", + "description": "Actual start time" + }, + "actual_end": { + "type": "string", + "format": "date-time", + "description": "Actual end time" + }, + "timesheet": { + "type": "object", + "description": "Timesheet data", + "properties": { + "clock_in": { + "type": "string", + "format": "date-time" + }, + "clock_out": { + "type": "string", + "format": "date-time" + }, + "break_minutes": { + "type": "number" + }, + "total_hours": { + "type": "number" + }, + "regular_hours": { + "type": "number" + }, + "overtime_hours": { + "type": "number" + }, + "approved_by": { + "type": "string" + }, + "approved_date": { + "type": "string", + "format": "date-time" + } + } + }, + "ratings": { + "type": "object", + "description": "Performance ratings", + "properties": { + "punctuality": { + "type": "number", + "minimum": 1, + "maximum": 5 + }, + "quality_of_work": { + "type": "number", + "minimum": 1, + "maximum": 5 + }, + "professionalism": { + "type": "number", + "minimum": 1, + "maximum": 5 + }, + "would_hire_again": { + "type": "boolean" + }, + "comments": { + "type": "string" + }, + "rated_by": { + "type": "string" + }, + "rated_date": { + "type": "string", + "format": "date-time" + } + } + }, + "pay_rate": { + "type": "number", + "description": "Worker pay rate" + }, + "bill_rate": { + "type": "number", + "description": "Client bill rate" + }, + "total_pay": { + "type": "number", + "description": "Total worker pay" + }, + "total_bill": { + "type": "number", + "description": "Total client bill" + }, + "notes": { + "type": "string", + "description": "Assignment notes" + } + }, + "required": [ + "order_id", + "workforce_id", + "vendor_id", + "role" + ] +} \ No newline at end of file diff --git a/base44/entities/Budget.jsonc b/base44/entities/Budget.jsonc new file mode 100644 index 0000000..878c630 --- /dev/null +++ b/base44/entities/Budget.jsonc @@ -0,0 +1,55 @@ +{ + "name": "Budget", + "type": "object", + "properties": { + "hub_name": { + "type": "string", + "description": "Name of the budget hub" + }, + "cost_center": { + "type": "string", + "description": "Cost center code this budget maps to" + }, + "amount": { + "type": "number", + "minimum": 0, + "description": "Budget amount for the period" + }, + "frequency": { + "type": "string", + "enum": [ + "Daily", + "Weekly", + "Monthly" + ], + "default": "Monthly", + "description": "Budget periodicity" + }, + "alert_enabled": { + "type": "boolean", + "default": true, + "description": "Whether usage alerts are on" + }, + "alert_threshold": { + "type": "number", + "minimum": 1, + "maximum": 100, + "default": 80, + "description": "Utilization percentage that triggers an alert" + }, + "business_id": { + "type": "string", + "description": "Client business ID this budget belongs to" + }, + "business_name": { + "type": "string", + "description": "Client business name" + } + }, + "required": [ + "hub_name", + "cost_center", + "amount", + "frequency" + ] +} \ No newline at end of file diff --git a/base44/entities/Business.jsonc b/base44/entities/Business.jsonc new file mode 100644 index 0000000..c17e4a4 --- /dev/null +++ b/base44/entities/Business.jsonc @@ -0,0 +1,306 @@ +{ + "name": "Business", + "type": "object", + "properties": { + "business_name": { + "type": "string", + "description": "Name of the business/client company" + }, + "company_logo": { + "type": "string", + "description": "URL to company logo image" + }, + "contact_name": { + "type": "string", + "description": "Primary contact person" + }, + "email": { + "type": "string", + "format": "email", + "description": "Business email" + }, + "phone": { + "type": "string", + "description": "Business phone number" + }, + "hub_building": { + "type": "string", + "description": "Hub or building name/location" + }, + "address": { + "type": "string", + "description": "Street address" + }, + "city": { + "type": "string", + "description": "City" + }, + "area": { + "type": "string", + "enum": [ + "Bay Area", + "Southern California", + "Northern California", + "Central Valley", + "Other" + ], + "description": "Geographic area" + }, + "sector": { + "type": "string", + "enum": [ + "Bon App\u00e9tit", + "Eurest", + "Aramark", + "Epicurean Group", + "Chartwells", + "Other" + ], + "description": "Sector/industry" + }, + "rate_group": { + "type": "string", + "enum": [ + "Standard", + "Premium", + "Enterprise", + "Custom" + ], + "description": "Pricing tier/rate group" + }, + "rate_card": { + "type": "string", + "description": "Assigned rate card name (e.g., Google, Bay Area Compass, Aramark)" + }, + "erp_system": { + "type": "string", + "enum": [ + "None", + "SAP Ariba", + "Fieldglass", + "CrunchTime", + "Coupa", + "Oracle NetSuite", + "Workday", + "Other" + ], + "default": "None", + "description": "Client's ERP/procurement system" + }, + "erp_vendor_id": { + "type": "string", + "description": "Vendor ID in client's ERP system" + }, + "erp_cost_center": { + "type": "string", + "description": "Default cost center code for invoicing" + }, + "edi_enabled": { + "type": "boolean", + "default": false, + "description": "Whether EDI integration is enabled" + }, + "edi_format": { + "type": "string", + "enum": [ + "EDI 810", + "cXML", + "CSV", + "JSON", + "Custom" + ], + "description": "Preferred EDI/export format" + }, + "invoice_email": { + "type": "string", + "format": "email", + "description": "Email address for invoice delivery" + }, + "po_required": { + "type": "boolean", + "default": false, + "description": "Whether PO number is required for invoicing" + }, + "status": { + "type": "string", + "enum": [ + "Active", + "Inactive", + "Pending" + ], + "default": "Active", + "description": "Business status" + }, + "is_active": { + "type": "boolean", + "default": true, + "description": "Whether the client is currently active (vendor can toggle)" + }, + "last_order_date": { + "type": "string", + "format": "date", + "description": "Date of the last order placed by this client" + }, + "notes": { + "type": "string", + "description": "Additional notes" + }, + "vendor_id": { + "type": "string", + "description": "Vendor managing this business" + }, + "vendor_name": { + "type": "string", + "description": "Vendor name" + }, + "hubs": { + "type": "array", + "description": "List of hubs/locations for this business", + "items": { + "type": "object", + "properties": { + "hub_name": { + "type": "string", + "description": "Name of the hub/location" + }, + "address": { + "type": "string", + "description": "Hub address" + }, + "city": { + "type": "string", + "description": "City" + }, + "state": { + "type": "string", + "description": "State" + }, + "zip_code": { + "type": "string", + "description": "ZIP code" + }, + "manager_name": { + "type": "string", + "description": "Hub manager name" + }, + "manager_email": { + "type": "string", + "format": "email", + "description": "Hub manager email" + }, + "is_active": { + "type": "boolean", + "default": true, + "description": "Whether the hub is active" + } + } + } + }, + "departments": { + "type": "array", + "description": "List of departments within this business", + "items": { + "type": "string" + } + }, + "team_members": { + "type": "array", + "description": "Team members managing this business", + "items": { + "type": "object", + "properties": { + "member_id": { + "type": "string" + }, + "member_name": { + "type": "string" + }, + "email": { + "type": "string" + }, + "role": { + "type": "string" + }, + "is_active": { + "type": "boolean", + "default": true + } + } + } + }, + "favorite_staff": { + "type": "array", + "description": "Array of favorite staff IDs for this business", + "items": { + "type": "object", + "properties": { + "staff_id": { + "type": "string" + }, + "staff_name": { + "type": "string" + }, + "position": { + "type": "string" + }, + "added_date": { + "type": "string", + "format": "date-time" + } + } + } + }, + "blocked_staff": { + "type": "array", + "description": "Array of blocked staff IDs for this business", + "items": { + "type": "object", + "properties": { + "staff_id": { + "type": "string" + }, + "staff_name": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "blocked_date": { + "type": "string", + "format": "date-time" + } + } + } + }, + "total_members": { + "type": "number", + "default": 0, + "description": "Total team members" + }, + "active_members": { + "type": "number", + "default": 0, + "description": "Active team members" + }, + "total_hubs": { + "type": "number", + "default": 0, + "description": "Total hubs" + }, + "favorite_staff_count": { + "type": "number", + "default": 0, + "description": "Number of favorite staff" + }, + "blocked_staff_count": { + "type": "number", + "default": 0, + "description": "Number of blocked staff" + } + }, + "required": [ + "business_name", + "contact_name", + "rate_group" + ] +} \ No newline at end of file diff --git a/base44/entities/Certification.jsonc b/base44/entities/Certification.jsonc new file mode 100644 index 0000000..7d56bf7 --- /dev/null +++ b/base44/entities/Certification.jsonc @@ -0,0 +1,88 @@ +{ + "name": "Certification", + "type": "object", + "properties": { + "employee_id": { + "type": "string", + "description": "Staff member ID" + }, + "employee_name": { + "type": "string", + "description": "Staff member name" + }, + "vendor_id": { + "type": "string", + "description": "Vendor ID who owns this employee" + }, + "vendor_name": { + "type": "string", + "description": "Vendor name" + }, + "certification_type": { + "type": "string", + "enum": [ + "Background Check", + "RBS", + "Food Handler" + ], + "description": "Type of certification - all 3 are required for every employee" + }, + "status": { + "type": "string", + "enum": [ + "current", + "expiring_soon", + "expired", + "pending" + ], + "default": "pending", + "description": "Current status of certification" + }, + "issue_date": { + "type": "string", + "format": "date", + "description": "Date certification was issued" + }, + "expiry_date": { + "type": "string", + "format": "date", + "description": "Date certification expires" + }, + "issuer": { + "type": "string", + "description": "Name of issuing authority" + }, + "certificate_number": { + "type": "string", + "description": "Certificate number or ID" + }, + "document_url": { + "type": "string", + "description": "URL to uploaded certificate document" + }, + "days_until_expiry": { + "type": "number", + "description": "Auto-calculated days until expiry" + }, + "alert_sent_30_days": { + "type": "boolean", + "default": false, + "description": "Has 30-day expiry alert been sent" + }, + "last_alert_date": { + "type": "string", + "format": "date-time", + "description": "When last alert was sent" + }, + "notes": { + "type": "string", + "description": "Additional notes about this certification" + } + }, + "required": [ + "employee_id", + "employee_name", + "certification_type", + "expiry_date" + ] +} \ No newline at end of file diff --git a/base44/entities/CompliancePackage.jsonc b/base44/entities/CompliancePackage.jsonc new file mode 100644 index 0000000..848ed79 --- /dev/null +++ b/base44/entities/CompliancePackage.jsonc @@ -0,0 +1,158 @@ +{ + "name": "CompliancePackage", + "type": "object", + "properties": { + "compliance_number": { + "type": "string", + "description": "Compliance Package Number format CP-#### (auto-generated)", + "pattern": "^CP-[0-9]{4}$" + }, + "entity_type": { + "type": "string", + "enum": [ + "Vendor", + "Workforce", + "Partner" + ], + "description": "Type of entity this compliance package belongs to" + }, + "entity_id": { + "type": "string", + "description": "ID of the vendor/worker/partner" + }, + "entity_name": { + "type": "string", + "description": "Name of entity" + }, + "package_type": { + "type": "string", + "enum": [ + "Vendor Onboarding", + "Worker Onboarding", + "Annual Review", + "Audit" + ], + "description": "Type of compliance package" + }, + "required_documents": { + "type": "array", + "description": "Required document checklist", + "items": { + "type": "object", + "properties": { + "document_name": { + "type": "string" + }, + "document_type": { + "type": "string", + "enum": [ + "W9", + "COI", + "W2", + "I9", + "Background Check", + "Drug Test", + "Certification", + "License", + "Other" + ] + }, + "is_required": { + "type": "boolean" + }, + "status": { + "type": "string", + "enum": [ + "Not Started", + "Pending", + "Submitted", + "Approved", + "Rejected", + "Expired" + ] + }, + "document_url": { + "type": "string" + }, + "submitted_date": { + "type": "string", + "format": "date" + }, + "approved_date": { + "type": "string", + "format": "date" + }, + "expiry_date": { + "type": "string", + "format": "date" + }, + "reviewer": { + "type": "string" + }, + "rejection_reason": { + "type": "string" + } + } + } + }, + "overall_status": { + "type": "string", + "enum": [ + "Not Started", + "In Progress", + "Pending Review", + "Approved", + "Rejected", + "Expired" + ], + "default": "Not Started", + "description": "Overall package status" + }, + "completion_percentage": { + "type": "number", + "minimum": 0, + "maximum": 100, + "description": "Percentage of required documents completed" + }, + "audit_trail": { + "type": "array", + "description": "Audit trail of changes", + "items": { + "type": "object", + "properties": { + "timestamp": { + "type": "string", + "format": "date-time" + }, + "action": { + "type": "string" + }, + "performed_by": { + "type": "string" + }, + "details": { + "type": "string" + } + } + } + }, + "next_review_date": { + "type": "string", + "format": "date", + "description": "Next scheduled review date" + }, + "compliance_officer": { + "type": "string", + "description": "Assigned compliance officer" + }, + "notes": { + "type": "string", + "description": "Compliance notes" + } + }, + "required": [ + "entity_type", + "entity_id", + "package_type" + ] +} \ No newline at end of file diff --git a/base44/entities/Contract.jsonc b/base44/entities/Contract.jsonc new file mode 100644 index 0000000..d19f757 --- /dev/null +++ b/base44/entities/Contract.jsonc @@ -0,0 +1,168 @@ +{ + "name": "Contract", + "type": "object", + "properties": { + "contract_number": { + "type": "string", + "description": "Contract Number format CT-#### (auto-generated)", + "pattern": "^CT-[0-9]{4}$" + }, + "contract_name": { + "type": "string", + "description": "Descriptive contract name" + }, + "contract_type": { + "type": "string", + "enum": [ + "MSA", + "SOW", + "Rate Agreement", + "Service Agreement", + "NDA", + "Amendment" + ], + "description": "Type of contract" + }, + "vendor_id": { + "type": "string", + "description": "Vendor party to this contract" + }, + "vendor_name": { + "type": "string", + "description": "Vendor name" + }, + "client_id": { + "type": "string", + "description": "Client/Business ID party to this contract" + }, + "client_name": { + "type": "string", + "description": "Client/Business name" + }, + "sector_id": { + "type": "string", + "description": "Sector this contract falls under (if applicable)" + }, + "sector_name": { + "type": "string" + }, + "partner_id": { + "type": "string", + "description": "Partner ID (if partner-specific)" + }, + "partner_name": { + "type": "string" + }, + "procurement_manager": { + "type": "string", + "description": "Procurement manager who owns this contract" + }, + "rate_card_id": { + "type": "string", + "description": "Reference to RateCard entity if rates are defined there" + }, + "effective_start_date": { + "type": "string", + "format": "date", + "description": "Contract effective start date" + }, + "effective_end_date": { + "type": "string", + "format": "date", + "description": "Contract end date" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "pending_review", + "active", + "expiring", + "expired", + "terminated", + "amended" + ], + "default": "draft", + "description": "Contract lifecycle status" + }, + "billing_terms": { + "type": "string", + "description": "Net 15, Net 30, Net 45, Net 60, etc." + }, + "payment_terms": { + "type": "string", + "description": "Payment terms and conditions" + }, + "auto_renew": { + "type": "boolean", + "default": false, + "description": "Whether contract auto-renews" + }, + "renewal_notice_days": { + "type": "number", + "description": "Days notice required before renewal/termination" + }, + "document_url": { + "type": "string", + "description": "URL to the signed contract document" + }, + "total_contract_value": { + "type": "number", + "minimum": 0, + "description": "Total estimated contract value" + }, + "signed_by_vendor": { + "type": "string", + "description": "Name of vendor signer" + }, + "signed_by_client": { + "type": "string", + "description": "Name of client signer" + }, + "signed_date": { + "type": "string", + "format": "date", + "description": "Date contract was fully executed" + }, + "amendments": { + "type": "array", + "description": "List of contract amendments", + "items": { + "type": "object", + "properties": { + "amendment_number": { + "type": "number" + }, + "description": { + "type": "string" + }, + "effective_date": { + "type": "string", + "format": "date" + }, + "document_url": { + "type": "string" + } + } + } + }, + "compliance_requirements": { + "type": "array", + "description": "Compliance requirements tied to this contract", + "items": { + "type": "string" + } + }, + "notes": { + "type": "string", + "description": "Additional notes" + } + }, + "required": [ + "contract_name", + "contract_type", + "vendor_id", + "client_id", + "status" + ] +} \ No newline at end of file diff --git a/base44/entities/Conversation.jsonc b/base44/entities/Conversation.jsonc new file mode 100644 index 0000000..ed8da40 --- /dev/null +++ b/base44/entities/Conversation.jsonc @@ -0,0 +1,97 @@ +{ + "name": "Conversation", + "type": "object", + "properties": { + "participants": { + "type": "array", + "description": "Array of participant IDs/emails", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "role": { + "type": "string", + "enum": [ + "client", + "vendor", + "staff", + "admin" + ] + } + } + } + }, + "conversation_type": { + "type": "string", + "enum": [ + "client-vendor", + "staff-client", + "staff-admin", + "vendor-admin", + "client-admin", + "group-staff", + "group-event-staff" + ], + "description": "Type of conversation" + }, + "is_group": { + "type": "boolean", + "default": false, + "description": "Whether this is a group conversation" + }, + "group_name": { + "type": "string", + "description": "Name of the group (e.g., 'All Active Staff', 'Event #123 Team')" + }, + "related_to": { + "type": "string", + "description": "ID of related entity (event_id, order_id, etc.)" + }, + "related_type": { + "type": "string", + "enum": [ + "event", + "staff", + "business", + "general" + ], + "description": "Type of related entity" + }, + "subject": { + "type": "string", + "description": "Conversation subject/title" + }, + "last_message": { + "type": "string", + "description": "Preview of last message" + }, + "last_message_at": { + "type": "string", + "format": "date-time", + "description": "Timestamp of last message" + }, + "unread_count": { + "type": "number", + "default": 0, + "description": "Number of unread messages" + }, + "status": { + "type": "string", + "enum": [ + "active", + "archived", + "closed" + ], + "default": "active" + } + }, + "required": [ + "participants", + "conversation_type" + ] +} \ No newline at end of file diff --git a/base44/entities/DecisionQueue.jsonc b/base44/entities/DecisionQueue.jsonc new file mode 100644 index 0000000..83d80bc --- /dev/null +++ b/base44/entities/DecisionQueue.jsonc @@ -0,0 +1,107 @@ +{ + "name": "DecisionQueue", + "type": "object", + "properties": { + "memory_id": { + "type": "string", + "description": "Reference to the OperationalMemory this decision is based on" + }, + "trigger_event_id": { + "type": "string", + "description": "Event that triggered this decision" + }, + "title": { + "type": "string", + "description": "Short title for the decision" + }, + "summary": { + "type": "string", + "description": "Human-readable summary of what the AI recommends and why" + }, + "department": { + "type": "string", + "enum": [ + "operations", + "procurement", + "finance", + "vendor", + "compliance", + "executive" + ] + }, + "agent_name": { + "type": "string" + }, + "proposed_actions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "action_type": { + "type": "string" + }, + "description": { + "type": "string" + }, + "auto_execute": { + "type": "boolean" + } + } + } + }, + "confidence_score": { + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "risk_level": { + "type": "string", + "enum": [ + "low", + "medium", + "high" + ], + "default": "medium" + }, + "status": { + "type": "string", + "enum": [ + "pending_approval", + "approved", + "rejected", + "executed", + "expired" + ], + "default": "pending_approval" + }, + "reviewer_id": { + "type": "string", + "description": "User who reviewed the decision" + }, + "reviewer_name": { + "type": "string" + }, + "review_notes": { + "type": "string" + }, + "reviewed_at": { + "type": "string", + "format": "date-time" + }, + "expires_at": { + "type": "string", + "format": "date-time", + "description": "When this decision becomes stale" + }, + "context_snapshot": { + "type": "object", + "additionalProperties": true, + "description": "Graph context for the reviewer to understand the decision" + } + }, + "required": [ + "title", + "department", + "status" + ] +} \ No newline at end of file diff --git a/base44/entities/EmployeeDocument.jsonc b/base44/entities/EmployeeDocument.jsonc new file mode 100644 index 0000000..9c1a0ff --- /dev/null +++ b/base44/entities/EmployeeDocument.jsonc @@ -0,0 +1,84 @@ +{ + "name": "EmployeeDocument", + "type": "object", + "properties": { + "employee_id": { + "type": "string", + "description": "Staff member ID" + }, + "employee_name": { + "type": "string", + "description": "Staff member name" + }, + "vendor_id": { + "type": "string", + "description": "Vendor ID" + }, + "vendor_name": { + "type": "string", + "description": "Vendor name" + }, + "document_type": { + "type": "string", + "enum": [ + "W-4 Form", + "I-9 Form", + "State Tax Form", + "Direct Deposit", + "Background Check", + "Food Handler", + "RBS License", + "ID Copy", + "SSN Card", + "Work Permit" + ], + "description": "Type of document" + }, + "status": { + "type": "string", + "enum": [ + "uploaded", + "pending", + "expiring", + "expired", + "rejected", + "missing", + "approved" + ], + "default": "missing", + "description": "Document status" + }, + "document_url": { + "type": "string", + "description": "URL to uploaded document" + }, + "upload_date": { + "type": "string", + "format": "date", + "description": "When document was uploaded" + }, + "expiry_date": { + "type": "string", + "format": "date", + "description": "Document expiration date" + }, + "approved_by": { + "type": "string", + "description": "Name of user who approved this document" + }, + "approved_date": { + "type": "string", + "format": "date", + "description": "When the document was approved" + }, + "notes": { + "type": "string", + "description": "Additional notes" + } + }, + "required": [ + "employee_id", + "employee_name", + "document_type" + ] +} \ No newline at end of file diff --git a/base44/entities/Enterprise.jsonc b/base44/entities/Enterprise.jsonc new file mode 100644 index 0000000..9de3e6f --- /dev/null +++ b/base44/entities/Enterprise.jsonc @@ -0,0 +1,89 @@ +{ + "name": "Enterprise", + "type": "object", + "properties": { + "enterprise_number": { + "type": "string", + "description": "Enterprise Number format EN-#### (auto-generated)", + "pattern": "^EN-[0-9]{4}$" + }, + "enterprise_name": { + "type": "string", + "description": "Enterprise name (e.g., Compass)" + }, + "enterprise_code": { + "type": "string", + "description": "Short code identifier" + }, + "brand_family": { + "type": "array", + "description": "List of brands under this enterprise", + "items": { + "type": "string" + } + }, + "headquarters_address": { + "type": "string", + "description": "HQ address" + }, + "global_policies": { + "type": "object", + "description": "Global enterprise policies", + "properties": { + "minimum_wage": { + "type": "number" + }, + "overtime_rules": { + "type": "string" + }, + "uniform_standards": { + "type": "string" + }, + "background_check_required": { + "type": "boolean" + } + } + }, + "sector_registry": { + "type": "array", + "description": "List of sector IDs under this enterprise", + "items": { + "type": "string" + } + }, + "rate_guardrails": { + "type": "object", + "description": "Rate limits and guardrails", + "properties": { + "minimum_markup_percentage": { + "type": "number" + }, + "maximum_markup_percentage": { + "type": "number" + }, + "minimum_bill_rate": { + "type": "number" + } + } + }, + "primary_contact_name": { + "type": "string", + "description": "Enterprise contact" + }, + "primary_contact_email": { + "type": "string", + "format": "email", + "description": "Enterprise contact email" + }, + "is_active": { + "type": "boolean", + "default": true, + "description": "Is enterprise active" + } + }, + "required": [ + "enterprise_name", + "enterprise_code", + "enterprise_number" + ] +} \ No newline at end of file diff --git a/base44/entities/Equipment.jsonc b/base44/entities/Equipment.jsonc new file mode 100644 index 0000000..b3cf78e --- /dev/null +++ b/base44/entities/Equipment.jsonc @@ -0,0 +1,138 @@ +{ + "name": "Equipment", + "type": "object", + "properties": { + "equipment_id": { + "type": "string", + "description": "Equipment item ID" + }, + "equipment_name": { + "type": "string", + "description": "Name of the equipment item" + }, + "category": { + "type": "string", + "enum": [ + "uniform", + "kitchen", + "service", + "cleaning", + "tech", + "safety", + "furniture", + "bar", + "other" + ], + "description": "Equipment category" + }, + "subcategory": { + "type": "string", + "description": "More specific type (e.g., chef coat, serving tray, POS tablet)" + }, + "description": { + "type": "string" + }, + "vendor_id": { + "type": "string", + "description": "Vendor that owns or provides this equipment" + }, + "vendor_name": { + "type": "string" + }, + "client_id": { + "type": "string", + "description": "Client/Business where equipment is assigned (if applicable)" + }, + "client_name": { + "type": "string" + }, + "site_id": { + "type": "string", + "description": "Site where equipment is located" + }, + "shift_id": { + "type": "string", + "description": "Shift this equipment is assigned to (if temporary)" + }, + "event_id": { + "type": "string", + "description": "Event this equipment is for" + }, + "assigned_to_worker_id": { + "type": "string", + "description": "Worker currently assigned this equipment (for uniforms, tablets, etc.)" + }, + "assigned_to_worker_name": { + "type": "string" + }, + "quantity": { + "type": "number", + "default": 1, + "description": "Quantity of this item" + }, + "unit_cost": { + "type": "number", + "minimum": 0, + "description": "Cost per unit" + }, + "replacement_value": { + "type": "number", + "minimum": 0, + "description": "Replacement value per unit" + }, + "serial_number": { + "type": "string", + "description": "Serial or asset tag number" + }, + "condition": { + "type": "string", + "enum": [ + "new", + "good", + "fair", + "poor", + "damaged", + "lost" + ], + "default": "good" + }, + "status": { + "type": "string", + "enum": [ + "available", + "assigned", + "in_use", + "returned", + "in_repair", + "retired" + ], + "default": "available", + "description": "Current status of the equipment" + }, + "purchase_date": { + "type": "string", + "format": "date" + }, + "last_inspection_date": { + "type": "string", + "format": "date" + }, + "next_inspection_date": { + "type": "string", + "format": "date" + }, + "requires_cleaning": { + "type": "boolean", + "default": false, + "description": "Whether item needs cleaning before next use" + }, + "notes": { + "type": "string" + } + }, + "required": [ + "equipment_name", + "category", + "status" + ] +} \ No newline at end of file diff --git a/base44/entities/Event.jsonc b/base44/entities/Event.jsonc new file mode 100644 index 0000000..3b5a261 --- /dev/null +++ b/base44/entities/Event.jsonc @@ -0,0 +1,322 @@ +{ + "name": "Event", + "type": "object", + "properties": { + "event_name": { + "type": "string", + "description": "Name of the event" + }, + "is_rapid": { + "type": "boolean", + "default": false, + "description": "Is this a RAPID/urgent order" + }, + "is_recurring": { + "type": "boolean", + "default": false, + "description": "Is this a recurring event" + }, + "is_multi_day": { + "type": "boolean", + "default": false, + "description": "Is this a multi-day event" + }, + "recurrence_type": { + "type": "string", + "enum": [ + "single", + "date_range", + "scatter" + ], + "description": "Type of recurrence: single, date_range, or scatter" + }, + "recurrence_start_date": { + "type": "string", + "format": "date", + "description": "Start date for recurring events" + }, + "recurrence_end_date": { + "type": "string", + "format": "date", + "description": "End date for recurring events" + }, + "scatter_dates": { + "type": "array", + "description": "Array of specific dates for scatter recurring", + "items": { + "type": "string", + "format": "date" + } + }, + "multi_day_start_date": { + "type": "string", + "format": "date", + "description": "Start date for multi-day events" + }, + "multi_day_end_date": { + "type": "string", + "format": "date", + "description": "End date for multi-day events" + }, + "buffer_time_before": { + "type": "number", + "default": 0, + "description": "Buffer time in minutes before event" + }, + "buffer_time_after": { + "type": "number", + "default": 0, + "description": "Buffer time in minutes after event" + }, + "conflict_detection_enabled": { + "type": "boolean", + "default": true, + "description": "Whether to check for conflicts" + }, + "detected_conflicts": { + "type": "array", + "description": "Array of detected conflicts", + "items": { + "type": "object", + "properties": { + "conflict_type": { + "type": "string", + "enum": [ + "staff_overlap", + "venue_overlap", + "time_buffer" + ] + }, + "severity": { + "type": "string", + "enum": [ + "low", + "medium", + "high", + "critical" + ] + }, + "description": { + "type": "string" + }, + "conflicting_event_id": { + "type": "string" + }, + "staff_id": { + "type": "string" + }, + "detected_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "business_id": { + "type": "string", + "description": "Associated business ID" + }, + "business_name": { + "type": "string", + "description": "Business name" + }, + "vendor_id": { + "type": "string", + "description": "Vendor ID if created by vendor" + }, + "vendor_name": { + "type": "string", + "description": "Vendor name if created by vendor" + }, + "hub": { + "type": "string", + "description": "Hub location for the event" + }, + "event_location": { + "type": "string", + "description": "Event location address" + }, + "contract_type": { + "type": "string", + "enum": [ + "W2", + "1099", + "Temp", + "Contract" + ], + "description": "Type of contract" + }, + "po_reference": { + "type": "string", + "description": "Purchase order reference number" + }, + "status": { + "type": "string", + "enum": [ + "Draft", + "Active", + "Pending", + "Assigned", + "Confirmed", + "Completed", + "Canceled" + ], + "default": "Draft" + }, + "date": { + "type": "string", + "format": "date", + "description": "Event date (for single events)" + }, + "requested": { + "type": "number", + "description": "Total number of staff requested for this event", + "default": 0 + }, + "assigned_staff": { + "type": "array", + "description": "Array of assigned staff members", + "items": { + "type": "object", + "properties": { + "staff_id": { + "type": "string" + }, + "staff_name": { + "type": "string" + }, + "email": { + "type": "string" + }, + "role": { + "type": "string" + } + } + } + }, + "shifts": { + "type": "array", + "description": "Array of shifts for this event", + "items": { + "type": "object", + "properties": { + "shift_name": { + "type": "string" + }, + "shift_contact": { + "type": "string" + }, + "location": { + "type": "string" + }, + "location_address": { + "type": "string" + }, + "roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "role": { + "type": "string" + }, + "department": { + "type": "string" + }, + "count": { + "type": "number" + }, + "start_time": { + "type": "string" + }, + "end_time": { + "type": "string" + }, + "hours": { + "type": "number" + }, + "uniform": { + "type": "string" + }, + "break_minutes": { + "type": "number" + }, + "cost_per_hour": { + "type": "number" + }, + "total_value": { + "type": "number" + }, + "vendor_name": { + "type": "string" + }, + "vendor_id": { + "type": "string" + } + } + } + } + } + } + }, + "addons": { + "type": "object", + "properties": { + "goal": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "text": { + "type": "string" + } + } + }, + "portal_access": { + "type": "boolean" + }, + "meal_provided": { + "type": "boolean" + }, + "travel_time": { + "type": "boolean" + }, + "tips": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "amount": { + "type": "string" + } + } + } + } + }, + "total": { + "type": "number", + "description": "Total cost" + }, + "client_name": { + "type": "string" + }, + "client_email": { + "type": "string" + }, + "client_phone": { + "type": "string" + }, + "invoice_id": { + "type": "string", + "description": "Associated invoice ID" + }, + "notes": { + "type": "string" + } + }, + "required": [ + "event_name" + ] +} \ No newline at end of file diff --git a/base44/entities/FoodServiceOperation.jsonc b/base44/entities/FoodServiceOperation.jsonc new file mode 100644 index 0000000..eb75b10 --- /dev/null +++ b/base44/entities/FoodServiceOperation.jsonc @@ -0,0 +1,200 @@ +{ + "name": "FoodServiceOperation", + "type": "object", + "properties": { + "operation_id": { + "type": "string", + "description": "Operation record ID" + }, + "operation_name": { + "type": "string", + "description": "Name of the food service operation" + }, + "service_type": { + "type": "string", + "enum": [ + "breakfast", + "lunch", + "dinner", + "catering", + "concession", + "cafe", + "buffet", + "banquet", + "retail", + "vending", + "other" + ], + "description": "Type of food service" + }, + "client_id": { + "type": "string", + "description": "Client/Business ID this operation serves" + }, + "client_name": { + "type": "string" + }, + "site_id": { + "type": "string", + "description": "Site where operation takes place" + }, + "location_name": { + "type": "string", + "description": "Location/dining area name" + }, + "sector_id": { + "type": "string", + "description": "Sector this operation belongs to" + }, + "sector_name": { + "type": "string" + }, + "vendor_id": { + "type": "string", + "description": "Vendor operating this service" + }, + "vendor_name": { + "type": "string" + }, + "manager_id": { + "type": "string", + "description": "Manager Staff ID running this operation" + }, + "manager_name": { + "type": "string" + }, + "shift_id": { + "type": "string", + "description": "Shift this operation is tied to" + }, + "event_id": { + "type": "string", + "description": "Event this operation is part of" + }, + "operation_date": { + "type": "string", + "format": "date", + "description": "Date of operation" + }, + "service_start_time": { + "type": "string", + "description": "Service start time" + }, + "service_end_time": { + "type": "string", + "description": "Service end time" + }, + "meal_period": { + "type": "string", + "enum": [ + "breakfast", + "am_break", + "lunch", + "pm_break", + "dinner", + "late_night", + "all_day" + ], + "description": "Meal period" + }, + "menu_type": { + "type": "string", + "description": "Menu style (e.g., American, Mediterranean, Asian, Custom)" + }, + "covers_expected": { + "type": "number", + "default": 0, + "description": "Expected number of covers/guests" + }, + "covers_actual": { + "type": "number", + "default": 0, + "description": "Actual covers served" + }, + "staffing_level": { + "type": "number", + "default": 0, + "description": "Number of staff assigned to this operation" + }, + "kitchen_status": { + "type": "string", + "enum": [ + "closed", + "prep", + "service", + "post_service", + "cleanup", + "deep_clean" + ], + "default": "closed", + "description": "Current kitchen/operation phase" + }, + "equipment_assigned": { + "type": "array", + "description": "Equipment IDs assigned to this operation", + "items": { + "type": "object", + "properties": { + "equipment_id": { + "type": "string" + }, + "equipment_name": { + "type": "string" + }, + "quantity": { + "type": "number" + } + } + } + }, + "contract_id": { + "type": "string", + "description": "Contract governing this operation" + }, + "invoice_id": { + "type": "string", + "description": "Invoice generated for this operation" + }, + "compliance_status": { + "type": "string", + "enum": [ + "compliant", + "pending_review", + "non_compliant", + "not_applicable" + ], + "default": "compliant" + }, + "quality_score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "description": "Quality/QA score for this operation" + }, + "client_feedback": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "scheduled", + "prep", + "in_service", + "completed", + "cancelled", + "no_show" + ], + "default": "scheduled", + "description": "Operation status" + }, + "notes": { + "type": "string" + } + }, + "required": [ + "operation_name", + "service_type", + "operation_date", + "status" + ] +} \ No newline at end of file diff --git a/base44/entities/Invoice.jsonc b/base44/entities/Invoice.jsonc new file mode 100644 index 0000000..5505674 --- /dev/null +++ b/base44/entities/Invoice.jsonc @@ -0,0 +1,309 @@ +{ + "name": "Invoice", + "type": "object", + "properties": { + "invoice_number": { + "type": "string", + "description": "Unique invoice number (e.g., INV-619)" + }, + "event_name": { + "type": "string", + "description": "Name of the event" + }, + "event_id": { + "type": "string", + "description": "Related event ID" + }, + "po_reference": { + "type": "string", + "description": "Purchase order reference" + }, + "event_date": { + "type": "string", + "format": "date", + "description": "Event date" + }, + "from_company": { + "type": "object", + "description": "Vendor company information", + "properties": { + "name": { + "type": "string" + }, + "address": { + "type": "string" + }, + "email": { + "type": "string" + }, + "phone": { + "type": "string" + } + } + }, + "to_company": { + "type": "object", + "description": "Client company information", + "properties": { + "name": { + "type": "string" + }, + "address": { + "type": "string" + }, + "email": { + "type": "string" + }, + "manager": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "vendor_id": { + "type": "string" + } + } + }, + "business_name": { + "type": "string", + "description": "Client/Business name" + }, + "manager_name": { + "type": "string", + "description": "Manager name" + }, + "vendor_name": { + "type": "string", + "description": "Vendor providing services" + }, + "vendor_id": { + "type": "string", + "description": "Vendor ID" + }, + "hub": { + "type": "string", + "description": "Hub location" + }, + "cost_center": { + "type": "string", + "description": "Cost center or department" + }, + "roles": { + "type": "array", + "description": "Grouped by role with staff details", + "items": { + "type": "object", + "properties": { + "role_name": { + "type": "string" + }, + "staff_entries": { + "type": "array", + "items": { + "type": "object", + "properties": { + "staff_name": { + "type": "string" + }, + "staff_id": { + "type": "string" + }, + "date": { + "type": "string", + "format": "date" + }, + "position": { + "type": "string" + }, + "check_in": { + "type": "string" + }, + "check_out": { + "type": "string" + }, + "worked_hours": { + "type": "number" + }, + "regular_hours": { + "type": "number" + }, + "ot_hours": { + "type": "number" + }, + "dt_hours": { + "type": "number" + }, + "regular_rate": { + "type": "number" + }, + "ot_rate": { + "type": "number" + }, + "dt_rate": { + "type": "number" + }, + "regular_value": { + "type": "number" + }, + "ot_value": { + "type": "number" + }, + "dt_value": { + "type": "number" + }, + "rate": { + "type": "number" + }, + "total": { + "type": "number" + } + } + } + }, + "role_subtotal": { + "type": "number" + } + } + } + }, + "subtotal": { + "type": "number", + "description": "Subtotal amount" + }, + "other_charges": { + "type": "number", + "description": "Additional charges" + }, + "amount": { + "type": "number", + "minimum": 0, + "description": "Grand total invoice amount" + }, + "tax_amount": { + "type": "number", + "description": "Tax amount" + }, + "tax_rate": { + "type": "number", + "description": "Tax rate percentage" + }, + "status": { + "type": "string", + "enum": [ + "Draft", + "Pending Review", + "Approved", + "Disputed", + "Under Review", + "Resolved", + "Overdue", + "Paid", + "Reconciled", + "Cancelled" + ], + "default": "Draft", + "description": "Current invoice status" + }, + "issue_date": { + "type": "string", + "format": "date", + "description": "Invoice issue date" + }, + "due_date": { + "type": "string", + "format": "date", + "description": "Payment due date" + }, + "paid_date": { + "type": "string", + "format": "date", + "description": "Date payment was received" + }, + "payment_method": { + "type": "string", + "enum": [ + "Credit Card", + "ACH", + "Wire Transfer", + "Check", + "Cash" + ], + "description": "Payment method used" + }, + "payment_reference": { + "type": "string", + "description": "Payment reference/transaction ID" + }, + "dispute_reason": { + "type": "string", + "description": "Reason for dispute" + }, + "dispute_details": { + "type": "string", + "description": "Detailed dispute information" + }, + "disputed_items": { + "type": "array", + "description": "List of disputed staff entry indices", + "items": { + "type": "object", + "properties": { + "role_index": { + "type": "number" + }, + "staff_index": { + "type": "number" + } + } + } + }, + "disputed_by": { + "type": "string", + "description": "User who disputed the invoice" + }, + "disputed_date": { + "type": "string", + "format": "date-time", + "description": "When dispute was raised" + }, + "resolution_notes": { + "type": "string", + "description": "Notes about dispute resolution" + }, + "approved_by": { + "type": "string", + "description": "User who approved the invoice" + }, + "approved_date": { + "type": "string", + "format": "date-time", + "description": "When invoice was approved" + }, + "is_auto_generated": { + "type": "boolean", + "default": false, + "description": "Whether invoice was auto-generated from event" + }, + "pdf_url": { + "type": "string", + "description": "URL to PDF version of invoice" + }, + "notes": { + "type": "string", + "description": "Additional notes about the invoice" + }, + "internal_notes": { + "type": "string", + "description": "Internal notes not visible to client" + } + }, + "required": [ + "invoice_number", + "business_name", + "amount", + "status", + "issue_date", + "due_date" + ] +} \ No newline at end of file diff --git a/base44/entities/InvoiceTemplate.jsonc b/base44/entities/InvoiceTemplate.jsonc new file mode 100644 index 0000000..7184570 --- /dev/null +++ b/base44/entities/InvoiceTemplate.jsonc @@ -0,0 +1,132 @@ +{ + "name": "InvoiceTemplate", + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Template name" + }, + "client_name": { + "type": "string", + "description": "Client/Business name" + }, + "from_company": { + "type": "object", + "description": "Vendor company info", + "properties": { + "name": { + "type": "string" + }, + "address": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "email": { + "type": "string" + } + } + }, + "to_company": { + "type": "object", + "description": "Client company info", + "properties": { + "name": { + "type": "string" + }, + "address": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "email": { + "type": "string" + }, + "hub_name": { + "type": "string" + }, + "manager_name": { + "type": "string" + }, + "vendor_id": { + "type": "string" + } + } + }, + "hub": { + "type": "string", + "description": "Hub location" + }, + "department": { + "type": "string", + "description": "Department" + }, + "po_reference": { + "type": "string", + "description": "PO reference" + }, + "payment_terms": { + "type": "string", + "description": "Payment terms" + }, + "staff_entries": { + "type": "array", + "description": "Template staff entries (positions and rates)", + "items": { + "type": "object", + "properties": { + "position": { + "type": "string" + }, + "rate": { + "type": "number" + }, + "check_in": { + "type": "string" + }, + "check_out": { + "type": "string" + }, + "lunch": { + "type": "number" + } + } + } + }, + "charges": { + "type": "array", + "description": "Template charges", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "qty": { + "type": "number" + }, + "rate": { + "type": "number" + } + } + } + }, + "staff_count": { + "type": "number", + "description": "Number of staff entries" + }, + "charges_count": { + "type": "number", + "description": "Number of charges" + }, + "notes": { + "type": "string", + "description": "Template notes" + } + }, + "required": [ + "name" + ] +} \ No newline at end of file diff --git a/base44/entities/JobApplication.jsonc b/base44/entities/JobApplication.jsonc new file mode 100644 index 0000000..eb17db9 --- /dev/null +++ b/base44/entities/JobApplication.jsonc @@ -0,0 +1,147 @@ +{ + "name": "JobApplication", + "type": "object", + "properties": { + "job_posting_id": { + "type": "string" + }, + "job_title": { + "type": "string" + }, + "applicant_name": { + "type": "string" + }, + "applicant_email": { + "type": "string", + "format": "email" + }, + "applicant_phone": { + "type": "string" + }, + "years_experience": { + "type": "number", + "default": 0 + }, + "english_level": { + "type": "string", + "enum": [ + "None", + "Basic", + "Intermediate", + "Fluent" + ], + "default": "Basic" + }, + "certifications": { + "type": "array", + "items": { + "type": "string" + } + }, + "availability": { + "type": "array", + "items": { + "type": "string" + } + }, + "employment_type_preference": { + "type": "string" + }, + "resume_url": { + "type": "string" + }, + "cover_letter": { + "type": "string" + }, + "linkedin_url": { + "type": "string" + }, + "references": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "applied", + "ai_screened", + "shortlisted", + "interview", + "hired", + "rejected" + ], + "default": "applied" + }, + "ai_score": { + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "ai_match_label": { + "type": "string", + "enum": [ + "Excellent Match", + "Strong Match", + "Good Match", + "Weak Match", + "Not a Match" + ] + }, + "ai_summary": { + "type": "string", + "description": "AI-generated vetting summary" + }, + "ai_strengths": { + "type": "array", + "items": { + "type": "string" + } + }, + "ai_gaps": { + "type": "array", + "items": { + "type": "string" + } + }, + "ai_recommendation": { + "type": "string" + }, + "score_breakdown": { + "type": "object", + "properties": { + "experience_score": { + "type": "number" + }, + "english_score": { + "type": "number" + }, + "reliability_score": { + "type": "number" + }, + "certifications_score": { + "type": "number" + }, + "availability_score": { + "type": "number" + } + } + }, + "assessment": { + "type": "object", + "description": "Full AI-generated structured assessment" + }, + "rank": { + "type": "number" + }, + "vendor_id": { + "type": "string" + }, + "notes": { + "type": "string" + } + }, + "required": [ + "job_posting_id", + "applicant_name", + "applicant_email" + ] +} \ No newline at end of file diff --git a/base44/entities/JobPosting.jsonc b/base44/entities/JobPosting.jsonc new file mode 100644 index 0000000..d8cb416 --- /dev/null +++ b/base44/entities/JobPosting.jsonc @@ -0,0 +1,144 @@ +{ + "name": "JobPosting", + "type": "object", + "properties": { + "title": { + "type": "string", + "description": "Job title" + }, + "role_category": { + "type": "string", + "enum": [ + "Server", + "Bartender", + "Chef", + "Line Cook", + "Event Manager", + "Security", + "Busser", + "Host", + "Barback", + "Runner", + "Setup Crew", + "Other" + ], + "description": "Role category" + }, + "description": { + "type": "string", + "description": "AI-generated or custom job description" + }, + "responsibilities": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of responsibilities" + }, + "qualifications": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Required qualifications" + }, + "nice_to_have": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Nice to have qualifications" + }, + "custom_requirements": { + "type": "string", + "description": "Custom requirements added by admin/vendor" + }, + "vetting_criteria": { + "type": "object", + "description": "Scoring weights for vetting", + "properties": { + "experience_weight": { + "type": "number" + }, + "english_weight": { + "type": "number" + }, + "reliability_weight": { + "type": "number" + }, + "certifications_weight": { + "type": "number" + }, + "availability_weight": { + "type": "number" + } + } + }, + "min_experience_years": { + "type": "number", + "default": 0 + }, + "english_required": { + "type": "string", + "enum": [ + "None", + "Basic", + "Intermediate", + "Fluent" + ], + "default": "Basic" + }, + "certifications_required": { + "type": "array", + "items": { + "type": "string" + } + }, + "employment_types": { + "type": "array", + "items": { + "type": "string" + } + }, + "pay_range_min": { + "type": "number" + }, + "pay_range_max": { + "type": "number" + }, + "location": { + "type": "string" + }, + "hub": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "active", + "closed", + "paused" + ], + "default": "draft" + }, + "vendor_id": { + "type": "string" + }, + "vendor_name": { + "type": "string" + }, + "total_applicants": { + "type": "number", + "default": 0 + }, + "ai_generated": { + "type": "boolean", + "default": false + } + }, + "required": [ + "title", + "role_category" + ] +} \ No newline at end of file diff --git a/base44/entities/KrowEdgeAward.jsonc b/base44/entities/KrowEdgeAward.jsonc new file mode 100644 index 0000000..e40d0d7 --- /dev/null +++ b/base44/entities/KrowEdgeAward.jsonc @@ -0,0 +1,80 @@ +{ + "name": "KrowEdgeAward", + "type": "object", + "properties": { + "event_id": { + "type": "string" + }, + "event_name": { + "type": "string" + }, + "event_date": { + "type": "string", + "format": "date" + }, + "award_mode": { + "type": "string", + "enum": [ + "standard", + "competitive", + "krow_smart" + ] + }, + "awarded_vendor_id": { + "type": "string" + }, + "awarded_vendor_name": { + "type": "string" + }, + "awarded_bid_id": { + "type": "string" + }, + "final_score": { + "type": "number" + }, + "evaluation_method": { + "type": "string" + }, + "total_bids": { + "type": "number" + }, + "market_avg_price": { + "type": "number" + }, + "awarded_price": { + "type": "number" + }, + "savings_vs_market": { + "type": "number" + }, + "client_priority": { + "type": "string" + }, + "risk_tolerance": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "pending_review", + "awarded", + "disputed", + "cancelled" + ], + "default": "pending_review" + }, + "awarded_by": { + "type": "string" + }, + "award_rationale": { + "type": "string" + }, + "procurement_notes": { + "type": "string" + } + }, + "required": [ + "event_id", + "award_mode" + ] +} \ No newline at end of file diff --git a/base44/entities/KrowEdgeBid.jsonc b/base44/entities/KrowEdgeBid.jsonc new file mode 100644 index 0000000..6f562ff --- /dev/null +++ b/base44/entities/KrowEdgeBid.jsonc @@ -0,0 +1,141 @@ +{ + "name": "KrowEdgeBid", + "type": "object", + "properties": { + "event_id": { + "type": "string", + "description": "Associated event ID" + }, + "event_name": { + "type": "string", + "description": "Event name for reference" + }, + "event_date": { + "type": "string", + "format": "date" + }, + "award_mode": { + "type": "string", + "enum": [ + "standard", + "competitive", + "krow_smart" + ], + "default": "krow_smart", + "description": "Award strategy selected by client" + }, + "client_priority": { + "type": "string", + "enum": [ + "cost_optimization", + "balanced", + "execution_certainty" + ], + "default": "balanced" + }, + "client_risk_tolerance": { + "type": "string", + "enum": [ + "low", + "medium", + "aggressive" + ], + "default": "low" + }, + "transparency_mode": { + "type": "string", + "enum": [ + "blind", + "guided" + ], + "default": "blind" + }, + "vendor_id": { + "type": "string" + }, + "vendor_name": { + "type": "string" + }, + "price_per_hour": { + "type": "number", + "minimum": 0 + }, + "total_cost": { + "type": "number", + "minimum": 0 + }, + "execution_plan_score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "description": "Self-declared execution plan quality" + }, + "confidence_level": { + "type": "number", + "minimum": 0, + "maximum": 100, + "description": "Vendor self-declared confidence" + }, + "notes": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "submitted", + "under_review", + "scored", + "awarded", + "rejected" + ], + "default": "submitted" + }, + "technical_score": { + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "financial_score": { + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "risk_score": { + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "final_score": { + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "rank": { + "type": "number" + }, + "evaluation_method": { + "type": "string", + "enum": [ + "arithmetic_mean", + "geometric_mean", + "lowest_price", + "krow_optimal" + ], + "description": "Randomly selected evaluation method used" + }, + "ai_insight": { + "type": "string", + "description": "AI-generated insight about this bid" + }, + "market_deviation_pct": { + "type": "number", + "description": "% above or below market average" + } + }, + "required": [ + "event_id", + "vendor_id", + "price_per_hour", + "total_cost" + ] +} \ No newline at end of file diff --git a/base44/entities/Message.jsonc b/base44/entities/Message.jsonc new file mode 100644 index 0000000..0814c4c --- /dev/null +++ b/base44/entities/Message.jsonc @@ -0,0 +1,62 @@ +{ + "name": "Message", + "type": "object", + "properties": { + "conversation_id": { + "type": "string", + "description": "ID of the conversation" + }, + "sender_id": { + "type": "string", + "description": "ID of the sender" + }, + "sender_name": { + "type": "string", + "description": "Name of the sender" + }, + "sender_role": { + "type": "string", + "enum": [ + "client", + "vendor", + "staff", + "admin" + ], + "description": "Role of the sender" + }, + "content": { + "type": "string", + "description": "Message content" + }, + "read_by": { + "type": "array", + "description": "Array of user IDs who have read the message", + "items": { + "type": "string" + } + }, + "attachments": { + "type": "array", + "description": "Attached files", + "items": { + "type": "object", + "properties": { + "url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + } + }, + "required": [ + "conversation_id", + "sender_name", + "content" + ] +} \ No newline at end of file diff --git a/base44/entities/OperationalMemory.jsonc b/base44/entities/OperationalMemory.jsonc new file mode 100644 index 0000000..da994e5 --- /dev/null +++ b/base44/entities/OperationalMemory.jsonc @@ -0,0 +1,184 @@ +{ + "name": "OperationalMemory", + "type": "object", + "properties": { + "memory_id": { + "type": "string", + "description": "Unique memory identifier (MEM-timestamp-random)" + }, + "trigger_event_id": { + "type": "string", + "description": "ID of the WorkforceEvent that triggered this memory" + }, + "trigger_event_type": { + "type": "string", + "description": "Type of the triggering event" + }, + "context_snapshot": { + "type": "object", + "description": "Graph state at decision time \u2014 entities, relationships, metrics", + "additionalProperties": true + }, + "decision": { + "type": "object", + "description": "The AI's decision/recommendation", + "properties": { + "prediction": { + "type": "string" + }, + "recommendation": { + "type": "string" + }, + "confidence_score": { + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "proposed_actions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "action_type": { + "type": "string" + }, + "description": { + "type": "string" + }, + "target_entity_type": { + "type": "string" + }, + "target_entity_id": { + "type": "string" + }, + "auto_execute": { + "type": "boolean", + "default": false + }, + "executed": { + "type": "boolean", + "default": false + } + } + } + } + } + }, + "reasoning": { + "type": "string", + "description": "Full reasoning chain \u2014 why the AI made this decision" + }, + "causal_chain": { + "type": "array", + "description": "Structured causal chain tracing WHY the outcome occurred \u2014 each factor connected to the next, ending at root cause(s)", + "items": { + "type": "object", + "properties": { + "step": { + "type": "number", + "description": "Order in the causal chain (1 = first contributing factor, last = root cause)" + }, + "factor": { + "type": "string", + "description": "The contributing factor (e.g., 'Vendor A supplied fewer experienced cooks')" + }, + "evidence": { + "type": "string", + "description": "Data-driven evidence supporting this factor" + }, + "category": { + "type": "string", + "enum": [ + "vendor", + "operations", + "workforce", + "training", + "demand", + "external", + "compliance", + "finance", + "equipment", + "transportation", + "system" + ], + "description": "What area of the operation this factor belongs to" + }, + "leads_to": { + "type": "string", + "description": "What this factor caused (the next link in the chain)" + } + } + } + }, + "root_causes": { + "type": "array", + "description": "The root cause(s) identified at the end of the causal chain", + "items": { + "type": "string" + } + }, + "similar_memories_consulted": { + "type": "array", + "description": "IDs of past memories used as reference", + "items": { + "type": "string" + } + }, + "outcome": { + "type": "string", + "description": "What actually happened (filled in during outcome review)" + }, + "outcome_score": { + "type": "number", + "description": "Did it work? (-100 = made things worse, 0 = no effect, 100 = helped significantly)" + }, + "outcome_metrics": { + "type": "object", + "description": "Quantified outcome data (e.g., overtime_reduction_pct, cost_savings)", + "additionalProperties": true + }, + "status": { + "type": "string", + "enum": [ + "pending", + "executed", + "outcome_pending", + "learned", + "rejected" + ], + "default": "pending" + }, + "agent_name": { + "type": "string", + "description": "Which agent made this decision" + }, + "department": { + "type": "string", + "enum": [ + "operations", + "procurement", + "finance", + "vendor", + "compliance", + "executive" + ], + "description": "Department this memory belongs to" + }, + "learned_at": { + "type": "string", + "format": "date-time", + "description": "When the outcome was recorded and learning completed" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "memory_id", + "trigger_event_id", + "department" + ] +} \ No newline at end of file diff --git a/base44/entities/Order.jsonc b/base44/entities/Order.jsonc new file mode 100644 index 0000000..fbfc76e --- /dev/null +++ b/base44/entities/Order.jsonc @@ -0,0 +1,169 @@ +{ + "name": "Order", + "type": "object", + "properties": { + "order_number": { + "type": "string", + "description": "Order Number format ORD-#### (auto-generated)", + "pattern": "^ORD-[0-9]{4,6}$" + }, + "partner_id": { + "type": "string", + "description": "Partner/Client ID" + }, + "partner_name": { + "type": "string", + "description": "Partner/Client name" + }, + "site_id": { + "type": "string", + "description": "Site/location ID" + }, + "site_name": { + "type": "string", + "description": "Site/location name" + }, + "site_address": { + "type": "string", + "description": "Event/site address" + }, + "sector_id": { + "type": "string", + "description": "Sector ID" + }, + "enterprise_id": { + "type": "string", + "description": "Enterprise ID" + }, + "order_type": { + "type": "string", + "enum": [ + "Standard", + "Last Minute", + "Emergency", + "Recurring" + ], + "default": "Standard", + "description": "Type of order" + }, + "cost_center": { + "type": "string", + "description": "Cost center" + }, + "po_number": { + "type": "string", + "description": "Purchase order number" + }, + "roles_requested": { + "type": "array", + "description": "Roles and headcount requested", + "items": { + "type": "object", + "properties": { + "role": { + "type": "string" + }, + "department": { + "type": "string" + }, + "headcount": { + "type": "number" + }, + "start_date_time": { + "type": "string", + "format": "date-time" + }, + "end_date_time": { + "type": "string", + "format": "date-time" + }, + "pay_rate": { + "type": "number" + }, + "bill_rate": { + "type": "number" + }, + "uniform_required": { + "type": "string" + }, + "special_requirements": { + "type": "string" + } + } + } + }, + "tags": { + "type": "array", + "description": "Order tags/labels", + "items": { + "type": "string" + } + }, + "point_of_contact": { + "type": "object", + "description": "On-site contact", + "properties": { + "name": { + "type": "string" + }, + "email": { + "type": "string" + }, + "phone": { + "type": "string" + } + } + }, + "sla_targets": { + "type": "object", + "description": "Service Level Agreement targets", + "properties": { + "response_time_hours": { + "type": "number" + }, + "fill_rate_percentage": { + "type": "number" + }, + "on_time_arrival": { + "type": "boolean" + } + } + }, + "order_status": { + "type": "string", + "enum": [ + "Draft", + "Submitted", + "Confirmed", + "In Progress", + "Completed", + "Cancelled" + ], + "default": "Draft", + "description": "Order status" + }, + "submitted_date": { + "type": "string", + "format": "date-time", + "description": "When order was submitted" + }, + "confirmed_date": { + "type": "string", + "format": "date-time", + "description": "When order was confirmed" + }, + "special_instructions": { + "type": "string", + "description": "Special instructions" + }, + "total_estimated_cost": { + "type": "number", + "description": "Estimated total cost" + } + }, + "required": [ + "order_number", + "partner_id", + "roles_requested" + ] +} \ No newline at end of file diff --git a/base44/entities/OrderVendorInvite.jsonc b/base44/entities/OrderVendorInvite.jsonc new file mode 100644 index 0000000..9be70fb --- /dev/null +++ b/base44/entities/OrderVendorInvite.jsonc @@ -0,0 +1,60 @@ +{ + "name": "OrderVendorInvite", + "type": "object", + "properties": { + "order_id": { + "type": "string", + "description": "Order ID" + }, + "order_number": { + "type": "string", + "description": "Order number" + }, + "vendor_id": { + "type": "string", + "description": "Vendor ID" + }, + "vendor_name": { + "type": "string", + "description": "Vendor name" + }, + "status": { + "type": "string", + "enum": [ + "pending", + "accepted", + "declined", + "expired" + ], + "default": "pending", + "description": "Invite status" + }, + "invited_at": { + "type": "string", + "format": "date-time", + "description": "When vendor was invited" + }, + "invited_by": { + "type": "string", + "description": "Who sent the invite" + }, + "responded_at": { + "type": "string", + "format": "date-time", + "description": "When vendor responded" + }, + "response_note": { + "type": "string", + "description": "Vendor's response note" + }, + "expires_at": { + "type": "string", + "format": "date-time", + "description": "When invite expires" + } + }, + "required": [ + "order_id", + "vendor_id" + ] +} \ No newline at end of file diff --git a/base44/entities/Partner.jsonc b/base44/entities/Partner.jsonc new file mode 100644 index 0000000..f219295 --- /dev/null +++ b/base44/entities/Partner.jsonc @@ -0,0 +1,116 @@ +{ + "name": "Partner", + "type": "object", + "properties": { + "partner_name": { + "type": "string", + "description": "Partner/client name (e.g., Google, Nvidia)" + }, + "partner_number": { + "type": "string", + "description": "Partner Number format PN-#### (auto-generated)", + "pattern": "^PN-[0-9]{4}$" + }, + "partner_type": { + "type": "string", + "enum": [ + "Corporate", + "Education", + "Healthcare", + "Sports & Entertainment", + "Government" + ], + "description": "Partner type" + }, + "sector_id": { + "type": "string", + "description": "Sector ID this partner belongs to" + }, + "sector_name": { + "type": "string", + "description": "Sector name" + }, + "primary_contact_name": { + "type": "string", + "description": "Primary contact person" + }, + "primary_contact_email": { + "type": "string", + "format": "email", + "description": "Primary contact email" + }, + "primary_contact_phone": { + "type": "string", + "description": "Primary contact phone" + }, + "billing_address": { + "type": "string", + "description": "Billing address" + }, + "sites": { + "type": "array", + "description": "List of partner sites/locations", + "items": { + "type": "object", + "properties": { + "site_name": { + "type": "string" + }, + "address": { + "type": "string" + }, + "city": { + "type": "string" + }, + "state": { + "type": "string" + }, + "zip_code": { + "type": "string" + }, + "site_manager": { + "type": "string" + }, + "site_manager_email": { + "type": "string" + } + } + } + }, + "allowed_vendors": { + "type": "array", + "description": "List of vendor IDs allowed for this partner", + "items": { + "type": "string" + } + }, + "rate_exceptions": { + "type": "array", + "description": "Partner-specific rate exceptions", + "items": { + "type": "object" + } + }, + "cost_centers": { + "type": "array", + "description": "Cost centers/PO numbers", + "items": { + "type": "string" + } + }, + "payment_terms": { + "type": "string", + "description": "Payment terms (e.g., Net 30)", + "default": "Net 30" + }, + "is_active": { + "type": "boolean", + "default": true, + "description": "Is partner active" + } + }, + "required": [ + "partner_name", + "partner_number" + ] +} \ No newline at end of file diff --git a/base44/entities/PayrollRecord.jsonc b/base44/entities/PayrollRecord.jsonc new file mode 100644 index 0000000..e9e948a --- /dev/null +++ b/base44/entities/PayrollRecord.jsonc @@ -0,0 +1,162 @@ +{ + "name": "PayrollRecord", + "type": "object", + "properties": { + "pay_period_start": { + "type": "string", + "format": "date", + "description": "Start of pay period" + }, + "pay_period_end": { + "type": "string", + "format": "date", + "description": "End of pay period" + }, + "vendor_id": { + "type": "string", + "description": "Vendor ID" + }, + "vendor_name": { + "type": "string", + "description": "Vendor name" + }, + "payroll_status": { + "type": "string", + "enum": [ + "Draft", + "Processing", + "Approved", + "Paid" + ], + "default": "Draft", + "description": "Overall payroll batch status" + }, + "entries": { + "type": "array", + "description": "Individual employee payroll entries", + "items": { + "type": "object", + "properties": { + "staff_id": { + "type": "string" + }, + "staff_name": { + "type": "string" + }, + "email": { + "type": "string" + }, + "position": { + "type": "string" + }, + "regular_hours": { + "type": "number" + }, + "overtime_hours": { + "type": "number" + }, + "double_time_hours": { + "type": "number" + }, + "regular_rate": { + "type": "number" + }, + "overtime_rate": { + "type": "number" + }, + "double_time_rate": { + "type": "number" + }, + "regular_pay": { + "type": "number" + }, + "overtime_pay": { + "type": "number" + }, + "double_time_pay": { + "type": "number" + }, + "gross_pay": { + "type": "number" + }, + "timecard_status": { + "type": "string", + "enum": [ + "employee_pending", + "employee_confirmed", + "employee_edited", + "approved", + "paid" + ], + "default": "employee_pending" + }, + "timecard_sent_at": { + "type": "string", + "format": "date-time" + }, + "employee_response_at": { + "type": "string", + "format": "date-time" + }, + "employee_edit_notes": { + "type": "string" + }, + "approved_at": { + "type": "string", + "format": "date-time" + }, + "approved_by": { + "type": "string" + }, + "paid_at": { + "type": "string", + "format": "date-time" + }, + "shifts": { + "type": "array", + "items": { + "type": "object", + "properties": { + "event_name": { + "type": "string" + }, + "date": { + "type": "string", + "format": "date" + }, + "clock_in": { + "type": "string" + }, + "clock_out": { + "type": "string" + }, + "hours": { + "type": "number" + }, + "role": { + "type": "string" + } + } + } + } + } + } + }, + "total_regular_pay": { + "type": "number" + }, + "total_overtime_pay": { + "type": "number" + }, + "total_gross_pay": { + "type": "number" + }, + "notes": { + "type": "string" + } + }, + "required": [ + "pay_period_start", + "pay_period_end" + ] +} \ No newline at end of file diff --git a/base44/entities/RateCard.jsonc b/base44/entities/RateCard.jsonc new file mode 100644 index 0000000..2ac4fb4 --- /dev/null +++ b/base44/entities/RateCard.jsonc @@ -0,0 +1,169 @@ +{ + "name": "RateCard", + "type": "object", + "properties": { + "rate_card_number": { + "type": "string", + "description": "Rate Card Number format RC-#### (auto-generated)", + "pattern": "^RC-[0-9]{4}$" + }, + "vendor_id": { + "type": "string", + "description": "Vendor ID" + }, + "vendor_name": { + "type": "string", + "description": "Vendor name" + }, + "partner_id": { + "type": "string", + "description": "Partner ID (if partner-specific)" + }, + "partner_name": { + "type": "string", + "description": "Partner name (if partner-specific)" + }, + "sector_id": { + "type": "string", + "description": "Sector ID (if sector-specific)" + }, + "effective_start_date": { + "type": "string", + "format": "date", + "description": "Rate card effective start date" + }, + "effective_end_date": { + "type": "string", + "format": "date", + "description": "Rate card effective end date" + }, + "region": { + "type": "string", + "description": "Geographic region (e.g., 'San Francisco Bay Area')" + }, + "state": { + "type": "string", + "description": "State" + }, + "role": { + "type": "string", + "description": "Role/position" + }, + "category": { + "type": "string", + "enum": [ + "Kitchen and Culinary", + "Concessions", + "Facilities", + "Bartending", + "Security", + "Event Staff", + "Management", + "Technical", + "Other" + ], + "description": "Role category" + }, + "pay_rate": { + "type": "number", + "minimum": 0, + "description": "Worker pay rate per hour" + }, + "bill_rate": { + "type": "number", + "minimum": 0, + "description": "Client bill rate per hour" + }, + "markup_amount": { + "type": "number", + "description": "Markup amount in dollars" + }, + "markup_percentage": { + "type": "number", + "description": "Markup as percentage" + }, + "overtime_pay_rate": { + "type": "number", + "description": "Overtime pay rate (typically 1.5x)" + }, + "overtime_bill_rate": { + "type": "number", + "description": "Overtime bill rate" + }, + "overtime_rules": { + "type": "object", + "description": "Overtime rules", + "properties": { + "daily_threshold_hours": { + "type": "number" + }, + "weekly_threshold_hours": { + "type": "number" + }, + "overtime_multiplier": { + "type": "number", + "default": 1.5 + } + } + }, + "exceptions": { + "type": "array", + "description": "Rate exceptions", + "items": { + "type": "object", + "properties": { + "condition": { + "type": "string" + }, + "exception_rate": { + "type": "number" + }, + "notes": { + "type": "string" + } + } + } + }, + "minimum_hours": { + "type": "number", + "description": "Minimum billable hours" + }, + "travel_rate": { + "type": "number", + "description": "Travel reimbursement rate" + }, + "meal_allowance": { + "type": "number", + "description": "Meal allowance if applicable" + }, + "uniform_charge": { + "type": "number", + "description": "Uniform charge if applicable" + }, + "is_active": { + "type": "boolean", + "default": true, + "description": "Is rate card currently active" + }, + "approved_by": { + "type": "string", + "description": "Who approved this rate card" + }, + "approved_date": { + "type": "string", + "format": "date", + "description": "Approval date" + }, + "notes": { + "type": "string", + "description": "Rate card notes" + } + }, + "required": [ + "vendor_id", + "role", + "pay_rate", + "bill_rate", + "effective_start_date" + ] +} \ No newline at end of file diff --git a/base44/entities/ReputationEvent.jsonc b/base44/entities/ReputationEvent.jsonc new file mode 100644 index 0000000..7e70cff --- /dev/null +++ b/base44/entities/ReputationEvent.jsonc @@ -0,0 +1,68 @@ +{ + "name": "ReputationEvent", + "type": "object", + "properties": { + "worker_id": { + "type": "string", + "description": "ID of the workforce member" + }, + "worker_name": { + "type": "string", + "description": "Name of the workforce member" + }, + "event_type": { + "type": "string", + "enum": [ + "shift_completed", + "no_show", + "late_arrival", + "early_departure", + "client_rated", + "supervisor_rated", + "certification_verified", + "last_minute_cancel", + "commendation" + ], + "description": "Type of reputation event" + }, + "event_date": { + "type": "string", + "format": "date", + "description": "Date the event occurred" + }, + "agency_id": { + "type": "string", + "description": "Agency that submitted this event" + }, + "agency_name": { + "type": "string", + "description": "Name of submitting agency" + }, + "rating": { + "type": "number", + "minimum": 1, + "maximum": 5, + "description": "Star rating (for client_rated / supervisor_rated events)" + }, + "role": { + "type": "string", + "description": "Role worked during this event" + }, + "verified": { + "type": "boolean", + "default": true, + "description": "Whether KROW has verified this event" + }, + "notes": { + "type": "string", + "description": "Optional non-sensitive note" + } + }, + "required": [ + "worker_id", + "worker_name", + "event_type", + "event_date", + "agency_name" + ] +} \ No newline at end of file diff --git a/base44/entities/SaleRecord.jsonc b/base44/entities/SaleRecord.jsonc new file mode 100644 index 0000000..a8be074 --- /dev/null +++ b/base44/entities/SaleRecord.jsonc @@ -0,0 +1,90 @@ +{ + "name": "SaleRecord", + "type": "object", + "properties": { + "invoice_id": { + "type": "string", + "description": "Linked invoice ID" + }, + "invoice_number": { + "type": "string", + "description": "Invoice number" + }, + "vendor_id": { + "type": "string" + }, + "vendor_name": { + "type": "string" + }, + "client_name": { + "type": "string" + }, + "event_name": { + "type": "string" + }, + "event_date": { + "type": "string", + "format": "date" + }, + "gross_amount": { + "type": "number", + "description": "Total invoice amount (revenue)" + }, + "vendor_fee_percentage": { + "type": "number", + "description": "Platform/network fee %" + }, + "vendor_fee_amount": { + "type": "number", + "description": "Calculated fee amount" + }, + "net_amount": { + "type": "number", + "description": "Net after vendor fee" + }, + "payment_status": { + "type": "string", + "enum": [ + "Unpaid", + "Partial", + "Paid" + ], + "default": "Unpaid" + }, + "amount_paid": { + "type": "number", + "default": 0 + }, + "balance_due": { + "type": "number" + }, + "payment_history": { + "type": "array", + "items": { + "type": "object", + "properties": { + "payment_date": { + "type": "string", + "format": "date" + }, + "amount": { + "type": "number" + }, + "method": { + "type": "string" + }, + "reference": { + "type": "string" + }, + "recorded_by": { + "type": "string" + } + } + } + } + }, + "required": [ + "invoice_id", + "gross_amount" + ] +} \ No newline at end of file diff --git a/base44/entities/Scorecard.jsonc b/base44/entities/Scorecard.jsonc new file mode 100644 index 0000000..6bf31f1 --- /dev/null +++ b/base44/entities/Scorecard.jsonc @@ -0,0 +1,285 @@ +{ + "name": "Scorecard", + "type": "object", + "properties": { + "scorecard_number": { + "type": "string", + "description": "Scorecard Number format SC-#### (auto-generated)", + "pattern": "^SC-[0-9]{4}$" + }, + "vendor_id": { + "type": "string", + "description": "Vendor ID" + }, + "vendor_name": { + "type": "string", + "description": "Vendor name" + }, + "period_type": { + "type": "string", + "enum": [ + "Monthly", + "Quarterly", + "Annual", + "All Time" + ], + "description": "Reporting period" + }, + "period_start": { + "type": "string", + "format": "date", + "description": "Period start date" + }, + "period_end": { + "type": "string", + "format": "date", + "description": "Period end date" + }, + "kpis": { + "type": "object", + "description": "Key Performance Indicators", + "properties": { + "fill_rate": { + "type": "object", + "properties": { + "value": { + "type": "number" + }, + "target": { + "type": "number" + }, + "status": { + "type": "string", + "enum": [ + "Exceeds", + "Meets", + "Below" + ] + } + } + }, + "on_time_arrival": { + "type": "object", + "properties": { + "value": { + "type": "number" + }, + "target": { + "type": "number" + }, + "status": { + "type": "string" + } + } + }, + "cancellation_rate": { + "type": "object", + "properties": { + "value": { + "type": "number" + }, + "target": { + "type": "number" + }, + "status": { + "type": "string" + } + } + }, + "no_show_rate": { + "type": "object", + "properties": { + "value": { + "type": "number" + }, + "target": { + "type": "number" + }, + "status": { + "type": "string" + } + } + }, + "average_rating": { + "type": "object", + "properties": { + "value": { + "type": "number" + }, + "target": { + "type": "number" + }, + "status": { + "type": "string" + } + } + }, + "response_time_hours": { + "type": "object", + "properties": { + "value": { + "type": "number" + }, + "target": { + "type": "number" + }, + "status": { + "type": "string" + } + } + }, + "compliance_score": { + "type": "object", + "properties": { + "value": { + "type": "number" + }, + "target": { + "type": "number" + }, + "status": { + "type": "string" + } + } + } + } + }, + "sla_results": { + "type": "object", + "description": "SLA Performance Results", + "properties": { + "orders_received": { + "type": "number" + }, + "orders_filled": { + "type": "number" + }, + "orders_partially_filled": { + "type": "number" + }, + "orders_unfilled": { + "type": "number" + }, + "total_shifts": { + "type": "number" + }, + "shifts_completed": { + "type": "number" + }, + "shifts_cancelled": { + "type": "number" + }, + "avg_response_time": { + "type": "number" + } + } + }, + "trends": { + "type": "array", + "description": "Performance trends over time", + "items": { + "type": "object", + "properties": { + "metric": { + "type": "string" + }, + "current_value": { + "type": "number" + }, + "previous_value": { + "type": "number" + }, + "change_percentage": { + "type": "number" + }, + "trend_direction": { + "type": "string", + "enum": [ + "Up", + "Down", + "Stable" + ] + } + } + } + }, + "overall_score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "description": "Overall performance score (0-100)" + }, + "grade": { + "type": "string", + "enum": [ + "A+", + "A", + "B+", + "B", + "C+", + "C", + "D", + "F" + ], + "description": "Performance grade" + }, + "strengths": { + "type": "array", + "description": "Identified strengths", + "items": { + "type": "string" + } + }, + "areas_for_improvement": { + "type": "array", + "description": "Areas needing improvement", + "items": { + "type": "string" + } + }, + "action_items": { + "type": "array", + "description": "Recommended action items", + "items": { + "type": "object", + "properties": { + "item": { + "type": "string" + }, + "priority": { + "type": "string", + "enum": [ + "High", + "Medium", + "Low" + ] + }, + "due_date": { + "type": "string", + "format": "date" + } + } + } + }, + "reviewed_by": { + "type": "string", + "description": "Who reviewed this scorecard" + }, + "reviewed_date": { + "type": "string", + "format": "date", + "description": "Review date" + }, + "next_review_date": { + "type": "string", + "format": "date", + "description": "Next scheduled review" + } + }, + "required": [ + "vendor_id", + "period_type", + "period_start", + "period_end" + ] +} \ No newline at end of file diff --git a/base44/entities/Sector.jsonc b/base44/entities/Sector.jsonc new file mode 100644 index 0000000..a511580 --- /dev/null +++ b/base44/entities/Sector.jsonc @@ -0,0 +1,171 @@ +{ + "name": "Sector", + "type": "object", + "properties": { + "sector_number": { + "type": "string", + "description": "Sector Number format SN-#### (auto-generated)", + "pattern": "^SN-[0-9]{4}$" + }, + "customer_group": { + "type": "string", + "description": "Customer group name" + }, + "sector_code": { + "type": "string", + "description": "Short code identifier" + }, + "sector_name": { + "type": "string", + "description": "Sector/brand name (e.g., Bon App\u00e9tit, Flik, Eurest)" + }, + "division_code": { + "type": "string", + "description": "Division code" + }, + "division": { + "type": "string", + "description": "Division name" + }, + "region_code": { + "type": "string", + "description": "Region code" + }, + "region": { + "type": "string", + "description": "Region name" + }, + "district_code": { + "type": "string", + "description": "District code" + }, + "district": { + "type": "string", + "description": "District name" + }, + "customer_code": { + "type": "string", + "description": "Customer code" + }, + "customer": { + "type": "string", + "description": "Customer name" + }, + "main_contact_address1": { + "type": "string", + "description": "Main contact address line 1" + }, + "main_contact_address2": { + "type": "string", + "description": "Main contact address line 2" + }, + "main_contact_city": { + "type": "string", + "description": "Main contact city" + }, + "main_contact_state": { + "type": "string", + "description": "Main contact state" + }, + "main_contact_postal_code": { + "type": "string", + "description": "Main contact postal/ZIP code" + }, + "financial_code": { + "type": "string", + "description": "Financial code" + }, + "account_manager": { + "type": "string", + "description": "Account manager name" + }, + "account_manager_department": { + "type": "string", + "description": "Account manager department" + }, + "division_manager": { + "type": "string", + "description": "Division manager name" + }, + "division_manager_department": { + "type": "string", + "description": "Division manager department" + }, + "business_channels": { + "type": "array", + "description": "Business channels for this sector", + "items": { + "type": "string" + } + }, + "new_addition": { + "type": "string", + "description": "New addition flag or info" + }, + "parent_enterprise_id": { + "type": "string", + "description": "Parent enterprise ID" + }, + "parent_enterprise_name": { + "type": "string", + "description": "Parent enterprise name" + }, + "sector_type": { + "type": "string", + "enum": [ + "Food Service", + "Facilities", + "Healthcare", + "Education", + "Corporate", + "Sports & Entertainment" + ], + "description": "Sector business type" + }, + "client_portfolio": { + "type": "array", + "description": "List of partner/client IDs in this sector", + "items": { + "type": "string" + } + }, + "sector_policies": { + "type": "object", + "description": "Sector-specific policies", + "properties": { + "uniform_requirements": { + "type": "string" + }, + "certification_requirements": { + "type": "array", + "items": { + "type": "string" + } + }, + "special_training": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "approved_vendors": { + "type": "array", + "description": "List of approved vendor IDs for this sector", + "items": { + "type": "string" + } + }, + "is_active": { + "type": "boolean", + "default": true, + "description": "Is sector active" + } + }, + "required": [ + "sector_name", + "sector_code", + "sector_number" + ] +} \ No newline at end of file diff --git a/base44/entities/Shift.jsonc b/base44/entities/Shift.jsonc new file mode 100644 index 0000000..9b70e2f --- /dev/null +++ b/base44/entities/Shift.jsonc @@ -0,0 +1,93 @@ +{ + "name": "Shift", + "type": "object", + "properties": { + "event_id": { + "type": "string", + "description": "Associated event ID" + }, + "shift_name": { + "type": "string", + "description": "Name of the shift" + }, + "manager_id": { + "type": "string", + "description": "Manager staff ID" + }, + "manager_name": { + "type": "string", + "description": "Manager name" + }, + "location": { + "type": "string", + "description": "Shift location" + }, + "start_date": { + "type": "string", + "format": "date-time", + "description": "Shift start date and time" + }, + "end_date": { + "type": "string", + "format": "date-time", + "description": "Shift end date and time" + }, + "unpaid_break": { + "type": "number", + "description": "Unpaid break duration in minutes" + }, + "count": { + "type": "number", + "description": "Number of staff needed" + }, + "assigned": { + "type": "number", + "description": "Number of staff assigned" + }, + "uniform_type": { + "type": "string", + "description": "Required uniform type" + }, + "price": { + "type": "number", + "description": "Price per staff member" + }, + "amount": { + "type": "number", + "description": "Total amount for shift" + }, + "assigned_staff": { + "type": "array", + "description": "List of assigned staff", + "items": { + "type": "object", + "properties": { + "staff_id": { + "type": "string" + }, + "staff_name": { + "type": "string" + }, + "role": { + "type": "string" + }, + "department": { + "type": "string" + } + } + } + }, + "role": { + "type": "string", + "description": "Role for this shift" + }, + "department": { + "type": "string", + "description": "Department" + } + }, + "required": [ + "shift_name", + "start_date" + ] +} \ No newline at end of file diff --git a/base44/entities/ShiftOutcome.jsonc b/base44/entities/ShiftOutcome.jsonc new file mode 100644 index 0000000..774fbd3 --- /dev/null +++ b/base44/entities/ShiftOutcome.jsonc @@ -0,0 +1,148 @@ +{ + "name": "ShiftOutcome", + "type": "object", + "properties": { + "event_id": { + "type": "string", + "description": "Associated event ID" + }, + "event_name": { + "type": "string", + "description": "Event name for reference" + }, + "event_date": { + "type": "string", + "format": "date", + "description": "Date of the event" + }, + "business_name": { + "type": "string", + "description": "Client business name" + }, + "hub_location": { + "type": "string", + "description": "Location where shift occurred" + }, + "event_type": { + "type": "string", + "description": "Type of event (lunch, dinner, VIP, etc.)" + }, + "expected_covers": { + "type": "number", + "description": "Expected covers/volume for this event" + }, + "actual_covers": { + "type": "number", + "description": "Actual covers served" + }, + "staff_requested": { + "type": "number", + "description": "Staff requested for the event" + }, + "staff_actual": { + "type": "number", + "description": "Staff who actually showed up" + }, + "no_show_count": { + "type": "number", + "default": 0, + "description": "Number of no-shows" + }, + "late_arrival_count": { + "type": "number", + "default": 0, + "description": "Number of late arrivals" + }, + "ot_hours_total": { + "type": "number", + "default": 0, + "description": "Total overtime hours across all staff" + }, + "client_rating": { + "type": "number", + "minimum": 1, + "maximum": 5, + "description": "Client rating after shift (1-5 stars)" + }, + "client_feedback": { + "type": "string", + "description": "Client written feedback" + }, + "qa_score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "description": "Internal QA score (0-100)" + }, + "issues_reported": { + "type": "array", + "description": "Issues reported during or after the shift", + "items": { + "type": "object", + "properties": { + "issue_type": { + "type": "string", + "enum": [ + "late_food", + "understaffed", + "slow_service", + "no_show", + "quality", + "communication", + "other" + ] + }, + "description": { + "type": "string" + }, + "severity": { + "type": "string", + "enum": [ + "low", + "medium", + "high", + "critical" + ] + } + } + } + }, + "prediction_matched": { + "type": "boolean", + "description": "Did the actual demand match the prediction?" + }, + "predicted_staff": { + "type": "number", + "description": "How many staff KROW predicted were needed" + }, + "was_overstaffed": { + "type": "boolean", + "description": "Was the event overstaffed?" + }, + "was_understaffed": { + "type": "boolean", + "description": "Was the event understaffed?" + }, + "vendor_id": { + "type": "string", + "description": "Vendor who staffed this event" + }, + "vendor_name": { + "type": "string", + "description": "Vendor name" + }, + "submitted_by": { + "type": "string", + "description": "Who submitted this outcome report" + }, + "notes": { + "type": "string", + "description": "Internal notes about this outcome" + } + }, + "required": [ + "event_id", + "event_name", + "event_date" + ] +} \ No newline at end of file diff --git a/base44/entities/ShiftProposal.jsonc b/base44/entities/ShiftProposal.jsonc new file mode 100644 index 0000000..8caa6ba --- /dev/null +++ b/base44/entities/ShiftProposal.jsonc @@ -0,0 +1,101 @@ +{ + "name": "ShiftProposal", + "type": "object", + "properties": { + "event_id": { + "type": "string", + "description": "Event/shift being proposed" + }, + "event_name": { + "type": "string", + "description": "Event name" + }, + "staff_id": { + "type": "string", + "description": "Worker being proposed to" + }, + "staff_name": { + "type": "string", + "description": "Worker name" + }, + "vendor_id": { + "type": "string", + "description": "Vendor making the proposal" + }, + "proposal_status": { + "type": "string", + "enum": [ + "PENDING_WORKER_CONFIRMATION", + "ACCEPTED", + "DECLINED", + "EXPIRED", + "CANCELLED" + ], + "default": "PENDING_WORKER_CONFIRMATION", + "description": "Status of the proposal" + }, + "shift_date": { + "type": "string", + "format": "date", + "description": "Date of shift" + }, + "start_time": { + "type": "string", + "description": "Shift start time" + }, + "end_time": { + "type": "string", + "description": "Shift end time" + }, + "location": { + "type": "string", + "description": "Shift location" + }, + "role": { + "type": "string", + "description": "Role/position" + }, + "pay_rate": { + "type": "number", + "description": "Pay rate for shift" + }, + "total_pay": { + "type": "number", + "description": "Total estimated pay" + }, + "response_deadline": { + "type": "string", + "format": "date-time", + "description": "Deadline for worker response" + }, + "proposed_at": { + "type": "string", + "format": "date-time", + "description": "When proposal was sent" + }, + "responded_at": { + "type": "string", + "format": "date-time", + "description": "When worker responded" + }, + "decline_reason": { + "type": "string", + "description": "Reason for declining" + }, + "was_marked_unavailable": { + "type": "boolean", + "default": false, + "description": "Was worker marked unavailable when proposed" + }, + "notification_sent": { + "type": "boolean", + "default": false, + "description": "Whether notification was sent" + } + }, + "required": [ + "event_id", + "staff_id", + "shift_date" + ] +} \ No newline at end of file diff --git a/base44/entities/Site.jsonc b/base44/entities/Site.jsonc new file mode 100644 index 0000000..b215c9f --- /dev/null +++ b/base44/entities/Site.jsonc @@ -0,0 +1,56 @@ +{ + "name": "Site", + "type": "object", + "properties": { + "site_name": { + "type": "string", + "description": "Site name" + }, + "partner_id": { + "type": "string", + "description": "Partner ID this site belongs to" + }, + "partner_name": { + "type": "string", + "description": "Partner name" + }, + "address": { + "type": "string", + "description": "Site address" + }, + "city": { + "type": "string", + "description": "City" + }, + "state": { + "type": "string", + "description": "State" + }, + "zip_code": { + "type": "string", + "description": "ZIP code" + }, + "site_manager": { + "type": "string", + "description": "Site manager name" + }, + "site_manager_email": { + "type": "string", + "format": "email", + "description": "Site manager email" + }, + "site_manager_phone": { + "type": "string", + "description": "Site manager phone" + }, + "is_active": { + "type": "boolean", + "default": true, + "description": "Is site active" + } + }, + "required": [ + "site_name", + "partner_id" + ] +} \ No newline at end of file diff --git a/base44/entities/Staff.jsonc b/base44/entities/Staff.jsonc new file mode 100644 index 0000000..8717675 --- /dev/null +++ b/base44/entities/Staff.jsonc @@ -0,0 +1,259 @@ +{ + "name": "Staff", + "type": "object", + "properties": { + "employee_name": { + "type": "string", + "description": "Full name of the employee" + }, + "vendor_id": { + "type": "string", + "description": "ID of the vendor this staff belongs to" + }, + "vendor_name": { + "type": "string", + "description": "Name of the vendor company" + }, + "manager": { + "type": "string", + "description": "Manager's name" + }, + "contact_number": { + "type": "string", + "description": "Primary contact number" + }, + "phone": { + "type": "string", + "description": "Additional phone number" + }, + "email": { + "type": "string", + "format": "email", + "description": "Employee email address" + }, + "department": { + "type": "string", + "enum": [ + "Operations", + "Sales", + "HR", + "Finance", + "IT", + "Marketing", + "Customer Service", + "Logistics" + ], + "description": "Department" + }, + "hub_location": { + "type": "string" + }, + "event_location": { + "type": "string" + }, + "track": { + "type": "string" + }, + "address": { + "type": "string" + }, + "city": { + "type": "string" + }, + "position": { + "type": "string", + "description": "Primary job position/skill" + }, + "position_2": { + "type": "string", + "description": "Secondary job position/skill" + }, + "initial": { + "type": "string" + }, + "profile_type": { + "type": "string", + "enum": [ + "Skilled", + "Beginner", + "Cross-Trained" + ] + }, + "employment_type": { + "type": "string", + "enum": [ + "Full Time", + "Part Time", + "On call", + "Weekends", + "Specific Days", + "Seasonal", + "Medical Leave" + ] + }, + "english": { + "type": "string", + "enum": [ + "Fluent", + "Intermediate", + "Basic", + "None" + ] + }, + "english_required": { + "type": "boolean" + }, + "check_in": { + "type": "string", + "format": "date" + }, + "replaced_by": { + "type": "string" + }, + "ro": { + "type": "string" + }, + "mon": { + "type": "string" + }, + "schedule_days": { + "type": "string" + }, + "invoiced": { + "type": "boolean" + }, + "action": { + "type": "string" + }, + "notes": { + "type": "string" + }, + "accounting_comments": { + "type": "string" + }, + "pay_rate": { + "type": "number", + "minimum": 0, + "description": "Employee base pay rate per hour" + }, + "pay_rate_overtime": { + "type": "number", + "minimum": 0, + "description": "Overtime pay rate per hour (1.5x)" + }, + "pay_rate_double_time": { + "type": "number", + "minimum": 0, + "description": "Double-time pay rate per hour (2x)" + }, + "pay_rate_type": { + "type": "string", + "enum": [ + "Hourly", + "Salary", + "1099" + ], + "default": "Hourly" + }, + "pay_rate_effective_date": { + "type": "string", + "format": "date" + }, + "position_pay_rates": { + "type": "array", + "description": "Per-position pay rates \u2014 different rates based on the role/position worked", + "items": { + "type": "object", + "properties": { + "position": { + "type": "string", + "description": "Position/role name" + }, + "pay_rate": { + "type": "number", + "minimum": 0, + "description": "Base pay for this position" + }, + "pay_rate_overtime": { + "type": "number", + "minimum": 0 + }, + "pay_rate_double_time": { + "type": "number", + "minimum": 0 + }, + "notes": { + "type": "string" + } + } + } + }, + "rating": { + "type": "number", + "minimum": 0, + "maximum": 5 + }, + "shift_coverage_percentage": { + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "cancellation_count": { + "type": "number", + "minimum": 0 + }, + "no_show_count": { + "type": "number", + "minimum": 0 + }, + "total_shifts": { + "type": "number", + "minimum": 0 + }, + "reliability_score": { + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "background_check_status": { + "type": "string", + "enum": [ + "pending", + "cleared", + "failed", + "expired", + "not_required" + ], + "default": "pending" + }, + "background_check_date": { + "type": "string", + "format": "date" + }, + "certifications": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "issued_date": { + "type": "string", + "format": "date" + }, + "expiry_date": { + "type": "string", + "format": "date" + }, + "issuer": { + "type": "string" + } + } + } + } + }, + "required": [ + "employee_name" + ] +} \ No newline at end of file diff --git a/base44/entities/Task.jsonc b/base44/entities/Task.jsonc new file mode 100644 index 0000000..5fe4d49 --- /dev/null +++ b/base44/entities/Task.jsonc @@ -0,0 +1,124 @@ +{ + "name": "Task", + "type": "object", + "properties": { + "task_name": { + "type": "string", + "description": "Name of the task" + }, + "description": { + "type": "string", + "description": "Task description" + }, + "team_id": { + "type": "string", + "description": "ID of the team this task belongs to" + }, + "status": { + "type": "string", + "enum": [ + "pending", + "in_progress", + "on_hold", + "completed" + ], + "default": "pending", + "description": "Current status of the task" + }, + "priority": { + "type": "string", + "enum": [ + "low", + "normal", + "high" + ], + "default": "normal", + "description": "Task priority" + }, + "due_date": { + "type": "string", + "format": "date", + "description": "Due date" + }, + "progress": { + "type": "number", + "minimum": 0, + "maximum": 100, + "default": 0, + "description": "Task completion percentage" + }, + "assigned_members": { + "type": "array", + "description": "Team members assigned to this task", + "items": { + "type": "object", + "properties": { + "member_id": { + "type": "string" + }, + "member_name": { + "type": "string" + }, + "avatar_url": { + "type": "string" + } + } + } + }, + "owner_id": { + "type": "string", + "description": "Task owner ID" + }, + "owner_name": { + "type": "string", + "description": "Task owner name" + }, + "files": { + "type": "array", + "description": "Attached files", + "items": { + "type": "object", + "properties": { + "file_name": { + "type": "string" + }, + "file_url": { + "type": "string" + }, + "file_size": { + "type": "number" + }, + "uploaded_by": { + "type": "string" + }, + "uploaded_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "attachment_count": { + "type": "number", + "default": 0, + "description": "Number of attachments" + }, + "comment_count": { + "type": "number", + "default": 0, + "description": "Number of comments" + }, + "notes": { + "type": "string", + "description": "Additional notes" + }, + "order_index": { + "type": "number", + "description": "Order within the column" + } + }, + "required": [ + "task_name", + "team_id" + ] +} \ No newline at end of file diff --git a/base44/entities/TaskComment.jsonc b/base44/entities/TaskComment.jsonc new file mode 100644 index 0000000..0a7d7e6 --- /dev/null +++ b/base44/entities/TaskComment.jsonc @@ -0,0 +1,36 @@ +{ + "name": "TaskComment", + "type": "object", + "properties": { + "task_id": { + "type": "string", + "description": "ID of the task this comment belongs to" + }, + "author_id": { + "type": "string", + "description": "ID of the comment author" + }, + "author_name": { + "type": "string", + "description": "Name of the comment author" + }, + "author_avatar": { + "type": "string", + "description": "Avatar URL of the author" + }, + "comment": { + "type": "string", + "description": "Comment text" + }, + "is_system": { + "type": "boolean", + "default": false, + "description": "Is this a system message (e.g., status change)" + } + }, + "required": [ + "task_id", + "author_name", + "comment" + ] +} \ No newline at end of file diff --git a/base44/entities/Team.jsonc b/base44/entities/Team.jsonc new file mode 100644 index 0000000..3036119 --- /dev/null +++ b/base44/entities/Team.jsonc @@ -0,0 +1,146 @@ +{ + "name": "Team", + "type": "object", + "properties": { + "team_name": { + "type": "string", + "description": "Name of the team" + }, + "owner_id": { + "type": "string", + "description": "ID of the team owner (user)" + }, + "owner_name": { + "type": "string", + "description": "Name of the team owner" + }, + "owner_role": { + "type": "string", + "enum": [ + "admin", + "procurement", + "operator", + "sector", + "client", + "vendor", + "workforce" + ], + "description": "Role of the team owner" + }, + "company_logo": { + "type": "string", + "description": "URL to company logo" + }, + "full_name": { + "type": "string", + "description": "Full name of primary contact" + }, + "email": { + "type": "string", + "format": "email", + "description": "Contact email" + }, + "phone": { + "type": "string", + "description": "Contact phone" + }, + "address": { + "type": "string", + "description": "Company address" + }, + "city": { + "type": "string", + "description": "City" + }, + "zip_code": { + "type": "string", + "description": "ZIP code" + }, + "vendor_id": { + "type": "string", + "description": "Vendor ID if applicable" + }, + "departments": { + "type": "array", + "description": "List of departments available for this team", + "items": { + "type": "string" + } + }, + "total_members": { + "type": "number", + "default": 0, + "description": "Total team members" + }, + "active_members": { + "type": "number", + "default": 0, + "description": "Active team members" + }, + "total_hubs": { + "type": "number", + "default": 0, + "description": "Total hubs" + }, + "favorite_staff": { + "type": "array", + "description": "Array of favorite staff IDs", + "items": { + "type": "object", + "properties": { + "staff_id": { + "type": "string" + }, + "staff_name": { + "type": "string" + }, + "position": { + "type": "string" + }, + "added_date": { + "type": "string", + "format": "date-time" + } + } + } + }, + "blocked_staff": { + "type": "array", + "description": "Array of blocked staff IDs", + "items": { + "type": "object", + "properties": { + "staff_id": { + "type": "string" + }, + "staff_name": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "blocked_date": { + "type": "string", + "format": "date-time" + } + } + } + }, + "favorite_staff_count": { + "type": "number", + "default": 0, + "description": "Number of favorite staff" + }, + "blocked_staff_count": { + "type": "number", + "default": 0, + "description": "Number of blocked staff" + } + }, + "required": [ + "team_name", + "owner_id", + "owner_name", + "owner_role" + ] +} \ No newline at end of file diff --git a/base44/entities/TeamHub.jsonc b/base44/entities/TeamHub.jsonc new file mode 100644 index 0000000..a26949b --- /dev/null +++ b/base44/entities/TeamHub.jsonc @@ -0,0 +1,69 @@ +{ + "name": "TeamHub", + "type": "object", + "properties": { + "team_id": { + "type": "string", + "description": "ID of the team" + }, + "hub_name": { + "type": "string", + "description": "Name of the hub/location (e.g., BVG 300)" + }, + "address": { + "type": "string", + "description": "Hub address (e.g., 300 Bayview Dr, Mountain View, CA 94043)" + }, + "city": { + "type": "string", + "description": "City" + }, + "state": { + "type": "string", + "description": "State" + }, + "zip_code": { + "type": "string", + "description": "ZIP code" + }, + "manager_name": { + "type": "string", + "description": "Hub manager name" + }, + "manager_email": { + "type": "string", + "format": "email", + "description": "Hub manager email" + }, + "departments": { + "type": "array", + "description": "Departments within this hub", + "items": { + "type": "object", + "properties": { + "department_name": { + "type": "string", + "description": "Department name (e.g., Catering FOH, Catering BOH)" + }, + "cost_center": { + "type": "string", + "description": "Cost center code" + }, + "manager_name": { + "type": "string", + "description": "Department manager" + } + } + } + }, + "is_active": { + "type": "boolean", + "default": true, + "description": "Whether the hub is active" + } + }, + "required": [ + "team_id", + "hub_name" + ] +} \ No newline at end of file diff --git a/base44/entities/TeamMember.jsonc b/base44/entities/TeamMember.jsonc new file mode 100644 index 0000000..16d4138 --- /dev/null +++ b/base44/entities/TeamMember.jsonc @@ -0,0 +1,66 @@ +{ + "name": "TeamMember", + "type": "object", + "properties": { + "team_id": { + "type": "string", + "description": "ID of the team this member belongs to" + }, + "member_name": { + "type": "string", + "description": "Name of the team member" + }, + "email": { + "type": "string", + "format": "email", + "description": "Member email" + }, + "phone": { + "type": "string", + "description": "Member phone" + }, + "title": { + "type": "string", + "description": "Job title" + }, + "role": { + "type": "string", + "enum": [ + "admin", + "manager", + "member", + "viewer" + ], + "description": "Role in the team" + }, + "department": { + "type": "string", + "description": "Department" + }, + "hub": { + "type": "string", + "description": "Assigned hub" + }, + "is_active": { + "type": "boolean", + "default": true, + "description": "Whether the member is active" + }, + "permissions": { + "type": "array", + "description": "Array of permissions", + "items": { + "type": "string" + } + }, + "avatar_url": { + "type": "string", + "description": "URL to member avatar" + } + }, + "required": [ + "team_id", + "member_name", + "email" + ] +} \ No newline at end of file diff --git a/base44/entities/TeamMemberInvite.jsonc b/base44/entities/TeamMemberInvite.jsonc new file mode 100644 index 0000000..4d7046c --- /dev/null +++ b/base44/entities/TeamMemberInvite.jsonc @@ -0,0 +1,72 @@ +{ + "name": "TeamMemberInvite", + "type": "object", + "properties": { + "team_id": { + "type": "string", + "description": "ID of the team" + }, + "team_name": { + "type": "string", + "description": "Name of the team" + }, + "invite_code": { + "type": "string", + "description": "Unique invite code" + }, + "email": { + "type": "string", + "format": "email", + "description": "Email of invited person" + }, + "full_name": { + "type": "string", + "description": "Name of invited person" + }, + "role": { + "type": "string", + "enum": [ + "admin", + "manager", + "member", + "viewer" + ], + "description": "Proposed role" + }, + "invited_by": { + "type": "string", + "description": "Who sent the invite" + }, + "invite_status": { + "type": "string", + "enum": [ + "pending", + "accepted", + "expired", + "cancelled" + ], + "default": "pending", + "description": "Invitation status" + }, + "invited_date": { + "type": "string", + "format": "date-time", + "description": "When invite was sent" + }, + "accepted_date": { + "type": "string", + "format": "date-time", + "description": "When invite was accepted" + }, + "expires_at": { + "type": "string", + "format": "date-time", + "description": "When invite expires" + } + }, + "required": [ + "team_id", + "email", + "invited_by" + ] +} \ No newline at end of file diff --git a/base44/entities/Training.jsonc b/base44/entities/Training.jsonc new file mode 100644 index 0000000..3bcf9c1 --- /dev/null +++ b/base44/entities/Training.jsonc @@ -0,0 +1,149 @@ +{ + "name": "Training", + "type": "object", + "properties": { + "training_id": { + "type": "string", + "description": "Training record ID" + }, + "training_name": { + "type": "string", + "description": "Name of the training program" + }, + "training_type": { + "type": "string", + "enum": [ + "food_safety", + "alcohol_service", + "customer_service", + "safety", + "onboarding", + "culinary_skills", + "equipment_operation", + "compliance", + "leadership", + "other" + ], + "description": "Type of training" + }, + "description": { + "type": "string" + }, + "workforce_id": { + "type": "string", + "description": "Worker enrolled in this training" + }, + "workforce_name": { + "type": "string" + }, + "staff_id": { + "type": "string", + "description": "Staff record ID (if different from workforce)" + }, + "vendor_id": { + "type": "string", + "description": "Vendor sponsoring this training" + }, + "vendor_name": { + "type": "string" + }, + "client_id": { + "type": "string", + "description": "Client-specific training (if applicable)" + }, + "client_name": { + "type": "string" + }, + "instructor_name": { + "type": "string", + "description": "Instructor or training provider" + }, + "training_format": { + "type": "string", + "enum": [ + "in_person", + "online", + "hybrid", + "on_the_job", + "video" + ], + "default": "online" + }, + "duration_hours": { + "type": "number", + "minimum": 0, + "description": "Total training duration in hours" + }, + "enrollment_date": { + "type": "string", + "format": "date", + "description": "When worker was enrolled" + }, + "start_date": { + "type": "string", + "format": "date", + "description": "Training start date" + }, + "completion_date": { + "type": "string", + "format": "date", + "description": "Date training was completed" + }, + "expiry_date": { + "type": "string", + "format": "date", + "description": "When this training expires and needs renewal" + }, + "status": { + "type": "string", + "enum": [ + "not_started", + "enrolled", + "in_progress", + "completed", + "failed", + "expired", + "cancelled" + ], + "default": "not_started", + "description": "Training status" + }, + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "description": "Score achieved (if graded)" + }, + "passing_score": { + "type": "number", + "default": 70, + "description": "Minimum passing score" + }, + "certification_earned": { + "type": "string", + "description": "Name of certification earned upon completion" + }, + "certification_id": { + "type": "string", + "description": "Reference to Certification entity if one was issued" + }, + "cost": { + "type": "number", + "minimum": 0, + "description": "Cost of this training" + }, + "billable_to_client": { + "type": "boolean", + "default": false + }, + "notes": { + "type": "string" + } + }, + "required": [ + "training_name", + "training_type", + "workforce_id", + "status" + ] +} \ No newline at end of file diff --git a/base44/entities/Transportation.jsonc b/base44/entities/Transportation.jsonc new file mode 100644 index 0000000..6c46c86 --- /dev/null +++ b/base44/entities/Transportation.jsonc @@ -0,0 +1,139 @@ +{ + "name": "Transportation", + "type": "object", + "properties": { + "transport_id": { + "type": "string", + "description": "Transport record ID" + }, + "transport_type": { + "type": "string", + "enum": [ + "shuttle", + "van", + "carpool", + "bus", + "public_transit", + "rideshare", + "personal_vehicle", + "walking" + ], + "description": "Mode of transportation" + }, + "shift_id": { + "type": "string", + "description": "Shift this transport serves" + }, + "event_id": { + "type": "string", + "description": "Event this transport serves" + }, + "workforce_id": { + "type": "string", + "description": "Worker being transported (if individual)" + }, + "workforce_name": { + "type": "string" + }, + "vendor_id": { + "type": "string", + "description": "Vendor providing/arranging transport" + }, + "vendor_name": { + "type": "string" + }, + "pickup_location": { + "type": "string", + "description": "Pickup address or landmark" + }, + "dropoff_location": { + "type": "string", + "description": "Dropoff location (typically the site/client location)" + }, + "site_id": { + "type": "string", + "description": "Destination Site ID" + }, + "client_id": { + "type": "string", + "description": "Client/Business ID at the destination" + }, + "client_name": { + "type": "string" + }, + "scheduled_pickup_time": { + "type": "string", + "format": "date-time", + "description": "Scheduled pickup time" + }, + "scheduled_dropoff_time": { + "type": "string", + "format": "date-time", + "description": "Scheduled dropoff time" + }, + "actual_pickup_time": { + "type": "string", + "format": "date-time" + }, + "actual_dropoff_time": { + "type": "string", + "format": "date-time" + }, + "driver_name": { + "type": "string", + "description": "Driver name (if applicable)" + }, + "driver_phone": { + "type": "string" + }, + "vehicle_identifier": { + "type": "string", + "description": "License plate or vehicle ID" + }, + "capacity": { + "type": "number", + "description": "Number of workers this transport can carry" + }, + "passenger_count": { + "type": "number", + "default": 0, + "description": "Actual number of workers transported" + }, + "cost_per_trip": { + "type": "number", + "minimum": 0, + "description": "Cost per trip" + }, + "billable_to_client": { + "type": "boolean", + "default": false, + "description": "Whether transport cost is billed to client" + }, + "status": { + "type": "string", + "enum": [ + "scheduled", + "in_progress", + "completed", + "cancelled", + "no_show", + "delayed" + ], + "default": "scheduled", + "description": "Transport status" + }, + "distance_miles": { + "type": "number", + "description": "Distance in miles" + }, + "notes": { + "type": "string" + } + }, + "required": [ + "transport_type", + "pickup_location", + "dropoff_location", + "status" + ] +} \ No newline at end of file diff --git a/base44/entities/User.jsonc b/base44/entities/User.jsonc new file mode 100644 index 0000000..72d5675 --- /dev/null +++ b/base44/entities/User.jsonc @@ -0,0 +1,185 @@ +{ + "name": "User", + "type": "object", + "properties": { + "full_name": { + "type": "string", + "description": "Full name of the user" + }, + "user_role": { + "type": "string", + "enum": [ + "admin", + "procurement", + "operator", + "sector", + "client", + "vendor", + "workforce" + ], + "description": "User's role in the system" + }, + "company_name": { + "type": "string", + "description": "Company or organization name" + }, + "profile_picture": { + "type": "string", + "description": "URL to profile picture" + }, + "phone": { + "type": "string", + "description": "Phone number" + }, + "address": { + "type": "string", + "description": "Address" + }, + "preferred_vendor_id": { + "type": "string", + "description": "ID of the client's preferred/default vendor" + }, + "preferred_vendor_name": { + "type": "string", + "description": "Name of the client's preferred vendor" + }, + "backup_vendor_ids": { + "type": "array", + "description": "List of backup vendor IDs", + "items": { + "type": "string" + } + }, + "dashboard_layout": { + "type": "object", + "description": "User's customized dashboard layout preferences (legacy, kept for backward compatibility)", + "properties": { + "widgets": { + "type": "array", + "description": "Ordered list of visible widgets", + "items": { + "type": "string" + } + }, + "hidden_widgets": { + "type": "array", + "description": "List of hidden widgets", + "items": { + "type": "string" + } + }, + "layout_version": { + "type": "string", + "description": "Layout version for migration" + } + } + }, + "dashboard_layout_client": { + "type": "object", + "description": "Client dashboard layout", + "properties": { + "widgets": { + "type": "array", + "items": { + "type": "string" + } + }, + "hidden_widgets": { + "type": "array", + "items": { + "type": "string" + } + }, + "layout_version": { + "type": "string" + } + } + }, + "dashboard_layout_vendor": { + "type": "object", + "description": "Vendor dashboard layout", + "properties": { + "widgets": { + "type": "array", + "items": { + "type": "string" + } + }, + "hidden_widgets": { + "type": "array", + "items": { + "type": "string" + } + }, + "layout_version": { + "type": "string" + } + } + }, + "dashboard_layout_operator": { + "type": "object", + "description": "Operator dashboard layout", + "properties": { + "widgets": { + "type": "array", + "items": { + "type": "string" + } + }, + "hidden_widgets": { + "type": "array", + "items": { + "type": "string" + } + }, + "layout_version": { + "type": "string" + } + } + }, + "dashboard_layout_workforce": { + "type": "object", + "description": "Workforce dashboard layout", + "properties": { + "widgets": { + "type": "array", + "items": { + "type": "string" + } + }, + "hidden_widgets": { + "type": "array", + "items": { + "type": "string" + } + }, + "layout_version": { + "type": "string" + } + } + }, + "preferences": { + "type": "object", + "description": "User preferences and settings", + "properties": { + "theme": { + "type": "string", + "enum": [ + "light", + "dark" + ], + "default": "light" + }, + "notifications_enabled": { + "type": "boolean", + "default": true + }, + "email_notifications": { + "type": "boolean", + "default": true + } + } + } + }, + "required": [] +} \ No newline at end of file diff --git a/base44/entities/Vendor.jsonc b/base44/entities/Vendor.jsonc new file mode 100644 index 0000000..9f09aba --- /dev/null +++ b/base44/entities/Vendor.jsonc @@ -0,0 +1,217 @@ +{ + "name": "Vendor", + "type": "object", + "properties": { + "vendor_number": { + "type": "string", + "description": "Vendor Number format VN-#### (auto-generated)", + "pattern": "^VN-[0-9]{4}$" + }, + "legal_name": { + "type": "string", + "description": "Legal business name" + }, + "doing_business_as": { + "type": "string", + "description": "DBA / Trade name" + }, + "region": { + "type": "string", + "enum": [ + "National", + "Bay Area", + "Southern California", + "Northern California", + "West", + "East", + "Midwest", + "South" + ], + "description": "Geographic region vendor operates in" + }, + "state": { + "type": "string", + "description": "Primary state (or 'Multiple' for multi-state)" + }, + "city": { + "type": "string", + "description": "Primary city" + }, + "service_specialty": { + "type": "string", + "description": "Service specialty (e.g., Event Staffing, Full Service Events, On-Demand Gig Platform)" + }, + "workforce_count": { + "type": "number", + "description": "Total workforce/staff count available" + }, + "platform_type": { + "type": "string", + "enum": [ + "Full Platform", + "Building platform (KROW)", + "Partial Tech", + "Traditional" + ], + "description": "Technology/platform integration level" + }, + "tax_id": { + "type": "string", + "description": "Federal Tax ID / EIN" + }, + "business_type": { + "type": "string", + "enum": [ + "Corporation", + "LLC", + "Partnership", + "Sole Proprietorship" + ], + "description": "Business entity type" + }, + "primary_contact_name": { + "type": "string", + "description": "Primary contact person" + }, + "primary_contact_email": { + "type": "string", + "format": "email", + "description": "Primary contact email" + }, + "primary_contact_phone": { + "type": "string", + "description": "Primary contact phone" + }, + "billing_address": { + "type": "string", + "description": "Billing address" + }, + "service_address": { + "type": "string", + "description": "Service/office address" + }, + "coverage_regions": { + "type": "array", + "description": "Geographic regions vendor can service", + "items": { + "type": "string" + } + }, + "eligible_roles": { + "type": "array", + "description": "Roles/positions vendor can provide", + "items": { + "type": "string" + } + }, + "insurance_certificate": { + "type": "string", + "description": "URL to insurance certificate" + }, + "insurance_expiry": { + "type": "string", + "format": "date", + "description": "Insurance expiration date" + }, + "w9_document": { + "type": "string", + "description": "URL to W9 form" + }, + "coi_document": { + "type": "string", + "description": "URL to Certificate of Insurance" + }, + "compliance_package_id": { + "type": "string", + "description": "Reference to compliance package" + }, + "performance_scorecard_id": { + "type": "string", + "description": "Reference to performance scorecard" + }, + "performance_requirements": { + "type": "array", + "description": "Customized KPIs and service standards the vendor must meet", + "items": { + "type": "object", + "properties": { + "metric": { + "type": "string" + }, + "target": { + "type": "string" + }, + "operator": { + "type": "string" + }, + "unit": { + "type": "string" + }, + "enabled": { + "type": "boolean", + "default": true + } + } + } + }, + "compliance_requirements": { + "type": "array", + "description": "Customized compliance and attestation requirements the vendor must acknowledge", + "items": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "required": { + "type": "boolean", + "default": true + } + } + } + }, + "vendor_fee_percentage": { + "type": "number", + "minimum": 0, + "maximum": 100, + "description": "Vendor admin fee percentage set by procurement" + }, + "approval_status": { + "type": "string", + "enum": [ + "pending", + "approved", + "suspended", + "terminated" + ], + "default": "pending", + "description": "Vendor approval status" + }, + "approved_date": { + "type": "string", + "format": "date", + "description": "Date vendor was approved" + }, + "approved_by": { + "type": "string", + "description": "User who approved vendor" + }, + "is_active": { + "type": "boolean", + "default": true, + "description": "Is vendor currently active" + }, + "notes": { + "type": "string", + "description": "Internal notes about vendor" + } + }, + "required": [ + "legal_name", + "vendor_number", + "primary_contact_email" + ] +} \ No newline at end of file diff --git a/base44/entities/VendorDefaultSettings.jsonc b/base44/entities/VendorDefaultSettings.jsonc new file mode 100644 index 0000000..81b61b4 --- /dev/null +++ b/base44/entities/VendorDefaultSettings.jsonc @@ -0,0 +1,31 @@ +{ + "name": "VendorDefaultSettings", + "type": "object", + "properties": { + "vendor_name": { + "type": "string", + "description": "Name of the vendor" + }, + "default_markup_percentage": { + "type": "number", + "minimum": 0, + "maximum": 100, + "description": "Default markup percentage for this vendor" + }, + "default_vendor_fee_percentage": { + "type": "number", + "minimum": 0, + "maximum": 100, + "description": "Default vendor fee percentage for this vendor" + }, + "notes": { + "type": "string", + "description": "Additional notes about vendor defaults" + } + }, + "required": [ + "vendor_name", + "default_markup_percentage", + "default_vendor_fee_percentage" + ] +} \ No newline at end of file diff --git a/base44/entities/VendorDocumentReview.jsonc b/base44/entities/VendorDocumentReview.jsonc new file mode 100644 index 0000000..49b12d4 --- /dev/null +++ b/base44/entities/VendorDocumentReview.jsonc @@ -0,0 +1,147 @@ +{ + "name": "VendorDocumentReview", + "type": "object", + "properties": { + "vendor_id": { + "type": "string", + "description": "Vendor ID" + }, + "vendor_name": { + "type": "string", + "description": "Vendor name" + }, + "document_type": { + "type": "string", + "enum": [ + "Contract", + "NDA", + "W9", + "COI", + "Insurance", + "Service Agreement", + "Other" + ], + "description": "Type of document being reviewed" + }, + "document_url": { + "type": "string", + "description": "URL to the document PDF" + }, + "document_name": { + "type": "string", + "description": "Name of the document" + }, + "review_notes": { + "type": "string", + "description": "Notes taken by vendor during review" + }, + "annotations": { + "type": "array", + "description": "Document annotations (highlights, comments, drawings)", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "highlight", + "comment", + "question", + "emoji", + "signature" + ] + }, + "page_number": { + "type": "number" + }, + "selected_text": { + "type": "string" + }, + "comment": { + "type": "string" + }, + "emoji": { + "type": "string" + }, + "color": { + "type": "string" + }, + "position": { + "type": "object", + "properties": { + "x": { + "type": "number" + }, + "y": { + "type": "number" + } + } + }, + "created_date": { + "type": "string", + "format": "date-time" + } + } + } + }, + "questions": { + "type": "array", + "description": "Questions or concerns about the document", + "items": { + "type": "object", + "properties": { + "question": { + "type": "string" + }, + "page_number": { + "type": "number" + }, + "status": { + "type": "string", + "enum": [ + "open", + "answered", + "resolved" + ] + }, + "answer": { + "type": "string" + } + } + } + }, + "reviewed": { + "type": "boolean", + "default": false, + "description": "Has vendor reviewed this document" + }, + "reviewed_date": { + "type": "string", + "format": "date-time", + "description": "When vendor marked as reviewed" + }, + "acknowledged": { + "type": "boolean", + "default": false, + "description": "Has vendor acknowledged/accepted the document" + }, + "acknowledged_date": { + "type": "string", + "format": "date-time", + "description": "When vendor acknowledged the document" + }, + "time_spent_minutes": { + "type": "number", + "description": "Total time spent reviewing (in minutes)" + } + }, + "required": [ + "vendor_name", + "document_type", + "document_url", + "document_name" + ] +} \ No newline at end of file diff --git a/base44/entities/VendorInvite.jsonc b/base44/entities/VendorInvite.jsonc new file mode 100644 index 0000000..c24fad9 --- /dev/null +++ b/base44/entities/VendorInvite.jsonc @@ -0,0 +1,112 @@ +{ + "name": "VendorInvite", + "type": "object", + "properties": { + "invite_code": { + "type": "string", + "description": "Unique invite code (e.g., INV-XXXX)" + }, + "company_name": { + "type": "string", + "description": "Vendor company name" + }, + "primary_contact_name": { + "type": "string", + "description": "Point of contact name" + }, + "primary_contact_email": { + "type": "string", + "format": "email", + "description": "Point of contact email" + }, + "vendor_admin_fee": { + "type": "number", + "minimum": 0, + "maximum": 100, + "description": "Vendor admin fee percentage set by procurement" + }, + "performance_requirements": { + "type": "array", + "description": "Customized KPIs and service standards the vendor must meet", + "items": { + "type": "object", + "properties": { + "metric": { + "type": "string" + }, + "target": { + "type": "string" + }, + "operator": { + "type": "string" + }, + "unit": { + "type": "string" + }, + "enabled": { + "type": "boolean", + "default": true + } + } + } + }, + "compliance_requirements": { + "type": "array", + "description": "Customized compliance and attestation requirements the vendor must acknowledge", + "items": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "required": { + "type": "boolean", + "default": true + } + } + } + }, + "invited_by": { + "type": "string", + "description": "Email of procurement admin who sent invite" + }, + "invite_status": { + "type": "string", + "enum": [ + "pending", + "accepted", + "completed", + "expired" + ], + "default": "pending", + "description": "Status of the invite" + }, + "invite_sent_date": { + "type": "string", + "format": "date-time", + "description": "When the invite was sent" + }, + "invite_accepted_date": { + "type": "string", + "format": "date-time", + "description": "When vendor accepted/started onboarding" + }, + "vendor_id": { + "type": "string", + "description": "Vendor ID once they complete onboarding" + }, + "notes": { + "type": "string", + "description": "Internal notes about this invite" + } + }, + "required": [ + "company_name", + "primary_contact_email", + "vendor_admin_fee", + "invited_by" + ] +} \ No newline at end of file diff --git a/base44/entities/VendorNetworkApproval.jsonc b/base44/entities/VendorNetworkApproval.jsonc new file mode 100644 index 0000000..1754560 --- /dev/null +++ b/base44/entities/VendorNetworkApproval.jsonc @@ -0,0 +1,119 @@ +{ + "name": "VendorNetworkApproval", + "type": "object", + "properties": { + "vendor_id": { + "type": "string", + "description": "ID of the approved vendor" + }, + "vendor_name": { + "type": "string", + "description": "Name of the vendor" + }, + "enterprise_network": { + "type": "string", + "enum": [ + "Compass", + "Aramark", + "Sodexo", + "Foodbuy", + "Bon App\u00e9tit", + "Eurest" + ], + "description": "Enterprise network vendor is approved for" + }, + "approval_status": { + "type": "string", + "enum": [ + "pending", + "approved", + "rejected", + "suspended" + ], + "default": "pending", + "description": "Current approval status" + }, + "approved_by": { + "type": "string", + "description": "Procurement manager who approved" + }, + "approved_date": { + "type": "string", + "format": "date", + "description": "Date of approval" + }, + "rate_book_id": { + "type": "string", + "description": "Associated rate book ID for this network" + }, + "regions_approved": { + "type": "array", + "description": "Geographic regions vendor is approved to serve", + "items": { + "type": "string" + } + }, + "categories_approved": { + "type": "array", + "description": "Service categories vendor is approved for", + "items": { + "type": "string" + } + }, + "compliance_documents": { + "type": "array", + "description": "Required compliance documents", + "items": { + "type": "object", + "properties": { + "document_type": { + "type": "string" + }, + "document_url": { + "type": "string" + }, + "verified": { + "type": "boolean" + } + } + } + }, + "restrictions": { + "type": "object", + "description": "Any restrictions on vendor's approved status", + "properties": { + "max_order_size": { + "type": "number" + }, + "max_concurrent_events": { + "type": "number" + }, + "excluded_clients": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "valid_from": { + "type": "string", + "format": "date", + "description": "Approval start date" + }, + "valid_until": { + "type": "string", + "format": "date", + "description": "Approval expiration date" + }, + "notes": { + "type": "string", + "description": "Additional notes about approval" + } + }, + "required": [ + "vendor_name", + "enterprise_network", + "approval_status" + ] +} \ No newline at end of file diff --git a/base44/entities/VendorPartnerLink.jsonc b/base44/entities/VendorPartnerLink.jsonc new file mode 100644 index 0000000..ebc5275 --- /dev/null +++ b/base44/entities/VendorPartnerLink.jsonc @@ -0,0 +1,40 @@ +{ + "name": "VendorPartnerLink", + "type": "object", + "properties": { + "vendor_id": { + "type": "string", + "description": "Vendor ID" + }, + "vendor_name": { + "type": "string", + "description": "Vendor name" + }, + "partner_id": { + "type": "string", + "description": "Partner ID" + }, + "partner_name": { + "type": "string", + "description": "Partner name" + }, + "assigned_by": { + "type": "string", + "description": "Who assigned this link" + }, + "assigned_date": { + "type": "string", + "format": "date", + "description": "When the link was created" + }, + "is_active": { + "type": "boolean", + "default": true, + "description": "Is this link active" + } + }, + "required": [ + "vendor_id", + "partner_id" + ] +} \ No newline at end of file diff --git a/base44/entities/VendorRate.jsonc b/base44/entities/VendorRate.jsonc new file mode 100644 index 0000000..7be82f3 --- /dev/null +++ b/base44/entities/VendorRate.jsonc @@ -0,0 +1,248 @@ +{ + "name": "VendorRate", + "type": "object", + "properties": { + "vendor_id": { + "type": "string", + "description": "ID of the vendor this rate belongs to" + }, + "vendor_name": { + "type": "string", + "description": "Name of the vendor" + }, + "rate_book_name": { + "type": "string", + "description": "Name of the rate book (e.g., 'Default', 'Compass Approved', 'Google Caf\u00e9 7')" + }, + "rate_book_type": { + "type": "string", + "enum": [ + "default", + "enterprise_network", + "client_specific" + ], + "description": "Type of rate book: default (vendor's own rates), enterprise_network (Compass/Aramark approved), or client_specific (negotiated)" + }, + "enterprise_network": { + "type": "string", + "enum": [ + "Compass", + "Aramark", + "Sodexo", + "Foodbuy", + "Bon App\u00e9tit", + "Eurest", + "None" + ], + "description": "Enterprise network this rate book belongs to (if applicable)" + }, + "is_approved_rate": { + "type": "boolean", + "default": false, + "description": "Whether this is an approved procurement rate (locked for vendors)" + }, + "approved_by_procurement": { + "type": "string", + "description": "Name of procurement manager who approved these rates" + }, + "approved_date": { + "type": "string", + "format": "date", + "description": "Date rates were approved" + }, + "client_id": { + "type": "string", + "description": "Specific client ID if this is a client-specific rate book" + }, + "client_name": { + "type": "string", + "description": "Specific client name if this is a client-specific rate book" + }, + "category": { + "type": "string", + "enum": [ + "Kitchen and Culinary", + "Concessions", + "Facilities", + "Bartending", + "Security", + "Event Staff", + "Management", + "Technical", + "Other" + ], + "description": "Service category" + }, + "role_name": { + "type": "string", + "description": "Name of the role/position" + }, + "region": { + "type": "string", + "description": "Geographic region (e.g., 'Bay Area', 'LA', 'National')" + }, + "employee_wage": { + "type": "number", + "minimum": 0, + "description": "Employee base wage per hour (must be >= minimum wage)" + }, + "overtime_rate": { + "type": "number", + "minimum": 0, + "description": "Overtime rate (typically 1.5x base wage)" + }, + "double_time_rate": { + "type": "number", + "minimum": 0, + "description": "Double-time rate (typically 2x base wage)" + }, + "travel_rate": { + "type": "number", + "minimum": 0, + "description": "Travel time rate per hour (if applicable)" + }, + "markup_percentage": { + "type": "number", + "minimum": 0, + "maximum": 100, + "description": "Markup percentage on employee wage" + }, + "vendor_fee_percentage": { + "type": "number", + "minimum": 0, + "maximum": 100, + "description": "Vendor fee as percentage on (wage + markup)" + }, + "client_rate": { + "type": "number", + "minimum": 0, + "description": "Final rate charged to client per hour" + }, + "approved_cap_rate": { + "type": "number", + "description": "Maximum rate approved by enterprise network (vendors cannot exceed this)" + }, + "discount_from_approved": { + "type": "number", + "description": "Dollar amount discount from approved cap rate (if vendor is offering lower rate)" + }, + "discount_percentage": { + "type": "number", + "description": "Percentage discount from approved cap rate" + }, + "is_discounted": { + "type": "boolean", + "default": false, + "description": "Whether vendor is offering a discount below approved rate" + }, + "negotiation_allowed": { + "type": "boolean", + "default": true, + "description": "Whether clients can request rate negotiations" + }, + "is_active": { + "type": "boolean", + "default": true, + "description": "Whether this rate is currently active" + }, + "is_editable_by_vendor": { + "type": "boolean", + "default": true, + "description": "Whether vendor can edit this rate (false for locked procurement rates)" + }, + "minimum_wage_compliance": { + "type": "boolean", + "description": "Whether this rate meets minimum wage requirements" + }, + "market_comparison": { + "type": "object", + "description": "Market comparison data", + "properties": { + "market_average": { + "type": "number", + "description": "Market average for this role" + }, + "market_position": { + "type": "string", + "enum": [ + "below_market", + "at_market", + "above_market", + "significantly_above" + ], + "description": "How this rate compares to market" + }, + "competitiveness_score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "description": "Competitiveness score (0-100)" + }, + "market_warning": { + "type": "string", + "description": "Warning if rate is significantly above or below market" + } + } + }, + "compliance": { + "type": "object", + "description": "Compliance information", + "properties": { + "csta_compliant": { + "type": "boolean", + "default": false, + "description": "California Staffing Agency compliance" + }, + "minimum_wage_verified": { + "type": "boolean", + "default": false, + "description": "Minimum wage verification status" + }, + "compliance_verified_date": { + "type": "string", + "format": "date", + "description": "Date compliance was last verified" + } + } + }, + "shift_type": { + "type": "string", + "enum": [ + "regular", + "night", + "weekend", + "holiday", + "premium" + ], + "default": "regular", + "description": "Type of shift this rate applies to" + }, + "valid_from": { + "type": "string", + "format": "date", + "description": "Date this rate becomes valid" + }, + "valid_until": { + "type": "string", + "format": "date", + "description": "Date this rate expires" + }, + "notes": { + "type": "string", + "description": "Additional notes about this rate" + }, + "internal_notes": { + "type": "string", + "description": "Internal vendor notes (not visible to clients)" + } + }, + "required": [ + "vendor_name", + "rate_book_name", + "rate_book_type", + "category", + "role_name", + "employee_wage", + "client_rate" + ] +} \ No newline at end of file diff --git a/base44/entities/VendorRateBook.jsonc b/base44/entities/VendorRateBook.jsonc new file mode 100644 index 0000000..8098b81 --- /dev/null +++ b/base44/entities/VendorRateBook.jsonc @@ -0,0 +1,113 @@ +{ + "name": "VendorRateBook", + "type": "object", + "properties": { + "vendor_id": { + "type": "string", + "description": "ID of the vendor who owns this rate book" + }, + "vendor_name": { + "type": "string", + "description": "Name of the vendor" + }, + "rate_book_name": { + "type": "string", + "description": "Name of the rate book (e.g., 'Default Rates', 'Compass Network', 'Google Special')" + }, + "rate_book_type": { + "type": "string", + "enum": [ + "default", + "enterprise_network", + "client_specific", + "premium", + "seasonal" + ], + "description": "Type of rate book" + }, + "enterprise_network": { + "type": "string", + "enum": [ + "Compass", + "Aramark", + "Sodexo", + "Foodbuy", + "Bon App\u00e9tit", + "Eurest", + "None" + ], + "description": "Enterprise network if applicable" + }, + "is_approved_by_procurement": { + "type": "boolean", + "default": false, + "description": "Whether this rate book is approved by procurement" + }, + "approved_by": { + "type": "string", + "description": "Name of person who approved this rate book" + }, + "approved_date": { + "type": "string", + "format": "date", + "description": "Date of approval" + }, + "is_locked": { + "type": "boolean", + "default": false, + "description": "Whether rates in this book are locked (cannot be edited by vendor)" + }, + "is_active": { + "type": "boolean", + "default": true, + "description": "Whether this rate book is currently active" + }, + "client_assignments": { + "type": "array", + "description": "Clients assigned to use this rate book", + "items": { + "type": "object", + "properties": { + "client_id": { + "type": "string" + }, + "client_name": { + "type": "string" + }, + "assigned_date": { + "type": "string", + "format": "date-time" + } + } + } + }, + "valid_from": { + "type": "string", + "format": "date", + "description": "Start date for rate book validity" + }, + "valid_until": { + "type": "string", + "format": "date", + "description": "End date for rate book validity" + }, + "description": { + "type": "string", + "description": "Description of this rate book" + }, + "total_roles": { + "type": "number", + "default": 0, + "description": "Total number of roles in this rate book" + }, + "notes": { + "type": "string", + "description": "Additional notes" + } + }, + "required": [ + "vendor_name", + "rate_book_name", + "rate_book_type" + ] +} \ No newline at end of file diff --git a/base44/entities/VendorSectorLink.jsonc b/base44/entities/VendorSectorLink.jsonc new file mode 100644 index 0000000..16bf651 --- /dev/null +++ b/base44/entities/VendorSectorLink.jsonc @@ -0,0 +1,40 @@ +{ + "name": "VendorSectorLink", + "type": "object", + "properties": { + "vendor_id": { + "type": "string", + "description": "Vendor ID" + }, + "vendor_name": { + "type": "string", + "description": "Vendor name" + }, + "sector_id": { + "type": "string", + "description": "Sector ID" + }, + "sector_name": { + "type": "string", + "description": "Sector name" + }, + "assigned_by": { + "type": "string", + "description": "Who assigned this link" + }, + "assigned_date": { + "type": "string", + "format": "date", + "description": "When the link was created" + }, + "is_active": { + "type": "boolean", + "default": true, + "description": "Is this link active" + } + }, + "required": [ + "vendor_id", + "sector_id" + ] +} \ No newline at end of file diff --git a/base44/entities/WorkerAvailability.jsonc b/base44/entities/WorkerAvailability.jsonc new file mode 100644 index 0000000..101c198 --- /dev/null +++ b/base44/entities/WorkerAvailability.jsonc @@ -0,0 +1,129 @@ +{ + "name": "WorkerAvailability", + "type": "object", + "properties": { + "staff_id": { + "type": "string", + "description": "Reference to Staff entity" + }, + "staff_name": { + "type": "string", + "description": "Staff member name" + }, + "availability_status": { + "type": "string", + "enum": [ + "CONFIRMED_AVAILABLE", + "UNKNOWN", + "BLOCKED" + ], + "default": "UNKNOWN", + "description": "Current availability status" + }, + "predicted_availability_score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "default": 50, + "description": "ML/rules-based prediction of availability (0-100)" + }, + "need_work_index": { + "type": "number", + "minimum": 0, + "maximum": 100, + "default": 0, + "description": "How much worker needs hours (0-100)" + }, + "scheduled_hours_this_period": { + "type": "number", + "default": 0, + "description": "Hours scheduled in current period" + }, + "desired_hours_this_period": { + "type": "number", + "default": 40, + "description": "Hours worker wants in current period" + }, + "last_shift_date": { + "type": "string", + "format": "date", + "description": "Date of last completed shift" + }, + "acceptance_rate": { + "type": "number", + "minimum": 0, + "maximum": 100, + "default": 0, + "description": "Historical acceptance rate percentage" + }, + "utilization_percentage": { + "type": "number", + "minimum": 0, + "maximum": 100, + "default": 0, + "description": "Scheduled hours / desired hours * 100" + }, + "days_since_last_shift": { + "type": "number", + "default": 0, + "description": "Days since last shift" + }, + "total_shifts_this_period": { + "type": "number", + "default": 0, + "description": "Number of shifts in current period" + }, + "available_dates": { + "type": "array", + "description": "Dates worker is confirmed available", + "items": { + "type": "string", + "format": "date" + } + }, + "blocked_dates": { + "type": "array", + "description": "Dates worker is blocked/unavailable", + "items": { + "type": "string", + "format": "date" + } + }, + "preferences": { + "type": "object", + "description": "Worker preferences", + "properties": { + "preferred_days": { + "type": "array", + "items": { + "type": "string" + } + }, + "preferred_shift_types": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "Morning", + "Day", + "Evening", + "Night", + "Overnight" + ] + } + }, + "max_commute_miles": { + "type": "number" + }, + "wants_more_hours": { + "type": "boolean", + "default": false + } + } + } + }, + "required": [ + "staff_id", + "staff_name" + ] +} \ No newline at end of file diff --git a/base44/entities/WorkerReputationProfile.jsonc b/base44/entities/WorkerReputationProfile.jsonc new file mode 100644 index 0000000..a9b91de --- /dev/null +++ b/base44/entities/WorkerReputationProfile.jsonc @@ -0,0 +1,99 @@ +{ + "name": "WorkerReputationProfile", + "type": "object", + "properties": { + "worker_id": { + "type": "string", + "description": "Linked workforce member ID" + }, + "worker_name": { + "type": "string", + "description": "Full name" + }, + "total_shifts": { + "type": "number", + "default": 0, + "description": "Total verified completed shifts across all agencies" + }, + "no_shows": { + "type": "number", + "default": 0 + }, + "late_arrivals": { + "type": "number", + "default": 0 + }, + "last_minute_cancels": { + "type": "number", + "default": 0 + }, + "attendance_rate": { + "type": "number", + "minimum": 0, + "maximum": 100, + "description": "Attendance percentage (0-100)" + }, + "avg_client_rating": { + "type": "number", + "minimum": 0, + "maximum": 5 + }, + "avg_supervisor_rating": { + "type": "number", + "minimum": 0, + "maximum": 5 + }, + "verified_skills": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Verified skill/role tags" + }, + "verified_certifications": { + "type": "array", + "items": { + "type": "string" + } + }, + "contributing_agencies": { + "type": "number", + "default": 0, + "description": "Number of agencies that have contributed data" + }, + "trust_score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "description": "Computed KROW trust score (0-100)" + }, + "trust_tier": { + "type": "string", + "enum": [ + "Bronze", + "Silver", + "Gold", + "Platinum" + ], + "default": "Bronze" + }, + "opted_in": { + "type": "boolean", + "default": true, + "description": "Worker has opted into the reputation network" + }, + "profile_visibility": { + "type": "string", + "enum": [ + "public", + "network_only", + "private" + ], + "default": "network_only" + } + }, + "required": [ + "worker_id", + "worker_name" + ] +} \ No newline at end of file diff --git a/base44/entities/Workforce.jsonc b/base44/entities/Workforce.jsonc new file mode 100644 index 0000000..4a63fbd --- /dev/null +++ b/base44/entities/Workforce.jsonc @@ -0,0 +1,244 @@ +{ + "name": "Workforce", + "type": "object", + "properties": { + "workforce_number": { + "type": "string", + "description": "Worker Number format WF-#### (auto-generated)", + "pattern": "^WF-[0-9]{4,6}$" + }, + "vendor_id": { + "type": "string", + "description": "Vendor who manages this worker" + }, + "vendor_name": { + "type": "string", + "description": "Vendor name" + }, + "first_name": { + "type": "string", + "description": "Worker first name" + }, + "last_name": { + "type": "string", + "description": "Worker last name" + }, + "email": { + "type": "string", + "format": "email", + "description": "Worker email" + }, + "phone": { + "type": "string", + "description": "Worker phone" + }, + "address": { + "type": "string", + "description": "Worker address" + }, + "city": { + "type": "string", + "description": "City" + }, + "state": { + "type": "string", + "description": "State" + }, + "zip_code": { + "type": "string", + "description": "ZIP code" + }, + "date_of_birth": { + "type": "string", + "format": "date", + "description": "Date of birth" + }, + "ssn_last_four": { + "type": "string", + "description": "Last 4 digits of SSN", + "pattern": "^[0-9]{4}$" + }, + "employment_type": { + "type": "string", + "enum": [ + "W2", + "1099", + "Temporary", + "Contract" + ], + "description": "Employment classification" + }, + "skills": { + "type": "array", + "description": "Worker skills", + "items": { + "type": "string" + } + }, + "roles_qualified": { + "type": "array", + "description": "Roles worker is qualified for", + "items": { + "type": "string" + } + }, + "certifications": { + "type": "array", + "description": "Certifications", + "items": { + "type": "object", + "properties": { + "cert_name": { + "type": "string" + }, + "cert_number": { + "type": "string" + }, + "issued_date": { + "type": "string", + "format": "date" + }, + "expiry_date": { + "type": "string", + "format": "date" + }, + "issuer": { + "type": "string" + }, + "document_url": { + "type": "string" + } + } + } + }, + "background_check_status": { + "type": "string", + "enum": [ + "Pending", + "Cleared", + "Failed", + "Expired" + ], + "description": "Background check status" + }, + "background_check_date": { + "type": "string", + "format": "date", + "description": "Background check completion date" + }, + "drug_test_status": { + "type": "string", + "enum": [ + "Pending", + "Passed", + "Failed", + "Expired" + ], + "description": "Drug test status" + }, + "drug_test_date": { + "type": "string", + "format": "date", + "description": "Drug test date" + }, + "reliability_index": { + "type": "number", + "minimum": 0, + "maximum": 100, + "description": "Reliability score (0-100)" + }, + "total_assignments": { + "type": "number", + "default": 0, + "description": "Total assignments completed" + }, + "cancelled_assignments": { + "type": "number", + "default": 0, + "description": "Cancelled assignments" + }, + "no_shows": { + "type": "number", + "default": 0, + "description": "No-show count" + }, + "average_rating": { + "type": "number", + "minimum": 0, + "maximum": 5, + "description": "Average performance rating" + }, + "languages": { + "type": "array", + "description": "Languages spoken", + "items": { + "type": "string" + } + }, + "availability": { + "type": "object", + "description": "Worker availability", + "properties": { + "monday": { + "type": "boolean" + }, + "tuesday": { + "type": "boolean" + }, + "wednesday": { + "type": "boolean" + }, + "thursday": { + "type": "boolean" + }, + "friday": { + "type": "boolean" + }, + "saturday": { + "type": "boolean" + }, + "sunday": { + "type": "boolean" + }, + "shift_preferences": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "Morning", + "Day", + "Evening", + "Night", + "Overnight" + ] + } + } + } + }, + "is_active": { + "type": "boolean", + "default": true, + "description": "Is worker active" + }, + "hire_date": { + "type": "string", + "format": "date", + "description": "Date worker was hired" + }, + "termination_date": { + "type": "string", + "format": "date", + "description": "Termination date if applicable" + }, + "notes": { + "type": "string", + "description": "Internal notes" + } + }, + "required": [ + "vendor_id", + "first_name", + "last_name", + "workforce_number" + ] +} \ No newline at end of file diff --git a/base44/entities/WorkforceEvent.jsonc b/base44/entities/WorkforceEvent.jsonc new file mode 100644 index 0000000..5b354b4 --- /dev/null +++ b/base44/entities/WorkforceEvent.jsonc @@ -0,0 +1,134 @@ +{ + "name": "WorkforceEvent", + "type": "object", + "properties": { + "event_id": { + "type": "string", + "description": "Unique event identifier (EVT-timestamp-random)" + }, + "event_type": { + "type": "string", + "enum": [ + "shift.completed", + "shift.created", + "shift.cancelled", + "shift.no_show", + "order.created", + "order.updated", + "order.cancelled", + "order.filled", + "assignment.created", + "assignment.confirmed", + "assignment.completed", + "assignment.cancelled", + "invoice.created", + "invoice.approved", + "invoice.paid", + "invoice.overdue", + "vendor.rate_changed", + "vendor.onboarded", + "vendor.compliance_updated", + "worker.hired", + "worker.availability_changed", + "worker.certification_expired", + "worker.clock_in", + "worker.clock_out", + "budget.threshold_exceeded", + "compliance.flagged", + "system.prediction", + "system.anomaly_detected" + ], + "description": "Type of workforce event" + }, + "severity": { + "type": "string", + "enum": [ + "info", + "warning", + "critical" + ], + "default": "info" + }, + "actor_type": { + "type": "string", + "enum": [ + "worker", + "vendor", + "manager", + "system", + "agent", + "client" + ], + "description": "Who or what triggered the event" + }, + "actor_id": { + "type": "string", + "description": "ID of the actor" + }, + "actor_name": { + "type": "string", + "description": "Name of the actor" + }, + "subject_entity_type": { + "type": "string", + "description": "Type of entity the event is about (Order, Assignment, Invoice, etc.)" + }, + "subject_entity_id": { + "type": "string", + "description": "ID of the subject entity" + }, + "subject_krow_id": { + "type": "string", + "description": "KROW universal ID of the subject" + }, + "context_summary": { + "type": "string", + "description": "Human-readable summary of the event" + }, + "related_entities": { + "type": "array", + "description": "Related entity references for graph traversal", + "items": { + "type": "object", + "properties": { + "entity_type": { + "type": "string" + }, + "entity_id": { + "type": "string" + }, + "relationship": { + "type": "string" + } + } + } + }, + "metadata": { + "type": "object", + "description": "Event-specific payload data", + "additionalProperties": true + }, + "reasoning_triggered": { + "type": "boolean", + "default": false, + "description": "Whether the reasoning engine has processed this event" + }, + "memory_id": { + "type": "string", + "description": "ID of the OperationalMemory record created from reasoning about this event" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Searchable tags (e.g., 'overtime', 'shortage', 'compliance')" + } + }, + "required": [ + "event_id", + "event_type", + "subject_entity_type", + "subject_entity_id" + ] +} \ No newline at end of file diff --git a/base44/functions/fillEscalationMonitor/entry.ts b/base44/functions/fillEscalationMonitor/entry.ts new file mode 100644 index 0000000..cf5f3db --- /dev/null +++ b/base44/functions/fillEscalationMonitor/entry.ts @@ -0,0 +1,125 @@ +import { createClientFromRequest } from 'npm:@base44/sdk@0.8.23'; + +/** + * Fill Escalation Monitor + * Runs every 15 minutes. Detects events at risk of not being filled + * and creates escalation alerts in ActivityLog. + * + * Fill probability formula: + * score = (assigned / requested) * 60 + * + timeBuffer * 20 (more time = more chance to fill) + * + dayOfWeek * 20 (based on historical fill rate for that day) + * + * If fillProbability < 60% → escalation alert + */ + +Deno.serve(async (req) => { + const base44 = createClientFromRequest(req); + + // Allow scheduled/service calls without user auth + const now = new Date(); + const in24h = new Date(now.getTime() + 24 * 60 * 60 * 1000); + const in4h = new Date(now.getTime() + 4 * 60 * 60 * 1000); + + // Fetch all upcoming active events + const allEvents = await base44.asServiceRole.entities.Event.list(); + const upcoming = allEvents.filter(e => { + if (!e.date) return false; + const eventDate = new Date(e.date); + return eventDate > now && eventDate <= in24h && + ["Active", "Pending", "Confirmed", "Draft"].includes(e.status); + }); + + // Historical fill rate by day of week + const completed = allEvents.filter(e => e.status === "Completed" && e.date); + const dayFillRate = Array(7).fill(null).map((_, dow) => { + const dayEvents = completed.filter(e => new Date(e.date).getDay() === dow); + if (dayEvents.length === 0) return 0.75; // default 75% + const filled = dayEvents.filter(e => (e.assigned_staff?.length || 0) >= (e.requested || 1)); + return filled.length / dayEvents.length; + }); + + const escalations = []; + const alerts = []; + + for (const event of upcoming) { + const assigned = event.assigned_staff?.length || 0; + const requested = event.requested || 0; + if (requested === 0) continue; + + const fillRatio = assigned / requested; + const eventDate = new Date(event.date); + const hoursUntil = (eventDate - now) / (1000 * 60 * 60); + const dow = eventDate.getDay(); + + // Time buffer score: 0 = within 2h (critical), 1 = 24h out (comfortable) + const timeBuffer = Math.min(hoursUntil / 24, 1); + + // Fill probability 0-100 + const fillProbability = Math.round( + fillRatio * 60 + + timeBuffer * 20 + + dayFillRate[dow] * 20 + ); + + const isCritical = hoursUntil <= 4 && fillRatio < 1; + const isAtRisk = fillProbability < 60; + + if (isCritical || isAtRisk) { + escalations.push({ + event_id: event.id, + event_name: event.event_name, + hours_until: Math.round(hoursUntil), + fill_ratio: fillRatio, + fill_probability: fillProbability, + assigned, + requested, + is_critical: isCritical, + }); + + // Create ActivityLog alert (avoid duplicates — check if one exists in last 2h) + const existingAlerts = await base44.asServiceRole.entities.ActivityLog.filter({ + related_entity_id: event.id, + activity_type: "event_updated", + }); + + const recentAlert = existingAlerts.find(a => { + const created = new Date(a.created_date); + return (now - created) < 2 * 60 * 60 * 1000; // within 2h + }); + + if (!recentAlert) { + const severity = isCritical ? "🚨 CRITICAL" : "⚠️ AT RISK"; + const gapCount = requested - assigned; + const description = isCritical + ? `${event.event_name} starts in ${Math.round(hoursUntil)}h — ${gapCount} position${gapCount > 1 ? "s" : ""} still open. Fill immediately.` + : `${event.event_name} has a ${fillProbability}% fill probability. ${gapCount} position${gapCount > 1 ? "s" : ""} unfilled with ${Math.round(hoursUntil)}h remaining.`; + + alerts.push( + base44.asServiceRole.entities.ActivityLog.create({ + title: `${severity}: ${event.event_name} needs staffing`, + description, + activity_type: "event_updated", + related_entity_type: "event", + related_entity_id: event.id, + action_link: `EventDetail?id=${event.id}`, + action_label: "Assign Staff Now", + user_id: event.created_by || "system", + is_read: false, + icon_type: "alert", + icon_color: isCritical ? "red" : "yellow", + }) + ); + } + } + } + + await Promise.all(alerts); + + return Response.json({ + checked: upcoming.length, + escalations: escalations.length, + details: escalations, + timestamp: now.toISOString(), + }); +}); \ No newline at end of file diff --git a/base44/functions/queryWorkforceGraph/entry.ts b/base44/functions/queryWorkforceGraph/entry.ts new file mode 100644 index 0000000..7c5198e --- /dev/null +++ b/base44/functions/queryWorkforceGraph/entry.ts @@ -0,0 +1,504 @@ +import { createClientFromRequest } from 'npm:@base44/sdk@0.8.31'; + +Deno.serve(async (req) => { + try { + const base44 = createClientFromRequest(req); + const user = await base44.auth.me(); + if (!user) return Response.json({ error: 'Unauthorized' }, { status: 401 }); + + const body = await req.json(); + const { query_type, entity_id, entity_type, depth = 2 } = body; + + const entities = base44.asServiceRole.entities; + const graph = { nodes: [], edges: [] }; + const visited = new Set(); + + async function addNode(type, id, label, data = {}) { + const key = `${type}:${id}`; + if (visited.has(key)) return; + visited.add(key); + graph.nodes.push({ type, id, label, data }); + } + + function edge(from, to, label) { + graph.edges.push({ from, to, label }); + } + + // ─── CONTRACT ─────────────────────────────────────────────── + // Contract → Vendor, Client, Sector, RateCard + async function traverseContract(contractId) { + const contract = await entities.Contract.get(contractId); + if (!contract) return; + await addNode('Contract', contract.id, `Contract: ${contract.contract_name || contract.contract_number || ''}`, contract); + + if (contract.vendor_id) { + await addNode('Vendor', contract.vendor_id, `Vendor: ${contract.vendor_name || ''}`); + edge(`Contract:${contract.id}`, `Vendor:${contract.vendor_id}`, 'vendor_party'); + } + if (contract.client_id) { + await addNode('Client', contract.client_id, `Client: ${contract.client_name || ''}`); + edge(`Contract:${contract.id}`, `Client:${contract.client_id}`, 'client_party'); + } + if (contract.sector_id) { + await addNode('Sector', contract.sector_id, `Sector: ${contract.sector_name || ''}`); + edge(`Contract:${contract.id}`, `Sector:${contract.sector_id}`, 'governs_sector'); + } + if (contract.rate_card_id) { + await addNode('RateCard', contract.rate_card_id, `RateCard`); + edge(`Contract:${contract.id}`, `RateCard:${contract.rate_card_id}`, 'defines_rates'); + } + } + + // ─── TRANSPORTATION ──────────────────────────────────────── + // Transportation → Shift, Worker, Vendor, Site, Client + async function traverseTransportation(transportId) { + const transport = await entities.Transportation.get(transportId); + if (!transport) return; + await addNode('Transportation', transport.id, `Transport: ${transport.transport_type} → ${transport.dropoff_location || ''}`, transport); + + if (transport.shift_id) { + await addNode('Shift', transport.shift_id, `Shift`); + edge(`Transportation:${transport.id}`, `Shift:${transport.shift_id}`, 'serves_shift'); + } + if (transport.workforce_id) { + await addNode('Worker', transport.workforce_id, `Worker: ${transport.workforce_name || ''}`); + edge(`Transportation:${transport.id}`, `Worker:${transport.workforce_id}`, 'transports_worker'); + } + if (transport.vendor_id) { + await addNode('Vendor', transport.vendor_id, `Vendor: ${transport.vendor_name || ''}`); + edge(`Transportation:${transport.id}`, `Vendor:${transport.vendor_id}`, 'arranged_by'); + } + if (transport.client_id) { + await addNode('Client', transport.client_id, `Client: ${transport.client_name || ''}`); + edge(`Transportation:${transport.id}`, `Client:${transport.client_id}`, 'destination_client'); + } + } + + // ─── EQUIPMENT ───────────────────────────────────────────── + // Equipment → Vendor, Client, Site, Shift, Worker + async function traverseEquipment(equipmentId) { + const equipment = await entities.Equipment.get(equipmentId); + if (!equipment) return; + await addNode('Equipment', equipment.id, `Equipment: ${equipment.equipment_name || ''} (${equipment.category})`, equipment); + + if (equipment.vendor_id) { + await addNode('Vendor', equipment.vendor_id, `Vendor: ${equipment.vendor_name || ''}`); + edge(`Equipment:${equipment.id}`, `Vendor:${equipment.vendor_id}`, 'owned_by'); + } + if (equipment.client_id) { + await addNode('Client', equipment.client_id, `Client: ${equipment.client_name || ''}`); + edge(`Equipment:${equipment.id}`, `Client:${equipment.client_id}`, 'assigned_to_client'); + } + if (equipment.shift_id) { + await addNode('Shift', equipment.shift_id, `Shift`); + edge(`Equipment:${equipment.id}`, `Shift:${equipment.shift_id}`, 'used_in_shift'); + } + if (equipment.assigned_to_worker_id) { + await addNode('Worker', equipment.assigned_to_worker_id, `Worker: ${equipment.assigned_to_worker_name || ''}`); + edge(`Equipment:${equipment.id}`, `Worker:${equipment.assigned_to_worker_id}`, 'assigned_to_worker'); + } + } + + // ─── TRAINING ────────────────────────────────────────────── + // Training → Worker, Vendor, Client, Certification + async function traverseTraining(trainingId) { + const training = await entities.Training.get(trainingId); + if (!training) return; + await addNode('Training', training.id, `Training: ${training.training_name || ''}`, training); + + if (training.workforce_id) { + await addNode('Worker', training.workforce_id, `Worker: ${training.workforce_name || ''}`); + edge(`Training:${training.id}`, `Worker:${training.workforce_id}`, 'enrolled_worker'); + } + if (training.vendor_id) { + await addNode('Vendor', training.vendor_id, `Vendor: ${training.vendor_name || ''}`); + edge(`Training:${training.id}`, `Vendor:${training.vendor_id}`, 'sponsored_by'); + } + if (training.client_id) { + await addNode('Client', training.client_id, `Client: ${training.client_name || ''}`); + edge(`Training:${training.id}`, `Client:${training.client_id}`, 'client_specific'); + } + if (training.certification_id) { + await addNode('Certification', training.certification_id, `Cert: ${training.certification_earned || ''}`); + edge(`Training:${training.id}`, `Certification:${training.certification_id}`, 'issues_certification'); + } + } + + // ─── FOOD SERVICE OPERATION ──────────────────────────────── + // FoodServiceOperation → Client, Site, Sector, Vendor, Manager, Shift, Event, Contract, Invoice, Equipment + async function traverseFoodServiceOperation(opId) { + const op = await entities.FoodServiceOperation.get(opId); + if (!op) return; + await addNode('FoodServiceOperation', op.id, `FSO: ${op.operation_name || ''}`, op); + + if (op.client_id) { + await addNode('Client', op.client_id, `Client: ${op.client_name || ''}`); + edge(`FoodServiceOperation:${op.id}`, `Client:${op.client_id}`, 'serves_client'); + } + if (op.vendor_id) { + await addNode('Vendor', op.vendor_id, `Vendor: ${op.vendor_name || ''}`); + edge(`FoodServiceOperation:${op.id}`, `Vendor:${op.vendor_id}`, 'operated_by'); + } + if (op.manager_id) { + await addNode('Manager', op.manager_id, `Manager: ${op.manager_name || ''}`); + edge(`FoodServiceOperation:${op.id}`, `Manager:${op.manager_id}`, 'managed_by'); + } + if (op.shift_id) { + await addNode('Shift', op.shift_id, `Shift`); + edge(`FoodServiceOperation:${op.id}`, `Shift:${op.shift_id}`, 'runs_during_shift'); + } + if (op.contract_id) { + await addNode('Contract', op.contract_id, `Contract`); + edge(`FoodServiceOperation:${op.id}`, `Contract:${op.contract_id}`, 'governed_by_contract'); + } + if (op.invoice_id) { + await addNode('Invoice', op.invoice_id, `Invoice`); + edge(`FoodServiceOperation:${op.id}`, `Invoice:${op.invoice_id}`, 'billed_via'); + } + if (op.equipment_assigned) { + for (const eq of op.equipment_assigned) { + if (eq.equipment_id) { + await addNode('Equipment', eq.equipment_id, `Equipment: ${eq.equipment_name || ''}`); + edge(`FoodServiceOperation:${op.id}`, `Equipment:${eq.equipment_id}`, 'uses_equipment'); + } + } + } + } + + // ─── SHIFT (extended) ────────────────────────────────────── + // Shift → Manager, Location, Event, Transportation, Equipment, FoodServiceOperation + async function traverseShift(shiftId) { + const shift = await entities.Shift.get(shiftId); + if (!shift) return; + await addNode('Shift', shift.id, `Shift: ${shift.shift_name || ''}`, shift); + + if (shift.manager_id) { + await addNode('Manager', shift.manager_id, `Manager: ${shift.manager_name || ''}`); + edge(`Shift:${shift.id}`, `Manager:${shift.manager_id}`, 'managed_by'); + } + if (shift.event_id) { + await addNode('Event', shift.event_id, `Event`); + edge(`Shift:${shift.id}`, `Event:${shift.event_id}`, 'part_of_event'); + } + // Transportation serving this shift + const transports = await entities.Transportation.filter({ shift_id: shiftId }, '-created_date', 10); + for (const t of transports) { + await addNode('Transportation', t.id, `Transport: ${t.transport_type}`, t); + edge(`Shift:${shiftId}`, `Transportation:${t.id}`, 'worker_transport'); + } + // Equipment assigned to this shift + const equipment = await entities.Equipment.filter({ shift_id: shiftId }, '-created_date', 10); + for (const e of equipment) { + await addNode('Equipment', e.id, `Equipment: ${e.equipment_name || ''}`, e); + edge(`Shift:${shiftId}`, `Equipment:${e.id}`, 'requires_equipment'); + } + // Food service operations running during this shift + const fsos = await entities.FoodServiceOperation.filter({ shift_id: shiftId }, '-created_date', 10); + for (const fso of fsos) { + await addNode('FoodServiceOperation', fso.id, `FSO: ${fso.operation_name || ''}`, fso); + edge(`Shift:${shiftId}`, `FoodServiceOperation:${fso.id}`, 'runs_operation'); + } + } + + // ─── ASSIGNMENT (existing, extended) ─────────────────────── + async function traverseAssignment(assignmentId) { + const assignment = await entities.Assignment.get(assignmentId); + if (!assignment) return; + await addNode('Assignment', assignment.id, `Assignment: ${assignment.workforce_name || 'Unknown'}`, assignment); + + if (assignment.order_id) { + await addNode('Order', assignment.order_id, `Order: ${assignment.order_number || ''}`); + edge(`Assignment:${assignment.id}`, `Order:${assignment.order_id}`, 'belongs_to'); + await traverseOrder(assignment.order_id, 1); + } + if (assignment.workforce_id) { + await addNode('Worker', assignment.workforce_id, `Worker: ${assignment.workforce_name || ''}`); + edge(`Assignment:${assignment.id}`, `Worker:${assignment.workforce_id}`, 'assigned_to'); + } + if (assignment.vendor_id) { + await addNode('Vendor', assignment.vendor_id, `Vendor: ${assignment.vendor_name || ''}`); + edge(`Assignment:${assignment.id}`, `Vendor:${assignment.vendor_id}`, 'provided_by'); + } + } + + // ─── ORDER (existing, extended) ──────────────────────────── + async function traverseOrder(orderId, currentDepth = 0) { + if (currentDepth >= depth) return; + try { + const order = await entities.Order.get(orderId); + if (!order) return; + await addNode('Order', order.id, `Order: ${order.order_number || order.event_name || ''}`, order); + + if (order.partner_id) { + await addNode('Partner', order.partner_id, `Partner: ${order.partner_name || ''}`); + edge(`Order:${order.id}`, `Partner:${order.partner_id}`, 'for_client'); + } + if (order.vendor_id) { + await addNode('Vendor', order.vendor_id, `Vendor: ${order.vendor_name || ''}`); + edge(`Order:${order.id}`, `Vendor:${order.vendor_id}`, 'assigned_to'); + } + // Contracts governing this client-vendor pair + if (order.vendor_id && order.business_id) { + const contracts = await entities.Contract.filter({ vendor_id: order.vendor_id, client_id: order.business_id, status: 'active' }, '-created_date', 5); + for (const c of contracts) { + await addNode('Contract', c.id, `Contract: ${c.contract_name || ''}`, c); + edge(`Order:${order.id}`, `Contract:${c.id}`, 'governed_by'); + } + } + // Food service operations for this event + if (order.event_id) { + const fsos = await entities.FoodServiceOperation.filter({ event_id: order.event_id }, '-created_date', 10); + for (const fso of fsos) { + await addNode('FoodServiceOperation', fso.id, `FSO: ${fso.operation_name || ''}`, fso); + edge(`Order:${order.id}`, `FoodServiceOperation:${fso.id}`, 'fulfills_operation'); + } + } + } catch (e) { /* order might not exist */ } + } + + // ─── VENDOR (existing, extended) ─────────────────────────── + async function traverseVendor(vendorId) { + const vendor = await entities.Vendor.get(vendorId); + if (!vendor) return; + await addNode('Vendor', vendor.id, `Vendor: ${vendor.legal_name || vendor.doing_business_as || ''}`, vendor); + + // Rates + const rates = await entities.VendorRate.filter({ vendor_id: vendorId }, '-created_date', 10); + for (const rate of rates) { + await addNode('VendorRate', rate.id, `Rate: ${rate.role_name || 'Unknown'} - $${rate.client_rate || 0}/hr`, rate); + edge(`Vendor:${vendorId}`, `VendorRate:${rate.id}`, 'has_rate'); + } + + // Workforce + const workforce = await entities.Workforce.filter({ vendor_id: vendorId }, '-created_date', 10); + for (const w of workforce) { + await addNode('Worker', w.id, `Worker: ${w.full_name || w.name || ''}`, w); + edge(`Vendor:${vendorId}`, `Worker:${w.id}`, 'employs'); + } + + // Contracts + const contracts = await entities.Contract.filter({ vendor_id: vendorId }, '-created_date', 10); + for (const c of contracts) { + await addNode('Contract', c.id, `Contract: ${c.contract_name || ''}`, c); + edge(`Vendor:${vendorId}`, `Contract:${c.id}`, 'party_to'); + if (c.client_id) { + await addNode('Client', c.client_id, `Client: ${c.client_name || ''}`); + edge(`Contract:${c.id}`, `Client:${c.client_id}`, 'client_party'); + } + } + + // Equipment owned + const equipment = await entities.Equipment.filter({ vendor_id: vendorId }, '-created_date', 10); + for (const e of equipment) { + await addNode('Equipment', e.id, `Equipment: ${e.equipment_name || ''}`, e); + edge(`Vendor:${vendorId}`, `Equipment:${e.id}`, 'owns'); + } + + // Transportation arranged + const transports = await entities.Transportation.filter({ vendor_id: vendorId }, '-created_date', 10); + for (const t of transports) { + await addNode('Transportation', t.id, `Transport: ${t.transport_type}`, t); + edge(`Vendor:${vendorId}`, `Transportation:${t.id}`, 'arranges'); + } + + // Training sponsored + const trainings = await entities.Training.filter({ vendor_id: vendorId }, '-created_date', 10); + for (const t of trainings) { + await addNode('Training', t.id, `Training: ${t.training_name || ''}`, t); + edge(`Vendor:${vendorId}`, `Training:${t.id}`, 'sponsors_training'); + } + } + + // ─── WORKER (existing, extended) ─────────────────────────── + async function traverseWorker(workerId) { + const worker = await entities.Workforce.get(workerId); + if (!worker) return; + await addNode('Worker', worker.id, `Worker: ${worker.full_name || worker.name || ''}`, worker); + + if (worker.vendor_id) { + await addNode('Vendor', worker.vendor_id, `Vendor: ${worker.vendor_name || ''}`); + edge(`Worker:${workerId}`, `Vendor:${worker.vendor_id}`, 'employed_by'); + } + + // Assignments + const assignments = await entities.Assignment.filter({ workforce_id: workerId }, '-created_date', 10); + for (const a of assignments) { + await addNode('Assignment', a.id, `Assignment: ${a.role || ''}`, a); + edge(`Worker:${workerId}`, `Assignment:${a.id}`, 'assigned'); + } + + // Availability + const availability = await entities.WorkerAvailability.filter({ staff_id: workerId }, '-created_date', 1); + if (availability.length > 0) { + await addNode('Availability', availability[0].id, `Availability: ${availability[0].availability_status}`, availability[0]); + edge(`Worker:${workerId}`, `Availability:${availability[0].id}`, 'availability'); + } + + // Reputation + const reputation = await entities.WorkerReputationProfile.filter({ worker_id: workerId }, '-created_date', 1); + if (reputation.length > 0) { + await addNode('Reputation', reputation[0].id, `Reputation: ${reputation[0].trust_tier} (${reputation[0].trust_score || 0})`, reputation[0]); + edge(`Worker:${workerId}`, `Reputation:${reputation[0].id}`, 'reputation'); + } + + // Training records + const trainings = await entities.Training.filter({ workforce_id: workerId }, '-created_date', 10); + for (const t of trainings) { + await addNode('Training', t.id, `Training: ${t.training_name || ''}`, t); + edge(`Worker:${workerId}`, `Training:${t.id}`, 'enrolled_in'); + } + + // Equipment assigned + const equipment = await entities.Equipment.filter({ assigned_to_worker_id: workerId }, '-created_date', 10); + for (const e of equipment) { + await addNode('Equipment', e.id, `Equipment: ${e.equipment_name || ''}`, e); + edge(`Worker:${workerId}`, `Equipment:${e.id}`, 'issued_equipment'); + } + + // Transportation + const transports = await entities.Transportation.filter({ workforce_id: workerId }, '-created_date', 10); + for (const t of transports) { + await addNode('Transportation', t.id, `Transport: ${t.transport_type}`, t); + edge(`Worker:${workerId}`, `Transportation:${t.id}`, 'transported_by'); + } + } + + // ─── FULL GRAPH (new) ────────────────────────────────────── + // Walks the entire connected chain from any starting node, up to depth hops + async function traverseFull(startType, startId, maxDepth = 3) { + const queue = [{ type: startType, id: startId, depth: 0 }]; + const seen = new Set(); + + while (queue.length > 0) { + const { type, id, depth: curDepth } = queue.shift(); + const key = `${type}:${id}`; + if (seen.has(key) || curDepth > maxDepth) continue; + seen.add(key); + + switch (type) { + case 'Worker': { + const w = await entities.Workforce.get(id).catch(() => null); + if (!w) break; + await addNode('Worker', w.id, `Worker: ${w.full_name || w.name || ''}`, w); + if (w.vendor_id) queue.push({ type: 'Vendor', id: w.vendor_id, depth: curDepth + 1 }); + const as = await entities.Assignment.filter({ workforce_id: id }, '-created_date', 5); + for (const a of as) queue.push({ type: 'Assignment', id: a.id, depth: curDepth + 1 }); + const ts = await entities.Training.filter({ workforce_id: id }, '-created_date', 5); + for (const t of ts) queue.push({ type: 'Training', id: t.id, depth: curDepth + 1 }); + const eq = await entities.Equipment.filter({ assigned_to_worker_id: id }, '-created_date', 5); + for (const e of eq) queue.push({ type: 'Equipment', id: e.id, depth: curDepth + 1 }); + const tr = await entities.Transportation.filter({ workforce_id: id }, '-created_date', 5); + for (const t of tr) queue.push({ type: 'Transportation', id: t.id, depth: curDepth + 1 }); + break; + } + case 'Vendor': { + const v = await entities.Vendor.get(id).catch(() => null); + if (!v) break; + await addNode('Vendor', v.id, `Vendor: ${v.legal_name || v.doing_business_as || ''}`, v); + const ws = await entities.Workforce.filter({ vendor_id: id }, '-created_date', 10); + for (const w of ws) { await addNode('Worker', w.id, `Worker: ${w.full_name || ''}`, w); edge(`Vendor:${id}`, `Worker:${w.id}`, 'employs'); queue.push({ type: 'Worker', id: w.id, depth: curDepth + 1 }); } + const cs = await entities.Contract.filter({ vendor_id: id }, '-created_date', 10); + for (const c of cs) { await addNode('Contract', c.id, `Contract: ${c.contract_name || ''}`, c); edge(`Vendor:${id}`, `Contract:${c.id}`, 'party_to'); queue.push({ type: 'Contract', id: c.id, depth: curDepth + 1 }); } + const eqs = await entities.Equipment.filter({ vendor_id: id }, '-created_date', 10); + for (const e of eqs) { await addNode('Equipment', e.id, `Equipment: ${e.equipment_name || ''}`, e); edge(`Vendor:${id}`, `Equipment:${e.id}`, 'owns'); } + const fsos = await entities.FoodServiceOperation.filter({ vendor_id: id }, '-created_date', 10); + for (const f of fsos) { await addNode('FoodServiceOperation', f.id, `FSO: ${f.operation_name || ''}`, f); edge(`Vendor:${id}`, `FoodServiceOperation:${f.id}`, 'operates'); queue.push({ type: 'FoodServiceOperation', id: f.id, depth: curDepth + 1 }); } + break; + } + case 'Contract': { + const c = await entities.Contract.get(id).catch(() => null); + if (!c) break; + await addNode('Contract', c.id, `Contract: ${c.contract_name || ''}`, c); + if (c.vendor_id) { await addNode('Vendor', c.vendor_id, `Vendor: ${c.vendor_name || ''}`); edge(`Contract:${id}`, `Vendor:${c.vendor_id}`, 'vendor_party'); } + if (c.client_id) { await addNode('Client', c.client_id, `Client: ${c.client_name || ''}`); edge(`Contract:${id}`, `Client:${c.client_id}`, 'client_party'); } + break; + } + case 'Shift': { + await traverseShift(id); + break; + } + case 'FoodServiceOperation': { + await traverseFoodServiceOperation(id); + break; + } + case 'Transportation': { + await traverseTransportation(id); + break; + } + case 'Equipment': { + await traverseEquipment(id); + break; + } + case 'Training': { + await traverseTraining(id); + break; + } + case 'Assignment': { + await traverseAssignment(id); + break; + } + case 'Order': { + await traverseOrder(id, 0); + break; + } + } + } + } + + // ─── EXECUTE ─────────────────────────────────────────────── + if (query_type === 'subgraph' && entity_id) { + switch (entity_type) { + case 'Assignment': await traverseAssignment(entity_id); break; + case 'Order': await traverseOrder(entity_id, 0); break; + case 'Vendor': await traverseVendor(entity_id); break; + case 'Worker': await traverseWorker(entity_id); break; + case 'Shift': await traverseShift(entity_id); break; + case 'Contract': await traverseContract(entity_id); break; + case 'Transportation': await traverseTransportation(entity_id); break; + case 'Equipment': await traverseEquipment(entity_id); break; + case 'Training': await traverseTraining(entity_id); break; + case 'FoodServiceOperation': await traverseFoodServiceOperation(entity_id); break; + default: break; + } + } else if (query_type === 'full_graph' && entity_id && entity_type) { + await traverseFull(entity_type, entity_id, depth); + } else if (query_type === 'site_labor') { + const assignments = await entities.Assignment.filter({}, '-created_date', 100); + graph.nodes = assignments.map(a => ({ + type: 'Assignment', + id: a.id, + label: `${a.workforce_name} - ${a.role}`, + data: a + })); + } else if (query_type === 'shortage_prediction') { + const orders = await entities.Order.filter({ status: 'Open' }, '-created_date', 50); + for (const order of orders) { + await addNode('Order', order.id, `Order: ${order.order_number || ''}`, order); + const assignments = await entities.Assignment.filter({ order_id: order.id }, '-created_date', 50); + const filled = assignments.filter(a => a.assignment_status === 'Confirmed' || a.assignment_status === 'Checked In').length; + const needed = order.total_staff || 0; + if (filled < needed) { + edge(`Order:${order.id}`, `SHORTAGE:${order.id}`, `short_by_${needed - filled}`); + graph.nodes.push({ type: 'Alert', id: `SHORTAGE:${order.id}`, label: `Shortage: ${needed - filled} unfilled positions`, data: { order_id: order.id, needed, filled, gap: needed - filled } }); + } + } + } else if (query_type === 'entity_summary') { + // Returns counts of every entity type in the graph — the "graph census" + const counts = {}; + const entityTypes = ['Workforce', 'Vendor', 'Business', 'Site', 'Shift', 'Event', 'Order', 'Assignment', 'Invoice', 'CompliancePackage', 'Scorecard', 'Contract', 'Transportation', 'Equipment', 'Training', 'FoodServiceOperation']; + for (const et of entityTypes) { + try { + const list = await entities[et].list('-created_date', 1); + counts[et] = list?.length || 0; + } catch (e) { + counts[et] = 0; + } + } + return Response.json({ success: true, counts }); + } + + return Response.json({ success: true, graph, node_count: graph.nodes.length, edge_count: graph.edges.length }); + } catch (error) { + return Response.json({ error: error.message }, { status: 500 }); + } +}); \ No newline at end of file diff --git a/base44/functions/reasonAboutEvent/entry.ts b/base44/functions/reasonAboutEvent/entry.ts new file mode 100644 index 0000000..d5ccb7d --- /dev/null +++ b/base44/functions/reasonAboutEvent/entry.ts @@ -0,0 +1,235 @@ +import { createClientFromRequest } from 'npm:@base44/sdk@0.8.31'; + +Deno.serve(async (req) => { + try { + const base44 = createClientFromRequest(req); + const user = await base44.auth.me(); + if (!user) return Response.json({ error: 'Unauthorized' }, { status: 401 }); + + const body = await req.json(); + const { + event_id, + event_type, + subject_entity_type, + subject_entity_id, + context_summary, + metadata = {}, + related_entities = [] + } = body; + + const entities = base44.asServiceRole.entities; + + // 1. Fetch context from the Workforce Graph + let graphContext = {}; + try { + const graphRes = await base44.asServiceRole.functions.invoke('queryWorkforceGraph', { + query_type: 'subgraph', + entity_type: subject_entity_type, + entity_id: subject_entity_id + }); + graphContext = graphRes.data?.graph || {}; + } catch (e) { + console.log('Graph query failed (non-blocking):', e.message); + } + + // 2. Fetch similar past memories (Operational Memory) + const similarMemories = await entities.OperationalMemory.filter( + { trigger_event_type: event_type }, + '-created_date', + 5 + ); + + const memoryContext = similarMemories.map(m => ({ + decision: m.decision?.recommendation || 'N/A', + outcome: m.outcome || 'pending', + outcome_score: m.outcome_score, + reasoning: m.reasoning?.substring(0, 200) || '' + })); + + // 3. Determine department based on event type + const departmentMap = { + 'shift.completed': 'operations', + 'shift.cancelled': 'operations', + 'shift.no_show': 'operations', + 'order.created': 'operations', + 'order.cancelled': 'operations', + 'order.filled': 'operations', + 'assignment.cancelled': 'operations', + 'invoice.overdue': 'finance', + 'vendor.rate_changed': 'procurement', + 'worker.availability_changed': 'operations', + 'worker.certification_expired': 'compliance', + 'budget.threshold_exceeded': 'finance', + 'compliance.flagged': 'compliance', + 'system.anomaly_detected': 'executive' + }; + const department = departmentMap[event_type] || 'operations'; + + // 4. Build the reasoning prompt with full context — CAUSAL CHAIN reasoning + const prompt = `You are the KROW Intelligence Engine — an AI workforce reasoning system for contingent labor management. + +You do not answer. You REASON. + +When an event occurs, you trace the CAUSAL CHAIN backwards — from the observed event through each contributing factor (connected by ↓) to the root cause(s). You do not give generic analysis. You follow the chain. + +AN EVENT HAS OCCURRED: +Event Type: ${event_type} +Summary: ${context_summary || 'No summary provided'} +Subject: ${subject_entity_type} (${subject_entity_id}) + +CURRENT GRAPH STATE (connected entities, relationships, metrics): +${JSON.stringify(graphContext, null, 2).substring(0, 3000)} + +SIMILAR PAST DECISIONS (Operational Memory — what happened last time): +${memoryContext.length > 0 ? JSON.stringify(memoryContext, null, 2) : 'No similar past decisions found.'} + +EVENT METADATA: +${JSON.stringify(metadata, null, 2).substring(0, 1000)} + +REASONING INSTRUCTIONS: + +1. OBSERVATION: State what happened as a fact. + +2. CAUSAL CHAIN: Trace WHY this event occurred. Walk backwards from the event through contributing factors. Each link in the chain is a factor that CAUSED the next. The chain flows: + + Factor A → caused → Factor B → caused → Factor C → caused → [Root Cause] + + Use the graph state, metadata, and past memories as evidence. Reference specific entities, workers, vendors, shifts, or metrics. Do not be generic. + + Categories: vendor, operations, workforce, training, demand, external, compliance, finance, equipment, transportation, system. + +3. ROOT CAUSE(S): The deepest factor(s) — the thing that, if fixed, prevents recurrence. + +4. PREDICTION: What will happen next if no action is taken. + +5. RECOMMENDATION: Target the root cause, not just the symptom. + +Respond as JSON.`; + + // 5. Call the LLM for reasoning + let aiDecision = {}; + try { + const llmResponse = await base44.asServiceRole.integrations.Core.InvokeLLM({ + prompt, + response_json_schema: { + type: 'object', + properties: { + observation: { type: 'string', description: 'What happened, stated as a fact' }, + causal_chain: { + type: 'array', + description: 'Causal chain traced backwards from the event to root cause(s)', + items: { + type: 'object', + properties: { + step: { type: 'number' }, + factor: { type: 'string' }, + evidence: { type: 'string' }, + category: { type: 'string', enum: ['vendor', 'operations', 'workforce', 'training', 'demand', 'external', 'compliance', 'finance', 'equipment', 'transportation', 'system'] }, + leads_to: { type: 'string' } + } + } + }, + root_causes: { + type: 'array', + items: { type: 'string' } + }, + prediction: { type: 'string' }, + recommendation: { type: 'string' }, + confidence_score: { type: 'number' }, + risk_level: { type: 'string' }, + proposed_actions: { + type: 'array', + items: { + type: 'object', + properties: { + action_type: { type: 'string' }, + description: { type: 'string' }, + auto_execute: { type: 'boolean' } + } + } + }, + reasoning: { type: 'string', description: 'Full reasoning chain in natural language' } + } + } + }); + + aiDecision = typeof llmResponse === 'string' ? JSON.parse(llmResponse) : llmResponse; + } catch (llmErr) { + console.log('LLM reasoning failed:', llmErr.message); + aiDecision = { + prediction: 'Unable to generate prediction', + recommendation: 'Manual review recommended', + confidence_score: 0, + risk_level: 'medium', + proposed_actions: [], + reasoning: 'LLM reasoning failed: ' + llmErr.message + }; + } + + // 6. Create Operational Memory — store the causal chain + const memory_id = `MEM-${Date.now()}-${Math.random().toString(36).substring(2, 8)}`; + const memory = await entities.OperationalMemory.create({ + memory_id, + trigger_event_id: event_id, + trigger_event_type: event_type, + context_snapshot: { graph: graphContext, metadata }, + decision: aiDecision, + reasoning: aiDecision.reasoning || '', + causal_chain: aiDecision.causal_chain || [], + root_causes: aiDecision.root_causes || [], + similar_memories_consulted: similarMemories.map(m => m.memory_id), + status: 'pending', + agent_name: `${department}_agent`, + department, + tags: [event_type, department, aiDecision.risk_level || 'medium'] + }); + + // 7. Mark event as reasoning-triggered + await entities.WorkforceEvent.update(event_id, { + reasoning_triggered: true, + memory_id: memory.id + }); + + // 8. Log agent activity + await entities.AgentActivity.create({ + agent_name: `${department}_agent`, + department, + activity_type: 'event_processed', + trigger_event_id: event_id, + memory_id: memory.id, + summary: `Processed ${event_type}: ${aiDecision.recommendation || 'No recommendation'}`, + details: { confidence: aiDecision.confidence_score, risk: aiDecision.risk_level }, + impact_level: aiDecision.risk_level === 'high' ? 'high' : (aiDecision.risk_level === 'medium' ? 'medium' : 'low'), + entities_affected: [{ entity_type: subject_entity_type, entity_id: subject_entity_id }] + }); + + // 9. If high risk, queue for human approval; if low risk + auto_execute, execute + const hasAutoActions = (aiDecision.proposed_actions || []).some(a => a.auto_execute); + if (aiDecision.risk_level === 'high' || (aiDecision.confidence_score || 0) < 60) { + await entities.DecisionQueue.create({ + memory_id: memory.id, + trigger_event_id: event_id, + title: `${department} decision: ${event_type}`, + summary: aiDecision.recommendation || 'AI recommends manual review', + department, + agent_name: `${department}_agent`, + proposed_actions: aiDecision.proposed_actions || [], + confidence_score: aiDecision.confidence_score || 0, + risk_level: aiDecision.risk_level || 'medium', + status: 'pending_approval', + expires_at: new Date(Date.now() + 24 * 60 * 60 * 1000).toISOString(), + context_snapshot: { graph: graphContext, event_summary: context_summary } + }); + } + + return Response.json({ + success: true, + memory_id: memory.id, + decision: aiDecision, + graph_nodes: graphContext.nodes?.length || 0, + similar_memories: similarMemories.length + }); + } catch (error) { + return Response.json({ error: error.message }, { status: 500 }); + } +}); \ No newline at end of file diff --git a/base44/functions/recordEvent/entry.ts b/base44/functions/recordEvent/entry.ts new file mode 100644 index 0000000..51306ae --- /dev/null +++ b/base44/functions/recordEvent/entry.ts @@ -0,0 +1,79 @@ +import { createClientFromRequest } from 'npm:@base44/sdk@0.8.31'; + +Deno.serve(async (req) => { + try { + const base44 = createClientFromRequest(req); + const user = await base44.auth.me(); + if (!user) return Response.json({ error: 'Unauthorized' }, { status: 401 }); + + const body = await req.json(); + const { + event_type, + severity = 'info', + actor_type = 'system', + actor_id, + actor_name, + subject_entity_type, + subject_entity_id, + subject_krow_id, + context_summary, + related_entities = [], + metadata = {}, + tags = [] + } = body; + + if (!event_type || !subject_entity_type || !subject_entity_id) { + return Response.json({ error: 'event_type, subject_entity_type, and subject_entity_id are required' }, { status: 400 }); + } + + const event_id = `EVT-${Date.now()}-${Math.random().toString(36).substring(2, 8)}`; + + const event = await base44.asServiceRole.entities.WorkforceEvent.create({ + event_id, + event_type, + severity, + actor_type, + actor_id: actor_id || user.id, + actor_name: actor_name || user.full_name || 'System', + subject_entity_type, + subject_entity_id, + subject_krow_id, + context_summary: context_summary || `${event_type} on ${subject_entity_type}`, + related_entities, + metadata, + reasoning_triggered: false, + tags + }); + + // Determine if this event should trigger reasoning + const reasoningTriggers = [ + 'shift.completed', 'shift.cancelled', 'shift.no_show', + 'order.created', 'order.cancelled', 'order.filled', + 'assignment.cancelled', 'invoice.overdue', + 'vendor.rate_changed', 'worker.availability_changed', + 'worker.certification_expired', 'budget.threshold_exceeded', + 'compliance.flagged', 'system.anomaly_detected' + ]; + + if (reasoningTriggers.includes(event_type)) { + try { + await base44.asServiceRole.functions.invoke('reasonAboutEvent', { + event_id: event.id, + event_type, + subject_entity_type, + subject_entity_id, + context_summary, + metadata, + related_entities + }); + } catch (reasonErr) { + // Reasoning failure shouldn't fail the event recording + console.log('Reasoning engine error (non-blocking):', reasonErr.message); + } + } + + return Response.json({ success: true, event_id: event.id, event }); + } catch (error) { + return Response.json({ error: error.message }, { status: 500 }); + } +}); \ No newline at end of file diff --git a/base44/functions/reviewOutcomes/entry.ts b/base44/functions/reviewOutcomes/entry.ts new file mode 100644 index 0000000..20b64a4 --- /dev/null +++ b/base44/functions/reviewOutcomes/entry.ts @@ -0,0 +1,104 @@ +import { createClientFromRequest } from 'npm:@base44/sdk@0.8.31'; + +Deno.serve(async (req) => { + try { + const base44 = createClientFromRequest(req); + const user = await base44.auth.me(); + if (!user) return Response.json({ error: 'Unauthorized' }, { status: 401 }); + if (user.role !== 'admin') return Response.json({ error: 'Forbidden — admin only' }, { status: 403 }); + + const entities = base44.asServiceRole.entities; + + // Fetch memories with pending outcomes (executed but not yet learned) + const pendingMemories = await entities.OperationalMemory.filter( + { status: 'outcome_pending' }, + '-created_date', + 50 + ); + + let learned = 0; + let stillPending = 0; + + for (const memory of pendingMemories) { + try { + // Re-query the graph to see what happened since the decision was made + const graphRes = await base44.asServiceRole.functions.invoke('queryWorkforceGraph', { + query_type: 'subgraph', + entity_type: memory.context_snapshot?.metadata?.subject_entity_type || 'Order', + entity_id: memory.context_snapshot?.metadata?.subject_entity_id || memory.trigger_event_id + }); + + const currentGraph = graphRes.data?.graph || {}; + + // Ask the LLM to evaluate the outcome + const prompt = `You are evaluating the outcome of a past KROW AI decision. + +ORIGINAL EVENT: ${memory.trigger_event_type} +ORIGINAL DECISION: ${memory.decision?.recommendation || 'N/A'} +ORIGINAL PREDICTION: ${memory.decision?.prediction || 'N/A'} + +CURRENT STATE (after decision): +${JSON.stringify(currentGraph, null, 2).substring(0, 2000)} + +ORIGINAL CONTEXT (at decision time): +${JSON.stringify(memory.context_snapshot?.graph || {}, null, 2).substring(0, 2000)} + +Evaluate: Did the decision help? Did the prediction come true? What was the outcome? +Respond as JSON: +{ + "outcome": "Description of what actually happened", + "outcome_score": -100 to 100 (negative = made things worse, 0 = no effect, positive = helped), + "outcome_metrics": {"key_metric": value} +}`; + + const evalResponse = await base44.asServiceRole.integrations.Core.InvokeLLM({ + prompt, + response_json_schema: { + type: 'object', + properties: { + outcome: { type: 'string' }, + outcome_score: { type: 'number' }, + outcome_metrics: { type: 'object', additionalProperties: true } + } + } + }); + + const evaluation = typeof evalResponse === 'string' ? JSON.parse(evalResponse) : evalResponse; + + await entities.OperationalMemory.update(memory.id, { + outcome: evaluation.outcome, + outcome_score: evaluation.outcome_score, + outcome_metrics: evaluation.outcome_metrics, + status: 'learned', + learned_at: new Date().toISOString() + }); + + // Log learning activity + await entities.AgentActivity.create({ + agent_name: memory.agent_name || 'system', + department: memory.department || 'operations', + activity_type: 'learning_completed', + memory_id: memory.id, + summary: `Learned from ${memory.trigger_event_type}: outcome score ${evaluation.outcome_score}`, + details: evaluation, + impact_level: evaluation.outcome_score > 50 ? 'high' : (evaluation.outcome_score > 0 ? 'medium' : 'low'), + entities_affected: [] + }); + + learned++; + } catch (e) { + console.log(`Failed to evaluate memory ${memory.id}:`, e.message); + stillPending++; + } + } + + return Response.json({ + success: true, + reviewed: pendingMemories.length, + learned, + still_pending: stillPending + }); + } catch (error) { + return Response.json({ error: error.message }, { status: 500 }); + } +}); \ No newline at end of file diff --git a/components.json b/components.json new file mode 100644 index 0000000..ebf7e6e --- /dev/null +++ b/components.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "new-york", + "rsc": false, + "tsx": false, + "tailwind": { + "config": "tailwind.config.js", + "css": "src/index.css", + "baseColor": "neutral", + "cssVariables": true, + "prefix": "" + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + }, + "iconLibrary": "lucide" +} \ No newline at end of file diff --git a/deploy_template.sh b/deploy_template.sh new file mode 100644 index 0000000..c021e1a --- /dev/null +++ b/deploy_template.sh @@ -0,0 +1,19 @@ +#!/bin/bash +set -e + +# Ensure the SDK is built before deployment +echo "Building SDK..." +cd sdk +npm install --legacy-peer-deps +npm run build +cd .. + +# Commit and push changes +echo "Committing and pushing changes..." +git add . +git commit -m "deploy" +git push origin main + +# Build and deploy the e2b template +echo "Building and deploying e2b template..." +cd e2b_template && e2b template build -c "npm run dev" diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..238d2e4 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,38 @@ +import js from '@eslint/js' +import globals from 'globals' +import react from 'eslint-plugin-react' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' + +export default [ + { ignores: ['dist'] }, + { + files: ['**/*.{js,jsx}'], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + parserOptions: { + ecmaVersion: 'latest', + ecmaFeatures: { jsx: true }, + sourceType: 'module', + }, + }, + settings: { react: { version: '18.3' } }, + plugins: { + react, + 'react-hooks': reactHooks, + 'react-refresh': reactRefresh, + }, + rules: { + ...js.configs.recommended.rules, + ...react.configs.recommended.rules, + ...react.configs['jsx-runtime'].rules, + ...reactHooks.configs.recommended.rules, + 'react/jsx-no-target-blank': 'off', + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, + }, +] diff --git a/index.html b/index.html new file mode 100644 index 0000000..8131cdb --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + Base44 APP + + +
+ + + diff --git a/jsconfig.json b/jsconfig.json new file mode 100644 index 0000000..c960864 --- /dev/null +++ b/jsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + }, + "jsx": "react-jsx" + }, + "include": ["src/**/*.js", "src/**/*.jsx"] +} \ No newline at end of file diff --git a/krow logo.jpeg b/krow logo.jpeg new file mode 100644 index 0000000..2b698b8 Binary files /dev/null and b/krow logo.jpeg differ diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..0e4fc57 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,10760 @@ +{ + "name": "base44-app", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "base44-app", + "version": "0.0.0", + "dependencies": { + "@base44/sdk": "^0.8.42", + "@base44/vite-plugin": "^1.0.30", + "@hello-pangea/dnd": "^17.0.0", + "@hookform/resolvers": "^4.1.2", + "@radix-ui/react-accordion": "^1.2.3", + "@radix-ui/react-alert-dialog": "^1.1.6", + "@radix-ui/react-aspect-ratio": "^1.1.2", + "@radix-ui/react-avatar": "^1.1.3", + "@radix-ui/react-checkbox": "^1.1.4", + "@radix-ui/react-collapsible": "^1.1.3", + "@radix-ui/react-context-menu": "^2.2.6", + "@radix-ui/react-dialog": "^1.1.6", + "@radix-ui/react-dropdown-menu": "^2.1.6", + "@radix-ui/react-hover-card": "^1.1.6", + "@radix-ui/react-label": "^2.1.2", + "@radix-ui/react-menubar": "^1.1.6", + "@radix-ui/react-navigation-menu": "^1.2.5", + "@radix-ui/react-popover": "^1.1.6", + "@radix-ui/react-progress": "^1.1.2", + "@radix-ui/react-radio-group": "^1.2.3", + "@radix-ui/react-scroll-area": "^1.2.3", + "@radix-ui/react-select": "^2.1.6", + "@radix-ui/react-separator": "^1.1.2", + "@radix-ui/react-slider": "^1.2.3", + "@radix-ui/react-slot": "^1.1.2", + "@radix-ui/react-switch": "^1.1.3", + "@radix-ui/react-tabs": "^1.1.3", + "@radix-ui/react-toggle": "^1.1.2", + "@radix-ui/react-toggle-group": "^1.1.2", + "@radix-ui/react-tooltip": "^1.1.8", + "@tanstack/react-query": "^5.84.1", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "cmdk": "^1.0.0", + "date-fns": "^3.6.0", + "embla-carousel-react": "^8.5.2", + "framer-motion": "^12.4.7", + "input-otp": "^1.4.2", + "lodash": "^4.17.21", + "lucide-react": "^0.475.0", + "moment": "^2.30.1", + "next-themes": "^0.4.4", + "react": "^18.2.0", + "react-day-picker": "^8.10.1", + "react-dom": "^18.2.0", + "react-hook-form": "^7.54.2", + "react-leaflet": "^4.2.1", + "react-markdown": "^9.0.1", + "react-quill": "^2.0.0", + "react-resizable-panels": "^2.1.7", + "react-router-dom": "^7.2.0", + "recharts": "^2.15.4", + "sonner": "^2.0.1", + "tailwind-merge": "^3.0.2", + "tailwindcss-animate": "^1.0.7", + "three": "^0.171.0", + "vaul": "^1.1.2", + "xlsx": "^0.18.5", + "zod": "^3.24.2" + }, + "devDependencies": { + "@eslint/js": "^9.19.0", + "@flydotio/dockerfile": "^0.7.8", + "@types/node": "^22.13.5", + "@types/react": "^18.2.66", + "@types/react-dom": "^18.2.22", + "@vitejs/plugin-react": "^4.3.4", + "autoprefixer": "^10.4.20", + "eslint": "^9.19.0", + "eslint-plugin-react": "^7.37.4", + "eslint-plugin-react-hooks": "^5.0.0", + "eslint-plugin-react-refresh": "^0.4.18", + "globals": "^15.14.0", + "postcss": "^8.5.3", + "tailwindcss": "^3.4.17", + "vite": "^6.1.0" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.4.tgz", + "integrity": "sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.4.tgz", + "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.4", + "@babel/parser": "^7.28.4", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.4", + "@babel/types": "^7.28.4", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@base44/sdk": { + "version": "0.8.42", + "resolved": "https://registry.npmjs.org/@base44/sdk/-/sdk-0.8.42.tgz", + "integrity": "sha512-CYJCuO/JyhLgomKwOz1+0hDAO0OSiZhDzz5Kz6u6P4iQROXjIMguxz2+MDWLEiFZUmIJISybgoP3dJts/bLqZw==", + "license": "MIT", + "dependencies": { + "axios": "^1.18.1", + "partysocket": "^0.0.23", + "socket.io-client": "^4.8.3", + "uuid": "^13.0.2" + } + }, + "node_modules/@base44/vite-plugin": { + "version": "1.0.30", + "resolved": "https://registry.npmjs.org/@base44/vite-plugin/-/vite-plugin-1.0.30.tgz", + "integrity": "sha512-KFO+HP3TUf/2vg5cW0LFV7/nHHQyAYqXqPi6jq/hQB64JWhvZBXLlQIwQU0y5mu0JVliFOgLNcwHdwC8J+ekjg==", + "license": "MIT", + "dependencies": { + "@babel/generator": "^7.28.5", + "@babel/parser": "^7.28.5", + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.10.tgz", + "integrity": "sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.10.tgz", + "integrity": "sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.10.tgz", + "integrity": "sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.10.tgz", + "integrity": "sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.10.tgz", + "integrity": "sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.10.tgz", + "integrity": "sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.10.tgz", + "integrity": "sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.10.tgz", + "integrity": "sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.10.tgz", + "integrity": "sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.10.tgz", + "integrity": "sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.10.tgz", + "integrity": "sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.10.tgz", + "integrity": "sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.10.tgz", + "integrity": "sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.10.tgz", + "integrity": "sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.10.tgz", + "integrity": "sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.10.tgz", + "integrity": "sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.10.tgz", + "integrity": "sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.10.tgz", + "integrity": "sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.10.tgz", + "integrity": "sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.10.tgz", + "integrity": "sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.10.tgz", + "integrity": "sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.10.tgz", + "integrity": "sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.10.tgz", + "integrity": "sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.10.tgz", + "integrity": "sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.10.tgz", + "integrity": "sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.10.tgz", + "integrity": "sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz", + "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", + "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.36.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.36.0.tgz", + "integrity": "sha512-uhCbYtYynH30iZErszX78U+nR3pJU3RHGQ57NXy5QupD4SBVwDeU8TNBy+MjMngc1UyIW9noKqsRqfjQTBU2dw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", + "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.15.2", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", + "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz", + "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.3", + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.6.tgz", + "integrity": "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.7.4" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", + "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", + "license": "MIT" + }, + "node_modules/@flydotio/dockerfile": { + "version": "0.7.10", + "resolved": "https://registry.npmjs.org/@flydotio/dockerfile/-/dockerfile-0.7.10.tgz", + "integrity": "sha512-dTXqBjCl7nFmnhlyeDjjPtX+sdfYBWFH9PUKNqAYttvBiczKcYXxr7/0A0wZ+g1FB1tmMzsOzedgr6xap/AB9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.4.1", + "diff": "^7.0.0", + "ejs": "^3.1.10", + "inquirer": "^12.4.1", + "shell-quote": "^1.8.2", + "yargs": "^17.7.2" + }, + "bin": { + "dockerfile": "index.js" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@hello-pangea/dnd": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@hello-pangea/dnd/-/dnd-17.0.0.tgz", + "integrity": "sha512-LDDPOix/5N0j5QZxubiW9T0M0+1PR0rTDWeZF5pu1Tz91UQnuVK4qQ/EjY83Qm2QeX0eM8qDXANfDh3VVqtR4Q==", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.25.6", + "css-box-model": "^1.2.1", + "memoize-one": "^6.0.0", + "raf-schd": "^4.0.3", + "react-redux": "^9.1.2", + "redux": "^5.0.1", + "use-memo-one": "^1.1.3" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@hookform/resolvers": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-4.1.3.tgz", + "integrity": "sha512-Jsv6UOWYTrEFJ/01ZrnwVXs7KDvP8XIo115i++5PWvNkNvkrsTfGiLS6w+eJ57CYtUtDQalUWovCZDHFJ8u1VQ==", + "license": "MIT", + "dependencies": { + "@standard-schema/utils": "^0.3.0" + }, + "peerDependencies": { + "react-hook-form": "^7.0.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@inquirer/ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.0.tgz", + "integrity": "sha512-JWaTfCxI1eTmJ1BIv86vUfjVatOdxwD0DAVKYevY8SazeUUZtW+tNbsdejVO1GYE0GXJW1N1ahmiC3TFd+7wZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/checkbox": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.2.4.tgz", + "integrity": "sha512-2n9Vgf4HSciFq8ttKXk+qy+GsyTXPV1An6QAwe/8bkbbqvG4VW1I/ZY1pNu2rf+h9bdzMLPbRSfcNxkHBy/Ydw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.0", + "@inquirer/core": "^10.2.2", + "@inquirer/figures": "^1.0.13", + "@inquirer/type": "^3.0.8", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/confirm": { + "version": "5.1.18", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.18.tgz", + "integrity": "sha512-MilmWOzHa3Ks11tzvuAmFoAd/wRuaP3SwlT1IZhyMke31FKLxPiuDWcGXhU+PKveNOpAc4axzAgrgxuIJJRmLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.2.2", + "@inquirer/type": "^3.0.8" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.2.2.tgz", + "integrity": "sha512-yXq/4QUnk4sHMtmbd7irwiepjB8jXU0kkFRL4nr/aDBA2mDz13cMakEWdDwX3eSCTkk03kwcndD1zfRAIlELxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.0", + "@inquirer/figures": "^1.0.13", + "@inquirer/type": "^3.0.8", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/editor": { + "version": "4.2.20", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.20.tgz", + "integrity": "sha512-7omh5y5bK672Q+Brk4HBbnHNowOZwrb/78IFXdrEB9PfdxL3GudQyDk8O9vQ188wj3xrEebS2M9n18BjJoI83g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.2.2", + "@inquirer/external-editor": "^1.0.2", + "@inquirer/type": "^3.0.8" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/expand": { + "version": "4.0.20", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.20.tgz", + "integrity": "sha512-Dt9S+6qUg94fEvgn54F2Syf0Z3U8xmnBI9ATq2f5h9xt09fs2IJXSCIXyyVHwvggKWFXEY/7jATRo2K6Dkn6Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.2.2", + "@inquirer/type": "^3.0.8", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/external-editor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.2.tgz", + "integrity": "sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^2.1.0", + "iconv-lite": "^0.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.13.tgz", + "integrity": "sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/input": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.2.4.tgz", + "integrity": "sha512-cwSGpLBMwpwcZZsc6s1gThm0J+it/KIJ+1qFL2euLmSKUMGumJ5TcbMgxEjMjNHRGadouIYbiIgruKoDZk7klw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.2.2", + "@inquirer/type": "^3.0.8" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/number": { + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.20.tgz", + "integrity": "sha512-bbooay64VD1Z6uMfNehED2A2YOPHSJnQLs9/4WNiV/EK+vXczf/R988itL2XLDGTgmhMF2KkiWZo+iEZmc4jqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.2.2", + "@inquirer/type": "^3.0.8" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/password": { + "version": "4.0.20", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.20.tgz", + "integrity": "sha512-nxSaPV2cPvvoOmRygQR+h0B+Av73B01cqYLcr7NXcGXhbmsYfUb8fDdw2Us1bI2YsX+VvY7I7upgFYsyf8+Nug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.0", + "@inquirer/core": "^10.2.2", + "@inquirer/type": "^3.0.8" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/prompts": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.8.6.tgz", + "integrity": "sha512-68JhkiojicX9SBUD8FE/pSKbOKtwoyaVj1kwqLfvjlVXZvOy3iaSWX4dCLsZyYx/5Ur07Fq+yuDNOen+5ce6ig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/checkbox": "^4.2.4", + "@inquirer/confirm": "^5.1.18", + "@inquirer/editor": "^4.2.20", + "@inquirer/expand": "^4.0.20", + "@inquirer/input": "^4.2.4", + "@inquirer/number": "^3.0.20", + "@inquirer/password": "^4.0.20", + "@inquirer/rawlist": "^4.1.8", + "@inquirer/search": "^3.1.3", + "@inquirer/select": "^4.3.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/rawlist": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.8.tgz", + "integrity": "sha512-CQ2VkIASbgI2PxdzlkeeieLRmniaUU1Aoi5ggEdm6BIyqopE9GuDXdDOj9XiwOqK5qm72oI2i6J+Gnjaa26ejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.2.2", + "@inquirer/type": "^3.0.8", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/search": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.1.3.tgz", + "integrity": "sha512-D5T6ioybJJH0IiSUK/JXcoRrrm8sXwzrVMjibuPs+AgxmogKslaafy1oxFiorNI4s3ElSkeQZbhYQgLqiL8h6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.2.2", + "@inquirer/figures": "^1.0.13", + "@inquirer/type": "^3.0.8", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/select": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.3.4.tgz", + "integrity": "sha512-Qp20nySRmfbuJBBsgPU7E/cL62Hf250vMZRzYDcBHty2zdD1kKCnoDFWRr0WO2ZzaXp3R7a4esaVGJUx0E6zvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.0", + "@inquirer/core": "^10.2.2", + "@inquirer/figures": "^1.0.13", + "@inquirer/type": "^3.0.8", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/type": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.8.tgz", + "integrity": "sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@radix-ui/number": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.1.tgz", + "integrity": "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==", + "license": "MIT" + }, + "node_modules/@radix-ui/primitive": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", + "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-accordion": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.12.tgz", + "integrity": "sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collapsible": "1.1.12", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-alert-dialog": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.15.tgz", + "integrity": "sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dialog": "1.1.15", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-arrow": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", + "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-aspect-ratio": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-aspect-ratio/-/react-aspect-ratio-1.1.7.tgz", + "integrity": "sha512-Yq6lvO9HQyPwev1onK1daHCHqXVLzPhSVjmsNjCa2Zcxy2f7uJD2itDtxknv6FzAKCwD1qQkeVDmX/cev13n/g==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-avatar": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.1.10.tgz", + "integrity": "sha512-V8piFfWapM5OmNCXTzVQY+E1rDa53zY+MQ4Y7356v4fFz6vqCyUtIz2rUD44ZEdwg78/jKmMJHj07+C/Z/rcog==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-is-hydrated": "0.1.0", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-checkbox": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.3.3.tgz", + "integrity": "sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collapsible": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.12.tgz", + "integrity": "sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collection": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz", + "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context-menu": { + "version": "2.2.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context-menu/-/react-context-menu-2.2.16.tgz", + "integrity": "sha512-O8morBEW+HsVG28gYDZPTrT9UUovQUlJue5YO836tiTJhuIWBm/zQHc7j388sHWtdH/xUZurK9olD2+pcqx5ww==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-menu": "2.1.16", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz", + "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-direction": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", + "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", + "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-escape-keydown": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dropdown-menu": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.16.tgz", + "integrity": "sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-menu": "2.1.16", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz", + "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", + "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-hover-card": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-hover-card/-/react-hover-card-1.1.15.tgz", + "integrity": "sha512-qgTkjNT1CfKMoP0rcasmlH2r1DAiYicWsDsufxl940sT2wHNEWWv6FMWIQXWhVdmC1d/HYfbhQx60KYyAtKxjg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-id": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", + "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-label": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.7.tgz", + "integrity": "sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menu": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.16.tgz", + "integrity": "sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menubar": { + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menubar/-/react-menubar-1.1.16.tgz", + "integrity": "sha512-EB1FktTz5xRRi2Er974AUQZWg2yVBb1yjip38/lgwtCVRd3a+maUoGHN/xs9Yv8SY8QwbSEb+YrxGadVWbEutA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-menu": "2.1.16", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-navigation-menu": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.14.tgz", + "integrity": "sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.15.tgz", + "integrity": "sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.8.tgz", + "integrity": "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==", + "license": "MIT", + "dependencies": { + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-rect": "1.1.1", + "@radix-ui/react-use-size": "1.1.1", + "@radix-ui/rect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", + "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", + "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-progress": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.7.tgz", + "integrity": "sha512-vPdg/tF6YC/ynuBIJlk1mm7Le0VgW6ub6J2UWnTQ7/D23KXcPI1qy+0vBkgKgd38RCMJavBXpB83HPNFMTb0Fg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-radio-group": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.3.8.tgz", + "integrity": "sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-roving-focus": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz", + "integrity": "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-scroll-area": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.10.tgz", + "integrity": "sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.2.6.tgz", + "integrity": "sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-separator": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.7.tgz", + "integrity": "sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slider": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.3.6.tgz", + "integrity": "sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-switch": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.2.6.tgz", + "integrity": "sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tabs": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.13.tgz", + "integrity": "sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toggle": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.10.tgz", + "integrity": "sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toggle-group": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.11.tgz", + "integrity": "sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-toggle": "1.1.10", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.8.tgz", + "integrity": "sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-visually-hidden": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", + "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", + "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-effect-event": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", + "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", + "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-is-hydrated": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-is-hydrated/-/react-use-is-hydrated-0.1.0.tgz", + "integrity": "sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==", + "license": "MIT", + "dependencies": { + "use-sync-external-store": "^1.5.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", + "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-previous": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz", + "integrity": "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-rect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz", + "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==", + "license": "MIT", + "dependencies": { + "@radix-ui/rect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-size": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz", + "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-visually-hidden": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz", + "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/rect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz", + "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==", + "license": "MIT" + }, + "node_modules/@react-leaflet/core": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@react-leaflet/core/-/core-2.1.0.tgz", + "integrity": "sha512-Qk7Pfu8BSarKGqILj4x7bCSZ1pjuAPZ+qmRwH5S7mDS91VSbVVsJSrW4qA+GPrro8t69gFYVMWb1Zc4yFmPiVg==", + "license": "Hippocratic-2.1", + "peerDependencies": { + "leaflet": "^1.9.0", + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.52.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.0.tgz", + "integrity": "sha512-VxDYCDqOaR7NXzAtvRx7G1u54d2kEHopb28YH/pKzY6y0qmogP3gG7CSiWsq9WvDFxOQMpNEyjVAHZFXfH3o/A==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.52.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.0.tgz", + "integrity": "sha512-pqDirm8koABIKvzL59YI9W9DWbRlTX7RWhN+auR8HXJxo89m4mjqbah7nJZjeKNTNYopqL+yGg+0mhCpf3xZtQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.52.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.0.tgz", + "integrity": "sha512-YCdWlY/8ltN6H78HnMsRHYlPiKvqKagBP1r+D7SSylxX+HnsgXGCmLiV3Y4nSyY9hW8qr8U9LDUx/Lo7M6MfmQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.52.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.0.tgz", + "integrity": "sha512-z4nw6y1j+OOSGzuVbSWdIp1IUks9qNw4dc7z7lWuWDKojY38VMWBlEN7F9jk5UXOkUcp97vA1N213DF+Lz8BRg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.52.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.0.tgz", + "integrity": "sha512-Q/dv9Yvyr5rKlK8WQJZVrp5g2SOYeZUs9u/t2f9cQ2E0gJjYB/BWoedXfUT0EcDJefi2zzVfhcOj8drWCzTviw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.52.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.0.tgz", + "integrity": "sha512-kdBsLs4Uile/fbjZVvCRcKB4q64R+1mUq0Yd7oU1CMm1Av336ajIFqNFovByipciuUQjBCPMxwJhCgfG2re3rg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.52.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.0.tgz", + "integrity": "sha512-aL6hRwu0k7MTUESgkg7QHY6CoqPgr6gdQXRJI1/VbFlUMwsSzPGSR7sG5d+MCbYnJmJwThc2ol3nixj1fvI/zQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.52.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.0.tgz", + "integrity": "sha512-BTs0M5s1EJejgIBJhCeiFo7GZZ2IXWkFGcyZhxX4+8usnIo5Mti57108vjXFIQmmJaRyDwmV59Tw64Ap1dkwMw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.52.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.0.tgz", + "integrity": "sha512-uj672IVOU9m08DBGvoPKPi/J8jlVgjh12C9GmjjBxCTQc3XtVmRkRKyeHSmIKQpvJ7fIm1EJieBUcnGSzDVFyw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.52.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.0.tgz", + "integrity": "sha512-/+IVbeDMDCtB/HP/wiWsSzduD10SEGzIZX2945KSgZRNi4TSkjHqRJtNTVtVb8IRwhJ65ssI56krlLik+zFWkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.52.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.0.tgz", + "integrity": "sha512-U1vVzvSWtSMWKKrGoROPBXMh3Vwn93TA9V35PldokHGqiUbF6erSzox/5qrSMKp6SzakvyjcPiVF8yB1xKr9Pg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.52.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.0.tgz", + "integrity": "sha512-X/4WfuBAdQRH8cK3DYl8zC00XEE6aM472W+QCycpQJeLWVnHfkv7RyBFVaTqNUMsTgIX8ihMjCvFF9OUgeABzw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.52.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.0.tgz", + "integrity": "sha512-xIRYc58HfWDBZoLmWfWXg2Sq8VCa2iJ32B7mqfWnkx5mekekl0tMe7FHpY8I72RXEcUkaWawRvl3qA55og+cwQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.52.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.0.tgz", + "integrity": "sha512-mbsoUey05WJIOz8U1WzNdf+6UMYGwE3fZZnQqsM22FZ3wh1N887HT6jAOjXs6CNEK3Ntu2OBsyQDXfIjouI4dw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.52.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.0.tgz", + "integrity": "sha512-qP6aP970bucEi5KKKR4AuPFd8aTx9EF6BvutvYxmZuWLJHmnq4LvBfp0U+yFDMGwJ+AIJEH5sIP+SNypauMWzg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.52.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.0.tgz", + "integrity": "sha512-nmSVN+F2i1yKZ7rJNKO3G7ZzmxJgoQBQZ/6c4MuS553Grmr7WqR7LLDcYG53Z2m9409z3JLt4sCOhLdbKQ3HmA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.52.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.0.tgz", + "integrity": "sha512-2d0qRo33G6TfQVjaMR71P+yJVGODrt5V6+T0BDYH4EMfGgdC/2HWDVjSSFw888GSzAZUwuska3+zxNUCDco6rQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.52.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.0.tgz", + "integrity": "sha512-A1JalX4MOaFAAyGgpO7XP5khquv/7xKzLIyLmhNrbiCxWpMlnsTYr8dnsWM7sEeotNmxvSOEL7F65j0HXFcFsw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.52.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.0.tgz", + "integrity": "sha512-YQugafP/rH0eOOHGjmNgDURrpYHrIX0yuojOI8bwCyXwxC9ZdTd3vYkmddPX0oHONLXu9Rb1dDmT0VNpjkzGGw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.52.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.0.tgz", + "integrity": "sha512-zYdUYhi3Qe2fndujBqL5FjAFzvNeLxtIqfzNEVKD1I7C37/chv1VxhscWSQHTNfjPCrBFQMnynwA3kpZpZ8w4A==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.52.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.0.tgz", + "integrity": "sha512-fGk03kQylNaCOQ96HDMeT7E2n91EqvCDd3RwvT5k+xNdFCeMGnj5b5hEgTGrQuyidqSsD3zJDQ21QIaxXqTBJw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.52.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.0.tgz", + "integrity": "sha512-6iKDCVSIUQ8jPMoIV0OytRKniaYyy5EbY/RRydmLW8ZR3cEBhxbWl5ro0rkUNe0ef6sScvhbY79HrjRm8i3vDQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", + "license": "MIT" + }, + "node_modules/@standard-schema/utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz", + "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==", + "license": "MIT" + }, + "node_modules/@tanstack/query-core": { + "version": "5.89.0", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.89.0.tgz", + "integrity": "sha512-joFV1MuPhSLsKfTzwjmPDrp8ENfZ9N23ymFu07nLfn3JCkSHy0CFgsyhHTJOmWaumC/WiNIKM0EJyduCF/Ih/Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-query": { + "version": "5.89.0", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.89.0.tgz", + "integrity": "sha512-SXbtWSTSRXyBOe80mszPxpEbaN4XPRUp/i0EfQK1uyj3KCk/c8FuPJNIRwzOVe/OU3rzxrYtiNabsAmk1l714A==", + "license": "MIT", + "dependencies": { + "@tanstack/query-core": "5.89.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^18 || ^19" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/d3-array": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz", + "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==", + "license": "MIT" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" + }, + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", + "license": "MIT" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "license": "MIT", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", + "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", + "license": "MIT" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", + "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", + "license": "MIT", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-shape": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz", + "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==", + "license": "MIT", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", + "license": "MIT" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", + "license": "MIT" + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.18.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.6.tgz", + "integrity": "sha512-r8uszLPpeIWbNKtvWRt/DbVi5zbqZyj1PTmhRMqBMvDnaz1QpmSKujUtJLrqGZeoM8v72MfYggDceY4K1itzWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "license": "MIT" + }, + "node_modules/@types/quill": { + "version": "1.3.10", + "resolved": "https://registry.npmjs.org/@types/quill/-/quill-1.3.10.tgz", + "integrity": "sha512-IhW3fPW+bkt9MLNlycw8u8fWb7oO7W5URC9MfZYHBlA24rex9rs23D5DETChu1zvgVdc5ka64ICjJOgQMr6Shw==", + "license": "MIT", + "dependencies": { + "parchment": "^1.1.2" + } + }, + "node_modules/@types/react": { + "version": "18.3.24", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.24.tgz", + "integrity": "sha512-0dLEBsA1kI3OezMBF8nSsb7Nk19ZnsyE1LLhB8r27KbgU5H4pvuqZLdtE+aUkJVoXgTVuA+iLIwmZ0TuK4tx6A==", + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", + "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", + "devOptional": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^18.0.0" + } + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/@types/use-sync-external-store": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz", + "integrity": "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==", + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "license": "ISC" + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", + "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.27", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/adler-32": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz", + "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/aria-hidden": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", + "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "license": "MIT" + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/autoprefixer": { + "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axios": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.18.1.tgz", + "integrity": "sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.16.0", + "form-data": "^4.0.5", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.6.tgz", + "integrity": "sha512-wrH5NNqren/QMtKUEEJf7z86YjfqW/2uw3IL3/xpqZUC95SSVIFXYQeeGjL6FT/X68IROu6RMehZQS5foy2BXw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.26.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.26.2.tgz", + "integrity": "sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.8.3", + "caniuse-lite": "^1.0.30001741", + "electron-to-chromium": "^1.5.218", + "node-releases": "^2.0.21", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001743", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001743.tgz", + "integrity": "sha512-e6Ojr7RV14Un7dz6ASD0aZDmQPT/A+eZU+nuTNfjqmRrmkmQlnTNWH0SKmqagx9PeW87UVqapSurtAXifmtdmw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/cfb": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz", + "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==", + "license": "Apache-2.0", + "dependencies": { + "adler-32": "~1.3.0", + "crc-32": "~1.2.0" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chardet": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.0.tgz", + "integrity": "sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/class-variance-authority": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", + "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "license": "Apache-2.0", + "dependencies": { + "clsx": "^2.1.1" + }, + "funding": { + "url": "https://polar.sh/cva" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cmdk": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cmdk/-/cmdk-1.1.1.tgz", + "integrity": "sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "^1.1.1", + "@radix-ui/react-dialog": "^1.1.6", + "@radix-ui/react-id": "^1.1.0", + "@radix-ui/react-primitive": "^2.0.2" + }, + "peerDependencies": { + "react": "^18 || ^19 || ^19.0.0-rc", + "react-dom": "^18 || ^19 || ^19.0.0-rc" + } + }, + "node_modules/codepage": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz", + "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-box-model": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz", + "integrity": "sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==", + "license": "MIT", + "dependencies": { + "tiny-invariant": "^1.0.6" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "license": "ISC", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "license": "ISC", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "license": "ISC", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/date-fns": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", + "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js-light": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", + "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==", + "license": "MIT" + }, + "node_modules/decode-named-character-reference": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", + "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/deep-equal": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.2.tgz", + "integrity": "sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==", + "license": "MIT", + "dependencies": { + "is-arguments": "^1.1.1", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.5.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "license": "MIT" + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "license": "Apache-2.0" + }, + "node_modules/diff": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "license": "MIT" + }, + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.222", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.222.tgz", + "integrity": "sha512-gA7psSwSwQRE60CEoLz6JBCQPIxNeuzB2nL8vE03GK/OHxlvykbLyeiumQy1iH5C2f3YbRAZpGCMT12a/9ih9w==", + "dev": true, + "license": "ISC" + }, + "node_modules/embla-carousel": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.6.0.tgz", + "integrity": "sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==", + "license": "MIT" + }, + "node_modules/embla-carousel-react": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/embla-carousel-react/-/embla-carousel-react-8.6.0.tgz", + "integrity": "sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==", + "license": "MIT", + "dependencies": { + "embla-carousel": "8.6.0", + "embla-carousel-reactive-utils": "8.6.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + } + }, + "node_modules/embla-carousel-reactive-utils": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/embla-carousel-reactive-utils/-/embla-carousel-reactive-utils-8.6.0.tgz", + "integrity": "sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A==", + "license": "MIT", + "peerDependencies": { + "embla-carousel": "8.6.0" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/engine.io-client": { + "version": "6.6.5", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.5.tgz", + "integrity": "sha512-QCwxUDULPlXv8F6tqMMKx5dNkTe6OaBYRMPYeXKBlyOoKvAmE0ac6pW7fFhSscJ/5SI7666/U/B+MElbsrJlIg==", + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.4.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.20.1", + "xmlhttprequest-ssl": "~2.1.1" + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/es-abstract": { + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", + "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.6", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.10.tgz", + "integrity": "sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.10", + "@esbuild/android-arm": "0.25.10", + "@esbuild/android-arm64": "0.25.10", + "@esbuild/android-x64": "0.25.10", + "@esbuild/darwin-arm64": "0.25.10", + "@esbuild/darwin-x64": "0.25.10", + "@esbuild/freebsd-arm64": "0.25.10", + "@esbuild/freebsd-x64": "0.25.10", + "@esbuild/linux-arm": "0.25.10", + "@esbuild/linux-arm64": "0.25.10", + "@esbuild/linux-ia32": "0.25.10", + "@esbuild/linux-loong64": "0.25.10", + "@esbuild/linux-mips64el": "0.25.10", + "@esbuild/linux-ppc64": "0.25.10", + "@esbuild/linux-riscv64": "0.25.10", + "@esbuild/linux-s390x": "0.25.10", + "@esbuild/linux-x64": "0.25.10", + "@esbuild/netbsd-arm64": "0.25.10", + "@esbuild/netbsd-x64": "0.25.10", + "@esbuild/openbsd-arm64": "0.25.10", + "@esbuild/openbsd-x64": "0.25.10", + "@esbuild/openharmony-arm64": "0.25.10", + "@esbuild/sunos-x64": "0.25.10", + "@esbuild/win32-arm64": "0.25.10", + "@esbuild/win32-ia32": "0.25.10", + "@esbuild/win32-x64": "0.25.10" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.36.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.36.0.tgz", + "integrity": "sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.3.1", + "@eslint/core": "^0.15.2", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.36.0", + "@eslint/plugin-kit": "^0.3.5", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.37.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", + "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.9", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", + "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.20", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.20.tgz", + "integrity": "sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=8.40" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/event-target-shim": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-6.0.2.tgz", + "integrity": "sha512-8q3LsZjRezbFZ2PN+uP+Q7pnHUMmAOziU2vA2OwoFaKIXxlxl38IylhSSgUorWu/rf4er67w0ikBqjBFk/pomA==", + "license": "MIT", + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eventemitter3": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-2.0.3.tgz", + "integrity": "sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg==", + "license": "MIT" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.1.2.tgz", + "integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==", + "license": "Apache-2.0" + }, + "node_modules/fast-equals": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.2.2.tgz", + "integrity": "sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.4", + "mime-types": "^2.1.35" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/frac": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", + "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/framer-motion": { + "version": "12.23.16", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.23.16.tgz", + "integrity": "sha512-N81A8hiHqVsexOzI3wzkibyLURW1nEJsZaRuctPhG4AdbbciYu+bKJq9I2lQFzAO4Bx3h4swI6pBbF/Hu7f7BA==", + "license": "MIT", + "dependencies": { + "motion-dom": "^12.23.12", + "motion-utils": "^12.23.6", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", + "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/html-url-attributes": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.1.tgz", + "integrity": "sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inline-style-parser": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", + "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==", + "license": "MIT" + }, + "node_modules/input-otp": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/input-otp/-/input-otp-1.4.2.tgz", + "integrity": "sha512-l3jWwYNvrEa6NTCt7BECfCm48GvwuZzkoeG3gBL2w4CHeOXW3eKFmf9UNYkNfYc3mxMrthMnxjIE07MT0zLBQA==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" + } + }, + "node_modules/inquirer": { + "version": "12.9.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-12.9.6.tgz", + "integrity": "sha512-603xXOgyfxhuis4nfnWaZrMaotNT0Km9XwwBNWUKbIDqeCY89jGr2F9YPEMiNhU6XjIP4VoWISMBFfcc5NgrTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.0", + "@inquirer/core": "^10.2.2", + "@inquirer/prompts": "^7.8.6", + "@inquirer/type": "^3.0.8", + "mute-stream": "^2.0.0", + "run-async": "^4.0.5", + "rxjs": "^7.8.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-arguments": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.9.4", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", + "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.6", + "filelist": "^1.0.4", + "picocolors": "^1.1.1" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/leaflet": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz", + "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==", + "license": "BSD-2-Clause", + "peer": true + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lucide-react": { + "version": "0.475.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.475.0.tgz", + "integrity": "sha512-NJzvVu1HwFVeZ+Gwq2q00KygM1aBhy/ZrhY9FsAgJtpB+E4R7uxRk9M2iKvHa6/vNxZydIB59htha4c2vvwvVg==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", + "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", + "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/motion-dom": { + "version": "12.23.12", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.23.12.tgz", + "integrity": "sha512-RcR4fvMCTESQBD/uKQe49D5RUeDOokkGRmz4ceaJKDBgHYtZtntC/s2vLvY38gqGaytinij/yi3hMcWVcEF5Kw==", + "license": "MIT", + "dependencies": { + "motion-utils": "^12.23.6" + } + }, + "node_modules/motion-utils": { + "version": "12.23.6", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.23.6.tgz", + "integrity": "sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==", + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/next-themes": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.4.6.tgz", + "integrity": "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" + } + }, + "node_modules/node-releases": { + "version": "2.0.21", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.21.tgz", + "integrity": "sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, + "node_modules/parchment": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/parchment/-/parchment-1.1.4.tgz", + "integrity": "sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg==", + "license": "BSD-3-Clause" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/partysocket": { + "version": "0.0.23", + "resolved": "https://registry.npmjs.org/partysocket/-/partysocket-0.0.23.tgz", + "integrity": "sha512-S43vtjJ///wvzxf0Pw8yD4HVGUDiJSmP1tJQjEzYUG6L7Id63+1CTcgZ0FXTy5BGHe8CuKNyO6bYd4LpOcy4QQ==", + "license": "ISC", + "dependencies": { + "event-target-shim": "^6.0.2" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-import/node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/postcss-js": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", + "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/quill": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/quill/-/quill-1.3.7.tgz", + "integrity": "sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==", + "license": "BSD-3-Clause", + "dependencies": { + "clone": "^2.1.1", + "deep-equal": "^1.0.1", + "eventemitter3": "^2.0.3", + "extend": "^3.0.2", + "parchment": "^1.1.4", + "quill-delta": "^3.6.2" + } + }, + "node_modules/quill-delta": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-3.6.3.tgz", + "integrity": "sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==", + "license": "MIT", + "dependencies": { + "deep-equal": "^1.0.1", + "extend": "^3.0.2", + "fast-diff": "1.1.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/raf-schd": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/raf-schd/-/raf-schd-4.0.3.tgz", + "integrity": "sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ==", + "license": "MIT" + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-day-picker": { + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-8.10.1.tgz", + "integrity": "sha512-TMx7fNbhLk15eqcMt+7Z7S2KF7mfTId/XJDjKE8f+IUcFn0l08/kI4FiYTL/0yuOLmEcbR4Fwe3GJf/NiiMnPA==", + "license": "MIT", + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/gpbl" + }, + "peerDependencies": { + "date-fns": "^2.28.0 || ^3.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-hook-form": { + "version": "7.63.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.63.0.tgz", + "integrity": "sha512-ZwueDMvUeucovM2VjkCf7zIHcs1aAlDimZu2Hvel5C5907gUzMpm4xCrQXtRzCvsBqFjonB4m3x4LzCFI1ZKWA==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18 || ^19" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/react-leaflet": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/react-leaflet/-/react-leaflet-4.2.1.tgz", + "integrity": "sha512-p9chkvhcKrWn/H/1FFeVSqLdReGwn2qmiobOQGO3BifX+/vV/39qhY8dGqbdcPh1e6jxh/QHriLXr7a4eLFK4Q==", + "license": "Hippocratic-2.1", + "dependencies": { + "@react-leaflet/core": "^2.1.0" + }, + "peerDependencies": { + "leaflet": "^1.9.0", + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/react-markdown": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-9.1.0.tgz", + "integrity": "sha512-xaijuJB0kzGiUdG7nc2MOMDUDBWPyGAjZtUrow9XxUeua8IqeP+VlIfAZ3bphpcLTnSZXz6z9jcVC/TCwbfgdw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "html-url-attributes": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "unified": "^11.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=18", + "react": ">=18" + } + }, + "node_modules/react-quill": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/react-quill/-/react-quill-2.0.0.tgz", + "integrity": "sha512-4qQtv1FtCfLgoD3PXAur5RyxuUbPXQGOHgTlFie3jtxp43mXDtzCKaOgQ3mLyZfi1PUlyjycfivKelFhy13QUg==", + "license": "MIT", + "dependencies": { + "@types/quill": "^1.3.10", + "lodash": "^4.17.4", + "quill": "^1.3.7" + }, + "peerDependencies": { + "react": "^16 || ^17 || ^18", + "react-dom": "^16 || ^17 || ^18" + } + }, + "node_modules/react-redux": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz", + "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==", + "license": "MIT", + "dependencies": { + "@types/use-sync-external-store": "^0.0.6", + "use-sync-external-store": "^1.4.0" + }, + "peerDependencies": { + "@types/react": "^18.2.25 || ^19", + "react": "^18.0 || ^19", + "redux": "^5.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "redux": { + "optional": true + } + } + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-remove-scroll": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.1.tgz", + "integrity": "sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==", + "license": "MIT", + "dependencies": { + "react-remove-scroll-bar": "^2.3.7", + "react-style-singleton": "^2.2.3", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.3", + "use-sidecar": "^1.1.3" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", + "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", + "license": "MIT", + "dependencies": { + "react-style-singleton": "^2.2.2", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-resizable-panels": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/react-resizable-panels/-/react-resizable-panels-2.1.9.tgz", + "integrity": "sha512-z77+X08YDIrgAes4jl8xhnUu1LNIRp4+E7cv4xHmLOxxUPO/ML7PSrE813b90vj7xvQ1lcf7g2uA9GeMZonjhQ==", + "license": "MIT", + "peerDependencies": { + "react": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + } + }, + "node_modules/react-router": { + "version": "7.9.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.9.1.tgz", + "integrity": "sha512-pfAByjcTpX55mqSDGwGnY9vDCpxqBLASg0BMNAuMmpSGESo/TaOUG6BllhAtAkCGx8Rnohik/XtaqiYUJtgW2g==", + "license": "MIT", + "dependencies": { + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.9.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.9.1.tgz", + "integrity": "sha512-U9WBQssBE9B1vmRjo9qTM7YRzfZ3lUxESIZnsf4VjR/lXYz9MHjvOxHzr/aUm4efpktbVOrF09rL/y4VHa8RMw==", + "license": "MIT", + "dependencies": { + "react-router": "7.9.1" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/react-smooth": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.4.tgz", + "integrity": "sha512-gnGKTpYwqL0Iii09gHobNolvX4Kiq4PKx6eWBCYYix+8cdw+cGo3do906l1NBPKkSWx1DghC1dlWG9L2uGd61Q==", + "license": "MIT", + "dependencies": { + "fast-equals": "^5.0.1", + "prop-types": "^15.8.1", + "react-transition-group": "^4.4.5" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", + "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", + "license": "MIT", + "dependencies": { + "get-nonce": "^1.0.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/recharts": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.15.4.tgz", + "integrity": "sha512-UT/q6fwS3c1dHbXv2uFgYJ9BMFHu3fwnd7AYZaEQhXuYQ4hgsxLvsUXzGdKeZrW5xopzDCvuA2N41WJ88I7zIw==", + "license": "MIT", + "dependencies": { + "clsx": "^2.0.0", + "eventemitter3": "^4.0.1", + "lodash": "^4.17.21", + "react-is": "^18.3.1", + "react-smooth": "^4.0.4", + "recharts-scale": "^0.4.4", + "tiny-invariant": "^1.3.1", + "victory-vendor": "^36.6.8" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/recharts-scale": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz", + "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==", + "license": "MIT", + "dependencies": { + "decimal.js-light": "^2.4.1" + } + }, + "node_modules/recharts/node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" + }, + "node_modules/recharts/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" + }, + "node_modules/redux": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", + "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", + "license": "MIT" + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.52.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.0.tgz", + "integrity": "sha512-+IuescNkTJQgX7AkIDtITipZdIGcWF0pnVvZTWStiazUmcGA2ag8dfg0urest2XlXUi9kuhfQ+qmdc5Stc3z7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.52.0", + "@rollup/rollup-android-arm64": "4.52.0", + "@rollup/rollup-darwin-arm64": "4.52.0", + "@rollup/rollup-darwin-x64": "4.52.0", + "@rollup/rollup-freebsd-arm64": "4.52.0", + "@rollup/rollup-freebsd-x64": "4.52.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.52.0", + "@rollup/rollup-linux-arm-musleabihf": "4.52.0", + "@rollup/rollup-linux-arm64-gnu": "4.52.0", + "@rollup/rollup-linux-arm64-musl": "4.52.0", + "@rollup/rollup-linux-loong64-gnu": "4.52.0", + "@rollup/rollup-linux-ppc64-gnu": "4.52.0", + "@rollup/rollup-linux-riscv64-gnu": "4.52.0", + "@rollup/rollup-linux-riscv64-musl": "4.52.0", + "@rollup/rollup-linux-s390x-gnu": "4.52.0", + "@rollup/rollup-linux-x64-gnu": "4.52.0", + "@rollup/rollup-linux-x64-musl": "4.52.0", + "@rollup/rollup-openharmony-arm64": "4.52.0", + "@rollup/rollup-win32-arm64-msvc": "4.52.0", + "@rollup/rollup-win32-ia32-msvc": "4.52.0", + "@rollup/rollup-win32-x64-gnu": "4.52.0", + "@rollup/rollup-win32-x64-msvc": "4.52.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-async": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-4.0.6.tgz", + "integrity": "sha512-IoDlSLTs3Yq593mb3ZoKWKXMNu3UpObxhgA/Xuid5p4bbfi2jdY1Hj0m1K+0/tEuQTxIGMhQDqGjKb7RuxGpAQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "license": "MIT" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/socket.io-client": { + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.3.tgz", + "integrity": "sha512-uP0bpjWrjQmUt5DTHq9RuoCBdFJF10cdX9X+a368j/Ft0wmaVgxlrjvK3kjvgCODOMMOz9lcaRzxmso0bTWZ/g==", + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.4.1", + "engine.io-client": "~6.6.1", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.6.tgz", + "integrity": "sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg==", + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.4.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/sonner": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/sonner/-/sonner-2.0.7.tgz", + "integrity": "sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==", + "license": "MIT", + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/ssf": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz", + "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==", + "license": "Apache-2.0", + "dependencies": { + "frac": "~1.1.2" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-to-js": { + "version": "1.1.17", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.17.tgz", + "integrity": "sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA==", + "license": "MIT", + "dependencies": { + "style-to-object": "1.0.9" + } + }, + "node_modules/style-to-object": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.9.tgz", + "integrity": "sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.4" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwind-merge": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.3.1.tgz", + "integrity": "sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.17", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", + "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.6", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss-animate": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", + "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", + "license": "MIT", + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders" + } + }, + "node_modules/tailwindcss/node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/three": { + "version": "0.171.0", + "resolved": "https://registry.npmjs.org/three/-/three-0.171.0.tgz", + "integrity": "sha512-Y/lAXPaKZPcEdkKjh0JOAHVv8OOnv/NDJqm0wjfCzyQmfKxV7zvkwsnBgPBKTzJHToSOhRGQAGbPJObT59B/PQ==", + "license": "MIT" + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "license": "Apache-2.0" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-callback-ref": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", + "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-memo-one": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-memo-one/-/use-memo-one-1.1.3.tgz", + "integrity": "sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/use-sidecar": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", + "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", + "license": "MIT", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sync-external-store": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", + "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/uuid": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-13.0.2.tgz", + "integrity": "sha512-vzi9uRZ926x4XV73S/4qQaTwPXM2JBj6/6lI/byHH1jOpCzb0zDbfytgA9LcN/hzb2l7WQSQnxITOVx5un/wGw==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist-node/bin/uuid" + } + }, + "node_modules/vaul": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vaul/-/vaul-1.1.2.tgz", + "integrity": "sha512-ZFkClGpWyI2WUQjdLJ/BaGuV6AVQiJ3uELGk3OYtP+B6yCO7Cmn9vPFXVJkRaGkOJu3m8bQMgtyzNHixULceQA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-dialog": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" + } + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/victory-vendor": { + "version": "36.9.2", + "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz", + "integrity": "sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==", + "license": "MIT AND ISC", + "dependencies": { + "@types/d3-array": "^3.0.3", + "@types/d3-ease": "^3.0.0", + "@types/d3-interpolate": "^3.0.1", + "@types/d3-scale": "^4.0.2", + "@types/d3-shape": "^3.1.0", + "@types/d3-time": "^3.0.0", + "@types/d3-timer": "^3.0.0", + "d3-array": "^3.1.6", + "d3-ease": "^3.0.1", + "d3-interpolate": "^3.0.1", + "d3-scale": "^4.0.2", + "d3-shape": "^3.1.0", + "d3-time": "^3.0.0", + "d3-timer": "^3.0.1" + } + }, + "node_modules/vite": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.6.tgz", + "integrity": "sha512-0msEVHJEScQbhkbVTb/4iHZdJ6SXp/AvxL2sjwYQFfBqleHtnCqv1J3sa9zbWz/6kW1m9Tfzn92vW+kZ1WV6QA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wmf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz", + "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/word": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz", + "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ws": { + "version": "8.20.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.1.tgz", + "integrity": "sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xlsx": { + "version": "0.18.5", + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz", + "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==", + "license": "Apache-2.0", + "dependencies": { + "adler-32": "~1.3.0", + "cfb": "~1.2.1", + "codepage": "~1.15.0", + "crc-32": "~1.2.1", + "ssf": "~0.11.2", + "wmf": "~1.0.1", + "word": "~0.3.0" + }, + "bin": { + "xlsx": "bin/xlsx.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/xmlhttprequest-ssl": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz", + "integrity": "sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", + "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", + "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..4e3d473 --- /dev/null +++ b/package.json @@ -0,0 +1,90 @@ +{ + "name": "base44-app", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "@base44/sdk": "^0.8.42", + "@base44/vite-plugin": "^1.0.30", + "@hello-pangea/dnd": "^17.0.0", + "@hookform/resolvers": "^4.1.2", + "@radix-ui/react-accordion": "^1.2.3", + "@radix-ui/react-alert-dialog": "^1.1.6", + "@radix-ui/react-aspect-ratio": "^1.1.2", + "@radix-ui/react-avatar": "^1.1.3", + "@radix-ui/react-checkbox": "^1.1.4", + "@radix-ui/react-collapsible": "^1.1.3", + "@radix-ui/react-context-menu": "^2.2.6", + "@radix-ui/react-dialog": "^1.1.6", + "@radix-ui/react-dropdown-menu": "^2.1.6", + "@radix-ui/react-hover-card": "^1.1.6", + "@radix-ui/react-label": "^2.1.2", + "@radix-ui/react-menubar": "^1.1.6", + "@radix-ui/react-navigation-menu": "^1.2.5", + "@radix-ui/react-popover": "^1.1.6", + "@radix-ui/react-progress": "^1.1.2", + "@radix-ui/react-radio-group": "^1.2.3", + "@radix-ui/react-scroll-area": "^1.2.3", + "@radix-ui/react-select": "^2.1.6", + "@radix-ui/react-separator": "^1.1.2", + "@radix-ui/react-slider": "^1.2.3", + "@radix-ui/react-slot": "^1.1.2", + "@radix-ui/react-switch": "^1.1.3", + "@radix-ui/react-tabs": "^1.1.3", + "@radix-ui/react-toggle": "^1.1.2", + "@radix-ui/react-toggle-group": "^1.1.2", + "@radix-ui/react-tooltip": "^1.1.8", + "@tanstack/react-query": "^5.84.1", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "cmdk": "^1.0.0", + "date-fns": "^3.6.0", + "embla-carousel-react": "^8.5.2", + "framer-motion": "^12.4.7", + "input-otp": "^1.4.2", + "lodash": "^4.17.21", + "lucide-react": "^0.475.0", + "moment": "^2.30.1", + "next-themes": "^0.4.4", + "react": "^18.2.0", + "react-day-picker": "^8.10.1", + "react-dom": "^18.2.0", + "react-hook-form": "^7.54.2", + "react-leaflet": "^4.2.1", + "react-markdown": "^9.0.1", + "react-quill": "^2.0.0", + "react-resizable-panels": "^2.1.7", + "react-router-dom": "^7.2.0", + "recharts": "^2.15.4", + "sonner": "^2.0.1", + "tailwind-merge": "^3.0.2", + "tailwindcss-animate": "^1.0.7", + "three": "^0.171.0", + "vaul": "^1.1.2", + "xlsx": "^0.18.5", + "zod": "^3.24.2" + }, + "devDependencies": { + "@eslint/js": "^9.19.0", + "@flydotio/dockerfile": "^0.7.8", + "@types/node": "^22.13.5", + "@types/react": "^18.2.66", + "@types/react-dom": "^18.2.22", + "@vitejs/plugin-react": "^4.3.4", + "autoprefixer": "^10.4.20", + "eslint": "^9.19.0", + "eslint-plugin-react": "^7.37.4", + "eslint-plugin-react-hooks": "^5.0.0", + "eslint-plugin-react-refresh": "^0.4.18", + "globals": "^15.14.0", + "postcss": "^8.5.3", + "tailwindcss": "^3.4.17", + "vite": "^6.1.0" + } +} diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..2e7af2b --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/src/API_documentation.md b/src/API_documentation.md new file mode 100644 index 0000000..e69de29 diff --git a/src/App.css b/src/App.css new file mode 100644 index 0000000..e69de29 diff --git a/src/App.jsx b/src/App.jsx new file mode 100644 index 0000000..f637a4d --- /dev/null +++ b/src/App.jsx @@ -0,0 +1,142 @@ +import './App.css' +import { Toaster } from "@/components/ui/toaster" +import { QueryClientProvider } from '@tanstack/react-query' +import { queryClientInstance } from '@/lib/query-client' +import VisualEditAgent from '@/lib/VisualEditAgent' +import NavigationTracker from '@/lib/NavigationTracker' +import { pagesConfig } from './pages.config' +import { BrowserRouter as Router, Route, Routes, useLocation } from 'react-router-dom'; +import { setupIframeMessaging } from './lib/iframe-messaging'; +import PageNotFound from './lib/PageNotFound'; +import { AuthProvider, useAuth } from '@/lib/AuthContext'; +import UserNotRegisteredError from '@/components/UserNotRegisteredError'; +import FeatureReport from './pages/FeatureReport'; +import LandingPage from './pages/LandingPage'; +import KrowX from './pages/KrowX'; +import AboutUs from './pages/AboutUs'; +import ThePlatform from './pages/ThePlatform'; +import ForWorkers from './pages/ForWorkers'; +import PredictiveIntelligence from './pages/PredictiveIntelligence'; +import KrowEdgePage from './pages/KrowEdge'; +import Recruiting from './pages/Recruiting'; +import Communications from './pages/Communications'; +import Announcements from './pages/Announcements'; +import StaffProfileDemo from './pages/StaffProfileDemo'; +import CapabilityMap from './pages/CapabilityMap'; +import PlatformOnboarding from './pages/PlatformOnboarding'; +import DailyPL from './pages/DailyPL'; +import Sales from './pages/Sales'; +import PayrollDetail from './pages/PayrollDetail'; +import EmployeeTimecard from './pages/EmployeeTimecard'; +import ClientLaborReport from './pages/ClientLaborReport'; +import WorkforceNetwork from './pages/WorkforceNetwork'; +import KrowAI from './pages/KrowAI'; +import StaffingMarketplace from './pages/StaffingMarketplace'; +import KrowConsole from './pages/KrowConsole'; +import KrowCommand from './pages/KrowCommand'; +import DemandSupply from './pages/DemandSupply'; +import DocumentApproval from './pages/DocumentApproval'; +import VendorReports from './pages/VendorReports'; + +const { Pages, Layout, mainPage } = pagesConfig; +const mainPageKey = mainPage ?? Object.keys(Pages)[0]; +const MainPage = mainPageKey ? Pages[mainPageKey] : <>; + +setupIframeMessaging(); + +const LayoutWrapper = ({ children, currentPageName }) => Layout ? + {children} + : <>{children}; + +const AuthenticatedApp = () => { + const { isLoadingAuth, isLoadingPublicSettings, authError, isAuthenticated, navigateToLogin } = useAuth(); + const location = useLocation(); + + // Show loading spinner while checking app public settings or auth + if (isLoadingPublicSettings || isLoadingAuth) { + return ( +
+
+
+ ); + } + + // Handle authentication errors + if (authError) { + if (authError.type === 'user_not_registered') { + return ; + } else if (authError.type === 'auth_required') { + // Redirect to login automatically + navigateToLogin(); + return null; + } + } + + // Render the main app + + if (location.pathname === '/LandingPage') { + return ( + + } /> + + ); + } + + return ( + + + } /> + {Object.entries(Pages).map(([path, Page]) => ( + } /> + ))} + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + + + ); +}; + + +function App() { + + return ( + + + + + + + + + + + ) +} + +export default App \ No newline at end of file diff --git a/src/Layout.jsx b/src/Layout.jsx new file mode 100644 index 0000000..84fed1a --- /dev/null +++ b/src/Layout.jsx @@ -0,0 +1,739 @@ +import React from "react"; +import { Link, useLocation, useNavigate } from "react-router-dom"; +import { createPageUrl } from "@/utils"; +import { base44 } from "@/api/base44Client"; +import { useQuery } from "@tanstack/react-query"; +import { + Users, LayoutDashboard, UserPlus, Calendar, Briefcase, FileText, + DollarSign, Award, HelpCircle, BarChart3, Activity, Menu, MessageSquare, + Package, TrendingUp, Clipboard, LogOut, Shield, MapPin, Bell, CloudOff, Megaphone, + RefreshCw, User, Search, ShoppingCart, Home, Settings as SettingsIcon, MoreVertical, + Building2, Sparkles, CheckSquare, UserCheck, Store, GraduationCap, ArrowLeft, FolderOpen, Brain, Zap, Network, Cpu, Command, BadgeCheck, + ChevronDown, ChevronRight +} from "lucide-react"; +import { Button } from "@/components/ui/button"; +import { + Sheet, + SheetContent, + SheetTrigger, +} from "@/components/ui/sheet"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuLabel, + DropdownMenuSeparator, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu"; +import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; +import { Badge } from "./components/ui/badge"; +import krowLogo from "@/assets/krow-logo.webp"; + +import ChatBubble from "./components/chat/ChatBubble"; +import RoleSwitcher from "./components/dev/RoleSwitcher"; +import NotificationPanel from "./components/notifications/NotificationPanel"; +import { NotificationEngine } from "./components/notifications/NotificationEngine"; +import { Toaster } from "./components/ui/toaster"; +import OwliverProvider from "./components/owliver/OwliverProvider"; +import OwliverShell from "./components/owliver/OwliverShell"; + +// Navigation items for each role - organized by categories +const roleNavigationMap = { + admin: [ + { category: "Overview", items: [ + { title: "KROW Command", url: createPageUrl("KrowCommand"), icon: Command }, + { title: "Home", url: createPageUrl("Dashboard"), icon: LayoutDashboard }, + { title: "AI Console", url: createPageUrl("KrowConsole"), icon: Cpu }, + { title: "Savings Engine", url: createPageUrl("SavingsEngine"), icon: TrendingUp }, + ]}, + { category: "Operations", items: [ + { title: "Orders", url: createPageUrl("Events"), icon: Calendar }, + { title: "Schedule", url: createPageUrl("Schedule"), icon: Calendar }, + { title: "Staff Availability", url: createPageUrl("StaffAvailability"), icon: Users }, + { title: "Task Board", url: createPageUrl("TaskBoard"), icon: CheckSquare }, + ]}, + { category: "Management", items: [ + { title: "Enterprises", url: createPageUrl("EnterpriseManagement"), icon: Building2 }, + { title: "Sectors", url: createPageUrl("SectorManagement"), icon: MapPin }, + { title: "Partners", url: createPageUrl("PartnerManagement"), icon: Briefcase }, + { title: "Vendors", url: createPageUrl("VendorManagement"), icon: Package }, + ]}, + { category: "Workforce", items: [ + { title: "Staff Directory", url: createPageUrl("StaffDirectory"), icon: Users }, + { title: "Onboarding", url: createPageUrl("StaffOnboarding"), icon: GraduationCap }, + { title: "Document Approval", url: createPageUrl("DocumentApproval"), icon: BadgeCheck }, + { title: "Teams", url: createPageUrl("Teams"), icon: UserCheck }, + { title: "Certifications", url: createPageUrl("Certification"), icon: Award }, + ]}, + { category: "Finance", items: [ + { title: "Invoices", url: createPageUrl("Invoices"), icon: FileText }, + { title: "Payroll", url: createPageUrl("Payroll"), icon: DollarSign }, + ]}, + { category: "Analytics", items: [ + { title: "Predictive AI", url: createPageUrl("PredictiveIntelligence"), icon: Brain }, + { title: "KROW EDGE", url: createPageUrl("KrowEdge"), icon: Zap }, + { title: "AI Recruiting", url: createPageUrl("Recruiting"), icon: UserPlus }, + { title: "Trust Network", url: createPageUrl("WorkforceNetwork"), icon: Network }, + { title: "Reports", url: createPageUrl("Reports"), icon: BarChart3 }, + { title: "Activity Log", url: createPageUrl("ActivityLog"), icon: Activity }, + ]}, + { category: "Communication", items: [ + { title: "Communications Hub", url: createPageUrl("Communications"), icon: MessageSquare }, + { title: "Announcements", url: createPageUrl("Announcements"), icon: Megaphone }, + { title: "Messages", url: createPageUrl("Messages"), icon: MessageSquare }, + { title: "Tutorials", url: createPageUrl("Tutorials"), icon: Sparkles }, + { title: "Feature Report", url: createPageUrl("FeatureReport"), icon: FileText }, + ]}, + { category: "Settings", items: [ + { title: "User Management", url: createPageUrl("UserManagement"), icon: Users }, + { title: "Permissions", url: createPageUrl("Permissions"), icon: Shield }, + { title: "Settings", url: createPageUrl("Settings"), icon: SettingsIcon }, + ]}, + ], + procurement: [ + { category: "Overview", items: [ + { title: "Home", url: createPageUrl("ProcurementDashboard"), icon: LayoutDashboard }, + + { title: "AI Console", url: createPageUrl("KrowConsole"), icon: Cpu }, + { title: "Savings Engine", url: createPageUrl("SavingsEngine"), icon: TrendingUp }, + ]}, + { category: "Operations", items: [ + { title: "Task Board", url: createPageUrl("TaskBoard"), icon: CheckSquare }, + ]}, + { category: "Network", items: [ + { title: "Enterprises", url: createPageUrl("EnterpriseManagement"), icon: Building2 }, + { title: "Sectors", url: createPageUrl("SectorManagement"), icon: MapPin }, + { title: "Partners", url: createPageUrl("PartnerManagement"), icon: Briefcase }, + { title: "Vendors", url: createPageUrl("VendorManagement"), icon: Package }, + ]}, + { category: "Compliance", items: [ + { title: "Compliance", url: createPageUrl("WorkforceCompliance"), icon: Shield }, + { title: "Rate Matrix", url: createPageUrl("VendorRateCard"), icon: DollarSign }, + { title: "Teams", url: createPageUrl("Teams"), icon: UserCheck }, + ]}, + { category: "Finance", items: [ + { title: "Invoices", url: createPageUrl("Invoices"), icon: FileText }, + ]}, + { category: "Analytics", items: [ + { title: "Predictive AI", url: createPageUrl("PredictiveIntelligence"), icon: Brain }, + { title: "Reports", url: createPageUrl("Reports"), icon: BarChart3 }, + { title: "Messages", url: createPageUrl("Messages"), icon: MessageSquare }, + ]}, + { category: "Settings", items: [ + { title: "Permissions", url: createPageUrl("Permissions"), icon: Shield }, + ]}, + ], + operator: [ + { category: "Overview", items: [ + { title: "Home", url: createPageUrl("OperatorDashboard"), icon: LayoutDashboard }, + + { title: "AI Console", url: createPageUrl("KrowConsole"), icon: Cpu }, + { title: "Savings Engine", url: createPageUrl("SavingsEngine"), icon: TrendingUp }, + ]}, + { category: "Operations", items: [ + { title: "Orders", url: createPageUrl("Events"), icon: Calendar }, + { title: "Task Board", url: createPageUrl("TaskBoard"), icon: CheckSquare }, + ]}, + { category: "Network", items: [ + { title: "My Sectors", url: createPageUrl("SectorManagement"), icon: MapPin }, + { title: "Partners", url: createPageUrl("PartnerManagement"), icon: Briefcase }, + { title: "Vendors", url: createPageUrl("VendorManagement"), icon: Package }, + { title: "Clients", url: createPageUrl("Business"), icon: Users }, + ]}, + { category: "Workforce", items: [ + { title: "Staff Directory", url: createPageUrl("StaffDirectory"), icon: Users }, + { title: "Teams", url: createPageUrl("Teams"), icon: UserCheck }, + ]}, + { category: "Analytics", items: [ + { title: "Invoices", url: createPageUrl("Invoices"), icon: FileText }, + { title: "Reports", url: createPageUrl("Reports"), icon: BarChart3 }, + { title: "Messages", url: createPageUrl("Messages"), icon: MessageSquare }, + ]}, + { category: "Settings", items: [ + { title: "Permissions", url: createPageUrl("Permissions"), icon: Shield }, + ]}, + ], + sector: [ + { category: "Overview", items: [ + { title: "Home", url: createPageUrl("OperatorDashboard"), icon: LayoutDashboard }, + + { title: "AI Console", url: createPageUrl("KrowConsole"), icon: Cpu }, + { title: "Savings Engine", url: createPageUrl("SavingsEngine"), icon: TrendingUp }, + ]}, + { category: "Operations", items: [ + { title: "Orders", url: createPageUrl("Events"), icon: Calendar }, + { title: "Task Board", url: createPageUrl("TaskBoard"), icon: CheckSquare }, + ]}, + { category: "Network", items: [ + { title: "Partners", url: createPageUrl("PartnerManagement"), icon: Briefcase }, + { title: "Vendors", url: createPageUrl("VendorManagement"), icon: Package }, + { title: "Clients", url: createPageUrl("Business"), icon: Users }, + ]}, + { category: "Workforce", items: [ + { title: "Staff Directory", url: createPageUrl("StaffDirectory"), icon: Users }, + { title: "Teams", url: createPageUrl("Teams"), icon: UserCheck }, + ]}, + { category: "Analytics", items: [ + { title: "Invoices", url: createPageUrl("Invoices"), icon: FileText }, + { title: "Reports", url: createPageUrl("Reports"), icon: BarChart3 }, + { title: "Messages", url: createPageUrl("Messages"), icon: MessageSquare }, + ]}, + { category: "Settings", items: [ + { title: "Permissions", url: createPageUrl("Permissions"), icon: Shield }, + ]}, + ], + client: [ + { category: "Overview", items: [ + { title: "Home", url: createPageUrl("ClientDashboard"), icon: LayoutDashboard }, + + { title: "AI Console", url: createPageUrl("KrowConsole"), icon: Cpu }, + { title: "Savings Engine", url: createPageUrl("SavingsEngine"), icon: TrendingUp }, + ]}, + { category: "Orders", items: [ + { title: "My Orders", url: createPageUrl("ClientOrders"), icon: Clipboard }, + { title: "New Order", url: createPageUrl("CreateEvent"), icon: UserPlus }, + { title: "Task Board", url: createPageUrl("TaskBoard"), icon: CheckSquare }, + ]}, + { category: "Marketplace", items: [ + { title: "Staffing Marketplace", url: createPageUrl("StaffingMarketplace"), icon: Store }, + { title: "Vendor Marketplace", url: createPageUrl("VendorMarketplace"), icon: Store }, + { title: "Compare Rates", url: createPageUrl("VendorRateCard"), icon: DollarSign }, + ]}, + { category: "Team", items: [ + { title: "Teams", url: createPageUrl("Teams"), icon: UserCheck }, + { title: "Messages", url: createPageUrl("Messages"), icon: MessageSquare }, + ]}, + { category: "Analytics", items: [ + { title: "Invoices", url: createPageUrl("Invoices"), icon: FileText }, + { title: "Reports", url: createPageUrl("Reports"), icon: BarChart3 }, + ]}, + { category: "Support", items: [ + { title: "Tutorials", url: createPageUrl("Tutorials"), icon: Sparkles }, + { title: "Support", url: createPageUrl("Support"), icon: HelpCircle }, + ]}, + { category: "Settings", items: [ + { title: "Permissions", url: createPageUrl("Permissions"), icon: Shield }, + ]}, + ], + vendor: [ + { category: "Overview", items: [ + { title: "Home", url: createPageUrl("VendorDashboard"), icon: LayoutDashboard }, + + { title: "Performance", url: createPageUrl("VendorPerformance"), icon: TrendingUp }, + ]}, + { category: "Workforce", items: [ + { title: "Onboard Staff", url: createPageUrl("StaffOnboarding"), icon: GraduationCap }, + { title: "Staff Directory", url: createPageUrl("StaffDirectory"), icon: Users }, + { title: "Compliance", url: createPageUrl("VendorCompliance"), icon: Shield }, + { title: "Employee Documents", url: createPageUrl("EmployeeDocuments"), icon: FolderOpen }, + { title: "Document Approval", url: createPageUrl("DocumentApproval"), icon: BadgeCheck }, + { title: "Team", url: createPageUrl("Teams"), icon: UserCheck }, + ]}, + { category: "Operations", items: [ + { title: "Orders", url: createPageUrl("VendorOrders"), icon: FileText }, + { title: "Demand & Supply", url: createPageUrl("DemandSupply"), icon: TrendingUp }, + { title: "Create Order", url: createPageUrl("CreateEvent"), icon: UserPlus }, + { title: "Schedule", url: createPageUrl("Schedule"), icon: Calendar }, + { title: "Staff Availability", url: createPageUrl("StaffAvailability"), icon: Users }, + { title: "Task Board", url: createPageUrl("TaskBoard"), icon: CheckSquare }, + ]}, + { category: "Business", items: [ + { title: "Clients", url: createPageUrl("Business"), icon: Briefcase }, + { title: "Service Rates", url: createPageUrl("VendorRates"), icon: DollarSign }, + { title: "Savings Engine", url: createPageUrl("SavingsEngine"), icon: TrendingUp }, + { title: "AI Recruiting", url: createPageUrl("Recruiting"), icon: UserPlus }, + ]}, + { category: "Finance", items: [ + { title: "Invoices", url: createPageUrl("Invoices"), icon: Clipboard }, + { title: "Sales Tracker", url: createPageUrl("Sales"), icon: TrendingUp }, + { title: "Daily Operating Report", url: createPageUrl("DailyPL"), icon: BarChart3 }, + { title: "Payroll", url: createPageUrl("Payroll"), icon: DollarSign }, + ]}, + { category: "Analytics", items: [ + { title: "Reports", url: createPageUrl("Reports"), icon: BarChart3 }, + { title: "Audit Trail", url: createPageUrl("ActivityLog"), icon: Activity }, + { title: "Messages", url: createPageUrl("Messages"), icon: MessageSquare }, + ]}, + { category: "Settings", items: [ + { title: "Permissions", url: createPageUrl("Permissions"), icon: Shield }, + ]}, + ], + workforce: [ + { category: "Overview", items: [ + { title: "Home", url: createPageUrl("WorkforceDashboard"), icon: LayoutDashboard }, + + { title: "Profile", url: createPageUrl("WorkforceProfile"), icon: Users }, + ]}, + { category: "Work", items: [ + { title: "Shift Requests", url: createPageUrl("WorkerShiftProposals"), icon: Calendar }, + { title: "My Shifts", url: createPageUrl("WorkforceShifts"), icon: Calendar }, + { title: "Task Board", url: createPageUrl("TaskBoard"), icon: CheckSquare }, + ]}, + { category: "Team", items: [ + { title: "Teams", url: createPageUrl("Teams"), icon: UserCheck }, + { title: "Onboarding", url: createPageUrl("StaffOnboarding"), icon: GraduationCap }, + { title: "Messages", url: createPageUrl("Messages"), icon: MessageSquare }, + ]}, + { category: "Growth", items: [ + { title: "Certifications", url: createPageUrl("Certification"), icon: Award }, + { title: "Earnings", url: createPageUrl("WorkforceEarnings"), icon: DollarSign }, + { title: "Reports", url: createPageUrl("Reports"), icon: BarChart3 }, + ]}, + { category: "Settings", items: [ + { title: "Permissions", url: createPageUrl("Permissions"), icon: Shield }, + ]}, + ], +}; + +const getRoleName = (role) => { + const names = { + admin: "KROW Admin", + procurement: "Procurement Manager", + operator: "Operator", + sector: "Sector Manager", + client: "Client", + vendor: "Vendor Partner", + workforce: "Staff Member" + }; + return names[role] || "User"; +}; + +const getRoleDescription = (role) => { + const descriptions = { + admin: "Platform Administrator", + procurement: "Connects Operators, Sectors & Vendors", + operator: "Manages Multiple Sectors", + sector: "Branch Location Manager", + client: "Service Requester", + vendor: "Workforce Provider", + workforce: "Service Professional" + }; + return descriptions[role] || ""; +}; + +const getDashboardUrl = (role) => { + const dashboardMap = { + admin: "Dashboard", + procurement: "ProcurementDashboard", + operator: "OperatorDashboard", + sector: "OperatorDashboard", + client: "ClientDashboard", + vendor: "VendorDashboard", + workforce: "WorkforceDashboard" + }; + return createPageUrl(dashboardMap[role] || "Dashboard"); +}; + +const getLayerName = (role) => { + const layers = { + admin: "KROW Admin", + procurement: "Procurement", + operator: "Operator", + sector: "Sector", + client: "Client", + vendor: "Vendor", + workforce: "Workforce" + }; + return layers[role] || "User"; +}; + +const getLayerColor = (role) => { +const colors = { + admin: "from-[#D4B886] to-[#C8A876]", + procurement: "from-[#0039A6] to-[#3C4F5C]", + operator: "from-[#C8DBDC] to-[#B8CED0]", + sector: "from-[#3C4F5C] to-[#2A3840]", + client: "from-[#C8DBDC] to-[#B8CED0]", + vendor: "from-[#F9E732] to-[#E8D622]", + workforce: "from-[#3C4F5C] to-[#2A3840]" +}; +return colors[role] || "from-[#0039A6] to-[#3C4F5C]"; +}; + +/** + * Categories that are configuration, help or miscellaneous rather than one of + * the primary work areas. They leave the main sidebar and render in the + * existing "More options" menu in the top bar — nothing is deleted, and every + * route still resolves exactly as before. + */ +const SECONDARY_NAV_CATEGORIES = new Set(["Settings", "Support", "Communication"]); + +/** Destinations the "More options" menu already offers; never list them twice. */ +const EXISTING_MENU_URLS = new Set([ + createPageUrl("Messages"), + createPageUrl("Support"), + createPageUrl("NotificationSettings"), + createPageUrl("Settings"), + createPageUrl("Reports"), + createPageUrl("ActivityLog"), +]); + +const navigationFor = (userRole) => roleNavigationMap[userRole] || roleNavigationMap.admin; + +/** The categories that stay in the sidebar, in their existing order. */ +const primaryCategoriesFor = (userRole) => + navigationFor(userRole).filter((group) => !SECONDARY_NAV_CATEGORIES.has(group.category)); + +/** Secondary links, de-duplicated against what the menu already shows. */ +const secondaryItemsFor = (userRole) => + navigationFor(userRole) + .filter((group) => SECONDARY_NAV_CATEGORIES.has(group.category)) + .flatMap((group) => group.items) + .filter((item) => !EXISTING_MENU_URLS.has(item.url)); + +/** + * Category-first sidebar: the top level is the work areas, and a category's + * pages appear only once it is open. One category is open at a time, so the + * sidebar stays about as tall as its category list however many pages a role + * has. + */ +function NavigationMenu({ location, userRole, closeSheet }) { + const categories = primaryCategoriesFor(userRole); + const currentPath = location.pathname; + + const activeCategory = + categories.find((group) => group.items.some((item) => item.url === currentPath)) + ?.category || null; + + const [openCategory, setOpenCategory] = React.useState(activeCategory); + + // Navigating re-opens whichever category owns the new page, so the current + // page is never hidden behind a closed category. Between navigations the + // user's own choice wins — this only re-syncs when the route actually + // changes. (React's documented "adjust state when a prop changes" pattern: + // it re-renders immediately rather than painting a stale frame.) + const syncedPath = React.useRef(currentPath); + if (syncedPath.current !== currentPath) { + syncedPath.current = currentPath; + setOpenCategory(activeCategory); + } + + return ( + + ); +} + +function LayoutChrome({ children }) { + const location = useLocation(); + const navigate = useNavigate(); + const [showNotifications, setShowNotifications] = React.useState(false); + const [mobileMenuOpen, setMobileMenuOpen] = React.useState(false); + + const { data: user } = useQuery({ + queryKey: ['current-user-layout'], + queryFn: () => base44.auth.me(), + }); + + const sampleAvatar = "https://images.unsplash.com/photo-1494790108377-be9c29b29330?w=400&h=400&fit=crop"; + const userAvatar = user?.profile_picture || sampleAvatar; + + const { data: unreadCount = 0 } = useQuery({ + queryKey: ['unread-notifications', user?.id], + queryFn: async () => { + if (!user?.id) return 0; + const notifications = await base44.entities.ActivityLog.filter({ + user_id: user?.id, + is_read: false + }); + return notifications.length; + }, + enabled: !!user?.id, + initialData: 0, + refetchInterval: 10000, + }); + + const userRole = localStorage.getItem("dev_role_override") || user?.user_role || user?.role || "admin"; + // Categories that left the sidebar now live in the "More options" menu. + const secondaryNavItems = secondaryItemsFor(userRole); + const userName = user?.full_name || user?.email || "User"; + const userInitial = userName.charAt(0).toUpperCase(); + + const handleLogout = () => { + base44.auth.logout(); + }; + + const handleRefresh = () => { + window.location.reload(); + }; + + return ( +
+ + +
+
+
+ + + + + + + +
+ setMobileMenuOpen(false)}> + KROW + +
+ + + {userInitial} + +
+

{userName}

+

{getRoleName(userRole)}

+
+
+
+
+ setMobileMenuOpen(false)} /> +
+
+ +
+
+
+ + + KROW +
+

+ KROW + KROW Workforce Control Tower +

+
+ + +
+
+ + +
+
+
+ +
+ {/* Below xl these collapse into the "More options" menu so the header + never overflows a narrow viewport. */} + + + + + + + + + + + + window.location.href = getDashboardUrl(userRole)}> + Home + + window.location.href = createPageUrl("Messages")}> + Messages + + window.location.href = createPageUrl("Support")}> + Help & Support + + + Refresh changes + + + window.location.href = createPageUrl("NotificationSettings")}> + Notification Settings + + window.location.href = createPageUrl("Settings")}> + Settings + + window.location.href = createPageUrl("Reports")}> + Reports + + window.location.href = createPageUrl("ActivityLog")}> + Activity Log + + + {/* Secondary categories lifted out of the sidebar. Already + de-duplicated against the entries above, so Settings and + Messages are not offered twice. */} + {secondaryNavItems.length > 0 && } + {secondaryNavItems.map((item) => ( + window.location.href = item.url} + > + {item.title} + + ))} + + + + Logout + + + + + + + + + + +
+

{userName}

+

{user?.email}

+

{getRoleName(userRole)}

+
+
+ + window.location.href = getDashboardUrl(userRole)}> + Dashboard + + window.location.href = createPageUrl("WorkforceProfile")}> + My Profile + + +
+
+
+
+
+ +
+ + + {/* min-w-0 is required: without it a wide child (table, chart, scheduler) + stretches this flex item and forces horizontal scroll on the page. */} +
+ {children} +
+
+ + setShowNotifications(false)} /> + + + + +
+ ); +} + +export default function Layout({ children }) { + return ( + + {children} + + ); +} \ No newline at end of file diff --git a/src/api/base44Client.js b/src/api/base44Client.js new file mode 100644 index 0000000..7826ba5 --- /dev/null +++ b/src/api/base44Client.js @@ -0,0 +1,13 @@ +import { createClient } from '@base44/sdk'; +import { appParams } from '@/lib/app-params'; + +const { appId, serverUrl, token, functionsVersion } = appParams; + +//Create a client with authentication required +export const base44 = createClient({ + appId, + serverUrl, + token, + functionsVersion, + requiresAuth: false +}); diff --git a/src/api/entities.js b/src/api/entities.js new file mode 100644 index 0000000..92580ee --- /dev/null +++ b/src/api/entities.js @@ -0,0 +1,9 @@ +import { base44 } from './base44Client'; + + +export const Query = base44.entities.Query; + + + +// auth sdk: +export const User = base44.auth; \ No newline at end of file diff --git a/src/api/integrations.js b/src/api/integrations.js new file mode 100644 index 0000000..0280a3a --- /dev/null +++ b/src/api/integrations.js @@ -0,0 +1,24 @@ +import { base44 } from './base44Client'; + + + + +export const Core = base44.integrations.Core; + +export const InvokeLLM = base44.integrations.Core.InvokeLLM; + +export const SendEmail = base44.integrations.Core.SendEmail; + +export const SendSMS = base44.integrations.Core.SendSMS; + +export const UploadFile = base44.integrations.Core.UploadFile; + +export const GenerateImage = base44.integrations.Core.GenerateImage; + +export const ExtractDataFromUploadedFile = base44.integrations.Core.ExtractDataFromUploadedFile; + + + + + + diff --git a/src/assets/krow-logo.webp b/src/assets/krow-logo.webp new file mode 100644 index 0000000..5252e56 Binary files /dev/null and b/src/assets/krow-logo.webp differ diff --git a/src/assets/owliver-avatar.jpg b/src/assets/owliver-avatar.jpg new file mode 100644 index 0000000..5ac8d8b Binary files /dev/null and b/src/assets/owliver-avatar.jpg differ diff --git a/src/assets/owliver-mascot.jpg b/src/assets/owliver-mascot.jpg new file mode 100644 index 0000000..2ceb09b Binary files /dev/null and b/src/assets/owliver-mascot.jpg differ diff --git a/src/assets/react.svg b/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/ProtectedRoute.jsx b/src/components/ProtectedRoute.jsx new file mode 100644 index 0000000..6018bc6 --- /dev/null +++ b/src/components/ProtectedRoute.jsx @@ -0,0 +1,37 @@ +import { useEffect } from 'react'; +import { Outlet } from 'react-router-dom'; +import { useAuth } from '@/lib/AuthContext'; +import UserNotRegisteredError from '@/components/UserNotRegisteredError'; + +const DefaultFallback = () => ( +
+
+
+); + +export default function ProtectedRoute({ fallback = , unauthenticatedElement }) { + const { isAuthenticated, isLoadingAuth, authChecked, authError, checkUserAuth } = useAuth(); + + useEffect(() => { + if (!authChecked && !isLoadingAuth) { + checkUserAuth(); + } + }, [authChecked, isLoadingAuth, checkUserAuth]); + + if (isLoadingAuth || !authChecked) { + return fallback; + } + + if (authError) { + if (authError.type === 'user_not_registered') { + return ; + } + return unauthenticatedElement; + } + + if (!isAuthenticated) { + return unauthenticatedElement; + } + + return ; +} diff --git a/src/components/UserNotRegisteredError.jsx b/src/components/UserNotRegisteredError.jsx new file mode 100644 index 0000000..ede5274 --- /dev/null +++ b/src/components/UserNotRegisteredError.jsx @@ -0,0 +1,31 @@ +import React from 'react'; + +const UserNotRegisteredError = () => { + return ( +
+
+
+
+ + + +
+

Access Restricted

+

+ You are not registered to use this application. Please contact the app administrator to request access. +

+
+

If you believe this is an error, you can:

+
    +
  • Verify you are logged in with the correct account
  • +
  • Contact the app administrator for access
  • +
  • Try logging out and back in again
  • +
+
+
+
+
+ ); +}; + +export default UserNotRegisteredError; diff --git a/src/components/announcements/AnnouncementsTab.jsx b/src/components/announcements/AnnouncementsTab.jsx new file mode 100644 index 0000000..08a542f --- /dev/null +++ b/src/components/announcements/AnnouncementsTab.jsx @@ -0,0 +1,714 @@ +import React, { useState } from "react"; +import { base44 } from "@/api/base44Client"; +import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; +import { Button } from "@/components/ui/button"; +import { Card, CardContent } from "@/components/ui/card"; +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; +import { Badge } from "@/components/ui/badge"; +import { Textarea } from "@/components/ui/textarea"; +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; +import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter, DialogDescription } from "@/components/ui/dialog"; +import { Switch } from "@/components/ui/switch"; +import { useToast } from "@/components/ui/use-toast"; +import { + Megaphone, Plus, Edit, Trash2, Pause, Play, Pin, PinOff, Eye, + Clock, Calendar, Upload, X, AlertTriangle, Globe, Loader2, + Bell, Mail, Image as ImageIcon, ChevronDown, ChevronUp, Search, + Zap, TrendingUp, Users, UserCheck, UserPlus +} from "lucide-react"; +import { format, isPast, isFuture } from "date-fns"; + +const AUDIENCE_OPTIONS = [ + { value: "all", label: "Everyone", color: "bg-[#0039A6] text-white" }, + { value: "vendor", label: "Vendors", color: "bg-purple-600 text-white" }, + { value: "client", label: "Clients", color: "bg-[#C8DBDC] text-[#3C4F5C]" }, + { value: "workforce", label: "Workforce", color: "bg-[#D4B886] text-[#3C4F5C]" }, + { value: "procurement", label: "Procurement", color: "bg-slate-700 text-white" }, + { value: "operator", label: "Operators", color: "bg-emerald-600 text-white" }, + { value: "sector", label: "Sector Managers", color: "bg-indigo-600 text-white" }, + { value: "admin", label: "Admins Only", color: "bg-red-600 text-white" }, +]; + +const PRIORITY_CONFIG = { + low: { label: "Low", color: "bg-slate-100 text-slate-600 border-slate-200", icon: null }, + normal: { label: "Normal", color: "bg-blue-50 text-[#0039A6] border-blue-200", icon: null }, + high: { label: "High", color: "bg-amber-50 text-amber-700 border-amber-200", icon: TrendingUp }, + urgent: { label: "Urgent", color: "bg-red-50 text-red-700 border-red-200", icon: Zap }, +}; + +const STATUS_CONFIG = { + draft: { label: "Draft", color: "bg-slate-100 text-slate-600 border-slate-200" }, + scheduled: { label: "Scheduled", color: "bg-blue-50 text-[#0039A6] border-blue-200" }, + active: { label: "Active", color: "bg-green-50 text-green-700 border-green-200" }, + paused: { label: "Paused", color: "bg-amber-50 text-amber-700 border-amber-200" }, + expired: { label: "Expired", color: "bg-slate-50 text-slate-400 border-slate-200" }, +}; + +const EMPTY_FORM = { + title: "", + body: "", + flyer_url: "", + audience: ["all"], + specific_recipients: [], // [{staff_id, name, email, phone, position}] + priority: "normal", + status: "draft", + publish_date: "", + expire_date: "", + send_email: false, + send_push: false, + pin_to_top: false, + tags: [], +}; + +export default function AnnouncementsTab({ teamId, user }) { + const { toast } = useToast(); + const queryClient = useQueryClient(); + const [showForm, setShowForm] = useState(false); + const [editingAnnouncement, setEditingAnnouncement] = useState(null); + const [form, setForm] = useState(EMPTY_FORM); + const [tagInput, setTagInput] = useState(""); + const [searchTerm, setSearchTerm] = useState(""); + const [statusFilter, setStatusFilter] = useState("all"); + const [uploadingFlyer, setUploadingFlyer] = useState(false); + const [expandedId, setExpandedId] = useState(null); + const [recipientSearch, setRecipientSearch] = useState(""); + const [showRecipientPicker, setShowRecipientPicker] = useState(false); + + const { data: announcements = [], isLoading } = useQuery({ + queryKey: ["announcements", teamId], + queryFn: async () => { + const all = await base44.entities.Announcement.list("-created_date"); + return all.filter(a => a.team_id === teamId); + }, + enabled: !!teamId, + }); + + const { data: allStaff = [] } = useQuery({ + queryKey: ["staff-for-announcements"], + queryFn: () => base44.entities.Staff.list(), + }); + + const filteredStaff = allStaff.filter(s => { + if (!recipientSearch.trim()) return true; + const q = recipientSearch.toLowerCase(); + return ( + s.employee_name?.toLowerCase().includes(q) || + s.email?.toLowerCase().includes(q) || + s.contact_number?.toLowerCase().includes(q) || + s.phone?.toLowerCase().includes(q) || + s.position?.toLowerCase().includes(q) || + s.position_2?.toLowerCase().includes(q) + ); + }); + + const saveMutation = useMutation({ + mutationFn: async (data) => { + const payload = { + ...data, + team_id: teamId, + vendor_id: user?.id, + created_by_name: user?.full_name || user?.email, + view_count: data.view_count || 0, + specific_recipients: data.specific_recipients || [], + }; + // Auto-set status based on publish_date + if (payload.status === "draft" && payload.publish_date) { + payload.status = isFuture(new Date(payload.publish_date)) ? "scheduled" : "active"; + } + if (editingAnnouncement) { + return base44.entities.Announcement.update(editingAnnouncement.id, payload); + } + return base44.entities.Announcement.create(payload); + }, + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ["announcements", teamId] }); + setShowForm(false); + setEditingAnnouncement(null); + setForm(EMPTY_FORM); + toast({ title: editingAnnouncement ? "✅ Announcement updated" : "✅ Announcement created" }); + }, + }); + + const updateStatusMutation = useMutation({ + mutationFn: ({ id, status }) => base44.entities.Announcement.update(id, { status }), + onSuccess: () => queryClient.invalidateQueries({ queryKey: ["announcements", teamId] }), + }); + + const togglePinMutation = useMutation({ + mutationFn: ({ id, pin_to_top }) => base44.entities.Announcement.update(id, { pin_to_top }), + onSuccess: () => queryClient.invalidateQueries({ queryKey: ["announcements", teamId] }), + }); + + const deleteMutation = useMutation({ + mutationFn: (id) => base44.entities.Announcement.delete(id), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ["announcements", teamId] }); + toast({ title: "🗑️ Announcement deleted" }); + }, + }); + + const handleFlyerUpload = async (e) => { + const file = e.target.files[0]; + if (!file) return; + setUploadingFlyer(true); + const result = await base44.integrations.Core.UploadFile({ file }); + setForm({ ...form, flyer_url: result.file_url }); + setUploadingFlyer(false); + }; + + const handleEdit = (ann) => { + setEditingAnnouncement(ann); + setForm({ + title: ann.title || "", + body: ann.body || "", + flyer_url: ann.flyer_url || "", + audience: ann.audience || ["all"], + specific_recipients: ann.specific_recipients || [], + priority: ann.priority || "normal", + status: ann.status || "draft", + publish_date: ann.publish_date ? ann.publish_date.slice(0, 16) : "", + expire_date: ann.expire_date ? ann.expire_date.slice(0, 16) : "", + send_email: ann.send_email || false, + send_push: ann.send_push || false, + pin_to_top: ann.pin_to_top || false, + tags: ann.tags || [], + }); + setShowForm(true); + }; + + const handleNewAnnouncement = () => { + setEditingAnnouncement(null); + setForm(EMPTY_FORM); + setShowForm(true); + }; + + const toggleAudience = (val) => { + if (val === "all") { + setForm({ ...form, audience: ["all"] }); + return; + } + const current = form.audience.filter(a => a !== "all"); + if (current.includes(val)) { + setForm({ ...form, audience: current.filter(a => a !== val) }); + } else { + setForm({ ...form, audience: [...current, val] }); + } + }; + + const toggleRecipient = (staff) => { + const existing = form.specific_recipients || []; + const isSelected = existing.some(r => r.staff_id === staff.id); + if (isSelected) { + setForm({ ...form, specific_recipients: existing.filter(r => r.staff_id !== staff.id) }); + } else { + setForm({ + ...form, + specific_recipients: [...existing, { + staff_id: staff.id, + name: staff.employee_name, + email: staff.email || "", + phone: staff.contact_number || staff.phone || "", + position: staff.position || "", + }], + }); + } + }; + + const addTag = (e) => { + if (e.key === "Enter" && tagInput.trim()) { + setForm({ ...form, tags: [...form.tags, tagInput.trim()] }); + setTagInput(""); + } + }; + + const filtered = announcements + .filter(a => statusFilter === "all" || a.status === statusFilter) + .filter(a => !searchTerm || a.title?.toLowerCase().includes(searchTerm.toLowerCase()) || a.body?.toLowerCase().includes(searchTerm.toLowerCase())) + .sort((a, b) => (b.pin_to_top ? 1 : 0) - (a.pin_to_top ? 1 : 0)); + + const stats = { + total: announcements.length, + active: announcements.filter(a => a.status === "active").length, + scheduled: announcements.filter(a => a.status === "scheduled").length, + pinned: announcements.filter(a => a.pin_to_top).length, + }; + + return ( +
+ {/* Header Stats */} +
+ {[ + { label: "Total", value: stats.total, color: "text-[#3C4F5C]", bg: "bg-slate-50 border-slate-200" }, + { label: "Active", value: stats.active, color: "text-green-700", bg: "bg-green-50 border-green-200" }, + { label: "Scheduled", value: stats.scheduled, color: "text-[#0039A6]", bg: "bg-blue-50 border-blue-200" }, + { label: "Pinned", value: stats.pinned, color: "text-[#D4B886]", bg: "bg-amber-50 border-amber-200" }, + ].map(s => ( +
+

{s.value}

+

{s.label}

+
+ ))} +
+ + {/* Toolbar */} +
+
+
+ + setSearchTerm(e.target.value)} + className="pl-9 border-slate-300" + /> +
+ +
+ +
+ + {/* Announcements List */} + {isLoading ? ( +
+ +
+ ) : filtered.length === 0 ? ( +
+
+ +
+

No Announcements Yet

+

Broadcast news, events, and updates to your entire network instantly

+ +
+ ) : ( +
+ {filtered.map(ann => { + const priorityCfg = PRIORITY_CONFIG[ann.priority] || PRIORITY_CONFIG.normal; + const statusCfg = STATUS_CONFIG[ann.status] || STATUS_CONFIG.draft; + const isExpanded = expandedId === ann.id; + const PriorityIcon = priorityCfg.icon; + + return ( + + +
+ {/* Left: Flyer or Icon */} +
+ {ann.flyer_url ? ( + flyer + ) : ( +
+ +
+ )} +
+ + {/* Center: Content */} +
+
+
+ {ann.pin_to_top && } +

{ann.title}

+ {statusCfg.label} + + {PriorityIcon && } + {priorityCfg.label} + +
+ {/* Actions */} +
+ + {ann.status === "active" ? ( + + ) : ann.status === "paused" || ann.status === "draft" || ann.status === "scheduled" ? ( + + ) : null} + + +
+
+ + {/* Meta row */} +
+ + + {(ann.audience || []).includes("all") ? "Everyone" : (ann.audience || []).join(", ")} + + {ann.specific_recipients?.length > 0 && ( + + + +{ann.specific_recipients.length} specific people + + )} + {ann.publish_date && ( + + + {format(new Date(ann.publish_date), "MMM d, yyyy h:mm a")} + + )} + {ann.expire_date && ( + + + Expires {format(new Date(ann.expire_date), "MMM d, yyyy")} + + )} + {ann.view_count || 0} views + {ann.send_email && Email} + {ann.send_push && Push} +
+ + {/* Body preview / expand */} +
+

+ {ann.body} +

+ {ann.body?.length > 120 && ( + + )} +
+ + {/* Tags */} + {ann.tags?.length > 0 && ( +
+ {ann.tags.map(t => ( + #{t} + ))} +
+ )} +
+
+
+
+ ); + })} +
+ )} + + {/* Create / Edit Modal */} + { if (!v) { setShowForm(false); setEditingAnnouncement(null); setForm(EMPTY_FORM); } }}> + + +
+
+ +
+
+ {editingAnnouncement ? "Edit Announcement" : "New Announcement"} + Broadcast to your entire network +
+
+
+ +
+ {/* Title */} +
+ + setForm({ ...form, title: e.target.value })} + /> +
+ + {/* Body */} +
+ +