@xsolla/xui-table 0.157.0 → 0.158.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xsolla/xui-table",
3
- "version": "0.157.0",
3
+ "version": "0.158.0",
4
4
  "main": "./web/index.js",
5
5
  "module": "./web/index.mjs",
6
6
  "types": "./web/index.d.ts",
@@ -13,9 +13,9 @@
13
13
  "test:coverage": "vitest run --coverage"
14
14
  },
15
15
  "dependencies": {
16
- "@xsolla/xui-core": "0.157.0",
17
- "@xsolla/xui-icons-base": "0.157.0",
18
- "@xsolla/xui-primitives-core": "0.157.0"
16
+ "@xsolla/xui-core": "0.158.0",
17
+ "@xsolla/xui-icons-base": "0.158.0",
18
+ "@xsolla/xui-primitives-core": "0.158.0"
19
19
  },
20
20
  "peerDependencies": {
21
21
  "react": ">=16.8.0",
package/web/index.js CHANGED
@@ -249,8 +249,7 @@ var Box = import_react2.default.forwardRef(
249
249
  top: typeof props.top === "number" ? `${props.top}px` : props.top,
250
250
  left: typeof props.left === "number" ? `${props.left}px` : props.left,
251
251
  right: typeof props.right === "number" ? `${props.right}px` : props.right,
252
- bottom: typeof props.bottom === "number" ? `${props.bottom}px` : props.bottom,
253
- ...props.style
252
+ bottom: typeof props.bottom === "number" ? `${props.bottom}px` : props.bottom
254
253
  }
255
254
  }
256
255
  );
package/web/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.tsx","../../src/Table.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","../../../../foundation/primitives-web/src/Text.tsx"],"sourcesContent":["export * from \"./Table\";\nexport * from \"./types\";\n","import React, {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n type ReactNode,\n} from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text } from \"@xsolla/xui-primitives\";\nimport { useResolvedTheme, isNative } from \"@xsolla/xui-core\";\nimport { Sort } from \"@xsolla/xui-icons-base\";\nimport {\n TableBodyProps,\n TableCaptionProps,\n TableCellProps,\n TableFooterProps,\n TableHeaderProps,\n TableHeadProps,\n TableProps,\n TableRowProps,\n} from \"./types\";\n\n/**\n * Tracks which rowgroup the current <Table.Row> sits inside, so the row can\n * pick the right sizing (header rows are slightly taller / styled\n * differently per `theme.sizing.table`).\n */\ntype RowGroup = \"header\" | \"body\";\nconst TableRowGroupContext = createContext<RowGroup>(\"body\");\n\n/**\n * Tracks whether the parent <Table.Row> is hovered or has focus inside it.\n * Cells that opt into `revealOnHover` read this to decide whether to show\n * their content. Defaults to `true` so cells used outside a row (e.g. inside\n * <Table.Header>) are always visible.\n */\nconst RowRevealContext = createContext<{ revealed: boolean }>({\n revealed: true,\n});\n\n/**\n * Detects whether the device is hover-capable (desktop) vs touch-only (mobile).\n * On touch-only devices we always reveal action cells so they can be tapped —\n * matching the Figma spec (\"Right cell actions ... always visible on touch\n * devices\"). SSR-safe: returns `true` until mounted, which means actions stay\n * revealed on the server (no flash-of-hidden-actions on first paint).\n *\n * Table is web-only for now — on native this hook short-circuits and never\n * runs the media query.\n */\nconst useHoverCapable = (): boolean => {\n const [hoverCapable, setHoverCapable] = useState(true);\n useEffect(() => {\n if (isNative) return;\n if (typeof window === \"undefined\" || !window.matchMedia) return;\n const mq = window.matchMedia(\"(hover: hover)\");\n setHoverCapable(mq.matches);\n const onChange = (e: MediaQueryListEvent) => setHoverCapable(e.matches);\n mq.addEventListener?.(\"change\", onChange);\n return () => mq.removeEventListener?.(\"change\", onChange);\n }, []);\n return hoverCapable;\n};\n\nconst Divider: React.FC<{ color: string }> = ({ color }) => (\n <Box\n width=\"100%\"\n height={1}\n backgroundColor={color}\n style={{ flexShrink: 0 }}\n />\n);\n\nconst TableRoot = forwardRef<any, TableProps>(\n ({ children, themeMode, themeProductContext }, ref) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const sizing = theme.sizing.table;\n\n return (\n <Box\n ref={ref}\n flexDirection=\"column\"\n alignItems=\"stretch\"\n gap={sizing.containerGap}\n paddingVertical={sizing.containerPaddingVertical}\n backgroundColor={theme.colors.background.primary}\n borderRadius={sizing.containerRadius}\n width=\"100%\"\n role=\"table\"\n style={{\n color: theme.colors.content.primary,\n overflow: \"clip\",\n }}\n >\n {children}\n </Box>\n );\n }\n);\n\nTableRoot.displayName = \"Table\";\n\nconst TableCaption = forwardRef<any, TableCaptionProps>(\n ({ children, themeMode, themeProductContext, style, ...props }, ref) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const sizing = theme.sizing.table;\n\n return (\n <Box\n ref={ref}\n flexDirection=\"row\"\n alignItems=\"center\"\n paddingHorizontal={sizing.headerRowPaddingHorizontal}\n width=\"100%\"\n // <caption> isn't a valid ARIA role; consumers can pass role=\"region\"\n // + aria-label via ...props if they want it announced.\n {...props}\n style={style}\n >\n {typeof children === \"string\" || typeof children === \"number\" ? (\n <Text\n fontSize={sizing.captionFontSize}\n lineHeight={sizing.captionLineHeight}\n color={theme.colors.content.secondary}\n >\n {children}\n </Text>\n ) : (\n children\n )}\n </Box>\n );\n }\n);\n\nTableCaption.displayName = \"Table.Caption\";\n\nconst TableHeader = forwardRef<any, TableHeaderProps>(\n ({ children, themeMode, themeProductContext, style, ...props }, ref) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n\n return (\n <TableRowGroupContext.Provider value=\"header\">\n <Box\n ref={ref}\n flexDirection=\"column\"\n alignItems=\"stretch\"\n width=\"100%\"\n role=\"rowgroup\"\n {...props}\n style={{\n position: \"sticky\",\n top: 0,\n zIndex: 1,\n backgroundColor: theme.colors.background.primary,\n ...style,\n }}\n >\n {children}\n <Divider color={theme.colors.border.secondary} />\n </Box>\n </TableRowGroupContext.Provider>\n );\n }\n);\n\nTableHeader.displayName = \"Table.Header\";\n\nconst TableBody = forwardRef<any, TableBodyProps>(\n (\n { children, style, minRows, themeMode, themeProductContext, ...props },\n ref\n ) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const sizing = theme.sizing.table;\n\n // Each row paints a 1px divider after it (rendered as a sibling Box\n // inside Table.Row), except the very last row in the body which\n // hides its divider. So a fully filled body of N rows is\n // `N × rowHeight + (N - 1) × 1px`.\n const DIVIDER_HEIGHT = 1;\n const computedMinHeight = minRows\n ? minRows * sizing.rowHeight + (minRows - 1) * DIVIDER_HEIGHT\n : undefined;\n\n // Decide whether to auto-pad with placeholder slots. We only pad\n // when every direct child is a <Table.Row>; consumers using a\n // single non-row block (e.g. a custom \"no results\" panel) get just\n // the reserved min-height so they can stretch their content to fill.\n let renderedChildren: ReactNode = children;\n if (minRows) {\n const childArray = React.Children.toArray(children);\n const hasOnlyRowChildren =\n childArray.length > 0 &&\n childArray.every((c) => React.isValidElement(c) && c.type === TableRow);\n const realRowCount = hasOnlyRowChildren ? childArray.length : 0;\n const placeholderCount = hasOnlyRowChildren\n ? Math.max(0, minRows - realRowCount)\n : 0;\n\n if (placeholderCount > 0) {\n // Override the last real row's `hideDivider` so the body always\n // ends with a divider-less slot — matching how a full page hides\n // the last row's divider.\n const patchedRows = childArray.map((child, i) => {\n if (!React.isValidElement(child)) return child;\n const isLastRealRow = i === realRowCount - 1;\n return React.cloneElement(child, {\n hideDivider: isLastRealRow\n ? false\n : (child.props as any).hideDivider,\n } as any);\n });\n\n const placeholders = Array.from({ length: placeholderCount }).map(\n (_, i) => {\n const isLast = i === placeholderCount - 1;\n return (\n <Box\n key={`__table-body-placeholder-${i}`}\n aria-hidden\n style={{\n height: isLast\n ? sizing.rowHeight\n : sizing.rowHeight + DIVIDER_HEIGHT,\n flexShrink: 0,\n }}\n />\n );\n }\n );\n\n renderedChildren = (\n <>\n {patchedRows}\n {placeholders}\n </>\n );\n }\n }\n\n return (\n <TableRowGroupContext.Provider value=\"body\">\n <Box\n ref={ref}\n flexDirection=\"column\"\n alignItems=\"stretch\"\n width=\"100%\"\n role=\"rowgroup\"\n {...props}\n style={{\n ...(computedMinHeight !== undefined && {\n minHeight: computedMinHeight,\n }),\n ...style,\n }}\n >\n {renderedChildren}\n </Box>\n </TableRowGroupContext.Provider>\n );\n }\n);\n\nTableBody.displayName = \"Table.Body\";\n\nconst TableRow = forwardRef<any, TableRowProps>(\n (\n {\n children,\n hoverable: hoverableProp,\n selected,\n hideDivider: hideDividerProp,\n onPress,\n themeMode,\n themeProductContext,\n style,\n onMouseEnter,\n onMouseLeave,\n onFocus,\n onBlur,\n onKeyDown,\n ...props\n },\n ref\n ) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const sizing = theme.sizing.table;\n const rowGroup = useContext(TableRowGroupContext);\n const hoverCapable = useHoverCapable();\n\n const isHeaderRow = rowGroup === \"header\";\n\n // Header rows are not hoverable by default and don't render a divider\n // (Header already paints its own top/bottom dividers).\n const hoverable = hoverableProp ?? !isHeaderRow;\n const hideDivider = hideDividerProp ?? isHeaderRow;\n\n // Track hover + focus-within so descendant <Table.Cell revealOnHover>\n // cells can decide whether to show themselves. Single re-render per\n // hover/focus change, scoped to this row only.\n const [hovered, setHovered] = useState(false);\n const [focusedWithin, setFocusedWithin] = useState(false);\n\n // On touch-only devices the reveal logic short-circuits to \"always\n // visible\" — matches the Figma spec.\n const revealed = hoverCapable ? hovered || focusedWithin : true;\n\n const handleMouseEnter = useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n setHovered(true);\n onMouseEnter?.(e);\n },\n [onMouseEnter]\n );\n const handleMouseLeave = useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n setHovered(false);\n onMouseLeave?.(e);\n },\n [onMouseLeave]\n );\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLElement>) => {\n setFocusedWithin(true);\n onFocus?.(e);\n },\n [onFocus]\n );\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLElement>) => {\n // When focus moves between two children of this row the blur fires\n // here but the row is still focus-within — keep the state truthy.\n if (\n e.relatedTarget instanceof Node &&\n e.currentTarget.contains(e.relatedTarget)\n ) {\n onBlur?.(e);\n return;\n }\n setFocusedWithin(false);\n onBlur?.(e);\n },\n [onBlur]\n );\n\n // Rows opt into keyboard activation only when they are interactive\n // (i.e. consumer passed `onPress`). Enter/Space mirror native button\n // behavior; Space is preventDefault'd so the page doesn't scroll.\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<Element>) => {\n onKeyDown?.(e);\n if (!onPress || e.defaultPrevented) return;\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onPress();\n }\n },\n [onKeyDown, onPress]\n );\n\n const baseBg = selected\n ? theme.colors.background.secondary\n : theme.colors.background.primary;\n\n const rowHeight = isHeaderRow ? sizing.headerRowHeight : sizing.rowHeight;\n const rowPaddingHorizontal = isHeaderRow\n ? sizing.headerRowPaddingHorizontal\n : sizing.rowPaddingHorizontal;\n\n const ctxValue = useMemo(() => ({ revealed }), [revealed]);\n\n return (\n <RowRevealContext.Provider value={ctxValue}>\n <Box\n ref={ref}\n flexDirection=\"row\"\n alignItems=\"center\"\n height={rowHeight}\n paddingHorizontal={rowPaddingHorizontal}\n width=\"100%\"\n gap={sizing.cellGap}\n backgroundColor={baseBg}\n cursor={onPress ? \"pointer\" : undefined}\n hoverStyle={\n hoverable\n ? { backgroundColor: theme.colors.background.secondary }\n : undefined\n }\n onPress={onPress}\n role=\"row\"\n tabIndex={onPress ? 0 : undefined}\n aria-selected={selected || undefined}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onFocus={handleFocus}\n onBlur={handleBlur}\n {...props}\n onKeyDown={handleKeyDown}\n style={style}\n >\n {children}\n </Box>\n {!hideDivider && <Divider color={theme.colors.border.secondary} />}\n </RowRevealContext.Provider>\n );\n }\n);\n\nTableRow.displayName = \"Table.Row\";\n\nconst positionToFlex = (position: TableCellProps[\"position\"]) => {\n switch (position) {\n case \"left\":\n return { flexShrink: 0 };\n case \"right\":\n return { flexShrink: 0, marginLeft: \"auto\" };\n default:\n return {};\n }\n};\n\nconst alignToJustify = (align: TableCellProps[\"align\"]) => {\n switch (align) {\n case \"right\":\n return \"flex-end\" as const;\n case \"center\":\n return \"center\" as const;\n default:\n return \"flex-start\" as const;\n }\n};\n\nconst TableCell = forwardRef<any, TableCellProps>(\n (\n {\n children,\n align = \"left\",\n position = \"default\",\n width,\n grow,\n revealOnHover,\n themeMode,\n themeProductContext,\n style,\n ...props\n },\n ref\n ) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const sizing = theme.sizing.table;\n const { revealed } = useContext(RowRevealContext);\n\n const positionStyle = useMemo(() => positionToFlex(position), [position]);\n\n // Per Figma spec: hide via opacity + pointer-events (NOT visibility) so\n // keyboard Tab still focuses the descendants. Focusing a descendant flips\n // `revealed` to true via RowRevealContext, restoring pointer-events.\n const revealStyle: React.CSSProperties =\n revealOnHover && !revealed\n ? { opacity: 0, pointerEvents: \"none\" }\n : revealOnHover\n ? { opacity: 1, transition: \"opacity 0.15s ease\" }\n : {};\n\n return (\n <Box\n ref={ref}\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent={alignToJustify(align)}\n gap={8}\n height=\"100%\"\n width={width}\n role=\"cell\"\n {...props}\n style={{\n flex: width != null ? \"0 0 auto\" : (grow ?? 1),\n minWidth: 0,\n ...positionStyle,\n ...revealStyle,\n ...style,\n }}\n >\n {typeof children === \"string\" || typeof children === \"number\" ? (\n <Text\n fontSize={sizing.cellFontSize}\n lineHeight={sizing.cellLineHeight}\n color={theme.colors.content.primary}\n // truncation\n style={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n maxWidth: \"100%\",\n }}\n >\n {children}\n </Text>\n ) : (\n children\n )}\n </Box>\n );\n }\n);\n\nTableCell.displayName = \"Table.Cell\";\n\n/**\n * Sort indicator. Uses the `Sort` line icon from `@xsolla/xui-icons-base`\n * (matches the Figma spec — a stacked up/down chevron). The icon is the\n * same in all three states; opacity differentiates \"sortable but not\n * active\" (`none`, 40%) from \"active sort\" (`ascending` / `descending`,\n * 100%). Direction is communicated to assistive tech via `aria-sort` on\n * the parent <Table.Head>.\n */\nconst SortIcon: React.FC<{\n direction: \"ascending\" | \"descending\" | \"none\";\n color: string;\n size: number;\n}> = ({ direction, color, size }) => (\n <Box\n style={{\n flexShrink: 0,\n opacity: direction === \"none\" ? 0.4 : 1,\n transition: \"opacity 0.15s ease\",\n }}\n >\n <Sort variant=\"line\" size={size} color={color} aria-hidden />\n </Box>\n);\n\nconst TableHead = forwardRef<any, TableHeadProps>(\n (\n {\n children,\n align = \"left\",\n position = \"default\",\n width,\n grow,\n sort,\n onSortToggle,\n themeMode,\n themeProductContext,\n style,\n ...props\n },\n ref\n ) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const sizing = theme.sizing.table;\n\n const positionStyle = useMemo(() => positionToFlex(position), [position]);\n const sortable = sort != null;\n\n const ariaSort: \"ascending\" | \"descending\" | \"none\" | undefined = sortable\n ? sort\n : undefined;\n\n return (\n <Box\n ref={ref}\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent={alignToJustify(align)}\n gap={sizing.headerCellGap}\n height=\"100%\"\n width={width}\n role=\"columnheader\"\n aria-sort={ariaSort}\n cursor={sortable ? \"pointer\" : undefined}\n onPress={sortable ? onSortToggle : undefined}\n {...props}\n style={{\n flex: width != null ? \"0 0 auto\" : (grow ?? 1),\n minWidth: 0,\n ...positionStyle,\n ...style,\n }}\n >\n {sortable && (\n <SortIcon\n direction={sort}\n color={theme.colors.content.secondary}\n size={sizing.headerCellFontSize + 2}\n />\n )}\n {typeof children === \"string\" || typeof children === \"number\" ? (\n <Text\n fontSize={sizing.headerCellFontSize}\n lineHeight={sizing.headerCellLineHeight}\n color={theme.colors.content.secondary}\n fontWeight=\"500\"\n style={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {children}\n </Text>\n ) : (\n children\n )}\n </Box>\n );\n }\n);\n\nTableHead.displayName = \"Table.Head\";\n\nconst TableFooter = forwardRef<any, TableFooterProps>(\n ({ children, style, ...props }, ref) => {\n const { theme } = useResolvedTheme();\n const sizing = theme.sizing.table;\n\n return (\n <Box\n ref={ref}\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent=\"center\"\n gap={sizing.paginationGap}\n paddingHorizontal={sizing.paginationPaddingHorizontal}\n width=\"100%\"\n {...props}\n style={style}\n >\n {children}\n </Box>\n );\n }\n);\n\nTableFooter.displayName = \"Table.Footer\";\n\nexport const Table = Object.assign(TableRoot, {\n Caption: TableCaption,\n Header: TableHeader,\n Body: TableBody,\n Footer: TableFooter,\n Row: TableRow,\n Head: TableHead,\n Cell: TableCell,\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 ...props.style,\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 from \"react\";\nimport styled from \"styled-components\";\nimport { TextProps } from \"@xsolla/xui-primitives-core\";\nimport { createFilteredElement } from \"./filterDOMProps\";\n\nconst FilteredSpan = createFilteredElement(\"span\");\n\nconst StyledText = styled(FilteredSpan)<TextProps>`\n color: ${(props) => props.color || \"inherit\"};\n font-size: ${(props) =>\n typeof props.fontSize === \"number\"\n ? `${props.fontSize}px`\n : props.fontSize || \"inherit\"};\n font-weight: ${(props) => props.fontWeight || \"normal\"};\n font-family: ${(props) =>\n props.fontFamily ||\n '\"Aktiv Grotesk\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif'};\n line-height: ${(props) =>\n typeof props.lineHeight === \"number\"\n ? `${props.lineHeight}px`\n : props.lineHeight || \"inherit\"};\n white-space: ${(props) => props.whiteSpace || \"normal\"};\n text-align: ${(props) => props.textAlign || \"inherit\"};\n text-decoration: ${(props) => props.textDecoration || \"none\"};\n`;\n\nexport const Text: React.FC<TextProps> = ({\n style,\n className,\n id,\n role,\n numberOfLines: _numberOfLines,\n ...props\n}) => {\n return (\n <StyledText\n {...props}\n style={style}\n className={className}\n id={id}\n role={role}\n />\n );\n};\n"],"mappings":"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","names":["import_react","import_react","React","styled","React","import_styled_components","import_jsx_runtime","styled","import_jsx_runtime","React"]}
1
+ {"version":3,"sources":["../../src/index.tsx","../../src/Table.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","../../../../foundation/primitives-web/src/Text.tsx"],"sourcesContent":["export * from \"./Table\";\nexport * from \"./types\";\n","import React, {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n type ReactNode,\n} from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text } from \"@xsolla/xui-primitives\";\nimport { useResolvedTheme, isNative } from \"@xsolla/xui-core\";\nimport { Sort } from \"@xsolla/xui-icons-base\";\nimport {\n TableBodyProps,\n TableCaptionProps,\n TableCellProps,\n TableFooterProps,\n TableHeaderProps,\n TableHeadProps,\n TableProps,\n TableRowProps,\n} from \"./types\";\n\n/**\n * Tracks which rowgroup the current <Table.Row> sits inside, so the row can\n * pick the right sizing (header rows are slightly taller / styled\n * differently per `theme.sizing.table`).\n */\ntype RowGroup = \"header\" | \"body\";\nconst TableRowGroupContext = createContext<RowGroup>(\"body\");\n\n/**\n * Tracks whether the parent <Table.Row> is hovered or has focus inside it.\n * Cells that opt into `revealOnHover` read this to decide whether to show\n * their content. Defaults to `true` so cells used outside a row (e.g. inside\n * <Table.Header>) are always visible.\n */\nconst RowRevealContext = createContext<{ revealed: boolean }>({\n revealed: true,\n});\n\n/**\n * Detects whether the device is hover-capable (desktop) vs touch-only (mobile).\n * On touch-only devices we always reveal action cells so they can be tapped —\n * matching the Figma spec (\"Right cell actions ... always visible on touch\n * devices\"). SSR-safe: returns `true` until mounted, which means actions stay\n * revealed on the server (no flash-of-hidden-actions on first paint).\n *\n * Table is web-only for now — on native this hook short-circuits and never\n * runs the media query.\n */\nconst useHoverCapable = (): boolean => {\n const [hoverCapable, setHoverCapable] = useState(true);\n useEffect(() => {\n if (isNative) return;\n if (typeof window === \"undefined\" || !window.matchMedia) return;\n const mq = window.matchMedia(\"(hover: hover)\");\n setHoverCapable(mq.matches);\n const onChange = (e: MediaQueryListEvent) => setHoverCapable(e.matches);\n mq.addEventListener?.(\"change\", onChange);\n return () => mq.removeEventListener?.(\"change\", onChange);\n }, []);\n return hoverCapable;\n};\n\nconst Divider: React.FC<{ color: string }> = ({ color }) => (\n <Box\n width=\"100%\"\n height={1}\n backgroundColor={color}\n style={{ flexShrink: 0 }}\n />\n);\n\nconst TableRoot = forwardRef<any, TableProps>(\n ({ children, themeMode, themeProductContext }, ref) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const sizing = theme.sizing.table;\n\n return (\n <Box\n ref={ref}\n flexDirection=\"column\"\n alignItems=\"stretch\"\n gap={sizing.containerGap}\n paddingVertical={sizing.containerPaddingVertical}\n backgroundColor={theme.colors.background.primary}\n borderRadius={sizing.containerRadius}\n width=\"100%\"\n role=\"table\"\n style={{\n color: theme.colors.content.primary,\n overflow: \"clip\",\n }}\n >\n {children}\n </Box>\n );\n }\n);\n\nTableRoot.displayName = \"Table\";\n\nconst TableCaption = forwardRef<any, TableCaptionProps>(\n ({ children, themeMode, themeProductContext, style, ...props }, ref) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const sizing = theme.sizing.table;\n\n return (\n <Box\n ref={ref}\n flexDirection=\"row\"\n alignItems=\"center\"\n paddingHorizontal={sizing.headerRowPaddingHorizontal}\n width=\"100%\"\n // <caption> isn't a valid ARIA role; consumers can pass role=\"region\"\n // + aria-label via ...props if they want it announced.\n {...props}\n style={style}\n >\n {typeof children === \"string\" || typeof children === \"number\" ? (\n <Text\n fontSize={sizing.captionFontSize}\n lineHeight={sizing.captionLineHeight}\n color={theme.colors.content.secondary}\n >\n {children}\n </Text>\n ) : (\n children\n )}\n </Box>\n );\n }\n);\n\nTableCaption.displayName = \"Table.Caption\";\n\nconst TableHeader = forwardRef<any, TableHeaderProps>(\n ({ children, themeMode, themeProductContext, style, ...props }, ref) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n\n return (\n <TableRowGroupContext.Provider value=\"header\">\n <Box\n ref={ref}\n flexDirection=\"column\"\n alignItems=\"stretch\"\n width=\"100%\"\n role=\"rowgroup\"\n {...props}\n style={{\n position: \"sticky\",\n top: 0,\n zIndex: 1,\n backgroundColor: theme.colors.background.primary,\n ...style,\n }}\n >\n {children}\n <Divider color={theme.colors.border.secondary} />\n </Box>\n </TableRowGroupContext.Provider>\n );\n }\n);\n\nTableHeader.displayName = \"Table.Header\";\n\nconst TableBody = forwardRef<any, TableBodyProps>(\n (\n { children, style, minRows, themeMode, themeProductContext, ...props },\n ref\n ) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const sizing = theme.sizing.table;\n\n // Each row paints a 1px divider after it (rendered as a sibling Box\n // inside Table.Row), except the very last row in the body which\n // hides its divider. So a fully filled body of N rows is\n // `N × rowHeight + (N - 1) × 1px`.\n const DIVIDER_HEIGHT = 1;\n const computedMinHeight = minRows\n ? minRows * sizing.rowHeight + (minRows - 1) * DIVIDER_HEIGHT\n : undefined;\n\n // Decide whether to auto-pad with placeholder slots. We only pad\n // when every direct child is a <Table.Row>; consumers using a\n // single non-row block (e.g. a custom \"no results\" panel) get just\n // the reserved min-height so they can stretch their content to fill.\n let renderedChildren: ReactNode = children;\n if (minRows) {\n const childArray = React.Children.toArray(children);\n const hasOnlyRowChildren =\n childArray.length > 0 &&\n childArray.every((c) => React.isValidElement(c) && c.type === TableRow);\n const realRowCount = hasOnlyRowChildren ? childArray.length : 0;\n const placeholderCount = hasOnlyRowChildren\n ? Math.max(0, minRows - realRowCount)\n : 0;\n\n if (placeholderCount > 0) {\n // Override the last real row's `hideDivider` so the body always\n // ends with a divider-less slot — matching how a full page hides\n // the last row's divider.\n const patchedRows = childArray.map((child, i) => {\n if (!React.isValidElement(child)) return child;\n const isLastRealRow = i === realRowCount - 1;\n return React.cloneElement(child, {\n hideDivider: isLastRealRow\n ? false\n : (child.props as any).hideDivider,\n } as any);\n });\n\n const placeholders = Array.from({ length: placeholderCount }).map(\n (_, i) => {\n const isLast = i === placeholderCount - 1;\n return (\n <Box\n key={`__table-body-placeholder-${i}`}\n aria-hidden\n style={{\n height: isLast\n ? sizing.rowHeight\n : sizing.rowHeight + DIVIDER_HEIGHT,\n flexShrink: 0,\n }}\n />\n );\n }\n );\n\n renderedChildren = (\n <>\n {patchedRows}\n {placeholders}\n </>\n );\n }\n }\n\n return (\n <TableRowGroupContext.Provider value=\"body\">\n <Box\n ref={ref}\n flexDirection=\"column\"\n alignItems=\"stretch\"\n width=\"100%\"\n role=\"rowgroup\"\n {...props}\n style={{\n ...(computedMinHeight !== undefined && {\n minHeight: computedMinHeight,\n }),\n ...style,\n }}\n >\n {renderedChildren}\n </Box>\n </TableRowGroupContext.Provider>\n );\n }\n);\n\nTableBody.displayName = \"Table.Body\";\n\nconst TableRow = forwardRef<any, TableRowProps>(\n (\n {\n children,\n hoverable: hoverableProp,\n selected,\n hideDivider: hideDividerProp,\n onPress,\n themeMode,\n themeProductContext,\n style,\n onMouseEnter,\n onMouseLeave,\n onFocus,\n onBlur,\n onKeyDown,\n ...props\n },\n ref\n ) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const sizing = theme.sizing.table;\n const rowGroup = useContext(TableRowGroupContext);\n const hoverCapable = useHoverCapable();\n\n const isHeaderRow = rowGroup === \"header\";\n\n // Header rows are not hoverable by default and don't render a divider\n // (Header already paints its own top/bottom dividers).\n const hoverable = hoverableProp ?? !isHeaderRow;\n const hideDivider = hideDividerProp ?? isHeaderRow;\n\n // Track hover + focus-within so descendant <Table.Cell revealOnHover>\n // cells can decide whether to show themselves. Single re-render per\n // hover/focus change, scoped to this row only.\n const [hovered, setHovered] = useState(false);\n const [focusedWithin, setFocusedWithin] = useState(false);\n\n // On touch-only devices the reveal logic short-circuits to \"always\n // visible\" — matches the Figma spec.\n const revealed = hoverCapable ? hovered || focusedWithin : true;\n\n const handleMouseEnter = useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n setHovered(true);\n onMouseEnter?.(e);\n },\n [onMouseEnter]\n );\n const handleMouseLeave = useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n setHovered(false);\n onMouseLeave?.(e);\n },\n [onMouseLeave]\n );\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLElement>) => {\n setFocusedWithin(true);\n onFocus?.(e);\n },\n [onFocus]\n );\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLElement>) => {\n // When focus moves between two children of this row the blur fires\n // here but the row is still focus-within — keep the state truthy.\n if (\n e.relatedTarget instanceof Node &&\n e.currentTarget.contains(e.relatedTarget)\n ) {\n onBlur?.(e);\n return;\n }\n setFocusedWithin(false);\n onBlur?.(e);\n },\n [onBlur]\n );\n\n // Rows opt into keyboard activation only when they are interactive\n // (i.e. consumer passed `onPress`). Enter/Space mirror native button\n // behavior; Space is preventDefault'd so the page doesn't scroll.\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<Element>) => {\n onKeyDown?.(e);\n if (!onPress || e.defaultPrevented) return;\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onPress();\n }\n },\n [onKeyDown, onPress]\n );\n\n const baseBg = selected\n ? theme.colors.background.secondary\n : theme.colors.background.primary;\n\n const rowHeight = isHeaderRow ? sizing.headerRowHeight : sizing.rowHeight;\n const rowPaddingHorizontal = isHeaderRow\n ? sizing.headerRowPaddingHorizontal\n : sizing.rowPaddingHorizontal;\n\n const ctxValue = useMemo(() => ({ revealed }), [revealed]);\n\n return (\n <RowRevealContext.Provider value={ctxValue}>\n <Box\n ref={ref}\n flexDirection=\"row\"\n alignItems=\"center\"\n height={rowHeight}\n paddingHorizontal={rowPaddingHorizontal}\n width=\"100%\"\n gap={sizing.cellGap}\n backgroundColor={baseBg}\n cursor={onPress ? \"pointer\" : undefined}\n hoverStyle={\n hoverable\n ? { backgroundColor: theme.colors.background.secondary }\n : undefined\n }\n onPress={onPress}\n role=\"row\"\n tabIndex={onPress ? 0 : undefined}\n aria-selected={selected || undefined}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onFocus={handleFocus}\n onBlur={handleBlur}\n {...props}\n onKeyDown={handleKeyDown}\n style={style}\n >\n {children}\n </Box>\n {!hideDivider && <Divider color={theme.colors.border.secondary} />}\n </RowRevealContext.Provider>\n );\n }\n);\n\nTableRow.displayName = \"Table.Row\";\n\nconst positionToFlex = (position: TableCellProps[\"position\"]) => {\n switch (position) {\n case \"left\":\n return { flexShrink: 0 };\n case \"right\":\n return { flexShrink: 0, marginLeft: \"auto\" };\n default:\n return {};\n }\n};\n\nconst alignToJustify = (align: TableCellProps[\"align\"]) => {\n switch (align) {\n case \"right\":\n return \"flex-end\" as const;\n case \"center\":\n return \"center\" as const;\n default:\n return \"flex-start\" as const;\n }\n};\n\nconst TableCell = forwardRef<any, TableCellProps>(\n (\n {\n children,\n align = \"left\",\n position = \"default\",\n width,\n grow,\n revealOnHover,\n themeMode,\n themeProductContext,\n style,\n ...props\n },\n ref\n ) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const sizing = theme.sizing.table;\n const { revealed } = useContext(RowRevealContext);\n\n const positionStyle = useMemo(() => positionToFlex(position), [position]);\n\n // Per Figma spec: hide via opacity + pointer-events (NOT visibility) so\n // keyboard Tab still focuses the descendants. Focusing a descendant flips\n // `revealed` to true via RowRevealContext, restoring pointer-events.\n const revealStyle: React.CSSProperties =\n revealOnHover && !revealed\n ? { opacity: 0, pointerEvents: \"none\" }\n : revealOnHover\n ? { opacity: 1, transition: \"opacity 0.15s ease\" }\n : {};\n\n return (\n <Box\n ref={ref}\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent={alignToJustify(align)}\n gap={8}\n height=\"100%\"\n width={width}\n role=\"cell\"\n {...props}\n style={{\n flex: width != null ? \"0 0 auto\" : (grow ?? 1),\n minWidth: 0,\n ...positionStyle,\n ...revealStyle,\n ...style,\n }}\n >\n {typeof children === \"string\" || typeof children === \"number\" ? (\n <Text\n fontSize={sizing.cellFontSize}\n lineHeight={sizing.cellLineHeight}\n color={theme.colors.content.primary}\n // truncation\n style={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n maxWidth: \"100%\",\n }}\n >\n {children}\n </Text>\n ) : (\n children\n )}\n </Box>\n );\n }\n);\n\nTableCell.displayName = \"Table.Cell\";\n\n/**\n * Sort indicator. Uses the `Sort` line icon from `@xsolla/xui-icons-base`\n * (matches the Figma spec — a stacked up/down chevron). The icon is the\n * same in all three states; opacity differentiates \"sortable but not\n * active\" (`none`, 40%) from \"active sort\" (`ascending` / `descending`,\n * 100%). Direction is communicated to assistive tech via `aria-sort` on\n * the parent <Table.Head>.\n */\nconst SortIcon: React.FC<{\n direction: \"ascending\" | \"descending\" | \"none\";\n color: string;\n size: number;\n}> = ({ direction, color, size }) => (\n <Box\n style={{\n flexShrink: 0,\n opacity: direction === \"none\" ? 0.4 : 1,\n transition: \"opacity 0.15s ease\",\n }}\n >\n <Sort variant=\"line\" size={size} color={color} aria-hidden />\n </Box>\n);\n\nconst TableHead = forwardRef<any, TableHeadProps>(\n (\n {\n children,\n align = \"left\",\n position = \"default\",\n width,\n grow,\n sort,\n onSortToggle,\n themeMode,\n themeProductContext,\n style,\n ...props\n },\n ref\n ) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const sizing = theme.sizing.table;\n\n const positionStyle = useMemo(() => positionToFlex(position), [position]);\n const sortable = sort != null;\n\n const ariaSort: \"ascending\" | \"descending\" | \"none\" | undefined = sortable\n ? sort\n : undefined;\n\n return (\n <Box\n ref={ref}\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent={alignToJustify(align)}\n gap={sizing.headerCellGap}\n height=\"100%\"\n width={width}\n role=\"columnheader\"\n aria-sort={ariaSort}\n cursor={sortable ? \"pointer\" : undefined}\n onPress={sortable ? onSortToggle : undefined}\n {...props}\n style={{\n flex: width != null ? \"0 0 auto\" : (grow ?? 1),\n minWidth: 0,\n ...positionStyle,\n ...style,\n }}\n >\n {sortable && (\n <SortIcon\n direction={sort}\n color={theme.colors.content.secondary}\n size={sizing.headerCellFontSize + 2}\n />\n )}\n {typeof children === \"string\" || typeof children === \"number\" ? (\n <Text\n fontSize={sizing.headerCellFontSize}\n lineHeight={sizing.headerCellLineHeight}\n color={theme.colors.content.secondary}\n fontWeight=\"500\"\n style={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {children}\n </Text>\n ) : (\n children\n )}\n </Box>\n );\n }\n);\n\nTableHead.displayName = \"Table.Head\";\n\nconst TableFooter = forwardRef<any, TableFooterProps>(\n ({ children, style, ...props }, ref) => {\n const { theme } = useResolvedTheme();\n const sizing = theme.sizing.table;\n\n return (\n <Box\n ref={ref}\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent=\"center\"\n gap={sizing.paginationGap}\n paddingHorizontal={sizing.paginationPaddingHorizontal}\n width=\"100%\"\n {...props}\n style={style}\n >\n {children}\n </Box>\n );\n }\n);\n\nTableFooter.displayName = \"Table.Footer\";\n\nexport const Table = Object.assign(TableRoot, {\n Caption: TableCaption,\n Header: TableHeader,\n Body: TableBody,\n Footer: TableFooter,\n Row: TableRow,\n Head: TableHead,\n Cell: TableCell,\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 from \"react\";\nimport styled from \"styled-components\";\nimport { TextProps } from \"@xsolla/xui-primitives-core\";\nimport { createFilteredElement } from \"./filterDOMProps\";\n\nconst FilteredSpan = createFilteredElement(\"span\");\n\nconst StyledText = styled(FilteredSpan)<TextProps>`\n color: ${(props) => props.color || \"inherit\"};\n font-size: ${(props) =>\n typeof props.fontSize === \"number\"\n ? `${props.fontSize}px`\n : props.fontSize || \"inherit\"};\n font-weight: ${(props) => props.fontWeight || \"normal\"};\n font-family: ${(props) =>\n props.fontFamily ||\n '\"Aktiv Grotesk\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif'};\n line-height: ${(props) =>\n typeof props.lineHeight === \"number\"\n ? `${props.lineHeight}px`\n : props.lineHeight || \"inherit\"};\n white-space: ${(props) => props.whiteSpace || \"normal\"};\n text-align: ${(props) => props.textAlign || \"inherit\"};\n text-decoration: ${(props) => props.textDecoration || \"none\"};\n`;\n\nexport const Text: React.FC<TextProps> = ({\n style,\n className,\n id,\n role,\n numberOfLines: _numberOfLines,\n ...props\n}) => {\n return (\n <StyledText\n {...props}\n style={style}\n className={className}\n id={id}\n role={role}\n />\n );\n};\n"],"mappings":"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","names":["import_react","import_react","React","styled","React","import_styled_components","import_jsx_runtime","styled","import_jsx_runtime","React"]}
package/web/index.mjs CHANGED
@@ -221,8 +221,7 @@ var Box = React2.forwardRef(
221
221
  top: typeof props.top === "number" ? `${props.top}px` : props.top,
222
222
  left: typeof props.left === "number" ? `${props.left}px` : props.left,
223
223
  right: typeof props.right === "number" ? `${props.right}px` : props.right,
224
- bottom: typeof props.bottom === "number" ? `${props.bottom}px` : props.bottom,
225
- ...props.style
224
+ bottom: typeof props.bottom === "number" ? `${props.bottom}px` : props.bottom
226
225
  }
227
226
  }
228
227
  );
package/web/index.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Table.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","../../../../foundation/primitives-web/src/Text.tsx"],"sourcesContent":["import React, {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n type ReactNode,\n} from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text } from \"@xsolla/xui-primitives\";\nimport { useResolvedTheme, isNative } from \"@xsolla/xui-core\";\nimport { Sort } from \"@xsolla/xui-icons-base\";\nimport {\n TableBodyProps,\n TableCaptionProps,\n TableCellProps,\n TableFooterProps,\n TableHeaderProps,\n TableHeadProps,\n TableProps,\n TableRowProps,\n} from \"./types\";\n\n/**\n * Tracks which rowgroup the current <Table.Row> sits inside, so the row can\n * pick the right sizing (header rows are slightly taller / styled\n * differently per `theme.sizing.table`).\n */\ntype RowGroup = \"header\" | \"body\";\nconst TableRowGroupContext = createContext<RowGroup>(\"body\");\n\n/**\n * Tracks whether the parent <Table.Row> is hovered or has focus inside it.\n * Cells that opt into `revealOnHover` read this to decide whether to show\n * their content. Defaults to `true` so cells used outside a row (e.g. inside\n * <Table.Header>) are always visible.\n */\nconst RowRevealContext = createContext<{ revealed: boolean }>({\n revealed: true,\n});\n\n/**\n * Detects whether the device is hover-capable (desktop) vs touch-only (mobile).\n * On touch-only devices we always reveal action cells so they can be tapped —\n * matching the Figma spec (\"Right cell actions ... always visible on touch\n * devices\"). SSR-safe: returns `true` until mounted, which means actions stay\n * revealed on the server (no flash-of-hidden-actions on first paint).\n *\n * Table is web-only for now — on native this hook short-circuits and never\n * runs the media query.\n */\nconst useHoverCapable = (): boolean => {\n const [hoverCapable, setHoverCapable] = useState(true);\n useEffect(() => {\n if (isNative) return;\n if (typeof window === \"undefined\" || !window.matchMedia) return;\n const mq = window.matchMedia(\"(hover: hover)\");\n setHoverCapable(mq.matches);\n const onChange = (e: MediaQueryListEvent) => setHoverCapable(e.matches);\n mq.addEventListener?.(\"change\", onChange);\n return () => mq.removeEventListener?.(\"change\", onChange);\n }, []);\n return hoverCapable;\n};\n\nconst Divider: React.FC<{ color: string }> = ({ color }) => (\n <Box\n width=\"100%\"\n height={1}\n backgroundColor={color}\n style={{ flexShrink: 0 }}\n />\n);\n\nconst TableRoot = forwardRef<any, TableProps>(\n ({ children, themeMode, themeProductContext }, ref) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const sizing = theme.sizing.table;\n\n return (\n <Box\n ref={ref}\n flexDirection=\"column\"\n alignItems=\"stretch\"\n gap={sizing.containerGap}\n paddingVertical={sizing.containerPaddingVertical}\n backgroundColor={theme.colors.background.primary}\n borderRadius={sizing.containerRadius}\n width=\"100%\"\n role=\"table\"\n style={{\n color: theme.colors.content.primary,\n overflow: \"clip\",\n }}\n >\n {children}\n </Box>\n );\n }\n);\n\nTableRoot.displayName = \"Table\";\n\nconst TableCaption = forwardRef<any, TableCaptionProps>(\n ({ children, themeMode, themeProductContext, style, ...props }, ref) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const sizing = theme.sizing.table;\n\n return (\n <Box\n ref={ref}\n flexDirection=\"row\"\n alignItems=\"center\"\n paddingHorizontal={sizing.headerRowPaddingHorizontal}\n width=\"100%\"\n // <caption> isn't a valid ARIA role; consumers can pass role=\"region\"\n // + aria-label via ...props if they want it announced.\n {...props}\n style={style}\n >\n {typeof children === \"string\" || typeof children === \"number\" ? (\n <Text\n fontSize={sizing.captionFontSize}\n lineHeight={sizing.captionLineHeight}\n color={theme.colors.content.secondary}\n >\n {children}\n </Text>\n ) : (\n children\n )}\n </Box>\n );\n }\n);\n\nTableCaption.displayName = \"Table.Caption\";\n\nconst TableHeader = forwardRef<any, TableHeaderProps>(\n ({ children, themeMode, themeProductContext, style, ...props }, ref) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n\n return (\n <TableRowGroupContext.Provider value=\"header\">\n <Box\n ref={ref}\n flexDirection=\"column\"\n alignItems=\"stretch\"\n width=\"100%\"\n role=\"rowgroup\"\n {...props}\n style={{\n position: \"sticky\",\n top: 0,\n zIndex: 1,\n backgroundColor: theme.colors.background.primary,\n ...style,\n }}\n >\n {children}\n <Divider color={theme.colors.border.secondary} />\n </Box>\n </TableRowGroupContext.Provider>\n );\n }\n);\n\nTableHeader.displayName = \"Table.Header\";\n\nconst TableBody = forwardRef<any, TableBodyProps>(\n (\n { children, style, minRows, themeMode, themeProductContext, ...props },\n ref\n ) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const sizing = theme.sizing.table;\n\n // Each row paints a 1px divider after it (rendered as a sibling Box\n // inside Table.Row), except the very last row in the body which\n // hides its divider. So a fully filled body of N rows is\n // `N × rowHeight + (N - 1) × 1px`.\n const DIVIDER_HEIGHT = 1;\n const computedMinHeight = minRows\n ? minRows * sizing.rowHeight + (minRows - 1) * DIVIDER_HEIGHT\n : undefined;\n\n // Decide whether to auto-pad with placeholder slots. We only pad\n // when every direct child is a <Table.Row>; consumers using a\n // single non-row block (e.g. a custom \"no results\" panel) get just\n // the reserved min-height so they can stretch their content to fill.\n let renderedChildren: ReactNode = children;\n if (minRows) {\n const childArray = React.Children.toArray(children);\n const hasOnlyRowChildren =\n childArray.length > 0 &&\n childArray.every((c) => React.isValidElement(c) && c.type === TableRow);\n const realRowCount = hasOnlyRowChildren ? childArray.length : 0;\n const placeholderCount = hasOnlyRowChildren\n ? Math.max(0, minRows - realRowCount)\n : 0;\n\n if (placeholderCount > 0) {\n // Override the last real row's `hideDivider` so the body always\n // ends with a divider-less slot — matching how a full page hides\n // the last row's divider.\n const patchedRows = childArray.map((child, i) => {\n if (!React.isValidElement(child)) return child;\n const isLastRealRow = i === realRowCount - 1;\n return React.cloneElement(child, {\n hideDivider: isLastRealRow\n ? false\n : (child.props as any).hideDivider,\n } as any);\n });\n\n const placeholders = Array.from({ length: placeholderCount }).map(\n (_, i) => {\n const isLast = i === placeholderCount - 1;\n return (\n <Box\n key={`__table-body-placeholder-${i}`}\n aria-hidden\n style={{\n height: isLast\n ? sizing.rowHeight\n : sizing.rowHeight + DIVIDER_HEIGHT,\n flexShrink: 0,\n }}\n />\n );\n }\n );\n\n renderedChildren = (\n <>\n {patchedRows}\n {placeholders}\n </>\n );\n }\n }\n\n return (\n <TableRowGroupContext.Provider value=\"body\">\n <Box\n ref={ref}\n flexDirection=\"column\"\n alignItems=\"stretch\"\n width=\"100%\"\n role=\"rowgroup\"\n {...props}\n style={{\n ...(computedMinHeight !== undefined && {\n minHeight: computedMinHeight,\n }),\n ...style,\n }}\n >\n {renderedChildren}\n </Box>\n </TableRowGroupContext.Provider>\n );\n }\n);\n\nTableBody.displayName = \"Table.Body\";\n\nconst TableRow = forwardRef<any, TableRowProps>(\n (\n {\n children,\n hoverable: hoverableProp,\n selected,\n hideDivider: hideDividerProp,\n onPress,\n themeMode,\n themeProductContext,\n style,\n onMouseEnter,\n onMouseLeave,\n onFocus,\n onBlur,\n onKeyDown,\n ...props\n },\n ref\n ) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const sizing = theme.sizing.table;\n const rowGroup = useContext(TableRowGroupContext);\n const hoverCapable = useHoverCapable();\n\n const isHeaderRow = rowGroup === \"header\";\n\n // Header rows are not hoverable by default and don't render a divider\n // (Header already paints its own top/bottom dividers).\n const hoverable = hoverableProp ?? !isHeaderRow;\n const hideDivider = hideDividerProp ?? isHeaderRow;\n\n // Track hover + focus-within so descendant <Table.Cell revealOnHover>\n // cells can decide whether to show themselves. Single re-render per\n // hover/focus change, scoped to this row only.\n const [hovered, setHovered] = useState(false);\n const [focusedWithin, setFocusedWithin] = useState(false);\n\n // On touch-only devices the reveal logic short-circuits to \"always\n // visible\" — matches the Figma spec.\n const revealed = hoverCapable ? hovered || focusedWithin : true;\n\n const handleMouseEnter = useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n setHovered(true);\n onMouseEnter?.(e);\n },\n [onMouseEnter]\n );\n const handleMouseLeave = useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n setHovered(false);\n onMouseLeave?.(e);\n },\n [onMouseLeave]\n );\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLElement>) => {\n setFocusedWithin(true);\n onFocus?.(e);\n },\n [onFocus]\n );\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLElement>) => {\n // When focus moves between two children of this row the blur fires\n // here but the row is still focus-within — keep the state truthy.\n if (\n e.relatedTarget instanceof Node &&\n e.currentTarget.contains(e.relatedTarget)\n ) {\n onBlur?.(e);\n return;\n }\n setFocusedWithin(false);\n onBlur?.(e);\n },\n [onBlur]\n );\n\n // Rows opt into keyboard activation only when they are interactive\n // (i.e. consumer passed `onPress`). Enter/Space mirror native button\n // behavior; Space is preventDefault'd so the page doesn't scroll.\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<Element>) => {\n onKeyDown?.(e);\n if (!onPress || e.defaultPrevented) return;\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onPress();\n }\n },\n [onKeyDown, onPress]\n );\n\n const baseBg = selected\n ? theme.colors.background.secondary\n : theme.colors.background.primary;\n\n const rowHeight = isHeaderRow ? sizing.headerRowHeight : sizing.rowHeight;\n const rowPaddingHorizontal = isHeaderRow\n ? sizing.headerRowPaddingHorizontal\n : sizing.rowPaddingHorizontal;\n\n const ctxValue = useMemo(() => ({ revealed }), [revealed]);\n\n return (\n <RowRevealContext.Provider value={ctxValue}>\n <Box\n ref={ref}\n flexDirection=\"row\"\n alignItems=\"center\"\n height={rowHeight}\n paddingHorizontal={rowPaddingHorizontal}\n width=\"100%\"\n gap={sizing.cellGap}\n backgroundColor={baseBg}\n cursor={onPress ? \"pointer\" : undefined}\n hoverStyle={\n hoverable\n ? { backgroundColor: theme.colors.background.secondary }\n : undefined\n }\n onPress={onPress}\n role=\"row\"\n tabIndex={onPress ? 0 : undefined}\n aria-selected={selected || undefined}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onFocus={handleFocus}\n onBlur={handleBlur}\n {...props}\n onKeyDown={handleKeyDown}\n style={style}\n >\n {children}\n </Box>\n {!hideDivider && <Divider color={theme.colors.border.secondary} />}\n </RowRevealContext.Provider>\n );\n }\n);\n\nTableRow.displayName = \"Table.Row\";\n\nconst positionToFlex = (position: TableCellProps[\"position\"]) => {\n switch (position) {\n case \"left\":\n return { flexShrink: 0 };\n case \"right\":\n return { flexShrink: 0, marginLeft: \"auto\" };\n default:\n return {};\n }\n};\n\nconst alignToJustify = (align: TableCellProps[\"align\"]) => {\n switch (align) {\n case \"right\":\n return \"flex-end\" as const;\n case \"center\":\n return \"center\" as const;\n default:\n return \"flex-start\" as const;\n }\n};\n\nconst TableCell = forwardRef<any, TableCellProps>(\n (\n {\n children,\n align = \"left\",\n position = \"default\",\n width,\n grow,\n revealOnHover,\n themeMode,\n themeProductContext,\n style,\n ...props\n },\n ref\n ) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const sizing = theme.sizing.table;\n const { revealed } = useContext(RowRevealContext);\n\n const positionStyle = useMemo(() => positionToFlex(position), [position]);\n\n // Per Figma spec: hide via opacity + pointer-events (NOT visibility) so\n // keyboard Tab still focuses the descendants. Focusing a descendant flips\n // `revealed` to true via RowRevealContext, restoring pointer-events.\n const revealStyle: React.CSSProperties =\n revealOnHover && !revealed\n ? { opacity: 0, pointerEvents: \"none\" }\n : revealOnHover\n ? { opacity: 1, transition: \"opacity 0.15s ease\" }\n : {};\n\n return (\n <Box\n ref={ref}\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent={alignToJustify(align)}\n gap={8}\n height=\"100%\"\n width={width}\n role=\"cell\"\n {...props}\n style={{\n flex: width != null ? \"0 0 auto\" : (grow ?? 1),\n minWidth: 0,\n ...positionStyle,\n ...revealStyle,\n ...style,\n }}\n >\n {typeof children === \"string\" || typeof children === \"number\" ? (\n <Text\n fontSize={sizing.cellFontSize}\n lineHeight={sizing.cellLineHeight}\n color={theme.colors.content.primary}\n // truncation\n style={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n maxWidth: \"100%\",\n }}\n >\n {children}\n </Text>\n ) : (\n children\n )}\n </Box>\n );\n }\n);\n\nTableCell.displayName = \"Table.Cell\";\n\n/**\n * Sort indicator. Uses the `Sort` line icon from `@xsolla/xui-icons-base`\n * (matches the Figma spec — a stacked up/down chevron). The icon is the\n * same in all three states; opacity differentiates \"sortable but not\n * active\" (`none`, 40%) from \"active sort\" (`ascending` / `descending`,\n * 100%). Direction is communicated to assistive tech via `aria-sort` on\n * the parent <Table.Head>.\n */\nconst SortIcon: React.FC<{\n direction: \"ascending\" | \"descending\" | \"none\";\n color: string;\n size: number;\n}> = ({ direction, color, size }) => (\n <Box\n style={{\n flexShrink: 0,\n opacity: direction === \"none\" ? 0.4 : 1,\n transition: \"opacity 0.15s ease\",\n }}\n >\n <Sort variant=\"line\" size={size} color={color} aria-hidden />\n </Box>\n);\n\nconst TableHead = forwardRef<any, TableHeadProps>(\n (\n {\n children,\n align = \"left\",\n position = \"default\",\n width,\n grow,\n sort,\n onSortToggle,\n themeMode,\n themeProductContext,\n style,\n ...props\n },\n ref\n ) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const sizing = theme.sizing.table;\n\n const positionStyle = useMemo(() => positionToFlex(position), [position]);\n const sortable = sort != null;\n\n const ariaSort: \"ascending\" | \"descending\" | \"none\" | undefined = sortable\n ? sort\n : undefined;\n\n return (\n <Box\n ref={ref}\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent={alignToJustify(align)}\n gap={sizing.headerCellGap}\n height=\"100%\"\n width={width}\n role=\"columnheader\"\n aria-sort={ariaSort}\n cursor={sortable ? \"pointer\" : undefined}\n onPress={sortable ? onSortToggle : undefined}\n {...props}\n style={{\n flex: width != null ? \"0 0 auto\" : (grow ?? 1),\n minWidth: 0,\n ...positionStyle,\n ...style,\n }}\n >\n {sortable && (\n <SortIcon\n direction={sort}\n color={theme.colors.content.secondary}\n size={sizing.headerCellFontSize + 2}\n />\n )}\n {typeof children === \"string\" || typeof children === \"number\" ? (\n <Text\n fontSize={sizing.headerCellFontSize}\n lineHeight={sizing.headerCellLineHeight}\n color={theme.colors.content.secondary}\n fontWeight=\"500\"\n style={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {children}\n </Text>\n ) : (\n children\n )}\n </Box>\n );\n }\n);\n\nTableHead.displayName = \"Table.Head\";\n\nconst TableFooter = forwardRef<any, TableFooterProps>(\n ({ children, style, ...props }, ref) => {\n const { theme } = useResolvedTheme();\n const sizing = theme.sizing.table;\n\n return (\n <Box\n ref={ref}\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent=\"center\"\n gap={sizing.paginationGap}\n paddingHorizontal={sizing.paginationPaddingHorizontal}\n width=\"100%\"\n {...props}\n style={style}\n >\n {children}\n </Box>\n );\n }\n);\n\nTableFooter.displayName = \"Table.Footer\";\n\nexport const Table = Object.assign(TableRoot, {\n Caption: TableCaption,\n Header: TableHeader,\n Body: TableBody,\n Footer: TableFooter,\n Row: TableRow,\n Head: TableHead,\n Cell: TableCell,\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 ...props.style,\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 from \"react\";\nimport styled from \"styled-components\";\nimport { TextProps } from \"@xsolla/xui-primitives-core\";\nimport { createFilteredElement } from \"./filterDOMProps\";\n\nconst FilteredSpan = createFilteredElement(\"span\");\n\nconst StyledText = styled(FilteredSpan)<TextProps>`\n color: ${(props) => props.color || \"inherit\"};\n font-size: ${(props) =>\n typeof props.fontSize === \"number\"\n ? `${props.fontSize}px`\n : props.fontSize || \"inherit\"};\n font-weight: ${(props) => props.fontWeight || \"normal\"};\n font-family: ${(props) =>\n props.fontFamily ||\n '\"Aktiv Grotesk\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif'};\n line-height: ${(props) =>\n typeof props.lineHeight === \"number\"\n ? `${props.lineHeight}px`\n : props.lineHeight || \"inherit\"};\n white-space: ${(props) => props.whiteSpace || \"normal\"};\n text-align: ${(props) => props.textAlign || \"inherit\"};\n text-decoration: ${(props) => props.textDecoration || \"none\"};\n`;\n\nexport const Text: React.FC<TextProps> = ({\n style,\n className,\n id,\n role,\n numberOfLines: _numberOfLines,\n ...props\n}) => {\n return (\n <StyledText\n {...props}\n style={style}\n className={className}\n id={id}\n role={role}\n />\n );\n};\n"],"mappings":"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","names":["React","React","React","styled","jsx","styled","jsx","React"]}
1
+ {"version":3,"sources":["../../src/Table.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","../../../../foundation/primitives-web/src/Text.tsx"],"sourcesContent":["import React, {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n type ReactNode,\n} from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text } from \"@xsolla/xui-primitives\";\nimport { useResolvedTheme, isNative } from \"@xsolla/xui-core\";\nimport { Sort } from \"@xsolla/xui-icons-base\";\nimport {\n TableBodyProps,\n TableCaptionProps,\n TableCellProps,\n TableFooterProps,\n TableHeaderProps,\n TableHeadProps,\n TableProps,\n TableRowProps,\n} from \"./types\";\n\n/**\n * Tracks which rowgroup the current <Table.Row> sits inside, so the row can\n * pick the right sizing (header rows are slightly taller / styled\n * differently per `theme.sizing.table`).\n */\ntype RowGroup = \"header\" | \"body\";\nconst TableRowGroupContext = createContext<RowGroup>(\"body\");\n\n/**\n * Tracks whether the parent <Table.Row> is hovered or has focus inside it.\n * Cells that opt into `revealOnHover` read this to decide whether to show\n * their content. Defaults to `true` so cells used outside a row (e.g. inside\n * <Table.Header>) are always visible.\n */\nconst RowRevealContext = createContext<{ revealed: boolean }>({\n revealed: true,\n});\n\n/**\n * Detects whether the device is hover-capable (desktop) vs touch-only (mobile).\n * On touch-only devices we always reveal action cells so they can be tapped —\n * matching the Figma spec (\"Right cell actions ... always visible on touch\n * devices\"). SSR-safe: returns `true` until mounted, which means actions stay\n * revealed on the server (no flash-of-hidden-actions on first paint).\n *\n * Table is web-only for now — on native this hook short-circuits and never\n * runs the media query.\n */\nconst useHoverCapable = (): boolean => {\n const [hoverCapable, setHoverCapable] = useState(true);\n useEffect(() => {\n if (isNative) return;\n if (typeof window === \"undefined\" || !window.matchMedia) return;\n const mq = window.matchMedia(\"(hover: hover)\");\n setHoverCapable(mq.matches);\n const onChange = (e: MediaQueryListEvent) => setHoverCapable(e.matches);\n mq.addEventListener?.(\"change\", onChange);\n return () => mq.removeEventListener?.(\"change\", onChange);\n }, []);\n return hoverCapable;\n};\n\nconst Divider: React.FC<{ color: string }> = ({ color }) => (\n <Box\n width=\"100%\"\n height={1}\n backgroundColor={color}\n style={{ flexShrink: 0 }}\n />\n);\n\nconst TableRoot = forwardRef<any, TableProps>(\n ({ children, themeMode, themeProductContext }, ref) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const sizing = theme.sizing.table;\n\n return (\n <Box\n ref={ref}\n flexDirection=\"column\"\n alignItems=\"stretch\"\n gap={sizing.containerGap}\n paddingVertical={sizing.containerPaddingVertical}\n backgroundColor={theme.colors.background.primary}\n borderRadius={sizing.containerRadius}\n width=\"100%\"\n role=\"table\"\n style={{\n color: theme.colors.content.primary,\n overflow: \"clip\",\n }}\n >\n {children}\n </Box>\n );\n }\n);\n\nTableRoot.displayName = \"Table\";\n\nconst TableCaption = forwardRef<any, TableCaptionProps>(\n ({ children, themeMode, themeProductContext, style, ...props }, ref) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const sizing = theme.sizing.table;\n\n return (\n <Box\n ref={ref}\n flexDirection=\"row\"\n alignItems=\"center\"\n paddingHorizontal={sizing.headerRowPaddingHorizontal}\n width=\"100%\"\n // <caption> isn't a valid ARIA role; consumers can pass role=\"region\"\n // + aria-label via ...props if they want it announced.\n {...props}\n style={style}\n >\n {typeof children === \"string\" || typeof children === \"number\" ? (\n <Text\n fontSize={sizing.captionFontSize}\n lineHeight={sizing.captionLineHeight}\n color={theme.colors.content.secondary}\n >\n {children}\n </Text>\n ) : (\n children\n )}\n </Box>\n );\n }\n);\n\nTableCaption.displayName = \"Table.Caption\";\n\nconst TableHeader = forwardRef<any, TableHeaderProps>(\n ({ children, themeMode, themeProductContext, style, ...props }, ref) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n\n return (\n <TableRowGroupContext.Provider value=\"header\">\n <Box\n ref={ref}\n flexDirection=\"column\"\n alignItems=\"stretch\"\n width=\"100%\"\n role=\"rowgroup\"\n {...props}\n style={{\n position: \"sticky\",\n top: 0,\n zIndex: 1,\n backgroundColor: theme.colors.background.primary,\n ...style,\n }}\n >\n {children}\n <Divider color={theme.colors.border.secondary} />\n </Box>\n </TableRowGroupContext.Provider>\n );\n }\n);\n\nTableHeader.displayName = \"Table.Header\";\n\nconst TableBody = forwardRef<any, TableBodyProps>(\n (\n { children, style, minRows, themeMode, themeProductContext, ...props },\n ref\n ) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const sizing = theme.sizing.table;\n\n // Each row paints a 1px divider after it (rendered as a sibling Box\n // inside Table.Row), except the very last row in the body which\n // hides its divider. So a fully filled body of N rows is\n // `N × rowHeight + (N - 1) × 1px`.\n const DIVIDER_HEIGHT = 1;\n const computedMinHeight = minRows\n ? minRows * sizing.rowHeight + (minRows - 1) * DIVIDER_HEIGHT\n : undefined;\n\n // Decide whether to auto-pad with placeholder slots. We only pad\n // when every direct child is a <Table.Row>; consumers using a\n // single non-row block (e.g. a custom \"no results\" panel) get just\n // the reserved min-height so they can stretch their content to fill.\n let renderedChildren: ReactNode = children;\n if (minRows) {\n const childArray = React.Children.toArray(children);\n const hasOnlyRowChildren =\n childArray.length > 0 &&\n childArray.every((c) => React.isValidElement(c) && c.type === TableRow);\n const realRowCount = hasOnlyRowChildren ? childArray.length : 0;\n const placeholderCount = hasOnlyRowChildren\n ? Math.max(0, minRows - realRowCount)\n : 0;\n\n if (placeholderCount > 0) {\n // Override the last real row's `hideDivider` so the body always\n // ends with a divider-less slot — matching how a full page hides\n // the last row's divider.\n const patchedRows = childArray.map((child, i) => {\n if (!React.isValidElement(child)) return child;\n const isLastRealRow = i === realRowCount - 1;\n return React.cloneElement(child, {\n hideDivider: isLastRealRow\n ? false\n : (child.props as any).hideDivider,\n } as any);\n });\n\n const placeholders = Array.from({ length: placeholderCount }).map(\n (_, i) => {\n const isLast = i === placeholderCount - 1;\n return (\n <Box\n key={`__table-body-placeholder-${i}`}\n aria-hidden\n style={{\n height: isLast\n ? sizing.rowHeight\n : sizing.rowHeight + DIVIDER_HEIGHT,\n flexShrink: 0,\n }}\n />\n );\n }\n );\n\n renderedChildren = (\n <>\n {patchedRows}\n {placeholders}\n </>\n );\n }\n }\n\n return (\n <TableRowGroupContext.Provider value=\"body\">\n <Box\n ref={ref}\n flexDirection=\"column\"\n alignItems=\"stretch\"\n width=\"100%\"\n role=\"rowgroup\"\n {...props}\n style={{\n ...(computedMinHeight !== undefined && {\n minHeight: computedMinHeight,\n }),\n ...style,\n }}\n >\n {renderedChildren}\n </Box>\n </TableRowGroupContext.Provider>\n );\n }\n);\n\nTableBody.displayName = \"Table.Body\";\n\nconst TableRow = forwardRef<any, TableRowProps>(\n (\n {\n children,\n hoverable: hoverableProp,\n selected,\n hideDivider: hideDividerProp,\n onPress,\n themeMode,\n themeProductContext,\n style,\n onMouseEnter,\n onMouseLeave,\n onFocus,\n onBlur,\n onKeyDown,\n ...props\n },\n ref\n ) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const sizing = theme.sizing.table;\n const rowGroup = useContext(TableRowGroupContext);\n const hoverCapable = useHoverCapable();\n\n const isHeaderRow = rowGroup === \"header\";\n\n // Header rows are not hoverable by default and don't render a divider\n // (Header already paints its own top/bottom dividers).\n const hoverable = hoverableProp ?? !isHeaderRow;\n const hideDivider = hideDividerProp ?? isHeaderRow;\n\n // Track hover + focus-within so descendant <Table.Cell revealOnHover>\n // cells can decide whether to show themselves. Single re-render per\n // hover/focus change, scoped to this row only.\n const [hovered, setHovered] = useState(false);\n const [focusedWithin, setFocusedWithin] = useState(false);\n\n // On touch-only devices the reveal logic short-circuits to \"always\n // visible\" — matches the Figma spec.\n const revealed = hoverCapable ? hovered || focusedWithin : true;\n\n const handleMouseEnter = useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n setHovered(true);\n onMouseEnter?.(e);\n },\n [onMouseEnter]\n );\n const handleMouseLeave = useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n setHovered(false);\n onMouseLeave?.(e);\n },\n [onMouseLeave]\n );\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLElement>) => {\n setFocusedWithin(true);\n onFocus?.(e);\n },\n [onFocus]\n );\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLElement>) => {\n // When focus moves between two children of this row the blur fires\n // here but the row is still focus-within — keep the state truthy.\n if (\n e.relatedTarget instanceof Node &&\n e.currentTarget.contains(e.relatedTarget)\n ) {\n onBlur?.(e);\n return;\n }\n setFocusedWithin(false);\n onBlur?.(e);\n },\n [onBlur]\n );\n\n // Rows opt into keyboard activation only when they are interactive\n // (i.e. consumer passed `onPress`). Enter/Space mirror native button\n // behavior; Space is preventDefault'd so the page doesn't scroll.\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<Element>) => {\n onKeyDown?.(e);\n if (!onPress || e.defaultPrevented) return;\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onPress();\n }\n },\n [onKeyDown, onPress]\n );\n\n const baseBg = selected\n ? theme.colors.background.secondary\n : theme.colors.background.primary;\n\n const rowHeight = isHeaderRow ? sizing.headerRowHeight : sizing.rowHeight;\n const rowPaddingHorizontal = isHeaderRow\n ? sizing.headerRowPaddingHorizontal\n : sizing.rowPaddingHorizontal;\n\n const ctxValue = useMemo(() => ({ revealed }), [revealed]);\n\n return (\n <RowRevealContext.Provider value={ctxValue}>\n <Box\n ref={ref}\n flexDirection=\"row\"\n alignItems=\"center\"\n height={rowHeight}\n paddingHorizontal={rowPaddingHorizontal}\n width=\"100%\"\n gap={sizing.cellGap}\n backgroundColor={baseBg}\n cursor={onPress ? \"pointer\" : undefined}\n hoverStyle={\n hoverable\n ? { backgroundColor: theme.colors.background.secondary }\n : undefined\n }\n onPress={onPress}\n role=\"row\"\n tabIndex={onPress ? 0 : undefined}\n aria-selected={selected || undefined}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onFocus={handleFocus}\n onBlur={handleBlur}\n {...props}\n onKeyDown={handleKeyDown}\n style={style}\n >\n {children}\n </Box>\n {!hideDivider && <Divider color={theme.colors.border.secondary} />}\n </RowRevealContext.Provider>\n );\n }\n);\n\nTableRow.displayName = \"Table.Row\";\n\nconst positionToFlex = (position: TableCellProps[\"position\"]) => {\n switch (position) {\n case \"left\":\n return { flexShrink: 0 };\n case \"right\":\n return { flexShrink: 0, marginLeft: \"auto\" };\n default:\n return {};\n }\n};\n\nconst alignToJustify = (align: TableCellProps[\"align\"]) => {\n switch (align) {\n case \"right\":\n return \"flex-end\" as const;\n case \"center\":\n return \"center\" as const;\n default:\n return \"flex-start\" as const;\n }\n};\n\nconst TableCell = forwardRef<any, TableCellProps>(\n (\n {\n children,\n align = \"left\",\n position = \"default\",\n width,\n grow,\n revealOnHover,\n themeMode,\n themeProductContext,\n style,\n ...props\n },\n ref\n ) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const sizing = theme.sizing.table;\n const { revealed } = useContext(RowRevealContext);\n\n const positionStyle = useMemo(() => positionToFlex(position), [position]);\n\n // Per Figma spec: hide via opacity + pointer-events (NOT visibility) so\n // keyboard Tab still focuses the descendants. Focusing a descendant flips\n // `revealed` to true via RowRevealContext, restoring pointer-events.\n const revealStyle: React.CSSProperties =\n revealOnHover && !revealed\n ? { opacity: 0, pointerEvents: \"none\" }\n : revealOnHover\n ? { opacity: 1, transition: \"opacity 0.15s ease\" }\n : {};\n\n return (\n <Box\n ref={ref}\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent={alignToJustify(align)}\n gap={8}\n height=\"100%\"\n width={width}\n role=\"cell\"\n {...props}\n style={{\n flex: width != null ? \"0 0 auto\" : (grow ?? 1),\n minWidth: 0,\n ...positionStyle,\n ...revealStyle,\n ...style,\n }}\n >\n {typeof children === \"string\" || typeof children === \"number\" ? (\n <Text\n fontSize={sizing.cellFontSize}\n lineHeight={sizing.cellLineHeight}\n color={theme.colors.content.primary}\n // truncation\n style={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n maxWidth: \"100%\",\n }}\n >\n {children}\n </Text>\n ) : (\n children\n )}\n </Box>\n );\n }\n);\n\nTableCell.displayName = \"Table.Cell\";\n\n/**\n * Sort indicator. Uses the `Sort` line icon from `@xsolla/xui-icons-base`\n * (matches the Figma spec — a stacked up/down chevron). The icon is the\n * same in all three states; opacity differentiates \"sortable but not\n * active\" (`none`, 40%) from \"active sort\" (`ascending` / `descending`,\n * 100%). Direction is communicated to assistive tech via `aria-sort` on\n * the parent <Table.Head>.\n */\nconst SortIcon: React.FC<{\n direction: \"ascending\" | \"descending\" | \"none\";\n color: string;\n size: number;\n}> = ({ direction, color, size }) => (\n <Box\n style={{\n flexShrink: 0,\n opacity: direction === \"none\" ? 0.4 : 1,\n transition: \"opacity 0.15s ease\",\n }}\n >\n <Sort variant=\"line\" size={size} color={color} aria-hidden />\n </Box>\n);\n\nconst TableHead = forwardRef<any, TableHeadProps>(\n (\n {\n children,\n align = \"left\",\n position = \"default\",\n width,\n grow,\n sort,\n onSortToggle,\n themeMode,\n themeProductContext,\n style,\n ...props\n },\n ref\n ) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const sizing = theme.sizing.table;\n\n const positionStyle = useMemo(() => positionToFlex(position), [position]);\n const sortable = sort != null;\n\n const ariaSort: \"ascending\" | \"descending\" | \"none\" | undefined = sortable\n ? sort\n : undefined;\n\n return (\n <Box\n ref={ref}\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent={alignToJustify(align)}\n gap={sizing.headerCellGap}\n height=\"100%\"\n width={width}\n role=\"columnheader\"\n aria-sort={ariaSort}\n cursor={sortable ? \"pointer\" : undefined}\n onPress={sortable ? onSortToggle : undefined}\n {...props}\n style={{\n flex: width != null ? \"0 0 auto\" : (grow ?? 1),\n minWidth: 0,\n ...positionStyle,\n ...style,\n }}\n >\n {sortable && (\n <SortIcon\n direction={sort}\n color={theme.colors.content.secondary}\n size={sizing.headerCellFontSize + 2}\n />\n )}\n {typeof children === \"string\" || typeof children === \"number\" ? (\n <Text\n fontSize={sizing.headerCellFontSize}\n lineHeight={sizing.headerCellLineHeight}\n color={theme.colors.content.secondary}\n fontWeight=\"500\"\n style={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {children}\n </Text>\n ) : (\n children\n )}\n </Box>\n );\n }\n);\n\nTableHead.displayName = \"Table.Head\";\n\nconst TableFooter = forwardRef<any, TableFooterProps>(\n ({ children, style, ...props }, ref) => {\n const { theme } = useResolvedTheme();\n const sizing = theme.sizing.table;\n\n return (\n <Box\n ref={ref}\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent=\"center\"\n gap={sizing.paginationGap}\n paddingHorizontal={sizing.paginationPaddingHorizontal}\n width=\"100%\"\n {...props}\n style={style}\n >\n {children}\n </Box>\n );\n }\n);\n\nTableFooter.displayName = \"Table.Footer\";\n\nexport const Table = Object.assign(TableRoot, {\n Caption: TableCaption,\n Header: TableHeader,\n Body: TableBody,\n Footer: TableFooter,\n Row: TableRow,\n Head: TableHead,\n Cell: TableCell,\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 from \"react\";\nimport styled from \"styled-components\";\nimport { TextProps } from \"@xsolla/xui-primitives-core\";\nimport { createFilteredElement } from \"./filterDOMProps\";\n\nconst FilteredSpan = createFilteredElement(\"span\");\n\nconst StyledText = styled(FilteredSpan)<TextProps>`\n color: ${(props) => props.color || \"inherit\"};\n font-size: ${(props) =>\n typeof props.fontSize === \"number\"\n ? `${props.fontSize}px`\n : props.fontSize || \"inherit\"};\n font-weight: ${(props) => props.fontWeight || \"normal\"};\n font-family: ${(props) =>\n props.fontFamily ||\n '\"Aktiv Grotesk\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif'};\n line-height: ${(props) =>\n typeof props.lineHeight === \"number\"\n ? `${props.lineHeight}px`\n : props.lineHeight || \"inherit\"};\n white-space: ${(props) => props.whiteSpace || \"normal\"};\n text-align: ${(props) => props.textAlign || \"inherit\"};\n text-decoration: ${(props) => props.textDecoration || \"none\"};\n`;\n\nexport const Text: React.FC<TextProps> = ({\n style,\n className,\n id,\n role,\n numberOfLines: _numberOfLines,\n ...props\n}) => {\n return (\n <StyledText\n {...props}\n style={style}\n className={className}\n id={id}\n role={role}\n />\n );\n};\n"],"mappings":"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","names":["React","React","React","styled","jsx","styled","jsx","React"]}