From 910053a5c90dc8cb3406c3e13d0ac13cb10e1267 Mon Sep 17 00:00:00 2001 From: Andrew Jiang Date: Fri, 15 Nov 2024 14:16:58 -0500 Subject: [PATCH] facet filtering ux --- packages/ui/fern-docs-search-ui/package.json | 2 + .../src/components/desktop/DesktopCommand.tsx | 103 +++--- .../desktop/DesktopInstantSearch.tsx | 5 +- .../components/desktop/FilterDropdownMenu.tsx | 94 ++++++ .../src/components/ui/badge.tsx | 36 ++ .../src/components/ui/dropdown.tsx | 184 ++++++++++ .../src/components/ui/popover.tsx | 33 ++ .../src/hooks/useFacets.ts | 20 ++ .../src/utils/facet-display.tsx | 35 ++ .../ui/fern-docs-search-ui/src/utils/facet.ts | 37 +- .../src/utils/to-filter-string.ts | 6 + pnpm-lock.yaml | 315 +++++++++++++++++- 12 files changed, 802 insertions(+), 68 deletions(-) create mode 100644 packages/ui/fern-docs-search-ui/src/components/desktop/FilterDropdownMenu.tsx create mode 100644 packages/ui/fern-docs-search-ui/src/components/ui/badge.tsx create mode 100644 packages/ui/fern-docs-search-ui/src/components/ui/dropdown.tsx create mode 100644 packages/ui/fern-docs-search-ui/src/components/ui/popover.tsx create mode 100644 packages/ui/fern-docs-search-ui/src/hooks/useFacets.ts create mode 100644 packages/ui/fern-docs-search-ui/src/utils/facet-display.tsx create mode 100644 packages/ui/fern-docs-search-ui/src/utils/to-filter-string.ts diff --git a/packages/ui/fern-docs-search-ui/package.json b/packages/ui/fern-docs-search-ui/package.json index 793c4a4c9d..4b0cdc8574 100644 --- a/packages/ui/fern-docs-search-ui/package.json +++ b/packages/ui/fern-docs-search-ui/package.json @@ -35,6 +35,8 @@ "@fern-ui/fern-docs-search-server": "workspace:*", "@fern-ui/fern-http-method-tag": "workspace:*", "@radix-ui/react-dialog": "^1.1.1", + "@radix-ui/react-dropdown-menu": "^2.0.6", + "@radix-ui/react-popover": "^1.1.1", "@radix-ui/react-slot": "^1.1.0", "@radix-ui/react-tooltip": "^1.1.2", "ai": "^3.4.33", diff --git a/packages/ui/fern-docs-search-ui/src/components/desktop/DesktopCommand.tsx b/packages/ui/fern-docs-search-ui/src/components/desktop/DesktopCommand.tsx index 4e6a0eba2f..7dfcd09a37 100644 --- a/packages/ui/fern-docs-search-ui/src/components/desktop/DesktopCommand.tsx +++ b/packages/ui/fern-docs-search-ui/src/components/desktop/DesktopCommand.tsx @@ -1,13 +1,14 @@ -import { FACET_DISPLAY_NAME_MAP, getFacets, toFilterOptions } from "@/utils/facet"; +import { useFacets } from "@/hooks/useFacets"; +import { FACET_DISPLAY_NAME_MAP, FacetName, getFacets, toFilterOptions } from "@/utils/facet"; +import { getFacetDisplay } from "@/utils/facet-display"; +import { toFiltersString } from "@/utils/to-filter-string"; import { AlgoliaRecord } from "@fern-ui/fern-docs-search-server/types"; -import { HttpMethodTag } from "@fern-ui/fern-http-method-tag"; import { TooltipPortal, TooltipTrigger } from "@radix-ui/react-tooltip"; import { Command } from "cmdk"; import { ArrowLeft, FileText, History, ListFilter, MessageCircle } from "lucide-react"; -import { Dispatch, ReactElement, ReactNode, SetStateAction, useRef } from "react"; +import { Dispatch, ReactElement, SetStateAction, useRef } from "react"; import { useHits, useSearchBox } from "react-instantsearch"; import { preload } from "swr"; -import useSWRImmutable from "swr/immutable"; import { MarkRequired } from "ts-essentials"; import { RemoteIcon } from "../icons/RemoteIcon"; import { HitContent } from "../shared/HitContent"; @@ -16,19 +17,10 @@ import { AlgoliaRecordHit } from "../types"; import { Button } from "../ui/button"; import { Kbd } from "../ui/kbd"; import { Tooltip, TooltipContent, TooltipProvider } from "../ui/tooltip"; +import { FilterDropdownMenu } from "./FilterDropdownMenu"; const ICON_CLASS = "size-4 text-[#969696] dark:text-white/50 shrink-0 my-1"; -const FACET_DISPLAY_MAP: Record> = { - method: { - GET: , - POST: , - PUT: , - PATCH: , - DELETE: , - }, -} as const; - function toPlaceholder(filters: { facet: string; value: string }[]): string { if (filters.length === 0) { return "Search"; @@ -37,13 +29,6 @@ function toPlaceholder(filters: { facet: string; value: string }[]): string { return `Search ${filters.map((filter) => FACET_DISPLAY_NAME_MAP[filter.facet]?.[filter.value] ?? filter.value).join(", ")}`; } -function toFiltersString(filters: { facet: string; value: string }[]): string { - return filters - .map((filter) => `${filter.facet}:"${filter.value}"`) - .sort() - .join(" AND "); -} - export function DesktopCommand({ domain, appId, @@ -59,10 +44,10 @@ export function DesktopCommand({ onSubmit: (path: string) => void; onAskAI?: ({ initialInput }: { initialInput?: string }) => void; filters: { - facet: string; + facet: FacetName; value: string; }[]; - setFilters?: Dispatch>; + setFilters?: Dispatch>; }): ReactElement { const ref = useRef(null); const inputRef = useRef(null); @@ -71,34 +56,46 @@ export function DesktopCommand({ const { items } = useHits(); - const { data: facets } = useSWRImmutable([domain, toFiltersString(filters)], ([_domain, filters]) => - getFacets({ appId, apiKey, filters }), - ); + const { data: facets } = useFacets({ appId, apiKey, domain, filters }); const groups = generateHits(items); const filterOptions = toFilterOptions(facets, query); - function bounce() { - if (ref.current) { - ref.current.style.transform = "scale(0.96)"; - setTimeout(() => { - if (ref.current) { - ref.current.style.transform = ""; - } - }, 100); - - refine(""); - inputRef.current?.focus(); - } - } - return ( + {filters.length > 0 && ( +
+ {filters.map((filter) => ( + { + setFilters?.((prev) => prev.filter((f) => f.facet !== filter.facet)); + setTimeout(() => { + inputRef.current?.focus(); + }, 0); + }} + updateFilter={(value) => { + setFilters?.((prev) => + prev.map((f) => (f.facet === filter.facet ? { ...f, value } : f)), + ); + setTimeout(() => { + inputRef.current?.focus(); + }, 0); + }} + /> + ))} +
+ )}
{ @@ -119,6 +116,7 @@ export function DesktopCommand({ } else { setFilters?.((lastFilters) => lastFilters.slice(0, -1)); } + inputRef.current?.focus(); }} > @@ -152,7 +150,7 @@ export function DesktopCommand({ } else { setFilters?.((lastFilters) => lastFilters.slice(0, -1)); } - bounce(); + inputRef.current?.focus(); } }} /> @@ -160,17 +158,7 @@ export function DesktopCommand({ - @@ -214,7 +202,7 @@ export function DesktopCommand({ className="flex gap-2 cursor-default items-center" onSelect={() => { setFilters?.([...filters, { facet: filter.facet, value: filter.value }]); - bounce(); + inputRef.current?.focus(); }} onMouseOver={() => { const filterString = toFiltersString([ @@ -227,12 +215,7 @@ export function DesktopCommand({ }} > - - Search{" "} - {FACET_DISPLAY_MAP[filter.facet]?.[filter.value] ?? - FACET_DISPLAY_NAME_MAP[filter.facet]?.[filter.value] ?? - filter.value} - + Search {getFacetDisplay(filter.facet, filter.value)} {filter.count} ))} diff --git a/packages/ui/fern-docs-search-ui/src/components/desktop/DesktopInstantSearch.tsx b/packages/ui/fern-docs-search-ui/src/components/desktop/DesktopInstantSearch.tsx index 6155d3d6a1..d636bb0e0e 100644 --- a/packages/ui/fern-docs-search-ui/src/components/desktop/DesktopInstantSearch.tsx +++ b/packages/ui/fern-docs-search-ui/src/components/desktop/DesktopInstantSearch.tsx @@ -1,3 +1,4 @@ +import { FacetName } from "@/utils/facet"; import { liteClient as algoliasearch } from "algoliasearch/lite"; import "instantsearch.css/themes/reset.css"; import { useEffect, useRef, useState, type ReactElement } from "react"; @@ -26,8 +27,8 @@ export function DesktopInstantSearch({ filters: initialFilters, }: DesktopInstantSearchProps): ReactElement { const ref = useRef(algoliasearch(appId, apiKey)); - const [filters, setFilters] = useState<{ facet: string; value: string }[]>(() => { - const toRet: { facet: string; value: string }[] = []; + const [filters, setFilters] = useState<{ facet: FacetName; value: string }[]>(() => { + const toRet: { facet: FacetName; value: string }[] = []; if (initialFilters?.["product.title"]) { toRet.push({ facet: "product.title", value: initialFilters["product.title"] }); } diff --git a/packages/ui/fern-docs-search-ui/src/components/desktop/FilterDropdownMenu.tsx b/packages/ui/fern-docs-search-ui/src/components/desktop/FilterDropdownMenu.tsx new file mode 100644 index 0000000000..f4fe4e730d --- /dev/null +++ b/packages/ui/fern-docs-search-ui/src/components/desktop/FilterDropdownMenu.tsx @@ -0,0 +1,94 @@ +import { useFacets } from "@/hooks/useFacets"; +import { FacetName, toFilterLabel } from "@/utils/facet"; +import { getFacetDisplay } from "@/utils/facet-display"; +import { FilterX } from "lucide-react"; +import { ReactElement } from "react"; +import { Badge } from "../ui/badge"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuGroup, + DropdownMenuItem, + DropdownMenuLabel, + DropdownMenuRadioGroup, + DropdownMenuRadioItem, + DropdownMenuSeparator, + DropdownMenuShortcut, + DropdownMenuTrigger, +} from "../ui/dropdown"; + +export function FilterDropdownMenu({ + appId, + apiKey, + domain, + filter, + filters, + removeFilter, + updateFilter, +}: { + appId: string; + apiKey: string; + domain: string; + filter: { + facet: FacetName; + value: string; + }; + removeFilter?: () => void; + updateFilter?: (value: string) => void; + filters: { facet: FacetName; value: string }[]; +}): ReactElement { + const otherFilters = filters.filter((f) => f.facet !== filter.facet); + + const { data: facets } = useFacets({ appId, apiKey, domain, filters: otherFilters }); + + const options = facets?.[filter.facet] ?? []; + + return ( + + + + + + + { + if (e.key === "Backspace") { + removeFilter?.(); + } + }} + > + {toFilterLabel(filter.facet)} + + {options.length > 0 && ( + <> + { + updateFilter?.(value); + }} + > + {options.map((option) => ( + + {getFacetDisplay(filter.facet, option.value, { small: true, titleCase: true })} + {option.count} + + ))} + + + + )} + + { + removeFilter?.(); + }} + > + + Remove filter + del + + + + + ); +} diff --git a/packages/ui/fern-docs-search-ui/src/components/ui/badge.tsx b/packages/ui/fern-docs-search-ui/src/components/ui/badge.tsx new file mode 100644 index 0000000000..81f8fdaaa8 --- /dev/null +++ b/packages/ui/fern-docs-search-ui/src/components/ui/badge.tsx @@ -0,0 +1,36 @@ +import { cva, type VariantProps } from "class-variance-authority"; +import * as React from "react"; + +import { Slot } from "@radix-ui/react-slot"; +import { cn } from "./cn"; + +const badgeVariants = cva( + "inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2", + { + variants: { + variant: { + default: "border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80", + secondary: "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80", + destructive: + "border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80", + outline: "text-foreground", + }, + }, + defaultVariants: { + variant: "default", + }, + }, +); + +export interface BadgeProps extends React.HTMLAttributes, VariantProps { + asChild?: boolean; +} + +const Badge = React.forwardRef(({ className, variant, asChild = false, ...props }, ref) => { + const Comp = asChild ? Slot : "div"; + return ; +}); + +Badge.displayName = "Badge"; + +export { Badge, badgeVariants }; diff --git a/packages/ui/fern-docs-search-ui/src/components/ui/dropdown.tsx b/packages/ui/fern-docs-search-ui/src/components/ui/dropdown.tsx new file mode 100644 index 0000000000..15b0d57e78 --- /dev/null +++ b/packages/ui/fern-docs-search-ui/src/components/ui/dropdown.tsx @@ -0,0 +1,184 @@ +"use client"; + +import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu"; +import { Check, ChevronRight, Circle } from "lucide-react"; +import * as React from "react"; + +import { cn } from "./cn"; + +const DropdownMenu = DropdownMenuPrimitive.Root; + +const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger; + +const DropdownMenuGroup = DropdownMenuPrimitive.Group; + +const DropdownMenuPortal = DropdownMenuPrimitive.Portal; + +const DropdownMenuSub = DropdownMenuPrimitive.Sub; + +const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup; + +const DropdownMenuSubTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean; + } +>(({ className, inset, children, ...props }, ref) => ( + + {children} + + +)); +DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName; + +const DropdownMenuSubContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName; + +const DropdownMenuContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, sideOffset = 4, ...props }, ref) => ( + + + +)); +DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName; + +const DropdownMenuItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean; + } +>(({ className, inset, ...props }, ref) => ( + svg]:size-4 [&>svg]:shrink-0", + inset && "pl-8", + className, + )} + {...props} + /> +)); +DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName; + +const DropdownMenuCheckboxItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, checked, ...props }, ref) => ( + + + + + + + {children} + +)); +DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName; + +const DropdownMenuRadioItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + + + + {children} + +)); +DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName; + +const DropdownMenuLabel = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean; + } +>(({ className, inset, ...props }, ref) => ( + +)); +DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName; + +const DropdownMenuSeparator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName; + +const DropdownMenuShortcut = React.forwardRef>( + ({ className, ...props }, ref) => { + return ; + }, +); +DropdownMenuShortcut.displayName = "DropdownMenuShortcut"; + +export { + DropdownMenu, + DropdownMenuCheckboxItem, + DropdownMenuContent, + DropdownMenuGroup, + DropdownMenuItem, + DropdownMenuLabel, + DropdownMenuPortal, + DropdownMenuRadioGroup, + DropdownMenuRadioItem, + DropdownMenuSeparator, + DropdownMenuShortcut, + DropdownMenuSub, + DropdownMenuSubContent, + DropdownMenuSubTrigger, + DropdownMenuTrigger, +}; diff --git a/packages/ui/fern-docs-search-ui/src/components/ui/popover.tsx b/packages/ui/fern-docs-search-ui/src/components/ui/popover.tsx new file mode 100644 index 0000000000..3736b1c91f --- /dev/null +++ b/packages/ui/fern-docs-search-ui/src/components/ui/popover.tsx @@ -0,0 +1,33 @@ +"use client"; + +import * as PopoverPrimitive from "@radix-ui/react-popover"; +import * as React from "react"; + +import { cn } from "./cn"; + +const Popover = PopoverPrimitive.Root; + +const PopoverTrigger = PopoverPrimitive.Trigger; + +const PopoverAnchor = PopoverPrimitive.Anchor; + +const PopoverContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, align = "center", sideOffset = 4, ...props }, ref) => ( + + + +)); +PopoverContent.displayName = PopoverPrimitive.Content.displayName; + +export { Popover, PopoverAnchor, PopoverContent, PopoverTrigger }; diff --git a/packages/ui/fern-docs-search-ui/src/hooks/useFacets.ts b/packages/ui/fern-docs-search-ui/src/hooks/useFacets.ts new file mode 100644 index 0000000000..a0ea3c1076 --- /dev/null +++ b/packages/ui/fern-docs-search-ui/src/hooks/useFacets.ts @@ -0,0 +1,20 @@ +import { FacetsResponse, getFacets } from "@/utils/facet"; +import { toFiltersString } from "@/utils/to-filter-string"; +import { SWRResponse } from "swr"; +import useSWRImmutable from "swr/immutable"; + +export function useFacets({ + appId, + apiKey, + domain, + filters, +}: { + appId: string; + apiKey: string; + domain: string; + filters: { facet: string; value: string }[]; +}): SWRResponse { + return useSWRImmutable([domain, toFiltersString(filters)], ([_domain, filters]) => + getFacets({ appId, apiKey, filters }), + ); +} diff --git a/packages/ui/fern-docs-search-ui/src/utils/facet-display.tsx b/packages/ui/fern-docs-search-ui/src/utils/facet-display.tsx new file mode 100644 index 0000000000..8b3d5b3c2a --- /dev/null +++ b/packages/ui/fern-docs-search-ui/src/utils/facet-display.tsx @@ -0,0 +1,35 @@ +import { HttpMethodTag } from "@fern-ui/fern-http-method-tag"; +import { ReactNode } from "react"; +import { FACET_DISPLAY_NAME_MAP, FACET_DISPLAY_NAME_TITLE_CASE_MAP } from "./facet"; + +const FACET_DISPLAY_MAP: Record> = { + method: { + GET: , + POST: , + PUT: , + PATCH: , + DELETE: , + }, +} as const; + +const FACET_SMALL_DISPLAY_MAP: Record> = { + method: { + GET: , + POST: , + PUT: , + PATCH: , + DELETE: , + }, +} as const; + +export function getFacetDisplay( + facet: string, + value: string, + { small = false, titleCase = false }: { small?: boolean; titleCase?: boolean } = {}, +): ReactNode { + return ( + (small ? FACET_SMALL_DISPLAY_MAP : FACET_DISPLAY_MAP)[facet]?.[value] ?? + (titleCase ? FACET_DISPLAY_NAME_TITLE_CASE_MAP : FACET_DISPLAY_NAME_MAP)[facet]?.[value] ?? + value + ); +} diff --git a/packages/ui/fern-docs-search-ui/src/utils/facet.ts b/packages/ui/fern-docs-search-ui/src/utils/facet.ts index ed8c3e7611..e6ac6352cf 100644 --- a/packages/ui/fern-docs-search-ui/src/utils/facet.ts +++ b/packages/ui/fern-docs-search-ui/src/utils/facet.ts @@ -2,8 +2,9 @@ import { liteClient as algoliasearch, SearchForFacets } from "algoliasearch/lite import { zip } from "es-toolkit/array"; export const FACET_NAMES = ["product.title", "version.title", "type", "api_type", "method", "status_code"] as const; +export type FacetName = (typeof FACET_NAMES)[number]; -export type FacetsResponse = Record<(typeof FACET_NAMES)[number], { value: string; count: number }[]>; +export type FacetsResponse = Record; export async function getFacets({ appId, @@ -52,7 +53,7 @@ export async function getFacets({ } interface FilterOption { - facet: string; + facet: FacetName; value: string; count: number; } @@ -76,6 +77,34 @@ export const FACET_DISPLAY_NAME_MAP: Record> = { "api-reference": "endpoints", }, }; +export const FACET_DISPLAY_NAME_TITLE_CASE_MAP: Record> = { + method: { + GET: "GET requests", + POST: "POST requests", + PUT: "PUT requests", + PATCH: "PATCH requests", + DELETE: "DELETE requests", + }, + api_type: { + http: "Rest", + webhook: "Webhooks", + websocket: "Web sockets", + }, + type: { + markdown: "Guides", + changelog: "Changelog", + "api-reference": "Endpoints", + }, +}; + +export const FACET_DISPLAY_NAME: Record = { + method: "HTTP method", + api_type: "API type", + type: "Content type", + "product.title": "Product", + "version.title": "Version", + status_code: "Status code", +}; export function toFilterOptions(facets: FacetsResponse | undefined, query: string): FilterOption[] { if (facets == null) { @@ -103,3 +132,7 @@ export function toFilterOptions(facets: FacetsResponse | undefined, query: strin return results; } + +export function toFilterLabel(facet: FacetName): string { + return FACET_DISPLAY_NAME[facet]; +} diff --git a/packages/ui/fern-docs-search-ui/src/utils/to-filter-string.ts b/packages/ui/fern-docs-search-ui/src/utils/to-filter-string.ts new file mode 100644 index 0000000000..d32f56bf46 --- /dev/null +++ b/packages/ui/fern-docs-search-ui/src/utils/to-filter-string.ts @@ -0,0 +1,6 @@ +export function toFiltersString(filters: { facet: string; value: string }[]): string { + return filters + .map((filter) => `${filter.facet}:"${filter.value}"`) + .sort() + .join(" AND "); +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 322be5299c..3244e80bc7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2385,6 +2385,12 @@ importers: '@radix-ui/react-dialog': specifier: ^1.1.1 version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-dropdown-menu': + specifier: ^2.0.6 + version: 2.0.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-popover': + specifier: ^1.1.1 + version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-slot': specifier: ^1.1.0 version: 1.1.0(@types/react@18.3.3)(react@18.3.1) @@ -16595,7 +16601,7 @@ snapshots: response-iterator: 0.2.6 symbol-observable: 4.0.0 ts-invariant: 0.10.3 - tslib: 2.6.2 + tslib: 2.8.0 zen-observable-ts: 1.2.5 optionalDependencies: graphql-ws: 5.16.0(graphql@16.9.0) @@ -16619,7 +16625,7 @@ snapshots: response-iterator: 0.2.6 symbol-observable: 4.0.0 ts-invariant: 0.10.3 - tslib: 2.6.2 + tslib: 2.8.0 zen-observable-ts: 1.2.5 optionalDependencies: graphql-ws: 5.16.0(graphql@16.9.0) @@ -20307,6 +20313,16 @@ snapshots: '@types/react': 18.3.1 '@types/react-dom': 18.3.0 + '@radix-ui/react-arrow@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.24.5 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 + '@radix-ui/react-arrow@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -20399,6 +20415,19 @@ snapshots: '@types/react': 18.3.1 '@types/react-dom': 18.3.0 + '@radix-ui/react-collection@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.24.5 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 + '@radix-ui/react-collection@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.1)(react@18.3.1) @@ -20423,6 +20452,13 @@ snapshots: optionalDependencies: '@types/react': 18.3.1 + '@radix-ui/react-compose-refs@1.0.1(@types/react@18.3.3)(react@18.3.1)': + dependencies: + '@babel/runtime': 7.24.5 + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 + '@radix-ui/react-compose-refs@1.1.0(@types/react@18.3.1)(react@18.3.1)': dependencies: react: 18.3.1 @@ -20447,6 +20483,13 @@ snapshots: optionalDependencies: '@types/react': 18.3.1 + '@radix-ui/react-context@1.0.1(@types/react@18.3.3)(react@18.3.1)': + dependencies: + '@babel/runtime': 7.24.5 + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 + '@radix-ui/react-context@1.1.0(@types/react@18.3.1)(react@18.3.1)': dependencies: react: 18.3.1 @@ -20516,6 +20559,13 @@ snapshots: optionalDependencies: '@types/react': 18.3.1 + '@radix-ui/react-direction@1.0.1(@types/react@18.3.3)(react@18.3.1)': + dependencies: + '@babel/runtime': 7.24.5 + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 + '@radix-ui/react-direction@1.1.0(@types/react@18.3.1)(react@18.3.1)': dependencies: react: 18.3.1 @@ -20550,6 +20600,20 @@ snapshots: '@types/react': 18.3.1 '@types/react-dom': 18.3.0 + '@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.24.5 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.3.3)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 + '@radix-ui/react-dismissable-layer@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 @@ -20605,6 +20669,22 @@ snapshots: '@types/react': 18.3.1 '@types/react-dom': 18.3.0 + '@radix-ui/react-dropdown-menu@2.0.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.24.5 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-menu': 2.0.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 + '@radix-ui/react-focus-guards@1.0.1(@types/react@18.3.1)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 @@ -20612,12 +20692,25 @@ snapshots: optionalDependencies: '@types/react': 18.3.1 + '@radix-ui/react-focus-guards@1.0.1(@types/react@18.3.3)(react@18.3.1)': + dependencies: + '@babel/runtime': 7.24.5 + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 + '@radix-ui/react-focus-guards@1.1.0(@types/react@18.3.1)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.1 + '@radix-ui/react-focus-guards@1.1.0(@types/react@18.3.3)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 + '@radix-ui/react-focus-guards@1.1.1(@types/react@18.3.3)(react@18.3.1)': dependencies: react: 18.3.1 @@ -20636,6 +20729,18 @@ snapshots: '@types/react': 18.3.1 '@types/react-dom': 18.3.0 + '@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.24.5 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 + '@radix-ui/react-focus-scope@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.1)(react@18.3.1) @@ -20670,6 +20775,14 @@ snapshots: optionalDependencies: '@types/react': 18.3.1 + '@radix-ui/react-id@1.0.1(@types/react@18.3.3)(react@18.3.1)': + dependencies: + '@babel/runtime': 7.24.5 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 + '@radix-ui/react-id@1.1.0(@types/react@18.3.1)(react@18.3.1)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.1)(react@18.3.1) @@ -20721,6 +20834,33 @@ snapshots: '@types/react': 18.3.1 '@types/react-dom': 18.3.0 + '@radix-ui/react-menu@2.0.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.24.5 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-direction': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) + aria-hidden: 1.2.4 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.5.5(@types/react@18.3.3)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 + '@radix-ui/react-navigation-menu@1.1.4(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 @@ -20767,6 +20907,29 @@ snapshots: '@types/react': 18.3.1 '@types/react-dom': 18.3.0 + '@radix-ui/react-popover@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.3)(react@18.3.1) + aria-hidden: 1.2.4 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.5.7(@types/react@18.3.3)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 + '@radix-ui/react-popper@1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 @@ -20786,6 +20949,25 @@ snapshots: '@types/react': 18.3.1 '@types/react-dom': 18.3.0 + '@radix-ui/react-popper@1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.24.5 + '@floating-ui/react-dom': 2.0.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-rect': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/rect': 1.0.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 + '@radix-ui/react-popper@1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@floating-ui/react-dom': 2.0.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -20839,6 +21021,16 @@ snapshots: '@types/react': 18.3.1 '@types/react-dom': 18.3.0 + '@radix-ui/react-portal@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.24.5 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 + '@radix-ui/react-portal@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -20888,6 +21080,17 @@ snapshots: '@types/react': 18.3.1 '@types/react-dom': 18.3.0 + '@radix-ui/react-presence@1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.24.5 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 + '@radix-ui/react-presence@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.1)(react@18.3.1) @@ -20935,6 +21138,16 @@ snapshots: '@types/react': 18.3.1 '@types/react-dom': 18.3.0 + '@radix-ui/react-primitive@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.24.5 + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 + '@radix-ui/react-primitive@2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-slot': 1.1.0(@types/react@18.3.1)(react@18.3.1) @@ -20990,6 +21203,24 @@ snapshots: '@types/react': 18.3.1 '@types/react-dom': 18.3.0 + '@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.24.5 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-direction': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 + '@radix-ui/react-roving-focus@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.0 @@ -21077,6 +21308,14 @@ snapshots: optionalDependencies: '@types/react': 18.3.1 + '@radix-ui/react-slot@1.0.2(@types/react@18.3.3)(react@18.3.1)': + dependencies: + '@babel/runtime': 7.24.5 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 + '@radix-ui/react-slot@1.1.0(@types/react@18.3.1)(react@18.3.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.1)(react@18.3.1) @@ -21200,6 +21439,13 @@ snapshots: optionalDependencies: '@types/react': 18.3.1 + '@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.3.3)(react@18.3.1)': + dependencies: + '@babel/runtime': 7.24.5 + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 + '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.1)(react@18.3.1)': dependencies: react: 18.3.1 @@ -21226,6 +21472,14 @@ snapshots: optionalDependencies: '@types/react': 18.3.1 + '@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.3.3)(react@18.3.1)': + dependencies: + '@babel/runtime': 7.24.5 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 + '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.1)(react@18.3.1)': dependencies: '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.1)(react@18.3.1) @@ -21248,6 +21502,14 @@ snapshots: optionalDependencies: '@types/react': 18.3.1 + '@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.3.3)(react@18.3.1)': + dependencies: + '@babel/runtime': 7.24.5 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 + '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.3.1)(react@18.3.1)': dependencies: '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.1)(react@18.3.1) @@ -21274,6 +21536,13 @@ snapshots: optionalDependencies: '@types/react': 18.3.1 + '@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.3.3)(react@18.3.1)': + dependencies: + '@babel/runtime': 7.24.5 + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 + '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.1)(react@18.3.1)': dependencies: react: 18.3.1 @@ -21307,6 +21576,14 @@ snapshots: optionalDependencies: '@types/react': 18.3.1 + '@radix-ui/react-use-rect@1.0.1(@types/react@18.3.3)(react@18.3.1)': + dependencies: + '@babel/runtime': 7.24.5 + '@radix-ui/rect': 1.0.1 + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 + '@radix-ui/react-use-rect@1.1.0(@types/react@18.3.1)(react@18.3.1)': dependencies: '@radix-ui/rect': 1.1.0 @@ -21335,6 +21612,14 @@ snapshots: optionalDependencies: '@types/react': 18.3.1 + '@radix-ui/react-use-size@1.0.1(@types/react@18.3.3)(react@18.3.1)': + dependencies: + '@babel/runtime': 7.24.5 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 + '@radix-ui/react-use-size@1.1.0(@types/react@18.3.1)(react@18.3.1)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.1)(react@18.3.1) @@ -31928,23 +32213,45 @@ snapshots: react: 18.3.1 react-remove-scroll-bar: 2.3.6(@types/react@18.3.1)(react@18.3.1) react-style-singleton: 2.2.1(@types/react@18.3.1)(react@18.3.1) - tslib: 2.6.2 + tslib: 2.8.0 use-callback-ref: 1.3.2(@types/react@18.3.1)(react@18.3.1) use-sidecar: 1.1.2(@types/react@18.3.1)(react@18.3.1) optionalDependencies: '@types/react': 18.3.1 + react-remove-scroll@2.5.5(@types/react@18.3.3)(react@18.3.1): + dependencies: + react: 18.3.1 + react-remove-scroll-bar: 2.3.6(@types/react@18.3.3)(react@18.3.1) + react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1) + tslib: 2.8.0 + use-callback-ref: 1.3.2(@types/react@18.3.3)(react@18.3.1) + use-sidecar: 1.1.2(@types/react@18.3.3)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + react-remove-scroll@2.5.7(@types/react@18.3.1)(react@18.3.1): dependencies: react: 18.3.1 react-remove-scroll-bar: 2.3.6(@types/react@18.3.1)(react@18.3.1) react-style-singleton: 2.2.1(@types/react@18.3.1)(react@18.3.1) - tslib: 2.6.2 + tslib: 2.8.0 use-callback-ref: 1.3.2(@types/react@18.3.1)(react@18.3.1) use-sidecar: 1.1.2(@types/react@18.3.1)(react@18.3.1) optionalDependencies: '@types/react': 18.3.1 + react-remove-scroll@2.5.7(@types/react@18.3.3)(react@18.3.1): + dependencies: + react: 18.3.1 + react-remove-scroll-bar: 2.3.6(@types/react@18.3.3)(react@18.3.1) + react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1) + tslib: 2.8.0 + use-callback-ref: 1.3.2(@types/react@18.3.3)(react@18.3.1) + use-sidecar: 1.1.2(@types/react@18.3.3)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + react-remove-scroll@2.6.0(@types/react@18.3.3)(react@18.3.1): dependencies: react: 18.3.1