@xsolla/xui-b2b-sidebar 0.158.0 → 0.159.0
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/README.md +101 -77
- package/native/index.d.mts +19 -0
- package/native/index.d.ts +19 -0
- package/native/index.js +99 -2
- package/native/index.js.map +1 -1
- package/native/index.mjs +99 -2
- package/native/index.mjs.map +1 -1
- package/package.json +6 -6
- package/web/index.d.mts +19 -0
- package/web/index.d.ts +19 -0
- package/web/index.js +99 -2
- package/web/index.js.map +1 -1
- package/web/index.mjs +99 -2
- package/web/index.mjs.map +1 -1
package/native/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.tsx","../../src/Sidebar.tsx","../../src/SidebarContext.tsx","../../src/SidebarCollapsed.tsx","../../src/HideSidebarIcon.tsx","../../src/SidebarContent.tsx","../../../../foundation/primitives-native/src/Box.tsx","../../src/SidebarFooter.tsx","../../src/SidebarTrigger.tsx","../../src/SidebarGroup.tsx","../../src/SidebarMenu.tsx","../../src/SidebarMenuItem.tsx","../../src/constants.ts","../../src/SidebarMenuCollapsible.tsx","../../src/SidebarMenuSub.tsx","../../src/SidebarChatButton.tsx","../../src/SidebarPinnedList.tsx"],"sourcesContent":["/**\n * @xsolla/xui-b2b-sidebar — Composable sidebar component following Shadcn/Radix patterns.\n */\n\n// Core\nexport { Sidebar } from \"./Sidebar\";\nexport { SidebarProvider, useSidebar } from \"./SidebarContext\";\n\n// Layout\nexport { SidebarContent } from \"./SidebarContent\";\nexport { SidebarFooter } from \"./SidebarFooter\";\nexport { SidebarTrigger } from \"./SidebarTrigger\";\n\n// Navigation\nexport { SidebarGroup } from \"./SidebarGroup\";\nexport { SidebarMenu } from \"./SidebarMenu\";\nexport { SidebarMenuItem } from \"./SidebarMenuItem\";\nexport { SidebarMenuCollapsible } from \"./SidebarMenuCollapsible\";\nexport { SidebarMenuSub } from \"./SidebarMenuSub\";\n\n// Utilities\nexport { SidebarChatButton } from \"./SidebarChatButton\";\nexport { SidebarCollapsed } from \"./SidebarCollapsed\";\nexport { SidebarPinnedList, getPinnedCollapsedItem } from \"./SidebarPinnedList\";\n\n// Types\nexport type { SidebarItemType } from \"./types\";\nexport type {\n SidebarLinkProps,\n SidebarLinkActiveCheck,\n SidebarLinkClickHandler,\n SidebarProviderProps,\n} from \"./SidebarContext\";\nexport type { SidebarProps } from \"./Sidebar\";\nexport type { SidebarMenuItemProps } from \"./SidebarMenuItem\";\nexport type { SidebarMenuCollapsibleProps } from \"./SidebarMenuCollapsible\";\nexport type { SidebarCollapsedProps } from \"./SidebarCollapsed\";\nexport type {\n SidebarPinnedItem,\n SidebarPinnedListProps,\n} from \"./SidebarPinnedList\";\n","/**\n * Sidebar — Composable compound component following Shadcn/Radix patterns.\n *\n * Usage:\n * <SidebarProvider collapsed={false} onCollapsedChange={fn} pathname={path} linkComponent={Link}>\n * <Sidebar>\n * <SidebarContent>\n * <SidebarGroup label=\"Main\">\n * <SidebarMenu>\n * <SidebarMenuItem to=\"/dashboard\" icon={<Icon />} label=\"Dashboard\" />\n * <SidebarMenuCollapsible icon={<Icon />} label=\"Finance\" matchPaths={['/finance']}>\n * <SidebarMenuSub>\n * <SidebarMenuItem to=\"/finance/payouts\" label=\"Payouts\" isNested />\n * </SidebarMenuSub>\n * </SidebarMenuCollapsible>\n * </SidebarMenu>\n * </SidebarGroup>\n * </SidebarContent>\n * <SidebarFooter>\n * <SidebarTrigger />\n * </SidebarFooter>\n * </Sidebar>\n * </SidebarProvider>\n */\nimport React, { type ReactNode } from \"react\";\nimport type { SidebarItemType } from \"./types\";\nimport styled from \"styled-components\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport { useSidebar } from \"./SidebarContext\";\nimport { SidebarCollapsed } from \"./SidebarCollapsed\";\n\ninterface OuterProps {\n $expanded: number;\n $collapsed: number;\n $width: number;\n $radius: number;\n $bg: string;\n $transition: string;\n}\n\nconst Outer = styled.div<OuterProps>`\n width: ${(p) => p.$width}px;\n height: 100%;\n max-height: 100%;\n flex-shrink: 0;\n position: relative;\n overflow: hidden;\n border-radius: ${(p) => p.$radius}px;\n background: ${(p) => p.$bg};\n transition: width ${(p) => p.$transition};\n\n a {\n text-decoration: none;\n }\n`;\n\ninterface PaneProps {\n $width: number;\n $hidden: boolean;\n $fadeIn: string;\n $fadeOut: string;\n}\n\nconst ExpandedPane = styled.div<PaneProps>`\n position: absolute;\n top: 0;\n left: 0;\n width: ${(p) => p.$width}px;\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n opacity: ${(p) => (p.$hidden ? 0 : 1)};\n pointer-events: ${(p) => (p.$hidden ? \"none\" : \"auto\")};\n transition: ${(p) => (p.$hidden ? p.$fadeOut : p.$fadeIn)};\n`;\n\nconst CollapsedPane = styled.div<PaneProps>`\n position: absolute;\n top: 0;\n left: 0;\n width: ${(p) => p.$width}px;\n height: 100%;\n opacity: ${(p) => (p.$hidden ? 0 : 1)};\n pointer-events: ${(p) => (p.$hidden ? \"none\" : \"auto\")};\n transition: ${(p) => (p.$hidden ? p.$fadeOut : p.$fadeIn)};\n\n & > div {\n background: transparent;\n border-radius: 0;\n }\n`;\n\nexport interface SidebarProps {\n /** Items for the collapsed icon strip (since collapsed layout is fundamentally different) */\n collapsedItems?: SidebarItemType[];\n /** Tool items shown below a spacer in collapsed mode */\n collapsedToolItems?: SidebarItemType[];\n /** Bottom items in collapsed mode (e.g. Billing, Settings) */\n collapsedBottomItems?: SidebarItemType[];\n /** Whether to render the chat button in collapsed mode (defaults to true) */\n showChat?: boolean;\n /** Click handler for the chat button (collapsed mode) */\n onChatClick?: () => void;\n /** Whether the chat button shows a notification badge */\n chatBadge?: boolean;\n children: ReactNode;\n}\n\nexport const Sidebar: React.FC<SidebarProps> = ({\n collapsedItems = [],\n collapsedToolItems = [],\n collapsedBottomItems = [],\n showChat = true,\n onChatClick,\n chatBadge = false,\n children,\n}) => {\n const { collapsed, onCollapsedChange } = useSidebar();\n const { theme } = useResolvedTheme();\n const sizing = theme.sizing.sidebar();\n\n return (\n <Outer\n role=\"navigation\"\n aria-label=\"Sidebar navigation\"\n $expanded={sizing.widthExpanded}\n $collapsed={sizing.widthCollapsed}\n $width={collapsed ? sizing.widthCollapsed : sizing.widthExpanded}\n $radius={sizing.radius}\n $bg={theme.colors.background.secondary}\n $transition={sizing.transitionWidth}\n >\n <ExpandedPane\n aria-hidden={collapsed}\n $width={sizing.widthExpanded}\n $hidden={collapsed}\n $fadeIn={sizing.transitionFadeIn}\n $fadeOut={sizing.transitionFadeOut}\n >\n {children}\n </ExpandedPane>\n\n <CollapsedPane\n aria-hidden={!collapsed}\n $width={sizing.widthCollapsed}\n $hidden={!collapsed}\n $fadeIn={sizing.transitionFadeIn}\n $fadeOut={sizing.transitionFadeOut}\n >\n <SidebarCollapsed\n items={collapsedItems}\n toolItems={collapsedToolItems}\n bottomItems={collapsedBottomItems}\n onToggleCollapse={() => onCollapsedChange(!collapsed)}\n showChat={showChat}\n onChatClick={onChatClick}\n chatBadge={chatBadge}\n />\n </CollapsedPane>\n </Outer>\n );\n};\n","import React, {\n type ReactNode,\n type MouseEvent,\n createContext,\n useContext,\n useMemo,\n useState,\n useCallback,\n} from \"react\";\n\nexport type SidebarLinkClickHandler = (event?: MouseEvent<HTMLElement>) => void;\n\nexport type SidebarLinkActiveCheck = (\n match: unknown,\n location: { pathname: string; search?: string; hash?: string }\n) => boolean;\n\nexport interface SidebarLinkProps {\n to?: string;\n exact?: boolean;\n external?: boolean;\n target?: string | null;\n className?: string;\n activeClassName?: string;\n isActive?: SidebarLinkActiveCheck;\n onClick?: SidebarLinkClickHandler;\n dataId?: string;\n children: ReactNode;\n}\n\ninterface SidebarContextValue {\n collapsed: boolean;\n onCollapsedChange: (collapsed: boolean) => void;\n pathname: string;\n LinkComponent: React.ComponentType<SidebarLinkProps>;\n expandedId: string | null;\n onExpandedIdChange: (id: string | null) => void;\n}\n\nconst DefaultLink: React.FC<SidebarLinkProps> = ({\n to,\n external,\n target,\n className,\n children,\n dataId,\n onClick,\n}) => (\n <a\n href={to}\n className={className}\n target={external ? (target ?? \"_blank\") : (target ?? undefined)}\n rel={external ? \"noopener noreferrer\" : undefined}\n data-id={dataId}\n onClick={onClick}\n >\n {children}\n </a>\n);\n\nconst SidebarContext = createContext<SidebarContextValue>({\n collapsed: false,\n onCollapsedChange: () => {},\n pathname: \"\",\n LinkComponent: DefaultLink,\n expandedId: null,\n onExpandedIdChange: () => {},\n});\n\nexport interface SidebarProviderProps {\n collapsed?: boolean;\n onCollapsedChange?: (collapsed: boolean) => void;\n pathname?: string;\n linkComponent?: React.ComponentType<SidebarLinkProps>;\n children: ReactNode;\n}\n\nexport const SidebarProvider: React.FC<SidebarProviderProps> = ({\n collapsed: collapsedProp,\n onCollapsedChange,\n pathname = \"\",\n linkComponent,\n children,\n}) => {\n const [internalCollapsed, setInternalCollapsed] = useState(false);\n const [expandedId, setExpandedId] = useState<string | null>(null);\n\n const collapsed = collapsedProp ?? internalCollapsed;\n\n const handleCollapsedChange = useCallback(\n (next: boolean) => {\n if (collapsedProp === undefined) setInternalCollapsed(next);\n onCollapsedChange?.(next);\n },\n [collapsedProp, onCollapsedChange]\n );\n\n const onExpandedIdChange = useCallback((id: string | null) => {\n setExpandedId(id);\n }, []);\n\n const value = useMemo<SidebarContextValue>(\n () => ({\n collapsed,\n onCollapsedChange: handleCollapsedChange,\n pathname,\n LinkComponent: linkComponent || DefaultLink,\n expandedId,\n onExpandedIdChange,\n }),\n [\n collapsed,\n handleCollapsedChange,\n pathname,\n linkComponent,\n expandedId,\n onExpandedIdChange,\n ]\n );\n\n return (\n <SidebarContext.Provider value={value}>{children}</SidebarContext.Provider>\n );\n};\n\nexport const useSidebar = () => useContext(SidebarContext);\n","import type { SidebarItemType } from \"./types\";\n\nimport React, {\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport styled from \"styled-components\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport { Typography } from \"@xsolla/xui-typography\";\nimport { ChatTwoMessages } from \"@xsolla/xui-icons-base\";\nimport { useSidebar } from \"./SidebarContext\";\nimport { HideSidebarIcon } from \"./HideSidebarIcon\";\n\nconst POPOVER_GAP_PX = 12;\nconst POPOVER_VIEWPORT_PADDING_PX = 8;\nconst POPOVER_CLOSE_DELAY_MS = 150;\nconst POPOVER_ITEM_BASE_CLASS = \"xui-sb-popover-item\";\nconst POPOVER_ITEM_ACTIVE_CLASS = \"xui-sb-popover-item--active\";\n\ninterface OuterProps {\n $width: number;\n $radius: number;\n $bg: string;\n}\n\nconst Outer = styled.div<OuterProps>`\n display: flex;\n width: ${(p) => p.$width}px;\n height: 100%;\n max-height: 100%;\n box-sizing: border-box;\n flex-direction: column;\n flex-shrink: 0;\n overflow: hidden;\n background: ${(p) => p.$bg};\n border-radius: ${(p) => p.$radius}px;\n\n a {\n text-decoration: none;\n }\n`;\n\ninterface MainProps {\n $padding: number;\n}\n\nconst MainScroll = styled.div<MainProps>`\n display: flex;\n flex: 1;\n flex-direction: column;\n align-items: center;\n padding: ${(p) => p.$padding}px 0;\n min-height: 0;\n overflow-y: auto;\n\n &::-webkit-scrollbar {\n width: 0;\n }\n`;\n\ninterface IconButtonStyledProps {\n $size: number;\n $radius: number;\n $iconSize: number;\n $color: string;\n $hoverBg: string;\n $hoverColor: string;\n $activeBg: string;\n $activeOutline: string;\n $focusOutline: string;\n $focusOutlineWidth: number;\n $active?: boolean;\n}\n\nconst IconBtn = styled.button<IconButtonStyledProps>`\n display: flex;\n width: ${(p) => p.$size}px;\n height: ${(p) => p.$size}px;\n align-items: center;\n justify-content: center;\n border: 0;\n border-radius: ${(p) => p.$radius}px;\n background: ${(p) => (p.$active ? p.$hoverBg : \"transparent\")};\n color: ${(p) => (p.$active ? p.$hoverColor : p.$color)};\n cursor: pointer;\n padding: 0;\n font: inherit;\n transition:\n background-color 0.15s ease-in-out,\n color 0.15s ease-in-out;\n\n ${(p) =>\n p.$active &&\n `\n background-color: ${p.$activeBg};\n outline: 1px solid ${p.$activeOutline};\n outline-offset: -1px;\n `}\n\n &:hover {\n background-color: ${(p) => p.$hoverBg};\n color: ${(p) => p.$hoverColor};\n }\n\n &:focus-visible {\n outline: ${(p) => p.$focusOutlineWidth}px solid ${(p) => p.$focusOutline};\n outline-offset: -${(p) => p.$focusOutlineWidth}px;\n }\n\n & > span {\n display: flex;\n width: ${(p) => p.$iconSize}px;\n height: ${(p) => p.$iconSize}px;\n align-items: center;\n justify-content: center;\n\n svg {\n width: ${(p) => p.$iconSize}px;\n height: ${(p) => p.$iconSize}px;\n }\n }\n`;\n\nconst Spacer = styled.div`\n height: 16px;\n flex-shrink: 0;\n`;\n\ninterface FooterProps {\n $padding: number;\n $borderColor: string;\n}\n\nconst FixedBottom = styled.div<FooterProps>`\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: ${(p) => p.$padding}px 0;\n flex-shrink: 0;\n`;\n\nconst Footer = styled.div<FooterProps>`\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n padding: ${(p) => p.$padding}px 0;\n border-top: 1px solid ${(p) => p.$borderColor};\n flex-shrink: 0;\n`;\n\ninterface ChatBtnProps {\n $size: number;\n $radius: number;\n $bg: string;\n $border: string;\n $color: string;\n $focusOutline: string;\n $focusOutlineWidth: number;\n}\n\nconst CollapsedChat = styled.button<ChatBtnProps>`\n display: flex;\n width: ${(p) => p.$size}px;\n height: ${(p) => p.$size}px;\n align-items: center;\n justify-content: center;\n border: 1px solid ${(p) => p.$border};\n border-radius: ${(p) => p.$radius}px;\n background: ${(p) => p.$bg};\n color: ${(p) => p.$color};\n cursor: pointer;\n position: relative;\n padding: 0;\n font: inherit;\n\n &:hover {\n opacity: 0.9;\n }\n\n &:focus-visible {\n outline: ${(p) => p.$focusOutlineWidth}px solid ${(p) => p.$focusOutline};\n outline-offset: 2px;\n }\n\n svg {\n width: 16px;\n height: 16px;\n }\n`;\n\ninterface CollapsedToggleProps {\n $size: number;\n $radius: number;\n $iconSize: number;\n $borderColor: string;\n $hoverBg: string;\n $color: string;\n $focusOutline: string;\n $focusOutlineWidth: number;\n}\n\nconst CollapsedToggle = styled.button<CollapsedToggleProps>`\n display: flex;\n width: ${(p) => p.$size}px;\n height: ${(p) => p.$size}px;\n align-items: center;\n justify-content: center;\n border: 1px solid ${(p) => p.$borderColor};\n border-radius: ${(p) => p.$radius}px;\n background: transparent;\n cursor: pointer;\n color: ${(p) => p.$color};\n padding: 0;\n font: inherit;\n\n &:hover {\n background: ${(p) => p.$hoverBg};\n }\n\n &:focus-visible {\n outline: ${(p) => p.$focusOutlineWidth}px solid ${(p) => p.$focusOutline};\n outline-offset: 2px;\n }\n\n svg {\n width: ${(p) => p.$iconSize}px;\n height: ${(p) => p.$iconSize}px;\n }\n`;\n\ninterface BadgeProps {\n $size: number;\n $color: string;\n}\n\nconst ChatBadge = styled.span<BadgeProps>`\n position: absolute;\n top: -2px;\n right: -2px;\n width: ${(p) => p.$size}px;\n height: ${(p) => p.$size}px;\n background: ${(p) => p.$color};\n border-radius: 999px;\n`;\n\ninterface PopoverContainerProps {\n $minWidth: number;\n $maxWidth: number;\n $zIndex: number;\n}\n\nconst PopoverContainer = styled.div<PopoverContainerProps>`\n position: fixed;\n z-index: ${(p) => p.$zIndex};\n min-width: ${(p) => p.$minWidth}px;\n max-width: ${(p) => p.$maxWidth}px;\n`;\n\ninterface PopoverInnerProps {\n $itemHeight: number;\n $padding: number;\n $radius: number;\n $bg: string;\n $shadow: string;\n}\n\nconst PopoverInner = styled.div<PopoverInnerProps>`\n min-height: ${(p) => p.$itemHeight}px;\n padding: ${(p) => p.$padding}px;\n background: ${(p) => p.$bg};\n border-radius: ${(p) => p.$radius}px;\n display: flex;\n flex-direction: column;\n gap: 6px;\n box-shadow: ${(p) => p.$shadow};\n`;\n\nconst PopoverTitle = styled.div<{ $padding: number }>`\n display: flex;\n height: 20px;\n align-items: center;\n padding: 0 ${(p) => p.$padding}px;\n overflow: hidden;\n`;\n\nconst PopoverDivider = styled.div<{ $color: string }>`\n height: 1px;\n align-self: stretch;\n background: ${(p) => p.$color};\n`;\n\ninterface PopoverItemsProps {\n $itemHeight: number;\n $padding: number;\n $radius: number;\n $colorIdle: string;\n $colorActive: string;\n $hoverBg: string;\n $activeBg: string;\n $activeOutline: string;\n $focusOutline: string;\n $focusOutlineWidth: number;\n}\n\nconst PopoverItems = styled.div<PopoverItemsProps>`\n display: flex;\n flex-direction: column;\n\n & > .${POPOVER_ITEM_BASE_CLASS} {\n display: flex;\n max-height: ${(p) => p.$itemHeight}px;\n align-items: center;\n padding: 12px ${(p) => p.$padding}px;\n border-radius: ${(p) => p.$radius}px;\n color: ${(p) => p.$colorIdle};\n font-weight: 400;\n cursor: pointer;\n transition: background-color 0.15s ease-in-out;\n text-decoration: none;\n }\n\n & > .${POPOVER_ITEM_BASE_CLASS}:hover {\n background-color: ${(p) => p.$hoverBg};\n }\n\n & > .${POPOVER_ITEM_BASE_CLASS}:focus-visible {\n outline: ${(p) => p.$focusOutlineWidth}px solid ${(p) => p.$focusOutline};\n outline-offset: -${(p) => p.$focusOutlineWidth}px;\n }\n\n & > .${POPOVER_ITEM_ACTIVE_CLASS} {\n background-color: ${(p) => p.$activeBg};\n color: ${(p) => p.$colorActive};\n outline: 1px solid ${(p) => p.$activeOutline};\n outline-offset: -1px;\n font-weight: 500;\n }\n`;\n\ninterface SinglePopoverProps {\n $padding: number;\n $itemHeight: number;\n $radius: number;\n $bg: string;\n $shadow: string;\n}\n\nconst SinglePopoverPanel = styled.div<SinglePopoverProps>`\n padding: 4px;\n background: ${(p) => p.$bg};\n border-radius: ${(p) => p.$radius}px;\n display: inline-flex;\n flex-direction: column;\n box-shadow: ${(p) => p.$shadow};\n`;\n\ninterface SingleLinkProps {\n $itemHeight: number;\n $padding: number;\n $radius: number;\n $color: string;\n}\n\n// styled.span here so the consumer's LinkComponent (rendered inside) inherits\n// these styles via cascade — keeps the DOM single-element while letting us\n// scope styles. We use display:contents on the wrapper so it behaves as if\n// the link were a direct child of the popover panel.\nconst SingleLinkWrap = styled.div<SingleLinkProps>`\n display: contents;\n\n & > a,\n & > * {\n display: inline-flex;\n max-height: ${(p) => p.$itemHeight}px;\n align-items: center;\n padding: 0 ${(p) => p.$padding}px;\n border-radius: ${(p) => p.$radius}px;\n color: ${(p) => p.$color};\n cursor: pointer;\n font-size: 14px;\n font-weight: 400;\n line-height: 18px;\n white-space: nowrap;\n text-decoration: none;\n }\n`;\n\ninterface CollapsedIconItemProps {\n item: SidebarItemType;\n onPopoverOpen: (item: SidebarItemType, rect: DOMRect) => void;\n onPopoverClose: () => void;\n pathname?: string;\n}\n\nconst isChildActive = (item: SidebarItemType, pathname?: string): boolean => {\n if (!item.children || !pathname) {\n return false;\n }\n const pathWithoutMerchant = pathname.replace(/^\\/\\d+/, \"\");\n return item.children.some((child) => {\n if (typeof child.to !== \"string\") {\n return false;\n }\n return child.exact\n ? pathWithoutMerchant === child.to\n : pathWithoutMerchant === child.to ||\n pathWithoutMerchant.startsWith(`${child.to}/`);\n });\n};\n\nconst CollapsedIconItem: React.FC<\n CollapsedIconItemProps & {\n sizing: ReturnType<\n ReturnType<typeof useResolvedTheme>[\"theme\"][\"sizing\"][\"sidebar\"]\n >;\n colors: ReturnType<typeof useResolvedTheme>[\"theme\"][\"colors\"];\n }\n> = ({ item, onPopoverOpen, onPopoverClose, pathname, sizing, colors }) => {\n const ref = useRef<HTMLButtonElement | null>(null);\n const hasChildren = Boolean(item.children && item.children.length > 0);\n const isActive = hasChildren && isChildActive(item, pathname);\n\n const openPopover = useCallback(() => {\n if (ref.current) {\n onPopoverOpen(item, ref.current.getBoundingClientRect());\n }\n }, [item, onPopoverOpen]);\n\n const isSimpleActive =\n !hasChildren &&\n (() => {\n if (!item.to || !pathname) {\n return false;\n }\n const pathWithoutMerchant = pathname.replace(/^\\/\\d+/, \"\");\n return item.exact\n ? pathWithoutMerchant === item.to\n : pathWithoutMerchant === item.to ||\n pathWithoutMerchant.startsWith(`${item.to}/`);\n })();\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n openPopover();\n } else if (e.key === \"Escape\") {\n onPopoverClose();\n }\n };\n\n if (!item.icon) {\n return null;\n }\n\n return (\n <IconBtn\n ref={ref}\n type=\"button\"\n onMouseEnter={openPopover}\n onMouseLeave={onPopoverClose}\n onFocus={openPopover}\n onBlur={onPopoverClose}\n onKeyDown={handleKeyDown}\n data-id={item.dataId}\n aria-haspopup={hasChildren ? \"menu\" : \"false\"}\n $size={sizing.itemHeight}\n $radius={sizing.radius}\n $iconSize={sizing.iconSize}\n $color={colors.content.tertiary}\n $hoverBg={colors.overlay.mono}\n $hoverColor={colors.content.primary}\n $activeBg={colors.overlay.mono}\n $activeOutline={colors.border.secondary}\n $focusOutline={colors.border.brand}\n $focusOutlineWidth={sizing.focusOutlineWidth}\n $active={isActive || isSimpleActive}\n >\n <span>{item.icon}</span>\n </IconBtn>\n );\n};\n\ninterface PopoverProps {\n item: SidebarItemType;\n triggerRect: DOMRect;\n onClose: () => void;\n onMouseEnter: () => void;\n onMouseLeave: () => void;\n sizing: ReturnType<\n ReturnType<typeof useResolvedTheme>[\"theme\"][\"sizing\"][\"sidebar\"]\n >;\n colors: ReturnType<typeof useResolvedTheme>[\"theme\"][\"colors\"];\n}\n\nconst CollapsedPopover: React.FC<PopoverProps> = ({\n item,\n triggerRect,\n onClose,\n onMouseEnter,\n onMouseLeave,\n sizing,\n colors,\n}) => {\n const { LinkComponent } = useSidebar();\n const popoverRef = useRef<HTMLDivElement | null>(null);\n const hasChildren = Boolean(item.children && item.children.length > 0);\n const [position, setPosition] = useState<{ top: number; left: number }>({\n top: triggerRect.top,\n left: triggerRect.right + POPOVER_GAP_PX,\n });\n\n useLayoutEffect(() => {\n if (!popoverRef.current) {\n return;\n }\n const rect = popoverRef.current.getBoundingClientRect();\n const triggerCenterY = triggerRect.top + triggerRect.height / 2;\n const idealTop = hasChildren\n ? triggerRect.top\n : triggerCenterY - rect.height / 2;\n const maxTop = Math.max(\n POPOVER_VIEWPORT_PADDING_PX,\n window.innerHeight - rect.height - POPOVER_VIEWPORT_PADDING_PX\n );\n const top = Math.max(\n POPOVER_VIEWPORT_PADDING_PX,\n Math.min(idealTop, maxTop)\n );\n const left = Math.min(\n triggerRect.right + POPOVER_GAP_PX,\n window.innerWidth - rect.width - POPOVER_VIEWPORT_PADDING_PX\n );\n if (top !== position.top || left !== position.left) {\n setPosition({ top, left });\n }\n }, [\n triggerRect.top,\n triggerRect.right,\n triggerRect.height,\n hasChildren,\n item.dataId,\n position.top,\n position.left,\n ]);\n\n if (!hasChildren) {\n return (\n <PopoverContainer\n ref={popoverRef}\n style={{ top: position.top, left: position.left, minWidth: \"auto\" }}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n $minWidth={0}\n $maxWidth={sizing.popoverMaxWidth}\n $zIndex={sizing.popoverZIndex}\n >\n <SinglePopoverPanel\n $padding={sizing.padding}\n $itemHeight={sizing.itemHeight}\n $radius={sizing.radius}\n $bg={colors.layer.float}\n $shadow={sizing.popoverShadow}\n >\n <SingleLinkWrap\n $itemHeight={sizing.itemHeight}\n $padding={sizing.padding}\n $radius={sizing.radius}\n $color={colors.content.primary}\n >\n <LinkComponent\n to={item.to}\n exact={item.exact}\n external={item.external}\n target={item.target}\n dataId={item.dataId}\n onClick={onClose}\n >\n <Typography variant=\"bodySm\" color=\"primary\">\n {item.label}\n </Typography>\n </LinkComponent>\n </SingleLinkWrap>\n </SinglePopoverPanel>\n </PopoverContainer>\n );\n }\n\n return (\n <PopoverContainer\n ref={popoverRef}\n role=\"menu\"\n style={{ top: position.top, left: position.left }}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n $minWidth={sizing.popoverMinWidth}\n $maxWidth={sizing.popoverMaxWidth}\n $zIndex={sizing.popoverZIndex}\n >\n <PopoverInner\n $itemHeight={sizing.itemHeight}\n $padding={sizing.padding}\n $radius={sizing.radius}\n $bg={colors.layer.float}\n $shadow={sizing.popoverShadow}\n >\n <PopoverTitle $padding={sizing.padding}>\n <Typography variant=\"bodyXs\" color=\"primary\">\n {item.label}\n </Typography>\n </PopoverTitle>\n <PopoverDivider $color={colors.border.secondary} />\n <PopoverItems\n $itemHeight={sizing.itemHeight}\n $padding={sizing.padding}\n $radius={sizing.radius}\n $colorIdle={colors.content.tertiary}\n $colorActive={colors.content.primary}\n $hoverBg={colors.overlay.mono}\n $activeBg={colors.overlay.mono}\n $activeOutline={colors.border.secondary}\n $focusOutline={colors.border.brand}\n $focusOutlineWidth={sizing.focusOutlineWidth}\n >\n {(item.children || []).map((child, i) => (\n <LinkComponent\n key={\n child.dataId ||\n (typeof child.to === \"string\" ? child.to : `child-${i}`)\n }\n to={child.to}\n exact={child.exact}\n external={child.external}\n target={child.target}\n className={POPOVER_ITEM_BASE_CLASS}\n activeClassName={POPOVER_ITEM_ACTIVE_CLASS}\n dataId={child.dataId}\n onClick={onClose}\n >\n <Typography variant=\"bodySm\" color=\"inherit\">\n {child.label}\n </Typography>\n </LinkComponent>\n ))}\n </PopoverItems>\n </PopoverInner>\n </PopoverContainer>\n );\n};\n\nexport interface SidebarCollapsedProps {\n items: SidebarItemType[];\n toolItems?: SidebarItemType[];\n bottomItems?: SidebarItemType[];\n onToggleCollapse?: () => void;\n onChatClick?: () => void;\n showChat?: boolean;\n chatBadge?: boolean;\n}\n\nexport const SidebarCollapsed: React.FC<SidebarCollapsedProps> = ({\n items,\n toolItems = [],\n bottomItems = [],\n onToggleCollapse,\n onChatClick,\n showChat = true,\n chatBadge = false,\n}) => {\n const { pathname } = useSidebar();\n const { theme } = useResolvedTheme();\n const sizing = theme.sizing.sidebar();\n const colors = theme.colors;\n\n const [popover, setPopover] = useState<{\n item: SidebarItemType;\n triggerRect: DOMRect;\n } | null>(null);\n const closeTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const cancelCloseTimer = useCallback(() => {\n if (closeTimerRef.current) {\n clearTimeout(closeTimerRef.current);\n closeTimerRef.current = null;\n }\n }, []);\n\n const startCloseTimer = useCallback(() => {\n cancelCloseTimer();\n closeTimerRef.current = setTimeout(() => {\n setPopover(null);\n }, POPOVER_CLOSE_DELAY_MS);\n }, [cancelCloseTimer]);\n\n useEffect(() => () => cancelCloseTimer(), [cancelCloseTimer]);\n\n const handlePopoverOpen = useCallback(\n (item: SidebarItemType, rect: DOMRect) => {\n cancelCloseTimer();\n setPopover({ item, triggerRect: rect });\n },\n [cancelCloseTimer]\n );\n\n return (\n <Outer\n $width={sizing.widthCollapsed}\n $radius={sizing.radius}\n $bg={colors.background.secondary}\n >\n <MainScroll $padding={sizing.padding}>\n {items.map((item, i) => (\n <CollapsedIconItem\n key={item.dataId || `item-${i}`}\n item={item}\n onPopoverOpen={handlePopoverOpen}\n onPopoverClose={startCloseTimer}\n pathname={pathname}\n sizing={sizing}\n colors={colors}\n />\n ))}\n {toolItems.length > 0 && (\n <>\n <Spacer />\n {toolItems.map((item, i) => (\n <CollapsedIconItem\n key={item.dataId || `tool-${i}`}\n item={item}\n onPopoverOpen={handlePopoverOpen}\n onPopoverClose={startCloseTimer}\n pathname={pathname}\n sizing={sizing}\n colors={colors}\n />\n ))}\n </>\n )}\n </MainScroll>\n\n <FixedBottom\n $padding={sizing.padding}\n $borderColor={colors.border.secondary}\n >\n {bottomItems.map((item, i) => (\n <CollapsedIconItem\n key={item.dataId || `bottom-${i}`}\n item={item}\n onPopoverOpen={handlePopoverOpen}\n onPopoverClose={startCloseTimer}\n pathname={pathname}\n sizing={sizing}\n colors={colors}\n />\n ))}\n </FixedBottom>\n\n <Footer $padding={sizing.padding} $borderColor={colors.border.secondary}>\n {showChat && (\n <CollapsedChat\n onClick={onChatClick}\n type=\"button\"\n aria-label=\"Open chat\"\n $size={sizing.itemHeight}\n $radius={sizing.radius}\n $bg={colors.control.brand.primary.bg}\n $border={colors.control.brand.primary.border}\n $color={colors.content.static.dark}\n $focusOutline={colors.border.brand}\n $focusOutlineWidth={sizing.focusOutlineWidth}\n >\n <ChatTwoMessages size={16} variant=\"line\" />\n {chatBadge && (\n <ChatBadge\n $size={sizing.chatBadgeSize}\n $color={colors.background.alert.primary}\n />\n )}\n </CollapsedChat>\n )}\n <CollapsedToggle\n onClick={onToggleCollapse}\n type=\"button\"\n aria-label=\"Expand sidebar\"\n aria-pressed={true}\n $size={sizing.itemHeight}\n $radius={sizing.radius}\n $iconSize={sizing.iconSize}\n $borderColor={colors.border.secondary}\n $hoverBg={colors.overlay.mono}\n $color={colors.content.tertiary}\n $focusOutline={colors.border.brand}\n $focusOutlineWidth={sizing.focusOutlineWidth}\n >\n <HideSidebarIcon flipped />\n </CollapsedToggle>\n </Footer>\n\n {popover &&\n typeof document !== \"undefined\" &&\n createPortal(\n <CollapsedPopover\n item={popover.item}\n triggerRect={popover.triggerRect}\n onClose={() => setPopover(null)}\n onMouseEnter={cancelCloseTimer}\n onMouseLeave={startCloseTimer}\n sizing={sizing}\n colors={colors}\n />,\n document.body\n )}\n </Outer>\n );\n};\n","import React from \"react\";\n\ninterface HideSidebarIconProps {\n /** Rotate icon 180° (e.g. when sidebar is collapsed and the button now expands it) */\n flipped?: boolean;\n}\n\nexport const HideSidebarIcon: React.FC<HideSidebarIconProps> = ({\n flipped,\n}) => (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n focusable=\"false\"\n style={flipped ? { transform: \"rotate(180deg)\" } : undefined}\n >\n <path\n d=\"M10.1519 3.75L10.9674 4.60262L7.33825 8.39704H15.75V9.60296H7.33825L10.9674 13.3974L10.1519 14.25L5.33446 9.21318C5.22185 9.09544 5.22185 8.90456 5.33446 8.78682L10.1519 3.75Z\"\n fill=\"currentColor\"\n />\n <path d=\"M2.25 3.75H3.75V15H2.25V3.75Z\" fill=\"currentColor\" />\n </svg>\n);\n","import React, { type ReactNode } from \"react\";\nimport styled from \"styled-components\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\n\ninterface ScrollableProps {\n $padding: number;\n $thumbColor: string;\n}\n\n// Box can't express ::-webkit-scrollbar styling, so this drops directly to\n// styled-components like Markdown.tsx does for its element-specific rules.\nconst ScrollableArea = styled.div<ScrollableProps>`\n flex: 1;\n display: flex;\n flex-direction: column;\n padding: ${(p) => p.$padding}px;\n padding-bottom: 0;\n overflow: hidden auto;\n min-height: 0;\n\n &::-webkit-scrollbar {\n width: 4px;\n }\n &::-webkit-scrollbar-track {\n background: none;\n }\n &::-webkit-scrollbar-thumb {\n background-color: ${(p) => p.$thumbColor};\n border-radius: 2px;\n visibility: hidden;\n }\n &:hover::-webkit-scrollbar-thumb {\n visibility: visible;\n }\n`;\n\nexport const SidebarContent: React.FC<{ children: ReactNode }> = ({\n children,\n}) => {\n const { theme } = useResolvedTheme();\n const sizing = theme.sizing.sidebar();\n return (\n <ScrollableArea\n $padding={sizing.padding}\n $thumbColor={theme.colors.content.tertiary}\n >\n {children}\n </ScrollableArea>\n );\n};\n","import React from \"react\";\nimport {\n View,\n Pressable,\n Image,\n ViewStyle,\n ImageStyle,\n DimensionValue,\n AnimatableNumericValue,\n} from \"react-native\";\nimport { BoxProps } from \"@xsolla/xui-primitives-core\";\n\nexport const Box: React.FC<BoxProps> = ({\n children,\n onPress,\n onLayout,\n onMoveShouldSetResponder,\n onResponderGrant,\n onResponderMove,\n onResponderRelease,\n onResponderTerminate,\n backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius,\n borderStyle,\n height,\n padding,\n paddingHorizontal,\n paddingVertical,\n margin,\n marginTop,\n marginBottom,\n marginLeft,\n marginRight,\n flexDirection,\n alignItems,\n justifyContent,\n position,\n top,\n bottom,\n left,\n right,\n width,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n flex,\n overflow,\n zIndex,\n hoverStyle,\n pressStyle,\n style,\n \"data-testid\": dataTestId,\n testID,\n as,\n src,\n alt,\n ...rest\n}) => {\n const getContainerStyle = (pressed?: boolean): ViewStyle => ({\n backgroundColor:\n pressed && pressStyle?.backgroundColor\n ? pressStyle.backgroundColor\n : backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius: borderRadius as AnimatableNumericValue,\n borderStyle: borderStyle as ViewStyle[\"borderStyle\"],\n overflow,\n zIndex,\n height: height as DimensionValue,\n width: width as DimensionValue,\n minWidth: minWidth as DimensionValue,\n minHeight: minHeight as DimensionValue,\n maxWidth: maxWidth as DimensionValue,\n maxHeight: maxHeight as DimensionValue,\n padding: padding as DimensionValue,\n paddingHorizontal: paddingHorizontal as DimensionValue,\n paddingVertical: paddingVertical as DimensionValue,\n margin: margin as DimensionValue,\n marginTop: marginTop as DimensionValue,\n marginBottom: marginBottom as DimensionValue,\n marginLeft: marginLeft as DimensionValue,\n marginRight: marginRight as DimensionValue,\n flexDirection,\n alignItems,\n justifyContent,\n position: position as ViewStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n flex,\n ...(style as ViewStyle),\n });\n\n const finalTestID = dataTestId || testID;\n\n // Destructure and drop web-only props from rest before passing to RN components\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n role,\n tabIndex,\n onKeyDown,\n onKeyUp,\n \"aria-label\": _ariaLabel,\n \"aria-labelledby\": _ariaLabelledBy,\n \"aria-current\": _ariaCurrent,\n \"aria-disabled\": _ariaDisabled,\n \"aria-live\": _ariaLive,\n className,\n \"data-testid\": _dataTestId,\n ...nativeRest\n } = rest as Record<string, unknown>;\n\n // Handle as=\"img\" for React Native\n if (as === \"img\" && src) {\n const imageStyle: ImageStyle = {\n width: width as DimensionValue,\n height: height as DimensionValue,\n borderRadius: borderRadius as number,\n position: position as ImageStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n ...(style as ImageStyle),\n };\n\n return (\n <Image\n source={{ uri: src }}\n style={imageStyle}\n testID={finalTestID}\n resizeMode=\"cover\"\n {...nativeRest}\n />\n );\n }\n\n if (onPress) {\n return (\n <Pressable\n onPress={onPress}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n style={({ pressed }) => getContainerStyle(pressed)}\n testID={finalTestID}\n {...nativeRest}\n >\n {children}\n </Pressable>\n );\n }\n\n return (\n <View\n style={getContainerStyle()}\n testID={finalTestID}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n {...nativeRest}\n >\n {children}\n </View>\n );\n};\n","import React, { type ReactNode } from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box } from \"@xsolla/xui-primitives\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\n\nexport const SidebarFooter: React.FC<{ children: ReactNode }> = ({\n children,\n}) => {\n const { theme } = useResolvedTheme();\n const sizing = theme.sizing.sidebar();\n\n return (\n <Box\n flexDirection=\"row\"\n alignItems=\"flex-end\"\n justifyContent=\"space-between\"\n padding={sizing.padding}\n borderTopWidth={1}\n borderTopColor={theme.colors.border.secondary}\n flexShrink={0}\n >\n {children}\n </Box>\n );\n};\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport { useSidebar } from \"./SidebarContext\";\nimport { HideSidebarIcon } from \"./HideSidebarIcon\";\n\ninterface ToggleProps {\n $size: number;\n $radius: number;\n $iconSize: number;\n $borderColor: string;\n $hoverBg: string;\n $color: string;\n $focusOutline: string;\n $focusOutlineWidth: number;\n}\n\nconst ToggleButton = styled.button<ToggleProps>`\n display: flex;\n width: ${(p) => p.$size}px;\n height: ${(p) => p.$size}px;\n align-items: center;\n justify-content: center;\n border: 1px solid ${(p) => p.$borderColor};\n border-radius: ${(p) => p.$radius}px;\n background: transparent;\n backdrop-filter: blur(30px);\n cursor: pointer;\n color: ${(p) => p.$color};\n padding: 0;\n font: inherit;\n\n &:hover {\n background: ${(p) => p.$hoverBg};\n }\n\n &:focus-visible {\n outline: ${(p) => p.$focusOutlineWidth}px solid ${(p) => p.$focusOutline};\n outline-offset: 2px;\n }\n\n svg {\n width: ${(p) => p.$iconSize}px;\n height: ${(p) => p.$iconSize}px;\n }\n`;\n\nexport const SidebarTrigger: React.FC = () => {\n const { collapsed, onCollapsedChange } = useSidebar();\n const { theme } = useResolvedTheme();\n const sizing = theme.sizing.sidebar();\n\n return (\n <ToggleButton\n type=\"button\"\n onClick={() => onCollapsedChange(!collapsed)}\n aria-label={collapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n aria-pressed={collapsed}\n $size={sizing.itemHeight}\n $radius={sizing.radius}\n $iconSize={sizing.iconSize}\n $borderColor={theme.colors.border.secondary}\n $hoverBg={theme.colors.overlay.mono}\n $color={theme.colors.content.tertiary}\n $focusOutline={theme.colors.border.brand}\n $focusOutlineWidth={sizing.focusOutlineWidth}\n >\n <HideSidebarIcon flipped={collapsed} />\n </ToggleButton>\n );\n};\n","import React, { type ReactNode } from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box } from \"@xsolla/xui-primitives\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport { Typography } from \"@xsolla/xui-typography\";\n\ninterface SidebarGroupProps {\n label?: string;\n dataId?: string;\n /** Docks this group to the bottom of the expanded sidebar (e.g. Settings, Billing). */\n pinnedToBottom?: boolean;\n children: ReactNode;\n}\n\nexport const SidebarGroup: React.FC<SidebarGroupProps> = ({\n label,\n dataId,\n pinnedToBottom,\n children,\n}) => {\n const { theme } = useResolvedTheme();\n const sizing = theme.sizing.sidebar();\n\n return (\n <Box\n flexDirection=\"column\"\n data-id={dataId}\n role={label ? \"group\" : undefined}\n aria-label={label}\n style={pinnedToBottom ? { marginTop: \"auto\" } : undefined}\n >\n {label && (\n <Box\n flexDirection=\"row\"\n alignItems=\"center\"\n height={sizing.sectionLabelHeight}\n paddingHorizontal={sizing.padding}\n marginTop={sizing.padding}\n >\n <Typography variant=\"bodyXs\" color=\"secondary\">\n {label}\n </Typography>\n </Box>\n )}\n {children}\n </Box>\n );\n};\n","import React, { type ReactNode } from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box } from \"@xsolla/xui-primitives\";\n\nexport const SidebarMenu: React.FC<{ children: ReactNode }> = ({\n children,\n}) => (\n <Box flexDirection=\"column\" alignItems=\"stretch\">\n {children}\n </Box>\n);\n","import React, { type ReactNode } from \"react\";\nimport {\n type SidebarLinkActiveCheck,\n type SidebarLinkClickHandler,\n useSidebar,\n} from \"./SidebarContext\";\nimport styled from \"styled-components\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport { Typography } from \"@xsolla/xui-typography\";\nimport { Tooltip } from \"@xsolla/xui-tooltip\";\nimport { Drag, OpenIn, Pin, Remove } from \"@xsolla/xui-icons-base\";\nimport { ITEM_BASE_CLASS, ITEM_ACTIVE_CLASS } from \"./constants\";\n\nconst TOOLTIP_TRUNCATE_LENGTH = 20;\n\ninterface WrapperProps {\n $itemHeight: number;\n $iconSize: number;\n $padding: number;\n $radius: number;\n $colorIdle: string;\n $colorActive: string;\n $hoverBg: string;\n $activeBg: string;\n $activeOutline: string;\n $focusOutline: string;\n $focusOutlineWidth: number;\n $multiLine?: boolean;\n}\n\n// Wraps the consumer-provided LinkComponent so we can attach hover/active/focus\n// styles without requiring the link to be styled-components-aware. The link\n// receives a className we own; active state is carried via activeClassName.\nconst ItemWrapper = styled.div<WrapperProps>`\n display: contents;\n\n & > .${ITEM_BASE_CLASS} {\n display: flex;\n height: ${(p) => (p.$multiLine ? \"auto\" : `${p.$itemHeight}px`)};\n max-height: ${(p) => (p.$multiLine ? \"none\" : `${p.$itemHeight}px`)};\n width: 100%;\n box-sizing: border-box;\n align-items: ${(p) => (p.$multiLine ? \"flex-start\" : \"center\")};\n gap: 8px;\n padding: 0 ${(p) => p.$padding}px;\n border-radius: ${(p) => p.$radius}px;\n color: ${(p) => p.$colorIdle};\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n line-height: 18px;\n overflow: hidden;\n transition:\n background-color 0.15s ease-in-out,\n color 0.15s ease-in-out;\n white-space: ${(p) => (p.$multiLine ? \"normal\" : \"nowrap\")};\n text-align: left;\n text-decoration: none;\n }\n\n & > .${ITEM_BASE_CLASS}:hover {\n background-color: ${(p) => p.$hoverBg};\n }\n\n & > .${ITEM_BASE_CLASS}:focus-visible {\n outline: ${(p) => p.$focusOutlineWidth}px solid ${(p) => p.$focusOutline};\n outline-offset: -${(p) => p.$focusOutlineWidth}px;\n }\n\n & > .${ITEM_ACTIVE_CLASS} {\n background-color: ${(p) => p.$activeBg};\n outline: 1px solid ${(p) => p.$activeOutline};\n outline-offset: -1px;\n color: ${(p) => p.$colorActive};\n font-weight: 500;\n }\n`;\n\ninterface IconBoxProps {\n $size: number;\n}\n\nconst IconBox = styled.div<IconBoxProps>`\n display: flex;\n width: ${(p) => p.$size}px;\n height: ${(p) => p.$size}px;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n color: inherit;\n\n svg {\n width: ${(p) => p.$size}px;\n height: ${(p) => p.$size}px;\n }\n`;\n\n// Stacks the pin glyph and drag handle in the leading icon slot. Pin is shown\n// at rest; on row hover the drag handle takes over to signal reorder affordance.\nconst PinDragSlot = styled.div<{ $size: number }>`\n position: relative;\n width: ${(p) => p.$size}px;\n height: ${(p) => p.$size}px;\n flex-shrink: 0;\n cursor: grab;\n\n .${ITEM_BASE_CLASS}:active & {\n cursor: grabbing;\n }\n`;\n\nconst PinDragLayer = styled.div<{ $size: number; $hideOnHover: boolean }>`\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n color: inherit;\n opacity: ${(p) => (p.$hideOnHover ? 1 : 0)};\n transition: opacity 0.15s ease-in-out;\n\n .${ITEM_BASE_CLASS}:hover & {\n opacity: ${(p) => (p.$hideOnHover ? 0 : 1)};\n }\n\n svg {\n width: 12px;\n height: 12px;\n }\n`;\n\ninterface PinButtonProps {\n $size: number;\n $color: string;\n $hoverColor: string;\n $activeColor: string;\n $isPinned: boolean;\n}\n\n// Pin toggle reveals on hover of the parent row; stays visible when pinned.\nconst PinButton = styled.button<PinButtonProps>`\n display: flex;\n width: ${(p) => p.$size}px;\n height: ${(p) => p.$size}px;\n flex-shrink: 0;\n margin-left: auto;\n align-items: center;\n justify-content: center;\n padding: 0;\n border: none;\n background: transparent;\n color: ${(p) => (p.$isPinned ? p.$activeColor : p.$color)};\n cursor: pointer;\n border-radius: 4px;\n opacity: 0;\n transition:\n opacity 0.15s ease-in-out,\n color 0.15s ease-in-out;\n\n .${ITEM_BASE_CLASS}:hover & {\n opacity: 1;\n }\n\n &:hover {\n color: ${(p) => p.$hoverColor};\n }\n\n &:focus-visible {\n opacity: 1;\n outline: 1px solid currentColor;\n outline-offset: 1px;\n }\n\n svg {\n width: 12px;\n height: 12px;\n }\n`;\n\nconst LabelBox = styled.span`\n display: flex;\n flex: 1;\n gap: 4px;\n height: 20px;\n align-items: center;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\ninterface BadgeDotProps {\n $size: number;\n $color: string;\n}\n\nconst BadgeDot = styled.span<BadgeDotProps>`\n width: ${(p) => p.$size}px;\n height: ${(p) => p.$size}px;\n flex-shrink: 0;\n background: ${(p) => p.$color};\n border-radius: 999px;\n`;\n\ninterface BetaTagProps {\n $bg: string;\n $color: string;\n $radius: number;\n}\n\nconst BetaTag = styled.span<BetaTagProps>`\n padding: 2px 6px;\n border-radius: ${(p) => p.$radius}px;\n background: ${(p) => p.$bg};\n color: ${(p) => p.$color};\n font-size: 11px;\n font-weight: 500;\n line-height: 14px;\n flex-shrink: 0;\n`;\n\ninterface ExternalIconBoxProps {\n $size: number;\n $color: string;\n}\n\nconst ExternalIconBox = styled.span<ExternalIconBoxProps>`\n display: flex;\n width: ${(p) => p.$size}px;\n height: ${(p) => p.$size}px;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n margin-left: auto;\n color: ${(p) => p.$color};\n`;\n\nexport interface SidebarMenuItemProps {\n to?: string;\n label: ReactNode;\n icon?: ReactNode;\n exact?: boolean;\n external?: boolean;\n hasExternalIcon?: boolean;\n target?: string | null;\n onClick?: SidebarLinkClickHandler;\n dataId?: string;\n isActive?: SidebarLinkActiveCheck;\n isPinned?: boolean;\n /** When provided, renders a pin/unpin toggle on hover (or always, when pinned). */\n onPinToggle?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n /** When true on a pinned item, the leading pin glyph swaps to a drag handle on row hover (reorder affordance). */\n dragHandle?: boolean;\n showBadge?: boolean;\n hasTooltip?: boolean;\n beta?: boolean;\n multiLine?: boolean;\n extra?: ReactNode;\n /** Whether this item is inside a SidebarMenuSub (parent collapsible sets nested styling) */\n isNested?: boolean;\n}\n\nexport const SidebarMenuItem: React.FC<SidebarMenuItemProps> = ({\n to,\n label,\n icon,\n exact,\n external,\n hasExternalIcon,\n target,\n onClick,\n dataId,\n isActive,\n isPinned,\n onPinToggle,\n dragHandle,\n showBadge,\n hasTooltip,\n beta,\n multiLine,\n extra,\n isNested = false,\n}) => {\n const { LinkComponent } = useSidebar();\n const { theme } = useResolvedTheme();\n const sizing = theme.sizing.sidebar();\n\n const shouldTruncate =\n Boolean(hasTooltip) &&\n typeof label === \"string\" &&\n label.length > TOOLTIP_TRUNCATE_LENGTH;\n\n const displayLabel: ReactNode = shouldTruncate ? (\n <Tooltip content={label as string} placement=\"right\" size=\"md\">\n <span>{`${(label as string).slice(0, TOOLTIP_TRUNCATE_LENGTH)}…`}</span>\n </Tooltip>\n ) : (\n label\n );\n\n return (\n <ItemWrapper\n $itemHeight={sizing.itemHeight}\n $iconSize={sizing.iconSize}\n $padding={sizing.padding}\n $radius={sizing.radius}\n $colorIdle={theme.colors.content.tertiary}\n $colorActive={theme.colors.content.primary}\n $hoverBg={theme.colors.overlay.mono}\n $activeBg={theme.colors.overlay.mono}\n $activeOutline={theme.colors.border.secondary}\n $focusOutline={theme.colors.border.brand}\n $focusOutlineWidth={sizing.focusOutlineWidth}\n $multiLine={multiLine}\n >\n <LinkComponent\n to={to}\n exact={exact}\n external={external}\n target={target}\n onClick={onClick}\n isActive={isActive}\n className={ITEM_BASE_CLASS}\n activeClassName={ITEM_ACTIVE_CLASS}\n dataId={dataId}\n >\n {!isNested &&\n (isPinned && dragHandle ? (\n <PinDragSlot $size={sizing.iconSize} data-drag-handle=\"true\">\n <PinDragLayer $size={sizing.iconSize} $hideOnHover>\n <Pin size={12} variant=\"solid\" />\n </PinDragLayer>\n <PinDragLayer $size={sizing.iconSize} $hideOnHover={false}>\n <Drag size={12} variant=\"line\" />\n </PinDragLayer>\n </PinDragSlot>\n ) : isPinned ? (\n <IconBox $size={sizing.iconSize}>\n <Pin size={12} variant=\"solid\" />\n </IconBox>\n ) : icon ? (\n <IconBox $size={sizing.iconSize}>{icon}</IconBox>\n ) : null)}\n {extra}\n <LabelBox>\n <Typography\n variant={isNested ? \"bodySm\" : \"bodySmAccent\"}\n color=\"inherit\"\n noWrap={!multiLine}\n >\n {displayLabel}\n </Typography>\n {showBadge && (\n <BadgeDot\n $size={sizing.itemBadgeSize}\n $color={theme.colors.background.alert.primary}\n />\n )}\n </LabelBox>\n {onPinToggle && (\n <Tooltip\n content={isPinned ? \"Unpin\" : \"Pin\"}\n placement=\"top\"\n size=\"sm\"\n >\n <PinButton\n type=\"button\"\n aria-label={isPinned ? \"Unpin item\" : \"Pin item\"}\n aria-pressed={Boolean(isPinned)}\n $size={sizing.iconSize}\n $color={theme.colors.content.tertiary}\n $hoverColor={theme.colors.content.primary}\n $activeColor={theme.colors.content.primary}\n $isPinned={Boolean(isPinned)}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n onPinToggle(e);\n }}\n >\n {isPinned ? (\n <Remove size={12} variant=\"line\" />\n ) : (\n <Pin size={12} variant=\"solid\" />\n )}\n </PinButton>\n </Tooltip>\n )}\n {beta && (\n <BetaTag\n $bg={theme.colors.overlay.mono}\n $color={theme.colors.content.tertiary}\n $radius={sizing.radius}\n >\n Beta\n </BetaTag>\n )}\n {external && hasExternalIcon && (\n <ExternalIconBox\n $size={sizing.externalIconSize}\n $color={theme.colors.content.secondary}\n >\n <OpenIn size={18} variant=\"line\" />\n </ExternalIconBox>\n )}\n </LinkComponent>\n </ItemWrapper>\n );\n};\n","/**\n * Shared classnames for the link rendered by user-supplied LinkComponent.\n * SidebarMenuItem applies these via the className/activeClassName props of\n * the consumer link. Parent containers (collapsible regions, nested rails)\n * scope their styles by descendant-targeting these classes inside a\n * styled-component, so the auto-generated parent class keeps them isolated.\n */\nexport const ITEM_BASE_CLASS = \"xui-sb-item\";\nexport const ITEM_ACTIVE_CLASS = \"xui-sb-item--active\";\n","import React, { type ReactNode, useEffect, useMemo, useRef } from \"react\";\nimport styled from \"styled-components\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport { Typography } from \"@xsolla/xui-typography\";\nimport { ChevronRight, ChevronUp } from \"@xsolla/xui-icons-base\";\nimport { useSidebar } from \"./SidebarContext\";\nimport { ITEM_BASE_CLASS, ITEM_ACTIVE_CLASS } from \"./constants\";\n\ninterface HeaderProps {\n $itemHeight: number;\n $padding: number;\n $radius: number;\n $color: string;\n $hoverBg: string;\n $focusOutline: string;\n $focusOutlineWidth: number;\n}\n\nconst HeaderButton = styled.button<HeaderProps>`\n display: flex;\n height: ${(p) => p.$itemHeight}px;\n width: 100%;\n box-sizing: border-box;\n align-items: center;\n gap: 8px;\n padding: 0 ${(p) => p.$padding}px;\n border: 0;\n border-radius: ${(p) => p.$radius}px;\n background: transparent;\n color: ${(p) => p.$color};\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n line-height: 18px;\n font-family: inherit;\n text-align: left;\n white-space: nowrap;\n overflow: hidden;\n transition:\n background-color 0.15s ease-in-out,\n color 0.15s ease-in-out;\n\n &:hover {\n background-color: ${(p) => p.$hoverBg};\n }\n\n &:focus-visible {\n outline: ${(p) => p.$focusOutlineWidth}px solid ${(p) => p.$focusOutline};\n outline-offset: -${(p) => p.$focusOutlineWidth}px;\n }\n`;\n\ninterface RegionProps {\n $expanded: boolean;\n $transition: string;\n $padding: number;\n $nestedPaddingLeft: number;\n $railLeft: number;\n $railColor: string;\n $colorActive: string;\n $activeBg: string;\n $activeOutline: string;\n}\n\n// Animated grid-template-rows trick (no fixed height needed). When expanded the\n// grid row goes 0fr → 1fr; the inner div has overflow:hidden so children clip.\n// Nested SidebarMenuItem links are styled here so they get the indent + rail.\nconst ExpandRegion = styled.div<RegionProps>`\n display: grid;\n grid-template-rows: ${(p) => (p.$expanded ? \"1fr\" : \"0fr\")};\n transition: ${(p) => p.$transition};\n\n & > div {\n overflow: hidden;\n }\n\n && .${ITEM_BASE_CLASS} {\n position: relative;\n padding: 0 ${(p) => p.$padding}px 0 ${(p) => p.$nestedPaddingLeft}px;\n font-weight: 400;\n\n &::before {\n content: \"\";\n position: absolute;\n left: ${(p) => p.$railLeft}px;\n top: 0;\n bottom: 0;\n width: 1px;\n background: ${(p) => p.$railColor};\n transform: translateX(-50%);\n }\n }\n\n && .${ITEM_ACTIVE_CLASS} {\n font-weight: 500;\n color: ${(p) => p.$colorActive};\n background-color: ${(p) => p.$activeBg};\n outline: 1px solid ${(p) => p.$activeOutline};\n outline-offset: -1px;\n }\n`;\n\ninterface IconBoxProps {\n $size: number;\n}\n\nconst IconBox = styled.div<IconBoxProps>`\n display: flex;\n width: ${(p) => p.$size}px;\n height: ${(p) => p.$size}px;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n color: inherit;\n\n svg {\n width: ${(p) => p.$size}px;\n height: ${(p) => p.$size}px;\n }\n`;\n\nconst LabelBox = styled.span`\n display: flex;\n flex: 1;\n gap: 4px;\n height: 20px;\n align-items: center;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\ninterface ChevronBoxProps {\n $size: number;\n}\n\nconst ChevronBox = styled.span<ChevronBoxProps>`\n display: flex;\n width: ${(p) => p.$size}px;\n height: ${(p) => p.$size}px;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n margin-left: auto;\n color: inherit;\n\n svg {\n width: ${(p) => p.$size}px;\n height: ${(p) => p.$size}px;\n }\n`;\n\nexport interface SidebarMenuCollapsibleProps {\n icon?: ReactNode;\n label: ReactNode;\n dataId?: string;\n /** Route prefixes that should auto-expand this collapsible */\n matchPaths?: string[];\n children: ReactNode;\n}\n\nconst computeRouteMatch = (pathname: string, matchPaths: string[]): boolean => {\n if (matchPaths.length === 0) {\n return false;\n }\n const pathWithoutMerchant = pathname.replace(/^\\/\\d+/, \"\");\n return matchPaths.some((p) => {\n if (p === \"/\") return pathWithoutMerchant === \"/\";\n return pathWithoutMerchant === p || pathWithoutMerchant.startsWith(`${p}/`);\n });\n};\n\nexport const SidebarMenuCollapsible: React.FC<SidebarMenuCollapsibleProps> = ({\n icon,\n label,\n dataId,\n matchPaths = [],\n children,\n}) => {\n const { pathname, expandedId, onExpandedIdChange } = useSidebar();\n const { theme } = useResolvedTheme();\n const sizing = theme.sizing.sidebar();\n\n // Stable id created once per instance; safe under React 16 (no useId).\n const idRef = useRef<string>();\n if (!idRef.current) {\n idRef.current =\n dataId || `sb-collapsible-${Math.random().toString(36).slice(2, 10)}`;\n }\n const collapsibleId = idRef.current;\n const contentId = `sidebar-collapsible-${collapsibleId}`;\n\n const matchKey = matchPaths.join(\"|\");\n const isRouteMatch = useMemo(\n () => computeRouteMatch(pathname, matchPaths),\n [pathname, matchKey, matchPaths]\n );\n\n const prevMatchRef = useRef<boolean>(isRouteMatch);\n\n useEffect(() => {\n if (prevMatchRef.current !== isRouteMatch) {\n prevMatchRef.current = isRouteMatch;\n if (isRouteMatch) {\n onExpandedIdChange(collapsibleId);\n }\n }\n }, [isRouteMatch, collapsibleId, onExpandedIdChange]);\n\n const mountRef = useRef(true);\n useEffect(() => {\n if (mountRef.current && isRouteMatch) {\n onExpandedIdChange(collapsibleId);\n mountRef.current = false;\n }\n }, [isRouteMatch, collapsibleId, onExpandedIdChange]);\n\n const isExpanded = expandedId === collapsibleId;\n\n const handleToggle = () => {\n onExpandedIdChange(isExpanded ? null : collapsibleId);\n };\n\n return (\n <>\n <HeaderButton\n type=\"button\"\n onClick={handleToggle}\n data-id={dataId}\n aria-expanded={isExpanded}\n aria-controls={contentId}\n $itemHeight={sizing.itemHeight}\n $padding={sizing.padding}\n $radius={sizing.radius}\n $color={theme.colors.content.tertiary}\n $hoverBg={theme.colors.control.mono.secondary.bgHover}\n $focusOutline={theme.colors.border.brand}\n $focusOutlineWidth={sizing.focusOutlineWidth}\n >\n {icon && <IconBox $size={sizing.iconSize}>{icon}</IconBox>}\n <LabelBox>\n <Typography variant=\"bodySmAccent\" color=\"inherit\" noWrap>\n {label}\n </Typography>\n </LabelBox>\n <ChevronBox $size={sizing.chevronSize}>\n {isExpanded ? (\n <ChevronUp size={14} variant=\"solid\" />\n ) : (\n <ChevronRight size={14} variant=\"solid\" />\n )}\n </ChevronBox>\n </HeaderButton>\n <ExpandRegion\n id={contentId}\n role=\"region\"\n $expanded={isExpanded}\n $transition={sizing.transitionRows}\n $padding={sizing.padding}\n $nestedPaddingLeft={sizing.nestedItemPaddingLeft}\n $railLeft={sizing.nestedItemRailLeft}\n $railColor={theme.colors.border.secondary}\n $colorActive={theme.colors.content.primary}\n $activeBg={theme.colors.overlay.mono}\n $activeOutline={theme.colors.border.secondary}\n >\n <div>{children}</div>\n </ExpandRegion>\n </>\n );\n};\n","import React, { type ReactNode } from \"react\";\n\n/**\n * Container for nested menu items inside a SidebarMenuCollapsible.\n * Child SidebarMenuItems automatically get nested styling via the parent\n * SidebarMenuCollapsible's CSS cascade (vertical rail + indent).\n */\nexport const SidebarMenuSub: React.FC<{ children: ReactNode }> = ({\n children,\n}) => <>{children}</>;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport { Typography } from \"@xsolla/xui-typography\";\nimport { ChatTwoMessages } from \"@xsolla/xui-icons-base\";\n\ninterface ChatProps {\n $height: number;\n $padding: number;\n $radius: number;\n $bg: string;\n $border: string;\n $color: string;\n $focusOutline: string;\n $focusOutlineWidth: number;\n}\n\nconst ChatButton = styled.button<ChatProps>`\n display: flex;\n height: ${(p) => p.$height}px;\n align-items: center;\n gap: 8px;\n padding: 0 ${(p) => p.$padding}px;\n border: 1px solid ${(p) => p.$border};\n border-radius: ${(p) => p.$radius}px;\n background: ${(p) => p.$bg};\n color: ${(p) => p.$color};\n cursor: pointer;\n font: inherit;\n position: relative;\n\n &:hover {\n opacity: 0.9;\n }\n\n &:focus-visible {\n outline: ${(p) => p.$focusOutlineWidth}px solid ${(p) => p.$focusOutline};\n outline-offset: 2px;\n }\n\n svg {\n width: 16px;\n height: 16px;\n }\n`;\n\ninterface BadgeProps {\n $size: number;\n $color: string;\n}\n\nconst Badge = styled.span<BadgeProps>`\n position: absolute;\n top: -2px;\n right: -2px;\n width: ${(p) => p.$size}px;\n height: ${(p) => p.$size}px;\n background: ${(p) => p.$color};\n border-radius: 999px;\n`;\n\ninterface SidebarChatButtonProps {\n onClick?: () => void;\n badge?: boolean;\n}\n\nexport const SidebarChatButton: React.FC<SidebarChatButtonProps> = ({\n onClick,\n badge,\n}) => {\n const { theme } = useResolvedTheme();\n const sizing = theme.sizing.sidebar();\n\n return (\n <ChatButton\n onClick={onClick}\n type=\"button\"\n $height={sizing.itemHeight}\n $padding={sizing.padding}\n $radius={sizing.radius}\n $bg={theme.colors.control.brand.primary.bg}\n $border={theme.colors.control.brand.primary.border}\n $color={theme.colors.content.static.dark}\n $focusOutline={theme.colors.border.brand}\n $focusOutlineWidth={sizing.focusOutlineWidth}\n >\n <ChatTwoMessages size={16} variant=\"line\" />\n <Typography variant=\"bodySmAccent\" color=\"inherit\">\n Chat\n </Typography>\n {badge && (\n <Badge\n $size={sizing.chatBadgeSize}\n $color={theme.colors.background.alert.primary}\n />\n )}\n </ChatButton>\n );\n};\n","import React, { type ReactNode, useState } from \"react\";\nimport { Pin } from \"@xsolla/xui-icons-base\";\nimport { SidebarMenuItem } from \"./SidebarMenuItem\";\nimport type { SidebarItemType } from \"./types\";\n\nexport interface SidebarPinnedItem {\n key: string;\n to: string;\n label: ReactNode;\n exact?: boolean;\n}\n\nexport interface SidebarPinnedListProps {\n /** Ordered list of currently-pinned items. */\n items: SidebarPinnedItem[];\n /** Called when the user clicks the × on a pinned shortcut. */\n onUnpin: (key: string) => void;\n /**\n * Called as the user drags to reorder. Omit to disable drag-and-drop —\n * the leading icon stays as the static pin glyph.\n */\n onReorder?: (fromKey: string, toKey: string) => void;\n /** Render 8px top/bottom spacers when items are present. Default true. */\n spacers?: boolean;\n}\n\n/**\n * Renders the pinned shortcuts list with pointer-event-based drag-and-drop\n * reorder. Drag only initiates from the leading drag-handle area on each row.\n *\n * Pinning is fully opt-in: consumers who don't render this component get no\n * pin UI. Consumers without a reorder backend can omit `onReorder`; the list\n * stays static but unpinning still works.\n */\nexport const SidebarPinnedList: React.FC<SidebarPinnedListProps> = ({\n items,\n onUnpin,\n onReorder,\n spacers = true,\n}) => {\n const [dragKey, setDragKey] = useState<string | null>(null);\n const canReorder = Boolean(onReorder) && items.length > 1;\n\n if (items.length === 0) return null;\n\n return (\n <>\n {spacers && <div style={{ height: 8 }} />}\n {items.map((item) => (\n <div\n key={item.key}\n data-pinned-key={item.key}\n onPointerDown={(e) => {\n if (!canReorder) return;\n const t = e.target as HTMLElement;\n if (!t.closest('[data-drag-handle=\"true\"]')) return;\n e.preventDefault();\n setDragKey(item.key);\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n }}\n onPointerMove={(e) => {\n if (dragKey !== item.key) return;\n const elt = document.elementFromPoint(\n e.clientX,\n e.clientY\n ) as HTMLElement | null;\n const row = elt?.closest(\"[data-pinned-key]\") as HTMLElement | null;\n const overKey = row?.getAttribute(\"data-pinned-key\");\n if (overKey && overKey !== dragKey) {\n onReorder?.(dragKey, overKey);\n }\n }}\n onPointerUp={(e) => {\n if (dragKey === item.key) {\n (e.currentTarget as HTMLElement).releasePointerCapture(\n e.pointerId\n );\n setDragKey(null);\n }\n }}\n onPointerCancel={() => {\n if (dragKey === item.key) setDragKey(null);\n }}\n style={{\n opacity: dragKey === item.key ? 0.4 : 1,\n transition: \"opacity 0.15s ease-in-out\",\n touchAction: canReorder ? \"none\" : undefined,\n }}\n >\n <SidebarMenuItem\n to={item.to}\n label={item.label}\n exact={item.exact}\n isPinned\n dragHandle={canReorder}\n onPinToggle={() => onUnpin(item.key)}\n />\n </div>\n ))}\n {spacers && <div style={{ height: 8 }} />}\n </>\n );\n};\n\n/**\n * Helper for the collapsed sidebar: returns a single `SidebarItemType` whose\n * popover lists every pinned shortcut. Spread it into `collapsedItems` at the\n * position you want the Pin button to appear. Returns `null` when no items.\n */\nexport const getPinnedCollapsedItem = (\n items: SidebarPinnedItem[],\n options: { label?: string; dataId?: string } = {}\n): SidebarItemType | null => {\n if (items.length === 0) return null;\n return {\n label: options.label ?? \"Pinned\",\n icon: <Pin size={18} variant=\"solid\" />,\n dataId: options.dataId ?? \"sidebar-collapsed-pinned\",\n children: items.map((i) => ({\n to: i.to,\n label: i.label,\n exact: i.exact,\n })),\n };\n};\n"],"mappings":"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","names":["import_styled_components","import_xui_core","import_react","import_jsx_runtime","import_jsx_runtime","styled","import_jsx_runtime","Outer","styled","import_styled_components","import_xui_core","import_jsx_runtime","styled","import_jsx_runtime","import_xui_core","import_jsx_runtime","import_styled_components","import_xui_core","import_jsx_runtime","styled","import_xui_core","import_xui_typography","import_jsx_runtime","import_jsx_runtime","import_styled_components","import_xui_core","import_xui_typography","import_xui_icons_base","import_jsx_runtime","styled","import_react","import_styled_components","import_xui_core","import_xui_typography","import_xui_icons_base","import_jsx_runtime","styled","IconBox","LabelBox","import_jsx_runtime","import_styled_components","import_xui_core","import_xui_typography","import_xui_icons_base","import_jsx_runtime","styled","import_react","import_xui_icons_base","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.tsx","../../src/Sidebar.tsx","../../src/SidebarContext.tsx","../../src/SidebarCollapsed.tsx","../../src/HideSidebarIcon.tsx","../../src/SidebarContent.tsx","../../../../foundation/primitives-native/src/Box.tsx","../../src/SidebarFooter.tsx","../../src/SidebarTrigger.tsx","../../src/SidebarGroup.tsx","../../src/SidebarMenu.tsx","../../src/SidebarMenuItem.tsx","../../src/constants.ts","../../src/SidebarMenuCollapsible.tsx","../../src/SidebarMenuSub.tsx","../../src/SidebarChatButton.tsx","../../src/SidebarPinnedList.tsx"],"sourcesContent":["/**\n * @xsolla/xui-b2b-sidebar — Composable sidebar component following Shadcn/Radix patterns.\n */\n\n// Core\nexport { Sidebar } from \"./Sidebar\";\nexport { SidebarProvider, useSidebar } from \"./SidebarContext\";\n\n// Layout\nexport { SidebarContent } from \"./SidebarContent\";\nexport { SidebarFooter } from \"./SidebarFooter\";\nexport { SidebarTrigger } from \"./SidebarTrigger\";\n\n// Navigation\nexport { SidebarGroup } from \"./SidebarGroup\";\nexport { SidebarMenu } from \"./SidebarMenu\";\nexport { SidebarMenuItem } from \"./SidebarMenuItem\";\nexport { SidebarMenuCollapsible } from \"./SidebarMenuCollapsible\";\nexport { SidebarMenuSub } from \"./SidebarMenuSub\";\n\n// Utilities\nexport { SidebarChatButton } from \"./SidebarChatButton\";\nexport { SidebarCollapsed } from \"./SidebarCollapsed\";\nexport { SidebarPinnedList, getPinnedCollapsedItem } from \"./SidebarPinnedList\";\n\n// Types\nexport type { SidebarItemType } from \"./types\";\nexport type {\n SidebarLinkProps,\n SidebarLinkActiveCheck,\n SidebarLinkClickHandler,\n SidebarProviderProps,\n} from \"./SidebarContext\";\nexport type { SidebarProps } from \"./Sidebar\";\nexport type { SidebarMenuItemProps } from \"./SidebarMenuItem\";\nexport type { SidebarMenuCollapsibleProps } from \"./SidebarMenuCollapsible\";\nexport type { SidebarCollapsedProps } from \"./SidebarCollapsed\";\nexport type {\n SidebarPinnedItem,\n SidebarPinnedListProps,\n} from \"./SidebarPinnedList\";\n","/**\n * Sidebar — Composable compound component following Shadcn/Radix patterns.\n *\n * Usage:\n * <SidebarProvider collapsed={false} onCollapsedChange={fn} pathname={path} linkComponent={Link}>\n * <Sidebar>\n * <SidebarContent>\n * <SidebarGroup label=\"Main\">\n * <SidebarMenu>\n * <SidebarMenuItem to=\"/dashboard\" icon={<Icon />} label=\"Dashboard\" />\n * <SidebarMenuCollapsible icon={<Icon />} label=\"Finance\" matchPaths={['/finance']}>\n * <SidebarMenuSub>\n * <SidebarMenuItem to=\"/finance/payouts\" label=\"Payouts\" isNested />\n * </SidebarMenuSub>\n * </SidebarMenuCollapsible>\n * </SidebarMenu>\n * </SidebarGroup>\n * </SidebarContent>\n * <SidebarFooter>\n * <SidebarTrigger />\n * </SidebarFooter>\n * </Sidebar>\n * </SidebarProvider>\n */\nimport React, { type ReactNode } from \"react\";\nimport type { SidebarItemType } from \"./types\";\nimport styled from \"styled-components\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport { useSidebar } from \"./SidebarContext\";\nimport { SidebarCollapsed } from \"./SidebarCollapsed\";\n\ninterface OuterProps {\n $expanded: number;\n $collapsed: number;\n $width: number;\n $radius: number;\n $bg: string;\n $transition: string;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\nconst Outer = styled.div<OuterProps>`\n width: ${(p) => p.$width}px;\n height: 100%;\n max-height: 100%;\n flex-shrink: 0;\n position: relative;\n overflow: hidden;\n border-radius: ${(p) => p.$radius}px;\n background: ${(p) => p.$bg};\n transition: width ${(p) => p.$transition};\n\n a {\n text-decoration: none;\n }\n`;\n\ninterface PaneProps {\n $width: number;\n $hidden: boolean;\n $fadeIn: string;\n $fadeOut: string;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\nconst ExpandedPane = styled.div<PaneProps>`\n position: absolute;\n top: 0;\n left: 0;\n width: ${(p) => p.$width}px;\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n opacity: ${(p) => (p.$hidden ? 0 : 1)};\n pointer-events: ${(p) => (p.$hidden ? \"none\" : \"auto\")};\n transition: ${(p) => (p.$hidden ? p.$fadeOut : p.$fadeIn)};\n`;\n\nconst CollapsedPane = styled.div<PaneProps>`\n position: absolute;\n top: 0;\n left: 0;\n width: ${(p) => p.$width}px;\n height: 100%;\n opacity: ${(p) => (p.$hidden ? 0 : 1)};\n pointer-events: ${(p) => (p.$hidden ? \"none\" : \"auto\")};\n transition: ${(p) => (p.$hidden ? p.$fadeOut : p.$fadeIn)};\n\n & > div {\n background: transparent;\n border-radius: 0;\n }\n`;\n\nexport interface SidebarProps {\n /** Items for the collapsed icon strip (since collapsed layout is fundamentally different) */\n collapsedItems?: SidebarItemType[];\n /** Tool items shown below a spacer in collapsed mode */\n collapsedToolItems?: SidebarItemType[];\n /** Bottom items in collapsed mode (e.g. Billing, Settings) */\n collapsedBottomItems?: SidebarItemType[];\n /** Whether to render the chat button in collapsed mode (defaults to true) */\n showChat?: boolean;\n /** Click handler for the chat button (collapsed mode) */\n onChatClick?: () => void;\n /** Whether the chat button shows a notification badge */\n chatBadge?: boolean;\n children: ReactNode;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\nexport const Sidebar: React.FC<SidebarProps> = ({\n collapsedItems = [],\n collapsedToolItems = [],\n collapsedBottomItems = [],\n showChat = true,\n onChatClick,\n chatBadge = false,\n children,\n}) => {\n const { collapsed, onCollapsedChange } = useSidebar();\n const { theme } = useResolvedTheme();\n const sizing = theme.sizing.sidebar();\n\n return (\n <Outer\n role=\"navigation\"\n aria-label=\"Sidebar navigation\"\n $expanded={sizing.widthExpanded}\n $collapsed={sizing.widthCollapsed}\n $width={collapsed ? sizing.widthCollapsed : sizing.widthExpanded}\n $radius={sizing.radius}\n $bg={theme.colors.background.secondary}\n $transition={sizing.transitionWidth}\n >\n <ExpandedPane\n aria-hidden={collapsed}\n $width={sizing.widthExpanded}\n $hidden={collapsed}\n $fadeIn={sizing.transitionFadeIn}\n $fadeOut={sizing.transitionFadeOut}\n >\n {children}\n </ExpandedPane>\n\n <CollapsedPane\n aria-hidden={!collapsed}\n $width={sizing.widthCollapsed}\n $hidden={!collapsed}\n $fadeIn={sizing.transitionFadeIn}\n $fadeOut={sizing.transitionFadeOut}\n >\n <SidebarCollapsed\n items={collapsedItems}\n toolItems={collapsedToolItems}\n bottomItems={collapsedBottomItems}\n onToggleCollapse={() => onCollapsedChange(!collapsed)}\n showChat={showChat}\n onChatClick={onChatClick}\n chatBadge={chatBadge}\n />\n </CollapsedPane>\n </Outer>\n );\n};\n","import React, {\n type ReactNode,\n type MouseEvent,\n createContext,\n useContext,\n useMemo,\n useState,\n useCallback,\n} from \"react\";\n\nexport type SidebarLinkClickHandler = (event?: MouseEvent<HTMLElement>) => void;\n\nexport type SidebarLinkActiveCheck = (\n match: unknown,\n location: { pathname: string; search?: string; hash?: string }\n) => boolean;\n\nexport interface SidebarLinkProps {\n to?: string;\n exact?: boolean;\n external?: boolean;\n target?: string | null;\n className?: string;\n activeClassName?: string;\n isActive?: SidebarLinkActiveCheck;\n onClick?: SidebarLinkClickHandler;\n dataId?: string;\n \"aria-label\"?: string;\n children: ReactNode;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\ninterface SidebarContextValue {\n collapsed: boolean;\n onCollapsedChange: (collapsed: boolean) => void;\n pathname: string;\n LinkComponent: React.ComponentType<SidebarLinkProps>;\n expandedId: string | null;\n onExpandedIdChange: (id: string | null) => void;\n}\n\nconst DefaultLink: React.FC<SidebarLinkProps> = ({\n to,\n external,\n target,\n className,\n children,\n dataId,\n testID,\n onClick,\n \"aria-label\": ariaLabel,\n}) => (\n <a\n href={to}\n className={className}\n target={external ? (target ?? \"_blank\") : (target ?? undefined)}\n rel={external ? \"noopener noreferrer\" : undefined}\n data-id={dataId}\n data-testid={testID}\n aria-label={ariaLabel}\n onClick={onClick}\n >\n {children}\n </a>\n);\n\nconst SidebarContext = createContext<SidebarContextValue>({\n collapsed: false,\n onCollapsedChange: () => {},\n pathname: \"\",\n LinkComponent: DefaultLink,\n expandedId: null,\n onExpandedIdChange: () => {},\n});\n\nexport interface SidebarProviderProps {\n collapsed?: boolean;\n onCollapsedChange?: (collapsed: boolean) => void;\n pathname?: string;\n linkComponent?: React.ComponentType<SidebarLinkProps>;\n children: ReactNode;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\nexport const SidebarProvider: React.FC<SidebarProviderProps> = ({\n collapsed: collapsedProp,\n onCollapsedChange,\n pathname = \"\",\n linkComponent,\n children,\n}) => {\n const [internalCollapsed, setInternalCollapsed] = useState(false);\n const [expandedId, setExpandedId] = useState<string | null>(null);\n\n const collapsed = collapsedProp ?? internalCollapsed;\n\n const handleCollapsedChange = useCallback(\n (next: boolean) => {\n if (collapsedProp === undefined) setInternalCollapsed(next);\n onCollapsedChange?.(next);\n },\n [collapsedProp, onCollapsedChange]\n );\n\n const onExpandedIdChange = useCallback((id: string | null) => {\n setExpandedId(id);\n }, []);\n\n const value = useMemo<SidebarContextValue>(\n () => ({\n collapsed,\n onCollapsedChange: handleCollapsedChange,\n pathname,\n LinkComponent: linkComponent || DefaultLink,\n expandedId,\n onExpandedIdChange,\n }),\n [\n collapsed,\n handleCollapsedChange,\n pathname,\n linkComponent,\n expandedId,\n onExpandedIdChange,\n ]\n );\n\n return (\n <SidebarContext.Provider value={value}>{children}</SidebarContext.Provider>\n );\n};\n\nexport const useSidebar = () => useContext(SidebarContext);\n","import type { SidebarItemType } from \"./types\";\n\nimport React, {\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport styled from \"styled-components\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport { Typography } from \"@xsolla/xui-typography\";\nimport { ChatTwoMessages } from \"@xsolla/xui-icons-base\";\nimport { useSidebar } from \"./SidebarContext\";\nimport { HideSidebarIcon } from \"./HideSidebarIcon\";\n\nconst POPOVER_GAP_PX = 12;\nconst POPOVER_VIEWPORT_PADDING_PX = 8;\nconst POPOVER_CLOSE_DELAY_MS = 150;\nconst POPOVER_ITEM_BASE_CLASS = \"xui-sb-popover-item\";\nconst POPOVER_ITEM_ACTIVE_CLASS = \"xui-sb-popover-item--active\";\n\ninterface OuterProps {\n $width: number;\n $radius: number;\n $bg: string;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\nconst Outer = styled.div<OuterProps>`\n display: flex;\n width: ${(p) => p.$width}px;\n height: 100%;\n max-height: 100%;\n box-sizing: border-box;\n flex-direction: column;\n flex-shrink: 0;\n overflow: hidden;\n background: ${(p) => p.$bg};\n border-radius: ${(p) => p.$radius}px;\n\n a {\n text-decoration: none;\n }\n`;\n\ninterface MainProps {\n $padding: number;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\nconst MainScroll = styled.div<MainProps>`\n display: flex;\n flex: 1;\n flex-direction: column;\n align-items: center;\n padding: ${(p) => p.$padding}px 0;\n min-height: 0;\n overflow-y: auto;\n\n &::-webkit-scrollbar {\n width: 0;\n }\n`;\n\ninterface IconButtonStyledProps {\n $size: number;\n $radius: number;\n $iconSize: number;\n $color: string;\n $hoverBg: string;\n $hoverColor: string;\n $activeBg: string;\n $activeOutline: string;\n $focusOutline: string;\n $focusOutlineWidth: number;\n $active?: boolean;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\nconst IconBtn = styled.button<IconButtonStyledProps>`\n display: flex;\n width: ${(p) => p.$size}px;\n height: ${(p) => p.$size}px;\n align-items: center;\n justify-content: center;\n border: 0;\n border-radius: ${(p) => p.$radius}px;\n background: ${(p) => (p.$active ? p.$hoverBg : \"transparent\")};\n color: ${(p) => (p.$active ? p.$hoverColor : p.$color)};\n cursor: pointer;\n padding: 0;\n font: inherit;\n transition:\n background-color 0.15s ease-in-out,\n color 0.15s ease-in-out;\n\n ${(p) =>\n p.$active &&\n `\n background-color: ${p.$activeBg};\n outline: 1px solid ${p.$activeOutline};\n outline-offset: -1px;\n `}\n\n &:hover {\n background-color: ${(p) => p.$hoverBg};\n color: ${(p) => p.$hoverColor};\n }\n\n &:focus-visible {\n outline: ${(p) => p.$focusOutlineWidth}px solid ${(p) => p.$focusOutline};\n outline-offset: -${(p) => p.$focusOutlineWidth}px;\n }\n\n & > span {\n display: flex;\n width: ${(p) => p.$iconSize}px;\n height: ${(p) => p.$iconSize}px;\n align-items: center;\n justify-content: center;\n\n svg {\n width: ${(p) => p.$iconSize}px;\n height: ${(p) => p.$iconSize}px;\n }\n }\n`;\n\nconst Spacer = styled.div`\n height: 16px;\n flex-shrink: 0;\n`;\n\ninterface FooterProps {\n $padding: number;\n $borderColor: string;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\nconst FixedBottom = styled.div<FooterProps>`\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: ${(p) => p.$padding}px 0;\n flex-shrink: 0;\n`;\n\nconst Footer = styled.div<FooterProps>`\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n padding: ${(p) => p.$padding}px 0;\n border-top: 1px solid ${(p) => p.$borderColor};\n flex-shrink: 0;\n`;\n\ninterface ChatBtnProps {\n $size: number;\n $radius: number;\n $bg: string;\n $border: string;\n $color: string;\n $focusOutline: string;\n $focusOutlineWidth: number;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\nconst CollapsedChat = styled.button<ChatBtnProps>`\n display: flex;\n width: ${(p) => p.$size}px;\n height: ${(p) => p.$size}px;\n align-items: center;\n justify-content: center;\n border: 1px solid ${(p) => p.$border};\n border-radius: ${(p) => p.$radius}px;\n background: ${(p) => p.$bg};\n color: ${(p) => p.$color};\n cursor: pointer;\n position: relative;\n padding: 0;\n font: inherit;\n\n &:hover {\n opacity: 0.9;\n }\n\n &:focus-visible {\n outline: ${(p) => p.$focusOutlineWidth}px solid ${(p) => p.$focusOutline};\n outline-offset: 2px;\n }\n\n svg {\n width: 16px;\n height: 16px;\n }\n`;\n\ninterface CollapsedToggleProps {\n $size: number;\n $radius: number;\n $iconSize: number;\n $borderColor: string;\n $hoverBg: string;\n $color: string;\n $focusOutline: string;\n $focusOutlineWidth: number;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\nconst CollapsedToggle = styled.button<CollapsedToggleProps>`\n display: flex;\n width: ${(p) => p.$size}px;\n height: ${(p) => p.$size}px;\n align-items: center;\n justify-content: center;\n border: 1px solid ${(p) => p.$borderColor};\n border-radius: ${(p) => p.$radius}px;\n background: transparent;\n cursor: pointer;\n color: ${(p) => p.$color};\n padding: 0;\n font: inherit;\n\n &:hover {\n background: ${(p) => p.$hoverBg};\n }\n\n &:focus-visible {\n outline: ${(p) => p.$focusOutlineWidth}px solid ${(p) => p.$focusOutline};\n outline-offset: 2px;\n }\n\n svg {\n width: ${(p) => p.$iconSize}px;\n height: ${(p) => p.$iconSize}px;\n }\n`;\n\ninterface BadgeProps {\n $size: number;\n $color: string;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\nconst ChatBadge = styled.span<BadgeProps>`\n position: absolute;\n top: -2px;\n right: -2px;\n width: ${(p) => p.$size}px;\n height: ${(p) => p.$size}px;\n background: ${(p) => p.$color};\n border-radius: 999px;\n`;\n\ninterface PopoverContainerProps {\n $minWidth: number;\n $maxWidth: number;\n $zIndex: number;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\nconst PopoverContainer = styled.div<PopoverContainerProps>`\n position: fixed;\n z-index: ${(p) => p.$zIndex};\n min-width: ${(p) => p.$minWidth}px;\n max-width: ${(p) => p.$maxWidth}px;\n`;\n\ninterface PopoverInnerProps {\n $itemHeight: number;\n $padding: number;\n $radius: number;\n $bg: string;\n $shadow: string;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\nconst PopoverInner = styled.div<PopoverInnerProps>`\n min-height: ${(p) => p.$itemHeight}px;\n padding: ${(p) => p.$padding}px;\n background: ${(p) => p.$bg};\n border-radius: ${(p) => p.$radius}px;\n display: flex;\n flex-direction: column;\n gap: 6px;\n box-shadow: ${(p) => p.$shadow};\n`;\n\nconst PopoverTitle = styled.div<{ $padding: number }>`\n display: flex;\n height: 20px;\n align-items: center;\n padding: 0 ${(p) => p.$padding}px;\n overflow: hidden;\n`;\n\nconst PopoverDivider = styled.div<{ $color: string }>`\n height: 1px;\n align-self: stretch;\n background: ${(p) => p.$color};\n`;\n\ninterface PopoverItemsProps {\n $itemHeight: number;\n $padding: number;\n $radius: number;\n $colorIdle: string;\n $colorActive: string;\n $hoverBg: string;\n $activeBg: string;\n $activeOutline: string;\n $focusOutline: string;\n $focusOutlineWidth: number;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\nconst PopoverItems = styled.div<PopoverItemsProps>`\n display: flex;\n flex-direction: column;\n\n & > .${POPOVER_ITEM_BASE_CLASS} {\n display: flex;\n max-height: ${(p) => p.$itemHeight}px;\n align-items: center;\n padding: 12px ${(p) => p.$padding}px;\n border-radius: ${(p) => p.$radius}px;\n color: ${(p) => p.$colorIdle};\n font-weight: 400;\n cursor: pointer;\n transition: background-color 0.15s ease-in-out;\n text-decoration: none;\n }\n\n & > .${POPOVER_ITEM_BASE_CLASS}:hover {\n background-color: ${(p) => p.$hoverBg};\n }\n\n & > .${POPOVER_ITEM_BASE_CLASS}:focus-visible {\n outline: ${(p) => p.$focusOutlineWidth}px solid ${(p) => p.$focusOutline};\n outline-offset: -${(p) => p.$focusOutlineWidth}px;\n }\n\n & > .${POPOVER_ITEM_ACTIVE_CLASS} {\n background-color: ${(p) => p.$activeBg};\n color: ${(p) => p.$colorActive};\n outline: 1px solid ${(p) => p.$activeOutline};\n outline-offset: -1px;\n font-weight: 500;\n }\n`;\n\ninterface SinglePopoverProps {\n $padding: number;\n $itemHeight: number;\n $radius: number;\n $bg: string;\n $shadow: string;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\nconst SinglePopoverPanel = styled.div<SinglePopoverProps>`\n padding: 4px;\n background: ${(p) => p.$bg};\n border-radius: ${(p) => p.$radius}px;\n display: inline-flex;\n flex-direction: column;\n box-shadow: ${(p) => p.$shadow};\n`;\n\ninterface SingleLinkProps {\n $itemHeight: number;\n $padding: number;\n $radius: number;\n $color: string;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\n// styled.span here so the consumer's LinkComponent (rendered inside) inherits\n// these styles via cascade — keeps the DOM single-element while letting us\n// scope styles. We use display:contents on the wrapper so it behaves as if\n// the link were a direct child of the popover panel.\nconst SingleLinkWrap = styled.div<SingleLinkProps>`\n display: contents;\n\n & > a,\n & > * {\n display: inline-flex;\n max-height: ${(p) => p.$itemHeight}px;\n align-items: center;\n padding: 0 ${(p) => p.$padding}px;\n border-radius: ${(p) => p.$radius}px;\n color: ${(p) => p.$color};\n cursor: pointer;\n font-size: 14px;\n font-weight: 400;\n line-height: 18px;\n white-space: nowrap;\n text-decoration: none;\n }\n`;\n\n// Wrapper for leaf collapsed items — sizes the container and forwards\n// IconBtn-equivalent styles down to the child LinkComponent (rendered as <a>).\nconst CollapsedIconLinkWrap = styled.div<IconButtonStyledProps>`\n width: ${(p) => p.$size}px;\n height: ${(p) => p.$size}px;\n flex-shrink: 0;\n\n & > a,\n & > * {\n display: flex;\n width: 100%;\n height: 100%;\n align-items: center;\n justify-content: center;\n border: 0;\n border-radius: ${(p) => p.$radius}px;\n background: ${(p) => (p.$active ? p.$activeBg : \"transparent\")};\n color: ${(p) => (p.$active ? p.$hoverColor : p.$color)};\n cursor: pointer;\n padding: 0;\n font: inherit;\n text-decoration: none;\n transition:\n background-color 0.15s ease-in-out,\n color 0.15s ease-in-out;\n\n ${(p) =>\n p.$active &&\n `\n outline: 1px solid ${p.$activeOutline};\n outline-offset: -1px;\n `}\n }\n\n & > a:hover,\n & > *:hover {\n background-color: ${(p) => p.$hoverBg};\n color: ${(p) => p.$hoverColor};\n }\n\n & > a:focus-visible,\n & > *:focus-visible {\n outline: ${(p) => p.$focusOutlineWidth}px solid ${(p) => p.$focusOutline};\n outline-offset: -${(p) => p.$focusOutlineWidth}px;\n }\n\n & > a > span,\n & > * > span {\n display: flex;\n width: ${(p) => p.$iconSize}px;\n height: ${(p) => p.$iconSize}px;\n align-items: center;\n justify-content: center;\n\n svg {\n width: ${(p) => p.$iconSize}px;\n height: ${(p) => p.$iconSize}px;\n }\n }\n`;\n\ninterface CollapsedIconItemProps {\n item: SidebarItemType;\n onPopoverOpen: (item: SidebarItemType, rect: DOMRect) => void;\n onPopoverClose: () => void;\n pathname?: string;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\nconst isChildActive = (item: SidebarItemType, pathname?: string): boolean => {\n if (!item.children || !pathname) {\n return false;\n }\n const pathWithoutMerchant = pathname.replace(/^\\/\\d+/, \"\");\n return item.children.some((child) => {\n if (typeof child.to !== \"string\") {\n return false;\n }\n return child.exact\n ? pathWithoutMerchant === child.to\n : pathWithoutMerchant === child.to ||\n pathWithoutMerchant.startsWith(`${child.to}/`);\n });\n};\n\nconst CollapsedIconItem: React.FC<\n CollapsedIconItemProps & {\n sizing: ReturnType<\n ReturnType<typeof useResolvedTheme>[\"theme\"][\"sizing\"][\"sidebar\"]\n >;\n colors: ReturnType<typeof useResolvedTheme>[\"theme\"][\"colors\"];\n }\n> = ({ item, onPopoverOpen, onPopoverClose, pathname, sizing, colors }) => {\n const ref = useRef<HTMLElement | null>(null);\n const { LinkComponent } = useSidebar();\n const hasChildren = Boolean(item.children && item.children.length > 0);\n const isActive = hasChildren && isChildActive(item, pathname);\n\n const openPopover = useCallback(() => {\n if (ref.current) {\n onPopoverOpen(item, ref.current.getBoundingClientRect());\n }\n }, [item, onPopoverOpen]);\n\n const isSimpleActive =\n !hasChildren &&\n (() => {\n if (!item.to || !pathname) {\n return false;\n }\n const pathWithoutMerchant = pathname.replace(/^\\/\\d+/, \"\");\n return item.exact\n ? pathWithoutMerchant === item.to\n : pathWithoutMerchant === item.to ||\n pathWithoutMerchant.startsWith(`${item.to}/`);\n })();\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n openPopover();\n } else if (e.key === \"Escape\") {\n onPopoverClose();\n }\n };\n\n if (!item.icon) {\n return null;\n }\n\n // Leaf items (no children) render as a real link so clicking navigates directly.\n // The hover/focus still opens the label popover for discoverability.\n if (!hasChildren) {\n return (\n <CollapsedIconLinkWrap\n ref={ref as React.Ref<HTMLDivElement>}\n onMouseEnter={openPopover}\n onMouseLeave={onPopoverClose}\n onFocus={openPopover}\n onBlur={onPopoverClose}\n data-id={item.dataId}\n $size={sizing.itemHeight}\n $radius={sizing.radius}\n $iconSize={sizing.iconSize}\n $color={colors.content.tertiary}\n $hoverBg={colors.overlay.mono}\n $hoverColor={colors.content.primary}\n $activeBg={colors.overlay.mono}\n $activeOutline={colors.border.secondary}\n $focusOutline={colors.border.brand}\n $focusOutlineWidth={sizing.focusOutlineWidth}\n $active={isSimpleActive}\n >\n <LinkComponent\n to={item.to}\n exact={item.exact}\n external={item.external}\n target={item.target}\n dataId={item.dataId}\n aria-label={typeof item.label === \"string\" ? item.label : undefined}\n >\n <span>{item.icon}</span>\n </LinkComponent>\n </CollapsedIconLinkWrap>\n );\n }\n\n return (\n <IconBtn\n ref={ref as React.Ref<HTMLButtonElement>}\n type=\"button\"\n onMouseEnter={openPopover}\n onMouseLeave={onPopoverClose}\n onFocus={openPopover}\n onBlur={onPopoverClose}\n onKeyDown={handleKeyDown}\n data-id={item.dataId}\n aria-haspopup=\"menu\"\n $size={sizing.itemHeight}\n $radius={sizing.radius}\n $iconSize={sizing.iconSize}\n $color={colors.content.tertiary}\n $hoverBg={colors.overlay.mono}\n $hoverColor={colors.content.primary}\n $activeBg={colors.overlay.mono}\n $activeOutline={colors.border.secondary}\n $focusOutline={colors.border.brand}\n $focusOutlineWidth={sizing.focusOutlineWidth}\n $active={isActive || isSimpleActive}\n >\n <span>{item.icon}</span>\n </IconBtn>\n );\n};\n\ninterface PopoverProps {\n item: SidebarItemType;\n triggerRect: DOMRect;\n onClose: () => void;\n onMouseEnter: () => void;\n onMouseLeave: () => void;\n sizing: ReturnType<\n ReturnType<typeof useResolvedTheme>[\"theme\"][\"sizing\"][\"sidebar\"]\n >;\n colors: ReturnType<typeof useResolvedTheme>[\"theme\"][\"colors\"];\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\nconst CollapsedPopover: React.FC<PopoverProps> = ({\n item,\n triggerRect,\n onClose,\n onMouseEnter,\n onMouseLeave,\n sizing,\n colors,\n}) => {\n const { LinkComponent } = useSidebar();\n const popoverRef = useRef<HTMLDivElement | null>(null);\n const hasChildren = Boolean(item.children && item.children.length > 0);\n const [position, setPosition] = useState<{ top: number; left: number }>({\n top: triggerRect.top,\n left: triggerRect.right + POPOVER_GAP_PX,\n });\n\n useLayoutEffect(() => {\n if (!popoverRef.current) {\n return;\n }\n const rect = popoverRef.current.getBoundingClientRect();\n const triggerCenterY = triggerRect.top + triggerRect.height / 2;\n const idealTop = hasChildren\n ? triggerRect.top\n : triggerCenterY - rect.height / 2;\n const maxTop = Math.max(\n POPOVER_VIEWPORT_PADDING_PX,\n window.innerHeight - rect.height - POPOVER_VIEWPORT_PADDING_PX\n );\n const top = Math.max(\n POPOVER_VIEWPORT_PADDING_PX,\n Math.min(idealTop, maxTop)\n );\n const left = Math.min(\n triggerRect.right + POPOVER_GAP_PX,\n window.innerWidth - rect.width - POPOVER_VIEWPORT_PADDING_PX\n );\n if (top !== position.top || left !== position.left) {\n setPosition({ top, left });\n }\n }, [\n triggerRect.top,\n triggerRect.right,\n triggerRect.height,\n hasChildren,\n item.dataId,\n position.top,\n position.left,\n ]);\n\n if (!hasChildren) {\n return (\n <PopoverContainer\n ref={popoverRef}\n style={{ top: position.top, left: position.left, minWidth: \"auto\" }}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n $minWidth={0}\n $maxWidth={sizing.popoverMaxWidth}\n $zIndex={sizing.popoverZIndex}\n >\n <SinglePopoverPanel\n $padding={sizing.padding}\n $itemHeight={sizing.itemHeight}\n $radius={sizing.radius}\n $bg={colors.layer.float}\n $shadow={sizing.popoverShadow}\n >\n <SingleLinkWrap\n $itemHeight={sizing.itemHeight}\n $padding={sizing.padding}\n $radius={sizing.radius}\n $color={colors.content.primary}\n >\n <LinkComponent\n to={item.to}\n exact={item.exact}\n external={item.external}\n target={item.target}\n dataId={item.dataId}\n onClick={onClose}\n >\n <Typography variant=\"bodySm\" color=\"primary\">\n {item.label}\n </Typography>\n </LinkComponent>\n </SingleLinkWrap>\n </SinglePopoverPanel>\n </PopoverContainer>\n );\n }\n\n return (\n <PopoverContainer\n ref={popoverRef}\n role=\"menu\"\n style={{ top: position.top, left: position.left }}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n $minWidth={sizing.popoverMinWidth}\n $maxWidth={sizing.popoverMaxWidth}\n $zIndex={sizing.popoverZIndex}\n >\n <PopoverInner\n $itemHeight={sizing.itemHeight}\n $padding={sizing.padding}\n $radius={sizing.radius}\n $bg={colors.layer.float}\n $shadow={sizing.popoverShadow}\n >\n <PopoverTitle $padding={sizing.padding}>\n <Typography variant=\"bodyXs\" color=\"primary\">\n {item.label}\n </Typography>\n </PopoverTitle>\n <PopoverDivider $color={colors.border.secondary} />\n <PopoverItems\n $itemHeight={sizing.itemHeight}\n $padding={sizing.padding}\n $radius={sizing.radius}\n $colorIdle={colors.content.tertiary}\n $colorActive={colors.content.primary}\n $hoverBg={colors.overlay.mono}\n $activeBg={colors.overlay.mono}\n $activeOutline={colors.border.secondary}\n $focusOutline={colors.border.brand}\n $focusOutlineWidth={sizing.focusOutlineWidth}\n >\n {(item.children || []).map((child, i) => (\n <LinkComponent\n key={\n child.dataId ||\n (typeof child.to === \"string\" ? child.to : `child-${i}`)\n }\n to={child.to}\n exact={child.exact}\n external={child.external}\n target={child.target}\n className={POPOVER_ITEM_BASE_CLASS}\n activeClassName={POPOVER_ITEM_ACTIVE_CLASS}\n dataId={child.dataId}\n onClick={onClose}\n >\n <Typography variant=\"bodySm\" color=\"inherit\">\n {child.label}\n </Typography>\n </LinkComponent>\n ))}\n </PopoverItems>\n </PopoverInner>\n </PopoverContainer>\n );\n};\n\nexport interface SidebarCollapsedProps {\n items: SidebarItemType[];\n toolItems?: SidebarItemType[];\n bottomItems?: SidebarItemType[];\n onToggleCollapse?: () => void;\n onChatClick?: () => void;\n showChat?: boolean;\n chatBadge?: boolean;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\nexport const SidebarCollapsed: React.FC<SidebarCollapsedProps> = ({\n items,\n toolItems = [],\n bottomItems = [],\n onToggleCollapse,\n onChatClick,\n showChat = true,\n chatBadge = false,\n}) => {\n const { pathname } = useSidebar();\n const { theme } = useResolvedTheme();\n const sizing = theme.sizing.sidebar();\n const colors = theme.colors;\n\n const [popover, setPopover] = useState<{\n item: SidebarItemType;\n triggerRect: DOMRect;\n } | null>(null);\n const closeTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const cancelCloseTimer = useCallback(() => {\n if (closeTimerRef.current) {\n clearTimeout(closeTimerRef.current);\n closeTimerRef.current = null;\n }\n }, []);\n\n const startCloseTimer = useCallback(() => {\n cancelCloseTimer();\n closeTimerRef.current = setTimeout(() => {\n setPopover(null);\n }, POPOVER_CLOSE_DELAY_MS);\n }, [cancelCloseTimer]);\n\n useEffect(() => () => cancelCloseTimer(), [cancelCloseTimer]);\n\n const handlePopoverOpen = useCallback(\n (item: SidebarItemType, rect: DOMRect) => {\n cancelCloseTimer();\n setPopover({ item, triggerRect: rect });\n },\n [cancelCloseTimer]\n );\n\n return (\n <Outer\n $width={sizing.widthCollapsed}\n $radius={sizing.radius}\n $bg={colors.background.secondary}\n >\n <MainScroll $padding={sizing.padding}>\n {items.map((item, i) => (\n <CollapsedIconItem\n key={item.dataId || `item-${i}`}\n item={item}\n onPopoverOpen={handlePopoverOpen}\n onPopoverClose={startCloseTimer}\n pathname={pathname}\n sizing={sizing}\n colors={colors}\n />\n ))}\n {toolItems.length > 0 && (\n <>\n <Spacer />\n {toolItems.map((item, i) => (\n <CollapsedIconItem\n key={item.dataId || `tool-${i}`}\n item={item}\n onPopoverOpen={handlePopoverOpen}\n onPopoverClose={startCloseTimer}\n pathname={pathname}\n sizing={sizing}\n colors={colors}\n />\n ))}\n </>\n )}\n </MainScroll>\n\n <FixedBottom\n $padding={sizing.padding}\n $borderColor={colors.border.secondary}\n >\n {bottomItems.map((item, i) => (\n <CollapsedIconItem\n key={item.dataId || `bottom-${i}`}\n item={item}\n onPopoverOpen={handlePopoverOpen}\n onPopoverClose={startCloseTimer}\n pathname={pathname}\n sizing={sizing}\n colors={colors}\n />\n ))}\n </FixedBottom>\n\n <Footer $padding={sizing.padding} $borderColor={colors.border.secondary}>\n {showChat && (\n <CollapsedChat\n onClick={onChatClick}\n type=\"button\"\n aria-label=\"Open chat\"\n $size={sizing.itemHeight}\n $radius={sizing.radius}\n $bg={colors.control.brand.primary.bg}\n $border={colors.control.brand.primary.border}\n $color={colors.content.static.dark}\n $focusOutline={colors.border.brand}\n $focusOutlineWidth={sizing.focusOutlineWidth}\n >\n <ChatTwoMessages size={16} variant=\"line\" />\n {chatBadge && (\n <ChatBadge\n $size={sizing.chatBadgeSize}\n $color={colors.background.alert.primary}\n />\n )}\n </CollapsedChat>\n )}\n <CollapsedToggle\n onClick={onToggleCollapse}\n type=\"button\"\n aria-label=\"Expand sidebar\"\n aria-pressed={true}\n $size={sizing.itemHeight}\n $radius={sizing.radius}\n $iconSize={sizing.iconSize}\n $borderColor={colors.border.secondary}\n $hoverBg={colors.overlay.mono}\n $color={colors.content.tertiary}\n $focusOutline={colors.border.brand}\n $focusOutlineWidth={sizing.focusOutlineWidth}\n >\n <HideSidebarIcon flipped />\n </CollapsedToggle>\n </Footer>\n\n {popover &&\n typeof document !== \"undefined\" &&\n createPortal(\n <CollapsedPopover\n item={popover.item}\n triggerRect={popover.triggerRect}\n onClose={() => setPopover(null)}\n onMouseEnter={cancelCloseTimer}\n onMouseLeave={startCloseTimer}\n sizing={sizing}\n colors={colors}\n />,\n document.body\n )}\n </Outer>\n );\n};\n","import React from \"react\";\n\ninterface HideSidebarIconProps {\n /** Rotate icon 180° (e.g. when sidebar is collapsed and the button now expands it) */\n flipped?: boolean;\n}\n\nexport const HideSidebarIcon: React.FC<HideSidebarIconProps> = ({\n flipped,\n}) => (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n focusable=\"false\"\n style={flipped ? { transform: \"rotate(180deg)\" } : undefined}\n >\n <path\n d=\"M10.1519 3.75L10.9674 4.60262L7.33825 8.39704H15.75V9.60296H7.33825L10.9674 13.3974L10.1519 14.25L5.33446 9.21318C5.22185 9.09544 5.22185 8.90456 5.33446 8.78682L10.1519 3.75Z\"\n fill=\"currentColor\"\n />\n <path d=\"M2.25 3.75H3.75V15H2.25V3.75Z\" fill=\"currentColor\" />\n </svg>\n);\n","import React, { type ReactNode } from \"react\";\nimport styled from \"styled-components\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\n\ninterface ScrollableProps {\n $padding: number;\n $thumbColor: string;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\n// Box can't express ::-webkit-scrollbar styling, so this drops directly to\n// styled-components like Markdown.tsx does for its element-specific rules.\nconst ScrollableArea = styled.div<ScrollableProps>`\n flex: 1;\n display: flex;\n flex-direction: column;\n padding: ${(p) => p.$padding}px;\n padding-bottom: 0;\n overflow: hidden auto;\n min-height: 0;\n\n &::-webkit-scrollbar {\n width: 4px;\n }\n &::-webkit-scrollbar-track {\n background: none;\n }\n &::-webkit-scrollbar-thumb {\n background-color: ${(p) => p.$thumbColor};\n border-radius: 2px;\n visibility: hidden;\n }\n &:hover::-webkit-scrollbar-thumb {\n visibility: visible;\n }\n`;\n\nexport const SidebarContent: React.FC<{ children: ReactNode }> = ({\n children,\n}) => {\n const { theme } = useResolvedTheme();\n const sizing = theme.sizing.sidebar();\n return (\n <ScrollableArea\n $padding={sizing.padding}\n $thumbColor={theme.colors.content.tertiary}\n >\n {children}\n </ScrollableArea>\n );\n};\n","import React from \"react\";\nimport {\n View,\n Pressable,\n Image,\n ViewStyle,\n ImageStyle,\n DimensionValue,\n AnimatableNumericValue,\n} from \"react-native\";\nimport { BoxProps } from \"@xsolla/xui-primitives-core\";\n\nexport const Box: React.FC<BoxProps> = ({\n children,\n onPress,\n onLayout,\n onMoveShouldSetResponder,\n onResponderGrant,\n onResponderMove,\n onResponderRelease,\n onResponderTerminate,\n backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius,\n borderStyle,\n height,\n padding,\n paddingHorizontal,\n paddingVertical,\n margin,\n marginTop,\n marginBottom,\n marginLeft,\n marginRight,\n flexDirection,\n alignItems,\n justifyContent,\n position,\n top,\n bottom,\n left,\n right,\n width,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n flex,\n overflow,\n zIndex,\n hoverStyle,\n pressStyle,\n style,\n \"data-testid\": dataTestId,\n testID,\n as,\n src,\n alt,\n ...rest\n}) => {\n const getContainerStyle = (pressed?: boolean): ViewStyle => ({\n backgroundColor:\n pressed && pressStyle?.backgroundColor\n ? pressStyle.backgroundColor\n : backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius: borderRadius as AnimatableNumericValue,\n borderStyle: borderStyle as ViewStyle[\"borderStyle\"],\n overflow,\n zIndex,\n height: height as DimensionValue,\n width: width as DimensionValue,\n minWidth: minWidth as DimensionValue,\n minHeight: minHeight as DimensionValue,\n maxWidth: maxWidth as DimensionValue,\n maxHeight: maxHeight as DimensionValue,\n padding: padding as DimensionValue,\n paddingHorizontal: paddingHorizontal as DimensionValue,\n paddingVertical: paddingVertical as DimensionValue,\n margin: margin as DimensionValue,\n marginTop: marginTop as DimensionValue,\n marginBottom: marginBottom as DimensionValue,\n marginLeft: marginLeft as DimensionValue,\n marginRight: marginRight as DimensionValue,\n flexDirection,\n alignItems,\n justifyContent,\n position: position as ViewStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n flex,\n ...(style as ViewStyle),\n });\n\n const finalTestID = dataTestId || testID;\n\n // Destructure and drop web-only props from rest before passing to RN components\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n role,\n tabIndex,\n onKeyDown,\n onKeyUp,\n \"aria-label\": _ariaLabel,\n \"aria-labelledby\": _ariaLabelledBy,\n \"aria-current\": _ariaCurrent,\n \"aria-disabled\": _ariaDisabled,\n \"aria-live\": _ariaLive,\n className,\n \"data-testid\": _dataTestId,\n ...nativeRest\n } = rest as Record<string, unknown>;\n\n // Handle as=\"img\" for React Native\n if (as === \"img\" && src) {\n const imageStyle: ImageStyle = {\n width: width as DimensionValue,\n height: height as DimensionValue,\n borderRadius: borderRadius as number,\n position: position as ImageStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n ...(style as ImageStyle),\n };\n\n return (\n <Image\n source={{ uri: src }}\n style={imageStyle}\n testID={finalTestID}\n resizeMode=\"cover\"\n {...nativeRest}\n />\n );\n }\n\n if (onPress) {\n return (\n <Pressable\n onPress={onPress}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n style={({ pressed }) => getContainerStyle(pressed)}\n testID={finalTestID}\n {...nativeRest}\n >\n {children}\n </Pressable>\n );\n }\n\n return (\n <View\n style={getContainerStyle()}\n testID={finalTestID}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n {...nativeRest}\n >\n {children}\n </View>\n );\n};\n","import React, { type ReactNode } from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box } from \"@xsolla/xui-primitives\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\n\nexport const SidebarFooter: React.FC<{ children: ReactNode }> = ({\n children,\n}) => {\n const { theme } = useResolvedTheme();\n const sizing = theme.sizing.sidebar();\n\n return (\n <Box\n flexDirection=\"row\"\n alignItems=\"flex-end\"\n justifyContent=\"space-between\"\n padding={sizing.padding}\n borderTopWidth={1}\n borderTopColor={theme.colors.border.secondary}\n flexShrink={0}\n >\n {children}\n </Box>\n );\n};\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport { useSidebar } from \"./SidebarContext\";\nimport { HideSidebarIcon } from \"./HideSidebarIcon\";\n\ninterface ToggleProps {\n $size: number;\n $radius: number;\n $iconSize: number;\n $borderColor: string;\n $hoverBg: string;\n $color: string;\n $focusOutline: string;\n $focusOutlineWidth: number;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\nconst ToggleButton = styled.button<ToggleProps>`\n display: flex;\n width: ${(p) => p.$size}px;\n height: ${(p) => p.$size}px;\n align-items: center;\n justify-content: center;\n border: 1px solid ${(p) => p.$borderColor};\n border-radius: ${(p) => p.$radius}px;\n background: transparent;\n backdrop-filter: blur(30px);\n cursor: pointer;\n color: ${(p) => p.$color};\n padding: 0;\n font: inherit;\n\n &:hover {\n background: ${(p) => p.$hoverBg};\n }\n\n &:focus-visible {\n outline: ${(p) => p.$focusOutlineWidth}px solid ${(p) => p.$focusOutline};\n outline-offset: 2px;\n }\n\n svg {\n width: ${(p) => p.$iconSize}px;\n height: ${(p) => p.$iconSize}px;\n }\n`;\n\nexport const SidebarTrigger: React.FC = () => {\n const { collapsed, onCollapsedChange } = useSidebar();\n const { theme } = useResolvedTheme();\n const sizing = theme.sizing.sidebar();\n\n return (\n <ToggleButton\n type=\"button\"\n onClick={() => onCollapsedChange(!collapsed)}\n aria-label={collapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n aria-pressed={collapsed}\n $size={sizing.itemHeight}\n $radius={sizing.radius}\n $iconSize={sizing.iconSize}\n $borderColor={theme.colors.border.secondary}\n $hoverBg={theme.colors.overlay.mono}\n $color={theme.colors.content.tertiary}\n $focusOutline={theme.colors.border.brand}\n $focusOutlineWidth={sizing.focusOutlineWidth}\n >\n <HideSidebarIcon flipped={collapsed} />\n </ToggleButton>\n );\n};\n","import React, { type ReactNode } from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box } from \"@xsolla/xui-primitives\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport { Typography } from \"@xsolla/xui-typography\";\n\ninterface SidebarGroupProps {\n label?: string;\n dataId?: string;\n /** Docks this group to the bottom of the expanded sidebar (e.g. Settings, Billing). */\n pinnedToBottom?: boolean;\n children: ReactNode;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\nexport const SidebarGroup: React.FC<SidebarGroupProps> = ({\n label,\n dataId,\n pinnedToBottom,\n children,\n}) => {\n const { theme } = useResolvedTheme();\n const sizing = theme.sizing.sidebar();\n\n return (\n <Box\n flexDirection=\"column\"\n data-id={dataId}\n role={label ? \"group\" : undefined}\n aria-label={label}\n style={pinnedToBottom ? { marginTop: \"auto\" } : undefined}\n >\n {label && (\n <Box\n flexDirection=\"row\"\n alignItems=\"center\"\n height={sizing.sectionLabelHeight}\n paddingHorizontal={sizing.padding}\n marginTop={sizing.padding}\n >\n <Typography variant=\"bodyXs\" color=\"secondary\">\n {label}\n </Typography>\n </Box>\n )}\n {children}\n </Box>\n );\n};\n","import React, { type ReactNode } from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box } from \"@xsolla/xui-primitives\";\n\nexport const SidebarMenu: React.FC<{ children: ReactNode }> = ({\n children,\n}) => (\n <Box flexDirection=\"column\" alignItems=\"stretch\">\n {children}\n </Box>\n);\n","import React, { type ReactNode } from \"react\";\nimport {\n type SidebarLinkActiveCheck,\n type SidebarLinkClickHandler,\n useSidebar,\n} from \"./SidebarContext\";\nimport styled from \"styled-components\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport { Typography } from \"@xsolla/xui-typography\";\nimport { Tooltip } from \"@xsolla/xui-tooltip\";\nimport { Drag, OpenIn, Pin, Remove } from \"@xsolla/xui-icons-base\";\nimport { ITEM_BASE_CLASS, ITEM_ACTIVE_CLASS } from \"./constants\";\n\nconst TOOLTIP_TRUNCATE_LENGTH = 20;\n\ninterface WrapperProps {\n $itemHeight: number;\n $iconSize: number;\n $padding: number;\n $radius: number;\n $colorIdle: string;\n $colorActive: string;\n $hoverBg: string;\n $activeBg: string;\n $activeOutline: string;\n $focusOutline: string;\n $focusOutlineWidth: number;\n $multiLine?: boolean;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\n// Wraps the consumer-provided LinkComponent so we can attach hover/active/focus\n// styles without requiring the link to be styled-components-aware. The link\n// receives a className we own; active state is carried via activeClassName.\nconst ItemWrapper = styled.div<WrapperProps>`\n display: contents;\n\n & > .${ITEM_BASE_CLASS} {\n display: flex;\n height: ${(p) => (p.$multiLine ? \"auto\" : `${p.$itemHeight}px`)};\n max-height: ${(p) => (p.$multiLine ? \"none\" : `${p.$itemHeight}px`)};\n width: 100%;\n box-sizing: border-box;\n align-items: ${(p) => (p.$multiLine ? \"flex-start\" : \"center\")};\n gap: 8px;\n padding: 0 ${(p) => p.$padding}px;\n border-radius: ${(p) => p.$radius}px;\n color: ${(p) => p.$colorIdle};\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n line-height: 18px;\n overflow: hidden;\n transition:\n background-color 0.15s ease-in-out,\n color 0.15s ease-in-out;\n white-space: ${(p) => (p.$multiLine ? \"normal\" : \"nowrap\")};\n text-align: left;\n text-decoration: none;\n }\n\n & > .${ITEM_BASE_CLASS}:hover {\n background-color: ${(p) => p.$hoverBg};\n }\n\n & > .${ITEM_BASE_CLASS}:focus-visible {\n outline: ${(p) => p.$focusOutlineWidth}px solid ${(p) => p.$focusOutline};\n outline-offset: -${(p) => p.$focusOutlineWidth}px;\n }\n\n & > .${ITEM_ACTIVE_CLASS} {\n background-color: ${(p) => p.$activeBg};\n outline: 1px solid ${(p) => p.$activeOutline};\n outline-offset: -1px;\n color: ${(p) => p.$colorActive};\n font-weight: 500;\n }\n`;\n\ninterface IconBoxProps {\n $size: number;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\nconst IconBox = styled.div<IconBoxProps>`\n display: flex;\n width: ${(p) => p.$size}px;\n height: ${(p) => p.$size}px;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n color: inherit;\n\n svg {\n width: ${(p) => p.$size}px;\n height: ${(p) => p.$size}px;\n }\n`;\n\n// Stacks the pin glyph and drag handle in the leading icon slot. Pin is shown\n// at rest; on row hover the drag handle takes over to signal reorder affordance.\nconst PinDragSlot = styled.div<{ $size: number }>`\n position: relative;\n width: ${(p) => p.$size}px;\n height: ${(p) => p.$size}px;\n flex-shrink: 0;\n cursor: grab;\n\n .${ITEM_BASE_CLASS}:active & {\n cursor: grabbing;\n }\n`;\n\nconst PinDragLayer = styled.div<{ $size: number; $hideOnHover: boolean }>`\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n color: inherit;\n opacity: ${(p) => (p.$hideOnHover ? 1 : 0)};\n transition: opacity 0.15s ease-in-out;\n\n .${ITEM_BASE_CLASS}:hover & {\n opacity: ${(p) => (p.$hideOnHover ? 0 : 1)};\n }\n\n svg {\n width: 12px;\n height: 12px;\n }\n`;\n\ninterface PinButtonProps {\n $size: number;\n $color: string;\n $hoverColor: string;\n $activeColor: string;\n $isPinned: boolean;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\n// Pin toggle reveals on hover of the parent row; stays visible when pinned.\nconst PinButton = styled.button<PinButtonProps>`\n display: flex;\n width: ${(p) => p.$size}px;\n height: ${(p) => p.$size}px;\n flex-shrink: 0;\n margin-left: auto;\n align-items: center;\n justify-content: center;\n padding: 0;\n border: none;\n background: transparent;\n color: ${(p) => (p.$isPinned ? p.$activeColor : p.$color)};\n cursor: pointer;\n border-radius: 4px;\n opacity: 0;\n transition:\n opacity 0.15s ease-in-out,\n color 0.15s ease-in-out;\n\n .${ITEM_BASE_CLASS}:hover & {\n opacity: 1;\n }\n\n &:hover {\n color: ${(p) => p.$hoverColor};\n }\n\n &:focus-visible {\n opacity: 1;\n outline: 1px solid currentColor;\n outline-offset: 1px;\n }\n\n svg {\n width: 12px;\n height: 12px;\n }\n`;\n\nconst LabelBox = styled.span`\n display: flex;\n flex: 1;\n gap: 4px;\n height: 20px;\n align-items: center;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\ninterface BadgeDotProps {\n $size: number;\n $color: string;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\nconst BadgeDot = styled.span<BadgeDotProps>`\n width: ${(p) => p.$size}px;\n height: ${(p) => p.$size}px;\n flex-shrink: 0;\n background: ${(p) => p.$color};\n border-radius: 999px;\n`;\n\ninterface BetaTagProps {\n $bg: string;\n $color: string;\n $radius: number;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\nconst BetaTag = styled.span<BetaTagProps>`\n padding: 2px 6px;\n border-radius: ${(p) => p.$radius}px;\n background: ${(p) => p.$bg};\n color: ${(p) => p.$color};\n font-size: 11px;\n font-weight: 500;\n line-height: 14px;\n flex-shrink: 0;\n`;\n\ninterface ExternalIconBoxProps {\n $size: number;\n $color: string;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\nconst ExternalIconBox = styled.span<ExternalIconBoxProps>`\n display: flex;\n width: ${(p) => p.$size}px;\n height: ${(p) => p.$size}px;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n margin-left: auto;\n color: ${(p) => p.$color};\n`;\n\nexport interface SidebarMenuItemProps {\n to?: string;\n label: ReactNode;\n icon?: ReactNode;\n exact?: boolean;\n external?: boolean;\n hasExternalIcon?: boolean;\n target?: string | null;\n onClick?: SidebarLinkClickHandler;\n dataId?: string;\n isActive?: SidebarLinkActiveCheck;\n isPinned?: boolean;\n /** When provided, renders a pin/unpin toggle on hover (or always, when pinned). */\n onPinToggle?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n /** When true on a pinned item, the leading pin glyph swaps to a drag handle on row hover (reorder affordance). */\n dragHandle?: boolean;\n showBadge?: boolean;\n hasTooltip?: boolean;\n beta?: boolean;\n multiLine?: boolean;\n extra?: ReactNode;\n /** Whether this item is inside a SidebarMenuSub (parent collapsible sets nested styling) */\n isNested?: boolean;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\nexport const SidebarMenuItem: React.FC<SidebarMenuItemProps> = ({\n to,\n label,\n icon,\n exact,\n external,\n hasExternalIcon,\n target,\n onClick,\n dataId,\n isActive,\n isPinned,\n onPinToggle,\n dragHandle,\n showBadge,\n hasTooltip,\n beta,\n multiLine,\n extra,\n isNested = false,\n}) => {\n const { LinkComponent } = useSidebar();\n const { theme } = useResolvedTheme();\n const sizing = theme.sizing.sidebar();\n\n const shouldTruncate =\n Boolean(hasTooltip) &&\n typeof label === \"string\" &&\n label.length > TOOLTIP_TRUNCATE_LENGTH;\n\n const displayLabel: ReactNode = shouldTruncate ? (\n <Tooltip content={label as string} placement=\"right\" size=\"md\">\n <span>{`${(label as string).slice(0, TOOLTIP_TRUNCATE_LENGTH)}…`}</span>\n </Tooltip>\n ) : (\n label\n );\n\n return (\n <ItemWrapper\n $itemHeight={sizing.itemHeight}\n $iconSize={sizing.iconSize}\n $padding={sizing.padding}\n $radius={sizing.radius}\n $colorIdle={theme.colors.content.tertiary}\n $colorActive={theme.colors.content.primary}\n $hoverBg={theme.colors.overlay.mono}\n $activeBg={theme.colors.overlay.mono}\n $activeOutline={theme.colors.border.secondary}\n $focusOutline={theme.colors.border.brand}\n $focusOutlineWidth={sizing.focusOutlineWidth}\n $multiLine={multiLine}\n >\n <LinkComponent\n to={to}\n exact={exact}\n external={external}\n target={target}\n onClick={onClick}\n isActive={isActive}\n className={ITEM_BASE_CLASS}\n activeClassName={ITEM_ACTIVE_CLASS}\n dataId={dataId}\n >\n {!isNested &&\n (isPinned && dragHandle ? (\n <PinDragSlot $size={sizing.iconSize} data-drag-handle=\"true\">\n <PinDragLayer $size={sizing.iconSize} $hideOnHover>\n <Pin size={12} variant=\"solid\" />\n </PinDragLayer>\n <PinDragLayer $size={sizing.iconSize} $hideOnHover={false}>\n <Drag size={12} variant=\"line\" />\n </PinDragLayer>\n </PinDragSlot>\n ) : isPinned ? (\n <IconBox $size={sizing.iconSize}>\n <Pin size={12} variant=\"solid\" />\n </IconBox>\n ) : icon ? (\n <IconBox $size={sizing.iconSize}>{icon}</IconBox>\n ) : null)}\n {extra}\n <LabelBox>\n <Typography\n variant={isNested ? \"bodySm\" : \"bodySmAccent\"}\n color=\"inherit\"\n noWrap={!multiLine}\n >\n {displayLabel}\n </Typography>\n {showBadge && (\n <BadgeDot\n $size={sizing.itemBadgeSize}\n $color={theme.colors.background.alert.primary}\n />\n )}\n </LabelBox>\n {onPinToggle && (\n <Tooltip\n content={isPinned ? \"Unpin\" : \"Pin\"}\n placement=\"top\"\n size=\"sm\"\n >\n <PinButton\n type=\"button\"\n aria-label={isPinned ? \"Unpin item\" : \"Pin item\"}\n aria-pressed={Boolean(isPinned)}\n $size={sizing.iconSize}\n $color={theme.colors.content.tertiary}\n $hoverColor={theme.colors.content.primary}\n $activeColor={theme.colors.content.primary}\n $isPinned={Boolean(isPinned)}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n onPinToggle(e);\n }}\n >\n {isPinned ? (\n <Remove size={12} variant=\"line\" />\n ) : (\n <Pin size={12} variant=\"solid\" />\n )}\n </PinButton>\n </Tooltip>\n )}\n {beta && (\n <BetaTag\n $bg={theme.colors.overlay.mono}\n $color={theme.colors.content.tertiary}\n $radius={sizing.radius}\n >\n Beta\n </BetaTag>\n )}\n {external && hasExternalIcon && (\n <ExternalIconBox\n $size={sizing.externalIconSize}\n $color={theme.colors.content.secondary}\n >\n <OpenIn size={18} variant=\"line\" />\n </ExternalIconBox>\n )}\n </LinkComponent>\n </ItemWrapper>\n );\n};\n","/**\n * Shared classnames for the link rendered by user-supplied LinkComponent.\n * SidebarMenuItem applies these via the className/activeClassName props of\n * the consumer link. Parent containers (collapsible regions, nested rails)\n * scope their styles by descendant-targeting these classes inside a\n * styled-component, so the auto-generated parent class keeps them isolated.\n */\nexport const ITEM_BASE_CLASS = \"xui-sb-item\";\nexport const ITEM_ACTIVE_CLASS = \"xui-sb-item--active\";\n","import React, { type ReactNode, useEffect, useMemo, useRef } from \"react\";\nimport styled from \"styled-components\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport { Typography } from \"@xsolla/xui-typography\";\nimport { ChevronRight, ChevronUp } from \"@xsolla/xui-icons-base\";\nimport { useSidebar } from \"./SidebarContext\";\nimport { ITEM_BASE_CLASS, ITEM_ACTIVE_CLASS } from \"./constants\";\n\ninterface HeaderProps {\n $itemHeight: number;\n $padding: number;\n $radius: number;\n $color: string;\n $hoverBg: string;\n $focusOutline: string;\n $focusOutlineWidth: number;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\nconst HeaderButton = styled.button<HeaderProps>`\n display: flex;\n height: ${(p) => p.$itemHeight}px;\n width: 100%;\n box-sizing: border-box;\n align-items: center;\n gap: 8px;\n padding: 0 ${(p) => p.$padding}px;\n border: 0;\n border-radius: ${(p) => p.$radius}px;\n background: transparent;\n color: ${(p) => p.$color};\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n line-height: 18px;\n font-family: inherit;\n text-align: left;\n white-space: nowrap;\n overflow: hidden;\n transition:\n background-color 0.15s ease-in-out,\n color 0.15s ease-in-out;\n\n &:hover {\n background-color: ${(p) => p.$hoverBg};\n }\n\n &:focus-visible {\n outline: ${(p) => p.$focusOutlineWidth}px solid ${(p) => p.$focusOutline};\n outline-offset: -${(p) => p.$focusOutlineWidth}px;\n }\n`;\n\ninterface RegionProps {\n $expanded: boolean;\n $transition: string;\n $padding: number;\n $nestedPaddingLeft: number;\n $railLeft: number;\n $railColor: string;\n $colorActive: string;\n $activeBg: string;\n $activeOutline: string;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\n// Animated grid-template-rows trick (no fixed height needed). When expanded the\n// grid row goes 0fr → 1fr; the inner div has overflow:hidden so children clip.\n// Nested SidebarMenuItem links are styled here so they get the indent + rail.\nconst ExpandRegion = styled.div<RegionProps>`\n display: grid;\n grid-template-rows: ${(p) => (p.$expanded ? \"1fr\" : \"0fr\")};\n transition: ${(p) => p.$transition};\n\n & > div {\n overflow: hidden;\n }\n\n && .${ITEM_BASE_CLASS} {\n position: relative;\n padding: 0 ${(p) => p.$padding}px 0 ${(p) => p.$nestedPaddingLeft}px;\n font-weight: 400;\n\n &::before {\n content: \"\";\n position: absolute;\n left: ${(p) => p.$railLeft}px;\n top: 0;\n bottom: 0;\n width: 1px;\n background: ${(p) => p.$railColor};\n transform: translateX(-50%);\n }\n }\n\n && .${ITEM_ACTIVE_CLASS} {\n font-weight: 500;\n color: ${(p) => p.$colorActive};\n background-color: ${(p) => p.$activeBg};\n outline: 1px solid ${(p) => p.$activeOutline};\n outline-offset: -1px;\n }\n`;\n\ninterface IconBoxProps {\n $size: number;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\nconst IconBox = styled.div<IconBoxProps>`\n display: flex;\n width: ${(p) => p.$size}px;\n height: ${(p) => p.$size}px;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n color: inherit;\n\n svg {\n width: ${(p) => p.$size}px;\n height: ${(p) => p.$size}px;\n }\n`;\n\nconst LabelBox = styled.span`\n display: flex;\n flex: 1;\n gap: 4px;\n height: 20px;\n align-items: center;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\ninterface ChevronBoxProps {\n $size: number;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\nconst ChevronBox = styled.span<ChevronBoxProps>`\n display: flex;\n width: ${(p) => p.$size}px;\n height: ${(p) => p.$size}px;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n margin-left: auto;\n color: inherit;\n\n svg {\n width: ${(p) => p.$size}px;\n height: ${(p) => p.$size}px;\n }\n`;\n\nexport interface SidebarMenuCollapsibleProps {\n icon?: ReactNode;\n label: ReactNode;\n dataId?: string;\n /** Route prefixes that should auto-expand this collapsible */\n matchPaths?: string[];\n children: ReactNode;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\nconst computeRouteMatch = (pathname: string, matchPaths: string[]): boolean => {\n if (matchPaths.length === 0) {\n return false;\n }\n const pathWithoutMerchant = pathname.replace(/^\\/\\d+/, \"\");\n return matchPaths.some((p) => {\n if (p === \"/\") return pathWithoutMerchant === \"/\";\n return pathWithoutMerchant === p || pathWithoutMerchant.startsWith(`${p}/`);\n });\n};\n\nexport const SidebarMenuCollapsible: React.FC<SidebarMenuCollapsibleProps> = ({\n icon,\n label,\n dataId,\n matchPaths = [],\n children,\n}) => {\n const { pathname, expandedId, onExpandedIdChange } = useSidebar();\n const { theme } = useResolvedTheme();\n const sizing = theme.sizing.sidebar();\n\n // Stable id created once per instance; safe under React 16 (no useId).\n const idRef = useRef<string>();\n if (!idRef.current) {\n idRef.current =\n dataId || `sb-collapsible-${Math.random().toString(36).slice(2, 10)}`;\n }\n const collapsibleId = idRef.current;\n const contentId = `sidebar-collapsible-${collapsibleId}`;\n\n const matchKey = matchPaths.join(\"|\");\n const isRouteMatch = useMemo(\n () => computeRouteMatch(pathname, matchPaths),\n [pathname, matchKey, matchPaths]\n );\n\n const prevMatchRef = useRef<boolean>(isRouteMatch);\n\n useEffect(() => {\n if (prevMatchRef.current !== isRouteMatch) {\n prevMatchRef.current = isRouteMatch;\n if (isRouteMatch) {\n onExpandedIdChange(collapsibleId);\n }\n }\n }, [isRouteMatch, collapsibleId, onExpandedIdChange]);\n\n const mountRef = useRef(true);\n useEffect(() => {\n if (mountRef.current && isRouteMatch) {\n onExpandedIdChange(collapsibleId);\n mountRef.current = false;\n }\n }, [isRouteMatch, collapsibleId, onExpandedIdChange]);\n\n const isExpanded = expandedId === collapsibleId;\n\n const handleToggle = () => {\n onExpandedIdChange(isExpanded ? null : collapsibleId);\n };\n\n return (\n <>\n <HeaderButton\n type=\"button\"\n onClick={handleToggle}\n data-id={dataId}\n aria-expanded={isExpanded}\n aria-controls={contentId}\n $itemHeight={sizing.itemHeight}\n $padding={sizing.padding}\n $radius={sizing.radius}\n $color={theme.colors.content.tertiary}\n $hoverBg={theme.colors.control.mono.secondary.bgHover}\n $focusOutline={theme.colors.border.brand}\n $focusOutlineWidth={sizing.focusOutlineWidth}\n >\n {icon && <IconBox $size={sizing.iconSize}>{icon}</IconBox>}\n <LabelBox>\n <Typography variant=\"bodySmAccent\" color=\"inherit\" noWrap>\n {label}\n </Typography>\n </LabelBox>\n <ChevronBox $size={sizing.chevronSize}>\n {isExpanded ? (\n <ChevronUp size={14} variant=\"solid\" />\n ) : (\n <ChevronRight size={14} variant=\"solid\" />\n )}\n </ChevronBox>\n </HeaderButton>\n <ExpandRegion\n id={contentId}\n role=\"region\"\n $expanded={isExpanded}\n $transition={sizing.transitionRows}\n $padding={sizing.padding}\n $nestedPaddingLeft={sizing.nestedItemPaddingLeft}\n $railLeft={sizing.nestedItemRailLeft}\n $railColor={theme.colors.border.secondary}\n $colorActive={theme.colors.content.primary}\n $activeBg={theme.colors.overlay.mono}\n $activeOutline={theme.colors.border.secondary}\n >\n <div>{children}</div>\n </ExpandRegion>\n </>\n );\n};\n","import React, { type ReactNode } from \"react\";\n\n/**\n * Container for nested menu items inside a SidebarMenuCollapsible.\n * Child SidebarMenuItems automatically get nested styling via the parent\n * SidebarMenuCollapsible's CSS cascade (vertical rail + indent).\n */\nexport const SidebarMenuSub: React.FC<{ children: ReactNode }> = ({\n children,\n}) => <>{children}</>;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport { Typography } from \"@xsolla/xui-typography\";\nimport { ChatTwoMessages } from \"@xsolla/xui-icons-base\";\n\ninterface ChatProps {\n $height: number;\n $padding: number;\n $radius: number;\n $bg: string;\n $border: string;\n $color: string;\n $focusOutline: string;\n $focusOutlineWidth: number;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\nconst ChatButton = styled.button<ChatProps>`\n display: flex;\n height: ${(p) => p.$height}px;\n align-items: center;\n gap: 8px;\n padding: 0 ${(p) => p.$padding}px;\n border: 1px solid ${(p) => p.$border};\n border-radius: ${(p) => p.$radius}px;\n background: ${(p) => p.$bg};\n color: ${(p) => p.$color};\n cursor: pointer;\n font: inherit;\n position: relative;\n\n &:hover {\n opacity: 0.9;\n }\n\n &:focus-visible {\n outline: ${(p) => p.$focusOutlineWidth}px solid ${(p) => p.$focusOutline};\n outline-offset: 2px;\n }\n\n svg {\n width: 16px;\n height: 16px;\n }\n`;\n\ninterface BadgeProps {\n $size: number;\n $color: string;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\nconst Badge = styled.span<BadgeProps>`\n position: absolute;\n top: -2px;\n right: -2px;\n width: ${(p) => p.$size}px;\n height: ${(p) => p.$size}px;\n background: ${(p) => p.$color};\n border-radius: 999px;\n`;\n\ninterface SidebarChatButtonProps {\n onClick?: () => void;\n badge?: boolean;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\nexport const SidebarChatButton: React.FC<SidebarChatButtonProps> = ({\n onClick,\n badge,\n}) => {\n const { theme } = useResolvedTheme();\n const sizing = theme.sizing.sidebar();\n\n return (\n <ChatButton\n onClick={onClick}\n type=\"button\"\n $height={sizing.itemHeight}\n $padding={sizing.padding}\n $radius={sizing.radius}\n $bg={theme.colors.control.brand.primary.bg}\n $border={theme.colors.control.brand.primary.border}\n $color={theme.colors.content.static.dark}\n $focusOutline={theme.colors.border.brand}\n $focusOutlineWidth={sizing.focusOutlineWidth}\n >\n <ChatTwoMessages size={16} variant=\"line\" />\n <Typography variant=\"bodySmAccent\" color=\"inherit\">\n Chat\n </Typography>\n {badge && (\n <Badge\n $size={sizing.chatBadgeSize}\n $color={theme.colors.background.alert.primary}\n />\n )}\n </ChatButton>\n );\n};\n","import React, { type ReactNode, useState } from \"react\";\nimport { Pin } from \"@xsolla/xui-icons-base\";\nimport { SidebarMenuItem } from \"./SidebarMenuItem\";\nimport type { SidebarItemType } from \"./types\";\n\nexport interface SidebarPinnedItem {\n key: string;\n to: string;\n label: ReactNode;\n exact?: boolean;\n}\n\nexport interface SidebarPinnedListProps {\n /** Ordered list of currently-pinned items. */\n items: SidebarPinnedItem[];\n /** Called when the user clicks the × on a pinned shortcut. */\n onUnpin: (key: string) => void;\n /**\n * Called as the user drags to reorder. Omit to disable drag-and-drop —\n * the leading icon stays as the static pin glyph.\n */\n onReorder?: (fromKey: string, toKey: string) => void;\n /** Render 8px top/bottom spacers when items are present. Default true. */\n spacers?: boolean;\n /** Test ID for testing frameworks */\n testID?: string;\n}\n\n/**\n * Renders the pinned shortcuts list with pointer-event-based drag-and-drop\n * reorder. Drag only initiates from the leading drag-handle area on each row.\n *\n * Pinning is fully opt-in: consumers who don't render this component get no\n * pin UI. Consumers without a reorder backend can omit `onReorder`; the list\n * stays static but unpinning still works.\n */\nexport const SidebarPinnedList: React.FC<SidebarPinnedListProps> = ({\n items,\n onUnpin,\n onReorder,\n spacers = true,\n}) => {\n const [dragKey, setDragKey] = useState<string | null>(null);\n const canReorder = Boolean(onReorder) && items.length > 1;\n\n if (items.length === 0) return null;\n\n return (\n <>\n {spacers && <div style={{ height: 8 }} />}\n {items.map((item) => (\n <div\n key={item.key}\n data-pinned-key={item.key}\n onPointerDown={(e) => {\n if (!canReorder) return;\n const t = e.target as HTMLElement;\n if (!t.closest('[data-drag-handle=\"true\"]')) return;\n e.preventDefault();\n setDragKey(item.key);\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n }}\n onPointerMove={(e) => {\n if (dragKey !== item.key) return;\n const elt = document.elementFromPoint(\n e.clientX,\n e.clientY\n ) as HTMLElement | null;\n const row = elt?.closest(\"[data-pinned-key]\") as HTMLElement | null;\n const overKey = row?.getAttribute(\"data-pinned-key\");\n if (overKey && overKey !== dragKey) {\n onReorder?.(dragKey, overKey);\n }\n }}\n onPointerUp={(e) => {\n if (dragKey === item.key) {\n (e.currentTarget as HTMLElement).releasePointerCapture(\n e.pointerId\n );\n setDragKey(null);\n }\n }}\n onPointerCancel={() => {\n if (dragKey === item.key) setDragKey(null);\n }}\n style={{\n opacity: dragKey === item.key ? 0.4 : 1,\n transition: \"opacity 0.15s ease-in-out\",\n touchAction: canReorder ? \"none\" : undefined,\n }}\n >\n <SidebarMenuItem\n to={item.to}\n label={item.label}\n exact={item.exact}\n isPinned\n dragHandle={canReorder}\n onPinToggle={() => onUnpin(item.key)}\n />\n </div>\n ))}\n {spacers && <div style={{ height: 8 }} />}\n </>\n );\n};\n\n/**\n * Helper for the collapsed sidebar: returns a single `SidebarItemType` whose\n * popover lists every pinned shortcut. Spread it into `collapsedItems` at the\n * position you want the Pin button to appear. Returns `null` when no items.\n */\nexport const getPinnedCollapsedItem = (\n items: SidebarPinnedItem[],\n options: { label?: string; dataId?: string } = {}\n): SidebarItemType | null => {\n if (items.length === 0) return null;\n return {\n label: options.label ?? \"Pinned\",\n icon: <Pin size={18} variant=\"solid\" />,\n dataId: options.dataId ?? \"sidebar-collapsed-pinned\",\n children: items.map((i) => ({\n to: i.to,\n label: i.label,\n exact: i.exact,\n })),\n };\n};\n"],"mappings":"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","names":["import_styled_components","import_xui_core","import_react","import_jsx_runtime","import_jsx_runtime","styled","import_jsx_runtime","Outer","styled","import_styled_components","import_xui_core","import_jsx_runtime","styled","import_jsx_runtime","import_xui_core","import_jsx_runtime","import_styled_components","import_xui_core","import_jsx_runtime","styled","import_xui_core","import_xui_typography","import_jsx_runtime","import_jsx_runtime","import_styled_components","import_xui_core","import_xui_typography","import_xui_icons_base","import_jsx_runtime","styled","import_react","import_styled_components","import_xui_core","import_xui_typography","import_xui_icons_base","import_jsx_runtime","styled","IconBox","LabelBox","import_jsx_runtime","import_styled_components","import_xui_core","import_xui_typography","import_xui_icons_base","import_jsx_runtime","styled","import_react","import_xui_icons_base","import_jsx_runtime"]}
|