@xsolla/xui-b2b-sidebar 0.150.0 → 0.152.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 +265 -140
- package/native/index.d.mts +46 -1
- package/native/index.d.ts +46 -1
- package/native/index.js +197 -5
- package/native/index.js.map +1 -1
- package/native/index.mjs +196 -6
- package/native/index.mjs.map +1 -1
- package/package.json +6 -6
- package/web/index.d.mts +46 -1
- package/web/index.d.ts +46 -1
- package/web/index.js +197 -5
- package/web/index.js.map +1 -1
- package/web/index.mjs +196 -6
- package/web/index.mjs.map +1 -1
package/web/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-web/src/Box.tsx","../../../../foundation/primitives-web/src/filterDOMProps.ts","../../../../../node_modules/@emotion/memoize/dist/memoize.esm.js","../../../../../node_modules/@emotion/is-prop-valid/dist/is-prop-valid.esm.js","../../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"],"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\";\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\";\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 styled from \"styled-components\";\nimport type { BoxProps } from \"@xsolla/xui-primitives-core\";\nimport { createFilteredElement } from \"./filterDOMProps\";\n\nconst FilteredDiv = createFilteredElement(\"div\");\n\nconst StyledBox = styled(FilteredDiv)<BoxProps>`\n display: flex;\n box-sizing: border-box;\n background-color: ${(props) => props.backgroundColor || \"transparent\"};\n border-color: ${(props) => props.borderColor || \"transparent\"};\n border-width: ${(props) =>\n typeof props.borderWidth === \"number\"\n ? `${props.borderWidth}px`\n : props.borderWidth || 0};\n\n ${(props) =>\n props.borderBottomWidth !== undefined &&\n `\n border-bottom-width: ${typeof props.borderBottomWidth === \"number\" ? `${props.borderBottomWidth}px` : props.borderBottomWidth};\n border-bottom-color: ${props.borderBottomColor || props.borderColor || \"transparent\"};\n border-bottom-style: solid;\n `}\n ${(props) =>\n props.borderTopWidth !== undefined &&\n `\n border-top-width: ${typeof props.borderTopWidth === \"number\" ? `${props.borderTopWidth}px` : props.borderTopWidth};\n border-top-color: ${props.borderTopColor || props.borderColor || \"transparent\"};\n border-top-style: solid;\n `}\n ${(props) =>\n props.borderLeftWidth !== undefined &&\n `\n border-left-width: ${typeof props.borderLeftWidth === \"number\" ? `${props.borderLeftWidth}px` : props.borderLeftWidth};\n border-left-color: ${props.borderLeftColor || props.borderColor || \"transparent\"};\n border-left-style: solid;\n `}\n ${(props) =>\n props.borderRightWidth !== undefined &&\n `\n border-right-width: ${typeof props.borderRightWidth === \"number\" ? `${props.borderRightWidth}px` : props.borderRightWidth};\n border-right-color: ${props.borderRightColor || props.borderColor || \"transparent\"};\n border-right-style: solid;\n `}\n\n border-style: ${(props) =>\n props.borderStyle ||\n (props.borderWidth ||\n props.borderBottomWidth ||\n props.borderTopWidth ||\n props.borderLeftWidth ||\n props.borderRightWidth\n ? \"solid\"\n : \"none\")};\n border-radius: ${(props) =>\n typeof props.borderRadius === \"number\"\n ? `${props.borderRadius}px`\n : props.borderRadius || 0};\n height: ${(props) =>\n typeof props.height === \"number\"\n ? `${props.height}px`\n : props.height || \"auto\"};\n width: ${(props) =>\n typeof props.width === \"number\"\n ? `${props.width}px`\n : props.width || \"auto\"};\n min-width: ${(props) =>\n typeof props.minWidth === \"number\"\n ? `${props.minWidth}px`\n : props.minWidth || \"auto\"};\n min-height: ${(props) =>\n typeof props.minHeight === \"number\"\n ? `${props.minHeight}px`\n : props.minHeight || \"auto\"};\n max-width: ${(props) =>\n typeof props.maxWidth === \"number\"\n ? `${props.maxWidth}px`\n : props.maxWidth || \"none\"};\n max-height: ${(props) =>\n typeof props.maxHeight === \"number\"\n ? `${props.maxHeight}px`\n : props.maxHeight || \"none\"};\n\n padding: ${(props) =>\n typeof props.padding === \"number\"\n ? `${props.padding}px`\n : props.padding || 0};\n ${(props) =>\n props.paddingHorizontal &&\n `\n padding-left: ${typeof props.paddingHorizontal === \"number\" ? `${props.paddingHorizontal}px` : props.paddingHorizontal};\n padding-right: ${typeof props.paddingHorizontal === \"number\" ? `${props.paddingHorizontal}px` : props.paddingHorizontal};\n `}\n ${(props) =>\n props.paddingVertical &&\n `\n padding-top: ${typeof props.paddingVertical === \"number\" ? `${props.paddingVertical}px` : props.paddingVertical};\n padding-bottom: ${typeof props.paddingVertical === \"number\" ? `${props.paddingVertical}px` : props.paddingVertical};\n `}\n ${(props) =>\n props.paddingTop !== undefined &&\n `padding-top: ${typeof props.paddingTop === \"number\" ? `${props.paddingTop}px` : props.paddingTop};`}\n ${(props) =>\n props.paddingBottom !== undefined &&\n `padding-bottom: ${typeof props.paddingBottom === \"number\" ? `${props.paddingBottom}px` : props.paddingBottom};`}\n ${(props) =>\n props.paddingLeft !== undefined &&\n `padding-left: ${typeof props.paddingLeft === \"number\" ? `${props.paddingLeft}px` : props.paddingLeft};`}\n ${(props) =>\n props.paddingRight !== undefined &&\n `padding-right: ${typeof props.paddingRight === \"number\" ? `${props.paddingRight}px` : props.paddingRight};`}\n\n margin: ${(props) =>\n typeof props.margin === \"number\" ? `${props.margin}px` : props.margin || 0};\n ${(props) =>\n props.marginTop !== undefined &&\n `margin-top: ${typeof props.marginTop === \"number\" ? `${props.marginTop}px` : props.marginTop};`}\n ${(props) =>\n props.marginBottom !== undefined &&\n `margin-bottom: ${typeof props.marginBottom === \"number\" ? `${props.marginBottom}px` : props.marginBottom};`}\n ${(props) =>\n props.marginLeft !== undefined &&\n `margin-left: ${typeof props.marginLeft === \"number\" ? `${props.marginLeft}px` : props.marginLeft};`}\n ${(props) =>\n props.marginRight !== undefined &&\n `margin-right: ${typeof props.marginRight === \"number\" ? `${props.marginRight}px` : props.marginRight};`}\n\n flex-direction: ${(props) => props.flexDirection || \"column\"};\n flex-wrap: ${(props) => props.flexWrap || \"nowrap\"};\n align-items: ${(props) => props.alignItems || \"stretch\"};\n justify-content: ${(props) => props.justifyContent || \"flex-start\"};\n cursor: ${(props) =>\n props.cursor\n ? props.cursor\n : props.onClick || props.onPress\n ? \"pointer\"\n : \"inherit\"};\n position: ${(props) => props.position || \"static\"};\n top: ${(props) =>\n typeof props.top === \"number\" ? `${props.top}px` : props.top};\n bottom: ${(props) =>\n typeof props.bottom === \"number\" ? `${props.bottom}px` : props.bottom};\n left: ${(props) =>\n typeof props.left === \"number\" ? `${props.left}px` : props.left};\n right: ${(props) =>\n typeof props.right === \"number\" ? `${props.right}px` : props.right};\n flex: ${(props) => props.flex};\n flex-shrink: ${(props) => props.flexShrink ?? 1};\n gap: ${(props) =>\n typeof props.gap === \"number\" ? `${props.gap}px` : props.gap || 0};\n align-self: ${(props) => props.alignSelf || \"auto\"};\n overflow: ${(props) => props.overflow || \"visible\"};\n overflow-x: ${(props) => props.overflowX || \"visible\"};\n overflow-y: ${(props) => props.overflowY || \"visible\"};\n z-index: ${(props) => props.zIndex};\n opacity: ${(props) => (props.disabled ? 0.5 : 1)};\n pointer-events: ${(props) => (props.disabled ? \"none\" : \"auto\")};\n\n &:hover {\n ${(props) =>\n props.hoverStyle?.backgroundColor &&\n `background-color: ${props.hoverStyle.backgroundColor};`}\n ${(props) =>\n props.hoverStyle?.borderColor &&\n `border-color: ${props.hoverStyle.borderColor};`}\n }\n\n &:active {\n ${(props) =>\n props.pressStyle?.backgroundColor &&\n `background-color: ${props.pressStyle.backgroundColor};`}\n }\n`;\n\nexport const Box = React.forwardRef<\n HTMLDivElement | HTMLButtonElement,\n BoxProps\n>(\n (\n {\n children,\n onPress,\n onKeyDown,\n onKeyUp,\n role,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-current\": ariaCurrent,\n \"aria-disabled\": ariaDisabled,\n \"aria-live\": ariaLive,\n \"aria-busy\": ariaBusy,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-expanded\": ariaExpanded,\n \"aria-haspopup\": ariaHasPopup,\n \"aria-pressed\": ariaPressed,\n \"aria-controls\": ariaControls,\n tabIndex,\n as,\n src,\n alt,\n onError,\n onLoad,\n type,\n disabled,\n id,\n testID,\n \"data-testid\": dataTestId,\n ...props\n },\n ref\n ) => {\n // Handle as=\"img\" for rendering images with proper border-radius\n if (as === \"img\" && src) {\n return (\n <img\n src={src}\n alt={alt || \"\"}\n onError={onError}\n onLoad={onLoad}\n style={{\n display: \"block\",\n objectFit: \"cover\",\n width:\n typeof props.width === \"number\"\n ? `${props.width}px`\n : props.width,\n height:\n typeof props.height === \"number\"\n ? `${props.height}px`\n : props.height,\n borderRadius:\n typeof props.borderRadius === \"number\"\n ? `${props.borderRadius}px`\n : props.borderRadius,\n position: props.position,\n top: typeof props.top === \"number\" ? `${props.top}px` : props.top,\n left:\n typeof props.left === \"number\" ? `${props.left}px` : props.left,\n right:\n typeof props.right === \"number\"\n ? `${props.right}px`\n : props.right,\n bottom:\n typeof props.bottom === \"number\"\n ? `${props.bottom}px`\n : props.bottom,\n }}\n />\n );\n }\n\n return (\n <StyledBox\n ref={ref}\n elementType={as}\n id={id}\n type={as === \"button\" ? type || \"button\" : undefined}\n disabled={as === \"button\" ? disabled : undefined}\n onClick={onPress}\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n role={role}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-current={ariaCurrent}\n aria-disabled={ariaDisabled}\n aria-busy={ariaBusy}\n aria-describedby={ariaDescribedBy}\n aria-expanded={ariaExpanded}\n aria-haspopup={ariaHasPopup}\n aria-pressed={ariaPressed}\n aria-controls={ariaControls}\n aria-live={ariaLive}\n tabIndex={tabIndex !== undefined ? tabIndex : undefined}\n data-testid={dataTestId || testID}\n {...props}\n >\n {children}\n </StyledBox>\n );\n }\n);\n\nBox.displayName = \"Box\";\n","import React from \"react\";\nimport isPropValid from \"@emotion/is-prop-valid\";\n\n// Props that @emotion/is-prop-valid incorrectly treats as valid HTML.\n// These are React Native or component-specific props that match\n// valid HTML patterns (on* event handlers, SVG attributes).\nexport const ADDITIONAL_BLOCKED_PROPS = new Set([\n // RN-only event handlers (pass isPropValid's on* pattern)\n \"onPress\",\n \"onChangeText\",\n \"onLayout\",\n \"onMoveShouldSetResponder\",\n \"onResponderGrant\",\n \"onResponderMove\",\n \"onResponderRelease\",\n \"onResponderTerminate\",\n // SVG attributes that pass isPropValid\n \"strokeWidth\",\n // CSS properties that pass isPropValid but are used as component props\n \"overflow\",\n \"cursor\",\n \"fontSize\",\n \"fontWeight\",\n \"fontFamily\",\n \"textDecoration\",\n]);\n\nfunction shouldForwardProp(key: string): boolean {\n if (ADDITIONAL_BLOCKED_PROPS.has(key)) return false;\n return isPropValid(key);\n}\n\n/**\n * Creates a React component that renders the given HTML tag\n * but filters out non-HTML props before they reach the DOM.\n *\n * Uses @emotion/is-prop-valid (same library styled-components v4\n * uses internally) to automatically block invalid HTML attributes,\n * plus a small blocklist for false positives (RN on* handlers, SVG attrs).\n *\n * Usage: `const FilteredDiv = createFilteredElement(\"div\");`\n * Then: `const StyledBox = styled(FilteredDiv)<BoxProps>\\`...\\`;`\n *\n * styled-components can still read ALL props for CSS interpolation,\n * but only valid HTML attributes are forwarded to the DOM element.\n */\nexport function createFilteredElement(defaultTag: string) {\n const Component = React.forwardRef<HTMLElement, Record<string, unknown>>(\n ({ children, elementType, ...props }, ref) => {\n const Tag = (elementType as string) || defaultTag;\n const htmlProps: Record<string, unknown> = {};\n for (const key of Object.keys(props)) {\n if (shouldForwardProp(key)) {\n htmlProps[key] = props[key];\n }\n }\n return React.createElement(\n Tag,\n { ref, ...htmlProps },\n children as React.ReactNode\n );\n }\n );\n Component.displayName = `Filtered(${defaultTag})`;\n return Component;\n}\n","function memoize(fn) {\n var cache = {};\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport default memoize;\n","import memoize from '@emotion/memoize';\n\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|inert|itemProp|itemScope|itemType|itemID|itemRef|on|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar index = memoize(function (prop) {\n return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n /* o */\n && prop.charCodeAt(1) === 110\n /* n */\n && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\nexport default index;\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 children: ReactNode;\n}\n\nexport const SidebarGroup: React.FC<SidebarGroupProps> = ({\n label,\n dataId,\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 >\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 { OpenIn } 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 $pin?: boolean;\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.$pin ? \"12px\" : `${p.$size}px`)};\n height: ${(p) => (p.$pin ? \"12px\" : `${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 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 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 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 {icon && !isNested && (\n <IconBox $size={sizing.iconSize} $pin={isPinned}>\n {icon}\n </IconBox>\n )}\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 {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"],"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_react","import_styled_components","import_react","React","import_jsx_runtime","styled","React","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"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.tsx","../../src/Sidebar.tsx","../../src/SidebarContext.tsx","../../src/SidebarCollapsed.tsx","../../src/HideSidebarIcon.tsx","../../src/SidebarContent.tsx","../../../../foundation/primitives-web/src/Box.tsx","../../../../foundation/primitives-web/src/filterDOMProps.ts","../../../../../node_modules/@emotion/memoize/dist/memoize.esm.js","../../../../../node_modules/@emotion/is-prop-valid/dist/is-prop-valid.esm.js","../../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 styled from \"styled-components\";\nimport type { BoxProps } from \"@xsolla/xui-primitives-core\";\nimport { createFilteredElement } from \"./filterDOMProps\";\n\nconst FilteredDiv = createFilteredElement(\"div\");\n\nconst StyledBox = styled(FilteredDiv)<BoxProps>`\n display: flex;\n box-sizing: border-box;\n background-color: ${(props) => props.backgroundColor || \"transparent\"};\n border-color: ${(props) => props.borderColor || \"transparent\"};\n border-width: ${(props) =>\n typeof props.borderWidth === \"number\"\n ? `${props.borderWidth}px`\n : props.borderWidth || 0};\n\n ${(props) =>\n props.borderBottomWidth !== undefined &&\n `\n border-bottom-width: ${typeof props.borderBottomWidth === \"number\" ? `${props.borderBottomWidth}px` : props.borderBottomWidth};\n border-bottom-color: ${props.borderBottomColor || props.borderColor || \"transparent\"};\n border-bottom-style: solid;\n `}\n ${(props) =>\n props.borderTopWidth !== undefined &&\n `\n border-top-width: ${typeof props.borderTopWidth === \"number\" ? `${props.borderTopWidth}px` : props.borderTopWidth};\n border-top-color: ${props.borderTopColor || props.borderColor || \"transparent\"};\n border-top-style: solid;\n `}\n ${(props) =>\n props.borderLeftWidth !== undefined &&\n `\n border-left-width: ${typeof props.borderLeftWidth === \"number\" ? `${props.borderLeftWidth}px` : props.borderLeftWidth};\n border-left-color: ${props.borderLeftColor || props.borderColor || \"transparent\"};\n border-left-style: solid;\n `}\n ${(props) =>\n props.borderRightWidth !== undefined &&\n `\n border-right-width: ${typeof props.borderRightWidth === \"number\" ? `${props.borderRightWidth}px` : props.borderRightWidth};\n border-right-color: ${props.borderRightColor || props.borderColor || \"transparent\"};\n border-right-style: solid;\n `}\n\n border-style: ${(props) =>\n props.borderStyle ||\n (props.borderWidth ||\n props.borderBottomWidth ||\n props.borderTopWidth ||\n props.borderLeftWidth ||\n props.borderRightWidth\n ? \"solid\"\n : \"none\")};\n border-radius: ${(props) =>\n typeof props.borderRadius === \"number\"\n ? `${props.borderRadius}px`\n : props.borderRadius || 0};\n height: ${(props) =>\n typeof props.height === \"number\"\n ? `${props.height}px`\n : props.height || \"auto\"};\n width: ${(props) =>\n typeof props.width === \"number\"\n ? `${props.width}px`\n : props.width || \"auto\"};\n min-width: ${(props) =>\n typeof props.minWidth === \"number\"\n ? `${props.minWidth}px`\n : props.minWidth || \"auto\"};\n min-height: ${(props) =>\n typeof props.minHeight === \"number\"\n ? `${props.minHeight}px`\n : props.minHeight || \"auto\"};\n max-width: ${(props) =>\n typeof props.maxWidth === \"number\"\n ? `${props.maxWidth}px`\n : props.maxWidth || \"none\"};\n max-height: ${(props) =>\n typeof props.maxHeight === \"number\"\n ? `${props.maxHeight}px`\n : props.maxHeight || \"none\"};\n\n padding: ${(props) =>\n typeof props.padding === \"number\"\n ? `${props.padding}px`\n : props.padding || 0};\n ${(props) =>\n props.paddingHorizontal &&\n `\n padding-left: ${typeof props.paddingHorizontal === \"number\" ? `${props.paddingHorizontal}px` : props.paddingHorizontal};\n padding-right: ${typeof props.paddingHorizontal === \"number\" ? `${props.paddingHorizontal}px` : props.paddingHorizontal};\n `}\n ${(props) =>\n props.paddingVertical &&\n `\n padding-top: ${typeof props.paddingVertical === \"number\" ? `${props.paddingVertical}px` : props.paddingVertical};\n padding-bottom: ${typeof props.paddingVertical === \"number\" ? `${props.paddingVertical}px` : props.paddingVertical};\n `}\n ${(props) =>\n props.paddingTop !== undefined &&\n `padding-top: ${typeof props.paddingTop === \"number\" ? `${props.paddingTop}px` : props.paddingTop};`}\n ${(props) =>\n props.paddingBottom !== undefined &&\n `padding-bottom: ${typeof props.paddingBottom === \"number\" ? `${props.paddingBottom}px` : props.paddingBottom};`}\n ${(props) =>\n props.paddingLeft !== undefined &&\n `padding-left: ${typeof props.paddingLeft === \"number\" ? `${props.paddingLeft}px` : props.paddingLeft};`}\n ${(props) =>\n props.paddingRight !== undefined &&\n `padding-right: ${typeof props.paddingRight === \"number\" ? `${props.paddingRight}px` : props.paddingRight};`}\n\n margin: ${(props) =>\n typeof props.margin === \"number\" ? `${props.margin}px` : props.margin || 0};\n ${(props) =>\n props.marginTop !== undefined &&\n `margin-top: ${typeof props.marginTop === \"number\" ? `${props.marginTop}px` : props.marginTop};`}\n ${(props) =>\n props.marginBottom !== undefined &&\n `margin-bottom: ${typeof props.marginBottom === \"number\" ? `${props.marginBottom}px` : props.marginBottom};`}\n ${(props) =>\n props.marginLeft !== undefined &&\n `margin-left: ${typeof props.marginLeft === \"number\" ? `${props.marginLeft}px` : props.marginLeft};`}\n ${(props) =>\n props.marginRight !== undefined &&\n `margin-right: ${typeof props.marginRight === \"number\" ? `${props.marginRight}px` : props.marginRight};`}\n\n flex-direction: ${(props) => props.flexDirection || \"column\"};\n flex-wrap: ${(props) => props.flexWrap || \"nowrap\"};\n align-items: ${(props) => props.alignItems || \"stretch\"};\n justify-content: ${(props) => props.justifyContent || \"flex-start\"};\n cursor: ${(props) =>\n props.cursor\n ? props.cursor\n : props.onClick || props.onPress\n ? \"pointer\"\n : \"inherit\"};\n position: ${(props) => props.position || \"static\"};\n top: ${(props) =>\n typeof props.top === \"number\" ? `${props.top}px` : props.top};\n bottom: ${(props) =>\n typeof props.bottom === \"number\" ? `${props.bottom}px` : props.bottom};\n left: ${(props) =>\n typeof props.left === \"number\" ? `${props.left}px` : props.left};\n right: ${(props) =>\n typeof props.right === \"number\" ? `${props.right}px` : props.right};\n flex: ${(props) => props.flex};\n flex-shrink: ${(props) => props.flexShrink ?? 1};\n gap: ${(props) =>\n typeof props.gap === \"number\" ? `${props.gap}px` : props.gap || 0};\n align-self: ${(props) => props.alignSelf || \"auto\"};\n overflow: ${(props) => props.overflow || \"visible\"};\n overflow-x: ${(props) => props.overflowX || \"visible\"};\n overflow-y: ${(props) => props.overflowY || \"visible\"};\n z-index: ${(props) => props.zIndex};\n opacity: ${(props) => (props.disabled ? 0.5 : 1)};\n pointer-events: ${(props) => (props.disabled ? \"none\" : \"auto\")};\n\n &:hover {\n ${(props) =>\n props.hoverStyle?.backgroundColor &&\n `background-color: ${props.hoverStyle.backgroundColor};`}\n ${(props) =>\n props.hoverStyle?.borderColor &&\n `border-color: ${props.hoverStyle.borderColor};`}\n }\n\n &:active {\n ${(props) =>\n props.pressStyle?.backgroundColor &&\n `background-color: ${props.pressStyle.backgroundColor};`}\n }\n`;\n\nexport const Box = React.forwardRef<\n HTMLDivElement | HTMLButtonElement,\n BoxProps\n>(\n (\n {\n children,\n onPress,\n onKeyDown,\n onKeyUp,\n role,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-current\": ariaCurrent,\n \"aria-disabled\": ariaDisabled,\n \"aria-live\": ariaLive,\n \"aria-busy\": ariaBusy,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-expanded\": ariaExpanded,\n \"aria-haspopup\": ariaHasPopup,\n \"aria-pressed\": ariaPressed,\n \"aria-controls\": ariaControls,\n tabIndex,\n as,\n src,\n alt,\n onError,\n onLoad,\n type,\n disabled,\n id,\n testID,\n \"data-testid\": dataTestId,\n ...props\n },\n ref\n ) => {\n // Handle as=\"img\" for rendering images with proper border-radius\n if (as === \"img\" && src) {\n return (\n <img\n src={src}\n alt={alt || \"\"}\n onError={onError}\n onLoad={onLoad}\n style={{\n display: \"block\",\n objectFit: \"cover\",\n width:\n typeof props.width === \"number\"\n ? `${props.width}px`\n : props.width,\n height:\n typeof props.height === \"number\"\n ? `${props.height}px`\n : props.height,\n borderRadius:\n typeof props.borderRadius === \"number\"\n ? `${props.borderRadius}px`\n : props.borderRadius,\n position: props.position,\n top: typeof props.top === \"number\" ? `${props.top}px` : props.top,\n left:\n typeof props.left === \"number\" ? `${props.left}px` : props.left,\n right:\n typeof props.right === \"number\"\n ? `${props.right}px`\n : props.right,\n bottom:\n typeof props.bottom === \"number\"\n ? `${props.bottom}px`\n : props.bottom,\n }}\n />\n );\n }\n\n return (\n <StyledBox\n ref={ref}\n elementType={as}\n id={id}\n type={as === \"button\" ? type || \"button\" : undefined}\n disabled={as === \"button\" ? disabled : undefined}\n onClick={onPress}\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n role={role}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-current={ariaCurrent}\n aria-disabled={ariaDisabled}\n aria-busy={ariaBusy}\n aria-describedby={ariaDescribedBy}\n aria-expanded={ariaExpanded}\n aria-haspopup={ariaHasPopup}\n aria-pressed={ariaPressed}\n aria-controls={ariaControls}\n aria-live={ariaLive}\n tabIndex={tabIndex !== undefined ? tabIndex : undefined}\n data-testid={dataTestId || testID}\n {...props}\n >\n {children}\n </StyledBox>\n );\n }\n);\n\nBox.displayName = \"Box\";\n","import React from \"react\";\nimport isPropValid from \"@emotion/is-prop-valid\";\n\n// Props that @emotion/is-prop-valid incorrectly treats as valid HTML.\n// These are React Native or component-specific props that match\n// valid HTML patterns (on* event handlers, SVG attributes).\nexport const ADDITIONAL_BLOCKED_PROPS = new Set([\n // RN-only event handlers (pass isPropValid's on* pattern)\n \"onPress\",\n \"onChangeText\",\n \"onLayout\",\n \"onMoveShouldSetResponder\",\n \"onResponderGrant\",\n \"onResponderMove\",\n \"onResponderRelease\",\n \"onResponderTerminate\",\n // SVG attributes that pass isPropValid\n \"strokeWidth\",\n // CSS properties that pass isPropValid but are used as component props\n \"overflow\",\n \"cursor\",\n \"fontSize\",\n \"fontWeight\",\n \"fontFamily\",\n \"textDecoration\",\n]);\n\nfunction shouldForwardProp(key: string): boolean {\n if (ADDITIONAL_BLOCKED_PROPS.has(key)) return false;\n return isPropValid(key);\n}\n\n/**\n * Creates a React component that renders the given HTML tag\n * but filters out non-HTML props before they reach the DOM.\n *\n * Uses @emotion/is-prop-valid (same library styled-components v4\n * uses internally) to automatically block invalid HTML attributes,\n * plus a small blocklist for false positives (RN on* handlers, SVG attrs).\n *\n * Usage: `const FilteredDiv = createFilteredElement(\"div\");`\n * Then: `const StyledBox = styled(FilteredDiv)<BoxProps>\\`...\\`;`\n *\n * styled-components can still read ALL props for CSS interpolation,\n * but only valid HTML attributes are forwarded to the DOM element.\n */\nexport function createFilteredElement(defaultTag: string) {\n const Component = React.forwardRef<HTMLElement, Record<string, unknown>>(\n ({ children, elementType, ...props }, ref) => {\n const Tag = (elementType as string) || defaultTag;\n const htmlProps: Record<string, unknown> = {};\n for (const key of Object.keys(props)) {\n if (shouldForwardProp(key)) {\n htmlProps[key] = props[key];\n }\n }\n return React.createElement(\n Tag,\n { ref, ...htmlProps },\n children as React.ReactNode\n );\n }\n );\n Component.displayName = `Filtered(${defaultTag})`;\n return Component;\n}\n","function memoize(fn) {\n var cache = {};\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport default memoize;\n","import memoize from '@emotion/memoize';\n\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|inert|itemProp|itemScope|itemType|itemID|itemRef|on|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar index = memoize(function (prop) {\n return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n /* o */\n && prop.charCodeAt(1) === 110\n /* n */\n && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\nexport default index;\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_react","import_styled_components","import_react","React","import_jsx_runtime","styled","React","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"]}
|