@pstdio/ui 0.18.0 → 0.19.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/dist/chat-ui.js +941 -899
- package/dist/chat-ui.js.map +1 -1
- package/dist/components/chat-ui/components/chat-message-list-items.d.ts +17 -0
- package/dist/components/chat-ui/components/message-types.d.ts +1 -0
- package/dist/components/chat-ui/components/timeline.d.ts +2 -0
- package/dist/components/chat-ui/tool-rendering/default-renderers.d.ts +1 -0
- package/dist/components/chat-ui/tool-rendering/shared.d.ts +3 -2
- package/dist/components/chat-ui/tool-rendering/standard-renderers.d.ts +1 -0
- package/dist/components/data-table/data-table-skeleton.d.ts +13 -0
- package/dist/components/data-table/index.d.ts +2 -0
- package/dist/components/overlays/dialog-accept-shortcut.d.ts +12 -0
- package/dist/components/overlays/index.d.ts +1 -0
- package/dist/components/param-editor/index.d.ts +3 -1
- package/dist/components/param-editor/inputs/selection-input.d.ts +5 -0
- package/dist/components/param-editor/inputs/selection-menu.d.ts +6 -0
- package/dist/components/param-editor/param-editor-row.d.ts +17 -0
- package/dist/components/param-editor/param-editor.types.d.ts +18 -0
- package/dist/components/primitives/glyph-icon.d.ts +16 -0
- package/dist/components/primitives/icon-color-picker.d.ts +3 -13
- package/dist/components/primitives/icon-options.d.ts +301 -0
- package/dist/components/primitives/index.d.ts +10 -3
- package/dist/components/primitives/segmented-control.d.ts +20 -0
- package/dist/components/primitives/tag-swatch.d.ts +10 -0
- package/dist/components/tag-editor/index.d.ts +4 -0
- package/dist/components/tag-editor/tag-editor-heading.d.ts +11 -0
- package/dist/components/tag-editor/tag-editor-row.d.ts +1 -1
- package/dist/components/tag-editor/tag-editor-save-bar.d.ts +13 -0
- package/dist/components/tag-editor/tag-editor.types.d.ts +11 -11
- package/dist/components/tag-editor/tag-settings-panel.d.ts +3 -1
- package/dist/data-table.js +564 -522
- package/dist/data-table.js.map +1 -1
- package/dist/dialog-accept-shortcut-DAEBsoWW.js +7 -0
- package/dist/dialog-accept-shortcut-DAEBsoWW.js.map +1 -0
- package/dist/diff.js +2 -2
- package/dist/font/css/prompt-studio-icons.css +36 -6
- package/dist/font/prompt-studio-icons.eot +0 -0
- package/dist/font/prompt-studio-icons.svg +1 -1
- package/dist/font/prompt-studio-icons.ttf +0 -0
- package/dist/font/prompt-studio-icons.woff +0 -0
- package/dist/font/prompt-studio-icons.woff2 +0 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1978 -1712
- package/dist/index.js.map +1 -1
- package/dist/{kanban-renderer-toolbar-Db1mIWWd.js → kanban-renderer-toolbar-Bcj_N1qr.js} +66 -66
- package/dist/kanban-renderer-toolbar-Bcj_N1qr.js.map +1 -0
- package/dist/kanban-renderer.js +138 -135
- package/dist/kanban-renderer.js.map +1 -1
- package/dist/list-row-BtoVJpFs.js +821 -0
- package/dist/list-row-BtoVJpFs.js.map +1 -0
- package/dist/param-editor-XRjSu6MT.js +161 -0
- package/dist/param-editor-XRjSu6MT.js.map +1 -0
- package/dist/param-editor-field-B9lEPq8c.js +3028 -0
- package/dist/param-editor-field-B9lEPq8c.js.map +1 -0
- package/dist/style.css +1 -1
- package/dist/theme/primitives/sizes.d.ts +59 -0
- package/dist/theme/recipes/segmented-control.d.ts +22 -0
- package/dist/theme/recipes/switch.d.ts +1 -0
- package/dist/theme/recipes/tabs.d.ts +11 -0
- package/dist/{theme-poQlUgt0.js → theme-7PDdD9OD.js} +200 -120
- package/dist/theme-7PDdD9OD.js.map +1 -0
- package/dist/theme.js +1 -1
- package/dist/{tree-list-BAja2eXU.js → tree-list-B2L0cTj2.js} +2 -2
- package/dist/{tree-list-BAja2eXU.js.map → tree-list-B2L0cTj2.js.map} +1 -1
- package/package.json +2 -2
- package/dist/kanban-renderer-toolbar-Db1mIWWd.js.map +0 -1
- package/dist/list-row-BYWwcbGK.js +0 -823
- package/dist/list-row-BYWwcbGK.js.map +0 -1
- package/dist/param-editor-BCZOw5Gt.js +0 -140
- package/dist/param-editor-BCZOw5Gt.js.map +0 -1
- package/dist/param-editor-field-ZzZwgjZ_.js +0 -2094
- package/dist/param-editor-field-ZzZwgjZ_.js.map +0 -1
- package/dist/theme-poQlUgt0.js.map +0 -1
package/dist/data-table.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-table.js","sources":["../src/components/data-table/categorical-color-cell.tsx","../src/components/data-table/color-cell-style.ts","../src/components/data-table/color-scale-cell.tsx","../src/components/data-table/helpers.tsx","../src/components/data-table/friendly-json-display.tsx","../src/components/data-table/json-cell.tsx","../src/components/data-table/build-columns.tsx","../src/components/data-table/data-table-column-menu.tsx","../src/components/data-table/data-table-header.tsx","../src/components/data-table/data-table-state.ts","../src/components/data-table/data-table-stat-chart.tsx","../src/components/data-table/data-table-stats.ts","../src/components/data-table/data-table-stats-row.tsx","../src/components/data-table/data-table-table-parts.tsx","../src/components/data-table/pagination-footer.tsx","../src/components/data-table/selection-toolbar.tsx","../src/components/data-table/data-table.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport type { DataTableCategoricalColor } from \"./types\";\n\ninterface CategoricalColorCellProps {\n children: ReactNode;\n}\n\nexport const resolveCategoricalColor = (value: unknown, categories: DataTableCategoricalColor[]) => {\n return categories.find((category) => Object.is(category.value, value))?.color ?? null;\n};\n\nexport const CategoricalColorCell = (props: CategoricalColorCellProps) => {\n const { children } = props;\n\n return children;\n};\n","import type { DataTableThemeColor } from \"./types\";\n\ninterface RgbColor {\n r: number;\n g: number;\n b: number;\n}\n\nconst darkTextColor = \"#111827\";\nconst lightTextColor = \"#ffffff\";\nconst darkColorTarget = \"#000000\";\nconst readableContrastRatio = 4.5;\n\nconst expandShortHex = (hex: string) =>\n hex\n .split(\"\")\n .map((character) => character + character)\n .join(\"\");\n\nexport const parseHexColor = (color: string) => {\n const normalized = color.trim();\n const hex = normalized.startsWith(\"#\") ? normalized.slice(1) : normalized;\n const expandedHex = hex.length === 3 ? expandShortHex(hex) : hex;\n if (!/^[\\da-f]{6}$/i.test(expandedHex)) return null;\n\n return {\n r: Number.parseInt(expandedHex.slice(0, 2), 16),\n g: Number.parseInt(expandedHex.slice(2, 4), 16),\n b: Number.parseInt(expandedHex.slice(4, 6), 16),\n };\n};\n\nconst toLinearChannel = (channel: number) => {\n const normalized = channel / 255;\n return normalized <= 0.03928 ? normalized / 12.92 : ((normalized + 0.055) / 1.055) ** 2.4;\n};\n\nconst relativeLuminance = (color: RgbColor) =>\n 0.2126 * toLinearChannel(color.r) + 0.7152 * toLinearChannel(color.g) + 0.0722 * toLinearChannel(color.b);\n\nconst contrastRatio = (foreground: RgbColor, background: RgbColor) => {\n const foregroundLuminance = relativeLuminance(foreground);\n const backgroundLuminance = relativeLuminance(background);\n const lighter = Math.max(foregroundLuminance, backgroundLuminance);\n const darker = Math.min(foregroundLuminance, backgroundLuminance);\n return (lighter + 0.05) / (darker + 0.05);\n};\n\nconst toHexColor = (color: RgbColor) => {\n const toHexChannel = (channel: number) => Math.round(channel).toString(16).padStart(2, \"0\");\n return `#${toHexChannel(color.r)}${toHexChannel(color.g)}${toHexChannel(color.b)}`;\n};\n\nconst mixRgbColors = (start: RgbColor, end: RgbColor, endWeight: number) => ({\n r: start.r * (1 - endWeight) + end.r * endWeight,\n g: start.g * (1 - endWeight) + end.g * endWeight,\n b: start.b * (1 - endWeight) + end.b * endWeight,\n});\n\nexport const contrastRatioForHexColors = (foregroundColor: string, backgroundColor: string) => {\n const foreground = parseHexColor(foregroundColor);\n const background = parseHexColor(backgroundColor);\n if (!foreground || !background) return 0;\n return contrastRatio(foreground, background);\n};\n\nconst findMatchingForeground = (background: RgbColor, target: RgbColor) => {\n for (let step = 1; step <= 50; step += 1) {\n const candidate = mixRgbColors(background, target, step / 50);\n if (contrastRatio(candidate, background) >= readableContrastRatio) {\n return { color: toHexColor(candidate), step };\n }\n }\n\n return { color: toHexColor(target), step: 50 };\n};\n\nexport const resolveReadableTextColor = (backgroundColor: string) => {\n const background = parseHexColor(backgroundColor);\n if (!background) return darkTextColor;\n\n const darkText = parseHexColor(darkColorTarget)!;\n const lightText = parseHexColor(lightTextColor)!;\n const darkerMatch = findMatchingForeground(background, darkText);\n const lighterMatch = findMatchingForeground(background, lightText);\n\n return darkerMatch.step <= lighterMatch.step ? darkerMatch.color : lighterMatch.color;\n};\n\nexport const mixHexColors = (startColor: string, endColor: string, startWeight: number) => {\n const start = parseHexColor(startColor);\n const end = parseHexColor(endColor);\n if (!start || !end) return null;\n\n return toHexColor(mixRgbColors(start, end, 1 - startWeight));\n};\n\nexport const resolveColorCellStyle = (color: DataTableThemeColor) => {\n const lightForeground = color.foreground?.light ?? resolveReadableTextColor(color.light);\n const darkForeground = color.foreground?.dark ?? resolveReadableTextColor(color.dark);\n\n return {\n backgroundColor: `light-dark(${color.light}, ${color.dark})`,\n color: `light-dark(${lightForeground}, ${darkForeground})`,\n };\n};\n","import { Text } from \"@chakra-ui/react\";\nimport { mixHexColors } from \"./color-cell-style\";\nimport type { DataTableColorScaleStop, DataTableThemeColor } from \"./types\";\n\ninterface ColorScaleCellProps {\n value: number;\n}\n\nconst toDisplayPercent = (value: number) => Math.round(value * 100) / 100;\n\nconst mixColors = (startColor: string, endColor: string, startWeight: number) => {\n const mixedColor = mixHexColors(startColor, endColor, startWeight);\n if (mixedColor) return mixedColor;\n\n return `color-mix(in srgb, ${startColor} ${toDisplayPercent(startWeight * 100)}%, ${endColor})`;\n};\n\nconst mixThemeColors = (start: DataTableThemeColor, end: DataTableThemeColor, startWeight: number) => {\n const foreground =\n start.foreground && end.foreground\n ? {\n light: mixColors(start.foreground.light, end.foreground.light, startWeight),\n dark: mixColors(start.foreground.dark, end.foreground.dark, startWeight),\n }\n : undefined;\n\n return {\n light: mixColors(start.light, end.light, startWeight),\n dark: mixColors(start.dark, end.dark, startWeight),\n ...(foreground ? { foreground } : {}),\n };\n};\n\nexport const resolveColorScaleValue = (value: unknown, stops: DataTableColorScaleStop[]) => {\n if (typeof value !== \"number\" || !Number.isFinite(value) || stops.length < 2) return null;\n\n const firstStop = stops[0]!;\n const lastStop = stops[stops.length - 1]!;\n const range = lastStop.value - firstStop.value;\n if (range <= 0) return null;\n\n if (value <= firstStop.value) return firstStop.color;\n if (value >= lastStop.value) return lastStop.color;\n\n const endIndex = stops.findIndex((stop) => value <= stop.value);\n const startStop = stops[endIndex - 1]!;\n const endStop = stops[endIndex]!;\n const segmentProgress = (value - startStop.value) / (endStop.value - startStop.value);\n const startWeight = 1 - segmentProgress;\n return mixThemeColors(startStop.color, endStop.color, startWeight);\n};\n\nexport const ColorScaleCell = (props: ColorScaleCellProps) => {\n const { value } = props;\n\n return (\n <Text textStyle=\"paragraph/S/medium\" fontVariantNumeric=\"tabular-nums\" truncate>\n {value}\n </Text>\n );\n};\n","import { Icon as ChakraIcon } from \"@chakra-ui/react\";\nimport { createColumnHelper } from \"@tanstack/react-table\";\nimport { CalendarClock, CheckCircle2, Hash, Type } from \"lucide-react\";\nimport { isValidElement, type ReactElement, type ReactNode } from \"react\";\n\nimport type { ColumnType, DisplayValue, RowData } from \"./types\";\n\nexport const isDisplayValue = (value: unknown): value is DisplayValue =>\n typeof value === \"object\" && value !== null && \"display\" in value;\n\nexport const isString = (v: unknown): v is string => typeof v === \"string\" || v instanceof String;\nexport const isNumber = (v: unknown): v is number => typeof v === \"number\" || v instanceof Number;\nexport const isBoolean = (v: unknown): v is boolean => typeof v === \"boolean\" || v instanceof Boolean;\n\nexport const getType = (values: unknown[]): ColumnType => {\n const comparableValues = values\n .map((value) => {\n if (isDisplayValue(value)) return value.sortValue ?? null;\n if (value instanceof String || value instanceof Number || value instanceof Boolean) return value.valueOf();\n if (isValidElement(value)) return null;\n return value;\n })\n .filter((value) => value !== null && value !== undefined);\n\n if (comparableValues.length === 0) return \"unknown\";\n if (comparableValues.every((v) => isString(v) && !Number.isNaN(Date.parse(v.toString())))) return \"date\";\n if (comparableValues.every((v) => isNumber(v))) return \"number\";\n if (comparableValues.every((v) => isBoolean(v))) return \"boolean\";\n if (comparableValues.every((v) => isString(v))) return \"string\";\n return \"unknown\";\n};\n\nconst headerIconProps = {\n boxSize: \"14px\",\n marginRight: \"2px\",\n};\n\nexport const getIcon = (values: unknown[]): ReactElement | null => {\n const type = getType(values);\n if (type === \"date\") return <ChakraIcon as={CalendarClock} {...headerIconProps} />;\n if (type === \"string\") return <ChakraIcon as={Type} {...headerIconProps} />;\n if (type === \"number\") return <ChakraIcon as={Hash} {...headerIconProps} />;\n if (type === \"boolean\") return <ChakraIcon as={CheckCircle2} {...headerIconProps} />;\n return null;\n};\n\nexport function formatDisplayValue(value: unknown): ReactNode {\n if (isDisplayValue(value)) return value.display;\n if (isValidElement(value)) return value;\n\n if (value instanceof String || value instanceof Number || value instanceof Boolean) {\n value = value.valueOf();\n }\n\n switch (typeof value) {\n case \"boolean\":\n return value ? \"TRUE\" : \"FALSE\";\n case \"number\":\n return value;\n case \"object\":\n return value !== null ? JSON.stringify(value) : \"-\";\n case \"undefined\":\n return \"-\";\n default:\n return value ? String(value) : \"-\";\n }\n}\n\nexport const columnHelper = createColumnHelper<RowData>();\n","import { ParamEditor } from \"@/components/param-editor\";\n\ninterface JsonField {\n label: string;\n value: unknown;\n}\n\nexport interface FriendlyJsonDisplayProps {\n value: unknown;\n}\n\nconst imageExtensionPattern = /\\.(avif|bmp|gif|jpe?g|png|svg|webp)$/i;\nconst imageLabelPattern = /(^|\\s)(avatar|image|logo|photo|picture|thumbnail)(\\s|$)/i;\n\nconst humanizeKey = (key: string) => {\n const words = key\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .replace(/[_-]+/g, \" \")\n .trim()\n .toLowerCase();\n\n return words ? `${words[0]?.toUpperCase()}${words.slice(1)}` : \"Details\";\n};\n\nconst formatPath = (path: string[]) => path.map((part) => (/^\\d+$/.test(part) ? part : humanizeKey(part))).join(\" / \");\n\nconst isPrimitiveArray = (value: unknown[]) => value.every((item) => item === null || typeof item !== \"object\");\n\nconst appendJsonFields = (value: unknown, path: string[], fields: JsonField[]) => {\n if (Array.isArray(value)) {\n if (value.length === 0 || isPrimitiveArray(value)) {\n fields.push({ label: formatPath(path), value });\n return;\n }\n\n value.forEach((item, index) => {\n appendJsonFields(item, [...path, String(index + 1)], fields);\n });\n return;\n }\n\n if (value !== null && typeof value === \"object\") {\n const entries = Object.entries(value);\n if (entries.length === 0) {\n fields.push({ label: formatPath(path), value: null });\n return;\n }\n\n entries.forEach(([key, item]) => {\n appendJsonFields(item, [...path, key], fields);\n });\n return;\n }\n\n fields.push({ label: formatPath(path), value });\n};\n\nexport const parseJsonCellValue = (value: unknown) => {\n if (typeof value !== \"string\") return value;\n\n try {\n return JSON.parse(value) as unknown;\n } catch {\n return value;\n }\n};\n\nexport const buildJsonFields = (value: unknown) => {\n const fields: JsonField[] = [];\n appendJsonFields(parseJsonCellValue(value), [], fields);\n return fields.map((field) => ({ ...field, label: field.label || \"Value\" }));\n};\n\nexport const isJsonImageValue = (value: unknown, label: string) => {\n if (typeof value !== \"string\") return false;\n if (value.startsWith(\"data:image/\")) return true;\n\n try {\n const url = new URL(value);\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") return false;\n return imageExtensionPattern.test(url.pathname) || imageLabelPattern.test(label);\n } catch {\n return false;\n }\n};\n\nexport const isJsonImageArray = (value: unknown, label: string) => {\n return Array.isArray(value) && value.length > 0 && value.every((item) => isJsonImageValue(item, label));\n};\n\nconst formatJsonPrimitive = (value: unknown) => {\n if (value === null || value === undefined || value === \"\") return \"Not provided\";\n if (typeof value === \"boolean\") return value ? \"Yes\" : \"No\";\n return String(value);\n};\n\nconst formatJsonValue = (value: unknown) => {\n if (Array.isArray(value)) return value.length === 0 ? \"None\" : value.map(formatJsonPrimitive).join(\", \");\n return formatJsonPrimitive(value);\n};\n\nexport const getJsonCellSummary = (value: unknown) => {\n const parsedValue = parseJsonCellValue(value);\n if (Array.isArray(parsedValue) && parsedValue.length === 0) return \"No details\";\n if (parsedValue !== null && typeof parsedValue === \"object\" && Object.keys(parsedValue).length === 0) {\n return \"No details\";\n }\n\n const fields = buildJsonFields(value).filter(\n (field) => !isJsonImageValue(field.value, field.label) && !isJsonImageArray(field.value, field.label),\n );\n if (fields.length === 0) return \"No details\";\n\n const visibleValues = fields.slice(0, 2).map((field) => formatJsonValue(field.value));\n const remainingCount = fields.length - visibleValues.length;\n return [...visibleValues, remainingCount > 0 ? `${remainingCount} more` : null].filter(Boolean).join(\" · \");\n};\n\nconst toReadOnlyValue = (field: JsonField) => {\n const { label, value } = field;\n if (isJsonImageValue(value, label)) {\n return { type: \"image\" as const, src: String(value), alt: `${label} preview` };\n }\n if (Array.isArray(value) && isJsonImageArray(value, label)) {\n return {\n type: \"image-gallery\" as const,\n images: value.map((image, index) => ({ src: String(image), alt: `${label} ${index + 1} preview` })),\n };\n }\n if (Array.isArray(value)) return value as Array<string | number | boolean | null>;\n if (value === undefined) return null;\n return value as string | number | boolean | null;\n};\n\nexport const buildFriendlyJsonParams = (value: unknown) =>\n buildJsonFields(value).map((field, index) => ({\n id: `friendly-json-${index}`,\n name: field.label,\n type: \"readOnly\" as const,\n value: toReadOnlyValue(field),\n }));\n\nexport const FriendlyJsonDisplay = (props: FriendlyJsonDisplayProps) => {\n const { value } = props;\n return <ParamEditor params={buildFriendlyJsonParams(value)} readOnly fullWidth />;\n};\n","import { Button, HStack, Image, Popover, Portal, Text } from \"@chakra-ui/react\";\nimport { Braces, ChevronRight } from \"lucide-react\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\nimport {\n buildJsonFields,\n FriendlyJsonDisplay,\n getJsonCellSummary,\n isJsonImageArray,\n isJsonImageValue,\n} from \"./friendly-json-display\";\n\ninterface JsonCellProps {\n columnLabel: string;\n value: unknown;\n}\n\nconst stopRowActivation = (event: { stopPropagation: () => void }) => event.stopPropagation();\n\nexport const JsonCell = (props: JsonCellProps) => {\n const { columnLabel, value } = props;\n const fields = buildJsonFields(value);\n const imageFields = fields\n .flatMap((field) => {\n if (isJsonImageValue(field.value, field.label)) return [field];\n if (!Array.isArray(field.value) || !isJsonImageArray(field.value, field.label)) return [];\n return field.value.map((image, index) => ({ label: `${field.label} ${index + 1}`, value: image }));\n })\n .slice(0, 2);\n const summary = getJsonCellSummary(value);\n\n return (\n <Popover.Root positioning={{ placement: \"bottom-start\", offset: { mainAxis: 6 } }}>\n <Popover.Trigger asChild>\n <Button\n aria-label={`View ${columnLabel} details`}\n variant=\"ghost\"\n size=\"xs\"\n width=\"full\"\n minWidth=\"0\"\n height=\"28px\"\n paddingX=\"2xs\"\n justifyContent=\"flex-start\"\n onClick={stopRowActivation}\n >\n {imageFields.length > 0 ? (\n <HStack gap=\"-1\" flexShrink=\"0\">\n {imageFields.map((field) => (\n <Image\n key={field.label}\n src={String(field.value)}\n alt={`${field.label} preview`}\n boxSize=\"22px\"\n borderRadius=\"xs\"\n borderWidth=\"1px\"\n borderColor=\"border.subtle\"\n objectFit=\"cover\"\n />\n ))}\n </HStack>\n ) : (\n <Braces size={14} />\n )}\n <Text flex=\"1\" minWidth=\"0\" textAlign=\"left\" textStyle=\"paragraph/S/regular\" truncate>\n {summary}\n </Text>\n <ChevronRight size={12} />\n </Button>\n </Popover.Trigger>\n <Portal>\n <Popover.Positioner>\n <Popover.Content width=\"min(380px, calc(100vw - 32px))\" padding=\"0\" background=\"bg\" overflow=\"hidden\">\n <ScrollArea maxH=\"360px\" viewportProps={{ overscrollBehavior: \"contain\" }}>\n <FriendlyJsonDisplay value={value} />\n </ScrollArea>\n </Popover.Content>\n </Popover.Positioner>\n </Portal>\n </Popover.Root>\n );\n};\n","import { Icon as ChakraIcon, chakra, IconButton, Menu, Portal, Text } from \"@chakra-ui/react\";\nimport type { CellContext, HeaderContext, RowSelectionState } from \"@tanstack/react-table\";\nimport { Check, ChevronDown, CircleHelp, Minus } from \"lucide-react\";\nimport { type CSSProperties, cloneElement, isValidElement, type ReactNode } from \"react\";\n\nimport { Checkbox } from \"@/components/primitives/checkbox\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport { ListRow } from \"../list-row/list-row\";\nimport { CategoricalColorCell, resolveCategoricalColor } from \"./categorical-color-cell\";\nimport { resolveColorCellStyle } from \"./color-cell-style\";\nimport { ColorScaleCell, resolveColorScaleValue } from \"./color-scale-cell\";\nimport { columnHelper, formatDisplayValue, getIcon, isDisplayValue } from \"./helpers\";\nimport { JsonCell } from \"./json-cell\";\nimport type { DataTableColumnRenderer, DataTableRowAction, RowData } from \"./types\";\n\nconst getSortValue = (value: unknown) => {\n return isDisplayValue(value) ? value.sortValue : value;\n};\n\nconst compareValues = (valueA: unknown, valueB: unknown) => {\n if (valueA === valueB) return 0;\n if (valueA === null || valueA === undefined) return 1;\n if (valueB === null || valueB === undefined) return -1;\n\n if (typeof valueA === \"number\" && typeof valueB === \"number\") {\n return valueA - valueB;\n }\n\n return String(valueA).localeCompare(String(valueB));\n};\n\nconst toSingleLineElement = (element: ReactNode) => {\n if (!isValidElement<{ style?: CSSProperties }>(element)) return element;\n\n return cloneElement(element, {\n style: {\n ...element.props.style,\n flexWrap: \"nowrap\",\n minWidth: 0,\n whiteSpace: \"nowrap\",\n },\n });\n};\n\ninterface BuildColumnsOptions {\n columnIcons?: Partial<Record<string, ReactNode>>;\n columnDescriptions?: Partial<Record<string, string>>;\n compactHeaders?: Partial<Record<string, string>>;\n enableSelection?: boolean;\n rowActions?: DataTableRowAction[];\n selectedRowIds?: RowSelectionState;\n columnRenderers?: Partial<Record<string, DataTableColumnRenderer>>;\n}\n\nconst stopControlPropagation = (event: { stopPropagation: () => void }) => {\n event.stopPropagation();\n};\n\nconst SelectionHeader = (props: HeaderContext<RowData, unknown>) => {\n const { table } = props;\n const checked = table.getIsAllRowsSelected();\n const isIndeterminate = !checked && table.getIsSomeRowsSelected();\n\n return (\n <Checkbox\n checked={checked ? true : isIndeterminate ? \"indeterminate\" : false}\n aria-label=\"Select all\"\n icon={<ChakraIcon as={isIndeterminate ? Minus : Check} boxSize=\"12px\" strokeWidth=\"3\" />}\n onClick={stopControlPropagation}\n onCheckedChange={(details) => table.toggleAllRowsSelected(details.checked === true)}\n />\n );\n};\n\nconst SelectionCell = (props: CellContext<RowData, unknown> & { selectedRowIds?: RowSelectionState }) => {\n const { row, selectedRowIds } = props;\n\n return (\n <Checkbox\n checked={Boolean(selectedRowIds?.[row.id])}\n aria-label=\"Select row\"\n icon={<ChakraIcon as={Check} boxSize=\"12px\" strokeWidth=\"3\" />}\n onClick={stopControlPropagation}\n onCheckedChange={(details) => row.toggleSelected(details.checked === true)}\n />\n );\n};\n\nconst RowActionsCell = (props: CellContext<RowData, unknown> & { actions: DataTableRowAction[] }) => {\n const { row, actions } = props;\n\n return (\n <Menu.Root>\n <Menu.Trigger asChild>\n <IconButton aria-label=\"Row actions\" size=\"2xs\" variant=\"ghost\" onClick={stopControlPropagation}>\n <ChakraIcon as={ChevronDown} boxSize=\"14px\" />\n </IconButton>\n </Menu.Trigger>\n <Portal>\n <Menu.Positioner>\n <Menu.Content zIndex=\"popover\" bg=\"bg\">\n {actions.map((action) => (\n <Menu.Item key={action.label} value={action.label} asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n tone={action.destructive ? \"danger\" : \"default\"}\n label={action.label}\n icon={action.icon}\n onClick={stopControlPropagation}\n onActivate={() => action.onSelect(row.original)}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n\ninterface FormattedCellProps {\n value: unknown;\n}\n\nconst FormattedCell = (props: FormattedCellProps) => {\n const { value } = props;\n const displayValue = formatDisplayValue(value);\n\n if (isValidElement(displayValue)) {\n return (\n <chakra.span display=\"inline-flex\" maxWidth=\"full\" minW=\"0\" overflow=\"hidden\" whiteSpace=\"nowrap\">\n {toSingleLineElement(displayValue)}\n </chakra.span>\n );\n }\n\n return (\n <Text maxWidth=\"full\" overflow=\"hidden\" textOverflow=\"ellipsis\" textStyle=\"paragraph/S/regular\" whiteSpace=\"nowrap\">\n {displayValue}\n </Text>\n );\n};\n\ninterface DataCellProps {\n columnLabel: string;\n renderer?: DataTableColumnRenderer;\n value: unknown;\n}\n\nconst DataCell = (props: DataCellProps) => {\n const { columnLabel, renderer, value } = props;\n\n if (renderer?.type === \"json\") return <JsonCell columnLabel={columnLabel} value={value} />;\n\n if (renderer?.type === \"color-scale\") {\n const color = resolveColorScaleValue(value, renderer.stops);\n if (color && typeof value === \"number\") return <ColorScaleCell value={value} />;\n }\n\n if (renderer?.type === \"categorical-color\") {\n const color = resolveCategoricalColor(value, renderer.categories);\n if (color) {\n return (\n <CategoricalColorCell>\n <FormattedCell value={value} />\n </CategoricalColorCell>\n );\n }\n }\n\n return <FormattedCell value={value} />;\n};\n\nconst resolveDataCellStyle = (value: unknown, renderer?: DataTableColumnRenderer) => {\n if (renderer?.type === \"color-scale\") {\n const color = resolveColorScaleValue(value, renderer.stops);\n if (color && typeof value === \"number\") return resolveColorCellStyle(color);\n }\n\n if (renderer?.type === \"categorical-color\") {\n const color = resolveCategoricalColor(value, renderer.categories);\n if (color) return resolveColorCellStyle(color);\n }\n};\n\nexport function buildColumns(data: RowData[], columnKeys: string[], options: BuildColumnsOptions = {}) {\n const {\n columnIcons,\n columnDescriptions,\n compactHeaders,\n enableSelection = false,\n rowActions = [],\n selectedRowIds,\n columnRenderers,\n } = options;\n const rowIndexColumn = columnHelper.accessor((_row, rowIndex) => rowIndex + 1, {\n header: \"\",\n id: \"rowIndex\",\n enableResizing: false,\n size: 20,\n cell: (info) => (\n <chakra.span display={\"block\"} textStyle={\"paragraph/S/regular\"} textAlign={\"center\"}>\n {info.getValue()}\n </chakra.span>\n ),\n });\n\n const selectionColumn = columnHelper.display({\n id: \"rowSelection\",\n header: SelectionHeader,\n cell: (info) => <SelectionCell {...info} selectedRowIds={selectedRowIds} />,\n enableResizing: false,\n enableSorting: false,\n size: 36,\n });\n\n const dataColumns = columnKeys.map((key) => {\n const fallBackKey = key || \"-\";\n const columnValues = data.map((row) => row[fallBackKey]);\n const renderer = columnRenderers?.[fallBackKey];\n const customIcon = columnIcons?.[fallBackKey];\n const headerIcon = customIcon === undefined ? getIcon(columnValues) : customIcon;\n const columnDescription = columnDescriptions?.[fallBackKey];\n\n return columnHelper.accessor((row) => row[fallBackKey], {\n id: fallBackKey,\n header: () => {\n const headerLabel = compactHeaders?.[fallBackKey] ?? fallBackKey;\n return (\n <chakra.span display=\"inline-flex\" alignItems=\"center\" gap=\"4px\" minW=\"0\" maxW=\"full\" overflow=\"hidden\">\n {headerIcon}\n <chakra.span overflow=\"hidden\" textOverflow=\"ellipsis\" whiteSpace=\"nowrap\">\n {headerLabel}\n </chakra.span>\n {columnDescription ? (\n <Tooltip content={columnDescription}>\n <ChakraIcon\n as={CircleHelp}\n aria-label={`About ${headerLabel}`}\n boxSize=\"12px\"\n color=\"fg.muted\"\n cursor=\"help\"\n flexShrink={0}\n opacity={0.6}\n tabIndex={0}\n />\n </Tooltip>\n ) : null}\n </chakra.span>\n );\n },\n cell: (info) => <DataCell columnLabel={fallBackKey} renderer={renderer} value={info.getValue()} />,\n meta: {\n getCellStyle: (value: unknown) => resolveDataCellStyle(value, renderer),\n },\n sortingFn: (rowA, rowB) => {\n const valueA = getSortValue(rowA.original[fallBackKey]);\n const valueB = getSortValue(rowB.original[fallBackKey]);\n return compareValues(valueA, valueB);\n },\n });\n });\n\n const rowActionsColumn = columnHelper.display({\n id: \"rowActions\",\n header: \"\",\n cell: (info) => <RowActionsCell {...info} actions={rowActions} />,\n enableResizing: false,\n enableSorting: false,\n size: 36,\n });\n\n return [\n rowIndexColumn,\n ...(enableSelection ? [selectionColumn] : []),\n ...dataColumns,\n ...(rowActions.length > 0 ? [rowActionsColumn] : []),\n ];\n}\n","import { Box, HStack, Icon, IconButton, Popover, Portal, Stack, Text } from \"@chakra-ui/react\";\nimport { closestCenter, DndContext, type DragEndEvent, PointerSensor, useSensor, useSensors } from \"@dnd-kit/core\";\nimport { SortableContext, useSortable, verticalListSortingStrategy } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { Check, GripVertical, Settings2 } from \"lucide-react\";\nimport { useEffect, useRef, useState } from \"react\";\n\nimport { SearchableMenuInput } from \"@/components/overlays/searchable-menu-input\";\nimport { Checkbox } from \"@/components/primitives/checkbox\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\nimport { Switch } from \"@/components/primitives/switch\";\n\ninterface DataTableColumnMenuColumn {\n id: string;\n label: string;\n}\n\ninterface DataTableColumnMenuProps {\n columns: DataTableColumnMenuColumn[];\n visibleColumnIds: Set<string>;\n showStats: boolean;\n statsAvailable: boolean;\n onColumnVisibilityChange: (columnId: string, visible: boolean) => void;\n onColumnReorder: (activeColumnId: string, overColumnId: string) => void;\n onStatsVisibilityChange: (showStats: boolean) => void;\n}\n\ninterface DataTableColumnMenuRowProps {\n column: DataTableColumnMenuColumn;\n checked: boolean;\n onColumnVisibilityChange: (columnId: string, visible: boolean) => void;\n}\n\nconst DataTableColumnMenuRow = (props: DataTableColumnMenuRowProps) => {\n const { column, checked, onColumnVisibilityChange } = props;\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({ id: column.id });\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.5 : 1,\n };\n\n return (\n <HStack\n ref={setNodeRef}\n style={style}\n gap=\"2xs\"\n minW=\"0\"\n width=\"full\"\n borderRadius=\"xs\"\n px=\"xs\"\n py=\"2xs\"\n _hover={{ bg: \"bg.hover\" }}\n >\n <Box as=\"span\" display=\"inline-flex\" cursor=\"grab\" color=\"fg.muted\" {...attributes} {...listeners}>\n <GripVertical size={14} />\n </Box>\n <Checkbox\n checked={checked}\n flex=\"1\"\n minW=\"0\"\n width=\"full\"\n flexDirection=\"row-reverse\"\n justifyContent=\"space-between\"\n size=\"sm\"\n icon={<Icon as={Check} boxSize=\"12px\" strokeWidth=\"3\" />}\n onCheckedChange={(details) => onColumnVisibilityChange(column.id, details.checked === true)}\n >\n <Text as=\"span\" textStyle=\"label/S/regular\" truncate>\n {column.label}\n </Text>\n </Checkbox>\n </HStack>\n );\n};\n\nexport const DataTableColumnMenu = (props: DataTableColumnMenuProps) => {\n const {\n columns,\n visibleColumnIds,\n showStats,\n statsAvailable,\n onColumnVisibilityChange,\n onColumnReorder,\n onStatsVisibilityChange,\n } = props;\n const triggerRef = useRef<HTMLButtonElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 5 } }));\n const normalizedQuery = query.trim().toLowerCase();\n const filteredColumns = normalizedQuery\n ? columns.filter((column) => column.label.toLowerCase().includes(normalizedQuery))\n : columns;\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n\n onColumnReorder(String(active.id), String(over.id));\n };\n\n useEffect(() => {\n if (!open) return;\n\n const closeOnOutsidePointerDown = (event: PointerEvent) => {\n const target = event.target;\n if (!(target instanceof Node)) return;\n if (contentRef.current?.contains(target) || triggerRef.current?.contains(target)) return;\n\n setOpen(false);\n };\n const closeOnEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n setOpen(false);\n }\n };\n\n document.addEventListener(\"pointerdown\", closeOnOutsidePointerDown);\n document.addEventListener(\"keydown\", closeOnEscape, true);\n return () => {\n document.removeEventListener(\"pointerdown\", closeOnOutsidePointerDown);\n document.removeEventListener(\"keydown\", closeOnEscape, true);\n };\n }, [open]);\n\n return (\n <Popover.Root\n open={open}\n closeOnInteractOutside={false}\n positioning={{\n placement: \"bottom-end\",\n offset: { mainAxis: 8 },\n getAnchorElement: () => triggerRef.current,\n }}\n >\n <Popover.Trigger asChild>\n <IconButton\n ref={triggerRef}\n aria-label=\"Display settings\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setOpen((current) => !current)}\n >\n <Icon as={Settings2} boxSize=\"14px\" />\n </IconButton>\n </Popover.Trigger>\n <Portal>\n <Popover.Positioner>\n <Popover.Content ref={contentRef} width=\"min(320px, calc(100vw - 32px))\" p=\"0\" bg=\"bg\" overflow=\"hidden\">\n <Stack gap=\"0\">\n {statsAvailable ? (\n <Box borderBottomWidth=\"1px\" borderColor=\"border.subtle\" padding=\"xs\">\n <Switch\n checked={showStats}\n inputProps={{ role: \"switch\" }}\n width=\"full\"\n flexDirection=\"row-reverse\"\n justifyContent=\"space-between\"\n onCheckedChange={(details) => onStatsVisibilityChange(details.checked === true)}\n >\n <Text as=\"span\" textStyle=\"label/S/regular\">\n Statistics\n </Text>\n </Switch>\n </Box>\n ) : null}\n <SearchableMenuInput value={query} placeholder=\"Search columns\" onValueChange={setQuery} />\n <ScrollArea maxH=\"280px\" viewportProps={{ overscrollBehavior: \"contain\" }}>\n <Box padding=\"2xs\">\n <DndContext sensors={sensors} collisionDetection={closestCenter} onDragEnd={handleDragEnd}>\n <SortableContext items={columns.map((column) => column.id)} strategy={verticalListSortingStrategy}>\n <Stack gap=\"1px\">\n {filteredColumns.map((column) => (\n <DataTableColumnMenuRow\n key={column.id}\n column={column}\n checked={visibleColumnIds.has(column.id)}\n onColumnVisibilityChange={onColumnVisibilityChange}\n />\n ))}\n </Stack>\n </SortableContext>\n </DndContext>\n </Box>\n </ScrollArea>\n </Stack>\n </Popover.Content>\n </Popover.Positioner>\n </Portal>\n </Popover.Root>\n );\n};\n","import type { ReactNode } from \"react\";\nimport { KanbanRendererToolbar } from \"../kanban-renderer/kanban-renderer-toolbar\";\nimport type { AttributeDescriptor, KanbanRendererRow } from \"../kanban-renderer/types\";\n\ninterface DataTableHeaderProps {\n rows: KanbanRendererRow[];\n attributes: AttributeDescriptor[];\n storageKey: string;\n columnControl: ReactNode;\n}\n\nexport const DataTableHeader = (props: DataTableHeaderProps) => {\n const { rows, attributes, storageKey, columnControl } = props;\n\n return (\n <KanbanRendererToolbar\n rows={rows}\n storageKey={storageKey}\n attributes={attributes}\n defaultSettings={{ viewMode: \"list\" }}\n displayControl={columnControl}\n />\n );\n};\n","import type {\n AttributeDescriptor,\n KanbanRendererFilterState,\n KanbanRendererRow,\n} from \"@/components/kanban-renderer/types\";\nimport { filterRows } from \"../kanban-renderer/kanban-renderer-grouping\";\nimport { isDisplayValue } from \"./helpers\";\nimport type { DataTableProps, DataTableSelectionAction, RowData } from \"./types\";\n\nexport const defaultPageSize = 30;\n\nexport interface DataTableRendererRow extends KanbanRendererRow {\n sourceRow: RowData;\n}\n\nexport const resolveDataTableRowId = (row: RowData, index: number, getRowId?: DataTableProps[\"getRowId\"]) => {\n if (getRowId) return getRowId(row, index);\n return typeof row.id === \"string\" ? row.id : String(index);\n};\n\nexport const resolveInitialPageSize = (props: Pick<DataTableProps, \"initialPageSize\">) => {\n if (typeof props.initialPageSize === \"number\" && props.initialPageSize > 0) return props.initialPageSize;\n return defaultPageSize;\n};\n\nexport const getSelectedOriginalRows = (rows: Array<{ original: RowData }>) => rows.map((row) => row.original);\n\nexport const resolveSelectionActions = (\n props: Pick<DataTableProps, \"selectionActions\" | \"onCSVDownload\" | \"getRowId\">,\n) => {\n const actions: DataTableSelectionAction[] = [...(props.selectionActions ?? [])];\n\n if (props.onCSVDownload) {\n actions.push({\n label: \"Download CSV\",\n onSelect: (rows) => {\n props.onCSVDownload?.(rows.map((row, index) => resolveDataTableRowId(row, index, props.getRowId)));\n },\n });\n }\n\n return actions;\n};\n\nexport const shouldEnableSelection = (\n props: Pick<DataTableProps, \"selectionMode\" | \"selectionActions\" | \"onCSVDownload\">,\n) => props.selectionMode === \"multiple\" || Boolean(props.onCSVDownload) || Boolean(props.selectionActions?.length);\n\nexport const shouldHighlightActiveRow = (props: {\n enableRowActivation?: boolean;\n activeRowId?: string | null;\n rowId: string;\n}) => props.enableRowActivation === true && props.activeRowId === props.rowId;\n\nconst toAttributeValue = (value: unknown) => {\n const raw = isDisplayValue(value) ? value.sortValue : value;\n if (typeof raw === \"boolean\") return String(raw);\n return raw;\n};\n\nconst isNumberColumn = (rows: RowData[], columnKey: string) => {\n const values = rows\n .map((row) => toAttributeValue(row[columnKey]))\n .filter((value) => value !== null && value !== undefined);\n return values.length > 0 && values.every((value) => typeof value === \"number\");\n};\n\nconst resolveAttributeType = (rows: RowData[], columnKey: string): AttributeDescriptor[\"type\"] => {\n if (isNumberColumn(rows, columnKey)) return { kind: \"number\" };\n return { kind: \"string\" };\n};\n\nexport const buildDataTableRendererAttributes = (\n rows: RowData[],\n columnKeys: string[],\n compactHeaders?: Partial<Record<string, string>>,\n): AttributeDescriptor[] =>\n columnKeys.map((columnKey) => ({\n id: columnKey,\n label: compactHeaders?.[columnKey] ?? columnKey,\n type: resolveAttributeType(rows, columnKey),\n filterable: true,\n sortable: true,\n displayable: true,\n }));\n\nexport const buildDataTableRendererRows = (\n rows: RowData[],\n columnKeys: string[],\n getRowId?: DataTableProps[\"getRowId\"],\n): DataTableRendererRow[] =>\n rows.map((row, index) => {\n const attributes = Object.fromEntries(columnKeys.map((columnKey) => [columnKey, toAttributeValue(row[columnKey])]));\n const rowId = resolveDataTableRowId(row, index, getRowId);\n const firstValue = columnKeys.length > 0 ? toAttributeValue(row[columnKeys[0]!]) : rowId;\n\n return {\n id: rowId,\n title: String(firstValue ?? rowId),\n attributes,\n sourceRow: row,\n };\n });\n\nexport const filterDataTableRows = (\n rows: DataTableRendererRow[],\n filters: KanbanRendererFilterState,\n attributes: AttributeDescriptor[],\n) => filterRows(rows, filters, attributes) as DataTableRendererRow[];\n\nexport const resolveDataTableColumnOrder = (availableColumnIds: string[], requestedColumnOrder: string[]) => {\n const availableColumnIdSet = new Set(availableColumnIds);\n const orderedColumnIds = requestedColumnOrder.filter((columnId) => availableColumnIdSet.has(columnId));\n const orderedColumnIdSet = new Set(orderedColumnIds);\n const missingColumnIds = availableColumnIds.filter((columnId) => !orderedColumnIdSet.has(columnId));\n\n return [...orderedColumnIds, ...missingColumnIds];\n};\n\nexport const reorderDataTableColumns = (columnIds: string[], activeColumnId: string, overColumnId: string) => {\n const activeIndex = columnIds.indexOf(activeColumnId);\n const overIndex = columnIds.indexOf(overColumnId);\n\n if (activeIndex < 0 || overIndex < 0 || activeIndex === overIndex) return columnIds;\n\n const nextColumnIds = [...columnIds];\n const [activeColumn] = nextColumnIds.splice(activeIndex, 1);\n if (!activeColumn) return columnIds;\n\n nextColumnIds.splice(overIndex, 0, activeColumn);\n return nextColumnIds;\n};\n\nexport const resolveDataTableToolbarStorageKey = (props: { toolbarStorageKey?: string; columnKeys: string[] }) =>\n props.toolbarStorageKey ?? `data-table:${props.columnKeys.join(\"|\") || \"empty\"}`;\n","import { Chart, type UseChartProps, useChart } from \"@chakra-ui/charts\";\nimport type { ReactNode } from \"react\";\nimport {\n Bar,\n BarChart,\n Tooltip as RechartsTooltip,\n useActiveTooltipCoordinate,\n usePlotArea,\n XAxis,\n YAxis,\n} from \"recharts\";\n\ntype ChartSeries<T> = NonNullable<UseChartProps<T>[\"series\"]>[number];\ntype StringKeyOf<T> = Extract<keyof T, string>;\n\nconst StatChartCrosshair = () => {\n const coordinate = useActiveTooltipCoordinate();\n const plotArea = usePlotArea();\n\n if (!coordinate || !plotArea) return null;\n\n return (\n <g pointerEvents=\"none\" stroke=\"var(--chakra-colors-border-emphasized)\" strokeWidth=\"1\">\n <line x1={coordinate.x} x2={coordinate.x} y1={plotArea.y} y2={plotArea.y + plotArea.height} />\n <line x1={plotArea.x} x2={plotArea.x + plotArea.width} y1={coordinate.y} y2={coordinate.y} />\n </g>\n );\n};\n\ninterface DataTableStatChartProps<T extends object> {\n data: T[];\n dataKey: StringKeyOf<T>;\n color: ChartSeries<T>[\"color\"];\n height: string;\n ariaLabel: string;\n tooltipLabel: (datum: T) => ReactNode;\n tooltipValue: (value: string | number) => ReactNode;\n tooltipSeriesLabel: string;\n layout?: \"horizontal\" | \"vertical\";\n categoryKey?: StringKeyOf<T>;\n domain?: [number, number];\n barSize?: number;\n barCategoryGap?: number;\n}\n\nexport const DataTableStatChart = <T extends object>(props: DataTableStatChartProps<T>) => {\n const {\n data,\n dataKey,\n color,\n height,\n ariaLabel,\n tooltipLabel,\n tooltipValue,\n tooltipSeriesLabel,\n layout = \"horizontal\",\n categoryKey,\n domain,\n barSize,\n barCategoryGap = 1,\n } = props;\n const chart = useChart({ data, series: [{ name: dataKey, color }] });\n const getBarValue = (datum: T) => datum[dataKey] as string | number;\n const getCategoryValue = categoryKey ? (datum: T) => datum[categoryKey] as string | number : undefined;\n\n return (\n <Chart.Root chart={chart} height={height} aspectRatio=\"auto\" cursor=\"crosshair\" aria-label={ariaLabel}>\n <BarChart\n responsive\n data={chart.data}\n layout={layout}\n margin={{ top: 2, right: 0, bottom: 0, left: 0 }}\n barCategoryGap={barCategoryGap}\n >\n {layout === \"vertical\" ? (\n <>\n <XAxis type=\"number\" domain={domain} hide />\n <YAxis type=\"category\" dataKey={getCategoryValue} hide />\n </>\n ) : null}\n <Bar dataKey={getBarValue} fill={chart.color(color)} barSize={barSize} isAnimationActive={false} />\n <RechartsTooltip\n allowEscapeViewBox={{ x: true, y: true }}\n content={\n <Chart.Tooltip\n labelFormatter={(label, payload) => {\n const datum = payload[0]?.payload as T | undefined;\n return datum ? tooltipLabel(datum) : label;\n }}\n formatter={(value) => [tooltipValue(value), tooltipSeriesLabel]}\n />\n }\n cursor={<StatChartCrosshair />}\n isAnimationActive={false}\n wrapperStyle={{ zIndex: 1800 }}\n />\n </BarChart>\n </Chart.Root>\n );\n};\n","import { isDisplayValue } from \"./helpers\";\nimport type { RowData } from \"./types\";\n\nexport interface HistogramBin {\n start: number;\n end: number;\n count: number;\n}\n\nexport interface HistogramStat {\n min: number;\n max: number;\n bins: HistogramBin[];\n}\n\nexport interface TopValueStat {\n label: string;\n count: number;\n percentage: number;\n}\n\nconst getStatValue = (value: unknown) => (isDisplayValue(value) ? value.sortValue : value);\n\nconst getColumnStatValues = (rows: RowData[], columnId: string) =>\n rows\n .map((row) => getStatValue(row[columnId]))\n .filter((value) => value !== null && value !== undefined && value !== \"\");\n\nexport const countUniqueStatValues = (rows: RowData[], columnId: string) =>\n new Set(getColumnStatValues(rows, columnId)).size;\n\nexport const buildTopValuesStat = (rows: RowData[], columnId: string, limit: number) => {\n const values = getColumnStatValues(rows, columnId);\n const counts = new Map<unknown, number>();\n\n for (const value of values) {\n counts.set(value, (counts.get(value) ?? 0) + 1);\n }\n\n const groups: TopValueStat[] = [...counts.entries()]\n .map(([value, count]) => ({\n label: String(value),\n count,\n percentage: Math.round((count / values.length) * 100),\n }))\n .sort((left, right) => right.count - left.count || left.label.localeCompare(right.label));\n const topGroups = groups.slice(0, limit);\n const otherCount = groups.slice(limit).reduce((total, group) => total + group.count, 0);\n\n if (otherCount === 0) return topGroups;\n\n return [\n ...topGroups,\n {\n label: \"Other\",\n count: otherCount,\n percentage: Math.round((otherCount / values.length) * 100),\n },\n ];\n};\n\nexport const buildHistogramStat = (rows: RowData[], columnId: string, binCount: number): HistogramStat | null => {\n const values = getColumnStatValues(rows, columnId).filter((value): value is number => typeof value === \"number\");\n if (values.length === 0) return null;\n\n const min = Math.min(...values);\n const max = Math.max(...values);\n const binWidth = (max - min) / binCount;\n const bins = Array.from({ length: binCount }, (_, index) => ({\n start: min + binWidth * index,\n end: min + binWidth * (index + 1),\n count: 0,\n }));\n\n for (const value of values) {\n const binIndex = value === max || binWidth === 0 ? binCount - 1 : Math.floor((value - min) / binWidth);\n bins[binIndex]!.count += 1;\n }\n\n return { min, max, bins };\n};\n","import { Box, Flex, Table, Text } from \"@chakra-ui/react\";\nimport type { Header, HeaderGroup } from \"@tanstack/react-table\";\nimport { DataTableStatChart } from \"./data-table-stat-chart\";\nimport { buildHistogramStat, buildTopValuesStat, countUniqueStatValues } from \"./data-table-stats\";\nimport type { DataTableColumnStat, RowData } from \"./types\";\n\nconst formatNumber = new Intl.NumberFormat(undefined, { maximumFractionDigits: 2 }).format;\nconst STAT_CHART_COLOR = \"vis.categorical.1\";\n\ninterface SingleValueStatProps {\n value: string;\n count: number;\n}\n\nconst SingleValueStat = (props: SingleValueStatProps) => {\n const { value, count } = props;\n\n return (\n <Flex data-single-value-stat direction=\"column\" gap=\"2xs\" alignItems=\"flex-start\" minWidth=\"0\">\n <Text textStyle=\"label/L/medium\" lineHeight=\"1\" maxWidth=\"100%\" truncate>\n {value}\n </Text>\n <Text textStyle=\"label/XS\" color=\"fg.muted\">\n {formatNumber(count)} {count === 1 ? \"value\" : \"values\"}\n </Text>\n </Flex>\n );\n};\n\ninterface UniqueStatProps {\n rows: RowData[];\n columnId: string;\n}\n\nconst UniqueStat = (props: UniqueStatProps) => {\n const { rows, columnId } = props;\n const count = countUniqueStatValues(rows, columnId);\n\n return (\n <Flex direction=\"column\" gap=\"2xs\" alignItems=\"flex-start\">\n <Text textStyle=\"label/L/medium\" lineHeight=\"1\">\n {formatNumber(count)}\n </Text>\n <Text textStyle=\"label/XS/regular\" color=\"fg.muted\">\n unique values\n </Text>\n </Flex>\n );\n};\n\ninterface HistogramStatProps {\n rows: RowData[];\n columnId: string;\n binCount: number;\n}\n\nconst HistogramStat = (props: HistogramStatProps) => {\n const { rows, columnId, binCount } = props;\n const histogram = buildHistogramStat(rows, columnId, binCount);\n\n if (!histogram) {\n return (\n <Text textStyle=\"label/XS/regular\" color=\"fg.muted\">\n No numeric values\n </Text>\n );\n }\n\n const valueCount = histogram.bins.reduce((total, bin) => total + bin.count, 0);\n if (histogram.min === histogram.max) {\n return <SingleValueStat value={formatNumber(histogram.min)} count={valueCount} />;\n }\n\n return (\n <Flex direction=\"column\" width=\"100%\" gap=\"2xs\">\n <DataTableStatChart\n data={histogram.bins}\n dataKey=\"count\"\n color={STAT_CHART_COLOR}\n height=\"40px\"\n ariaLabel={`Distribution for ${columnId}`}\n tooltipLabel={(bin) => `${formatNumber(bin.start)} – ${formatNumber(bin.end)}`}\n tooltipValue={(value) => `${formatNumber(Number(value))} values`}\n tooltipSeriesLabel=\"Count\"\n />\n <Flex justifyContent=\"space-between\" gap=\"xs\">\n <Text textStyle=\"label/XS/regular\" color=\"fg.muted\">\n {formatNumber(histogram.min)}\n </Text>\n <Text textStyle=\"label/XS/regular\" color=\"fg.muted\">\n {formatNumber(histogram.max)}\n </Text>\n </Flex>\n </Flex>\n );\n};\n\ninterface TopValuesStatProps {\n rows: RowData[];\n columnId: string;\n limit: number;\n}\n\nconst TopValuesStat = (props: TopValuesStatProps) => {\n const { rows, columnId, limit } = props;\n const groups = buildTopValuesStat(rows, columnId, limit);\n\n if (groups.length === 1 && groups[0]) {\n return <SingleValueStat value={groups[0].label} count={groups[0].count} />;\n }\n\n return (\n <Flex direction=\"column\" width=\"100%\" gap=\"2xs\">\n {groups.map((group) => (\n <Box key={group.label} position=\"relative\" height=\"18px\">\n <DataTableStatChart\n data={[group]}\n dataKey=\"percentage\"\n categoryKey=\"label\"\n color={STAT_CHART_COLOR}\n height=\"18px\"\n ariaLabel={`${group.label}: ${group.percentage}%`}\n layout=\"vertical\"\n domain={[0, 100]}\n barSize={18}\n tooltipLabel={(datum) => `${datum.label} · ${formatNumber(datum.count)} values`}\n tooltipValue={(value) => `${formatNumber(Number(value))}%`}\n tooltipSeriesLabel=\"Share\"\n />\n <Flex\n position=\"absolute\"\n inset=\"0\"\n paddingX=\"2xs\"\n justifyContent=\"space-between\"\n gap=\"xs\"\n pointerEvents=\"none\"\n >\n <Text textStyle=\"label/2XS\" color=\"fg.inverted\" truncate>\n {group.label}\n </Text>\n <Text textStyle=\"label/2XS/medium\" color=\"fg.muted\">\n {group.percentage}%\n </Text>\n </Flex>\n </Box>\n ))}\n </Flex>\n );\n};\n\ninterface DataTableStatProps {\n rows: RowData[];\n columnId: string;\n stat: DataTableColumnStat;\n}\n\nconst DataTableStat = (props: DataTableStatProps) => {\n const { rows, columnId, stat } = props;\n\n if (stat.type === \"unique\") return <UniqueStat rows={rows} columnId={columnId} />;\n if (stat.type === \"histogram\") {\n return <HistogramStat rows={rows} columnId={columnId} binCount={stat.bins ?? 10} />;\n }\n return <TopValuesStat rows={rows} columnId={columnId} limit={stat.limit ?? 2} />;\n};\n\ninterface DataTableStatCellProps {\n header: Header<RowData, unknown>;\n headerGroup: HeaderGroup<RowData>;\n rows: RowData[];\n columnStats: Partial<Record<string, DataTableColumnStat>>;\n fullWidth?: boolean;\n}\n\nconst DataTableStatCell = (props: DataTableStatCellProps) => {\n const { header, headerGroup, rows, columnStats, fullWidth } = props;\n const stat = columnStats[header.column.id];\n\n return (\n <Table.ColumnHeader\n data-column-id={header.column.id}\n data-stat-type={stat?.type}\n borderRight=\"1px solid\"\n _last={{ borderRight: \"none\" }}\n borderColor=\"border.subtle\"\n padding=\"xs\"\n verticalAlign=\"middle\"\n overflow=\"hidden\"\n style={{\n width:\n fullWidth && headerGroup.headers.indexOf(header) === headerGroup.headers.length - 1\n ? undefined\n : `calc(var(--header-${header.id}-size) * 1px)`,\n }}\n >\n {stat ? <DataTableStat rows={rows} columnId={header.column.id} stat={stat} /> : null}\n </Table.ColumnHeader>\n );\n};\n\ninterface DataTableStatsRowProps {\n headerGroup: HeaderGroup<RowData>;\n rows: RowData[];\n columnStats: Partial<Record<string, DataTableColumnStat>>;\n fullWidth?: boolean;\n noBorder?: boolean;\n}\n\nexport const DataTableStatsRow = (props: DataTableStatsRowProps) => {\n const { headerGroup, rows, columnStats, fullWidth, noBorder } = props;\n const hasVisibleStats = headerGroup.headers.some((header) => columnStats[header.column.id]);\n\n if (!hasVisibleStats) return null;\n\n return (\n <Table.Row\n className=\"data-table-stats-row\"\n borderRight={noBorder ? \"none\" : \"1px solid\"}\n borderColor=\"border.subtle\"\n >\n {headerGroup.headers.map((header) => (\n <DataTableStatCell\n key={header.id}\n header={header}\n headerGroup={headerGroup}\n rows={rows}\n columnStats={columnStats}\n fullWidth={fullWidth}\n />\n ))}\n </Table.Row>\n );\n};\n","import { Icon as ChakraIcon, Flex, IconButton, Menu, Portal, Table, Text } from \"@chakra-ui/react\";\nimport {\n type Cell,\n flexRender,\n type Header,\n type HeaderGroup,\n type Row,\n type Table as TanStackTable,\n} from \"@tanstack/react-table\";\nimport { ArrowDownAZ, ArrowUpAZ, MoreVertical } from \"lucide-react\";\nimport type { CSSProperties } from \"react\";\nimport { ResourceContextMenu } from \"@/components/overlays/resource-context-menu\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport { ListRow } from \"../list-row/list-row\";\nimport type { DataTableCellContext, DataTableProps, RowData } from \"./types\";\n\nconst utilityColumnIds = new Set([\"rowIndex\", \"rowSelection\", \"rowActions\"]);\n\nconst getSortMenuIcon = (sortDirection: false | \"asc\" | \"desc\") => {\n if (sortDirection === \"asc\") return ArrowUpAZ;\n if (sortDirection === \"desc\") return ArrowDownAZ;\n return MoreVertical;\n};\n\ninterface DataTableColumnHeaderProps {\n header: Header<RowData, unknown>;\n headerGroup: HeaderGroup<RowData>;\n table: TanStackTable<RowData>;\n fullWidth?: boolean;\n hasDescription?: boolean;\n}\n\nexport const DataTableColumnHeader = (props: DataTableColumnHeaderProps) => {\n const { header, headerGroup, table, fullWidth, hasDescription } = props;\n const sortDirection = header.column.getIsSorted();\n const canSortColumn = !utilityColumnIds.has(header.column.id) && table.getCoreRowModel().rows.length > 1;\n const SortIcon = getSortMenuIcon(sortDirection);\n const tooltipContent =\n header.column.id === \"rowSelection\"\n ? \"Select all\"\n : flexRender(header.column.columnDef.header, header.getContext());\n\n return (\n <Table.ColumnHeader\n data-column-id={header.column.id}\n textTransform=\"none\"\n borderRight=\"1px solid\"\n _last={{ borderRight: \"none\" }}\n borderColor=\"border.subtle\"\n paddingX=\"xs\"\n paddingY=\"xs\"\n key={header.id}\n overflow=\"hidden\"\n position=\"relative\"\n verticalAlign=\"middle\"\n whiteSpace=\"nowrap\"\n style={{\n width:\n fullWidth && headerGroup.headers.indexOf(header) === headerGroup.headers.length - 1\n ? undefined\n : `calc(var(--header-${header.id}-size) * 1px)`,\n }}\n >\n <Tooltip content={tooltipContent} disabled={hasDescription}>\n <Flex className=\"group\" alignItems=\"center\" justifyContent=\"space-between\" gap=\"1\" flex=\"1\" minW=\"0\">\n <Text as=\"div\" textStyle=\"label/S/medium\" lineHeight=\"1.2\" truncate>\n {flexRender(header.column.columnDef.header, header.getContext())}\n </Text>\n {canSortColumn && (\n <Menu.Root>\n <Menu.Trigger asChild>\n <IconButton\n ml=\"2px\"\n size=\"2xs\"\n aria-label={sortDirection ? `Sorted ${sortDirection}` : \"Sort column\"}\n variant=\"ghost\"\n visibility={sortDirection ? \"visible\" : \"hidden\"}\n _groupHover={{ visibility: \"visible\" }}\n >\n <ChakraIcon as={SortIcon} boxSize=\"14px\" />\n </IconButton>\n </Menu.Trigger>\n <Portal>\n <Menu.Positioner>\n <Menu.Content zIndex=\"popover\" bg=\"bg\">\n <Menu.Item value=\"sort-asc\" asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n label=\"Sort ascending\"\n icon={<ChakraIcon as={ArrowUpAZ} boxSize=\"16px\" />}\n disabled={sortDirection === \"asc\"}\n onActivate={() => header.column.toggleSorting(false)}\n />\n </Menu.Item>\n <Menu.Item value=\"sort-desc\" asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n label=\"Sort descending\"\n icon={<ChakraIcon as={ArrowDownAZ} boxSize=\"16px\" />}\n disabled={sortDirection === \"desc\"}\n onActivate={() => header.column.toggleSorting(true)}\n />\n </Menu.Item>\n {sortDirection && (\n <Menu.Item value=\"clear-sort\" asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n label=\"Clear sort\"\n onActivate={() => header.column.clearSorting()}\n />\n </Menu.Item>\n )}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n )}\n {header.column.getCanResize() && (\n <span\n {...{\n onDoubleClick: () => header.column.resetSize(),\n onMouseDown: header.getResizeHandler(),\n onTouchStart: header.getResizeHandler(),\n className: `resizer ${header.column.getIsResizing() ? \"isResizing\" : \"\"}`,\n }}\n />\n )}\n </Flex>\n </Tooltip>\n </Table.ColumnHeader>\n );\n};\n\ninterface DataTableCellViewProps {\n cell: Cell<RowData, unknown>;\n row: Row<RowData>;\n getCellContextMenuActions?: DataTableProps[\"getCellContextMenuActions\"];\n}\n\ninterface DataTableColumnMeta {\n getCellStyle?: (value: unknown) => CSSProperties | undefined;\n}\n\nconst DataTableCellView = (props: DataTableCellViewProps) => {\n const { cell, row, getCellContextMenuActions } = props;\n const columnMeta = cell.column.columnDef.meta as DataTableColumnMeta | undefined;\n const cellStyle = columnMeta?.getCellStyle?.(cell.getValue());\n const cellContext: DataTableCellContext = {\n row: row.original,\n rowId: row.id,\n columnId: cell.column.id,\n value: cell.getValue(),\n };\n const contextActions =\n getCellContextMenuActions?.(cellContext).map((action) => ({\n key: action.label,\n label: action.label,\n icon: action.icon,\n onClick: () => action.onSelect(cellContext),\n })) ?? [];\n const cellElement = (\n <Table.Cell\n data-column-id={cell.column.id}\n width=\"fit-content\"\n maxWidth=\"12rem\"\n overflow=\"hidden\"\n padding=\"xs\"\n borderRight=\"1px solid\"\n borderColor=\"border.subtle\"\n _last={{ borderRight: \"none\" }}\n borderBottom=\"none\"\n key={cell.id}\n textStyle=\"paragraph/S/regular\"\n textOverflow=\"ellipsis\"\n whiteSpace=\"nowrap\"\n style={cellStyle}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </Table.Cell>\n );\n\n if (contextActions.length === 0) return cellElement;\n\n return (\n <ResourceContextMenu key={cell.id} actions={contextActions}>\n {cellElement}\n </ResourceContextMenu>\n );\n};\n\ninterface DataTableBodyRowProps {\n row: Row<RowData>;\n noBorder?: boolean;\n rowIsInteractive: boolean;\n rowIsActive: boolean;\n rowIsSelected: boolean;\n onRowClick?: DataTableProps[\"onRowClick\"];\n getCellContextMenuActions?: DataTableProps[\"getCellContextMenuActions\"];\n}\n\nexport const DataTableBodyRow = (props: DataTableBodyRowProps) => {\n const { row, noBorder, rowIsInteractive, rowIsActive, rowIsSelected, onRowClick, getCellContextMenuActions } = props;\n\n return (\n <Table.Row\n key={row.id}\n data-active={rowIsActive ? \"true\" : undefined}\n data-selected={rowIsSelected ? \"true\" : undefined}\n aria-selected={rowIsSelected ? \"true\" : undefined}\n cursor={rowIsInteractive ? \"pointer\" : undefined}\n onClick={rowIsInteractive ? () => onRowClick?.(row.original) : undefined}\n borderTop={noBorder ? \"none\" : \"1px solid\"}\n borderBottom=\"1px solid\"\n borderRight={noBorder ? \"none\" : \"1px solid\"}\n _last={{ borderBottom: noBorder ? \"none\" : \"1px solid\", borderColor: \"border.subtle\" }}\n borderColor=\"border.subtle\"\n background={rowIsActive ? \"bg.active\" : \"bg\"}\n >\n {row.getVisibleCells().map((cell) => (\n <DataTableCellView key={cell.id} cell={cell} row={row} getCellContextMenuActions={getCellContextMenuActions} />\n ))}\n </Table.Row>\n );\n};\n","import { Button, Icon as ChakraIcon, Flex, IconButton, Menu, Portal, Stack, Text } from \"@chakra-ui/react\";\nimport type { useReactTable } from \"@tanstack/react-table\";\nimport { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight } from \"lucide-react\";\n\nimport { NumberInputField, NumberInputRoot } from \"@/components/primitives/number-input\";\nimport { ListRow } from \"../list-row/list-row\";\nimport type { RowData } from \"./types\";\n\nexport function PaginationFooter({\n table,\n pageIndex,\n pageSize,\n pageSizeOptions,\n}: {\n table: ReturnType<typeof useReactTable<RowData>>;\n pageIndex: number;\n pageSize: number;\n pageSizeOptions: number[];\n}) {\n const totalPages = Math.max(table.getPageCount(), 1);\n const canGoBack = pageIndex > 0;\n const canGoForward = pageIndex < totalPages - 1;\n\n return (\n <Flex\n alignItems=\"center\"\n justifyContent=\"space-between\"\n borderTop=\"1px solid\"\n borderColor={\"border.subtle\"}\n paddingX=\"xs\"\n >\n <Text textStyle=\"label/S/regular\">{table.getCoreRowModel().rows.length} rows</Text>\n <Stack alignItems=\"center\" direction=\"row\" justifyContent=\"flex-end\" paddingY=\"xs\">\n <Flex alignItems=\"center\" gap=\"xs\" marginRight=\"sm\">\n <Text textStyle=\"label/S/regular\">Rows per page</Text>\n <Menu.Root>\n <Menu.Trigger asChild>\n <Button size=\"xs\" variant=\"outline\">\n {pageSize}\n </Button>\n </Menu.Trigger>\n <Portal>\n <Menu.Positioner>\n <Menu.Content zIndex=\"popover\" bg=\"bg\">\n {pageSizeOptions.map((option) => (\n <Menu.Item key={option} value={`${option}`} asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n label={`${option}`}\n isSelected={option === pageSize}\n onActivate={() => table.setPageSize(option)}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n </Flex>\n <IconButton size=\"xs\" aria-label=\"Go to first page\" onClick={() => table.setPageIndex(0)} disabled={!canGoBack}>\n <ChakraIcon as={ChevronsLeft} boxSize=\"14px\" />\n </IconButton>\n <IconButton\n size=\"xs\"\n aria-label=\"Go to previous page\"\n onClick={() => table.setPageIndex(pageIndex - 1)}\n disabled={!canGoBack}\n >\n <ChakraIcon as={ChevronLeft} boxSize=\"14px\" />\n </IconButton>\n <IconButton\n size=\"xs\"\n aria-label=\"Go to next page\"\n onClick={() => table.setPageIndex(pageIndex + 1)}\n disabled={!canGoForward}\n >\n <ChakraIcon as={ChevronRight} boxSize=\"14px\" />\n </IconButton>\n <IconButton\n size=\"xs\"\n aria-label=\"Go to last page\"\n onClick={() => table.setPageIndex(table.getPageCount() - 1)}\n disabled={!canGoForward}\n >\n <ChakraIcon as={ChevronsRight} boxSize=\"14px\" />\n </IconButton>\n <Flex alignItems=\"center\" height=\"100%\" marginLeft=\"sm\" marginRight=\"md\" gap=\"xs\">\n <Text>Page</Text>\n <NumberInputRoot\n margin=\"2xs\"\n width=\"3rem\"\n size=\"xs\"\n min={1}\n max={totalPages}\n value={`${pageIndex + 1}`}\n onValueChange={(details) => {\n const next = Number.isNaN(details.valueAsNumber) ? 1 : details.valueAsNumber;\n const clamped = Math.min(totalPages, Math.max(1, next));\n table.setPageIndex(clamped - 1);\n }}\n >\n <NumberInputField className=\"nodrag\" />\n </NumberInputRoot>\n <Text>of {totalPages}</Text>\n </Flex>\n </Stack>\n </Flex>\n );\n}\n","import { Button, Icon as ChakraIcon, Flex, IconButton, Menu, Portal, Stack, Text } from \"@chakra-ui/react\";\nimport { X } from \"lucide-react\";\nimport { ListRow } from \"../list-row/list-row\";\nimport type { DataTableSelectionAction, RowData } from \"./types\";\n\ninterface SelectionToolbarProps {\n selectedCount: number;\n totalCount: number;\n onClearSelection: () => void;\n onSelectAll: () => void;\n actions: DataTableSelectionAction[];\n selectedRows: RowData[];\n}\n\nexport function SelectionToolbar(props: SelectionToolbarProps) {\n const { selectedCount, totalCount, onClearSelection, onSelectAll, actions, selectedRows } = props;\n const actionLabel = actions.length === 1 ? actions[0]?.label : \"Actions\";\n\n return (\n <Flex position=\"absolute\" insetX=\"sm\" bottom=\"sm\" zIndex=\"popover\" justifyContent=\"center\" pointerEvents=\"none\">\n <Stack\n role=\"toolbar\"\n aria-label=\"Selection actions\"\n direction=\"row\"\n alignItems=\"center\"\n layerStyle=\"floatingBar\"\n pointerEvents=\"auto\"\n maxWidth=\"100%\"\n overflowX=\"auto\"\n >\n <IconButton aria-label=\"clear-selection\" onClick={onClearSelection} size=\"xs\">\n <ChakraIcon as={X} boxSize=\"16px\" />\n </IconButton>\n <Text>{selectedCount} rows selected</Text>\n {selectedCount !== totalCount && (\n <Button size=\"xs\" onClick={onSelectAll}>\n Select all {totalCount} rows\n </Button>\n )}\n {actions.length === 1 && actions[0] ? (\n <Button size=\"xs\" onClick={() => actions[0]?.onSelect(selectedRows)}>\n {actionLabel}\n </Button>\n ) : null}\n {actions.length > 1 ? (\n <Menu.Root>\n <Menu.Trigger asChild>\n <Button size=\"xs\">{actionLabel}</Button>\n </Menu.Trigger>\n <Portal>\n <Menu.Positioner>\n <Menu.Content zIndex=\"popover\" bg=\"bg\">\n {actions.map((action) => (\n <Menu.Item key={action.label} value={action.label} asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n tone={action.destructive ? \"danger\" : \"default\"}\n label={action.label}\n icon={action.icon}\n onActivate={() => action.onSelect(selectedRows)}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n ) : null}\n </Stack>\n </Flex>\n );\n}\n","import \"./data-table.css\";\n\nimport { Box, Flex, Table } from \"@chakra-ui/react\";\nimport {\n getCoreRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n type PaginationState,\n type RowSelectionState,\n type SortingState,\n useReactTable,\n} from \"@tanstack/react-table\";\nimport { Fragment, useEffect, useState } from \"react\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\nimport { useKanbanRendererStore } from \"../kanban-renderer/use-kanban-renderer-store\";\nimport { buildColumns } from \"./build-columns\";\nimport { DataTableColumnMenu } from \"./data-table-column-menu\";\nimport { DataTableHeader } from \"./data-table-header\";\nimport {\n buildDataTableRendererAttributes,\n buildDataTableRendererRows,\n filterDataTableRows,\n getSelectedOriginalRows,\n reorderDataTableColumns,\n resolveDataTableColumnOrder,\n resolveDataTableRowId,\n resolveDataTableToolbarStorageKey,\n resolveInitialPageSize,\n resolveSelectionActions,\n shouldEnableSelection,\n shouldHighlightActiveRow,\n} from \"./data-table-state\";\nimport { DataTableStatsRow } from \"./data-table-stats-row\";\nimport { DataTableBodyRow, DataTableColumnHeader } from \"./data-table-table-parts\";\nimport { PaginationFooter } from \"./pagination-footer\";\nimport { SelectionToolbar } from \"./selection-toolbar\";\nimport type { DataTableProps } from \"./types\";\n\nexport const DataTable = (props: DataTableProps) => {\n const {\n data,\n noBorder,\n fullWidth,\n hiddenColumns,\n onRowClick,\n isRowInteractive,\n activeRowId,\n columnIcons,\n columnDescriptions,\n compactHeaders,\n columnStats,\n columnRenderers,\n initialPageSize,\n pageSizeOptions = [10, 20, 30, 50, 100],\n rowActions = [],\n getRowId,\n toolbarStorageKey,\n enableRowActivation = false,\n getCellContextMenuActions,\n } = props;\n const [sorting, setSorting] = useState<SortingState>([]);\n const [pagination, setPagination] = useState<PaginationState>(() => ({\n pageIndex: 0,\n pageSize: resolveInitialPageSize({ initialPageSize }),\n }));\n const [rowSelection, setRowSelection] = useState<RowSelectionState>({});\n const [showStats, setShowStats] = useState(true);\n const [columnOrder, setColumnOrder] = useState<string[]>(() => {\n const propHiddenColumnsSet = new Set(hiddenColumns ?? []);\n return Object.keys(data[0] || {}).filter((key) => !propHiddenColumnsSet.has(key));\n });\n const [hiddenColumnMenuIds, setHiddenColumnMenuIds] = useState<Set<string>>(() => new Set());\n const hiddenColumnsSet = new Set(hiddenColumns ?? []);\n const baseColumnKeys = Object.keys(data[0] || {}).filter((key) => !hiddenColumnsSet.has(key));\n const orderedBaseColumnKeys = resolveDataTableColumnOrder(baseColumnKeys, columnOrder);\n const visibleColumnIds = new Set(orderedBaseColumnKeys.filter((key) => !hiddenColumnMenuIds.has(key)));\n const columnKeys = orderedBaseColumnKeys.filter((key) => visibleColumnIds.has(key));\n const enableSelection = shouldEnableSelection(props);\n const selectionActions = resolveSelectionActions(props);\n const rendererAttributes = buildDataTableRendererAttributes(data, orderedBaseColumnKeys, compactHeaders);\n const rendererRows = buildDataTableRendererRows(data, orderedBaseColumnKeys, getRowId);\n const resolvedToolbarStorageKey = resolveDataTableToolbarStorageKey({\n toolbarStorageKey,\n columnKeys: baseColumnKeys,\n });\n const filters = useKanbanRendererStore(resolvedToolbarStorageKey, (state) => state.filters, {\n settings: { viewMode: \"list\" },\n });\n const filteredRendererRows = filterDataTableRows(rendererRows, filters, rendererAttributes);\n const filteredData = filteredRendererRows.map((row) => row.sourceRow);\n const columns = buildColumns(data, columnKeys, {\n columnIcons,\n columnDescriptions,\n compactHeaders,\n enableSelection,\n rowActions,\n selectedRowIds: rowSelection,\n columnRenderers,\n });\n\n const table = useReactTable({\n data: filteredData,\n columns,\n defaultColumn: { size: 150, minSize: 40, maxSize: 800 },\n state: { sorting, pagination, rowSelection },\n getRowId: (row, index) => resolveDataTableRowId(row, index, getRowId),\n columnResizeMode: \"onChange\",\n columnResizeDirection: \"ltr\",\n onSortingChange: setSorting,\n onPaginationChange: setPagination,\n onRowSelectionChange: setRowSelection,\n getSortedRowModel: getSortedRowModel(),\n getCoreRowModel: getCoreRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n enableMultiRowSelection: enableSelection,\n enableRowSelection: enableSelection,\n autoResetAll: false,\n });\n\n useEffect(() => {\n const pageCount = table.getPageCount();\n if (pageCount === 0 || pagination.pageIndex < pageCount) return;\n\n setPagination((current) => ({\n ...current,\n pageIndex: Math.max(pageCount - 1, 0),\n }));\n }, [pagination.pageIndex, table]);\n\n const columnSizeVars = (() => {\n const headers = table.getFlatHeaders();\n const colSizes: Record<string, number> = {};\n for (let i = 0; i < headers.length; i++) {\n const header = headers[i]!;\n colSizes[`--header-${header.id}-size`] = header.getSize();\n colSizes[`--col-${header.column.id}-size`] = header.column.getSize();\n }\n return colSizes;\n })();\n\n const selectedRows = table.getSelectedRowModel().rows;\n const allRows = table.getCoreRowModel().rows;\n const selectedOriginalRows = getSelectedOriginalRows(selectedRows);\n const columnControl = (\n <DataTableColumnMenu\n columns={orderedBaseColumnKeys.map((columnId) => ({\n id: columnId,\n label: compactHeaders?.[columnId] ?? columnId,\n }))}\n visibleColumnIds={visibleColumnIds}\n showStats={showStats}\n statsAvailable={Boolean(columnStats)}\n onColumnVisibilityChange={(columnId, visible) =>\n setHiddenColumnMenuIds((current) => {\n const next = new Set(current);\n if (visible) {\n next.delete(columnId);\n } else {\n next.add(columnId);\n }\n return next;\n })\n }\n onColumnReorder={(activeColumnId, overColumnId) =>\n setColumnOrder((current) =>\n reorderDataTableColumns(resolveDataTableColumnOrder(baseColumnKeys, current), activeColumnId, overColumnId),\n )\n }\n onStatsVisibilityChange={setShowStats}\n />\n );\n\n return (\n <Flex direction=\"column\" height=\"100%\" width=\"100%\">\n <DataTableHeader\n rows={rendererRows}\n storageKey={resolvedToolbarStorageKey}\n attributes={rendererAttributes}\n columnControl={columnControl}\n />\n <Box position=\"relative\" flex=\"1\" minHeight=\"0\">\n <ScrollArea height=\"100%\" maxWidth=\"unset\" showHorizontalScrollbar>\n <Table.Root\n className={`data-table${fullWidth ? \" full-width\" : \"\"}`}\n style={{ ...columnSizeVars, width: fullWidth ? \"100%\" : table.getTotalSize() }}\n >\n <Table.Header>\n {table.getHeaderGroups().map((headerGroup) => (\n <Fragment key={headerGroup.id}>\n <Table.Row\n className=\"data-table-column-header-row\"\n borderRight={noBorder ? \"none\" : \"1px solid\"}\n borderColor=\"border.subtle\"\n >\n {headerGroup.headers.map((header) => (\n <DataTableColumnHeader\n key={header.id}\n header={header}\n headerGroup={headerGroup}\n table={table}\n fullWidth={fullWidth}\n hasDescription={Boolean(columnDescriptions?.[header.column.id])}\n />\n ))}\n </Table.Row>\n {columnStats && showStats ? (\n <DataTableStatsRow\n headerGroup={headerGroup}\n rows={filteredData}\n columnStats={columnStats}\n noBorder={noBorder}\n fullWidth={fullWidth}\n />\n ) : null}\n </Fragment>\n ))}\n </Table.Header>\n <Table.Body>\n {table.getRowModel().rows.map((row) => {\n const rowIsInteractive = onRowClick ? (isRowInteractive?.(row.original) ?? true) : false;\n const rowIsActive = shouldHighlightActiveRow({ enableRowActivation, activeRowId, rowId: row.id });\n const rowIsSelected = row.getIsSelected();\n\n return (\n <DataTableBodyRow\n key={row.id}\n row={row}\n noBorder={noBorder}\n rowIsInteractive={rowIsInteractive}\n rowIsActive={rowIsActive}\n rowIsSelected={rowIsSelected}\n onRowClick={onRowClick}\n getCellContextMenuActions={getCellContextMenuActions}\n />\n );\n })}\n </Table.Body>\n </Table.Root>\n </ScrollArea>\n {enableSelection && selectedRows.length > 0 ? (\n <SelectionToolbar\n selectedCount={selectedRows.length}\n totalCount={allRows.length}\n onClearSelection={() => table.toggleAllRowsSelected(false)}\n onSelectAll={() => table.toggleAllRowsSelected(true)}\n actions={selectionActions}\n selectedRows={selectedOriginalRows}\n />\n ) : null}\n </Box>\n {table.getPageCount() > 1 && (\n <PaginationFooter\n table={table}\n pageIndex={pagination.pageIndex}\n pageSize={pagination.pageSize}\n pageSizeOptions={pageSizeOptions}\n />\n )}\n </Flex>\n );\n};\n"],"names":["resolveCategoricalColor","value","categories","find","category","Object","is","color","CategoricalColorCell","props","children","darkTextColor","lightTextColor","darkColorTarget","readableContrastRatio","expandShortHex","hex","split","map","character","join","parseHexColor","normalized","trim","startsWith","slice","expandedHex","length","test","r","Number","parseInt","g","b","toLinearChannel","channel","relativeLuminance","contrastRatio","foreground","background","foregroundLuminance","backgroundLuminance","lighter","Math","max","darker","min","toHexColor","toHexChannel","round","toString","padStart","mixRgbColors","start","end","endWeight","findMatchingForeground","target","step","candidate","resolveReadableTextColor","backgroundColor","darkText","lightText","darkerMatch","lighterMatch","mixHexColors","startColor","endColor","startWeight","resolveColorCellStyle","lightForeground","light","darkForeground","dark","toDisplayPercent","mixColors","mixedColor","mixThemeColors","undefined","resolveColorScaleValue","stops","isFinite","firstStop","lastStop","endIndex","findIndex","stop","startStop","endStop","ColorScaleCell","$","_c","t0","jsx","Text","isDisplayValue","isString","v","String","isNumber","isBoolean","Boolean","getType","values","comparableValues","sortValue","valueOf","isValidElement","filter","every","isNaN","Date","parse","headerIconProps","boxSize","marginRight","getIcon","type","ChakraIcon","CalendarClock","Type","Hash","CheckCircle2","formatDisplayValue","display","JSON","stringify","columnHelper","createColumnHelper","imageExtensionPattern","imageLabelPattern","humanizeKey","key","words","replace","toLowerCase","toUpperCase","formatPath","path","part","isPrimitiveArray","item","appendJsonFields","fields","Array","isArray","push","label","forEach","index","entries","parseJsonCellValue","buildJsonFields","field","isJsonImageValue","url","URL","protocol","pathname","isJsonImageArray","formatJsonPrimitive","formatJsonValue","getJsonCellSummary","parsedValue","keys","visibleValues","remainingCount","toReadOnlyValue","src","alt","images","image","buildFriendlyJsonParams","id","name","FriendlyJsonDisplay","t1","ParamEditor","stopRowActivation","event","stopPropagation","JsonCell","columnLabel","T0","T1","T2","summary","t10","t11","t2","t3","t4","t5","t6","t7","t8","t9","imageFields","flatMap","_temp","t12","Popover","Root","Symbol","for","placement","offset","mainAxis","Trigger","Button","HStack","_temp2","Braces","t13","ChevronRight","t14","t15","t16","overscrollBehavior","t17","Portal","ScrollArea","t18","field_0","Image","getSortValue","compareValues","valueA","valueB","localeCompare","toSingleLineElement","element","cloneElement","style","flexWrap","minWidth","whiteSpace","stopControlPropagation","SelectionHeader","table","checked","getIsAllRowsSelected","isIndeterminate","getIsSomeRowsSelected","Minus","Check","details","toggleAllRowsSelected","Checkbox","SelectionCell","row","selectedRowIds","toggleSelected","RowActionsCell","actions","IconButton","ChevronDown","action","Menu","ListRow","destructive","icon","onSelect","original","jsxs","FormattedCell","displayValue","bb0","chakra","DataCell","renderer","resolveDataCellStyle","buildColumns","data","columnKeys","options","columnIcons","columnDescriptions","compactHeaders","enableSelection","rowActions","columnRenderers","rowIndexColumn","accessor","_row","rowIndex","header","enableResizing","size","cell","info","getValue","selectionColumn","enableSorting","dataColumns","fallBackKey","columnValues","customIcon","headerIcon","columnDescription","headerLabel","Tooltip","CircleHelp","meta","getCellStyle","sortingFn","rowA","rowB","rowActionsColumn","DataTableColumnMenuRow","column","onColumnVisibilityChange","attributes","listeners","setNodeRef","transform","transition","isDragging","useSortable","CSS","Transform","opacity","bg","GripVertical","Box","Icon","DataTableColumnMenu","columns","visibleColumnIds","showStats","statsAvailable","onColumnReorder","onStatsVisibilityChange","triggerRef","useRef","contentRef","open","setOpen","useState","query","setQuery","activationConstraint","distance","sensors","useSensors","useSensor","PointerSensor","normalizedQuery","includes","filteredColumns","active","over","handleDragEnd","closeOnOutsidePointerDown","event_0","Node","current","contains","closeOnEscape","event_1","document","addEventListener","removeEventListener","useEffect","getAnchorElement","Settings2","Switch","role","SearchableMenuInput","column_1","has","Stack","SortableContext","verticalListSortingStrategy","DndContext","closestCenter","column_0","DataTableHeader","rows","storageKey","columnControl","viewMode","KanbanRendererToolbar","defaultPageSize","resolveDataTableRowId","getRowId","resolveInitialPageSize","initialPageSize","getSelectedOriginalRows","resolveSelectionActions","selectionActions","onCSVDownload","shouldEnableSelection","selectionMode","shouldHighlightActiveRow","enableRowActivation","activeRowId","rowId","toAttributeValue","raw","isNumberColumn","columnKey","resolveAttributeType","kind","buildDataTableRendererAttributes","filterable","sortable","displayable","buildDataTableRendererRows","fromEntries","firstValue","title","sourceRow","filterDataTableRows","filters","filterRows","resolveDataTableColumnOrder","availableColumnIds","requestedColumnOrder","availableColumnIdSet","Set","orderedColumnIds","columnId","orderedColumnIdSet","missingColumnIds","reorderDataTableColumns","columnIds","activeColumnId","overColumnId","activeIndex","indexOf","overIndex","nextColumnIds","activeColumn","splice","resolveDataTableToolbarStorageKey","toolbarStorageKey","StatChartCrosshair","coordinate","useActiveTooltipCoordinate","plotArea","usePlotArea","y","height","x","width","DataTableStatChart","dataKey","ariaLabel","tooltipLabel","tooltipValue","tooltipSeriesLabel","layout","categoryKey","domain","barSize","barCategoryGap","series","chart","useChart","datum","getBarValue","datum_0","getCategoryValue","top","right","bottom","left","Fragment","XAxis","YAxis","Bar","payload","datum_1","Chart","zIndex","RechartsTooltip","BarChart","t19","getStatValue","getColumnStatValues","countUniqueStatValues","buildTopValuesStat","limit","counts","Map","set","get","groups","count","percentage","sort","topGroups","otherCount","reduce","total","group","buildHistogramStat","binCount","binWidth","bins","from","_","binIndex","floor","formatNumber","Intl","NumberFormat","maximumFractionDigits","format","STAT_CHART_COLOR","SingleValueStat","Flex","UniqueStat","HistogramStat","histogram","valueCount","_temp3","TopValuesStat","_temp6","DataTableStat","stat","DataTableStatCell","headerGroup","columnStats","fullWidth","borderRight","headers","Table","DataTableStatsRow","noBorder","some","header_0","bin","bin_0","_temp4","_temp5","utilityColumnIds","getSortMenuIcon","sortDirection","ArrowUpAZ","ArrowDownAZ","MoreVertical","DataTableColumnHeader","hasDescription","canSortColumn","getIsSorted","getCoreRowModel","SortIcon","flexRender","columnDef","getContext","tooltipContent","visibility","toggleSorting","clearSorting","getCanResize","onDoubleClick","resetSize","onMouseDown","getResizeHandler","onTouchStart","className","getIsResizing","DataTableCellView","getCellContextMenuActions","columnMeta","cellStyle","cellContext","onClick","contextActions","cellElement","ResourceContextMenu","DataTableBodyRow","rowIsInteractive","rowIsActive","rowIsSelected","onRowClick","borderBottom","borderColor","getVisibleCells","PaginationFooter","pageIndex","pageSize","pageSizeOptions","getPageCount","totalPages","canGoBack","canGoForward","option","setPageSize","setPageIndex","ChevronsLeft","ChevronLeft","t20","t21","t22","t23","ChevronsRight","t24","t25","t26","t27","next","valueAsNumber","clamped","t28","NumberInputField","t29","NumberInputRoot","t30","t31","t32","t33","SelectionToolbar","selectedCount","totalCount","onClearSelection","onSelectAll","selectedRows","actionLabel","X","DataTable","hiddenColumns","isRowInteractive","sorting","setSorting","pagination","setPagination","rowSelection","setRowSelection","setShowStats","columnOrder","setColumnOrder","propHiddenColumnsSet","hiddenColumnMenuIds","setHiddenColumnMenuIds","hiddenColumnsSet","baseColumnKeys","orderedBaseColumnKeys","rendererAttributes","rendererRows","resolvedToolbarStorageKey","useKanbanRendererStore","state","settings","filteredData","useReactTable","defaultColumn","minSize","maxSize","columnResizeMode","columnResizeDirection","onSortingChange","onPaginationChange","onRowSelectionChange","getSortedRowModel","getPaginationRowModel","enableMultiRowSelection","enableRowSelection","autoResetAll","pageCount","columnSizeVars","getFlatHeaders","colSizes","i","getSize","getSelectedRowModel","allRows","selectedOriginalRows","visible","delete","add","getTotalSize","getHeaderGroups","getRowModel","getIsSelected"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"data-table.js","sources":["../src/components/data-table/categorical-color-cell.tsx","../src/components/data-table/color-cell-style.ts","../src/components/data-table/color-scale-cell.tsx","../src/components/data-table/helpers.tsx","../src/components/data-table/friendly-json-display.tsx","../src/components/data-table/json-cell.tsx","../src/components/data-table/build-columns.tsx","../src/components/data-table/data-table-column-menu.tsx","../src/components/data-table/data-table-header.tsx","../src/components/data-table/data-table-state.ts","../src/components/data-table/data-table-stat-chart.tsx","../src/components/data-table/data-table-stats.ts","../src/components/data-table/data-table-stats-row.tsx","../src/components/data-table/data-table-table-parts.tsx","../src/components/data-table/pagination-footer.tsx","../src/components/data-table/selection-toolbar.tsx","../src/components/data-table/data-table.tsx","../src/components/data-table/data-table-skeleton.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport type { DataTableCategoricalColor } from \"./types\";\n\ninterface CategoricalColorCellProps {\n children: ReactNode;\n}\n\nexport const resolveCategoricalColor = (value: unknown, categories: DataTableCategoricalColor[]) => {\n return categories.find((category) => Object.is(category.value, value))?.color ?? null;\n};\n\nexport const CategoricalColorCell = (props: CategoricalColorCellProps) => {\n const { children } = props;\n\n return children;\n};\n","import type { DataTableThemeColor } from \"./types\";\n\ninterface RgbColor {\n r: number;\n g: number;\n b: number;\n}\n\nconst darkTextColor = \"#111827\";\nconst lightTextColor = \"#ffffff\";\nconst darkColorTarget = \"#000000\";\nconst readableContrastRatio = 4.5;\n\nconst expandShortHex = (hex: string) =>\n hex\n .split(\"\")\n .map((character) => character + character)\n .join(\"\");\n\nexport const parseHexColor = (color: string) => {\n const normalized = color.trim();\n const hex = normalized.startsWith(\"#\") ? normalized.slice(1) : normalized;\n const expandedHex = hex.length === 3 ? expandShortHex(hex) : hex;\n if (!/^[\\da-f]{6}$/i.test(expandedHex)) return null;\n\n return {\n r: Number.parseInt(expandedHex.slice(0, 2), 16),\n g: Number.parseInt(expandedHex.slice(2, 4), 16),\n b: Number.parseInt(expandedHex.slice(4, 6), 16),\n };\n};\n\nconst toLinearChannel = (channel: number) => {\n const normalized = channel / 255;\n return normalized <= 0.03928 ? normalized / 12.92 : ((normalized + 0.055) / 1.055) ** 2.4;\n};\n\nconst relativeLuminance = (color: RgbColor) =>\n 0.2126 * toLinearChannel(color.r) + 0.7152 * toLinearChannel(color.g) + 0.0722 * toLinearChannel(color.b);\n\nconst contrastRatio = (foreground: RgbColor, background: RgbColor) => {\n const foregroundLuminance = relativeLuminance(foreground);\n const backgroundLuminance = relativeLuminance(background);\n const lighter = Math.max(foregroundLuminance, backgroundLuminance);\n const darker = Math.min(foregroundLuminance, backgroundLuminance);\n return (lighter + 0.05) / (darker + 0.05);\n};\n\nconst toHexColor = (color: RgbColor) => {\n const toHexChannel = (channel: number) => Math.round(channel).toString(16).padStart(2, \"0\");\n return `#${toHexChannel(color.r)}${toHexChannel(color.g)}${toHexChannel(color.b)}`;\n};\n\nconst mixRgbColors = (start: RgbColor, end: RgbColor, endWeight: number) => ({\n r: start.r * (1 - endWeight) + end.r * endWeight,\n g: start.g * (1 - endWeight) + end.g * endWeight,\n b: start.b * (1 - endWeight) + end.b * endWeight,\n});\n\nexport const contrastRatioForHexColors = (foregroundColor: string, backgroundColor: string) => {\n const foreground = parseHexColor(foregroundColor);\n const background = parseHexColor(backgroundColor);\n if (!foreground || !background) return 0;\n return contrastRatio(foreground, background);\n};\n\nconst findMatchingForeground = (background: RgbColor, target: RgbColor) => {\n for (let step = 1; step <= 50; step += 1) {\n const candidate = mixRgbColors(background, target, step / 50);\n if (contrastRatio(candidate, background) >= readableContrastRatio) {\n return { color: toHexColor(candidate), step };\n }\n }\n\n return { color: toHexColor(target), step: 50 };\n};\n\nexport const resolveReadableTextColor = (backgroundColor: string) => {\n const background = parseHexColor(backgroundColor);\n if (!background) return darkTextColor;\n\n const darkText = parseHexColor(darkColorTarget)!;\n const lightText = parseHexColor(lightTextColor)!;\n const darkerMatch = findMatchingForeground(background, darkText);\n const lighterMatch = findMatchingForeground(background, lightText);\n\n return darkerMatch.step <= lighterMatch.step ? darkerMatch.color : lighterMatch.color;\n};\n\nexport const mixHexColors = (startColor: string, endColor: string, startWeight: number) => {\n const start = parseHexColor(startColor);\n const end = parseHexColor(endColor);\n if (!start || !end) return null;\n\n return toHexColor(mixRgbColors(start, end, 1 - startWeight));\n};\n\nexport const resolveColorCellStyle = (color: DataTableThemeColor) => {\n const lightForeground = color.foreground?.light ?? resolveReadableTextColor(color.light);\n const darkForeground = color.foreground?.dark ?? resolveReadableTextColor(color.dark);\n\n return {\n backgroundColor: `light-dark(${color.light}, ${color.dark})`,\n color: `light-dark(${lightForeground}, ${darkForeground})`,\n };\n};\n","import { Text } from \"@chakra-ui/react\";\nimport { mixHexColors } from \"./color-cell-style\";\nimport type { DataTableColorScaleStop, DataTableThemeColor } from \"./types\";\n\ninterface ColorScaleCellProps {\n value: number;\n}\n\nconst toDisplayPercent = (value: number) => Math.round(value * 100) / 100;\n\nconst mixColors = (startColor: string, endColor: string, startWeight: number) => {\n const mixedColor = mixHexColors(startColor, endColor, startWeight);\n if (mixedColor) return mixedColor;\n\n return `color-mix(in srgb, ${startColor} ${toDisplayPercent(startWeight * 100)}%, ${endColor})`;\n};\n\nconst mixThemeColors = (start: DataTableThemeColor, end: DataTableThemeColor, startWeight: number) => {\n const foreground =\n start.foreground && end.foreground\n ? {\n light: mixColors(start.foreground.light, end.foreground.light, startWeight),\n dark: mixColors(start.foreground.dark, end.foreground.dark, startWeight),\n }\n : undefined;\n\n return {\n light: mixColors(start.light, end.light, startWeight),\n dark: mixColors(start.dark, end.dark, startWeight),\n ...(foreground ? { foreground } : {}),\n };\n};\n\nexport const resolveColorScaleValue = (value: unknown, stops: DataTableColorScaleStop[]) => {\n if (typeof value !== \"number\" || !Number.isFinite(value) || stops.length < 2) return null;\n\n const firstStop = stops[0]!;\n const lastStop = stops[stops.length - 1]!;\n const range = lastStop.value - firstStop.value;\n if (range <= 0) return null;\n\n if (value <= firstStop.value) return firstStop.color;\n if (value >= lastStop.value) return lastStop.color;\n\n const endIndex = stops.findIndex((stop) => value <= stop.value);\n const startStop = stops[endIndex - 1]!;\n const endStop = stops[endIndex]!;\n const segmentProgress = (value - startStop.value) / (endStop.value - startStop.value);\n const startWeight = 1 - segmentProgress;\n return mixThemeColors(startStop.color, endStop.color, startWeight);\n};\n\nexport const ColorScaleCell = (props: ColorScaleCellProps) => {\n const { value } = props;\n\n return (\n <Text textStyle=\"paragraph/S/medium\" fontVariantNumeric=\"tabular-nums\" truncate>\n {value}\n </Text>\n );\n};\n","import { Icon as ChakraIcon } from \"@chakra-ui/react\";\nimport { createColumnHelper } from \"@tanstack/react-table\";\nimport { CalendarClock, CheckCircle2, Hash, Type } from \"lucide-react\";\nimport { isValidElement, type ReactElement, type ReactNode } from \"react\";\n\nimport type { ColumnType, DisplayValue, RowData } from \"./types\";\n\nexport const isDisplayValue = (value: unknown): value is DisplayValue =>\n typeof value === \"object\" && value !== null && \"display\" in value;\n\nexport const isString = (v: unknown): v is string => typeof v === \"string\" || v instanceof String;\nexport const isNumber = (v: unknown): v is number => typeof v === \"number\" || v instanceof Number;\nexport const isBoolean = (v: unknown): v is boolean => typeof v === \"boolean\" || v instanceof Boolean;\n\nexport const getType = (values: unknown[]): ColumnType => {\n const comparableValues = values\n .map((value) => {\n if (isDisplayValue(value)) return value.sortValue ?? null;\n if (value instanceof String || value instanceof Number || value instanceof Boolean) return value.valueOf();\n if (isValidElement(value)) return null;\n return value;\n })\n .filter((value) => value !== null && value !== undefined);\n\n if (comparableValues.length === 0) return \"unknown\";\n if (comparableValues.every((v) => isString(v) && !Number.isNaN(Date.parse(v.toString())))) return \"date\";\n if (comparableValues.every((v) => isNumber(v))) return \"number\";\n if (comparableValues.every((v) => isBoolean(v))) return \"boolean\";\n if (comparableValues.every((v) => isString(v))) return \"string\";\n return \"unknown\";\n};\n\nconst headerIconProps = {\n boxSize: \"14px\",\n marginRight: \"2px\",\n};\n\nexport const getIcon = (values: unknown[]): ReactElement | null => {\n const type = getType(values);\n if (type === \"date\") return <ChakraIcon as={CalendarClock} {...headerIconProps} />;\n if (type === \"string\") return <ChakraIcon as={Type} {...headerIconProps} />;\n if (type === \"number\") return <ChakraIcon as={Hash} {...headerIconProps} />;\n if (type === \"boolean\") return <ChakraIcon as={CheckCircle2} {...headerIconProps} />;\n return null;\n};\n\nexport function formatDisplayValue(value: unknown): ReactNode {\n if (isDisplayValue(value)) return value.display;\n if (isValidElement(value)) return value;\n\n if (value instanceof String || value instanceof Number || value instanceof Boolean) {\n value = value.valueOf();\n }\n\n switch (typeof value) {\n case \"boolean\":\n return value ? \"TRUE\" : \"FALSE\";\n case \"number\":\n return value;\n case \"object\":\n return value !== null ? JSON.stringify(value) : \"-\";\n case \"undefined\":\n return \"-\";\n default:\n return value ? String(value) : \"-\";\n }\n}\n\nexport const columnHelper = createColumnHelper<RowData>();\n","import { ParamEditor } from \"@/components/param-editor\";\n\ninterface JsonField {\n label: string;\n value: unknown;\n}\n\nexport interface FriendlyJsonDisplayProps {\n value: unknown;\n}\n\nconst imageExtensionPattern = /\\.(avif|bmp|gif|jpe?g|png|svg|webp)$/i;\nconst imageLabelPattern = /(^|\\s)(avatar|image|logo|photo|picture|thumbnail)(\\s|$)/i;\n\nconst humanizeKey = (key: string) => {\n const words = key\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .replace(/[_-]+/g, \" \")\n .trim()\n .toLowerCase();\n\n return words ? `${words[0]?.toUpperCase()}${words.slice(1)}` : \"Details\";\n};\n\nconst formatPath = (path: string[]) => path.map((part) => (/^\\d+$/.test(part) ? part : humanizeKey(part))).join(\" / \");\n\nconst isPrimitiveArray = (value: unknown[]) => value.every((item) => item === null || typeof item !== \"object\");\n\nconst appendJsonFields = (value: unknown, path: string[], fields: JsonField[]) => {\n if (Array.isArray(value)) {\n if (value.length === 0 || isPrimitiveArray(value)) {\n fields.push({ label: formatPath(path), value });\n return;\n }\n\n value.forEach((item, index) => {\n appendJsonFields(item, [...path, String(index + 1)], fields);\n });\n return;\n }\n\n if (value !== null && typeof value === \"object\") {\n const entries = Object.entries(value);\n if (entries.length === 0) {\n fields.push({ label: formatPath(path), value: null });\n return;\n }\n\n entries.forEach(([key, item]) => {\n appendJsonFields(item, [...path, key], fields);\n });\n return;\n }\n\n fields.push({ label: formatPath(path), value });\n};\n\nexport const parseJsonCellValue = (value: unknown) => {\n if (typeof value !== \"string\") return value;\n\n try {\n return JSON.parse(value) as unknown;\n } catch {\n return value;\n }\n};\n\nexport const buildJsonFields = (value: unknown) => {\n const fields: JsonField[] = [];\n appendJsonFields(parseJsonCellValue(value), [], fields);\n return fields.map((field) => ({ ...field, label: field.label || \"Value\" }));\n};\n\nexport const isJsonImageValue = (value: unknown, label: string) => {\n if (typeof value !== \"string\") return false;\n if (value.startsWith(\"data:image/\")) return true;\n\n try {\n const url = new URL(value);\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") return false;\n return imageExtensionPattern.test(url.pathname) || imageLabelPattern.test(label);\n } catch {\n return false;\n }\n};\n\nexport const isJsonImageArray = (value: unknown, label: string) => {\n return Array.isArray(value) && value.length > 0 && value.every((item) => isJsonImageValue(item, label));\n};\n\nconst formatJsonPrimitive = (value: unknown) => {\n if (value === null || value === undefined || value === \"\") return \"Not provided\";\n if (typeof value === \"boolean\") return value ? \"Yes\" : \"No\";\n return String(value);\n};\n\nconst formatJsonValue = (value: unknown) => {\n if (Array.isArray(value)) return value.length === 0 ? \"None\" : value.map(formatJsonPrimitive).join(\", \");\n return formatJsonPrimitive(value);\n};\n\nexport const getJsonCellSummary = (value: unknown) => {\n const parsedValue = parseJsonCellValue(value);\n if (Array.isArray(parsedValue) && parsedValue.length === 0) return \"No details\";\n if (parsedValue !== null && typeof parsedValue === \"object\" && Object.keys(parsedValue).length === 0) {\n return \"No details\";\n }\n\n const fields = buildJsonFields(value).filter(\n (field) => !isJsonImageValue(field.value, field.label) && !isJsonImageArray(field.value, field.label),\n );\n if (fields.length === 0) return \"No details\";\n\n const visibleValues = fields.slice(0, 2).map((field) => formatJsonValue(field.value));\n const remainingCount = fields.length - visibleValues.length;\n return [...visibleValues, remainingCount > 0 ? `${remainingCount} more` : null].filter(Boolean).join(\" · \");\n};\n\nconst toReadOnlyValue = (field: JsonField) => {\n const { label, value } = field;\n if (isJsonImageValue(value, label)) {\n return { type: \"image\" as const, src: String(value), alt: `${label} preview` };\n }\n if (Array.isArray(value) && isJsonImageArray(value, label)) {\n return {\n type: \"image-gallery\" as const,\n images: value.map((image, index) => ({ src: String(image), alt: `${label} ${index + 1} preview` })),\n };\n }\n if (Array.isArray(value)) return value as Array<string | number | boolean | null>;\n if (value === undefined) return null;\n return value as string | number | boolean | null;\n};\n\nexport const buildFriendlyJsonParams = (value: unknown) =>\n buildJsonFields(value).map((field, index) => ({\n id: `friendly-json-${index}`,\n name: field.label,\n type: \"readOnly\" as const,\n value: toReadOnlyValue(field),\n }));\n\nexport const FriendlyJsonDisplay = (props: FriendlyJsonDisplayProps) => {\n const { value } = props;\n return <ParamEditor params={buildFriendlyJsonParams(value)} readOnly fullWidth />;\n};\n","import { Button, HStack, Image, Popover, Portal, Text } from \"@chakra-ui/react\";\nimport { Braces, ChevronRight } from \"lucide-react\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\nimport {\n buildJsonFields,\n FriendlyJsonDisplay,\n getJsonCellSummary,\n isJsonImageArray,\n isJsonImageValue,\n} from \"./friendly-json-display\";\n\ninterface JsonCellProps {\n columnLabel: string;\n value: unknown;\n}\n\nconst stopRowActivation = (event: { stopPropagation: () => void }) => event.stopPropagation();\n\nexport const JsonCell = (props: JsonCellProps) => {\n const { columnLabel, value } = props;\n const fields = buildJsonFields(value);\n const imageFields = fields\n .flatMap((field) => {\n if (isJsonImageValue(field.value, field.label)) return [field];\n if (!Array.isArray(field.value) || !isJsonImageArray(field.value, field.label)) return [];\n return field.value.map((image, index) => ({ label: `${field.label} ${index + 1}`, value: image }));\n })\n .slice(0, 2);\n const summary = getJsonCellSummary(value);\n\n return (\n <Popover.Root positioning={{ placement: \"bottom-start\", offset: { mainAxis: 6 } }}>\n <Popover.Trigger asChild>\n <Button\n aria-label={`View ${columnLabel} details`}\n variant=\"ghost\"\n size=\"xs\"\n width=\"full\"\n minWidth=\"0\"\n height=\"28px\"\n paddingX=\"2xs\"\n justifyContent=\"flex-start\"\n onClick={stopRowActivation}\n >\n {imageFields.length > 0 ? (\n <HStack gap=\"-1\" flexShrink=\"0\">\n {imageFields.map((field) => (\n <Image\n key={field.label}\n src={String(field.value)}\n alt={`${field.label} preview`}\n boxSize=\"22px\"\n borderRadius=\"xs\"\n borderWidth=\"1px\"\n borderColor=\"border.subtle\"\n objectFit=\"cover\"\n />\n ))}\n </HStack>\n ) : (\n <Braces size={14} />\n )}\n <Text flex=\"1\" minWidth=\"0\" textAlign=\"left\" textStyle=\"paragraph/S/regular\" truncate>\n {summary}\n </Text>\n <ChevronRight size={12} />\n </Button>\n </Popover.Trigger>\n <Portal>\n <Popover.Positioner>\n <Popover.Content width=\"min(380px, calc(100vw - 32px))\" padding=\"0\" background=\"bg\" overflow=\"hidden\">\n <ScrollArea maxH=\"360px\" viewportProps={{ overscrollBehavior: \"contain\" }}>\n <FriendlyJsonDisplay value={value} />\n </ScrollArea>\n </Popover.Content>\n </Popover.Positioner>\n </Portal>\n </Popover.Root>\n );\n};\n","import { Icon as ChakraIcon, chakra, IconButton, Menu, Portal, Text } from \"@chakra-ui/react\";\nimport type { CellContext, HeaderContext, RowSelectionState } from \"@tanstack/react-table\";\nimport { Check, ChevronDown, CircleHelp, Minus } from \"lucide-react\";\nimport { type CSSProperties, cloneElement, isValidElement, type ReactNode } from \"react\";\n\nimport { Checkbox } from \"@/components/primitives/checkbox\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport { ListRow } from \"../list-row/list-row\";\nimport { CategoricalColorCell, resolveCategoricalColor } from \"./categorical-color-cell\";\nimport { resolveColorCellStyle } from \"./color-cell-style\";\nimport { ColorScaleCell, resolveColorScaleValue } from \"./color-scale-cell\";\nimport { columnHelper, formatDisplayValue, getIcon, isDisplayValue } from \"./helpers\";\nimport { JsonCell } from \"./json-cell\";\nimport type { DataTableColumnRenderer, DataTableRowAction, RowData } from \"./types\";\n\nconst getSortValue = (value: unknown) => {\n return isDisplayValue(value) ? value.sortValue : value;\n};\n\nconst compareValues = (valueA: unknown, valueB: unknown) => {\n if (valueA === valueB) return 0;\n if (valueA === null || valueA === undefined) return 1;\n if (valueB === null || valueB === undefined) return -1;\n\n if (typeof valueA === \"number\" && typeof valueB === \"number\") {\n return valueA - valueB;\n }\n\n return String(valueA).localeCompare(String(valueB));\n};\n\nconst toSingleLineElement = (element: ReactNode) => {\n if (!isValidElement<{ style?: CSSProperties }>(element)) return element;\n\n return cloneElement(element, {\n style: {\n ...element.props.style,\n flexWrap: \"nowrap\",\n minWidth: 0,\n whiteSpace: \"nowrap\",\n },\n });\n};\n\ninterface BuildColumnsOptions {\n columnIcons?: Partial<Record<string, ReactNode>>;\n columnDescriptions?: Partial<Record<string, string>>;\n compactHeaders?: Partial<Record<string, string>>;\n enableSelection?: boolean;\n rowActions?: DataTableRowAction[];\n selectedRowIds?: RowSelectionState;\n columnRenderers?: Partial<Record<string, DataTableColumnRenderer>>;\n}\n\nconst stopControlPropagation = (event: { stopPropagation: () => void }) => {\n event.stopPropagation();\n};\n\nconst SelectionHeader = (props: HeaderContext<RowData, unknown>) => {\n const { table } = props;\n const checked = table.getIsAllRowsSelected();\n const isIndeterminate = !checked && table.getIsSomeRowsSelected();\n\n return (\n <Checkbox\n checked={checked ? true : isIndeterminate ? \"indeterminate\" : false}\n aria-label=\"Select all\"\n icon={<ChakraIcon as={isIndeterminate ? Minus : Check} boxSize=\"12px\" strokeWidth=\"3\" />}\n onClick={stopControlPropagation}\n onCheckedChange={(details) => table.toggleAllRowsSelected(details.checked === true)}\n />\n );\n};\n\nconst SelectionCell = (props: CellContext<RowData, unknown> & { selectedRowIds?: RowSelectionState }) => {\n const { row, selectedRowIds } = props;\n\n return (\n <Checkbox\n checked={Boolean(selectedRowIds?.[row.id])}\n aria-label=\"Select row\"\n icon={<ChakraIcon as={Check} boxSize=\"12px\" strokeWidth=\"3\" />}\n onClick={stopControlPropagation}\n onCheckedChange={(details) => row.toggleSelected(details.checked === true)}\n />\n );\n};\n\nconst RowActionsCell = (props: CellContext<RowData, unknown> & { actions: DataTableRowAction[] }) => {\n const { row, actions } = props;\n\n return (\n <Menu.Root>\n <Menu.Trigger asChild>\n <IconButton aria-label=\"Row actions\" size=\"2xs\" variant=\"ghost\" onClick={stopControlPropagation}>\n <ChakraIcon as={ChevronDown} boxSize=\"14px\" />\n </IconButton>\n </Menu.Trigger>\n <Portal>\n <Menu.Positioner>\n <Menu.Content zIndex=\"popover\" bg=\"bg\">\n {actions.map((action) => (\n <Menu.Item key={action.label} value={action.label} asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n tone={action.destructive ? \"danger\" : \"default\"}\n label={action.label}\n icon={action.icon}\n onClick={stopControlPropagation}\n onActivate={() => action.onSelect(row.original)}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n\ninterface FormattedCellProps {\n value: unknown;\n}\n\nconst FormattedCell = (props: FormattedCellProps) => {\n const { value } = props;\n const displayValue = formatDisplayValue(value);\n\n if (isValidElement(displayValue)) {\n return (\n <chakra.span display=\"inline-flex\" maxWidth=\"full\" minW=\"0\" overflow=\"hidden\" whiteSpace=\"nowrap\">\n {toSingleLineElement(displayValue)}\n </chakra.span>\n );\n }\n\n return (\n <Text maxWidth=\"full\" overflow=\"hidden\" textOverflow=\"ellipsis\" textStyle=\"paragraph/S/regular\" whiteSpace=\"nowrap\">\n {displayValue}\n </Text>\n );\n};\n\ninterface DataCellProps {\n columnLabel: string;\n renderer?: DataTableColumnRenderer;\n value: unknown;\n}\n\nconst DataCell = (props: DataCellProps) => {\n const { columnLabel, renderer, value } = props;\n\n if (renderer?.type === \"json\") return <JsonCell columnLabel={columnLabel} value={value} />;\n\n if (renderer?.type === \"color-scale\") {\n const color = resolveColorScaleValue(value, renderer.stops);\n if (color && typeof value === \"number\") return <ColorScaleCell value={value} />;\n }\n\n if (renderer?.type === \"categorical-color\") {\n const color = resolveCategoricalColor(value, renderer.categories);\n if (color) {\n return (\n <CategoricalColorCell>\n <FormattedCell value={value} />\n </CategoricalColorCell>\n );\n }\n }\n\n return <FormattedCell value={value} />;\n};\n\nconst resolveDataCellStyle = (value: unknown, renderer?: DataTableColumnRenderer) => {\n if (renderer?.type === \"color-scale\") {\n const color = resolveColorScaleValue(value, renderer.stops);\n if (color && typeof value === \"number\") return resolveColorCellStyle(color);\n }\n\n if (renderer?.type === \"categorical-color\") {\n const color = resolveCategoricalColor(value, renderer.categories);\n if (color) return resolveColorCellStyle(color);\n }\n};\n\nexport function buildColumns(data: RowData[], columnKeys: string[], options: BuildColumnsOptions = {}) {\n const {\n columnIcons,\n columnDescriptions,\n compactHeaders,\n enableSelection = false,\n rowActions = [],\n selectedRowIds,\n columnRenderers,\n } = options;\n const rowIndexColumn = columnHelper.accessor((_row, rowIndex) => rowIndex + 1, {\n header: \"\",\n id: \"rowIndex\",\n enableResizing: false,\n size: 20,\n cell: (info) => (\n <chakra.span display={\"block\"} textStyle={\"paragraph/S/regular\"} textAlign={\"center\"}>\n {info.getValue()}\n </chakra.span>\n ),\n });\n\n const selectionColumn = columnHelper.display({\n id: \"rowSelection\",\n header: SelectionHeader,\n cell: (info) => <SelectionCell {...info} selectedRowIds={selectedRowIds} />,\n enableResizing: false,\n enableSorting: false,\n size: 36,\n });\n\n const dataColumns = columnKeys.map((key) => {\n const fallBackKey = key || \"-\";\n const columnValues = data.map((row) => row[fallBackKey]);\n const renderer = columnRenderers?.[fallBackKey];\n const customIcon = columnIcons?.[fallBackKey];\n const headerIcon = customIcon === undefined ? getIcon(columnValues) : customIcon;\n const columnDescription = columnDescriptions?.[fallBackKey];\n\n return columnHelper.accessor((row) => row[fallBackKey], {\n id: fallBackKey,\n header: () => {\n const headerLabel = compactHeaders?.[fallBackKey] ?? fallBackKey;\n return (\n <chakra.span display=\"inline-flex\" alignItems=\"center\" gap=\"4px\" minW=\"0\" maxW=\"full\" overflow=\"hidden\">\n {headerIcon}\n <chakra.span overflow=\"hidden\" textOverflow=\"ellipsis\" whiteSpace=\"nowrap\">\n {headerLabel}\n </chakra.span>\n {columnDescription ? (\n <Tooltip content={columnDescription}>\n <ChakraIcon\n as={CircleHelp}\n aria-label={`About ${headerLabel}`}\n boxSize=\"12px\"\n color=\"fg.muted\"\n cursor=\"help\"\n flexShrink={0}\n opacity={0.6}\n tabIndex={0}\n />\n </Tooltip>\n ) : null}\n </chakra.span>\n );\n },\n cell: (info) => <DataCell columnLabel={fallBackKey} renderer={renderer} value={info.getValue()} />,\n meta: {\n getCellStyle: (value: unknown) => resolveDataCellStyle(value, renderer),\n },\n sortingFn: (rowA, rowB) => {\n const valueA = getSortValue(rowA.original[fallBackKey]);\n const valueB = getSortValue(rowB.original[fallBackKey]);\n return compareValues(valueA, valueB);\n },\n });\n });\n\n const rowActionsColumn = columnHelper.display({\n id: \"rowActions\",\n header: \"\",\n cell: (info) => <RowActionsCell {...info} actions={rowActions} />,\n enableResizing: false,\n enableSorting: false,\n size: 36,\n });\n\n return [\n rowIndexColumn,\n ...(enableSelection ? [selectionColumn] : []),\n ...dataColumns,\n ...(rowActions.length > 0 ? [rowActionsColumn] : []),\n ];\n}\n","import { Box, HStack, Icon, IconButton, Popover, Portal, Stack, Text } from \"@chakra-ui/react\";\nimport { closestCenter, DndContext, type DragEndEvent, PointerSensor, useSensor, useSensors } from \"@dnd-kit/core\";\nimport { SortableContext, useSortable, verticalListSortingStrategy } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { Check, GripVertical, Settings2 } from \"lucide-react\";\nimport { useEffect, useRef, useState } from \"react\";\n\nimport { SearchableMenuInput } from \"@/components/overlays/searchable-menu-input\";\nimport { Checkbox } from \"@/components/primitives/checkbox\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\nimport { Switch } from \"@/components/primitives/switch\";\n\ninterface DataTableColumnMenuColumn {\n id: string;\n label: string;\n}\n\ninterface DataTableColumnMenuProps {\n columns: DataTableColumnMenuColumn[];\n visibleColumnIds: Set<string>;\n showStats: boolean;\n statsAvailable: boolean;\n onColumnVisibilityChange: (columnId: string, visible: boolean) => void;\n onColumnReorder: (activeColumnId: string, overColumnId: string) => void;\n onStatsVisibilityChange: (showStats: boolean) => void;\n}\n\ninterface DataTableColumnMenuRowProps {\n column: DataTableColumnMenuColumn;\n checked: boolean;\n onColumnVisibilityChange: (columnId: string, visible: boolean) => void;\n}\n\nconst DataTableColumnMenuRow = (props: DataTableColumnMenuRowProps) => {\n const { column, checked, onColumnVisibilityChange } = props;\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({ id: column.id });\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.5 : 1,\n };\n\n return (\n <HStack\n ref={setNodeRef}\n style={style}\n gap=\"2xs\"\n minW=\"0\"\n width=\"full\"\n borderRadius=\"xs\"\n px=\"xs\"\n py=\"2xs\"\n _hover={{ bg: \"bg.hover\" }}\n >\n <Box as=\"span\" display=\"inline-flex\" cursor=\"grab\" color=\"fg.muted\" {...attributes} {...listeners}>\n <GripVertical size={14} />\n </Box>\n <Checkbox\n checked={checked}\n flex=\"1\"\n minW=\"0\"\n width=\"full\"\n flexDirection=\"row-reverse\"\n justifyContent=\"space-between\"\n size=\"sm\"\n icon={<Icon as={Check} boxSize=\"12px\" strokeWidth=\"3\" />}\n onCheckedChange={(details) => onColumnVisibilityChange(column.id, details.checked === true)}\n >\n <Text as=\"span\" textStyle=\"label/S/regular\" truncate>\n {column.label}\n </Text>\n </Checkbox>\n </HStack>\n );\n};\n\nexport const DataTableColumnMenu = (props: DataTableColumnMenuProps) => {\n const {\n columns,\n visibleColumnIds,\n showStats,\n statsAvailable,\n onColumnVisibilityChange,\n onColumnReorder,\n onStatsVisibilityChange,\n } = props;\n const triggerRef = useRef<HTMLButtonElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 5 } }));\n const normalizedQuery = query.trim().toLowerCase();\n const filteredColumns = normalizedQuery\n ? columns.filter((column) => column.label.toLowerCase().includes(normalizedQuery))\n : columns;\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n\n onColumnReorder(String(active.id), String(over.id));\n };\n\n useEffect(() => {\n if (!open) return;\n\n const closeOnOutsidePointerDown = (event: PointerEvent) => {\n const target = event.target;\n if (!(target instanceof Node)) return;\n if (contentRef.current?.contains(target) || triggerRef.current?.contains(target)) return;\n\n setOpen(false);\n };\n const closeOnEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n setOpen(false);\n }\n };\n\n document.addEventListener(\"pointerdown\", closeOnOutsidePointerDown);\n document.addEventListener(\"keydown\", closeOnEscape, true);\n return () => {\n document.removeEventListener(\"pointerdown\", closeOnOutsidePointerDown);\n document.removeEventListener(\"keydown\", closeOnEscape, true);\n };\n }, [open]);\n\n return (\n <Popover.Root\n open={open}\n closeOnInteractOutside={false}\n positioning={{\n placement: \"bottom-end\",\n offset: { mainAxis: 8 },\n getAnchorElement: () => triggerRef.current,\n }}\n >\n <Popover.Trigger asChild>\n <IconButton\n ref={triggerRef}\n aria-label=\"Display settings\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setOpen((current) => !current)}\n >\n <Icon as={Settings2} boxSize=\"14px\" />\n </IconButton>\n </Popover.Trigger>\n <Portal>\n <Popover.Positioner>\n <Popover.Content ref={contentRef} width=\"min(320px, calc(100vw - 32px))\" p=\"0\" bg=\"bg\" overflow=\"hidden\">\n <Stack gap=\"0\">\n {statsAvailable ? (\n <Box borderBottomWidth=\"1px\" borderColor=\"border.subtle\" padding=\"xs\">\n <Switch\n checked={showStats}\n inputProps={{ role: \"switch\" }}\n width=\"full\"\n flexDirection=\"row-reverse\"\n justifyContent=\"space-between\"\n onCheckedChange={(details) => onStatsVisibilityChange(details.checked === true)}\n >\n <Text as=\"span\" textStyle=\"label/S/regular\">\n Statistics\n </Text>\n </Switch>\n </Box>\n ) : null}\n <SearchableMenuInput value={query} placeholder=\"Search columns\" onValueChange={setQuery} />\n <ScrollArea maxH=\"280px\" viewportProps={{ overscrollBehavior: \"contain\" }}>\n <Box padding=\"2xs\">\n <DndContext sensors={sensors} collisionDetection={closestCenter} onDragEnd={handleDragEnd}>\n <SortableContext items={columns.map((column) => column.id)} strategy={verticalListSortingStrategy}>\n <Stack gap=\"1px\">\n {filteredColumns.map((column) => (\n <DataTableColumnMenuRow\n key={column.id}\n column={column}\n checked={visibleColumnIds.has(column.id)}\n onColumnVisibilityChange={onColumnVisibilityChange}\n />\n ))}\n </Stack>\n </SortableContext>\n </DndContext>\n </Box>\n </ScrollArea>\n </Stack>\n </Popover.Content>\n </Popover.Positioner>\n </Portal>\n </Popover.Root>\n );\n};\n","import type { ReactNode } from \"react\";\nimport { KanbanRendererToolbar } from \"../kanban-renderer/kanban-renderer-toolbar\";\nimport type { AttributeDescriptor, KanbanRendererRow } from \"../kanban-renderer/types\";\n\ninterface DataTableHeaderProps {\n rows: KanbanRendererRow[];\n attributes: AttributeDescriptor[];\n storageKey: string;\n columnControl: ReactNode;\n}\n\nexport const DataTableHeader = (props: DataTableHeaderProps) => {\n const { rows, attributes, storageKey, columnControl } = props;\n\n return (\n <KanbanRendererToolbar\n rows={rows}\n storageKey={storageKey}\n attributes={attributes}\n defaultSettings={{ viewMode: \"list\" }}\n displayControl={columnControl}\n />\n );\n};\n","import type {\n AttributeDescriptor,\n KanbanRendererFilterState,\n KanbanRendererRow,\n} from \"@/components/kanban-renderer/types\";\nimport { filterRows } from \"../kanban-renderer/kanban-renderer-grouping\";\nimport { isDisplayValue } from \"./helpers\";\nimport type { DataTableProps, DataTableSelectionAction, RowData } from \"./types\";\n\nexport const defaultPageSize = 30;\n\nexport interface DataTableRendererRow extends KanbanRendererRow {\n sourceRow: RowData;\n}\n\nexport const resolveDataTableRowId = (row: RowData, index: number, getRowId?: DataTableProps[\"getRowId\"]) => {\n if (getRowId) return getRowId(row, index);\n return typeof row.id === \"string\" ? row.id : String(index);\n};\n\nexport const resolveInitialPageSize = (props: Pick<DataTableProps, \"initialPageSize\">) => {\n if (typeof props.initialPageSize === \"number\" && props.initialPageSize > 0) return props.initialPageSize;\n return defaultPageSize;\n};\n\nexport const getSelectedOriginalRows = (rows: Array<{ original: RowData }>) => rows.map((row) => row.original);\n\nexport const resolveSelectionActions = (\n props: Pick<DataTableProps, \"selectionActions\" | \"onCSVDownload\" | \"getRowId\">,\n) => {\n const actions: DataTableSelectionAction[] = [...(props.selectionActions ?? [])];\n\n if (props.onCSVDownload) {\n actions.push({\n label: \"Download CSV\",\n onSelect: (rows) => {\n props.onCSVDownload?.(rows.map((row, index) => resolveDataTableRowId(row, index, props.getRowId)));\n },\n });\n }\n\n return actions;\n};\n\nexport const shouldEnableSelection = (\n props: Pick<DataTableProps, \"selectionMode\" | \"selectionActions\" | \"onCSVDownload\">,\n) => props.selectionMode === \"multiple\" || Boolean(props.onCSVDownload) || Boolean(props.selectionActions?.length);\n\nexport const shouldHighlightActiveRow = (props: {\n enableRowActivation?: boolean;\n activeRowId?: string | null;\n rowId: string;\n}) => props.enableRowActivation === true && props.activeRowId === props.rowId;\n\nconst toAttributeValue = (value: unknown) => {\n const raw = isDisplayValue(value) ? value.sortValue : value;\n if (typeof raw === \"boolean\") return String(raw);\n return raw;\n};\n\nconst isNumberColumn = (rows: RowData[], columnKey: string) => {\n const values = rows\n .map((row) => toAttributeValue(row[columnKey]))\n .filter((value) => value !== null && value !== undefined);\n return values.length > 0 && values.every((value) => typeof value === \"number\");\n};\n\nconst resolveAttributeType = (rows: RowData[], columnKey: string): AttributeDescriptor[\"type\"] => {\n if (isNumberColumn(rows, columnKey)) return { kind: \"number\" };\n return { kind: \"string\" };\n};\n\nexport const buildDataTableRendererAttributes = (\n rows: RowData[],\n columnKeys: string[],\n compactHeaders?: Partial<Record<string, string>>,\n): AttributeDescriptor[] =>\n columnKeys.map((columnKey) => ({\n id: columnKey,\n label: compactHeaders?.[columnKey] ?? columnKey,\n type: resolveAttributeType(rows, columnKey),\n filterable: true,\n sortable: true,\n displayable: true,\n }));\n\nexport const buildDataTableRendererRows = (\n rows: RowData[],\n columnKeys: string[],\n getRowId?: DataTableProps[\"getRowId\"],\n): DataTableRendererRow[] =>\n rows.map((row, index) => {\n const attributes = Object.fromEntries(columnKeys.map((columnKey) => [columnKey, toAttributeValue(row[columnKey])]));\n const rowId = resolveDataTableRowId(row, index, getRowId);\n const firstValue = columnKeys.length > 0 ? toAttributeValue(row[columnKeys[0]!]) : rowId;\n\n return {\n id: rowId,\n title: String(firstValue ?? rowId),\n attributes,\n sourceRow: row,\n };\n });\n\nexport const filterDataTableRows = (\n rows: DataTableRendererRow[],\n filters: KanbanRendererFilterState,\n attributes: AttributeDescriptor[],\n) => filterRows(rows, filters, attributes) as DataTableRendererRow[];\n\nexport const resolveDataTableColumnOrder = (availableColumnIds: string[], requestedColumnOrder: string[]) => {\n const availableColumnIdSet = new Set(availableColumnIds);\n const orderedColumnIds = requestedColumnOrder.filter((columnId) => availableColumnIdSet.has(columnId));\n const orderedColumnIdSet = new Set(orderedColumnIds);\n const missingColumnIds = availableColumnIds.filter((columnId) => !orderedColumnIdSet.has(columnId));\n\n return [...orderedColumnIds, ...missingColumnIds];\n};\n\nexport const reorderDataTableColumns = (columnIds: string[], activeColumnId: string, overColumnId: string) => {\n const activeIndex = columnIds.indexOf(activeColumnId);\n const overIndex = columnIds.indexOf(overColumnId);\n\n if (activeIndex < 0 || overIndex < 0 || activeIndex === overIndex) return columnIds;\n\n const nextColumnIds = [...columnIds];\n const [activeColumn] = nextColumnIds.splice(activeIndex, 1);\n if (!activeColumn) return columnIds;\n\n nextColumnIds.splice(overIndex, 0, activeColumn);\n return nextColumnIds;\n};\n\nexport const resolveDataTableToolbarStorageKey = (props: { toolbarStorageKey?: string; columnKeys: string[] }) =>\n props.toolbarStorageKey ?? `data-table:${props.columnKeys.join(\"|\") || \"empty\"}`;\n","import { Chart, type UseChartProps, useChart } from \"@chakra-ui/charts\";\nimport type { ReactNode } from \"react\";\nimport {\n Bar,\n BarChart,\n Tooltip as RechartsTooltip,\n useActiveTooltipCoordinate,\n usePlotArea,\n XAxis,\n YAxis,\n} from \"recharts\";\n\ntype ChartSeries<T> = NonNullable<UseChartProps<T>[\"series\"]>[number];\ntype StringKeyOf<T> = Extract<keyof T, string>;\n\nconst StatChartCrosshair = () => {\n const coordinate = useActiveTooltipCoordinate();\n const plotArea = usePlotArea();\n\n if (!coordinate || !plotArea) return null;\n\n return (\n <g pointerEvents=\"none\" stroke=\"var(--chakra-colors-border-emphasized)\" strokeWidth=\"1\">\n <line x1={coordinate.x} x2={coordinate.x} y1={plotArea.y} y2={plotArea.y + plotArea.height} />\n <line x1={plotArea.x} x2={plotArea.x + plotArea.width} y1={coordinate.y} y2={coordinate.y} />\n </g>\n );\n};\n\ninterface DataTableStatChartProps<T extends object> {\n data: T[];\n dataKey: StringKeyOf<T>;\n color: ChartSeries<T>[\"color\"];\n height: string;\n ariaLabel: string;\n tooltipLabel: (datum: T) => ReactNode;\n tooltipValue: (value: string | number) => ReactNode;\n tooltipSeriesLabel: string;\n layout?: \"horizontal\" | \"vertical\";\n categoryKey?: StringKeyOf<T>;\n domain?: [number, number];\n barSize?: number;\n barCategoryGap?: number;\n}\n\nexport const DataTableStatChart = <T extends object>(props: DataTableStatChartProps<T>) => {\n const {\n data,\n dataKey,\n color,\n height,\n ariaLabel,\n tooltipLabel,\n tooltipValue,\n tooltipSeriesLabel,\n layout = \"horizontal\",\n categoryKey,\n domain,\n barSize,\n barCategoryGap = 1,\n } = props;\n const chart = useChart({ data, series: [{ name: dataKey, color }] });\n const getBarValue = (datum: T) => datum[dataKey] as string | number;\n const getCategoryValue = categoryKey ? (datum: T) => datum[categoryKey] as string | number : undefined;\n\n return (\n <Chart.Root chart={chart} height={height} aspectRatio=\"auto\" cursor=\"crosshair\" aria-label={ariaLabel}>\n <BarChart\n responsive\n data={chart.data}\n layout={layout}\n margin={{ top: 2, right: 0, bottom: 0, left: 0 }}\n barCategoryGap={barCategoryGap}\n >\n {layout === \"vertical\" ? (\n <>\n <XAxis type=\"number\" domain={domain} hide />\n <YAxis type=\"category\" dataKey={getCategoryValue} hide />\n </>\n ) : null}\n <Bar dataKey={getBarValue} fill={chart.color(color)} barSize={barSize} isAnimationActive={false} />\n <RechartsTooltip\n allowEscapeViewBox={{ x: true, y: true }}\n content={\n <Chart.Tooltip\n labelFormatter={(label, payload) => {\n const datum = payload[0]?.payload as T | undefined;\n return datum ? tooltipLabel(datum) : label;\n }}\n formatter={(value) => [tooltipValue(value), tooltipSeriesLabel]}\n />\n }\n cursor={<StatChartCrosshair />}\n isAnimationActive={false}\n wrapperStyle={{ zIndex: 1800 }}\n />\n </BarChart>\n </Chart.Root>\n );\n};\n","import { isDisplayValue } from \"./helpers\";\nimport type { RowData } from \"./types\";\n\nexport interface HistogramBin {\n start: number;\n end: number;\n count: number;\n}\n\nexport interface HistogramStat {\n min: number;\n max: number;\n bins: HistogramBin[];\n}\n\nexport interface TopValueStat {\n label: string;\n count: number;\n percentage: number;\n}\n\nconst getStatValue = (value: unknown) => (isDisplayValue(value) ? value.sortValue : value);\n\nconst getColumnStatValues = (rows: RowData[], columnId: string) =>\n rows\n .map((row) => getStatValue(row[columnId]))\n .filter((value) => value !== null && value !== undefined && value !== \"\");\n\nexport const countUniqueStatValues = (rows: RowData[], columnId: string) =>\n new Set(getColumnStatValues(rows, columnId)).size;\n\nexport const buildTopValuesStat = (rows: RowData[], columnId: string, limit: number) => {\n const values = getColumnStatValues(rows, columnId);\n const counts = new Map<unknown, number>();\n\n for (const value of values) {\n counts.set(value, (counts.get(value) ?? 0) + 1);\n }\n\n const groups: TopValueStat[] = [...counts.entries()]\n .map(([value, count]) => ({\n label: String(value),\n count,\n percentage: Math.round((count / values.length) * 100),\n }))\n .sort((left, right) => right.count - left.count || left.label.localeCompare(right.label));\n const topGroups = groups.slice(0, limit);\n const otherCount = groups.slice(limit).reduce((total, group) => total + group.count, 0);\n\n if (otherCount === 0) return topGroups;\n\n return [\n ...topGroups,\n {\n label: \"Other\",\n count: otherCount,\n percentage: Math.round((otherCount / values.length) * 100),\n },\n ];\n};\n\nexport const buildHistogramStat = (rows: RowData[], columnId: string, binCount: number): HistogramStat | null => {\n const values = getColumnStatValues(rows, columnId).filter((value): value is number => typeof value === \"number\");\n if (values.length === 0) return null;\n\n const min = Math.min(...values);\n const max = Math.max(...values);\n const binWidth = (max - min) / binCount;\n const bins = Array.from({ length: binCount }, (_, index) => ({\n start: min + binWidth * index,\n end: min + binWidth * (index + 1),\n count: 0,\n }));\n\n for (const value of values) {\n const binIndex = value === max || binWidth === 0 ? binCount - 1 : Math.floor((value - min) / binWidth);\n bins[binIndex]!.count += 1;\n }\n\n return { min, max, bins };\n};\n","import { Box, Flex, Table, Text } from \"@chakra-ui/react\";\nimport type { Header, HeaderGroup } from \"@tanstack/react-table\";\nimport { DataTableStatChart } from \"./data-table-stat-chart\";\nimport { buildHistogramStat, buildTopValuesStat, countUniqueStatValues } from \"./data-table-stats\";\nimport type { DataTableColumnStat, RowData } from \"./types\";\n\nconst formatNumber = new Intl.NumberFormat(undefined, { maximumFractionDigits: 2 }).format;\nconst STAT_CHART_COLOR = \"vis.categorical.1\";\n\ninterface SingleValueStatProps {\n value: string;\n count: number;\n}\n\nconst SingleValueStat = (props: SingleValueStatProps) => {\n const { value, count } = props;\n\n return (\n <Flex data-single-value-stat direction=\"column\" gap=\"2xs\" alignItems=\"flex-start\" minWidth=\"0\">\n <Text textStyle=\"label/L/medium\" lineHeight=\"1\" maxWidth=\"100%\" truncate>\n {value}\n </Text>\n <Text textStyle=\"label/XS\" color=\"fg.muted\">\n {formatNumber(count)} {count === 1 ? \"value\" : \"values\"}\n </Text>\n </Flex>\n );\n};\n\ninterface UniqueStatProps {\n rows: RowData[];\n columnId: string;\n}\n\nconst UniqueStat = (props: UniqueStatProps) => {\n const { rows, columnId } = props;\n const count = countUniqueStatValues(rows, columnId);\n\n return (\n <Flex direction=\"column\" gap=\"2xs\" alignItems=\"flex-start\">\n <Text textStyle=\"label/L/medium\" lineHeight=\"1\">\n {formatNumber(count)}\n </Text>\n <Text textStyle=\"label/XS/regular\" color=\"fg.muted\">\n unique values\n </Text>\n </Flex>\n );\n};\n\ninterface HistogramStatProps {\n rows: RowData[];\n columnId: string;\n binCount: number;\n}\n\nconst HistogramStat = (props: HistogramStatProps) => {\n const { rows, columnId, binCount } = props;\n const histogram = buildHistogramStat(rows, columnId, binCount);\n\n if (!histogram) {\n return (\n <Text textStyle=\"label/XS/regular\" color=\"fg.muted\">\n No numeric values\n </Text>\n );\n }\n\n const valueCount = histogram.bins.reduce((total, bin) => total + bin.count, 0);\n if (histogram.min === histogram.max) {\n return <SingleValueStat value={formatNumber(histogram.min)} count={valueCount} />;\n }\n\n return (\n <Flex direction=\"column\" width=\"100%\" gap=\"2xs\">\n <DataTableStatChart\n data={histogram.bins}\n dataKey=\"count\"\n color={STAT_CHART_COLOR}\n height=\"40px\"\n ariaLabel={`Distribution for ${columnId}`}\n tooltipLabel={(bin) => `${formatNumber(bin.start)} – ${formatNumber(bin.end)}`}\n tooltipValue={(value) => `${formatNumber(Number(value))} values`}\n tooltipSeriesLabel=\"Count\"\n />\n <Flex justifyContent=\"space-between\" gap=\"xs\">\n <Text textStyle=\"label/XS/regular\" color=\"fg.muted\">\n {formatNumber(histogram.min)}\n </Text>\n <Text textStyle=\"label/XS/regular\" color=\"fg.muted\">\n {formatNumber(histogram.max)}\n </Text>\n </Flex>\n </Flex>\n );\n};\n\ninterface TopValuesStatProps {\n rows: RowData[];\n columnId: string;\n limit: number;\n}\n\nconst TopValuesStat = (props: TopValuesStatProps) => {\n const { rows, columnId, limit } = props;\n const groups = buildTopValuesStat(rows, columnId, limit);\n\n if (groups.length === 1 && groups[0]) {\n return <SingleValueStat value={groups[0].label} count={groups[0].count} />;\n }\n\n return (\n <Flex direction=\"column\" width=\"100%\" gap=\"2xs\">\n {groups.map((group) => (\n <Box key={group.label} position=\"relative\" height=\"18px\">\n <DataTableStatChart\n data={[group]}\n dataKey=\"percentage\"\n categoryKey=\"label\"\n color={STAT_CHART_COLOR}\n height=\"18px\"\n ariaLabel={`${group.label}: ${group.percentage}%`}\n layout=\"vertical\"\n domain={[0, 100]}\n barSize={18}\n tooltipLabel={(datum) => `${datum.label} · ${formatNumber(datum.count)} values`}\n tooltipValue={(value) => `${formatNumber(Number(value))}%`}\n tooltipSeriesLabel=\"Share\"\n />\n <Flex\n position=\"absolute\"\n inset=\"0\"\n paddingX=\"2xs\"\n justifyContent=\"space-between\"\n gap=\"xs\"\n pointerEvents=\"none\"\n >\n <Text textStyle=\"label/2XS\" color=\"fg.inverted\" truncate>\n {group.label}\n </Text>\n <Text textStyle=\"label/2XS/medium\" color=\"fg.muted\">\n {group.percentage}%\n </Text>\n </Flex>\n </Box>\n ))}\n </Flex>\n );\n};\n\ninterface DataTableStatProps {\n rows: RowData[];\n columnId: string;\n stat: DataTableColumnStat;\n}\n\nconst DataTableStat = (props: DataTableStatProps) => {\n const { rows, columnId, stat } = props;\n\n if (stat.type === \"unique\") return <UniqueStat rows={rows} columnId={columnId} />;\n if (stat.type === \"histogram\") {\n return <HistogramStat rows={rows} columnId={columnId} binCount={stat.bins ?? 10} />;\n }\n return <TopValuesStat rows={rows} columnId={columnId} limit={stat.limit ?? 2} />;\n};\n\ninterface DataTableStatCellProps {\n header: Header<RowData, unknown>;\n headerGroup: HeaderGroup<RowData>;\n rows: RowData[];\n columnStats: Partial<Record<string, DataTableColumnStat>>;\n fullWidth?: boolean;\n}\n\nconst DataTableStatCell = (props: DataTableStatCellProps) => {\n const { header, headerGroup, rows, columnStats, fullWidth } = props;\n const stat = columnStats[header.column.id];\n\n return (\n <Table.ColumnHeader\n data-column-id={header.column.id}\n data-stat-type={stat?.type}\n borderRight=\"1px solid\"\n _last={{ borderRight: \"none\" }}\n borderColor=\"border.subtle\"\n padding=\"xs\"\n verticalAlign=\"middle\"\n overflow=\"hidden\"\n style={{\n width:\n fullWidth && headerGroup.headers.indexOf(header) === headerGroup.headers.length - 1\n ? undefined\n : `calc(var(--header-${header.id}-size) * 1px)`,\n }}\n >\n {stat ? <DataTableStat rows={rows} columnId={header.column.id} stat={stat} /> : null}\n </Table.ColumnHeader>\n );\n};\n\ninterface DataTableStatsRowProps {\n headerGroup: HeaderGroup<RowData>;\n rows: RowData[];\n columnStats: Partial<Record<string, DataTableColumnStat>>;\n fullWidth?: boolean;\n noBorder?: boolean;\n}\n\nexport const DataTableStatsRow = (props: DataTableStatsRowProps) => {\n const { headerGroup, rows, columnStats, fullWidth, noBorder } = props;\n const hasVisibleStats = headerGroup.headers.some((header) => columnStats[header.column.id]);\n\n if (!hasVisibleStats) return null;\n\n return (\n <Table.Row\n className=\"data-table-stats-row\"\n borderRight={noBorder ? \"none\" : \"1px solid\"}\n borderColor=\"border.subtle\"\n >\n {headerGroup.headers.map((header) => (\n <DataTableStatCell\n key={header.id}\n header={header}\n headerGroup={headerGroup}\n rows={rows}\n columnStats={columnStats}\n fullWidth={fullWidth}\n />\n ))}\n </Table.Row>\n );\n};\n","import { Icon as ChakraIcon, Flex, IconButton, Menu, Portal, Table, Text } from \"@chakra-ui/react\";\nimport {\n type Cell,\n flexRender,\n type Header,\n type HeaderGroup,\n type Row,\n type Table as TanStackTable,\n} from \"@tanstack/react-table\";\nimport { ArrowDownAZ, ArrowUpAZ, MoreVertical } from \"lucide-react\";\nimport type { CSSProperties } from \"react\";\nimport { ResourceContextMenu } from \"@/components/overlays/resource-context-menu\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport { ListRow } from \"../list-row/list-row\";\nimport type { DataTableCellContext, DataTableProps, RowData } from \"./types\";\n\nconst utilityColumnIds = new Set([\"rowIndex\", \"rowSelection\", \"rowActions\"]);\n\nconst getSortMenuIcon = (sortDirection: false | \"asc\" | \"desc\") => {\n if (sortDirection === \"asc\") return ArrowUpAZ;\n if (sortDirection === \"desc\") return ArrowDownAZ;\n return MoreVertical;\n};\n\ninterface DataTableColumnHeaderProps {\n header: Header<RowData, unknown>;\n headerGroup: HeaderGroup<RowData>;\n table: TanStackTable<RowData>;\n fullWidth?: boolean;\n hasDescription?: boolean;\n}\n\nexport const DataTableColumnHeader = (props: DataTableColumnHeaderProps) => {\n const { header, headerGroup, table, fullWidth, hasDescription } = props;\n const sortDirection = header.column.getIsSorted();\n const canSortColumn = !utilityColumnIds.has(header.column.id) && table.getCoreRowModel().rows.length > 1;\n const SortIcon = getSortMenuIcon(sortDirection);\n const tooltipContent =\n header.column.id === \"rowSelection\"\n ? \"Select all\"\n : flexRender(header.column.columnDef.header, header.getContext());\n\n return (\n <Table.ColumnHeader\n data-column-id={header.column.id}\n textTransform=\"none\"\n borderRight=\"1px solid\"\n _last={{ borderRight: \"none\" }}\n borderColor=\"border.subtle\"\n paddingX=\"xs\"\n paddingY=\"xs\"\n key={header.id}\n overflow=\"hidden\"\n position=\"relative\"\n verticalAlign=\"middle\"\n whiteSpace=\"nowrap\"\n style={{\n width:\n fullWidth && headerGroup.headers.indexOf(header) === headerGroup.headers.length - 1\n ? undefined\n : `calc(var(--header-${header.id}-size) * 1px)`,\n }}\n >\n <Tooltip content={tooltipContent} disabled={hasDescription}>\n <Flex className=\"group\" alignItems=\"center\" justifyContent=\"space-between\" gap=\"1\" flex=\"1\" minW=\"0\">\n <Text as=\"div\" textStyle=\"label/S/medium\" lineHeight=\"1.2\" truncate>\n {flexRender(header.column.columnDef.header, header.getContext())}\n </Text>\n {canSortColumn && (\n <Menu.Root>\n <Menu.Trigger asChild>\n <IconButton\n ml=\"2px\"\n size=\"2xs\"\n aria-label={sortDirection ? `Sorted ${sortDirection}` : \"Sort column\"}\n variant=\"ghost\"\n visibility={sortDirection ? \"visible\" : \"hidden\"}\n _groupHover={{ visibility: \"visible\" }}\n >\n <ChakraIcon as={SortIcon} boxSize=\"14px\" />\n </IconButton>\n </Menu.Trigger>\n <Portal>\n <Menu.Positioner>\n <Menu.Content zIndex=\"popover\" bg=\"bg\">\n <Menu.Item value=\"sort-asc\" asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n label=\"Sort ascending\"\n icon={<ChakraIcon as={ArrowUpAZ} boxSize=\"16px\" />}\n disabled={sortDirection === \"asc\"}\n onActivate={() => header.column.toggleSorting(false)}\n />\n </Menu.Item>\n <Menu.Item value=\"sort-desc\" asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n label=\"Sort descending\"\n icon={<ChakraIcon as={ArrowDownAZ} boxSize=\"16px\" />}\n disabled={sortDirection === \"desc\"}\n onActivate={() => header.column.toggleSorting(true)}\n />\n </Menu.Item>\n {sortDirection && (\n <Menu.Item value=\"clear-sort\" asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n label=\"Clear sort\"\n onActivate={() => header.column.clearSorting()}\n />\n </Menu.Item>\n )}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n )}\n {header.column.getCanResize() && (\n <span\n {...{\n onDoubleClick: () => header.column.resetSize(),\n onMouseDown: header.getResizeHandler(),\n onTouchStart: header.getResizeHandler(),\n className: `resizer ${header.column.getIsResizing() ? \"isResizing\" : \"\"}`,\n }}\n />\n )}\n </Flex>\n </Tooltip>\n </Table.ColumnHeader>\n );\n};\n\ninterface DataTableCellViewProps {\n cell: Cell<RowData, unknown>;\n row: Row<RowData>;\n getCellContextMenuActions?: DataTableProps[\"getCellContextMenuActions\"];\n}\n\ninterface DataTableColumnMeta {\n getCellStyle?: (value: unknown) => CSSProperties | undefined;\n}\n\nconst DataTableCellView = (props: DataTableCellViewProps) => {\n const { cell, row, getCellContextMenuActions } = props;\n const columnMeta = cell.column.columnDef.meta as DataTableColumnMeta | undefined;\n const cellStyle = columnMeta?.getCellStyle?.(cell.getValue());\n const cellContext: DataTableCellContext = {\n row: row.original,\n rowId: row.id,\n columnId: cell.column.id,\n value: cell.getValue(),\n };\n const contextActions =\n getCellContextMenuActions?.(cellContext).map((action) => ({\n key: action.label,\n label: action.label,\n icon: action.icon,\n onClick: () => action.onSelect(cellContext),\n })) ?? [];\n const cellElement = (\n <Table.Cell\n data-column-id={cell.column.id}\n width=\"fit-content\"\n maxWidth=\"12rem\"\n overflow=\"hidden\"\n padding=\"xs\"\n borderRight=\"1px solid\"\n borderColor=\"border.subtle\"\n _last={{ borderRight: \"none\" }}\n borderBottom=\"none\"\n key={cell.id}\n textStyle=\"paragraph/S/regular\"\n textOverflow=\"ellipsis\"\n whiteSpace=\"nowrap\"\n style={cellStyle}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </Table.Cell>\n );\n\n if (contextActions.length === 0) return cellElement;\n\n return (\n <ResourceContextMenu key={cell.id} actions={contextActions}>\n {cellElement}\n </ResourceContextMenu>\n );\n};\n\ninterface DataTableBodyRowProps {\n row: Row<RowData>;\n noBorder?: boolean;\n rowIsInteractive: boolean;\n rowIsActive: boolean;\n rowIsSelected: boolean;\n onRowClick?: DataTableProps[\"onRowClick\"];\n getCellContextMenuActions?: DataTableProps[\"getCellContextMenuActions\"];\n}\n\nexport const DataTableBodyRow = (props: DataTableBodyRowProps) => {\n const { row, noBorder, rowIsInteractive, rowIsActive, rowIsSelected, onRowClick, getCellContextMenuActions } = props;\n\n return (\n <Table.Row\n key={row.id}\n data-active={rowIsActive ? \"true\" : undefined}\n data-selected={rowIsSelected ? \"true\" : undefined}\n aria-selected={rowIsSelected ? \"true\" : undefined}\n cursor={rowIsInteractive ? \"pointer\" : undefined}\n onClick={rowIsInteractive ? () => onRowClick?.(row.original) : undefined}\n borderTop={noBorder ? \"none\" : \"1px solid\"}\n borderBottom=\"1px solid\"\n borderRight={noBorder ? \"none\" : \"1px solid\"}\n _last={{ borderBottom: noBorder ? \"none\" : \"1px solid\", borderColor: \"border.subtle\" }}\n borderColor=\"border.subtle\"\n background={rowIsActive ? \"bg.active\" : \"bg\"}\n >\n {row.getVisibleCells().map((cell) => (\n <DataTableCellView key={cell.id} cell={cell} row={row} getCellContextMenuActions={getCellContextMenuActions} />\n ))}\n </Table.Row>\n );\n};\n","import { Button, Icon as ChakraIcon, Flex, IconButton, Menu, Portal, Stack, Text } from \"@chakra-ui/react\";\nimport type { useReactTable } from \"@tanstack/react-table\";\nimport { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight } from \"lucide-react\";\n\nimport { NumberInputField, NumberInputRoot } from \"@/components/primitives/number-input\";\nimport { ListRow } from \"../list-row/list-row\";\nimport type { RowData } from \"./types\";\n\nexport function PaginationFooter({\n table,\n pageIndex,\n pageSize,\n pageSizeOptions,\n}: {\n table: ReturnType<typeof useReactTable<RowData>>;\n pageIndex: number;\n pageSize: number;\n pageSizeOptions: number[];\n}) {\n const totalPages = Math.max(table.getPageCount(), 1);\n const canGoBack = pageIndex > 0;\n const canGoForward = pageIndex < totalPages - 1;\n\n return (\n <Flex\n alignItems=\"center\"\n justifyContent=\"space-between\"\n borderTop=\"1px solid\"\n borderColor={\"border.subtle\"}\n paddingX=\"xs\"\n >\n <Text textStyle=\"label/S/regular\">{table.getCoreRowModel().rows.length} rows</Text>\n <Stack alignItems=\"center\" direction=\"row\" justifyContent=\"flex-end\" paddingY=\"xs\">\n <Flex alignItems=\"center\" gap=\"xs\" marginRight=\"sm\">\n <Text textStyle=\"label/S/regular\">Rows per page</Text>\n <Menu.Root>\n <Menu.Trigger asChild>\n <Button size=\"xs\" variant=\"outline\">\n {pageSize}\n </Button>\n </Menu.Trigger>\n <Portal>\n <Menu.Positioner>\n <Menu.Content bg=\"bg\">\n {pageSizeOptions.map((option) => (\n <Menu.Item key={option} value={`${option}`} asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n label={`${option}`}\n isSelected={option === pageSize}\n onActivate={() => table.setPageSize(option)}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n </Flex>\n <IconButton size=\"xs\" aria-label=\"Go to first page\" onClick={() => table.setPageIndex(0)} disabled={!canGoBack}>\n <ChakraIcon as={ChevronsLeft} boxSize=\"14px\" />\n </IconButton>\n <IconButton\n size=\"xs\"\n aria-label=\"Go to previous page\"\n onClick={() => table.setPageIndex(pageIndex - 1)}\n disabled={!canGoBack}\n >\n <ChakraIcon as={ChevronLeft} boxSize=\"14px\" />\n </IconButton>\n <IconButton\n size=\"xs\"\n aria-label=\"Go to next page\"\n onClick={() => table.setPageIndex(pageIndex + 1)}\n disabled={!canGoForward}\n >\n <ChakraIcon as={ChevronRight} boxSize=\"14px\" />\n </IconButton>\n <IconButton\n size=\"xs\"\n aria-label=\"Go to last page\"\n onClick={() => table.setPageIndex(table.getPageCount() - 1)}\n disabled={!canGoForward}\n >\n <ChakraIcon as={ChevronsRight} boxSize=\"14px\" />\n </IconButton>\n <Flex alignItems=\"center\" height=\"100%\" marginLeft=\"sm\" marginRight=\"md\" gap=\"xs\">\n <Text>Page</Text>\n <NumberInputRoot\n margin=\"2xs\"\n width=\"3rem\"\n size=\"xs\"\n min={1}\n max={totalPages}\n value={`${pageIndex + 1}`}\n onValueChange={(details) => {\n const next = Number.isNaN(details.valueAsNumber) ? 1 : details.valueAsNumber;\n const clamped = Math.min(totalPages, Math.max(1, next));\n table.setPageIndex(clamped - 1);\n }}\n >\n <NumberInputField className=\"nodrag\" />\n </NumberInputRoot>\n <Text>of {totalPages}</Text>\n </Flex>\n </Stack>\n </Flex>\n );\n}\n","import { Button, Icon as ChakraIcon, Flex, IconButton, Menu, Portal, Stack, Text } from \"@chakra-ui/react\";\nimport { X } from \"lucide-react\";\nimport { ListRow } from \"../list-row/list-row\";\nimport type { DataTableSelectionAction, RowData } from \"./types\";\n\ninterface SelectionToolbarProps {\n selectedCount: number;\n totalCount: number;\n onClearSelection: () => void;\n onSelectAll: () => void;\n actions: DataTableSelectionAction[];\n selectedRows: RowData[];\n}\n\nexport function SelectionToolbar(props: SelectionToolbarProps) {\n const { selectedCount, totalCount, onClearSelection, onSelectAll, actions, selectedRows } = props;\n const actionLabel = actions.length === 1 ? actions[0]?.label : \"Actions\";\n\n return (\n <Flex position=\"absolute\" insetX=\"sm\" bottom=\"sm\" zIndex=\"popover\" justifyContent=\"center\" pointerEvents=\"none\">\n <Stack\n role=\"toolbar\"\n aria-label=\"Selection actions\"\n direction=\"row\"\n alignItems=\"center\"\n layerStyle=\"floatingBar\"\n pointerEvents=\"auto\"\n maxWidth=\"100%\"\n overflowX=\"auto\"\n >\n <IconButton aria-label=\"clear-selection\" onClick={onClearSelection} size=\"xs\">\n <ChakraIcon as={X} boxSize=\"16px\" />\n </IconButton>\n <Text>{selectedCount} rows selected</Text>\n {selectedCount !== totalCount && (\n <Button size=\"xs\" onClick={onSelectAll}>\n Select all {totalCount} rows\n </Button>\n )}\n {actions.length === 1 && actions[0] ? (\n <Button size=\"xs\" onClick={() => actions[0]?.onSelect(selectedRows)}>\n {actionLabel}\n </Button>\n ) : null}\n {actions.length > 1 ? (\n <Menu.Root>\n <Menu.Trigger asChild>\n <Button size=\"xs\">{actionLabel}</Button>\n </Menu.Trigger>\n <Portal>\n <Menu.Positioner>\n <Menu.Content bg=\"bg\">\n {actions.map((action) => (\n <Menu.Item key={action.label} value={action.label} asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n tone={action.destructive ? \"danger\" : \"default\"}\n label={action.label}\n icon={action.icon}\n onActivate={() => action.onSelect(selectedRows)}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n ) : null}\n </Stack>\n </Flex>\n );\n}\n","import \"./data-table.css\";\n\nimport { Box, Flex, Table } from \"@chakra-ui/react\";\nimport {\n getCoreRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n type PaginationState,\n type RowSelectionState,\n type SortingState,\n useReactTable,\n} from \"@tanstack/react-table\";\nimport { Fragment, useEffect, useState } from \"react\";\nimport { ScrollArea } from \"@/components/primitives/scroll-area\";\nimport { useKanbanRendererStore } from \"../kanban-renderer/use-kanban-renderer-store\";\nimport { buildColumns } from \"./build-columns\";\nimport { DataTableColumnMenu } from \"./data-table-column-menu\";\nimport { DataTableHeader } from \"./data-table-header\";\nimport {\n buildDataTableRendererAttributes,\n buildDataTableRendererRows,\n filterDataTableRows,\n getSelectedOriginalRows,\n reorderDataTableColumns,\n resolveDataTableColumnOrder,\n resolveDataTableRowId,\n resolveDataTableToolbarStorageKey,\n resolveInitialPageSize,\n resolveSelectionActions,\n shouldEnableSelection,\n shouldHighlightActiveRow,\n} from \"./data-table-state\";\nimport { DataTableStatsRow } from \"./data-table-stats-row\";\nimport { DataTableBodyRow, DataTableColumnHeader } from \"./data-table-table-parts\";\nimport { PaginationFooter } from \"./pagination-footer\";\nimport { SelectionToolbar } from \"./selection-toolbar\";\nimport type { DataTableProps } from \"./types\";\n\nexport const DataTable = (props: DataTableProps) => {\n const {\n data,\n noBorder,\n fullWidth,\n hiddenColumns,\n onRowClick,\n isRowInteractive,\n activeRowId,\n columnIcons,\n columnDescriptions,\n compactHeaders,\n columnStats,\n columnRenderers,\n initialPageSize,\n pageSizeOptions = [10, 20, 30, 50, 100],\n rowActions = [],\n getRowId,\n toolbarStorageKey,\n enableRowActivation = false,\n getCellContextMenuActions,\n } = props;\n const [sorting, setSorting] = useState<SortingState>([]);\n const [pagination, setPagination] = useState<PaginationState>(() => ({\n pageIndex: 0,\n pageSize: resolveInitialPageSize({ initialPageSize }),\n }));\n const [rowSelection, setRowSelection] = useState<RowSelectionState>({});\n const [showStats, setShowStats] = useState(true);\n const [columnOrder, setColumnOrder] = useState<string[]>(() => {\n const propHiddenColumnsSet = new Set(hiddenColumns ?? []);\n return Object.keys(data[0] || {}).filter((key) => !propHiddenColumnsSet.has(key));\n });\n const [hiddenColumnMenuIds, setHiddenColumnMenuIds] = useState<Set<string>>(() => new Set());\n const hiddenColumnsSet = new Set(hiddenColumns ?? []);\n const baseColumnKeys = Object.keys(data[0] || {}).filter((key) => !hiddenColumnsSet.has(key));\n const orderedBaseColumnKeys = resolveDataTableColumnOrder(baseColumnKeys, columnOrder);\n const visibleColumnIds = new Set(orderedBaseColumnKeys.filter((key) => !hiddenColumnMenuIds.has(key)));\n const columnKeys = orderedBaseColumnKeys.filter((key) => visibleColumnIds.has(key));\n const enableSelection = shouldEnableSelection(props);\n const selectionActions = resolveSelectionActions(props);\n const rendererAttributes = buildDataTableRendererAttributes(data, orderedBaseColumnKeys, compactHeaders);\n const rendererRows = buildDataTableRendererRows(data, orderedBaseColumnKeys, getRowId);\n const resolvedToolbarStorageKey = resolveDataTableToolbarStorageKey({\n toolbarStorageKey,\n columnKeys: baseColumnKeys,\n });\n const filters = useKanbanRendererStore(resolvedToolbarStorageKey, (state) => state.filters, {\n settings: { viewMode: \"list\" },\n });\n const filteredRendererRows = filterDataTableRows(rendererRows, filters, rendererAttributes);\n const filteredData = filteredRendererRows.map((row) => row.sourceRow);\n const columns = buildColumns(data, columnKeys, {\n columnIcons,\n columnDescriptions,\n compactHeaders,\n enableSelection,\n rowActions,\n selectedRowIds: rowSelection,\n columnRenderers,\n });\n\n const table = useReactTable({\n data: filteredData,\n columns,\n defaultColumn: { size: 150, minSize: 40, maxSize: 800 },\n state: { sorting, pagination, rowSelection },\n getRowId: (row, index) => resolveDataTableRowId(row, index, getRowId),\n columnResizeMode: \"onChange\",\n columnResizeDirection: \"ltr\",\n onSortingChange: setSorting,\n onPaginationChange: setPagination,\n onRowSelectionChange: setRowSelection,\n getSortedRowModel: getSortedRowModel(),\n getCoreRowModel: getCoreRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n enableMultiRowSelection: enableSelection,\n enableRowSelection: enableSelection,\n autoResetAll: false,\n });\n\n useEffect(() => {\n const pageCount = table.getPageCount();\n if (pageCount === 0 || pagination.pageIndex < pageCount) return;\n\n setPagination((current) => ({\n ...current,\n pageIndex: Math.max(pageCount - 1, 0),\n }));\n }, [pagination.pageIndex, table]);\n\n const columnSizeVars = (() => {\n const headers = table.getFlatHeaders();\n const colSizes: Record<string, number> = {};\n for (let i = 0; i < headers.length; i++) {\n const header = headers[i]!;\n colSizes[`--header-${header.id}-size`] = header.getSize();\n colSizes[`--col-${header.column.id}-size`] = header.column.getSize();\n }\n return colSizes;\n })();\n\n const selectedRows = table.getSelectedRowModel().rows;\n const allRows = table.getCoreRowModel().rows;\n const selectedOriginalRows = getSelectedOriginalRows(selectedRows);\n const columnControl = (\n <DataTableColumnMenu\n columns={orderedBaseColumnKeys.map((columnId) => ({\n id: columnId,\n label: compactHeaders?.[columnId] ?? columnId,\n }))}\n visibleColumnIds={visibleColumnIds}\n showStats={showStats}\n statsAvailable={Boolean(columnStats)}\n onColumnVisibilityChange={(columnId, visible) =>\n setHiddenColumnMenuIds((current) => {\n const next = new Set(current);\n if (visible) {\n next.delete(columnId);\n } else {\n next.add(columnId);\n }\n return next;\n })\n }\n onColumnReorder={(activeColumnId, overColumnId) =>\n setColumnOrder((current) =>\n reorderDataTableColumns(resolveDataTableColumnOrder(baseColumnKeys, current), activeColumnId, overColumnId),\n )\n }\n onStatsVisibilityChange={setShowStats}\n />\n );\n\n return (\n <Flex direction=\"column\" height=\"100%\" width=\"100%\">\n <DataTableHeader\n rows={rendererRows}\n storageKey={resolvedToolbarStorageKey}\n attributes={rendererAttributes}\n columnControl={columnControl}\n />\n <Box position=\"relative\" flex=\"1\" minHeight=\"0\">\n <ScrollArea height=\"100%\" maxWidth=\"unset\" showHorizontalScrollbar>\n <Table.Root\n className={`data-table${fullWidth ? \" full-width\" : \"\"}`}\n style={{ ...columnSizeVars, width: fullWidth ? \"100%\" : table.getTotalSize() }}\n >\n <Table.Header>\n {table.getHeaderGroups().map((headerGroup) => (\n <Fragment key={headerGroup.id}>\n <Table.Row\n className=\"data-table-column-header-row\"\n borderRight={noBorder ? \"none\" : \"1px solid\"}\n borderColor=\"border.subtle\"\n >\n {headerGroup.headers.map((header) => (\n <DataTableColumnHeader\n key={header.id}\n header={header}\n headerGroup={headerGroup}\n table={table}\n fullWidth={fullWidth}\n hasDescription={Boolean(columnDescriptions?.[header.column.id])}\n />\n ))}\n </Table.Row>\n {columnStats && showStats ? (\n <DataTableStatsRow\n headerGroup={headerGroup}\n rows={filteredData}\n columnStats={columnStats}\n noBorder={noBorder}\n fullWidth={fullWidth}\n />\n ) : null}\n </Fragment>\n ))}\n </Table.Header>\n <Table.Body>\n {table.getRowModel().rows.map((row) => {\n const rowIsInteractive = onRowClick ? (isRowInteractive?.(row.original) ?? true) : false;\n const rowIsActive = shouldHighlightActiveRow({ enableRowActivation, activeRowId, rowId: row.id });\n const rowIsSelected = row.getIsSelected();\n\n return (\n <DataTableBodyRow\n key={row.id}\n row={row}\n noBorder={noBorder}\n rowIsInteractive={rowIsInteractive}\n rowIsActive={rowIsActive}\n rowIsSelected={rowIsSelected}\n onRowClick={onRowClick}\n getCellContextMenuActions={getCellContextMenuActions}\n />\n );\n })}\n </Table.Body>\n </Table.Root>\n </ScrollArea>\n {enableSelection && selectedRows.length > 0 ? (\n <SelectionToolbar\n selectedCount={selectedRows.length}\n totalCount={allRows.length}\n onClearSelection={() => table.toggleAllRowsSelected(false)}\n onSelectAll={() => table.toggleAllRowsSelected(true)}\n actions={selectionActions}\n selectedRows={selectedOriginalRows}\n />\n ) : null}\n </Box>\n {table.getPageCount() > 1 && (\n <PaginationFooter\n table={table}\n pageIndex={pagination.pageIndex}\n pageSize={pagination.pageSize}\n pageSizeOptions={pageSizeOptions}\n />\n )}\n </Flex>\n );\n};\n","import \"./data-table.css\";\n\nimport { Skeleton, Table, Text } from \"@chakra-ui/react\";\n\nexport interface DataTableSkeletonColumn {\n id: string;\n label: string;\n}\n\ninterface DataTableSkeletonProps {\n /** Real column headers when the caller already knows them. */\n columns?: DataTableSkeletonColumn[];\n /** Placeholder column count when the headers are still unknown. */\n columnCount?: number;\n rowCount?: number;\n}\n\n// Deterministic width variation keeps the shimmer organic without re-rendering\n// to a different layout on every mount.\nconst cellWidths = [\"70%\", \"45%\", \"60%\", \"35%\", \"55%\"];\n\nexport const DataTableSkeleton = (props: DataTableSkeletonProps) => {\n const { columns, columnCount = 3, rowCount = 5 } = props;\n const headers =\n columns && columns.length > 0\n ? columns\n : Array.from({ length: columnCount }, (_, index) => ({ id: `column-${index + 1}`, label: \"\" }));\n\n return (\n <Table.Root className=\"data-table full-width\" width=\"100%\">\n <Table.Header>\n <Table.Row className=\"data-table-column-header-row\" borderRight=\"1px solid\" borderColor=\"border.subtle\">\n {headers.map((column) => (\n <Table.ColumnHeader\n key={column.id}\n textTransform=\"none\"\n borderRight=\"1px solid\"\n _last={{ borderRight: \"none\" }}\n borderColor=\"border.subtle\"\n paddingX=\"xs\"\n paddingY=\"xs\"\n whiteSpace=\"nowrap\"\n >\n {column.label ? (\n <Text as=\"div\" textStyle=\"label/S/medium\" lineHeight=\"1.2\" truncate>\n {column.label}\n </Text>\n ) : (\n <Skeleton height=\"12px\" width=\"4rem\" borderRadius=\"xs\" />\n )}\n </Table.ColumnHeader>\n ))}\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {Array.from({ length: rowCount }, (_, rowIndex) => (\n <Table.Row key={rowIndex}>\n {headers.map((column, columnIndex) => (\n <Table.Cell\n key={column.id}\n padding=\"xs\"\n borderRight=\"1px solid\"\n borderColor=\"border.subtle\"\n _last={{ borderRight: \"none\" }}\n borderBottom=\"none\"\n >\n <Skeleton\n height=\"14px\"\n width={cellWidths[(rowIndex + columnIndex) % cellWidths.length]}\n borderRadius=\"xs\"\n />\n </Table.Cell>\n ))}\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Root>\n );\n};\n"],"names":["resolveCategoricalColor","value","categories","find","category","Object","is","color","CategoricalColorCell","props","children","darkTextColor","lightTextColor","darkColorTarget","readableContrastRatio","expandShortHex","hex","split","map","character","join","parseHexColor","normalized","trim","startsWith","slice","expandedHex","length","test","r","Number","parseInt","g","b","toLinearChannel","channel","relativeLuminance","contrastRatio","foreground","background","foregroundLuminance","backgroundLuminance","lighter","Math","max","darker","min","toHexColor","toHexChannel","round","toString","padStart","mixRgbColors","start","end","endWeight","findMatchingForeground","target","step","candidate","resolveReadableTextColor","backgroundColor","darkText","lightText","darkerMatch","lighterMatch","mixHexColors","startColor","endColor","startWeight","resolveColorCellStyle","lightForeground","light","darkForeground","dark","toDisplayPercent","mixColors","mixedColor","mixThemeColors","undefined","resolveColorScaleValue","stops","isFinite","firstStop","lastStop","endIndex","findIndex","stop","startStop","endStop","ColorScaleCell","$","_c","t0","jsx","Text","isDisplayValue","isString","v","String","isNumber","isBoolean","Boolean","getType","values","comparableValues","sortValue","valueOf","isValidElement","filter","every","isNaN","Date","parse","headerIconProps","boxSize","marginRight","getIcon","type","ChakraIcon","CalendarClock","Type","Hash","CheckCircle2","formatDisplayValue","display","JSON","stringify","columnHelper","createColumnHelper","imageExtensionPattern","imageLabelPattern","humanizeKey","key","words","replace","toLowerCase","toUpperCase","formatPath","path","part","isPrimitiveArray","item","appendJsonFields","fields","Array","isArray","push","label","forEach","index","entries","parseJsonCellValue","buildJsonFields","field","isJsonImageValue","url","URL","protocol","pathname","isJsonImageArray","formatJsonPrimitive","formatJsonValue","getJsonCellSummary","parsedValue","keys","visibleValues","remainingCount","toReadOnlyValue","src","alt","images","image","buildFriendlyJsonParams","id","name","FriendlyJsonDisplay","t1","ParamEditor","stopRowActivation","event","stopPropagation","JsonCell","columnLabel","T0","T1","T2","summary","t10","t11","t2","t3","t4","t5","t6","t7","t8","t9","imageFields","flatMap","_temp","t12","Popover","Root","Symbol","for","placement","offset","mainAxis","Trigger","Button","HStack","_temp2","Braces","t13","ChevronRight","t14","t15","t16","overscrollBehavior","t17","Portal","ScrollArea","t18","field_0","Image","getSortValue","compareValues","valueA","valueB","localeCompare","toSingleLineElement","element","cloneElement","style","flexWrap","minWidth","whiteSpace","stopControlPropagation","SelectionHeader","table","checked","getIsAllRowsSelected","isIndeterminate","getIsSomeRowsSelected","Minus","Check","details","toggleAllRowsSelected","Checkbox","SelectionCell","row","selectedRowIds","toggleSelected","RowActionsCell","actions","IconButton","ChevronDown","action","Menu","ListRow","destructive","icon","onSelect","original","jsxs","FormattedCell","displayValue","bb0","chakra","DataCell","renderer","resolveDataCellStyle","buildColumns","data","columnKeys","options","columnIcons","columnDescriptions","compactHeaders","enableSelection","rowActions","columnRenderers","rowIndexColumn","accessor","_row","rowIndex","header","enableResizing","size","cell","info","getValue","selectionColumn","enableSorting","dataColumns","fallBackKey","columnValues","customIcon","headerIcon","columnDescription","headerLabel","Tooltip","CircleHelp","meta","getCellStyle","sortingFn","rowA","rowB","rowActionsColumn","DataTableColumnMenuRow","column","onColumnVisibilityChange","attributes","listeners","setNodeRef","transform","transition","isDragging","useSortable","CSS","Transform","opacity","bg","GripVertical","Box","Icon","DataTableColumnMenu","columns","visibleColumnIds","showStats","statsAvailable","onColumnReorder","onStatsVisibilityChange","triggerRef","useRef","contentRef","open","setOpen","useState","query","setQuery","activationConstraint","distance","sensors","useSensors","useSensor","PointerSensor","normalizedQuery","includes","filteredColumns","active","over","handleDragEnd","closeOnOutsidePointerDown","event_0","Node","current","contains","closeOnEscape","event_1","document","addEventListener","removeEventListener","useEffect","getAnchorElement","Settings2","Switch","role","SearchableMenuInput","column_1","has","Stack","SortableContext","verticalListSortingStrategy","DndContext","closestCenter","column_0","DataTableHeader","rows","storageKey","columnControl","viewMode","KanbanRendererToolbar","defaultPageSize","resolveDataTableRowId","getRowId","resolveInitialPageSize","initialPageSize","getSelectedOriginalRows","resolveSelectionActions","selectionActions","onCSVDownload","shouldEnableSelection","selectionMode","shouldHighlightActiveRow","enableRowActivation","activeRowId","rowId","toAttributeValue","raw","isNumberColumn","columnKey","resolveAttributeType","kind","buildDataTableRendererAttributes","filterable","sortable","displayable","buildDataTableRendererRows","fromEntries","firstValue","title","sourceRow","filterDataTableRows","filters","filterRows","resolveDataTableColumnOrder","availableColumnIds","requestedColumnOrder","availableColumnIdSet","Set","orderedColumnIds","columnId","orderedColumnIdSet","missingColumnIds","reorderDataTableColumns","columnIds","activeColumnId","overColumnId","activeIndex","indexOf","overIndex","nextColumnIds","activeColumn","splice","resolveDataTableToolbarStorageKey","toolbarStorageKey","StatChartCrosshair","coordinate","useActiveTooltipCoordinate","plotArea","usePlotArea","y","height","x","width","DataTableStatChart","dataKey","ariaLabel","tooltipLabel","tooltipValue","tooltipSeriesLabel","layout","categoryKey","domain","barSize","barCategoryGap","series","chart","useChart","datum","getBarValue","datum_0","getCategoryValue","top","right","bottom","left","Fragment","XAxis","YAxis","Bar","payload","datum_1","Chart","zIndex","RechartsTooltip","BarChart","t19","getStatValue","getColumnStatValues","countUniqueStatValues","buildTopValuesStat","limit","counts","Map","set","get","groups","count","percentage","sort","topGroups","otherCount","reduce","total","group","buildHistogramStat","binCount","binWidth","bins","from","_","binIndex","floor","formatNumber","Intl","NumberFormat","maximumFractionDigits","format","STAT_CHART_COLOR","SingleValueStat","Flex","UniqueStat","HistogramStat","histogram","valueCount","_temp3","TopValuesStat","_temp6","DataTableStat","stat","DataTableStatCell","headerGroup","columnStats","fullWidth","borderRight","headers","Table","DataTableStatsRow","noBorder","some","header_0","bin","bin_0","_temp4","_temp5","utilityColumnIds","getSortMenuIcon","sortDirection","ArrowUpAZ","ArrowDownAZ","MoreVertical","DataTableColumnHeader","hasDescription","canSortColumn","getIsSorted","getCoreRowModel","SortIcon","flexRender","columnDef","getContext","tooltipContent","visibility","toggleSorting","clearSorting","getCanResize","onDoubleClick","resetSize","onMouseDown","getResizeHandler","onTouchStart","className","getIsResizing","DataTableCellView","getCellContextMenuActions","columnMeta","cellStyle","cellContext","onClick","contextActions","cellElement","ResourceContextMenu","DataTableBodyRow","rowIsInteractive","rowIsActive","rowIsSelected","onRowClick","borderBottom","borderColor","getVisibleCells","PaginationFooter","pageIndex","pageSize","pageSizeOptions","getPageCount","totalPages","canGoBack","canGoForward","option","setPageSize","setPageIndex","ChevronsLeft","ChevronLeft","t20","t21","t22","t23","ChevronsRight","t24","t25","t26","t27","next","valueAsNumber","clamped","t28","NumberInputField","t29","NumberInputRoot","t30","t31","t32","t33","SelectionToolbar","selectedCount","totalCount","onClearSelection","onSelectAll","selectedRows","actionLabel","X","DataTable","hiddenColumns","isRowInteractive","sorting","setSorting","pagination","setPagination","rowSelection","setRowSelection","setShowStats","columnOrder","setColumnOrder","propHiddenColumnsSet","hiddenColumnMenuIds","setHiddenColumnMenuIds","hiddenColumnsSet","baseColumnKeys","orderedBaseColumnKeys","rendererAttributes","rendererRows","resolvedToolbarStorageKey","useKanbanRendererStore","state","settings","filteredData","useReactTable","defaultColumn","minSize","maxSize","columnResizeMode","columnResizeDirection","onSortingChange","onPaginationChange","onRowSelectionChange","getSortedRowModel","getPaginationRowModel","enableMultiRowSelection","enableRowSelection","autoResetAll","pageCount","columnSizeVars","getFlatHeaders","colSizes","i","getSize","getSelectedRowModel","allRows","selectedOriginalRows","visible","delete","add","getTotalSize","getHeaderGroups","getRowModel","getIsSelected","cellWidths","DataTableSkeleton","columnCount","rowCount","__0","columnIndex","Skeleton"],"mappings":"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"}
|