feat: ✨ add header, theme-toggle, button, dropdown-menu
by Sivritkin Dmitriy
1@@ -19,9 +19,12 @@
2 "typecheck": "tsc --noEmit --pretty"
3 },
4 "dependencies": {
5+ "@radix-ui/react-dropdown-menu": "^2.0.6",
6 "@radix-ui/react-icons": "^1.3.0",
7+ "@radix-ui/react-slot": "^1.0.2",
8 "class-variance-authority": "^0.7.0",
9 "clsx": "^2.1.1",
10+ "lucide-react": "^0.395.0",
11 "next": "14.2.4",
12 "next-themes": "^0.3.0",
13 "react": "^18",@@ -0,0 +1 @@
14+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-git-graph"><circle cx="5" cy="6" r="3"/><path d="M5 9v6"/><circle cx="5" cy="18" r="3"/><path d="M12 3v18"/><circle cx="19" cy="6" r="3"/><path d="M16 15.7A9 9 0 0 0 19 9"/></svg>@@ -2,7 +2,8 @@ import type { Metadata } from "next";
15 import { Rubik as FontSans } from "next/font/google";
16 import "./globals.css";
17 import { ThemeProvider } from "~/app/providers/theme";
18-import { cn } from "~/lib/utils";
19+import { cn } from "~/shared/lib/utils";
20+import { Header } from "~/components/header";
21
22 const fontSans = FontSans({ subsets: ["latin"], variable: "--font-sans" });
23
24@@ -32,6 +33,7 @@ export default function RootLayout({
25 disableTransitionOnChange
26 >
27 <div className="relative flex min-h-screen flex-col">
28+ <Header />
29 <main className="flex-1">{children}</main>
30 </div>
31 </ThemeProvider>@@ -0,0 +1,31 @@
32+import Link from "next/link";
33+import { ThemeToggle } from "~/components/theme-toggle";
34+import { GitHubLogoIcon } from "@radix-ui/react-icons";
35+import { Button } from "~/shared/ui/button";
36+import { GitGraphIcon } from "lucide-react";
37+
38+export const Header = () => {
39+ return (
40+ <header className="sticky top-0 h-16 border-b bg-background px-4 md:px-6">
41+ <div className="container flex h-full items-center justify-between gap-4">
42+ <nav className="flex flex-row items-center gap-6 text-lg text-xs font-medium md:gap-5 md:text-sm lg:gap-6">
43+ <Link
44+ href="/"
45+ className="flex items-center gap-2 text-lg font-semibold md:text-base"
46+ >
47+ <GitGraphIcon className="h-6 w-6" /> Commit Explorer
48+ <span className="sr-only">Commit Explorer</span>
49+ </Link>
50+ </nav>
51+ <div className="flex items-center gap-3">
52+ <Button variant="outline" size="icon" asChild>
53+ <Link href="https://github.com/velenyx/github-commit-explorer">
54+ <GitHubLogoIcon className="h-[1.2rem] w-[1.2rem]" />
55+ </Link>
56+ </Button>
57+ <ThemeToggle />
58+ </div>
59+ </div>
60+ </header>
61+ );
62+};@@ -0,0 +1,40 @@
63+"use client";
64+
65+import * as React from "react";
66+import { MoonIcon, SunIcon } from "lucide-react";
67+import { useTheme } from "next-themes";
68+
69+import { Button } from "~/shared/ui/button";
70+import {
71+ DropdownMenu,
72+ DropdownMenuContent,
73+ DropdownMenuItem,
74+ DropdownMenuTrigger,
75+} from "~/shared/ui/dropdown-menu";
76+
77+export const ThemeToggle = () => {
78+ const { setTheme } = useTheme();
79+
80+ return (
81+ <DropdownMenu>
82+ <DropdownMenuTrigger asChild>
83+ <Button variant="outline" size="icon">
84+ <SunIcon className="h-[1.2rem] w-[1.2rem] rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0" />
85+ <MoonIcon className="absolute h-[1.2rem] w-[1.2rem] rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100" />
86+ <span className="sr-only">Toggle theme</span>
87+ </Button>
88+ </DropdownMenuTrigger>
89+ <DropdownMenuContent align="end">
90+ <DropdownMenuItem onClick={() => setTheme("light")}>
91+ Light
92+ </DropdownMenuItem>
93+ <DropdownMenuItem onClick={() => setTheme("dark")}>
94+ Dark
95+ </DropdownMenuItem>
96+ <DropdownMenuItem onClick={() => setTheme("system")}>
97+ System
98+ </DropdownMenuItem>
99+ </DropdownMenuContent>
100+ </DropdownMenu>
101+ );
102+};@@ -0,0 +1,57 @@
103+import * as React from "react"
104+import { Slot } from "@radix-ui/react-slot"
105+import { cva, type VariantProps } from "class-variance-authority"
106+
107+import { cn } from "~/shared/lib/utils"
108+
109+const buttonVariants = cva(
110+ "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50",
111+ {
112+ variants: {
113+ variant: {
114+ default:
115+ "bg-primary text-primary-foreground shadow hover:bg-primary/90",
116+ destructive:
117+ "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",
118+ outline:
119+ "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground",
120+ secondary:
121+ "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80",
122+ ghost: "hover:bg-accent hover:text-accent-foreground",
123+ link: "text-primary underline-offset-4 hover:underline",
124+ },
125+ size: {
126+ default: "h-9 px-4 py-2",
127+ sm: "h-8 rounded-md px-3 text-xs",
128+ lg: "h-10 rounded-md px-8",
129+ icon: "h-9 w-9",
130+ },
131+ },
132+ defaultVariants: {
133+ variant: "default",
134+ size: "default",
135+ },
136+ }
137+)
138+
139+export interface ButtonProps
140+ extends React.ButtonHTMLAttributes<HTMLButtonElement>,
141+ VariantProps<typeof buttonVariants> {
142+ asChild?: boolean
143+}
144+
145+const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
146+ ({ className, variant, size, asChild = false, ...props }, ref) => {
147+ const Comp = asChild ? Slot : "button"
148+ return (
149+ <Comp
150+ className={cn(buttonVariants({ variant, size, className }))}
151+ ref={ref}
152+ {...props}
153+ />
154+ )
155+ }
156+)
157+Button.displayName = "Button"
158+
159+export { Button, buttonVariants }@@ -0,0 +1,205 @@
160+"use client"
161+
162+import * as React from "react"
163+import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu"
164+import {
165+ CheckIcon,
166+ ChevronRightIcon,
167+ DotFilledIcon,
168+} from "@radix-ui/react-icons"
169+
170+import { cn } from "~/shared/lib/utils"
171+
172+const DropdownMenu = DropdownMenuPrimitive.Root
173+
174+const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger
175+
176+const DropdownMenuGroup = DropdownMenuPrimitive.Group
177+
178+const DropdownMenuPortal = DropdownMenuPrimitive.Portal
179+
180+const DropdownMenuSub = DropdownMenuPrimitive.Sub
181+
182+const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup
183+
184+const DropdownMenuSubTrigger = React.forwardRef<
185+ React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,
186+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {
187+ inset?: boolean
188+ }
189+>(({ className, inset, children, ...props }, ref) => (
190+ <DropdownMenuPrimitive.SubTrigger
191+ ref={ref}
192+ className={cn(
193+ "flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent",
194+ inset && "pl-8",
195+ className
196+ )}
197+ {...props}
198+ >
199+ {children}
200+ <ChevronRightIcon className="ml-auto h-4 w-4" />
201+ </DropdownMenuPrimitive.SubTrigger>
202+))
203+DropdownMenuSubTrigger.displayName =
204+ DropdownMenuPrimitive.SubTrigger.displayName
205+
206+const DropdownMenuSubContent = React.forwardRef<
207+ React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,
208+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>
209+>(({ className, ...props }, ref) => (
210+ <DropdownMenuPrimitive.SubContent
211+ ref={ref}
212+ className={cn(
213+ "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
214+ className
215+ )}
216+ {...props}
217+ />
218+))
219+DropdownMenuSubContent.displayName =
220+ DropdownMenuPrimitive.SubContent.displayName
221+
222+const DropdownMenuContent = React.forwardRef<
223+ React.ElementRef<typeof DropdownMenuPrimitive.Content>,
224+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>
225+>(({ className, sideOffset = 4, ...props }, ref) => (
226+ <DropdownMenuPrimitive.Portal>
227+ <DropdownMenuPrimitive.Content
228+ ref={ref}
229+ sideOffset={sideOffset}
230+ className={cn(
231+ "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md",
232+ "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
233+ className
234+ )}
235+ {...props}
236+ />
237+ </DropdownMenuPrimitive.Portal>
238+))
239+DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName
240+
241+const DropdownMenuItem = React.forwardRef<
242+ React.ElementRef<typeof DropdownMenuPrimitive.Item>,
243+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {
244+ inset?: boolean
245+ }
246+>(({ className, inset, ...props }, ref) => (
247+ <DropdownMenuPrimitive.Item
248+ ref={ref}
249+ className={cn(
250+ "relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
251+ inset && "pl-8",
252+ className
253+ )}
254+ {...props}
255+ />
256+))
257+DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName
258+
259+const DropdownMenuCheckboxItem = React.forwardRef<
260+ React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,
261+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>
262+>(({ className, children, checked, ...props }, ref) => (
263+ <DropdownMenuPrimitive.CheckboxItem
264+ ref={ref}
265+ className={cn(
266+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
267+ className
268+ )}
269+ checked={checked}
270+ {...props}
271+ >
272+ <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
273+ <DropdownMenuPrimitive.ItemIndicator>
274+ <CheckIcon className="h-4 w-4" />
275+ </DropdownMenuPrimitive.ItemIndicator>
276+ </span>
277+ {children}
278+ </DropdownMenuPrimitive.CheckboxItem>
279+))
280+DropdownMenuCheckboxItem.displayName =
281+ DropdownMenuPrimitive.CheckboxItem.displayName
282+
283+const DropdownMenuRadioItem = React.forwardRef<
284+ React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,
285+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>
286+>(({ className, children, ...props }, ref) => (
287+ <DropdownMenuPrimitive.RadioItem
288+ ref={ref}
289+ className={cn(
290+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
291+ className
292+ )}
293+ {...props}
294+ >
295+ <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
296+ <DropdownMenuPrimitive.ItemIndicator>
297+ <DotFilledIcon className="h-4 w-4 fill-current" />
298+ </DropdownMenuPrimitive.ItemIndicator>
299+ </span>
300+ {children}
301+ </DropdownMenuPrimitive.RadioItem>
302+))
303+DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName
304+
305+const DropdownMenuLabel = React.forwardRef<
306+ React.ElementRef<typeof DropdownMenuPrimitive.Label>,
307+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {
308+ inset?: boolean
309+ }
310+>(({ className, inset, ...props }, ref) => (
311+ <DropdownMenuPrimitive.Label
312+ ref={ref}
313+ className={cn(
314+ "px-2 py-1.5 text-sm font-semibold",
315+ inset && "pl-8",
316+ className
317+ )}
318+ {...props}
319+ />
320+))
321+DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName
322+
323+const DropdownMenuSeparator = React.forwardRef<
324+ React.ElementRef<typeof DropdownMenuPrimitive.Separator>,
325+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>
326+>(({ className, ...props }, ref) => (
327+ <DropdownMenuPrimitive.Separator
328+ ref={ref}
329+ className={cn("-mx-1 my-1 h-px bg-muted", className)}
330+ {...props}
331+ />
332+))
333+DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName
334+
335+const DropdownMenuShortcut = ({
336+ className,
337+ ...props
338+}: React.HTMLAttributes<HTMLSpanElement>) => {
339+ return (
340+ <span
341+ className={cn("ml-auto text-xs tracking-widest opacity-60", className)}
342+ {...props}
343+ />
344+ )
345+}
346+DropdownMenuShortcut.displayName = "DropdownMenuShortcut"
347+
348+export {
349+ DropdownMenu,
350+ DropdownMenuTrigger,
351+ DropdownMenuContent,
352+ DropdownMenuItem,
353+ DropdownMenuCheckboxItem,
354+ DropdownMenuRadioItem,
355+ DropdownMenuLabel,
356+ DropdownMenuSeparator,
357+ DropdownMenuShortcut,
358+ DropdownMenuGroup,
359+ DropdownMenuPortal,
360+ DropdownMenuSub,
361+ DropdownMenuSubContent,
362+ DropdownMenuSubTrigger,
363+ DropdownMenuRadioGroup,
364+}@@ -12,7 +12,7 @@ __metadata:
365 languageName: node
366 linkType: hard
367
368-"@babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.24.1":
369+"@babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.24.1":
370 version: 7.24.7
371 resolution: "@babel/runtime@npm:7.24.7"
372 dependencies:
373@@ -63,6 +63,44 @@ __metadata:
374 languageName: node
375 linkType: hard
376
377+"@floating-ui/core@npm:^1.0.0":
378+ version: 1.6.2
379+ resolution: "@floating-ui/core@npm:1.6.2"
380+ dependencies:
381+ "@floating-ui/utils": "npm:^0.2.0"
382+ checksum: 10c0/db2621dc682e7f043d6f118d087ae6a6bfdacf40b26ede561760dd53548c16e2e7c59031e013e37283801fa307b55e6de65bf3b316b96a054e4a6a7cb937c59e
383+ languageName: node
384+ linkType: hard
385+
386+"@floating-ui/dom@npm:^1.0.0":
387+ version: 1.6.5
388+ resolution: "@floating-ui/dom@npm:1.6.5"
389+ dependencies:
390+ "@floating-ui/core": "npm:^1.0.0"
391+ "@floating-ui/utils": "npm:^0.2.0"
392+ checksum: 10c0/ebdc14806f786e60df8e7cc2c30bf9cd4d75fe734f06d755588bbdef2f60d0a0f21dffb14abdc58dea96e5577e2e366feca6d66ba962018efd1bc91a3ece4526
393+ languageName: node
394+ linkType: hard
395+
396+"@floating-ui/react-dom@npm:^2.0.0":
397+ version: 2.1.0
398+ resolution: "@floating-ui/react-dom@npm:2.1.0"
399+ dependencies:
400+ "@floating-ui/dom": "npm:^1.0.0"
401+ peerDependencies:
402+ react: ">=16.8.0"
403+ react-dom: ">=16.8.0"
404+ checksum: 10c0/9ee44dfeb27f585fb1e0114cbe37c72ff5d34149900f4f3013f6b0abf8c3365eab13286c360f97fbe0c44bb91a745e7a4c18b82d111990b45a7a7796dc55e461
405+ languageName: node
406+ linkType: hard
407+
408+"@floating-ui/utils@npm:^0.2.0":
409+ version: 0.2.2
410+ resolution: "@floating-ui/utils@npm:0.2.2"
411+ checksum: 10c0/b2becdcafdf395af1641348da0031ff1eaad2bc60c22e14bd3abad4acfe2c8401e03097173d89a2f646a99b75819a78ef21ebb2572cab0042a56dd654b0065cd
412+ languageName: node
413+ linkType: hard
414+
415 "@humanwhocodes/config-array@npm:^0.11.14":
416 version: 0.11.14
417 resolution: "@humanwhocodes/config-array@npm:0.11.14"
418@@ -279,6 +317,190 @@ __metadata:
419 languageName: node
420 linkType: hard
421
422+"@radix-ui/primitive@npm:1.0.1":
423+ version: 1.0.1
424+ resolution: "@radix-ui/primitive@npm:1.0.1"
425+ dependencies:
426+ "@babel/runtime": "npm:^7.13.10"
427+ checksum: 10c0/912216455537db3ca77f3e7f70174fb2b454fbd4a37a0acb7cfadad9ab6131abdfb787472242574460a3c301edf45738340cc84f6717982710082840fde7d916
428+ languageName: node
429+ linkType: hard
430+
431+"@radix-ui/react-arrow@npm:1.0.3":
432+ version: 1.0.3
433+ resolution: "@radix-ui/react-arrow@npm:1.0.3"
434+ dependencies:
435+ "@babel/runtime": "npm:^7.13.10"
436+ "@radix-ui/react-primitive": "npm:1.0.3"
437+ peerDependencies:
438+ "@types/react": "*"
439+ "@types/react-dom": "*"
440+ react: ^16.8 || ^17.0 || ^18.0
441+ react-dom: ^16.8 || ^17.0 || ^18.0
442+ peerDependenciesMeta:
443+ "@types/react":
444+ optional: true
445+ "@types/react-dom":
446+ optional: true
447+ checksum: 10c0/c931f6d7e0bac50fd1654a0303a303aff74a68a13a33a851a43a7c88677b53a92ca6557920b9105144a3002f899ce888437d20ddd7803a5c716edac99587626d
448+ languageName: node
449+ linkType: hard
450+
451+"@radix-ui/react-collection@npm:1.0.3":
452+ version: 1.0.3
453+ resolution: "@radix-ui/react-collection@npm:1.0.3"
454+ dependencies:
455+ "@babel/runtime": "npm:^7.13.10"
456+ "@radix-ui/react-compose-refs": "npm:1.0.1"
457+ "@radix-ui/react-context": "npm:1.0.1"
458+ "@radix-ui/react-primitive": "npm:1.0.3"
459+ "@radix-ui/react-slot": "npm:1.0.2"
460+ peerDependencies:
461+ "@types/react": "*"
462+ "@types/react-dom": "*"
463+ react: ^16.8 || ^17.0 || ^18.0
464+ react-dom: ^16.8 || ^17.0 || ^18.0
465+ peerDependenciesMeta:
466+ "@types/react":
467+ optional: true
468+ "@types/react-dom":
469+ optional: true
470+ checksum: 10c0/cefa56383d7451ca79e4bd5a29aaeef6c205a04297213efd149aaead82fc8cde4fb8298e20e6b3613e5696e43f814fb4489805428f6604834fb31f73c6725fa8
471+ languageName: node
472+ linkType: hard
473+
474+"@radix-ui/react-compose-refs@npm:1.0.1":
475+ version: 1.0.1
476+ resolution: "@radix-ui/react-compose-refs@npm:1.0.1"
477+ dependencies:
478+ "@babel/runtime": "npm:^7.13.10"
479+ peerDependencies:
480+ "@types/react": "*"
481+ react: ^16.8 || ^17.0 || ^18.0
482+ peerDependenciesMeta:
483+ "@types/react":
484+ optional: true
485+ checksum: 10c0/be06f8dab35b5a1bffa7a5982fb26218ddade1acb751288333e3b89d7b4a7dfb5a6371be83876dac0ec2ebe0866d295e8618b778608e1965342986ea448040ec
486+ languageName: node
487+ linkType: hard
488+
489+"@radix-ui/react-context@npm:1.0.1":
490+ version: 1.0.1
491+ resolution: "@radix-ui/react-context@npm:1.0.1"
492+ dependencies:
493+ "@babel/runtime": "npm:^7.13.10"
494+ peerDependencies:
495+ "@types/react": "*"
496+ react: ^16.8 || ^17.0 || ^18.0
497+ peerDependenciesMeta:
498+ "@types/react":
499+ optional: true
500+ checksum: 10c0/3de5761b32cc70cd61715527f29d8c699c01ab28c195ced972ccbc7025763a373a68f18c9f948c7a7b922e469fd2df7fee5f7536e3f7bad44ffc06d959359333
501+ languageName: node
502+ linkType: hard
503+
504+"@radix-ui/react-direction@npm:1.0.1":
505+ version: 1.0.1
506+ resolution: "@radix-ui/react-direction@npm:1.0.1"
507+ dependencies:
508+ "@babel/runtime": "npm:^7.13.10"
509+ peerDependencies:
510+ "@types/react": "*"
511+ react: ^16.8 || ^17.0 || ^18.0
512+ peerDependenciesMeta:
513+ "@types/react":
514+ optional: true
515+ checksum: 10c0/b1a45b4d1d5070ca3b5864b920f6c6210c962bdb519abb62b38b1baef9d06737dc3d8ecdb61860b7504a735235a539652f5977c7299ec021da84e6b0f64d988a
516+ languageName: node
517+ linkType: hard
518+
519+"@radix-ui/react-dismissable-layer@npm:1.0.5":
520+ version: 1.0.5
521+ resolution: "@radix-ui/react-dismissable-layer@npm:1.0.5"
522+ dependencies:
523+ "@babel/runtime": "npm:^7.13.10"
524+ "@radix-ui/primitive": "npm:1.0.1"
525+ "@radix-ui/react-compose-refs": "npm:1.0.1"
526+ "@radix-ui/react-primitive": "npm:1.0.3"
527+ "@radix-ui/react-use-callback-ref": "npm:1.0.1"
528+ "@radix-ui/react-use-escape-keydown": "npm:1.0.3"
529+ peerDependencies:
530+ "@types/react": "*"
531+ "@types/react-dom": "*"
532+ react: ^16.8 || ^17.0 || ^18.0
533+ react-dom: ^16.8 || ^17.0 || ^18.0
534+ peerDependenciesMeta:
535+ "@types/react":
536+ optional: true
537+ "@types/react-dom":
538+ optional: true
539+ checksum: 10c0/7e4308867aecfb07b506330c1964d94a52247ab9453725613cd326762aa13e483423c250f107219c131b0449600eb8d1576ce3159c2b96e8c978f75e46062cb2
540+ languageName: node
541+ linkType: hard
542+
543+"@radix-ui/react-dropdown-menu@npm:^2.0.6":
544+ version: 2.0.6
545+ resolution: "@radix-ui/react-dropdown-menu@npm:2.0.6"
546+ dependencies:
547+ "@babel/runtime": "npm:^7.13.10"
548+ "@radix-ui/primitive": "npm:1.0.1"
549+ "@radix-ui/react-compose-refs": "npm:1.0.1"
550+ "@radix-ui/react-context": "npm:1.0.1"
551+ "@radix-ui/react-id": "npm:1.0.1"
552+ "@radix-ui/react-menu": "npm:2.0.6"
553+ "@radix-ui/react-primitive": "npm:1.0.3"
554+ "@radix-ui/react-use-controllable-state": "npm:1.0.1"
555+ peerDependencies:
556+ "@types/react": "*"
557+ "@types/react-dom": "*"
558+ react: ^16.8 || ^17.0 || ^18.0
559+ react-dom: ^16.8 || ^17.0 || ^18.0
560+ peerDependenciesMeta:
561+ "@types/react":
562+ optional: true
563+ "@types/react-dom":
564+ optional: true
565+ checksum: 10c0/525cab53547d2ce2904518b1f66b62179d656c57c8d6dd7dbe863cc05025d8bad535f44011e2735b07fc500579c3d64d89a9a39593d4c8f91f31052d75b729e1
566+ languageName: node
567+ linkType: hard
568+
569+"@radix-ui/react-focus-guards@npm:1.0.1":
570+ version: 1.0.1
571+ resolution: "@radix-ui/react-focus-guards@npm:1.0.1"
572+ dependencies:
573+ "@babel/runtime": "npm:^7.13.10"
574+ peerDependencies:
575+ "@types/react": "*"
576+ react: ^16.8 || ^17.0 || ^18.0
577+ peerDependenciesMeta:
578+ "@types/react":
579+ optional: true
580+ checksum: 10c0/d5fd4e5aa9d9a87c8ad490b3b4992d6f1d9eddf18e56df2a2bcf8744c4332b275d73377fd193df3e6ba0ad9608dc497709beca5c64de2b834d5f5350b3c9a272
581+ languageName: node
582+ linkType: hard
583+
584+"@radix-ui/react-focus-scope@npm:1.0.4":
585+ version: 1.0.4
586+ resolution: "@radix-ui/react-focus-scope@npm:1.0.4"
587+ dependencies:
588+ "@babel/runtime": "npm:^7.13.10"
589+ "@radix-ui/react-compose-refs": "npm:1.0.1"
590+ "@radix-ui/react-primitive": "npm:1.0.3"
591+ "@radix-ui/react-use-callback-ref": "npm:1.0.1"
592+ peerDependencies:
593+ "@types/react": "*"
594+ "@types/react-dom": "*"
595+ react: ^16.8 || ^17.0 || ^18.0
596+ react-dom: ^16.8 || ^17.0 || ^18.0
597+ peerDependenciesMeta:
598+ "@types/react":
599+ optional: true
600+ "@types/react-dom":
601+ optional: true
602+ checksum: 10c0/2fce0bafcab4e16cf4ed7560bda40654223f3d0add6b231e1c607433030c14e6249818b444b7b58ee7a6ff6bbf8e192c9c81d22c3a5c88c2daade9d1f881b5be
603+ languageName: node
604+ linkType: hard
605+
606 "@radix-ui/react-icons@npm:^1.3.0":
607 version: 1.3.0
608 resolution: "@radix-ui/react-icons@npm:1.3.0"
609@@ -288,6 +510,296 @@ __metadata:
610 languageName: node
611 linkType: hard
612
613+"@radix-ui/react-id@npm:1.0.1":
614+ version: 1.0.1
615+ resolution: "@radix-ui/react-id@npm:1.0.1"
616+ dependencies:
617+ "@babel/runtime": "npm:^7.13.10"
618+ "@radix-ui/react-use-layout-effect": "npm:1.0.1"
619+ peerDependencies:
620+ "@types/react": "*"
621+ react: ^16.8 || ^17.0 || ^18.0
622+ peerDependenciesMeta:
623+ "@types/react":
624+ optional: true
625+ checksum: 10c0/e2859ca58bea171c956098ace7ecf615cf9432f58a118b779a14720746b3adcf0351c36c75de131548672d3cd290ca238198acbd33b88dc4706f98312e9317ad
626+ languageName: node
627+ linkType: hard
628+
629+"@radix-ui/react-menu@npm:2.0.6":
630+ version: 2.0.6
631+ resolution: "@radix-ui/react-menu@npm:2.0.6"
632+ dependencies:
633+ "@babel/runtime": "npm:^7.13.10"
634+ "@radix-ui/primitive": "npm:1.0.1"
635+ "@radix-ui/react-collection": "npm:1.0.3"
636+ "@radix-ui/react-compose-refs": "npm:1.0.1"
637+ "@radix-ui/react-context": "npm:1.0.1"
638+ "@radix-ui/react-direction": "npm:1.0.1"
639+ "@radix-ui/react-dismissable-layer": "npm:1.0.5"
640+ "@radix-ui/react-focus-guards": "npm:1.0.1"
641+ "@radix-ui/react-focus-scope": "npm:1.0.4"
642+ "@radix-ui/react-id": "npm:1.0.1"
643+ "@radix-ui/react-popper": "npm:1.1.3"
644+ "@radix-ui/react-portal": "npm:1.0.4"
645+ "@radix-ui/react-presence": "npm:1.0.1"
646+ "@radix-ui/react-primitive": "npm:1.0.3"
647+ "@radix-ui/react-roving-focus": "npm:1.0.4"
648+ "@radix-ui/react-slot": "npm:1.0.2"
649+ "@radix-ui/react-use-callback-ref": "npm:1.0.1"
650+ aria-hidden: "npm:^1.1.1"
651+ react-remove-scroll: "npm:2.5.5"
652+ peerDependencies:
653+ "@types/react": "*"
654+ "@types/react-dom": "*"
655+ react: ^16.8 || ^17.0 || ^18.0
656+ react-dom: ^16.8 || ^17.0 || ^18.0
657+ peerDependenciesMeta:
658+ "@types/react":
659+ optional: true
660+ "@types/react-dom":
661+ optional: true
662+ checksum: 10c0/06926fa59cb8f5614f2e1a085ea1cbf09631ae28fb6e5d6e6d2a0a84d24979e3aca311cdb19dfdb254c1823ff85fd5250c29d4463f8f7622dd523e35df3fce1d
663+ languageName: node
664+ linkType: hard
665+
666+"@radix-ui/react-popper@npm:1.1.3":
667+ version: 1.1.3
668+ resolution: "@radix-ui/react-popper@npm:1.1.3"
669+ dependencies:
670+ "@babel/runtime": "npm:^7.13.10"
671+ "@floating-ui/react-dom": "npm:^2.0.0"
672+ "@radix-ui/react-arrow": "npm:1.0.3"
673+ "@radix-ui/react-compose-refs": "npm:1.0.1"
674+ "@radix-ui/react-context": "npm:1.0.1"
675+ "@radix-ui/react-primitive": "npm:1.0.3"
676+ "@radix-ui/react-use-callback-ref": "npm:1.0.1"
677+ "@radix-ui/react-use-layout-effect": "npm:1.0.1"
678+ "@radix-ui/react-use-rect": "npm:1.0.1"
679+ "@radix-ui/react-use-size": "npm:1.0.1"
680+ "@radix-ui/rect": "npm:1.0.1"
681+ peerDependencies:
682+ "@types/react": "*"
683+ "@types/react-dom": "*"
684+ react: ^16.8 || ^17.0 || ^18.0
685+ react-dom: ^16.8 || ^17.0 || ^18.0
686+ peerDependenciesMeta:
687+ "@types/react":
688+ optional: true
689+ "@types/react-dom":
690+ optional: true
691+ checksum: 10c0/a38c374ec65dd8d7c604af7151e96faec1743828d859dc4892e720c1803a7e1562add26aec2ddf2091defae4e15d989c028032ea481419e38c4693b3f12545c3
692+ languageName: node
693+ linkType: hard
694+
695+"@radix-ui/react-portal@npm:1.0.4":
696+ version: 1.0.4
697+ resolution: "@radix-ui/react-portal@npm:1.0.4"
698+ dependencies:
699+ "@babel/runtime": "npm:^7.13.10"
700+ "@radix-ui/react-primitive": "npm:1.0.3"
701+ peerDependencies:
702+ "@types/react": "*"
703+ "@types/react-dom": "*"
704+ react: ^16.8 || ^17.0 || ^18.0
705+ react-dom: ^16.8 || ^17.0 || ^18.0
706+ peerDependenciesMeta:
707+ "@types/react":
708+ optional: true
709+ "@types/react-dom":
710+ optional: true
711+ checksum: 10c0/fed32f8148b833fe852fb5e2f859979ffdf2fb9a9ef46583b9b52915d764ad36ba5c958a64e61d23395628ccc09d678229ee94cd112941e8fe2575021f820c29
712+ languageName: node
713+ linkType: hard
714+
715+"@radix-ui/react-presence@npm:1.0.1":
716+ version: 1.0.1
717+ resolution: "@radix-ui/react-presence@npm:1.0.1"
718+ dependencies:
719+ "@babel/runtime": "npm:^7.13.10"
720+ "@radix-ui/react-compose-refs": "npm:1.0.1"
721+ "@radix-ui/react-use-layout-effect": "npm:1.0.1"
722+ peerDependencies:
723+ "@types/react": "*"
724+ "@types/react-dom": "*"
725+ react: ^16.8 || ^17.0 || ^18.0
726+ react-dom: ^16.8 || ^17.0 || ^18.0
727+ peerDependenciesMeta:
728+ "@types/react":
729+ optional: true
730+ "@types/react-dom":
731+ optional: true
732+ checksum: 10c0/90780618b265fe794a8f1ddaa5bfd3c71a1127fa79330a14d32722e6265b44452a9dd36efe4e769129d33e57f979f6b8713e2cbf2e2755326aa3b0f337185b6e
733+ languageName: node
734+ linkType: hard
735+
736+"@radix-ui/react-primitive@npm:1.0.3":
737+ version: 1.0.3
738+ resolution: "@radix-ui/react-primitive@npm:1.0.3"
739+ dependencies:
740+ "@babel/runtime": "npm:^7.13.10"
741+ "@radix-ui/react-slot": "npm:1.0.2"
742+ peerDependencies:
743+ "@types/react": "*"
744+ "@types/react-dom": "*"
745+ react: ^16.8 || ^17.0 || ^18.0
746+ react-dom: ^16.8 || ^17.0 || ^18.0
747+ peerDependenciesMeta:
748+ "@types/react":
749+ optional: true
750+ "@types/react-dom":
751+ optional: true
752+ checksum: 10c0/67a66ff8898a5e7739eda228ab6f5ce808858da1dce967014138d87e72b6bbfc93dc1467c706d98d1a2b93bf0b6e09233d1a24d31c78227b078444c1a69c42be
753+ languageName: node
754+ linkType: hard
755+
756+"@radix-ui/react-roving-focus@npm:1.0.4":
757+ version: 1.0.4
758+ resolution: "@radix-ui/react-roving-focus@npm:1.0.4"
759+ dependencies:
760+ "@babel/runtime": "npm:^7.13.10"
761+ "@radix-ui/primitive": "npm:1.0.1"
762+ "@radix-ui/react-collection": "npm:1.0.3"
763+ "@radix-ui/react-compose-refs": "npm:1.0.1"
764+ "@radix-ui/react-context": "npm:1.0.1"
765+ "@radix-ui/react-direction": "npm:1.0.1"
766+ "@radix-ui/react-id": "npm:1.0.1"
767+ "@radix-ui/react-primitive": "npm:1.0.3"
768+ "@radix-ui/react-use-callback-ref": "npm:1.0.1"
769+ "@radix-ui/react-use-controllable-state": "npm:1.0.1"
770+ peerDependencies:
771+ "@types/react": "*"
772+ "@types/react-dom": "*"
773+ react: ^16.8 || ^17.0 || ^18.0
774+ react-dom: ^16.8 || ^17.0 || ^18.0
775+ peerDependenciesMeta:
776+ "@types/react":
777+ optional: true
778+ "@types/react-dom":
779+ optional: true
780+ checksum: 10c0/61e3ddfd1647e64fba855434ff41e8e7ba707244fe8841f78c450fbdce525383b64259279475615d030dbf1625cbffd8eeebee72d91bf6978794f5dbcf887fc0
781+ languageName: node
782+ linkType: hard
783+
784+"@radix-ui/react-slot@npm:1.0.2, @radix-ui/react-slot@npm:^1.0.2":
785+ version: 1.0.2
786+ resolution: "@radix-ui/react-slot@npm:1.0.2"
787+ dependencies:
788+ "@babel/runtime": "npm:^7.13.10"
789+ "@radix-ui/react-compose-refs": "npm:1.0.1"
790+ peerDependencies:
791+ "@types/react": "*"
792+ react: ^16.8 || ^17.0 || ^18.0
793+ peerDependenciesMeta:
794+ "@types/react":
795+ optional: true
796+ checksum: 10c0/3af6ea4891e6fa8091e666802adffe7718b3cd390a10fa9229a5f40f8efded9f3918ea01b046103d93923d41cc32119505ebb6bde76cad07a87b6cf4f2119347
797+ languageName: node
798+ linkType: hard
799+
800+"@radix-ui/react-use-callback-ref@npm:1.0.1":
801+ version: 1.0.1
802+ resolution: "@radix-ui/react-use-callback-ref@npm:1.0.1"
803+ dependencies:
804+ "@babel/runtime": "npm:^7.13.10"
805+ peerDependencies:
806+ "@types/react": "*"
807+ react: ^16.8 || ^17.0 || ^18.0
808+ peerDependenciesMeta:
809+ "@types/react":
810+ optional: true
811+ checksum: 10c0/331b432be1edc960ca148637ae6087220873ee828ceb13bd155926ef8f49e862812de5b379129f6aaefcd11be53715f3237e6caa9a33d9c0abfff43f3ba58938
812+ languageName: node
813+ linkType: hard
814+
815+"@radix-ui/react-use-controllable-state@npm:1.0.1":
816+ version: 1.0.1
817+ resolution: "@radix-ui/react-use-controllable-state@npm:1.0.1"
818+ dependencies:
819+ "@babel/runtime": "npm:^7.13.10"
820+ "@radix-ui/react-use-callback-ref": "npm:1.0.1"
821+ peerDependencies:
822+ "@types/react": "*"
823+ react: ^16.8 || ^17.0 || ^18.0
824+ peerDependenciesMeta:
825+ "@types/react":
826+ optional: true
827+ checksum: 10c0/29b069dbf09e48bca321af6272574ad0fc7283174e7d092731a10663fe00c0e6b4bde5e1b5ea67725fe48dcbe8026e7ff0d69d42891c62cbb9ca408498171fbe
828+ languageName: node
829+ linkType: hard
830+
831+"@radix-ui/react-use-escape-keydown@npm:1.0.3":
832+ version: 1.0.3
833+ resolution: "@radix-ui/react-use-escape-keydown@npm:1.0.3"
834+ dependencies:
835+ "@babel/runtime": "npm:^7.13.10"
836+ "@radix-ui/react-use-callback-ref": "npm:1.0.1"
837+ peerDependencies:
838+ "@types/react": "*"
839+ react: ^16.8 || ^17.0 || ^18.0
840+ peerDependenciesMeta:
841+ "@types/react":
842+ optional: true
843+ checksum: 10c0/3c94c78902dcb40b60083ee2184614f45c95a189178f52d89323b467bd04bcf5fdb1bc4d43debecd7f0b572c3843c7e04edbcb56f40a4b4b43936fb2770fb8ad
844+ languageName: node
845+ linkType: hard
846+
847+"@radix-ui/react-use-layout-effect@npm:1.0.1":
848+ version: 1.0.1
849+ resolution: "@radix-ui/react-use-layout-effect@npm:1.0.1"
850+ dependencies:
851+ "@babel/runtime": "npm:^7.13.10"
852+ peerDependencies:
853+ "@types/react": "*"
854+ react: ^16.8 || ^17.0 || ^18.0
855+ peerDependenciesMeta:
856+ "@types/react":
857+ optional: true
858+ checksum: 10c0/13cd0c38395c5838bc9a18238020d3bcf67fb340039e6d1cbf438be1b91d64cf6900b78121f3dc9219faeb40dcc7b523ce0f17e4a41631655690e5a30a40886a
859+ languageName: node
860+ linkType: hard
861+
862+"@radix-ui/react-use-rect@npm:1.0.1":
863+ version: 1.0.1
864+ resolution: "@radix-ui/react-use-rect@npm:1.0.1"
865+ dependencies:
866+ "@babel/runtime": "npm:^7.13.10"
867+ "@radix-ui/rect": "npm:1.0.1"
868+ peerDependencies:
869+ "@types/react": "*"
870+ react: ^16.8 || ^17.0 || ^18.0
871+ peerDependenciesMeta:
872+ "@types/react":
873+ optional: true
874+ checksum: 10c0/94c5ab31dfd3678c0cb77a30025e82b3a287577c1a8674b0d703a36d27434bc9c59790e0bebf57ed153f0b8e0d8c3b9675fc9787b9eac525a09abcda8fa9e7eb
875+ languageName: node
876+ linkType: hard
877+
878+"@radix-ui/react-use-size@npm:1.0.1":
879+ version: 1.0.1
880+ resolution: "@radix-ui/react-use-size@npm:1.0.1"
881+ dependencies:
882+ "@babel/runtime": "npm:^7.13.10"
883+ "@radix-ui/react-use-layout-effect": "npm:1.0.1"
884+ peerDependencies:
885+ "@types/react": "*"
886+ react: ^16.8 || ^17.0 || ^18.0
887+ peerDependenciesMeta:
888+ "@types/react":
889+ optional: true
890+ checksum: 10c0/b109a4b3781781c4dc641a1173f0a6fcb0b0f7b2d7cdba5848a46070c9fb4e518909a46c20a3c2efbc78737c64859c59ead837f2940e8c8394d1c503ef58773b
891+ languageName: node
892+ linkType: hard
893+
894+"@radix-ui/rect@npm:1.0.1":
895+ version: 1.0.1
896+ resolution: "@radix-ui/rect@npm:1.0.1"
897+ dependencies:
898+ "@babel/runtime": "npm:^7.13.10"
899+ checksum: 10c0/4c5159661340acc31b11e1f2ebd87a1521d39bfa287544dd2cd75b399539a4b625d38a1501c90ceae21fcca18ed164b0c3735817ff140ae334098192c110e571
900+ languageName: node
901+ linkType: hard
902+
903 "@rushstack/eslint-patch@npm:^1.3.3":
904 version: 1.10.3
905 resolution: "@rushstack/eslint-patch@npm:1.10.3"
906@@ -542,6 +1054,15 @@ __metadata:
907 languageName: node
908 linkType: hard
909
910+"aria-hidden@npm:^1.1.1":
911+ version: 1.2.4
912+ resolution: "aria-hidden@npm:1.2.4"
913+ dependencies:
914+ tslib: "npm:^2.0.0"
915+ checksum: 10c0/8abcab2e1432efc4db415e97cb3959649ddf52c8fc815d7384f43f3d3abf56f1c12852575d00df9a8927f421d7e0712652dd5f8db244ea57634344e29ecfc74a
916+ languageName: node
917+ linkType: hard
918+
919 "aria-query@npm:^5.3.0":
920 version: 5.3.0
921 resolution: "aria-query@npm:5.3.0"
922@@ -1039,6 +1560,13 @@ __metadata:
923 languageName: node
924 linkType: hard
925
926+"detect-node-es@npm:^1.1.0":
927+ version: 1.1.0
928+ resolution: "detect-node-es@npm:1.1.0"
929+ checksum: 10c0/e562f00de23f10c27d7119e1af0e7388407eb4b06596a25f6d79a360094a109ff285de317f02b090faae093d314cf6e73ac3214f8a5bb3a0def5bece94557fbe
930+ languageName: node
931+ linkType: hard
932+
933 "didyoumean@npm:^1.2.2":
934 version: 1.2.2
935 resolution: "didyoumean@npm:1.2.2"
936@@ -1733,6 +2261,13 @@ __metadata:
937 languageName: node
938 linkType: hard
939
940+"get-nonce@npm:^1.0.0":
941+ version: 1.0.1
942+ resolution: "get-nonce@npm:1.0.1"
943+ checksum: 10c0/2d7df55279060bf0568549e1ffc9b84bc32a32b7541675ca092dce56317cdd1a59a98dcc4072c9f6a980779440139a3221d7486f52c488e69dc0fd27b1efb162
944+ languageName: node
945+ linkType: hard
946+
947 "get-symbol-description@npm:^1.0.2":
948 version: 1.0.2
949 resolution: "get-symbol-description@npm:1.0.2"
950@@ -1757,14 +2292,17 @@ __metadata:
951 version: 0.0.0-use.local
952 resolution: "github-commit-explorer@workspace:."
953 dependencies:
954+ "@radix-ui/react-dropdown-menu": "npm:^2.0.6"
955 "@radix-ui/react-icons": "npm:^1.3.0"
956+ "@radix-ui/react-slot": "npm:^1.0.2"
957 "@types/node": "npm:^20"
958 "@types/react": "npm:^18"
959 "@types/react-dom": "npm:^18"
960 class-variance-authority: "npm:^0.7.0"
961 clsx: "npm:^2.1.1"
962 eslint: "npm:^8"
963 eslint-config-next: "npm:14.2.4"
964+ lucide-react: "npm:^0.395.0"
965 next: "npm:14.2.4"
966 next-themes: "npm:^0.3.0"
967 postcss: "npm:^8"
968@@ -2047,6 +2585,15 @@ __metadata:
969 languageName: node
970 linkType: hard
971
972+"invariant@npm:^2.2.4":
973+ version: 2.2.4
974+ resolution: "invariant@npm:2.2.4"
975+ dependencies:
976+ loose-envify: "npm:^1.0.0"
977+ checksum: 10c0/5af133a917c0bcf65e84e7f23e779e7abc1cd49cb7fdc62d00d1de74b0d8c1b5ee74ac7766099fb3be1b05b26dfc67bab76a17030d2fe7ea2eef867434362dfc
978+ languageName: node
979+ linkType: hard
980+
981 "ip-address@npm:^9.0.5":
982 version: 9.0.5
983 resolution: "ip-address@npm:9.0.5"
984@@ -2512,7 +3059,7 @@ __metadata:
985 languageName: node
986 linkType: hard
987
988-"loose-envify@npm:^1.1.0, loose-envify@npm:^1.4.0":
989+"loose-envify@npm:^1.0.0, loose-envify@npm:^1.1.0, loose-envify@npm:^1.4.0":
990 version: 1.4.0
991 resolution: "loose-envify@npm:1.4.0"
992 dependencies:
993@@ -2530,6 +3077,15 @@ __metadata:
994 languageName: node
995 linkType: hard
996
997+"lucide-react@npm:^0.395.0":
998+ version: 0.395.0
999+ resolution: "lucide-react@npm:0.395.0"
1000+ peerDependencies:
1001+ react: ^16.5.1 || ^17.0.0 || ^18.0.0
1002+ checksum: 10c0/e3ae8865da0e20514e6058f908c9b0686b9117e63c53ea42bdcdbc45e87a09054be35b4698c8f185dbd57fd110e6730c9c308b50e99f7170f498372b5fbac772
1003+ languageName: node
1004+ linkType: hard
1005+
1006 "make-fetch-happen@npm:^13.0.0":
1007 version: 13.0.1
1008 resolution: "make-fetch-happen@npm:13.0.1"
1009@@ -3314,6 +3870,58 @@ __metadata:
1010 languageName: node
1011 linkType: hard
1012
1013+"react-remove-scroll-bar@npm:^2.3.3":
1014+ version: 2.3.6
1015+ resolution: "react-remove-scroll-bar@npm:2.3.6"
1016+ dependencies:
1017+ react-style-singleton: "npm:^2.2.1"
1018+ tslib: "npm:^2.0.0"
1019+ peerDependencies:
1020+ "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0
1021+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
1022+ peerDependenciesMeta:
1023+ "@types/react":
1024+ optional: true
1025+ checksum: 10c0/4e32ee04bf655a8bd3b4aacf6ffc596ae9eb1b9ba27eef83f7002632ee75371f61516ae62250634a9eae4b2c8fc6f6982d9b182de260f6c11841841e6e2e7515
1026+ languageName: node
1027+ linkType: hard
1028+
1029+"react-remove-scroll@npm:2.5.5":
1030+ version: 2.5.5
1031+ resolution: "react-remove-scroll@npm:2.5.5"
1032+ dependencies:
1033+ react-remove-scroll-bar: "npm:^2.3.3"
1034+ react-style-singleton: "npm:^2.2.1"
1035+ tslib: "npm:^2.1.0"
1036+ use-callback-ref: "npm:^1.3.0"
1037+ use-sidecar: "npm:^1.1.2"
1038+ peerDependencies:
1039+ "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0
1040+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
1041+ peerDependenciesMeta:
1042+ "@types/react":
1043+ optional: true
1044+ checksum: 10c0/4952657e6a7b9d661d4ad4dfcef81b9c7fa493e35164abff99c35c0b27b3d172ef7ad70c09416dc44dd14ff2e6b38a5ec7da27e27e90a15cbad36b8fd2fd8054
1045+ languageName: node
1046+ linkType: hard
1047+
1048+"react-style-singleton@npm:^2.2.1":
1049+ version: 2.2.1
1050+ resolution: "react-style-singleton@npm:2.2.1"
1051+ dependencies:
1052+ get-nonce: "npm:^1.0.0"
1053+ invariant: "npm:^2.2.4"
1054+ tslib: "npm:^2.0.0"
1055+ peerDependencies:
1056+ "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0
1057+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
1058+ peerDependenciesMeta:
1059+ "@types/react":
1060+ optional: true
1061+ checksum: 10c0/6d66f3bdb65e1ec79089f80314da97c9a005087a04ee034255a5de129a4c0d9fd0bf99fa7bf642781ac2dc745ca687aae3de082bd8afdd0d117bc953241e15ad
1062+ languageName: node
1063+ linkType: hard
1064+
1065 "react@npm:^18":
1066 version: 18.3.1
1067 resolution: "react@npm:18.3.1"
1068@@ -3950,7 +4558,7 @@ __metadata:
1069 languageName: node
1070 linkType: hard
1071
1072-"tslib@npm:^2.4.0":
1073+"tslib@npm:^2.0.0, tslib@npm:^2.1.0, tslib@npm:^2.4.0":
1074 version: 2.6.3
1075 resolution: "tslib@npm:2.6.3"
1076 checksum: 10c0/2598aef53d9dbe711af75522464b2104724d6467b26a60f2bdac8297d2b5f1f6b86a71f61717384aa8fd897240467aaa7bcc36a0700a0faf751293d1331db39a
1077@@ -4091,6 +4699,37 @@ __metadata:
1078 languageName: node
1079 linkType: hard
1080
1081+"use-callback-ref@npm:^1.3.0":
1082+ version: 1.3.2
1083+ resolution: "use-callback-ref@npm:1.3.2"
1084+ dependencies:
1085+ tslib: "npm:^2.0.0"
1086+ peerDependencies:
1087+ "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0
1088+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
1089+ peerDependenciesMeta:
1090+ "@types/react":
1091+ optional: true
1092+ checksum: 10c0/d232c37160fe3970c99255da19b5fb5299fb5926a5d6141d928a87feb47732c323d29be2f8137d3b1e5499c70d284cd1d9cfad703cc58179db8be24d7dd8f1f2
1093+ languageName: node
1094+ linkType: hard
1095+
1096+"use-sidecar@npm:^1.1.2":
1097+ version: 1.1.2
1098+ resolution: "use-sidecar@npm:1.1.2"
1099+ dependencies:
1100+ detect-node-es: "npm:^1.1.0"
1101+ tslib: "npm:^2.0.0"
1102+ peerDependencies:
1103+ "@types/react": ^16.9.0 || ^17.0.0 || ^18.0.0
1104+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
1105+ peerDependenciesMeta:
1106+ "@types/react":
1107+ optional: true
1108+ checksum: 10c0/89f0018fd9aee1fc17c85ac18c4bf8944d460d453d0d0e04ddbc8eaddf3fa591e9c74a1f8a438a1bff368a7a2417fab380bdb3df899d2194c4375b0982736de0
1109+ languageName: node
1110+ linkType: hard
1111+
1112 "util-deprecate@npm:^1.0.2":
1113 version: 1.0.2
1114 resolution: "util-deprecate@npm:1.0.2"