@stevederico/skateboard-ui 1.2.0 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/App.jsx CHANGED
@@ -4,7 +4,6 @@ import {
4
4
  Routes,
5
5
  Route,
6
6
  Navigate,
7
- useNavigate,
8
7
  useLocation,
9
8
  } from 'react-router-dom';
10
9
  import { useEffect } from 'react';
@@ -20,18 +19,16 @@ import NotFound from './NotFound.jsx';
20
19
  import ProtectedRoute from './ProtectedRoute.jsx';
21
20
  import ErrorBoundary from './ErrorBoundary.jsx';
22
21
  import { useAppSetup, initializeUtilities, validateConstants } from './Utilities.js';
23
- import { ContextProvider, getState } from './Context.jsx';
22
+ import { ContextProvider } from './Context.jsx';
24
23
 
25
24
  function App({ constants, appRoutes, defaultRoute }) {
26
25
  const location = useLocation();
27
- const navigate = useNavigate();
28
- const { dispatch } = getState();
29
26
 
30
27
  useEffect(() => {
31
28
  document.title = constants.appName;
32
29
  }, [constants.appName]);
33
30
 
34
- useAppSetup(location, navigate, dispatch);
31
+ useAppSetup(location);
35
32
 
36
33
  return (
37
34
  <Routes>
package/CHANGELOG.md CHANGED
@@ -1,4 +1,19 @@
1
1
  # CHANGELOG
2
+ 1.2.2
3
+
4
+ Fix CSRF cookie-only handling
5
+ Remove localStorage CSRF storage
6
+ Fix SettingsView subscription data
7
+ Fix SignOutView CSRF cleanup
8
+ Fix App.jsx useAppSetup params
9
+ Remove Context.jsx CSRF code
10
+
11
+ 1.2.1
12
+
13
+ Fix Layout scroll
14
+ Update SettingsView style
15
+ Fix button borders
16
+
2
17
  1.2.0
3
18
 
4
19
  Add ViteConfig export
package/Context.jsx CHANGED
@@ -57,11 +57,6 @@ export function ContextProvider({ children, constants }) {
57
57
  return `${appName.toLowerCase().replace(/\s+/g, '-')}_user`;
58
58
  };
59
59
 
60
- const getCSRFKey = () => {
61
- const appName = constants.appName || 'skateboard';
62
- return `${appName.toLowerCase().replace(/\s+/g, '-')}_csrf`;
63
- };
64
-
65
60
  const getInitialUser = () => {
66
61
  try {
67
62
  const storageKey = getStorageKey();
@@ -78,7 +73,6 @@ export function ContextProvider({ children, constants }) {
78
73
 
79
74
  function reducer(state, action) {
80
75
  const storageKey = getStorageKey();
81
- const csrfKey = getCSRFKey();
82
76
 
83
77
  switch (action.type) {
84
78
  case 'SET_USER': {
@@ -93,9 +87,8 @@ export function ContextProvider({ children, constants }) {
93
87
  return { ...state, user: action.payload };
94
88
  }
95
89
  case 'CLEAR_USER': {
96
- // Clean up both user and CSRF token
90
+ // Clean up user data (CSRF cookie is cleared by backend)
97
91
  safeLSRemoveItem(storageKey);
98
- safeLSRemoveItem(csrfKey);
99
92
  return { ...state, user: null };
100
93
  }
101
94
  default:
package/Layout.jsx CHANGED
@@ -41,15 +41,13 @@ export default function Layout({ children }) {
41
41
  }, []);
42
42
 
43
43
  return (
44
- <div className="min-h-screen">
45
- <div className="fixed inset-0 flex overflow-hidden pt-[env(safe-area-inset-top)] pb-[env(safe-area-inset-bottom)] pl-[env(safe-area-inset-left)] pr-[env(safe-area-inset-right)]">
46
- <SidebarProvider>
47
- {!constants.hideSidebar && <AppSidebar />}
48
- <main className="flex-1 relative overflow-y-auto scrollbar-hide">
49
- <Outlet />
50
- </main>
51
- </SidebarProvider>
52
- </div>
44
+ <div className="min-h-screen flex flex-col pt-[env(safe-area-inset-top)] pb-[env(safe-area-inset-bottom)] pl-[env(safe-area-inset-left)] pr-[env(safe-area-inset-right)]">
45
+ <SidebarProvider>
46
+ {!constants.hideSidebar && <AppSidebar />}
47
+ <main className="flex-1">
48
+ <Outlet />
49
+ </main>
50
+ </SidebarProvider>
53
51
  <TabBar className="md:hidden" />
54
52
  </div>
55
53
  );
package/SettingsView.jsx CHANGED
@@ -1,20 +1,10 @@
1
1
  import React from 'react';
2
2
  import { useNavigate } from 'react-router-dom';
3
3
  import { getState } from './Context.jsx';
4
- import { useEffect, useState } from 'react';
5
- import * as LucideIcons from "lucide-react";
6
4
  import ThemeToggle from './ThemeToggle.jsx';
7
-
8
- // Dynamic Icon Component
9
- const DynamicIcon = ({ name, size = 24, color = 'currentColor', strokeWidth = 2, ...props }) => {
10
- const toPascalCase = (str) => str.split(/[-_\s]/).map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join('');
11
- const possibleNames = [name, toPascalCase(name), name.charAt(0).toUpperCase() + name.slice(1)];
12
- const LucideIcon = possibleNames.find(n => LucideIcons[n]) ? LucideIcons[possibleNames.find(n => LucideIcons[n])] : null;
13
- return LucideIcon ? React.createElement(LucideIcon, { size, color, strokeWidth, ...props }) : null;
14
- };
15
5
  import constants from "@/constants.json";
16
6
  import pkg from '@package';
17
- import { showCheckout } from './Utilities';
7
+ import { showCheckout, showManage } from './Utilities';
18
8
 
19
9
  export default function SettingsView() {
20
10
  const navigate = useNavigate();
@@ -26,89 +16,94 @@ export default function SettingsView() {
26
16
  }
27
17
 
28
18
  return (
29
- <div className="h-full min-h-screen flex flex-col">
30
- {/* Navbar */}
31
- <div className="flex w-full items-center bg-background pb-4 pt-5 px-4 border-b">
32
- <span className="font-semibold text-2xl">Settings</span>
33
- <div className="ml-auto">
19
+ <div className="min-h-screen bg-background relative overflow-hidden">
20
+ {/* Content */}
21
+ <div className="relative z-10">
22
+ {/* Header */}
23
+ <div className="flex items-center justify-between px-6 py-4 border-b border-border">
24
+ <h1 className="text-lg font-medium">Settings</h1>
34
25
  <ThemeToggle />
35
26
  </div>
36
- </div>
37
-
38
- {/* Main content */}
39
- <div className="flex flex-col flex-1 items-center p-4 gap-6">
40
- {(constants.noLogin == false || typeof constants.noLogin === 'undefined') && (
41
27
 
42
- <div className="w-full bg-accent p-6 rounded flex items-center justify-between">
43
- <div className="w-10 h-10 bg-app dark:text-black text-white flex justify-center items-center rounded-full">
44
- <span className="uppercase">{state.user?.name?.split(' ').map(word => word[0]).join('') || "NA"}</span>
45
- </div>
46
- <div className="ml-4">
47
- <div className="text font-medium block mb-1 capitalize">{state.user?.name || "No User"}</div>
48
- <div className="text-sm text-gray-500">{state.user?.email || "no@user.com"}</div>
49
- </div>
50
- <div className="ml-auto">
51
- <button className="bg-sidebar-background text-center border-foreground border ml-2 px-3 py-2 rounded text-sm border cursor-pointer" onClick={() => {
52
- signOutClicked()
53
- }}>Sign Out</button>
54
- </div>
55
- </div>
56
- )}
28
+ {/* Main content */}
29
+ <div className="flex flex-col items-center p-4 gap-4">
30
+ {/* User Card */}
31
+ {(constants.noLogin === false || typeof constants.noLogin === 'undefined') && (
32
+ <div className="w-full max-w-lg bg-accent rounded-2xl p-5">
33
+ <div className="flex items-center gap-4">
34
+ <div className="w-12 h-12 bg-app dark:text-black text-white flex justify-center items-center rounded-full font-medium">
35
+ <span className="uppercase">{state.user?.name?.split(' ').map(word => word[0]).join('') || "NA"}</span>
36
+ </div>
37
+ <div className="flex-1 min-w-0">
38
+ <div className="font-medium truncate capitalize">{state.user?.name || "No User"}</div>
39
+ <div className="text-sm text-muted-foreground">{state.user?.email || "no@user.com"}</div>
40
+ </div>
41
+ <button
42
+ onClick={signOutClicked}
43
+ className="px-4 py-2 rounded-full text-sm bg-sidebar-background border border-foreground/30 hover:border-foreground transition-all cursor-pointer"
44
+ >
45
+ Sign Out
46
+ </button>
47
+ </div>
48
+ </div>
49
+ )}
57
50
 
58
- {/* SUPPORT */}
59
- <div className="flex gap-6 w-full">
60
- <div className="bg-accent p-6 rounded flex-1">
61
- <div className="flex items-center">
51
+ {/* Support */}
52
+ <div className="w-full max-w-lg bg-accent rounded-2xl p-5">
53
+ <div className="flex items-center justify-between">
62
54
  <div>
63
- <div className="mb-2 font-medium">Contact Support</div>
64
- <div className="text-sm text-gray-500">How can we help you?</div>
65
- </div>
66
- <div className="ml-auto">
67
- <div onClick={() => { window.location.href = `mailto:${constants.companyEmail}`; }} className="bg-sidebar-background text-center border-foreground border ml-2 px-3 py-2 rounded text-sm whitespace-nowrap cursor-pointer">Support</div>
55
+ <div className="mb-1 font-medium">Support</div>
56
+ <div className="text-sm text-muted-foreground">How can we help?</div>
68
57
  </div>
58
+ <button
59
+ onClick={() => { window.location.href = `mailto:${constants.companyEmail}`; }}
60
+ className="px-4 py-2 rounded-full text-sm bg-sidebar-background border border-foreground/30 hover:border-foreground transition-all cursor-pointer"
61
+ >
62
+ Contact
63
+ </button>
69
64
  </div>
70
65
  </div>
71
- </div>
72
66
 
73
- {/* BILLING */}
74
- {(constants.noLogin == false || typeof constants.noLogin === 'undefined') && (
75
- <div className="flex gap-6 mb-10 w-full">
76
- <div className="bg-accent p-6 rounded flex-1">
77
- <div className="flex items-center">
67
+ {/* Billing */}
68
+ {(constants.noLogin === false || typeof constants.noLogin === 'undefined') && (
69
+ <div className="w-full max-w-lg bg-accent rounded-2xl p-5">
70
+ <div className="flex items-center justify-between">
78
71
  <div>
79
- <div className="mb-2 font-medium">Billing</div>
80
- <div className="text-sm text-gray-500">
81
- {state.user?.subStatus === null || typeof state.user?.subStatus === 'undefined'
82
- ? "Your plan is free"
83
- : ["active", "canceled"].includes(state.user?.subStatus)
84
- ? `Your plan ${state.user?.subStatus === "active" ? "renews" : "ends"} ${new Date(state.user.expires * 1000).toLocaleDateString('en-US')}`
85
- : `Your plan is ${state.user?.subStatus}`
72
+ <div className="mb-1 font-medium">Billing</div>
73
+ <div className="text-sm text-muted-foreground">
74
+ {state.user?.subscription?.status === null || typeof state.user?.subscription?.status === 'undefined'
75
+ ? "Free plan"
76
+ : ["active", "canceled"].includes(state.user?.subscription?.status)
77
+ ? `${state.user?.subscription?.status === "active" ? "Renews" : "Ends"} ${new Date(state.user?.subscription?.expires * 1000).toLocaleDateString('en-US')}`
78
+ : `Plan ${state.user?.subscription?.status}`
86
79
  }
87
80
  </div>
88
81
  </div>
89
-
90
- <div className="ml-auto">
91
- {state.user?.stripeID ? (
92
- <div onClick={() => { showManage(state.user?.stripeID) }} className="bg-sidebar-background border-foreground border ml-2 px-3 py-2 rounded text-sm whitespace-nowrap cursor-pointer text-center">Manage</div>
93
- ) : (
94
- <div onClick={() => { showCheckout(state.user?.email) }} className="bg-app text-white border-app border ml-2 px-3 py-2 rounded text-sm whitespace-nowrap cursor-pointer">Subscribe</div>
95
- )}
96
- </div>
97
-
82
+ {state.user?.subscription?.stripeID ? (
83
+ <button
84
+ onClick={() => { showManage(state.user?.subscription?.stripeID) }}
85
+ className="px-4 py-2 rounded-full text-sm bg-sidebar-background border border-foreground/30 hover:border-foreground transition-all cursor-pointer"
86
+ >
87
+ Manage
88
+ </button>
89
+ ) : (
90
+ <button
91
+ onClick={() => { showCheckout(state.user?.email) }}
92
+ className="px-5 py-2 bg-app text-white dark:text-black rounded-full text-sm font-medium hover:opacity-90 transition-all cursor-pointer"
93
+ >
94
+ Subscribe
95
+ </button>
96
+ )}
98
97
  </div>
99
98
  </div>
100
- </div>
101
- )}
102
- </div>
99
+ )}
100
+ </div>
103
101
 
104
- {/* Footer Links */}
105
- <div className="mt-auto text-center">
106
- <div className="m-2 mb-4 block text-sm text-gray-500 pb-24 md:pb-0">v{pkg.version}</div>
102
+ {/* Footer */}
103
+ <div className="mt-8 text-center pb-24 md:pb-8">
104
+ <div className="text-xs text-muted-foreground">v{pkg.version}</div>
105
+ </div>
107
106
  </div>
108
107
  </div>
109
-
110
-
111
108
  );
112
109
  }
113
-
114
-
package/SignInView.jsx CHANGED
@@ -24,7 +24,7 @@ import { useState, useEffect, useRef } from 'react';
24
24
  import { useNavigate } from 'react-router-dom';
25
25
  import { getState } from './Context.jsx';
26
26
  import constants from "@/constants.json";
27
- import { getBackendURL, getAppKey } from './Utilities'
27
+ import { getBackendURL } from './Utilities'
28
28
 
29
29
  export default function LoginForm({
30
30
  className,
@@ -62,36 +62,13 @@ export default function LoginForm({
62
62
 
63
63
  if (response.ok) {
64
64
  const data = await response.json();
65
- // Store CSRF token in localStorage with app-specific key
66
- if (data.csrfToken) {
67
- const csrfKey = getAppKey('csrf');
68
- try {
69
- localStorage.setItem(csrfKey, data.csrfToken);
70
- } catch (storageError) {
71
- console.error('Failed to store CSRF token:', storageError.message);
72
- // Continue even if storage fails
73
- }
74
- }
65
+ // CSRF token is set as cookie by backend, no localStorage needed
75
66
  dispatch({ type: 'SET_USER', payload: data });
76
67
  navigate('/app');
77
68
  } else {
78
- // Clean up stale CSRF token on failed sign-in
79
- try {
80
- const csrfKey = getAppKey('csrf');
81
- localStorage.removeItem(csrfKey);
82
- } catch (cleanupError) {
83
- console.warn('Could not clean up CSRF token:', cleanupError.message);
84
- }
85
69
  setErrorMessage('Invalid Credentials');
86
70
  }
87
71
  } catch (error) {
88
- // Clean up stale CSRF token on error
89
- try {
90
- const csrfKey = getAppKey('csrf');
91
- localStorage.removeItem(csrfKey);
92
- } catch (cleanupError) {
93
- console.warn('Could not clean up CSRF token:', cleanupError.message);
94
- }
95
72
  setErrorMessage('Server Error');
96
73
  } finally {
97
74
  setIsSubmitting(false);
package/SignOutView.jsx CHANGED
@@ -1,7 +1,6 @@
1
1
  import { useEffect } from 'react';
2
2
  import { useNavigate } from 'react-router-dom';
3
3
  import { getBackendURL } from '@stevederico/skateboard-ui/Utilities';
4
- import constants from '@/constants.json';
5
4
 
6
5
  function SignOutView() {
7
6
  const navigate = useNavigate();
@@ -17,11 +16,7 @@ function SignOutView() {
17
16
  } catch (error) {
18
17
  console.error('Sign out error:', error);
19
18
  } finally {
20
- // Clear CSRF token from localStorage
21
- const appName = constants.appName || 'piglet';
22
- const csrfKey = `${appName.toLowerCase().replace(/\s+/g, '-')}_csrf`;
23
- localStorage.removeItem(csrfKey);
24
-
19
+ // CSRF cookie is cleared by backend, no localStorage cleanup needed
25
20
  // Redirect to sign in
26
21
  navigate('/signin', { replace: true });
27
22
  }
package/SignUpView.jsx CHANGED
@@ -55,14 +55,7 @@ export default function LoginForm({
55
55
 
56
56
  if (response.ok) {
57
57
  const data = await response.json();
58
-
59
- // Store CSRF token in localStorage with app-specific key
60
- if (data.csrfToken) {
61
- const appName = constants.appName || 'skateboard';
62
- const csrfKey = `${appName.toLowerCase().replace(/\s+/g, '-')}_csrf`;
63
- localStorage.setItem(csrfKey, data.csrfToken);
64
- }
65
-
58
+ // CSRF token is set as cookie by backend, no localStorage needed
66
59
  dispatch({ type: 'SET_USER', payload: data });
67
60
  navigate('/app');
68
61
  } else {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@stevederico/skateboard-ui",
3
3
  "private": false,
4
- "version": "1.2.0",
4
+ "version": "1.2.2",
5
5
  "type": "module",
6
6
  "exports": {
7
7
  "./AppSidebar": {
@@ -1,12 +0,0 @@
1
- {
2
- "permissions": {
3
- "allow": [
4
- "Bash(git add:*)",
5
- "Bash(git commit:*)",
6
- "Bash(git push:*)",
7
- "Bash(git tag:*)"
8
- ],
9
- "deny": [],
10
- "ask": []
11
- }
12
- }
package/deno.lock DELETED
@@ -1,913 +0,0 @@
1
- {
2
- "version": "5",
3
- "specifiers": {
4
- "npm:@radix-ui/react-accordion@^1.2.11": "1.2.12_react@19.1.1_react-dom@19.1.1__react@19.1.1",
5
- "npm:@radix-ui/react-alert-dialog@^1.1.14": "1.1.15_react@19.1.1_react-dom@19.1.1__react@19.1.1",
6
- "npm:@radix-ui/react-aspect-ratio@^1.1.7": "1.1.7_react@19.1.1_react-dom@19.1.1__react@19.1.1",
7
- "npm:@radix-ui/react-avatar@^1.1.10": "1.1.10_react@19.1.1_react-dom@19.1.1__react@19.1.1",
8
- "npm:@radix-ui/react-checkbox@^1.3.2": "1.3.3_react@19.1.1_react-dom@19.1.1__react@19.1.1",
9
- "npm:@radix-ui/react-collapsible@^1.1.11": "1.1.12_react@19.1.1_react-dom@19.1.1__react@19.1.1",
10
- "npm:@radix-ui/react-context-menu@^2.2.15": "2.2.16_react@19.1.1_react-dom@19.1.1__react@19.1.1",
11
- "npm:@radix-ui/react-dialog@^1.1.14": "1.1.15_react@19.1.1_react-dom@19.1.1__react@19.1.1",
12
- "npm:@radix-ui/react-dropdown-menu@^2.1.15": "2.1.16_react@19.1.1_react-dom@19.1.1__react@19.1.1",
13
- "npm:@radix-ui/react-hover-card@^1.1.14": "1.1.15_react@19.1.1_react-dom@19.1.1__react@19.1.1",
14
- "npm:@radix-ui/react-label@^2.1.7": "2.1.7_react@19.1.1_react-dom@19.1.1__react@19.1.1",
15
- "npm:@radix-ui/react-menubar@^1.1.15": "1.1.16_react@19.1.1_react-dom@19.1.1__react@19.1.1",
16
- "npm:@radix-ui/react-navigation-menu@^1.2.13": "1.2.14_react@19.1.1_react-dom@19.1.1__react@19.1.1",
17
- "npm:@radix-ui/react-popover@^1.1.14": "1.1.15_react@19.1.1_react-dom@19.1.1__react@19.1.1",
18
- "npm:@radix-ui/react-progress@^1.1.7": "1.1.7_react@19.1.1_react-dom@19.1.1__react@19.1.1",
19
- "npm:@radix-ui/react-radio-group@^1.3.7": "1.3.8_react@19.1.1_react-dom@19.1.1__react@19.1.1",
20
- "npm:@radix-ui/react-scroll-area@^1.2.9": "1.2.10_react@19.1.1_react-dom@19.1.1__react@19.1.1",
21
- "npm:@radix-ui/react-select@^2.2.5": "2.2.6_react@19.1.1_react-dom@19.1.1__react@19.1.1",
22
- "npm:@radix-ui/react-separator@^1.1.7": "1.1.7_react@19.1.1_react-dom@19.1.1__react@19.1.1",
23
- "npm:@radix-ui/react-slider@^1.3.5": "1.3.6_react@19.1.1_react-dom@19.1.1__react@19.1.1",
24
- "npm:@radix-ui/react-slot@^1.2.3": "1.2.3_react@19.1.1",
25
- "npm:@radix-ui/react-switch@^1.2.5": "1.2.6_react@19.1.1_react-dom@19.1.1__react@19.1.1",
26
- "npm:@radix-ui/react-tabs@^1.1.12": "1.1.13_react@19.1.1_react-dom@19.1.1__react@19.1.1",
27
- "npm:@radix-ui/react-toggle-group@^1.1.10": "1.1.11_react@19.1.1_react-dom@19.1.1__react@19.1.1",
28
- "npm:@radix-ui/react-toggle@^1.1.9": "1.1.10_react@19.1.1_react-dom@19.1.1__react@19.1.1",
29
- "npm:@radix-ui/react-tooltip@^1.2.7": "1.2.8_react@19.1.1_react-dom@19.1.1__react@19.1.1",
30
- "npm:class-variance-authority@~0.7.1": "0.7.1",
31
- "npm:clsx@^2.1.1": "2.1.1",
32
- "npm:cmdk@^1.1.1": "1.1.1_react@19.1.1_react-dom@19.1.1__react@19.1.1",
33
- "npm:date-fns@^4.1.0": "4.1.0",
34
- "npm:embla-carousel-react@^8.6.0": "8.6.0_react@19.1.1_embla-carousel@8.6.0",
35
- "npm:lucide-react@0.537": "0.537.0_react@19.1.1",
36
- "npm:next-themes@~0.4.6": "0.4.6_react@19.1.1_react-dom@19.1.1__react@19.1.1",
37
- "npm:react-day-picker@^9.8.1": "9.11.0_react@19.1.1",
38
- "npm:react-resizable-panels@^3.0.4": "3.0.6_react@19.1.1_react-dom@19.1.1__react@19.1.1",
39
- "npm:sonner@^2.0.7": "2.0.7_react@19.1.1_react-dom@19.1.1__react@19.1.1",
40
- "npm:tailwind-merge@^3.3.0": "3.3.1",
41
- "npm:tailwindcss-animate@^1.0.7": "1.0.7_tailwindcss@4.1.13",
42
- "npm:vaul@^1.1.2": "1.1.2_react@19.1.1_react-dom@19.1.1__react@19.1.1"
43
- },
44
- "npm": {
45
- "@date-fns/tz@1.4.1": {
46
- "integrity": "sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA=="
47
- },
48
- "@floating-ui/core@1.7.3": {
49
- "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==",
50
- "dependencies": [
51
- "@floating-ui/utils"
52
- ]
53
- },
54
- "@floating-ui/dom@1.7.4": {
55
- "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==",
56
- "dependencies": [
57
- "@floating-ui/core",
58
- "@floating-ui/utils"
59
- ]
60
- },
61
- "@floating-ui/react-dom@2.1.6_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
62
- "integrity": "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==",
63
- "dependencies": [
64
- "@floating-ui/dom",
65
- "react",
66
- "react-dom"
67
- ]
68
- },
69
- "@floating-ui/utils@0.2.10": {
70
- "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ=="
71
- },
72
- "@radix-ui/number@1.1.1": {
73
- "integrity": "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g=="
74
- },
75
- "@radix-ui/primitive@1.1.3": {
76
- "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg=="
77
- },
78
- "@radix-ui/react-accordion@1.2.12_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
79
- "integrity": "sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==",
80
- "dependencies": [
81
- "@radix-ui/primitive",
82
- "@radix-ui/react-collapsible",
83
- "@radix-ui/react-collection",
84
- "@radix-ui/react-compose-refs",
85
- "@radix-ui/react-context",
86
- "@radix-ui/react-direction",
87
- "@radix-ui/react-id",
88
- "@radix-ui/react-primitive",
89
- "@radix-ui/react-use-controllable-state",
90
- "react",
91
- "react-dom"
92
- ]
93
- },
94
- "@radix-ui/react-alert-dialog@1.1.15_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
95
- "integrity": "sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw==",
96
- "dependencies": [
97
- "@radix-ui/primitive",
98
- "@radix-ui/react-compose-refs",
99
- "@radix-ui/react-context",
100
- "@radix-ui/react-dialog",
101
- "@radix-ui/react-primitive",
102
- "@radix-ui/react-slot",
103
- "react",
104
- "react-dom"
105
- ]
106
- },
107
- "@radix-ui/react-arrow@1.1.7_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
108
- "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==",
109
- "dependencies": [
110
- "@radix-ui/react-primitive",
111
- "react",
112
- "react-dom"
113
- ]
114
- },
115
- "@radix-ui/react-aspect-ratio@1.1.7_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
116
- "integrity": "sha512-Yq6lvO9HQyPwev1onK1daHCHqXVLzPhSVjmsNjCa2Zcxy2f7uJD2itDtxknv6FzAKCwD1qQkeVDmX/cev13n/g==",
117
- "dependencies": [
118
- "@radix-ui/react-primitive",
119
- "react",
120
- "react-dom"
121
- ]
122
- },
123
- "@radix-ui/react-avatar@1.1.10_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
124
- "integrity": "sha512-V8piFfWapM5OmNCXTzVQY+E1rDa53zY+MQ4Y7356v4fFz6vqCyUtIz2rUD44ZEdwg78/jKmMJHj07+C/Z/rcog==",
125
- "dependencies": [
126
- "@radix-ui/react-context",
127
- "@radix-ui/react-primitive",
128
- "@radix-ui/react-use-callback-ref",
129
- "@radix-ui/react-use-is-hydrated",
130
- "@radix-ui/react-use-layout-effect",
131
- "react",
132
- "react-dom"
133
- ]
134
- },
135
- "@radix-ui/react-checkbox@1.3.3_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
136
- "integrity": "sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==",
137
- "dependencies": [
138
- "@radix-ui/primitive",
139
- "@radix-ui/react-compose-refs",
140
- "@radix-ui/react-context",
141
- "@radix-ui/react-presence",
142
- "@radix-ui/react-primitive",
143
- "@radix-ui/react-use-controllable-state",
144
- "@radix-ui/react-use-previous",
145
- "@radix-ui/react-use-size",
146
- "react",
147
- "react-dom"
148
- ]
149
- },
150
- "@radix-ui/react-collapsible@1.1.12_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
151
- "integrity": "sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==",
152
- "dependencies": [
153
- "@radix-ui/primitive",
154
- "@radix-ui/react-compose-refs",
155
- "@radix-ui/react-context",
156
- "@radix-ui/react-id",
157
- "@radix-ui/react-presence",
158
- "@radix-ui/react-primitive",
159
- "@radix-ui/react-use-controllable-state",
160
- "@radix-ui/react-use-layout-effect",
161
- "react",
162
- "react-dom"
163
- ]
164
- },
165
- "@radix-ui/react-collection@1.1.7_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
166
- "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==",
167
- "dependencies": [
168
- "@radix-ui/react-compose-refs",
169
- "@radix-ui/react-context",
170
- "@radix-ui/react-primitive",
171
- "@radix-ui/react-slot",
172
- "react",
173
- "react-dom"
174
- ]
175
- },
176
- "@radix-ui/react-compose-refs@1.1.2_react@19.1.1": {
177
- "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==",
178
- "dependencies": [
179
- "react"
180
- ]
181
- },
182
- "@radix-ui/react-context-menu@2.2.16_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
183
- "integrity": "sha512-O8morBEW+HsVG28gYDZPTrT9UUovQUlJue5YO836tiTJhuIWBm/zQHc7j388sHWtdH/xUZurK9olD2+pcqx5ww==",
184
- "dependencies": [
185
- "@radix-ui/primitive",
186
- "@radix-ui/react-context",
187
- "@radix-ui/react-menu",
188
- "@radix-ui/react-primitive",
189
- "@radix-ui/react-use-callback-ref",
190
- "@radix-ui/react-use-controllable-state",
191
- "react",
192
- "react-dom"
193
- ]
194
- },
195
- "@radix-ui/react-context@1.1.2_react@19.1.1": {
196
- "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==",
197
- "dependencies": [
198
- "react"
199
- ]
200
- },
201
- "@radix-ui/react-dialog@1.1.15_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
202
- "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==",
203
- "dependencies": [
204
- "@radix-ui/primitive",
205
- "@radix-ui/react-compose-refs",
206
- "@radix-ui/react-context",
207
- "@radix-ui/react-dismissable-layer",
208
- "@radix-ui/react-focus-guards",
209
- "@radix-ui/react-focus-scope",
210
- "@radix-ui/react-id",
211
- "@radix-ui/react-portal",
212
- "@radix-ui/react-presence",
213
- "@radix-ui/react-primitive",
214
- "@radix-ui/react-slot",
215
- "@radix-ui/react-use-controllable-state",
216
- "aria-hidden",
217
- "react",
218
- "react-dom",
219
- "react-remove-scroll"
220
- ]
221
- },
222
- "@radix-ui/react-direction@1.1.1_react@19.1.1": {
223
- "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==",
224
- "dependencies": [
225
- "react"
226
- ]
227
- },
228
- "@radix-ui/react-dismissable-layer@1.1.11_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
229
- "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==",
230
- "dependencies": [
231
- "@radix-ui/primitive",
232
- "@radix-ui/react-compose-refs",
233
- "@radix-ui/react-primitive",
234
- "@radix-ui/react-use-callback-ref",
235
- "@radix-ui/react-use-escape-keydown",
236
- "react",
237
- "react-dom"
238
- ]
239
- },
240
- "@radix-ui/react-dropdown-menu@2.1.16_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
241
- "integrity": "sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==",
242
- "dependencies": [
243
- "@radix-ui/primitive",
244
- "@radix-ui/react-compose-refs",
245
- "@radix-ui/react-context",
246
- "@radix-ui/react-id",
247
- "@radix-ui/react-menu",
248
- "@radix-ui/react-primitive",
249
- "@radix-ui/react-use-controllable-state",
250
- "react",
251
- "react-dom"
252
- ]
253
- },
254
- "@radix-ui/react-focus-guards@1.1.3_react@19.1.1": {
255
- "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==",
256
- "dependencies": [
257
- "react"
258
- ]
259
- },
260
- "@radix-ui/react-focus-scope@1.1.7_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
261
- "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==",
262
- "dependencies": [
263
- "@radix-ui/react-compose-refs",
264
- "@radix-ui/react-primitive",
265
- "@radix-ui/react-use-callback-ref",
266
- "react",
267
- "react-dom"
268
- ]
269
- },
270
- "@radix-ui/react-hover-card@1.1.15_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
271
- "integrity": "sha512-qgTkjNT1CfKMoP0rcasmlH2r1DAiYicWsDsufxl940sT2wHNEWWv6FMWIQXWhVdmC1d/HYfbhQx60KYyAtKxjg==",
272
- "dependencies": [
273
- "@radix-ui/primitive",
274
- "@radix-ui/react-compose-refs",
275
- "@radix-ui/react-context",
276
- "@radix-ui/react-dismissable-layer",
277
- "@radix-ui/react-popper",
278
- "@radix-ui/react-portal",
279
- "@radix-ui/react-presence",
280
- "@radix-ui/react-primitive",
281
- "@radix-ui/react-use-controllable-state",
282
- "react",
283
- "react-dom"
284
- ]
285
- },
286
- "@radix-ui/react-id@1.1.1_react@19.1.1": {
287
- "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==",
288
- "dependencies": [
289
- "@radix-ui/react-use-layout-effect",
290
- "react"
291
- ]
292
- },
293
- "@radix-ui/react-label@2.1.7_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
294
- "integrity": "sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==",
295
- "dependencies": [
296
- "@radix-ui/react-primitive",
297
- "react",
298
- "react-dom"
299
- ]
300
- },
301
- "@radix-ui/react-menu@2.1.16_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
302
- "integrity": "sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==",
303
- "dependencies": [
304
- "@radix-ui/primitive",
305
- "@radix-ui/react-collection",
306
- "@radix-ui/react-compose-refs",
307
- "@radix-ui/react-context",
308
- "@radix-ui/react-direction",
309
- "@radix-ui/react-dismissable-layer",
310
- "@radix-ui/react-focus-guards",
311
- "@radix-ui/react-focus-scope",
312
- "@radix-ui/react-id",
313
- "@radix-ui/react-popper",
314
- "@radix-ui/react-portal",
315
- "@radix-ui/react-presence",
316
- "@radix-ui/react-primitive",
317
- "@radix-ui/react-roving-focus",
318
- "@radix-ui/react-slot",
319
- "@radix-ui/react-use-callback-ref",
320
- "aria-hidden",
321
- "react",
322
- "react-dom",
323
- "react-remove-scroll"
324
- ]
325
- },
326
- "@radix-ui/react-menubar@1.1.16_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
327
- "integrity": "sha512-EB1FktTz5xRRi2Er974AUQZWg2yVBb1yjip38/lgwtCVRd3a+maUoGHN/xs9Yv8SY8QwbSEb+YrxGadVWbEutA==",
328
- "dependencies": [
329
- "@radix-ui/primitive",
330
- "@radix-ui/react-collection",
331
- "@radix-ui/react-compose-refs",
332
- "@radix-ui/react-context",
333
- "@radix-ui/react-direction",
334
- "@radix-ui/react-id",
335
- "@radix-ui/react-menu",
336
- "@radix-ui/react-primitive",
337
- "@radix-ui/react-roving-focus",
338
- "@radix-ui/react-use-controllable-state",
339
- "react",
340
- "react-dom"
341
- ]
342
- },
343
- "@radix-ui/react-navigation-menu@1.2.14_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
344
- "integrity": "sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w==",
345
- "dependencies": [
346
- "@radix-ui/primitive",
347
- "@radix-ui/react-collection",
348
- "@radix-ui/react-compose-refs",
349
- "@radix-ui/react-context",
350
- "@radix-ui/react-direction",
351
- "@radix-ui/react-dismissable-layer",
352
- "@radix-ui/react-id",
353
- "@radix-ui/react-presence",
354
- "@radix-ui/react-primitive",
355
- "@radix-ui/react-use-callback-ref",
356
- "@radix-ui/react-use-controllable-state",
357
- "@radix-ui/react-use-layout-effect",
358
- "@radix-ui/react-use-previous",
359
- "@radix-ui/react-visually-hidden",
360
- "react",
361
- "react-dom"
362
- ]
363
- },
364
- "@radix-ui/react-popover@1.1.15_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
365
- "integrity": "sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==",
366
- "dependencies": [
367
- "@radix-ui/primitive",
368
- "@radix-ui/react-compose-refs",
369
- "@radix-ui/react-context",
370
- "@radix-ui/react-dismissable-layer",
371
- "@radix-ui/react-focus-guards",
372
- "@radix-ui/react-focus-scope",
373
- "@radix-ui/react-id",
374
- "@radix-ui/react-popper",
375
- "@radix-ui/react-portal",
376
- "@radix-ui/react-presence",
377
- "@radix-ui/react-primitive",
378
- "@radix-ui/react-slot",
379
- "@radix-ui/react-use-controllable-state",
380
- "aria-hidden",
381
- "react",
382
- "react-dom",
383
- "react-remove-scroll"
384
- ]
385
- },
386
- "@radix-ui/react-popper@1.2.8_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
387
- "integrity": "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==",
388
- "dependencies": [
389
- "@floating-ui/react-dom",
390
- "@radix-ui/react-arrow",
391
- "@radix-ui/react-compose-refs",
392
- "@radix-ui/react-context",
393
- "@radix-ui/react-primitive",
394
- "@radix-ui/react-use-callback-ref",
395
- "@radix-ui/react-use-layout-effect",
396
- "@radix-ui/react-use-rect",
397
- "@radix-ui/react-use-size",
398
- "@radix-ui/rect",
399
- "react",
400
- "react-dom"
401
- ]
402
- },
403
- "@radix-ui/react-portal@1.1.9_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
404
- "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==",
405
- "dependencies": [
406
- "@radix-ui/react-primitive",
407
- "@radix-ui/react-use-layout-effect",
408
- "react",
409
- "react-dom"
410
- ]
411
- },
412
- "@radix-ui/react-presence@1.1.5_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
413
- "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==",
414
- "dependencies": [
415
- "@radix-ui/react-compose-refs",
416
- "@radix-ui/react-use-layout-effect",
417
- "react",
418
- "react-dom"
419
- ]
420
- },
421
- "@radix-ui/react-primitive@2.1.3_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
422
- "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==",
423
- "dependencies": [
424
- "@radix-ui/react-slot",
425
- "react",
426
- "react-dom"
427
- ]
428
- },
429
- "@radix-ui/react-progress@1.1.7_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
430
- "integrity": "sha512-vPdg/tF6YC/ynuBIJlk1mm7Le0VgW6ub6J2UWnTQ7/D23KXcPI1qy+0vBkgKgd38RCMJavBXpB83HPNFMTb0Fg==",
431
- "dependencies": [
432
- "@radix-ui/react-context",
433
- "@radix-ui/react-primitive",
434
- "react",
435
- "react-dom"
436
- ]
437
- },
438
- "@radix-ui/react-radio-group@1.3.8_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
439
- "integrity": "sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==",
440
- "dependencies": [
441
- "@radix-ui/primitive",
442
- "@radix-ui/react-compose-refs",
443
- "@radix-ui/react-context",
444
- "@radix-ui/react-direction",
445
- "@radix-ui/react-presence",
446
- "@radix-ui/react-primitive",
447
- "@radix-ui/react-roving-focus",
448
- "@radix-ui/react-use-controllable-state",
449
- "@radix-ui/react-use-previous",
450
- "@radix-ui/react-use-size",
451
- "react",
452
- "react-dom"
453
- ]
454
- },
455
- "@radix-ui/react-roving-focus@1.1.11_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
456
- "integrity": "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==",
457
- "dependencies": [
458
- "@radix-ui/primitive",
459
- "@radix-ui/react-collection",
460
- "@radix-ui/react-compose-refs",
461
- "@radix-ui/react-context",
462
- "@radix-ui/react-direction",
463
- "@radix-ui/react-id",
464
- "@radix-ui/react-primitive",
465
- "@radix-ui/react-use-callback-ref",
466
- "@radix-ui/react-use-controllable-state",
467
- "react",
468
- "react-dom"
469
- ]
470
- },
471
- "@radix-ui/react-scroll-area@1.2.10_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
472
- "integrity": "sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==",
473
- "dependencies": [
474
- "@radix-ui/number",
475
- "@radix-ui/primitive",
476
- "@radix-ui/react-compose-refs",
477
- "@radix-ui/react-context",
478
- "@radix-ui/react-direction",
479
- "@radix-ui/react-presence",
480
- "@radix-ui/react-primitive",
481
- "@radix-ui/react-use-callback-ref",
482
- "@radix-ui/react-use-layout-effect",
483
- "react",
484
- "react-dom"
485
- ]
486
- },
487
- "@radix-ui/react-select@2.2.6_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
488
- "integrity": "sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==",
489
- "dependencies": [
490
- "@radix-ui/number",
491
- "@radix-ui/primitive",
492
- "@radix-ui/react-collection",
493
- "@radix-ui/react-compose-refs",
494
- "@radix-ui/react-context",
495
- "@radix-ui/react-direction",
496
- "@radix-ui/react-dismissable-layer",
497
- "@radix-ui/react-focus-guards",
498
- "@radix-ui/react-focus-scope",
499
- "@radix-ui/react-id",
500
- "@radix-ui/react-popper",
501
- "@radix-ui/react-portal",
502
- "@radix-ui/react-primitive",
503
- "@radix-ui/react-slot",
504
- "@radix-ui/react-use-callback-ref",
505
- "@radix-ui/react-use-controllable-state",
506
- "@radix-ui/react-use-layout-effect",
507
- "@radix-ui/react-use-previous",
508
- "@radix-ui/react-visually-hidden",
509
- "aria-hidden",
510
- "react",
511
- "react-dom",
512
- "react-remove-scroll"
513
- ]
514
- },
515
- "@radix-ui/react-separator@1.1.7_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
516
- "integrity": "sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==",
517
- "dependencies": [
518
- "@radix-ui/react-primitive",
519
- "react",
520
- "react-dom"
521
- ]
522
- },
523
- "@radix-ui/react-slider@1.3.6_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
524
- "integrity": "sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==",
525
- "dependencies": [
526
- "@radix-ui/number",
527
- "@radix-ui/primitive",
528
- "@radix-ui/react-collection",
529
- "@radix-ui/react-compose-refs",
530
- "@radix-ui/react-context",
531
- "@radix-ui/react-direction",
532
- "@radix-ui/react-primitive",
533
- "@radix-ui/react-use-controllable-state",
534
- "@radix-ui/react-use-layout-effect",
535
- "@radix-ui/react-use-previous",
536
- "@radix-ui/react-use-size",
537
- "react",
538
- "react-dom"
539
- ]
540
- },
541
- "@radix-ui/react-slot@1.2.3_react@19.1.1": {
542
- "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==",
543
- "dependencies": [
544
- "@radix-ui/react-compose-refs",
545
- "react"
546
- ]
547
- },
548
- "@radix-ui/react-switch@1.2.6_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
549
- "integrity": "sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==",
550
- "dependencies": [
551
- "@radix-ui/primitive",
552
- "@radix-ui/react-compose-refs",
553
- "@radix-ui/react-context",
554
- "@radix-ui/react-primitive",
555
- "@radix-ui/react-use-controllable-state",
556
- "@radix-ui/react-use-previous",
557
- "@radix-ui/react-use-size",
558
- "react",
559
- "react-dom"
560
- ]
561
- },
562
- "@radix-ui/react-tabs@1.1.13_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
563
- "integrity": "sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==",
564
- "dependencies": [
565
- "@radix-ui/primitive",
566
- "@radix-ui/react-context",
567
- "@radix-ui/react-direction",
568
- "@radix-ui/react-id",
569
- "@radix-ui/react-presence",
570
- "@radix-ui/react-primitive",
571
- "@radix-ui/react-roving-focus",
572
- "@radix-ui/react-use-controllable-state",
573
- "react",
574
- "react-dom"
575
- ]
576
- },
577
- "@radix-ui/react-toggle-group@1.1.11_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
578
- "integrity": "sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q==",
579
- "dependencies": [
580
- "@radix-ui/primitive",
581
- "@radix-ui/react-context",
582
- "@radix-ui/react-direction",
583
- "@radix-ui/react-primitive",
584
- "@radix-ui/react-roving-focus",
585
- "@radix-ui/react-toggle",
586
- "@radix-ui/react-use-controllable-state",
587
- "react",
588
- "react-dom"
589
- ]
590
- },
591
- "@radix-ui/react-toggle@1.1.10_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
592
- "integrity": "sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==",
593
- "dependencies": [
594
- "@radix-ui/primitive",
595
- "@radix-ui/react-primitive",
596
- "@radix-ui/react-use-controllable-state",
597
- "react",
598
- "react-dom"
599
- ]
600
- },
601
- "@radix-ui/react-tooltip@1.2.8_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
602
- "integrity": "sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==",
603
- "dependencies": [
604
- "@radix-ui/primitive",
605
- "@radix-ui/react-compose-refs",
606
- "@radix-ui/react-context",
607
- "@radix-ui/react-dismissable-layer",
608
- "@radix-ui/react-id",
609
- "@radix-ui/react-popper",
610
- "@radix-ui/react-portal",
611
- "@radix-ui/react-presence",
612
- "@radix-ui/react-primitive",
613
- "@radix-ui/react-slot",
614
- "@radix-ui/react-use-controllable-state",
615
- "@radix-ui/react-visually-hidden",
616
- "react",
617
- "react-dom"
618
- ]
619
- },
620
- "@radix-ui/react-use-callback-ref@1.1.1_react@19.1.1": {
621
- "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==",
622
- "dependencies": [
623
- "react"
624
- ]
625
- },
626
- "@radix-ui/react-use-controllable-state@1.2.2_react@19.1.1": {
627
- "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==",
628
- "dependencies": [
629
- "@radix-ui/react-use-effect-event",
630
- "@radix-ui/react-use-layout-effect",
631
- "react"
632
- ]
633
- },
634
- "@radix-ui/react-use-effect-event@0.0.2_react@19.1.1": {
635
- "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==",
636
- "dependencies": [
637
- "@radix-ui/react-use-layout-effect",
638
- "react"
639
- ]
640
- },
641
- "@radix-ui/react-use-escape-keydown@1.1.1_react@19.1.1": {
642
- "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==",
643
- "dependencies": [
644
- "@radix-ui/react-use-callback-ref",
645
- "react"
646
- ]
647
- },
648
- "@radix-ui/react-use-is-hydrated@0.1.0_react@19.1.1": {
649
- "integrity": "sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==",
650
- "dependencies": [
651
- "react",
652
- "use-sync-external-store"
653
- ]
654
- },
655
- "@radix-ui/react-use-layout-effect@1.1.1_react@19.1.1": {
656
- "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==",
657
- "dependencies": [
658
- "react"
659
- ]
660
- },
661
- "@radix-ui/react-use-previous@1.1.1_react@19.1.1": {
662
- "integrity": "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==",
663
- "dependencies": [
664
- "react"
665
- ]
666
- },
667
- "@radix-ui/react-use-rect@1.1.1_react@19.1.1": {
668
- "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==",
669
- "dependencies": [
670
- "@radix-ui/rect",
671
- "react"
672
- ]
673
- },
674
- "@radix-ui/react-use-size@1.1.1_react@19.1.1": {
675
- "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==",
676
- "dependencies": [
677
- "@radix-ui/react-use-layout-effect",
678
- "react"
679
- ]
680
- },
681
- "@radix-ui/react-visually-hidden@1.2.3_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
682
- "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==",
683
- "dependencies": [
684
- "@radix-ui/react-primitive",
685
- "react",
686
- "react-dom"
687
- ]
688
- },
689
- "@radix-ui/rect@1.1.1": {
690
- "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw=="
691
- },
692
- "aria-hidden@1.2.6": {
693
- "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==",
694
- "dependencies": [
695
- "tslib"
696
- ]
697
- },
698
- "class-variance-authority@0.7.1": {
699
- "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==",
700
- "dependencies": [
701
- "clsx"
702
- ]
703
- },
704
- "clsx@2.1.1": {
705
- "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="
706
- },
707
- "cmdk@1.1.1_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
708
- "integrity": "sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==",
709
- "dependencies": [
710
- "@radix-ui/react-compose-refs",
711
- "@radix-ui/react-dialog",
712
- "@radix-ui/react-id",
713
- "@radix-ui/react-primitive",
714
- "react",
715
- "react-dom"
716
- ]
717
- },
718
- "date-fns-jalali@4.1.0-0": {
719
- "integrity": "sha512-hTIP/z+t+qKwBDcmmsnmjWTduxCg+5KfdqWQvb2X/8C9+knYY6epN/pfxdDuyVlSVeFz0sM5eEfwIUQ70U4ckg=="
720
- },
721
- "date-fns@4.1.0": {
722
- "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg=="
723
- },
724
- "detect-node-es@1.1.0": {
725
- "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="
726
- },
727
- "embla-carousel-react@8.6.0_react@19.1.1_embla-carousel@8.6.0": {
728
- "integrity": "sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==",
729
- "dependencies": [
730
- "embla-carousel",
731
- "embla-carousel-reactive-utils",
732
- "react"
733
- ]
734
- },
735
- "embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0": {
736
- "integrity": "sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A==",
737
- "dependencies": [
738
- "embla-carousel"
739
- ]
740
- },
741
- "embla-carousel@8.6.0": {
742
- "integrity": "sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA=="
743
- },
744
- "get-nonce@1.0.1": {
745
- "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q=="
746
- },
747
- "lucide-react@0.537.0_react@19.1.1": {
748
- "integrity": "sha512-VxWsdxBGeFnlC+HwMg/l08HptN4YRU9o/lRog156jOmRxI1ERKqN+rJiNY/mPcKAdWdM0UbyO8ft1o0jq69SSQ==",
749
- "dependencies": [
750
- "react"
751
- ]
752
- },
753
- "next-themes@0.4.6_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
754
- "integrity": "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==",
755
- "dependencies": [
756
- "react",
757
- "react-dom"
758
- ]
759
- },
760
- "react-day-picker@9.11.0_react@19.1.1": {
761
- "integrity": "sha512-L4FYOaPrr3+AEROeP6IG2mCORZZfxJDkJI2df8mv1jyPrNYeccgmFPZDaHyAuPCBCddQFozkxbikj2NhMEYfDQ==",
762
- "dependencies": [
763
- "@date-fns/tz",
764
- "date-fns",
765
- "date-fns-jalali",
766
- "react"
767
- ]
768
- },
769
- "react-dom@19.1.1_react@19.1.1": {
770
- "integrity": "sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==",
771
- "dependencies": [
772
- "react",
773
- "scheduler"
774
- ]
775
- },
776
- "react-remove-scroll-bar@2.3.8_react@19.1.1": {
777
- "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==",
778
- "dependencies": [
779
- "react",
780
- "react-style-singleton",
781
- "tslib"
782
- ]
783
- },
784
- "react-remove-scroll@2.7.1_react@19.1.1": {
785
- "integrity": "sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==",
786
- "dependencies": [
787
- "react",
788
- "react-remove-scroll-bar",
789
- "react-style-singleton",
790
- "tslib",
791
- "use-callback-ref",
792
- "use-sidecar"
793
- ]
794
- },
795
- "react-resizable-panels@3.0.6_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
796
- "integrity": "sha512-b3qKHQ3MLqOgSS+FRYKapNkJZf5EQzuf6+RLiq1/IlTHw99YrZ2NJZLk4hQIzTnnIkRg2LUqyVinu6YWWpUYew==",
797
- "dependencies": [
798
- "react",
799
- "react-dom"
800
- ]
801
- },
802
- "react-style-singleton@2.2.3_react@19.1.1": {
803
- "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==",
804
- "dependencies": [
805
- "get-nonce",
806
- "react",
807
- "tslib"
808
- ]
809
- },
810
- "react@19.1.1": {
811
- "integrity": "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ=="
812
- },
813
- "scheduler@0.26.0": {
814
- "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA=="
815
- },
816
- "sonner@2.0.7_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
817
- "integrity": "sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==",
818
- "dependencies": [
819
- "react",
820
- "react-dom"
821
- ]
822
- },
823
- "tailwind-merge@3.3.1": {
824
- "integrity": "sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g=="
825
- },
826
- "tailwindcss-animate@1.0.7_tailwindcss@4.1.13": {
827
- "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==",
828
- "dependencies": [
829
- "tailwindcss"
830
- ]
831
- },
832
- "tailwindcss@4.1.13": {
833
- "integrity": "sha512-i+zidfmTqtwquj4hMEwdjshYYgMbOrPzb9a0M3ZgNa0JMoZeFC6bxZvO8yr8ozS6ix2SDz0+mvryPeBs2TFE+w=="
834
- },
835
- "tslib@2.8.1": {
836
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
837
- },
838
- "use-callback-ref@1.3.3_react@19.1.1": {
839
- "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==",
840
- "dependencies": [
841
- "react",
842
- "tslib"
843
- ]
844
- },
845
- "use-sidecar@1.1.3_react@19.1.1": {
846
- "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==",
847
- "dependencies": [
848
- "detect-node-es",
849
- "react",
850
- "tslib"
851
- ]
852
- },
853
- "use-sync-external-store@1.5.0_react@19.1.1": {
854
- "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==",
855
- "dependencies": [
856
- "react"
857
- ]
858
- },
859
- "vaul@1.1.2_react@19.1.1_react-dom@19.1.1__react@19.1.1": {
860
- "integrity": "sha512-ZFkClGpWyI2WUQjdLJ/BaGuV6AVQiJ3uELGk3OYtP+B6yCO7Cmn9vPFXVJkRaGkOJu3m8bQMgtyzNHixULceQA==",
861
- "dependencies": [
862
- "@radix-ui/react-dialog",
863
- "react",
864
- "react-dom"
865
- ]
866
- }
867
- },
868
- "workspace": {
869
- "packageJson": {
870
- "dependencies": [
871
- "npm:@radix-ui/react-accordion@^1.2.11",
872
- "npm:@radix-ui/react-alert-dialog@^1.1.14",
873
- "npm:@radix-ui/react-aspect-ratio@^1.1.7",
874
- "npm:@radix-ui/react-avatar@^1.1.10",
875
- "npm:@radix-ui/react-checkbox@^1.3.2",
876
- "npm:@radix-ui/react-collapsible@^1.1.11",
877
- "npm:@radix-ui/react-context-menu@^2.2.15",
878
- "npm:@radix-ui/react-dialog@^1.1.14",
879
- "npm:@radix-ui/react-dropdown-menu@^2.1.15",
880
- "npm:@radix-ui/react-hover-card@^1.1.14",
881
- "npm:@radix-ui/react-label@^2.1.7",
882
- "npm:@radix-ui/react-menubar@^1.1.15",
883
- "npm:@radix-ui/react-navigation-menu@^1.2.13",
884
- "npm:@radix-ui/react-popover@^1.1.14",
885
- "npm:@radix-ui/react-progress@^1.1.7",
886
- "npm:@radix-ui/react-radio-group@^1.3.7",
887
- "npm:@radix-ui/react-scroll-area@^1.2.9",
888
- "npm:@radix-ui/react-select@^2.2.5",
889
- "npm:@radix-ui/react-separator@^1.1.7",
890
- "npm:@radix-ui/react-slider@^1.3.5",
891
- "npm:@radix-ui/react-slot@^1.2.3",
892
- "npm:@radix-ui/react-switch@^1.2.5",
893
- "npm:@radix-ui/react-tabs@^1.1.12",
894
- "npm:@radix-ui/react-toggle-group@^1.1.10",
895
- "npm:@radix-ui/react-toggle@^1.1.9",
896
- "npm:@radix-ui/react-tooltip@^1.2.7",
897
- "npm:class-variance-authority@~0.7.1",
898
- "npm:clsx@^2.1.1",
899
- "npm:cmdk@^1.1.1",
900
- "npm:date-fns@^4.1.0",
901
- "npm:embla-carousel-react@^8.6.0",
902
- "npm:lucide-react@0.537",
903
- "npm:next-themes@~0.4.6",
904
- "npm:react-day-picker@^9.8.1",
905
- "npm:react-resizable-panels@^3.0.4",
906
- "npm:sonner@^2.0.7",
907
- "npm:tailwind-merge@^3.3.0",
908
- "npm:tailwindcss-animate@^1.0.7",
909
- "npm:vaul@^1.1.2"
910
- ]
911
- }
912
- }
913
- }